<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4306704057846428012</id><updated>2012-01-23T08:36:20.222+04:00</updated><category term='Cryptography'/><category term='Online Service'/><category term='GWT'/><category term='AWT'/><category term='SQL'/><category term='Game'/><category term='AJAX'/><category term='Windows'/><category term='Oracle'/><category term='ImageMagic'/><category term='HTTP'/><category term='Shell script'/><category term='JAXB'/><category term='Flex'/><category term='Money'/><category term='Telecom'/><category term='Spring'/><category term='Apache'/><category term='Action Script'/><category term='WinAPI'/><category term='ExtJS'/><category term='Windows 7'/><category term='JNI'/><category term='JBoss Portal'/><category term='Ecology'/><category term='JVM'/><category term='IDEA'/><category term='MySQL'/><category term='CSS'/><category term='C/C++'/><category term='Project'/><category term='UML'/><category term='XML'/><category term='Design'/><category term='FreeBSD'/><category term='Java'/><category term='GoogleBot'/><category term='LDAP'/><category term='Open Source'/><category term='JDBC'/><category term='PHP'/><category term='Tomcat'/><category term='Portlet'/><category term='PostgreSQL'/><category term='RegExp'/><category term='3D'/><category term='Maven'/><category term='Database'/><category term='Linux'/><category term='Proxy'/><category term='Eclipse'/><category term='HTML'/><category term='MXML'/><category term='Hardware'/><category term='RTF'/><category term='Literature'/><category term='MIDI'/><category term='JavaScript'/><category term='Site'/><category term='Blog'/><category term='Ant'/><category term='SWT'/><title type='text'>Xantorohara</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>90</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-4039359148512569703</id><published>2011-10-07T13:28:00.005+04:00</published><updated>2011-10-07T14:18:36.400+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Java 7</title><content type='html'>Great enhancement: binary literals and underscores:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;int netaddr = 0b11000000_10101000_00000000_00000000; //192.168.0.0&lt;br /&gt;int netmask = 0xFF_FF_FF_00; //255.255.255.0&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-4039359148512569703?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/4039359148512569703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=4039359148512569703' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4039359148512569703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4039359148512569703'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2011/10/java-7.html' title='Java 7'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-4935115809192668459</id><published>2011-10-07T12:54:00.004+04:00</published><updated>2011-10-07T13:28:12.565+04:00</updated><title type='text'>My big vacations</title><content type='html'>Now I have a big vacation between my past and future jobs.&lt;br /&gt;I traveled to Turkey and had a big fun: climbing to the mountains, trip to antic cities, free-diving and driving buggy. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-qFzYqX2ecnU/To7Fzc2Gv5I/AAAAAAAAA-Y/hTRs9nulxcI/s1600/DSCN4839.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/-qFzYqX2ecnU/To7Fzc2Gv5I/AAAAAAAAA-Y/hTRs9nulxcI/s320/DSCN4839.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5660679269358419858" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-8YCmObq-IhE/To7FwHA2kLI/AAAAAAAAA-Q/J8Lp0FPQm98/s1600/DSCN5657.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 180px;" src="http://3.bp.blogspot.com/-8YCmObq-IhE/To7FwHA2kLI/AAAAAAAAA-Q/J8Lp0FPQm98/s320/DSCN5657.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5660679211958309042" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-_fFYErLCfkg/To7Fqlh3yJI/AAAAAAAAA-I/jdrjv9UCN48/s1600/DSCN4773.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/-_fFYErLCfkg/To7Fqlh3yJI/AAAAAAAAA-I/jdrjv9UCN48/s320/DSCN4773.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5660679117070649490" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-4935115809192668459?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/4935115809192668459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=4935115809192668459' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4935115809192668459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4935115809192668459'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2011/10/my-big-vacations.html' title='My big vacations'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-qFzYqX2ecnU/To7Fzc2Gv5I/AAAAAAAAA-Y/hTRs9nulxcI/s72-c/DSCN4839.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-5344213096982750835</id><published>2011-10-03T13:41:00.002+04:00</published><updated>2011-10-03T13:56:17.429+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows 7'/><title type='text'>MySQL Workbench crashes on startup under Windows 7 64-bit</title><content type='html'>MySQL Workbench crashes on startup.&lt;br /&gt;&lt;br /&gt;This problem appears because of normal users install 64-bit libraries (.Net Framework and Visual C++ Redistributable) for 64-bit Windows 7.&lt;br /&gt;&lt;br /&gt;But MySQL Workbench compiled with 32-bit binaries and required 32-bit libraries. So you have to install Microsoft Visual C++ Redistributable x86 (!not x64).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-5344213096982750835?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/5344213096982750835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=5344213096982750835' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/5344213096982750835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/5344213096982750835'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2011/10/mysql-workbench-crashes-on-startup.html' title='MySQL Workbench crashes on startup under Windows 7 64-bit'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-4745837798703999398</id><published>2011-07-08T14:21:00.003+04:00</published><updated>2011-07-08T14:30:40.129+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>Spring: annotation driven and configured scheduler</title><content type='html'>Properties file (file.properties):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;...&lt;br /&gt;manager.cron=0 */1 * * * ?&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Application context (context.xml)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;context:property-placeholder location="file.properties"/&amp;gt;&lt;br /&gt;&amp;lt;task:annotation-driven/&amp;gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Bean:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;@Component&lt;br /&gt;public class Manager {&lt;br /&gt;...&lt;br /&gt;    @Scheduled(cron = "${manager.cron}")&lt;br /&gt;    public void doSomething() {&lt;br /&gt;        log.info("doSomething");&lt;br /&gt;    }&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-4745837798703999398?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/4745837798703999398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=4745837798703999398' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4745837798703999398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4745837798703999398'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2011/07/spring-annotation-driven-and-configured.html' title='Spring: annotation driven and configured scheduler'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-482873642628999259</id><published>2010-11-17T15:46:00.003+03:00</published><updated>2010-11-17T15:52:22.038+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Action Script'/><title type='text'>AMF3 expected int but got double</title><content type='html'>Surprise :-)&lt;br /&gt;&lt;br /&gt;Max AMF3 value for integer = 268435456.&lt;br /&gt;&lt;br /&gt;In AMF3 integers are serialized using a variable length unsigned 29-bit integer. The ActionScript integer types - a signed 'int' type and an unsigned 'uint' type - are also represented using 29-bits. If the value of an unsigned integer (uint) is greater or equal to 22^9 or if the value of a signed integer (int) is greater than or equal to 22^8 then it will be represented as a double and thus serialized in using the AMF3 double type.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-482873642628999259?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/482873642628999259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=482873642628999259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/482873642628999259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/482873642628999259'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2010/11/amf3-expected-int-but-got-double.html' title='AMF3 expected int but got double'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-4925376053152496275</id><published>2010-11-10T12:00:00.002+03:00</published><updated>2010-11-10T12:07:15.387+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Flex: load external CSS</title><content type='html'>&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Create and compile css file (&lt;code&gt;mxmlc -static-rsls=true -output=out/style.swf src/style.css&lt;/code&gt;)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Load this style file from the application (&lt;code&gt;styleManager.loadStyleDeclarations('style.swf')&lt;/code&gt;;)&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-4925376053152496275?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/4925376053152496275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=4925376053152496275' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4925376053152496275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4925376053152496275'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2010/11/flex-load-external-css.html' title='Flex: load external CSS'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-8120981743237891382</id><published>2010-03-28T01:27:00.004+03:00</published><updated>2010-03-28T01:34:21.058+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Flex compiler locale</title><content type='html'>In order to switch flex compiler messages to US locale put this string &lt;b&gt;"-Duser.language=en -Duser.region=US"&lt;/b&gt; into the $FLEX_HOME/bin/jvm.config file.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;...&lt;br /&gt;java.args=-Xmx384m -Dsun.io.useCanonCaches=false &lt;b&gt;-Duser.language=en -Duser.region=US&lt;/b&gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-8120981743237891382?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/8120981743237891382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=8120981743237891382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/8120981743237891382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/8120981743237891382'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2010/03/flex-compiler-locale.html' title='Flex compiler locale'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-6439679090130381345</id><published>2010-01-25T20:24:00.001+03:00</published><updated>2010-01-25T20:36:13.565+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><title type='text'>Enable disabled menu in browser</title><content type='html'>Execute this from the address line:&lt;br /&gt;&lt;code&gt;javascript: (function(){document.oncontextmenu=function(){return true;}})()&lt;/code&gt;&lt;br /&gt;or&lt;br /&gt;&lt;code&gt;javascript: (function(){function test(){return true;}; document.oncontextmenu=test;document.onselectstart=test;document.oncontextmenu=test;})()&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-6439679090130381345?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/6439679090130381345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=6439679090130381345' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/6439679090130381345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/6439679090130381345'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2010/01/enable-disabled-menu-in-browser.html' title='Enable disabled menu in browser'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-2406863151382504440</id><published>2009-08-17T18:13:00.002+04:00</published><updated>2009-08-17T18:16:45.978+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='FreeBSD'/><title type='text'>Download FreeBSD packages with dependencies</title><content type='html'>Just code, no comments:&lt;br /&gt;&lt;pre style="color: #333; border:dashed 1px #999; background-color:#CCC; padding:8px;"&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;#Where to save downloaded packages&lt;br /&gt;$dir = '/tmp/packages';&lt;br /&gt;&lt;br /&gt;#FTP server with all packages&lt;br /&gt;$ftp = 'ftp://ftp6.ru.freebsd.org/pub/FreeBSD/ports/i386/packages-7.2-release/All';&lt;br /&gt; &lt;br /&gt;#Target packages we need to retrieve &lt;br /&gt;$packages = array(&lt;br /&gt;    'bash-3.2.48_1',&lt;br /&gt;    'bzip2-1.0.5',&lt;br /&gt;    'curl-7.19.4',&lt;br /&gt;    'mc-4.6.2',&lt;br /&gt;    'mysql-server-5.0.77_1',&lt;br /&gt;    'php5-mysqli-5.2.9',&lt;br /&gt;    'postgresql-server-8.3.7',&lt;br /&gt;    'vim-7.2.132',&lt;br /&gt;    'wget-1.11.4',&lt;br /&gt;    'zip-3.0'&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;#Load packages info from previously downloaded INDEX file (ftp://ftp6.ru.freebsd.org/pub/FreeBSD/ports/i386/packages-7.2-release/All/INDEX) &lt;br /&gt;function get_tree() {&lt;br /&gt;    $handle = fopen('INDEX', 'r');&lt;br /&gt;    $tree = array();&lt;br /&gt;    while (($data = fgetcsv($handle, 0, '|')) !== FALSE) {&lt;br /&gt;        $tree[$data[0]] = $data[8];&lt;br /&gt;    }&lt;br /&gt;    fclose($handle);&lt;br /&gt;    return $tree;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$tree = get_tree();&lt;br /&gt;&lt;br /&gt;#Calculate dependencies&lt;br /&gt;for ($i = 0; $i &amp;lt; sizeof($packages); $i++) {&lt;br /&gt;    if (isset($tree, $packages[$i])) {&lt;br /&gt;        $deps = explode(' ', $tree[$packages[$i]]);&lt;br /&gt;        foreach ($deps as $dep) {&lt;br /&gt;            if (strlen($dep)&amp;gt;0 &amp;amp;&amp;amp; !in_array($dep, $packages)) {&lt;br /&gt;                $packages[] = $dep;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#Downloading&lt;br /&gt;foreach ($packages as $package) {&lt;br /&gt;    file_put_contents($dir.'/'.$package.'.tbz', file_get_contents($ftp.'/'.$package.'.tbz'));&lt;br /&gt;    echo "$package.tbz\n";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-2406863151382504440?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/2406863151382504440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=2406863151382504440' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2406863151382504440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2406863151382504440'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2009/08/download-freebsd-packages-with.html' title='Download FreeBSD packages with dependencies'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-1888648134836774050</id><published>2009-08-14T13:42:00.000+04:00</published><updated>2009-08-14T13:43:10.633+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FreeBSD'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>Make local FreeBSD mirror via rsync</title><content type='html'>rsync -va --delete --progress ftp.nl.FreeBSD.org::FreeBSD/ports/i386/packages-7.2-release/ FreeBSD-7.2-i386&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-1888648134836774050?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/1888648134836774050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=1888648134836774050' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/1888648134836774050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/1888648134836774050'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2009/08/make-local-freebsd-mirror-via-rsync.html' title='Make local FreeBSD mirror via rsync'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-2751135912048925455</id><published>2009-08-13T13:19:00.003+04:00</published><updated>2009-08-13T13:31:59.439+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='JAXB'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>Bind XML to Java classes</title><content type='html'>Just follow this example:&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;cbr_daily.xml&lt;br /&gt;&lt;pre style="color: #333; border:dashed 1px #999; background-color:#CCC; padding:8px;"&gt;&amp;lt;ValCurs Date="30/05/2009" name="Foreign Currency Market"&amp;gt;&lt;br /&gt;    &amp;lt;Valute ID="R01035"&amp;gt;&lt;br /&gt;        &amp;lt;NumCode&amp;gt;826&amp;lt;/NumCode&amp;gt;&lt;br /&gt;        &amp;lt;CharCode&amp;gt;GBP&amp;lt;/CharCode&amp;gt;&lt;br /&gt;        &amp;lt;Nominal&amp;gt;1&amp;lt;/Nominal&amp;gt;&lt;br /&gt;        &amp;lt;Name&amp;gt;Фунт стерлингов Соединенного королевства&amp;lt;/Name&amp;gt;&lt;br /&gt;        &amp;lt;Value&amp;gt;49,7887&amp;lt;/Value&amp;gt;&lt;br /&gt;    &amp;lt;/Valute&amp;gt;&lt;br /&gt;    &amp;lt;Valute ID="R01235"&amp;gt;&lt;br /&gt;        &amp;lt;NumCode&amp;gt;840&amp;lt;/NumCode&amp;gt;&lt;br /&gt;        &amp;lt;CharCode&amp;gt;USD&amp;lt;/CharCode&amp;gt;&lt;br /&gt;        &amp;lt;Nominal&amp;gt;1&amp;lt;/Nominal&amp;gt;&lt;br /&gt;        &amp;lt;Name&amp;gt;Доллар США&amp;lt;/Name&amp;gt;&lt;br /&gt;        &amp;lt;Value&amp;gt;30,9843&amp;lt;/Value&amp;gt;&lt;br /&gt;    &amp;lt;/Valute&amp;gt;&lt;br /&gt;    &amp;lt;Valute ID="R01239"&amp;gt;&lt;br /&gt;        &amp;lt;NumCode&amp;gt;978&amp;lt;/NumCode&amp;gt;&lt;br /&gt;        &amp;lt;CharCode&amp;gt;EUR&amp;lt;/CharCode&amp;gt;&lt;br /&gt;        &amp;lt;Nominal&amp;gt;1&amp;lt;/Nominal&amp;gt;&lt;br /&gt;        &amp;lt;Name&amp;gt;Евро&amp;lt;/Name&amp;gt;&lt;br /&gt;        &amp;lt;Value&amp;gt;43,3780&amp;lt;/Value&amp;gt;&lt;br /&gt;    &amp;lt;/Valute&amp;gt;&lt;br /&gt;&amp;lt;/ValCurs&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;ValCursType.java&lt;br /&gt;&lt;pre style="color: #333; border:dashed 1px #999; background-color:#CCC; padding:8px;"&gt;package xqx;&lt;br /&gt;&lt;br /&gt;import java.util.List;&lt;br /&gt;import javax.xml.bind.annotation.XmlAttribute;&lt;br /&gt;import javax.xml.bind.annotation.XmlElement;&lt;br /&gt;import javax.xml.bind.annotation.XmlRootElement;&lt;br /&gt;import javax.xml.bind.annotation.XmlType;&lt;br /&gt;&lt;br /&gt;@XmlRootElement(name = "ValCurs")&lt;br /&gt;@XmlType(name = "ValCursType")&lt;br /&gt;public class ValCursType {&lt;br /&gt;&lt;br /&gt;    @XmlElement(name = "Valute")&lt;br /&gt;    public List&amp;lt;ValuteType&amp;gt; valuteType;&lt;br /&gt;&lt;br /&gt;    @XmlAttribute(name = "Date")&lt;br /&gt;    public String date;&lt;br /&gt;&lt;br /&gt;    @XmlAttribute&lt;br /&gt;    public String name;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;ValuteType.java&lt;br /&gt;&lt;pre style="color: #333; border:dashed 1px #999; background-color:#CCC; padding:8px;"&gt;package xqx;&lt;br /&gt;&lt;br /&gt;import javax.xml.bind.annotation.*;&lt;br /&gt;&lt;br /&gt;@XmlRootElement(name = "Valute")&lt;br /&gt;@XmlType(name = "ValuteType")&lt;br /&gt;public class ValuteType {&lt;br /&gt;    @XmlElement(name = "NumCode")&lt;br /&gt;    public String numCode;&lt;br /&gt;&lt;br /&gt;    @XmlElement(name = "CharCode")&lt;br /&gt;    public String charCode;&lt;br /&gt;&lt;br /&gt;    @XmlElement(name = "Nominal")&lt;br /&gt;    public int nominal;&lt;br /&gt;&lt;br /&gt;    @XmlElement(name = "Name")&lt;br /&gt;    public String name;&lt;br /&gt;&lt;br /&gt;    @XmlElement(name = "Value")&lt;br /&gt;    public String value;&lt;br /&gt;&lt;br /&gt;    @XmlAttribute(name = "ID")&lt;br /&gt;    public String id;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;CbrCurrencyTask.java&lt;br /&gt;&lt;pre style="color: #333; border:dashed 1px #999; background-color:#CCC; padding:8px;"&gt;package xqx;&lt;br /&gt;&lt;br /&gt;import ...;&lt;br /&gt;&lt;br /&gt;public class CbrCurrencyTask {&lt;br /&gt;&lt;br /&gt;    ...&lt;br /&gt;    //stream - For example FileInputStream created from the "cbr_daily.xml" file&lt;br /&gt;    protected ValCursType parse(InputStream stream) throws JAXBException {&lt;br /&gt;        JAXBContext jaxbContext = JAXBContext.newInstance(ValCursType.class);&lt;br /&gt;        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();&lt;br /&gt;&lt;br /&gt;        ValCursType valCursType = (ValCursType) unmarshaller.unmarshal(stream);&lt;br /&gt;        return valCursType;&lt;br /&gt;    }&lt;br /&gt;    ...&lt;br /&gt;    &lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Simple! Isn't it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-2751135912048925455?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/2751135912048925455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=2751135912048925455' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2751135912048925455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2751135912048925455'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2009/08/bind-xml-to-java-classes.html' title='Bind XML to Java classes'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-7347396765014257342</id><published>2009-08-13T13:01:00.000+04:00</published><updated>2009-08-13T13:03:15.240+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FreeBSD'/><title type='text'>Mount CD in FreeBSD</title><content type='html'>See all disks:&lt;br /&gt;&lt;code&gt;atacontrol list&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Mount:&lt;br /&gt;&lt;code&gt;mount -t cd9660 /dev/acd0 /cdrom&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-7347396765014257342?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/7347396765014257342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=7347396765014257342' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7347396765014257342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7347396765014257342'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2009/08/mount-cd-in-freebsd.html' title='Mount CD in FreeBSD'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-2166976267720716015</id><published>2009-07-27T17:21:00.003+04:00</published><updated>2009-08-13T12:59:05.309+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='JDBC'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>JDBC: Postgres enums and prepared statements</title><content type='html'>There is simple way how to map Java enums to PostgreSQL enums via JDBC's prepared statements.&lt;br /&gt;&lt;br /&gt;For example we have these PostgreSQL enum and table definitions:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;CREATE TYPE log_level AS ENUM ('INFO', 'WARN', 'ERROR');&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;CREATE TABLE logs (&lt;br /&gt;  id SERIAL PRIMARY KEY,&lt;br /&gt;  message VARCHAR(255) NOT NULL,&lt;br /&gt;  level log_level NOT NULL,&lt;br /&gt;);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And Java enum:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;public enum LogLevel {&lt;br /&gt;    INFO, WARN, ERROR&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This form of prepared statement should work:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;LogLevel logLevel = LogLevel.INFO;&lt;br /&gt;PreparedStatement sql = conn.prepareStatement("INSERT INTO logs (message, log_level) VALUES (?, ?::log_level)");&lt;br /&gt;sql.setString(1, "Hello world");&lt;br /&gt;//sql.setString(2, "INFO");&lt;br /&gt;sql.setString(2, logLevel.name());&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-2166976267720716015?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/2166976267720716015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=2166976267720716015' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2166976267720716015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2166976267720716015'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2009/07/jdbc-postgres-enums-and-prepared.html' title='JDBC: Postgres enums and prepared statements'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-8010065653887097098</id><published>2009-02-28T22:58:00.008+03:00</published><updated>2009-02-28T23:16:06.617+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><title type='text'>Get browser language via JavaScript</title><content type='html'>This is simple cross-browser solution:&lt;br /&gt;&lt;p style="color: red; border:dashed 1px #999; background-color:#eee; padding:4px; font-size:small;"&gt;&lt;code&gt;var lang = (navigator.language || navigator.systemLanguage || navigator.userLanguage || 'en').substr(0, 2).toLowerCase();&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;&lt;br /&gt;And usage example:&lt;br /&gt;&lt;p style="color: red; border:dashed 1px #999; background-color:#eee; padding:4px; font-size:small;"&gt;&lt;code&gt;var lang = (navigator.language || navigator.systemLanguage || navigator.userLanguage || 'en').substr(0, 2).toLowerCase();&lt;br /&gt;if (lang == 'ru') {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.write('Specific Russian text');&lt;br /&gt;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.write('Common English text');&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-8010065653887097098?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/8010065653887097098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=8010065653887097098' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/8010065653887097098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/8010065653887097098'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2009/02/get-browsers-language-via-javascript.html' title='Get browser language via JavaScript'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-2196180104888128689</id><published>2009-02-24T00:11:00.007+03:00</published><updated>2009-02-24T00:39:13.995+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJS'/><category scheme='http://www.blogger.com/atom/ns#' term='RegExp'/><title type='text'>PHP-reference</title><content type='html'>I'm happy to introduce one more my project: &lt;a href="http://php-reference.110mb.com/"&gt;PHP-reference&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This is the interactive engine for PHP documentation: the client side is implemented with ExtJS/JavaScript, and PHP for server side.&lt;br /&gt;It uses original PHP documentation (processed via regexps and colored with CSS styles) as a data source.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ruD_KHp6My0/SaMSWIa0gCI/AAAAAAAAA8c/xELC48y0Xos/s1600-h/screen.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 307px;" src="http://2.bp.blogspot.com/_ruD_KHp6My0/SaMSWIa0gCI/AAAAAAAAA8c/xELC48y0Xos/s400/screen.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5306104957398974498" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've tried to create it as usable as possible... any requests, ideas welcome!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-2196180104888128689?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/2196180104888128689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=2196180104888128689' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2196180104888128689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2196180104888128689'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2009/02/php-reference.html' title='PHP-reference'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ruD_KHp6My0/SaMSWIa0gCI/AAAAAAAAA8c/xELC48y0Xos/s72-c/screen.PNG' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-597248258954038500</id><published>2009-02-18T18:58:00.005+03:00</published><updated>2009-02-18T19:27:33.023+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>TOAD connection problem under Windows XP x64</title><content type='html'>I've catch this problem with my installation of &lt;b&gt;TOAD&lt;/b&gt; (and with &lt;b&gt;PLSQL Developer&lt;/b&gt;) under &lt;b&gt;Windows XP 64-bit&lt;/b&gt; edition:&lt;br /&gt;&lt;i&gt;"ORA-12154: TNS:could not resolve the connect identifier specified"&lt;/i&gt; (but under Windows XP 32-bit all OK).&lt;br /&gt;&lt;br /&gt;And here is the simplest solution:&lt;br /&gt;run TOAD via command line using short path: &lt;span style="color:red;"&gt;&lt;code&gt;C:\PROGRA~2\QUESTS~1\TOAD\TOAD.exe&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;instead of long: &lt;span style="text-decoration:line-through;"&gt;&lt;code&gt;C:\Program Files (x86)\Quest Software\TOAD\TOAD.exe&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately Windows doesn't allow to change desktop's shortcut from long mode to short (Windows always expands short paths).&lt;br /&gt;&lt;br /&gt;Or... move TOAD from "Program Files (x86)" to "Program Files" directory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-597248258954038500?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/597248258954038500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=597248258954038500' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/597248258954038500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/597248258954038500'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2009/02/toad-problem-under-windowsxp-64-bit.html' title='TOAD connection problem under Windows XP x64'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-6165704049152720673</id><published>2009-01-19T15:31:00.001+03:00</published><updated>2009-01-19T15:33:15.766+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Run java with non-system locale</title><content type='html'>&lt;code&gt;java -Duser.language=en -Duser.region=US JavaClass&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-6165704049152720673?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/6165704049152720673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=6165704049152720673' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/6165704049152720673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/6165704049152720673'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2009/01/run-java-with-non-system-locale.html' title='Run java with non-system locale'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-7849453573156422170</id><published>2008-11-19T15:40:00.004+03:00</published><updated>2008-11-19T15:51:40.794+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Proxy'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Maven repository through socks proxy</title><content type='html'>There is the solution how to access remote maven repository through socks proxy.&lt;br /&gt;&lt;br /&gt;Just put this string:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;set MAVEN_OPTS=-DsocksProxyHost=yourSocksProxyHost -DsocksProxyPort=yourSocksProxyPort&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;to the beginning of the &lt;i&gt;"apache-maven-2.x.x\bin\mvn.bat"&lt;/i&gt; file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-7849453573156422170?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/7849453573156422170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=7849453573156422170' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7849453573156422170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7849453573156422170'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/11/maven-repository-through-socks-proxy.html' title='Maven repository through socks proxy'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-9127770000446245210</id><published>2008-11-08T03:42:00.002+03:00</published><updated>2008-11-08T03:46:57.128+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Project'/><title type='text'>Core icons</title><content type='html'>New project: &lt;a href="http://xantorohara.110mb.com/core-icons/"&gt;Core icons&lt;/a&gt; - evolution of &lt;a href="http://xantorohara.blogspot.com/2008/10/eclipse-icons.html"&gt;Eclipse icons&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ruD_KHp6My0/SRTgzBhp11I/AAAAAAAAA7E/RysYgMFhiVo/s1600-h/core-icons.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 256px; height: 186px;" src="http://4.bp.blogspot.com/_ruD_KHp6My0/SRTgzBhp11I/AAAAAAAAA7E/RysYgMFhiVo/s400/core-icons.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5266081031490492242" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-9127770000446245210?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/9127770000446245210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=9127770000446245210' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/9127770000446245210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/9127770000446245210'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/11/core-icons.html' title='Core icons'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ruD_KHp6My0/SRTgzBhp11I/AAAAAAAAA7E/RysYgMFhiVo/s72-c/core-icons.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-4000132639699047387</id><published>2008-10-24T02:58:00.007+04:00</published><updated>2008-10-24T13:56:21.671+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='ImageMagic'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Eclipse icons</title><content type='html'>Now pictures from &lt;a href="http://www.eclipse.org"&gt;Eclipse&lt;/a&gt; are available at my &lt;a href="http://xantorohara.110mb.com/eclipse-icons/"&gt;Eclipse icons&lt;/a&gt; page:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ruD_KHp6My0/SQGHf_F6E_I/AAAAAAAAApo/wX8t86ZsO7U/s1600-h/eclipse-icons.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 312px;" src="http://1.bp.blogspot.com/_ruD_KHp6My0/SQGHf_F6E_I/AAAAAAAAApo/wX8t86ZsO7U/s400/eclipse-icons.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5260634823327355890" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've created it in few steps:&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Downloaded and unzipped eclipse&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Extracted all images from eclipse directories, subdirectories, zips and jars*&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Filtered only unique files*&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Sorted images by dimension (16x16, 24x24, 32x32, etc.)*&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Removed large images (that not look like icon)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Created html pages (via PHP script)&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;* Via my shell scripts.&lt;br /&gt;&lt;br /&gt;This is one script from this project:&lt;br /&gt;&lt;p style="color: red; border:dashed 1px #999; background-color:#eee; padding:4px; font-size:small;"&gt;&lt;code&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;#Find and copy only unique files (with same size and checksums) from $SOURCE directory to $OUTPUT.&lt;br /&gt;&lt;br /&gt;SOURCE=output&lt;br /&gt;OUTPUT=images&lt;br /&gt;&lt;br /&gt;rm -rf $OUTPUT&lt;br /&gt;mkdir -p $OUTPUT&lt;br /&gt;&lt;br /&gt;uniqProcess() {&lt;br /&gt;    &lt;br /&gt;    echo &amp;gt;xqx_unique.idx&lt;br /&gt;    while read; do&lt;br /&gt;        echo -ne \\r$REPLY&lt;br /&gt;        echo $REPLY  $(stat -c%s $REPLY)+$(md5sum $REPLY|cut -f 1 -d ' ')+$(cksum $REPLY|cut -f 1 -d ' ')&amp;gt;&amp;gt;xqx_unique.idx&lt;br /&gt;    done&lt;br /&gt;    sort -k 2 xqx_unique.idx|uniq -f 1|cut -f 1 -d ' '|xargs -I '{}' cp '{}' $OUTPUT&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;find $SOURCE -type f |uniqProcess&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-4000132639699047387?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/4000132639699047387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=4000132639699047387' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4000132639699047387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4000132639699047387'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/10/eclipse-icons.html' title='Eclipse icons'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ruD_KHp6My0/SQGHf_F6E_I/AAAAAAAAApo/wX8t86ZsO7U/s72-c/eclipse-icons.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-1110760714430354009</id><published>2008-10-19T02:15:00.001+04:00</published><updated>2008-10-19T02:55:24.897+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Online Service'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Tema Siseg</title><content type='html'>One more online service - &lt;a href="http://xantorohara.110mb.com/temasiseg/"&gt;Tema Siseg&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Tema Siseg - online service for conversion of image to HTML table&lt;br /&gt;Service returns HTML table with amount of cells = amount of pixels in the image.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ruD_KHp6My0/SPpo-m86EWI/AAAAAAAAApg/qFz1MkTqRvg/s1600-h/temasiseg.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_ruD_KHp6My0/SPpo-m86EWI/AAAAAAAAApg/qFz1MkTqRvg/s400/temasiseg.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5258630939725664610" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The main idea of this service: Converting image from regular formats to HTML. Now it is possible to show images when it disabled in the browser, to inline images into web pages, and to transfer images through web filters.&lt;br /&gt;&lt;br /&gt;Commercial offers? Welcome!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-1110760714430354009?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/1110760714430354009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=1110760714430354009' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/1110760714430354009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/1110760714430354009'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/10/tema-siseg.html' title='Tema Siseg'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ruD_KHp6My0/SPpo-m86EWI/AAAAAAAAApg/qFz1MkTqRvg/s72-c/temasiseg.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-526819049907661598</id><published>2008-10-17T00:40:00.005+04:00</published><updated>2008-10-17T01:35:14.854+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>emc</title><content type='html'>One more mine project: &lt;a href="http://xantorohara.110mb.com/emc"&gt;emc&lt;/a&gt; - remote file navigator.&lt;br /&gt;&lt;br /&gt;It developed on:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Client side - Flex&lt;/li&gt;&lt;li&gt;Server side - PHP&lt;br /&gt;&lt;/li&gt;&lt;li&gt;RPC container - XML&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ruD_KHp6My0/SPevrGqH5tI/AAAAAAAAApY/4Ofsa1141WU/s1600-h/screenshot.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_ruD_KHp6My0/SPevrGqH5tI/AAAAAAAAApY/4Ofsa1141WU/s400/screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5257864245034870482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is just beta version.&lt;br /&gt;&lt;br /&gt;It is possible to release complete version (add new functionality or  implement another Server side, for example). And I'm looking for the people, who want to use this in their commercial projects.&lt;br /&gt;If you are interested in it, &lt;a href="mailto:xantorohara@gmail.com"&gt;write me&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-526819049907661598?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/526819049907661598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=526819049907661598' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/526819049907661598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/526819049907661598'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/10/emc.html' title='emc'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ruD_KHp6My0/SPevrGqH5tI/AAAAAAAAApY/4Ofsa1141WU/s72-c/screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-415814260124584782</id><published>2008-10-09T02:02:00.003+04:00</published><updated>2008-10-10T02:41:52.510+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Online Service'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Cryptography'/><category scheme='http://www.blogger.com/atom/ns#' term='Project'/><title type='text'>MD5 online decryption service</title><content type='html'>Last week I released new online service: &lt;a href="http://md5online.110mb.com/"&gt;MD5 Online&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It provides online encryption and decryption functionality of MD5 hashes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-415814260124584782?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/415814260124584782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=415814260124584782' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/415814260124584782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/415814260124584782'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/10/md5-online-decryption-service.html' title='MD5 online decryption service'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-8995286584318592522</id><published>2008-09-20T20:32:00.002+04:00</published><updated>2008-09-20T20:43:51.862+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Action Script'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Flex - autoscrolable text area</title><content type='html'>Need TextArea with automatic scrolling to bottom?&lt;br /&gt;This is not trivial, but simple:&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;emc\components\AutoScrollableTextArea.as&lt;br /&gt;&lt;pre style="color: #333; border:dashed 1px #999; background-color:#CCC; padding:8px;"&gt;package emc.components {&lt;br /&gt;import mx.controls.TextArea;&lt;br /&gt;&lt;br /&gt;public class AutoScrollableTextArea extends TextArea {&lt;br /&gt;    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void&lt;br /&gt;    {&lt;br /&gt;        super.updateDisplayList(unscaledWidth, unscaledHeight);&lt;br /&gt;        verticalScrollPosition = textField.numLines;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;For example, it is useful for outputting log information.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-8995286584318592522?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/8995286584318592522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=8995286584318592522' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/8995286584318592522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/8995286584318592522'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/09/flex-autoscrolable-text-area.html' title='Flex - autoscrolable text area'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-573544708239153555</id><published>2008-09-18T23:24:00.017+04:00</published><updated>2008-09-19T00:28:31.891+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>PHP - roots list</title><content type='html'>Unfortunately, I don't know another way how to resolve all roots (drives) under Windows:&lt;br /&gt;&lt;pre style="color: #333; border:dashed 1px #999; background-color:#CCC; padding:8px;"&gt;public function getRoots() {&lt;br /&gt;    $roots = array();&lt;br /&gt;    for ($i='A'; $i&amp;lt;'Z'; $i++) {&lt;br /&gt;        $disk=$i.':\\';&lt;br /&gt;        if (is_dir($disk) &amp;amp;&amp;amp; is_readable($disk))&lt;br /&gt;        $roots[] = $disk;&lt;br /&gt;    }&lt;br /&gt;    return $roots;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Somebody know?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-573544708239153555?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/573544708239153555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=573544708239153555' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/573544708239153555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/573544708239153555'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/09/php-roots-list.html' title='PHP - roots list'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-2146890621390046551</id><published>2008-09-18T23:24:00.014+04:00</published><updated>2008-09-19T00:17:18.840+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MXML'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Namespaces for custom Flex components</title><content type='html'>Flex (MXML) allow to declare custom components via xmlns declaration.&lt;br /&gt;Like this:&lt;br /&gt;&lt;pre&gt;&amp;lt;mx:Box xmlns:mx="http://www.adobe.com/2006/mxml"&lt;br /&gt;         xmlns:emc="emc.components.navigator.*"&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This way is useful when amount of custom components not too much and all components are located in the one or two packages.&lt;br /&gt;&lt;br /&gt;But what about real namespaces like in Flex itself ("xmlns:mx="http://www.adobe.com/2006/mxml"); for huge amount of components?&lt;br /&gt;&lt;br /&gt;It is possible to consolidate declaration of all components in the single file.&lt;br /&gt;Like this:&lt;br /&gt;&lt;hr/&gt;manifest.xml &lt;br /&gt;&lt;pre style="color: #333; border:dashed 1px #999; background-color:#CCC; padding:8px;"&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;componentPackage&amp;gt;&lt;br /&gt;    &amp;lt;component id="Navigator" class="emc.components.navigator.Navigator"/&amp;gt;&lt;br /&gt;    &amp;lt;component id="Editor" class="emc.components.editor.Editor"/&amp;gt;&lt;br /&gt;    &amp;lt;component id="Console" class="emc.components.console.Console"/&amp;gt;&lt;br /&gt;    &amp;lt;component id="SmartTruncableLabel" class="emc.components.SmartTruncableLabel"/&amp;gt;&lt;br /&gt;    &amp;lt;component id="AutoScrollableTextArea" class="emc.components.AutoScrollableTextArea"/&amp;gt;&lt;br /&gt;&amp;lt;/componentPackage&amp;gt;&lt;br /&gt;&lt;/pre&gt;put this file into the project sources directory and add this argument to the MXML compiler:&lt;br /&gt;&lt;pre&gt;-namespace=http://xantorohara.110mb.com/emc,sources/manifest.xml&lt;/pre&gt;and then use this components in the MXML files via this declaration:&lt;br /&gt;&lt;pre&gt;&amp;lt;mx:Box xmlns:mx="http://www.adobe.com/2006/mxml"&lt;br /&gt;         xmlns:emc="http://xantorohara.110mb.com/emc"&amp;gt;&lt;/pre&gt;and insert component into your application:&lt;br /&gt;&lt;pre style="color: #333; border:dashed 1px #999; background-color:#CCC; padding:8px;"&gt;...&lt;br /&gt;&amp;lt;emc:SmartTruncableLabel id="titleLabel" styleName="filePanelTitleLabel" width="100%" /&amp;gt;&lt;br /&gt;...&lt;/pre&gt;&lt;br /&gt;How do you like it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-2146890621390046551?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/2146890621390046551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=2146890621390046551' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2146890621390046551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2146890621390046551'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/09/namespaces-for-custom-flex-components.html' title='Namespaces for custom Flex components'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-7528670798420228402</id><published>2008-09-18T23:24:00.009+04:00</published><updated>2008-09-18T23:46:58.690+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>Simple URL rewrite rule for Apache</title><content type='html'>These strings in the ".htaccess" file redirect HTTP query from "worker.xml" file to "worker.php":&lt;br /&gt;&lt;pre style="color: #333; border:dashed 1px #999; background-color:#CCC; padding:8px;"&gt;RewriteEngine on&lt;br /&gt;RewriteBase /worker&lt;br /&gt;RewriteRule worker.xml worker.php&lt;/pre&gt;&lt;br /&gt;So, it is possible to create XML (or another) facade around PHP (or another) server-side implementation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-7528670798420228402?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/7528670798420228402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=7528670798420228402' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7528670798420228402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7528670798420228402'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/09/simple-url-rewrite-rule-for-apache.html' title='Simple URL rewrite rule for Apache'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-3625985892741809543</id><published>2008-09-18T23:24:00.005+04:00</published><updated>2008-09-18T23:38:19.485+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Enable Flex trace logging</title><content type='html'>Just create "C:\Documents and Settings\{UserName}\mm.cfg" file &lt;br /&gt;with this content:&lt;br /&gt;&lt;pre style="color: #333; border:dashed 1px #999; background-color:#CCC; padding:8px;"&gt;ErrorReportingEnable=1&lt;br /&gt;TraceOutputFileEnable=1&lt;/pre&gt;and you will see Flex trace output in the "C:\Documents and Settings\{UserName}\Application Data\Macromedia\Flash Player\Logs\" directory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-3625985892741809543?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/3625985892741809543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=3625985892741809543' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/3625985892741809543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/3625985892741809543'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/09/enable-flex-trace-logging.html' title='Enable Flex trace logging'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-7141861909639424329</id><published>2008-09-18T23:24:00.002+04:00</published><updated>2008-09-18T23:32:42.271+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>PHP - exec output</title><content type='html'>This is the simple way how to capture exec output:&lt;br /&gt;&lt;pre style="color: #333; border:dashed 1px #999; background-color:#CCC; padding:8px;"&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;function execOutput($command) {&lt;br /&gt;    $output = array($command);&lt;br /&gt;    exec($command.' 2&amp;gt;&amp;amp;1', $output);&lt;br /&gt;    return implode("\n", $output);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;echo execOutput('help');&lt;br /&gt;?&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-7141861909639424329?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/7141861909639424329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=7141861909639424329' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7141861909639424329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7141861909639424329'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/09/php-exec-output.html' title='PHP - exec output'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-7775363652746214919</id><published>2008-09-01T23:32:00.004+04:00</published><updated>2008-09-01T23:51:15.985+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>Access logging under Tomcat</title><content type='html'>Do you want to get "access.log" file under Apache Tomcat Server as well as under Apache HTTP Server? Like this:&lt;br /&gt;&lt;pre&gt;192.168.1.1 - - [25/Aug/2008:15:08:11 +0400] "GET / HTTP/1.1" 200 82777&lt;br /&gt;192.168.1.1 - - [25/Aug/2008:15:08:11 +0400] "GET /js/event-debug.js HTTP/1.1" 200 88582&lt;br /&gt;192.168.1.1 - - [25/Aug/2008:15:08:11 +0400] "GET /js/history-debug.js HTTP/1.1" 200 28540&lt;br /&gt;192.168.1.1 - - [25/Aug/2008:15:08:11 +0400] "GET /js/prototype.js HTTP/1.1" 200 126120&lt;br /&gt;192.168.1.1 - - [25/Aug/2008:15:08:11 +0400] "GET /js/json2.js HTTP/1.1" 200 9490&lt;br /&gt;192.168.1.1 - - [25/Aug/2008:15:08:12 +0400] "GET /css/app.css HTTP/1.1" 200 1937&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Just insert one line into the "Engine" section of the "server.xml" file:&lt;br /&gt;&lt;pre style="color: #333; border:dashed 1px #999; background-color:#CCC; padding:8px;"&gt;&amp;lt;Engine name="Catalina" defaultHost="localhost"&amp;gt;&lt;br /&gt;...&lt;br /&gt;    &amp;lt;Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="access." suffix=".log" pattern="common"/&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;/Engine&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Also it is possible to collect and filter the set of raised files via this script:&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;access.sh&lt;br /&gt;&lt;pre style="color: #333; border:dashed 1px #999; background-color:#CCC; padding:8px;"&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;cat access.log | cut -f2 -d"\"" access.log | cut -f2 -d" " | egrep -v -f ignore.txt | sort&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;ignore.txt&lt;br /&gt;&lt;pre style="color: #333; border:dashed 1px #999; background-color:#CCC; padding:8px;"&gt;^/$&lt;br /&gt;^/JSON-RPC$&lt;br /&gt;^/JSON-RPC-GET\?&lt;br /&gt;//Any other patterns&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-7775363652746214919?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/7775363652746214919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=7775363652746214919' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7775363652746214919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7775363652746214919'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/09/access-logging-under-tomcat.html' title='Access logging under Tomcat'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-2452191346258543175</id><published>2008-09-01T23:01:00.004+04:00</published><updated>2008-09-01T23:15:38.623+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='IDEA'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>HowTo run IntelliJ IDEA from the RAM-Drive under Linux</title><content type='html'>Sometimes people need to run IntelliJ IDEA at "readonly" systems.&lt;br /&gt;"Readonly" I mean - without unpacking IDEA into the local file system.&lt;br /&gt;&lt;br /&gt;These scripts will help extract and start IDEA from the RAM-Drive and remove it after using:&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;idea-setup.sh &lt;br /&gt;&lt;pre style="color: #333; border:dashed 1px #999; background-color:#CCC; padding:8px;"&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;IDEA_TAR_GZ=~/downloads/idea-7.0.3.tar.gz&lt;br /&gt;IDEA_HOME=~/idea/idea&lt;br /&gt;export JDK_HOME=/usr/lib/jvm/java-6-sun&lt;br /&gt;export REQUIRED_JVM_ARGS="-Didea.system.path=$IDEA_HOME/system -Didea.config.path=$IDEA_HOME/config"&lt;br /&gt;      &lt;br /&gt;mkdir $IDEA_HOME&lt;br /&gt;&lt;br /&gt;sudo mount -t ramfs none $IDEA_HOME&lt;br /&gt;tar -xz --strip 1 --file $IDEA_TAR_GZ -C $IDEA_HOME&lt;br /&gt;&lt;br /&gt;$IDEA_HOME/bin/idea.sh&lt;br /&gt;&lt;br /&gt;./idea-clean.sh&lt;/pre&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;idea-clean.sh&lt;br /&gt;&lt;pre style="color: #333; border:dashed 1px #999; background-color:#CCC; padding:8px;"&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;IDEA_HOME=~/idea/idea&lt;br /&gt;&lt;br /&gt;sudo umount $IDEA_HOME&lt;br /&gt;rm -rf $IDEA_HOME&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Of course you should buy IntelliJ IDEA license, get open source license or... use evaluation version.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-2452191346258543175?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/2452191346258543175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=2452191346258543175' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2452191346258543175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2452191346258543175'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/09/howto-run-intellij-idea-from-ram-drive.html' title='HowTo run IntelliJ IDEA from the RAM-Drive under Linux'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-8673247230351467050</id><published>2008-08-22T17:22:00.009+04:00</published><updated>2008-10-14T01:59:22.541+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ImageMagic'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><category scheme='http://www.blogger.com/atom/ns#' term='RegExp'/><title type='text'>HowTo find inconsistency between image format and file extension</title><content type='html'>Sometimes image files have inconsistency between format and extension.&lt;br /&gt;For example: .jpeg file saved as .png file.&lt;br /&gt;&lt;br /&gt;I wrote simple script in order to find such files:&lt;br /&gt;&lt;pre style="color: #333; border:dashed 1px #999; background-color:#CCC; padding:8px;"&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;process() {&lt;br /&gt;    while read; do&lt;br /&gt;        diff=`identify -format "%m %e" "$REPLY" | tr [A-Z] [a-z] | egrep -v "^(png png|gif gif|jpg jpg|jpeg jpg|jpeg jpeg)"`&lt;br /&gt;        test -n "$diff" &amp;amp;&amp;amp; echo $diff $REPLY&lt;br /&gt;    done&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;find -type f -iregex ".*\.\(png\|gif\|jpg\|jpeg\)$" | process&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;It outputs information about real file format, file extension and filename in case of  &lt;br /&gt;difference between format and extension.&lt;br /&gt;Like this:&lt;pre&gt;&lt;br /&gt;jpeg png images/rating_0.png&lt;br /&gt;png gif images/left.gif&lt;br /&gt;gif png images/border_tr.png&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-8673247230351467050?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/8673247230351467050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=8673247230351467050' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/8673247230351467050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/8673247230351467050'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/08/howto-find-inconsistency-between-image.html' title='HowTo find inconsistency between image format and file extension'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-952816834436196980</id><published>2008-07-11T11:57:00.003+04:00</published><updated>2008-07-11T12:20:09.414+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='HTTP'/><title type='text'>Sources of com.sun.net.httpserver.HttpServer</title><content type='html'>Sun JRE contains implementation of simple HTTP server.&lt;br /&gt;(in &lt;b&gt;the com.sun.net.httpserver&lt;/b&gt; and &lt;b&gt;sun.net.httpserver&lt;/b&gt; packages)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But this "HttpServer":&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Not a part of Java API.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;It is Sun's proprietary component&lt;/li&gt;&lt;br /&gt;&lt;li&gt;It works only under Sun JRE &gt;=1.6&lt;/li&gt;&lt;br /&gt;&lt;li&gt;His sources are available only as a part of &lt;i&gt;Standard Edition Development Kit Source Release&lt;/i&gt; under &lt;i&gt;Java Research License&lt;/i&gt;&lt;br /&gt;(see Java™ Platform, Standard Edition 6u3 Source Snapshot Releases &lt;a href="http://download.java.net/jdk6/6u3/promoted/b05/index.html"&gt;jdk-6u3-fcs-src-b05-jrl-24_sep_2007&lt;/a&gt;)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;But sometimes this implementation is pretty useful (for example &lt;a href="http://tosamoepalevo.blogspot.com/2008/07/java-simple-http-server.html"&gt;here&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-952816834436196980?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/952816834436196980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=952816834436196980' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/952816834436196980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/952816834436196980'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/07/sources-of-comsunnethttpserverhttpserve.html' title='Sources of com.sun.net.httpserver.HttpServer'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-8004852052346288688</id><published>2008-06-24T00:39:00.002+04:00</published><updated>2008-06-24T00:46:03.673+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>String from base64 string, to base64 string in Java</title><content type='html'>This is very simple:&lt;br /&gt;&lt;p style="color: red; border:dashed 1px #999; background-color:#eee; padding:4px; font-size:small;"&gt;&lt;code&gt;&lt;br /&gt;import sun.misc.BASE64Decoder;&lt;br /&gt;import sun.misc.BASE64Encoder;&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;public static String fromBase64(String in) throws IOException {&lt;br /&gt; return new String(new BASE64Decoder().decodeBuffer(in));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public static String toBase64(String in) {&lt;br /&gt; return new String(new BASE64Encoder().encodeBuffer(in.getBytes()));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-8004852052346288688?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/8004852052346288688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=8004852052346288688' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/8004852052346288688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/8004852052346288688'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/06/string-from-base64-string-to-base64.html' title='String from base64 string, to base64 string in Java'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-4861175729524723981</id><published>2008-06-24T00:29:00.003+04:00</published><updated>2008-06-24T00:32:59.739+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><title type='text'>Latin</title><content type='html'>Sometimes I use this latin text as dummy content in my projects:&lt;br /&gt;&lt;br /&gt;"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed felis. Suspendisse vestibulum elit et sapien. Phasellus massa. Nam molestie placerat orci. In eu purus in eros eleifend luctus. Phasellus pede lacus, cursus nec, sollicitudin quis, vehicula in, metus. Vestibulum justo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Suspendisse justo erat, eleifend ut, tempor quis, placerat vitae, justo. Vestibulum varius, libero et hendrerit pharetra, risus felis dapibus nibh, ac varius tortor odio vel quam. Morbi at velit ac purus pretium ornare. Suspendisse at nibh id purus interdum cursus. Donec feugiat egestas sem. Aenean nisl. Aliquam erat volutpat. Vestibulum et magna. Sed lacinia odio vel pede. Ut eleifend, ante vestibulum suscipit sagittis, pede lorem mollis dolor, eget pulvinar tortor libero eu mauris.&lt;br /&gt;&lt;br /&gt;Donec sollicitudin sollicitudin leo. Aenean diam dolor, semper sit amet, malesuada quis, sodales sed, nulla. Nunc aliquam purus vitae est. Pellentesque ut est at sem imperdiet consectetuer. In eros. Nullam pulvinar. Sed risus urna, pharetra ornare, gravida nec, venenatis quis, nisl. Nullam euismod mauris. Praesent ut ipsum quis augue faucibus malesuada. Proin dui mauris, condimentum sit amet, ultricies non, interdum eget, mi.&lt;br /&gt;&lt;br /&gt;In rutrum, neque et consectetuer semper, dolor ligula rhoncus lectus, eu egestas nunc quam ut est. Morbi quis turpis adipiscing dui pharetra commodo. Nullam pulvinar nibh non lectus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi blandit arcu ac urna. Suspendisse felis erat, gravida sed, pulvinar sed, ullamcorper in, purus. Mauris libero. Donec eros neque, tempus a, malesuada sed, ullamcorper a, leo. Pellentesque cursus, sem a pretium porta, mi magna faucibus mauris, sit amet porta quam pede vitae neque. In fermentum, neque et volutpat euismod, arcu libero luctus est, in euismod augue est porttitor mauris. Vivamus a lorem sit amet erat tempus convallis. Integer malesuada odio vitae libero. Proin aliquam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Nunc sodales. Praesent at sem ac purus commodo faucibus. Nam ultricies neque ultrices tortor molestie cursus. Phasellus eget lectus. Maecenas semper dolor et turpis.&lt;br /&gt;&lt;br /&gt;Nam iaculis, pede sit amet nonummy dignissim, nulla tellus condimentum mi, vitae mattis mi felis in mi. Mauris et nulla at tellus porttitor posuere. Duis erat ante, bibendum ut, pulvinar in, adipiscing ac, nunc. Sed volutpat augue ac pede. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Suspendisse potenti. Curabitur lectus. Suspendisse ultrices, arcu sed condimentum congue, leo elit aliquam risus, et interdum leo erat sit amet ante. Aliquam ac tellus. Proin ut felis. Curabitur volutpat sagittis lacus. Pellentesque tempus tincidunt pede.&lt;br /&gt;&lt;br /&gt;Duis leo metus, consectetuer ac, posuere id, iaculis quis, massa. Curabitur pellentesque, pede sit amet pellentesque feugiat, odio justo condimentum eros, non mollis augue ante at ipsum. Nunc iaculis eros eu nibh. Nunc ligula sem, semper id, fringilla et, mollis a, ante. Maecenas viverra nibh sit amet nunc. Aenean rhoncus ante ut nibh. Duis hendrerit lorem sed enim. Donec et velit vitae leo rutrum faucibus. Donec mi. Proin laoreet, tellus at placerat nonummy, erat tellus lobortis metus, luctus sagittis enim urna sit amet odio. Praesent vitae ligula quis velit sagittis iaculis.&lt;br /&gt;&lt;br /&gt;Aliquam consequat justo. Nulla facilisi. Mauris eget magna. Donec hendrerit imperdiet libero. Aliquam tincidunt libero sit amet diam suscipit auctor. Phasellus sit amet risus et pede mollis faucibus. Nunc nec purus quis augue pulvinar commodo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Ut porttitor vestibulum lacus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Maecenas congue.&lt;br /&gt;&lt;br /&gt;In hac habitasse platea dictumst. Vestibulum vestibulum facilisis neque. Nunc id elit ut orci volutpat convallis. Vivamus vel urna. Etiam auctor. Pellentesque suscipit eros sit amet purus. Proin cursus dolor id felis. Donec venenatis, nisl sit amet consequat condimentum, tortor leo faucibus risus, ut fermentum ipsum felis nec nibh. Suspendisse mattis adipiscing felis. Maecenas eu magna. Nulla eros odio, nonummy nec, volutpat ut, auctor ac, lacus. Sed nec est. Donec libero est, auctor eu, molestie eu, lacinia ut, elit. Suspendisse quis orci."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-4861175729524723981?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/4861175729524723981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=4861175729524723981' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4861175729524723981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4861175729524723981'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/06/latin.html' title='Latin'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-6356194235886617809</id><published>2008-06-18T00:15:00.004+04:00</published><updated>2008-06-18T00:25:33.525+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><title type='text'>HowTo override and substitute document.write function in JavaScript (sample)</title><content type='html'>It is pretty simple to wrap &lt;b&gt;document.write&lt;/b&gt; function in JavaScript.&lt;br /&gt;&lt;br /&gt;For example - using closures:&lt;br /&gt;&lt;div style="color: red; border:dashed 1px #999; background-color:#eee; padding:4px; font-size:small;"&gt;&lt;pre&gt;&amp;lt;script id="source" type="text/javascript"&amp;gt;&lt;br /&gt;    function wrapString(str) {&lt;br /&gt;        return "(" + str + ")";&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    document.write = function(w) {&lt;br /&gt;        return function(s) {&lt;br /&gt;            w.call(this, wrapString(s));&lt;br /&gt;        }&lt;br /&gt;    }(document.write);&lt;br /&gt;&lt;br /&gt;    document.write("Hello");&lt;br /&gt;    document.write("world");&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;This "advanced piece of engineering" prints string: &lt;i&gt;(Hello)(world)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;How do you like it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-6356194235886617809?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/6356194235886617809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=6356194235886617809' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/6356194235886617809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/6356194235886617809'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/06/howto-override-and-substitute.html' title='HowTo override and substitute document.write function in JavaScript (sample)'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-8846761642546164392</id><published>2008-06-15T14:09:00.001+04:00</published><updated>2008-06-15T14:15:24.464+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>HowTo batch remove temporaty files from directory and subdirectories</title><content type='html'>Just create &lt;b&gt;.bat&lt;/b&gt; file with this content:&lt;br /&gt;&lt;p style="color: red; border:dashed 1px #999; background-color:#eee; padding:4px; font-size:small;"&gt;&lt;code&gt;@set path=&lt;br /&gt;@for /R %%i in (*.tmp *.bak) do @del %%i&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;&lt;br /&gt;and update &lt;b&gt;(*.tmp *.bak)&lt;/b&gt; section with your set of files or masks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-8846761642546164392?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/8846761642546164392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=8846761642546164392' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/8846761642546164392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/8846761642546164392'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/06/howto-batch-remove-temporaty-files-from.html' title='HowTo batch remove temporaty files from directory and subdirectories'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-2135211989208633625</id><published>2008-04-27T01:32:00.005+04:00</published><updated>2008-04-27T01:44:15.839+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GoogleBot'/><category scheme='http://www.blogger.com/atom/ns#' term='HTTP'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>HowTo simulate Googlebot</title><content type='html'>Googlebot is Google's web crawling robot, which finds and retrieves pages on the web and hands them off to the Google indexer.&lt;br /&gt;Googlebot visits sites with special value in his HTTP request header.&lt;br /&gt;&lt;br /&gt;It uses special user-agent string:&lt;br /&gt;"&lt;b&gt;&lt;i&gt;Mozilla/5.0 (compatible; Googlebot/2.1;  http://www.google.com/bot.html)&lt;/i&gt;&lt;/b&gt;"&lt;br /&gt;&lt;br /&gt;It is possible to simulate Googlebot from the shell script via &lt;b&gt;wget&lt;/b&gt; program.&lt;br /&gt;&lt;br /&gt;Like this:&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size:small;"&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;TEST_URL="http://digg.com/"&lt;br /&gt;&lt;br /&gt;FIREFOX_USERAGENT_STRING="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14"&lt;br /&gt;GOOGLEBOT_USERAGENT_STRING="Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"&lt;br /&gt;&lt;br /&gt;#get page for firefox browser&lt;br /&gt;wget -c --user-agent="$FIREFOX_USERAGENT_STRING" --output-document=firefox.html "$TEST_URL"&lt;br /&gt;&lt;br /&gt;#get page for google bot&lt;br /&gt;wget -c --user-agent="$GOOGLEBOT_USERAGENT_STRING" --output-document=googlebot.html "$TEST_URL"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This script may be useful for testing of site's search engine optimization.&lt;br /&gt;&lt;br /&gt;...May the Force be with you...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-2135211989208633625?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/2135211989208633625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=2135211989208633625' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2135211989208633625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2135211989208633625'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/04/howto-simulate-googlebot.html' title='HowTo simulate Googlebot'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-2661276341769617509</id><published>2008-02-28T00:47:00.007+03:00</published><updated>2008-02-28T01:14:28.158+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJS'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Xml elements and attributes in the ExtJS table</title><content type='html'>&lt;a href="http://extjs.com/"&gt;Ext JS - JavaScript Library&lt;/a&gt; is pretty powerful JavaScript/AJAX framework for building of Rich Internet Applications.&lt;br /&gt;&lt;br /&gt;I've used it in my last public web project: &lt;a href="http://xantorohara.110mb.com/ubuntuindex/"&gt;Ubuntu index&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ruD_KHp6My0/R8Xbe09-SRI/AAAAAAAAAj8/ZtdjNCa-BGM/s1600-h/ubuntuindex.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ruD_KHp6My0/R8Xbe09-SRI/AAAAAAAAAj8/ZtdjNCa-BGM/s400/ubuntuindex.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5171781069766019346" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ExtJS has set of useful UI controls, internal components and strong AJAX, XML and JSON support.&lt;br /&gt;&lt;br /&gt;E.g. you can present this XML file:&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;items.xml&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;items&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;item id="alien-arena"&amp;gt;&lt;br /&gt;        &amp;lt;name&amp;gt;Alien Arena&amp;lt;/name&amp;gt;&lt;br /&gt;    &amp;lt;/item&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;item id="nexuiz"&amp;gt;&lt;br /&gt;        &amp;lt;name&amp;gt;Nexuiz&amp;lt;/name&amp;gt;&lt;br /&gt;    &amp;lt;/item&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;item id="openarena"&amp;gt;&lt;br /&gt;        &amp;lt;name&amp;gt;OpenArena&amp;lt;/name&amp;gt;&lt;br /&gt;    &amp;lt;/item&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/items&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;as a table via this HTML + JavaScript code:&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;table.html&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;    &amp;lt;title&amp;gt;ExtJS Table Sample&amp;lt;/title&amp;gt;&lt;br /&gt;    &amp;lt;link rel="stylesheet" type="text/css" href="ext/resources/css/ext-all.css"/&amp;gt;&lt;br /&gt;    &amp;lt;script type="text/javascript" src="ext/adapter/ext/ext-base.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;    &amp;lt;script type="text/javascript" src="ext/ext-all.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;    Ext.onReady(function() {&lt;br /&gt;        var reader = new Ext.data.XmlReader({record: "item"},&lt;br /&gt;                [{name: "id", mapping:"@id"}, "name"]);&lt;br /&gt;&lt;br /&gt;        var store = new Ext.data.Store({url: "items.xml", reader: reader});&lt;br /&gt;&lt;br /&gt;        var columnModel = new Ext.grid.ColumnModel([&lt;br /&gt;        {header: "Id", dataIndex: "id"},&lt;br /&gt;        {header: "Name", dataIndex: "name"}]);&lt;br /&gt;&lt;br /&gt;        var table = new Ext.grid.GridPanel({&lt;br /&gt;            store: store,&lt;br /&gt;            height: 200,&lt;br /&gt;            cm: columnModel,&lt;br /&gt;            renderTo: "table"&lt;br /&gt;        });&lt;br /&gt;        store.load();&lt;br /&gt;    });&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;div id="table" style="width:300px; height:200px;"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here is the browser's view:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ruD_KHp6My0/R8XbT09-SQI/AAAAAAAAAj0/7xH6UrcXqdM/s1600-h/table.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ruD_KHp6My0/R8XbT09-SQI/AAAAAAAAAj0/7xH6UrcXqdM/s400/table.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5171780880787458306" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-2661276341769617509?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/2661276341769617509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=2661276341769617509' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2661276341769617509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2661276341769617509'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/02/xml-elements-and-attributes-in-extjs.html' title='Xml elements and attributes in the ExtJS table'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_ruD_KHp6My0/R8Xbe09-SRI/AAAAAAAAAj8/ZtdjNCa-BGM/s72-c/ubuntuindex.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-8696281540431925912</id><published>2008-01-22T02:53:00.000+03:00</published><updated>2008-01-22T03:04:19.045+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Linux reference</title><content type='html'>I found really useful documentation for Linux beginners.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;a href="http://qref.sourceforge.net/"&gt;"This Debian Reference (http://qref.sourceforge.net/)&lt;/a&gt; is intended to provide a broad overview of the Debian system as a post-installation user’s guide. It covers many aspects of system administration through shell-command examples. Basic tutorials, tips, and other information are provided for topics including fundamental concepts of the Debian system, system installation hints, Debian package management, the Linux kernel under Debian, system tuning, building a gateway, text editors, CVS, programming, and GnuPG for non-developers."&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This book is devoted to Debian system but it is topical for some other Linux systems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-8696281540431925912?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/8696281540431925912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=8696281540431925912' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/8696281540431925912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/8696281540431925912'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/01/linux-reference.html' title='Linux reference'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-7511826595717934045</id><published>2008-01-22T01:50:00.000+03:00</published><updated>2008-01-22T02:32:03.421+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Game'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>StarCraft (Brood War) under Linux (Wine)</title><content type='html'>I use this script to play network StarCraft under wine:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;#At first, run "wine setup.exe"&lt;br /&gt;&lt;br /&gt;BROODWAR_HOME=/usr/games/broodwar&lt;br /&gt;&lt;br /&gt;ipx_interface add -p eth0 802.2 0x39ab0222&lt;br /&gt;cd $BROODWAR_HOME&lt;br /&gt;xinit /usr/bin/wine starcraft.exe&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I think it is the best game.&lt;br /&gt;&lt;div style="text-align: right;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/R5UqiX5a7QI/AAAAAAAAAbA/qEyXJbXR7HU/s1600-h/sclogo.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: right; cursor: pointer;" src="http://bp2.blogger.com/_ruD_KHp6My0/R5UqiX5a7QI/AAAAAAAAAbA/qEyXJbXR7HU/s400/sclogo.gif" alt="" id="BLOGGER_PHOTO_ID_5158075718241545474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-7511826595717934045?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/7511826595717934045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=7511826595717934045' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7511826595717934045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7511826595717934045'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/01/starcraft-brood-war-under-linux-wine.html' title='StarCraft (Brood War) under Linux (Wine)'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_ruD_KHp6My0/R5UqiX5a7QI/AAAAAAAAAbA/qEyXJbXR7HU/s72-c/sclogo.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-5073686853626223289</id><published>2008-01-22T01:43:00.000+03:00</published><updated>2008-01-22T01:48:15.387+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>Flash-light from console</title><content type='html'>With this script I use my monitor as flash-light in the darkness.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;#Switch monitor (CRT or LCD) to flash-light mode.&lt;br /&gt;&lt;br /&gt;echo -e "\\033[47;30m"&lt;br /&gt;clear&lt;br /&gt;read&lt;br /&gt;echo -e "\\033[0m"&lt;br /&gt;clear&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-5073686853626223289?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/5073686853626223289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=5073686853626223289' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/5073686853626223289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/5073686853626223289'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/01/flash-light-from-console.html' title='Flash-light from console'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-5620396866847636742</id><published>2008-01-16T19:03:00.000+03:00</published><updated>2008-01-16T19:09:14.505+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='JVM'/><title type='text'>Java processes viewer</title><content type='html'>There is a way how to retrieve information about all running JVMs.&lt;br /&gt;Since Java 1.5 Sun provides sources of &lt;b&gt;jvmstat&lt;/b&gt; classes for JVM monitoring.&lt;br /&gt;&lt;br /&gt;I've created simple program that is used these classes.&lt;br /&gt;It detects all running JVMs and prints their information.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;JavaPS.java&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import java.util.Set;&lt;br /&gt;import sun.jvmstat.monitor.HostIdentifier;&lt;br /&gt;import sun.jvmstat.monitor.MonitoredHost;&lt;br /&gt;import sun.jvmstat.monitor.MonitoredVm;&lt;br /&gt;import sun.jvmstat.monitor.StringMonitor;&lt;br /&gt;import sun.jvmstat.monitor.VmIdentifier;&lt;br /&gt;&lt;br /&gt;public class JavaPS {&lt;br /&gt;    private static final String[] vmProperties = new String[]{&lt;br /&gt;            "java.property.java.vm.name",&lt;br /&gt;            "java.property.java.vm.vendor",&lt;br /&gt;            "java.property.java.vm.version",&lt;br /&gt;            "java.property.java.home",&lt;br /&gt;            "java.property.java.class.path",&lt;br /&gt;            "java.rt.vmArgs",&lt;br /&gt;            "java.rt.vmFlags",&lt;br /&gt;            "sun.rt.javaCommand"};&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        Set jvms;&lt;br /&gt;        MonitoredHost monitoredHost;&lt;br /&gt;&lt;br /&gt;        try {&lt;br /&gt;            monitoredHost = MonitoredHost.getMonitoredHost(new HostIdentifier("localhost"));&lt;br /&gt;            jvms = monitoredHost.activeVms();&lt;br /&gt;        } catch (Exception e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;            return;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        for (Object jvm : jvms) {&lt;br /&gt;            int jvmid = (Integer) jvm;&lt;br /&gt;            System.out.println("Process ID: \t" + String.valueOf(jvmid));&lt;br /&gt;            try {&lt;br /&gt;                VmIdentifier id = new VmIdentifier("//" + jvmid + "?mode=r");&lt;br /&gt;                MonitoredVm vm = monitoredHost.getMonitoredVm(id, 0);&lt;br /&gt;                for (String vmProperty : vmProperties) {&lt;br /&gt;                    System.out.println(vmProperty + ": \t"&lt;br /&gt;                            + ((StringMonitor) vm.findByName(vmProperty)).stringValue());&lt;br /&gt;                }&lt;br /&gt;                System.out.println();&lt;br /&gt;                monitoredHost.detach(vm);&lt;br /&gt;            } catch (Exception e) {&lt;br /&gt;                e.printStackTrace();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Aliases for virtual machine's properties have been taken from jdk1.5 sources (jdk-1_5_0-src-scsl.zip) from the file j2se\src\share\classes\sun\jvmstat\perfdata\resources\aliasmap.&lt;br /&gt;&lt;br /&gt;Compile this code via command:&lt;br /&gt;   &lt;code&gt;javac -classpath %JAVA_HOME%\lib\tools.jar JavaPS.java&lt;/code&gt;&lt;br /&gt;and run:&lt;br /&gt;   &lt;code&gt;java -classpath .;%JAVA_HOME%\lib\tools.jar JavaPS &amp;gt;JavaPS.txt&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:small; color:red;"&gt;jvmstat package locates in tools.jar&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Example of results output:&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;JavaPS.txt&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Process ID:  2144&lt;br /&gt;java.property.java.vm.name:  Java HotSpot(TM) Client VM&lt;br /&gt;java.property.java.vm.vendor:  Sun Microsystems Inc.&lt;br /&gt;java.property.java.vm.version:  1.6.0_03-b05&lt;br /&gt;java.property.java.home:  C:\Program Files\Java\jre1.6.0_03&lt;br /&gt;java.property.java.class.path:  .;E:\Devel\jdk1.5.0_09\lib\tools.jar&lt;br /&gt;java.rt.vmArgs:  &lt;br /&gt;java.rt.vmFlags:  &lt;br /&gt;sun.rt.javaCommand:  JavaPS&lt;br /&gt;&lt;br /&gt;Process ID:  364&lt;br /&gt;java.property.java.vm.name:  Java HotSpot(TM) Client VM&lt;br /&gt;java.property.java.vm.vendor:  Sun Microsystems Inc.&lt;br /&gt;java.property.java.vm.version:  1.6.0_03-b05&lt;br /&gt;java.property.java.home:  C:\Program Files\Java\jre1.6.0_03&lt;br /&gt;java.property.java.class.path:  SwingSet2.jar&lt;br /&gt;java.rt.vmArgs:  &lt;br /&gt;java.rt.vmFlags:  &lt;br /&gt;sun.rt.javaCommand:  SwingSet2.jar&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-5620396866847636742?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/5620396866847636742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=5620396866847636742' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/5620396866847636742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/5620396866847636742'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/01/java-processes-viewer.html' title='Java processes viewer'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-1049006759757736866</id><published>2008-01-16T00:33:00.000+03:00</published><updated>2008-01-16T01:00:27.725+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='RTF'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>Simple RTF to XML converter</title><content type='html'>RTFEditorKit (javax.swing.text.rtf.RTFEditorKit) from Sun Java API - special class for operations with RTF (Rich Text Format) documents.&lt;br /&gt;&lt;br /&gt;I've created java sample that converts RTF document to XML.&lt;br /&gt;&lt;br /&gt;From:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/R40nNX5a7PI/AAAAAAAAAa4/_m4LEqS2P6Q/s1600-h/rtf.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ruD_KHp6My0/R40nNX5a7PI/AAAAAAAAAa4/_m4LEqS2P6Q/s320/rtf.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5155820259115724018" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;to:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/R40nIX5a7OI/AAAAAAAAAaw/nPi7qIu-Dac/s1600-h/xml.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ruD_KHp6My0/R40nIX5a7OI/AAAAAAAAAaw/nPi7qIu-Dac/s320/xml.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5155820173216378082" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is the source of this converter:&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;Rtf2XML.java&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import javax.swing.text.AbstractDocument.BranchElement;&lt;br /&gt;import javax.swing.text.DefaultStyledDocument;&lt;br /&gt;import javax.swing.text.BadLocationException;&lt;br /&gt;import javax.swing.text.rtf.RTFEditorKit;&lt;br /&gt;import javax.xml.parsers.DocumentBuilderFactory;&lt;br /&gt;import javax.xml.transform.Transformer;&lt;br /&gt;import javax.xml.transform.TransformerFactory;&lt;br /&gt;import javax.xml.transform.dom.DOMSource;&lt;br /&gt;import javax.xml.transform.stream.StreamResult;&lt;br /&gt;import java.io.FileInputStream;&lt;br /&gt;import java.io.FileOutputStream;&lt;br /&gt;import java.io.UnsupportedEncodingException;&lt;br /&gt;&lt;br /&gt;public class Rtf2XML {&lt;br /&gt;    private DefaultStyledDocument rtfSource;&lt;br /&gt;    private org.w3c.dom.Document xmlTarget;&lt;br /&gt;    private org.w3c.dom.Element xmlRoot;&lt;br /&gt;&lt;br /&gt;    private void expandElement(javax.swing.text.Element rtfElement) {&lt;br /&gt;        for (int i = 0; i &amp;lt; rtfElement.getElementCount(); i++) {&lt;br /&gt;            javax.swing.text.Element rtfNextElement = rtfElement.getElement(i);&lt;br /&gt;            if (rtfNextElement.isLeaf()) {&lt;br /&gt;                try {&lt;br /&gt;                    addElement(rtfNextElement);&lt;br /&gt;                } catch (Exception e) {&lt;br /&gt;                    e.printStackTrace();&lt;br /&gt;                }&lt;br /&gt;            } else {&lt;br /&gt;                expandElement(rtfNextElement);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void addElement(javax.swing.text.Element rtfElement)&lt;br /&gt;            throws UnsupportedEncodingException, BadLocationException {&lt;br /&gt;&lt;br /&gt;        String style = new String(rtfSource.getLogicalStyle(rtfElement.getStartOffset())&lt;br /&gt;                .getName().getBytes("ISO-8859-1"));&lt;br /&gt;&lt;br /&gt;        String text = new String(rtfSource.getText(rtfElement.getStartOffset(),&lt;br /&gt;                rtfElement.getEndOffset() - rtfElement.getStartOffset())&lt;br /&gt;                .getBytes("ISO-8859-1"));&lt;br /&gt;&lt;br /&gt;        org.w3c.dom.Element node = xmlTarget.createElement("p");&lt;br /&gt;        node.appendChild(xmlTarget.createTextNode(text));&lt;br /&gt;        node.setAttribute("style", style);&lt;br /&gt;        xmlRoot.appendChild(node);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void convert(String sourceFileName) throws Exception {&lt;br /&gt;        rtfSource = new DefaultStyledDocument();&lt;br /&gt;        RTFEditorKit kit = new RTFEditorKit();&lt;br /&gt;        kit.read(new FileInputStream(sourceFileName), rtfSource, 0);&lt;br /&gt;&lt;br /&gt;        xmlTarget = DocumentBuilderFactory.newInstance()&lt;br /&gt;                .newDocumentBuilder().newDocument();&lt;br /&gt;&lt;br /&gt;        BranchElement rtfRoot = (BranchElement) rtfSource.getDefaultRootElement();&lt;br /&gt;        xmlRoot = xmlTarget.createElement("data");&lt;br /&gt;        expandElement(rtfRoot);&lt;br /&gt;        xmlTarget.appendChild(xmlRoot);&lt;br /&gt;&lt;br /&gt;        Transformer t = TransformerFactory.newInstance().newTransformer();&lt;br /&gt;        t.transform(new DOMSource(xmlTarget),&lt;br /&gt;                new StreamResult(new FileOutputStream(sourceFileName + ".xml")));&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        if (args.length != 1) {&lt;br /&gt;            System.err.println("Usage: *.rtf");&lt;br /&gt;            return;&lt;br /&gt;        }&lt;br /&gt;        try {&lt;br /&gt;            new Rtf2XML().convert(args[0]);&lt;br /&gt;        } catch (Exception e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But RTFEditorKit isn't so powerful and friendly as I want.&lt;br /&gt;I think, &lt;a href="http://itextdocs.lowagie.com/tutorial/rtf/index.php"&gt;iText&lt;/a&gt; will be better for operations with RTF (and other document formats).&lt;br /&gt;&lt;br /&gt;It's the good and free decision.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-1049006759757736866?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/1049006759757736866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=1049006759757736866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/1049006759757736866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/1049006759757736866'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/01/simple-rtf-to-xml-converter.html' title='Simple RTF to XML converter'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_ruD_KHp6My0/R40nNX5a7PI/AAAAAAAAAa4/_m4LEqS2P6Q/s72-c/rtf.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-6030623268567269613</id><published>2008-01-10T00:18:00.000+03:00</published><updated>2008-01-10T00:40:56.375+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Online Service'/><category scheme='http://www.blogger.com/atom/ns#' term='MIDI'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Project'/><title type='text'>Simple Java MIDI synthesizer sample</title><content type='html'>Another multi-media sample - simplest Java MIDI synthesizer.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;MidiSynthesizerSample.java&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import javax.sound.midi.*;&lt;br /&gt;&lt;br /&gt;public class MidiSynthesizerSample {&lt;br /&gt;  public static void main(String[] args) {&lt;br /&gt;      int[] notes = new int[]{60, 62, 64, 65, 67, 69, 71, 72, 72, 71, 69, 67, 65, 64, 62, 60};&lt;br /&gt;      try {&lt;br /&gt;          Synthesizer synthesizer = MidiSystem.getSynthesizer();&lt;br /&gt;          synthesizer.open();&lt;br /&gt;          MidiChannel channel = synthesizer.getChannels()[0];&lt;br /&gt;&lt;br /&gt;          for (int note : notes) {&lt;br /&gt;              channel.noteOn(note, 50);&lt;br /&gt;              try {&lt;br /&gt;                  Thread.sleep(200);&lt;br /&gt;              } catch (InterruptedException e) {&lt;br /&gt;                  break;&lt;br /&gt;              } finally {&lt;br /&gt;                  channel.noteOff(note);&lt;br /&gt;              }&lt;br /&gt;          }&lt;br /&gt;      } catch (MidiUnavailableException e) {&lt;br /&gt;          e.printStackTrace();&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;See example of Java MIDI application: &lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;a href="http://xantorohara.110mb.com/xenoharmonica/"&gt;XenoHarmonica&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-6030623268567269613?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/6030623268567269613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=6030623268567269613' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/6030623268567269613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/6030623268567269613'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/01/simple-java-midi-synthesizer-sample.html' title='Simple Java MIDI synthesizer sample'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-7226481123557799871</id><published>2008-01-09T22:43:00.000+03:00</published><updated>2008-01-10T00:38:56.854+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Online Service'/><category scheme='http://www.blogger.com/atom/ns#' term='MIDI'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Project'/><title type='text'>Simple Java MIDI player sample</title><content type='html'>&lt;span style="font-size:130%;"&gt;New Year!&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;New articles,&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;New site &lt;a href="http://xantorohara.110mb.com/"&gt; xantorohara.110mb.com&lt;/a&gt;,&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;And new project &lt;a href="http://xantorohara.110mb.com/xenoharmonica/"&gt; XenoHarmonica&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;a href="http://xantorohara.110mb.com/xenoharmonica/"&gt;XenoHarmonica&lt;/a&gt;&lt;/span&gt; - is a musical project. It is a bayan keyboard emulator, Java MIDI application for personal computers.&lt;br /&gt;Now everybody can play bayan (button accordion).&lt;br /&gt;&lt;br /&gt;XenoHarmonica is free for education and non-commercial usage.&lt;br /&gt;&lt;br /&gt;Program based on Java MIDI API.&lt;br /&gt;In this article I provide an example of simplest MIDI player.&lt;br /&gt;&lt;br /&gt;Maybe somebody else going to create MIDI program :-)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;MidiPlayerSample.java&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import javax.sound.midi.*;&lt;br /&gt;import java.io.InputStream;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.FileInputStream;&lt;br /&gt;import java.io.FileNotFoundException;&lt;br /&gt;&lt;br /&gt;public class MidiPlayerSample {&lt;br /&gt;&lt;br /&gt;  public static void main(String[] args) {&lt;br /&gt;      try {&lt;br /&gt;          Sequencer sequencer = MidiSystem.getSequencer();&lt;br /&gt;          if (sequencer == null)&lt;br /&gt;              throw new MidiUnavailableException();&lt;br /&gt;          sequencer.open();&lt;br /&gt;          FileInputStream is = new FileInputStream("sample.mid");&lt;br /&gt;          Sequence mySeq = MidiSystem.getSequence(is);&lt;br /&gt;          sequencer.setSequence(mySeq);&lt;br /&gt;          sequencer.start();&lt;br /&gt;      } catch (Exception e) {&lt;br /&gt;          e.printStackTrace();&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-7226481123557799871?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/7226481123557799871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=7226481123557799871' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7226481123557799871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7226481123557799871'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/01/simple-java-midi-player-sample.html' title='Simple Java MIDI player sample'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-1814922173128306663</id><published>2008-01-09T22:11:00.001+03:00</published><updated>2008-01-09T22:13:49.537+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Windows XP hibernate mode problem</title><content type='html'>Do you have a problem with Hibernate mode in Windows XP?&lt;br /&gt;And you can't turn on Hibernate mode from Power Options Panel, it says: "The process cannot access the file because it is being used by another process".&lt;br /&gt;I found one crasy method how to resolve this problem on my computer (AMD64/1G RAM/MB Asus M2NE/Video Asus N7600/IDE HDD).&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;Delete file: WINDOWS\system32\drivers\atapi.sys (it will be restored by Windows).&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Manualy enable hibernate mode (now it isn't throw error message).&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Switch computer to Hibernate mode.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Is it helpful?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-1814922173128306663?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/1814922173128306663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=1814922173128306663' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/1814922173128306663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/1814922173128306663'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2008/01/windows-xp-hibernate-mode-problem_09.html' title='Windows XP hibernate mode problem'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-6519085250063339974</id><published>2007-11-22T16:17:00.000+03:00</published><updated>2007-11-22T18:50:36.016+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>HowTo batch replace string in the set of files</title><content type='html'>This script replaces all occurrences of 'oldString' with 'newString' in all files in the current directory and all subdirectories.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;b&gt;xqx_replace.sh&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;if test -z "$1" -o -z "$2"; then&lt;br /&gt;    echo Replace all occurrences of 'oldString' with 'newString' in all files in the current directory and all subdirectories.&lt;br /&gt;    echo Usage: $0 oldSting newString&lt;br /&gt;    exit&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;OLDSTRING=$1&lt;br /&gt;NEWSTRING=$2&lt;br /&gt;&lt;br /&gt;replace() {&lt;br /&gt;    echo "$1"&lt;br /&gt;    mv "$1" "$1".bak&lt;br /&gt;    sed s/$OLDSTRING/$NEWSTRING/g "$1".bak &amp;gt;"$1"&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;check() {&lt;br /&gt;    while read; do&lt;br /&gt;        if test -n "`grep -l $OLDSTRING \"$REPLY\"`"; then    &lt;br /&gt;            replace "$REPLY"&lt;br /&gt;        fi&lt;br /&gt;    done&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;find . -type f |check&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-6519085250063339974?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/6519085250063339974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=6519085250063339974' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/6519085250063339974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/6519085250063339974'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/11/howto-batch-replace-string-in-set-of.html' title='HowTo batch replace string in the set of files'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-5801067828602447600</id><published>2007-11-01T12:03:00.000+03:00</published><updated>2007-11-01T17:41:50.431+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Oracle XE installation problem</title><content type='html'>Have a problem with &lt;b&gt;Oracle Database 10g Express Edition&lt;/b&gt;?&lt;br /&gt;Oracle is installed but doesn't work?&lt;br /&gt;&lt;br /&gt;This is caused by that your account is given from domain server or your system has non-English locale.&lt;br /&gt;&lt;br /&gt;HowTo resolve this problem:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Create local user  (this user should not be a domain account).&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Set OS system locale to English (US or UK, via &lt;b&gt;Regional and Language Options&lt;/b&gt;), reboot.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Install Oracle XE under local user (via &lt;b&gt;&lt;code&gt;runas&lt;/code&gt;&lt;/b&gt; console program or via &lt;b&gt;Run as...&lt;/b&gt; from Windows Explorer popup menu).&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Open file &lt;code&gt;"Oracle\app\oracle\product\10.2.0\server\NETWORK\ADMIN\sqlnet.ora&lt;/code&gt;&lt;br /&gt;and comment (via # symbol) or remove line &lt;code&gt;SQLNET.AUTHENTICATION_SERVICES = (NTS)&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Open shell, type &lt;code&gt;sqlplus oracle_user/oracle_password&lt;/code&gt; and work with Oracle XE.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-5801067828602447600?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/5801067828602447600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=5801067828602447600' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/5801067828602447600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/5801067828602447600'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/11/oracle-xe-installation-problem.html' title='Oracle XE installation problem'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-3591466452140674904</id><published>2007-10-31T01:16:00.000+03:00</published><updated>2007-10-31T01:36:26.618+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LDAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>HowTo create LDAP users</title><content type='html'>LDAP (Lightweight Directory Access Protocol) - not lightweight for my brain.&lt;br /&gt;&lt;br /&gt;After some research I found steps how to store users in the LDAP (OpenLDAP server) under Windows.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Change configuration file&lt;br /&gt;&lt;hr/&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;b&gt;slapd.conf&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ucdata-path ./ucdata&lt;br /&gt;include  ./schema/core.schema&lt;br /&gt;include  ./schema/cosine.schema&lt;br /&gt;include  ./schema/inetorgperson.schema&lt;br /&gt;include  ./schema/misc.schema&lt;br /&gt;include  ./schema/nis.schema&lt;br /&gt;include  ./schema/openldap.schema&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;pidfile  ./run/slapd.pid&lt;br /&gt;argsfile ./run/slapd.args&lt;br /&gt;&lt;br /&gt;access to *&lt;br /&gt; by self write&lt;br /&gt; by users read&lt;br /&gt; by anonymous read&lt;br /&gt;&lt;br /&gt;#######################################################################&lt;br /&gt;# BDB database definitions&lt;br /&gt;#######################################################################&lt;br /&gt;&lt;br /&gt;database bdb&lt;br /&gt;suffix  "o=sample company"&lt;br /&gt;rootdn  "cn=Manager,o=sample company"&lt;br /&gt;rootpw  secret&lt;br /&gt;directory ./data&lt;br /&gt;index objectClass eq&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Restart LDAP service&lt;br /&gt;&lt;hr/&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;b&gt;restart.bat&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;net stop OpenLDAP-slapd&lt;br /&gt;net start OpenLDAP-slapd&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Create base record&lt;br /&gt;&lt;hr/&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;b&gt;base.ldif&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;dn: o=sample company&lt;br /&gt;objectclass: organization&lt;br /&gt;objectclass: top&lt;br /&gt;o: sample company&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Insert base record into LDAP&lt;br /&gt;&lt;hr/&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;b&gt;base.bat&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;@echo off&lt;br /&gt;set LDAP_HOME=E:\devenv\tools\OpenLDAP&lt;br /&gt;set BASE="o=sample company"&lt;br /&gt;set D=cn=Manager,%BASE%&lt;br /&gt;set AUTH=-x -w secret -D %D%&lt;br /&gt;&lt;br /&gt;%LDAP_HOME%\ldapadd.exe %AUTH% -a -f base.ldif&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Create file with users' definitions&lt;br /&gt;&lt;hr/&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;b&gt;user.ldif&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;dn: cn=Katrien,o=sample company&lt;br /&gt;objectClass: top&lt;br /&gt;objectClass: person&lt;br /&gt;objectClass: inetorgperson&lt;br /&gt;cn: Katrien&lt;br /&gt;sn: none&lt;br /&gt;userPassword: none&lt;br /&gt;mail: katrien@samplecompany.com&lt;br /&gt;&lt;br /&gt;dn: cn=Gordon,o=sample company&lt;br /&gt;objectClass: top&lt;br /&gt;objectClass: person&lt;br /&gt;objectClass: inetorgperson&lt;br /&gt;cn: Gordon&lt;br /&gt;sn: none&lt;br /&gt;userPassword: none&lt;br /&gt;mail: Gordon@samplecompany.com&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Insert users into LDAP&lt;br /&gt;&lt;hr/&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;b&gt;user.bat&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;@echo off&lt;br /&gt;set LDAP_HOME=E:\devenv\tools\OpenLDAP&lt;br /&gt;set BASE="o=sample company"&lt;br /&gt;set D=cn=Manager,%BASE%&lt;br /&gt;set AUTH=-x -w secret -D %D%&lt;br /&gt;&lt;br /&gt;%LDAP_HOME%\ldapadd.exe %AUTH% -a -f user.ldif&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Check LDAP records&lt;br /&gt;&lt;hr/&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;b&gt;search.bat&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;@echo off&lt;br /&gt;set LDAP_HOME=E:\devenv\tools\OpenLDAP&lt;br /&gt;set BASE="o=sample company"&lt;br /&gt;set D=cn=Manager,%BASE%&lt;br /&gt;set AUTH=-x -w secret -D %D%&lt;br /&gt;&lt;br /&gt;%LDAP_HOME%\ldapsearch.exe -LLL %AUTH% -b %BASE% "objectClass=person"&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-3591466452140674904?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/3591466452140674904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=3591466452140674904' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/3591466452140674904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/3591466452140674904'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/10/howto-create-ldap-users.html' title='HowTo create LDAP users'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-8107775981366621042</id><published>2007-10-30T22:02:00.000+03:00</published><updated>2007-10-30T22:48:27.986+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>MySQL shell scripting</title><content type='html'>MySQL is the best. The best database server. I love it.&lt;br /&gt;I like and appreciate its simplicity, efficiency, small size, good help, cool shell utilities. And its price :-)&lt;br /&gt;&lt;br /&gt;I've worked with MySQL many years. And I can't understand some another database systems like Oracle, that big, heavy and high-priced. I can't stand theirs complexity.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://mysql.org/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_ruD_KHp6My0/RyeEIDbp9cI/AAAAAAAAAag/NS3TmB_Xj2M/s320/mysql_100x52-64.gif" alt="" id="BLOGGER_PHOTO_ID_5127211974679721410" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can use this server as you want. You can embed it into your application.&lt;br /&gt;MySQL also pretty good in the console.&lt;br /&gt;&lt;br /&gt;You can execute sql script from file e.g.:&lt;span style="font-size:small;"&gt;&lt;code&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;data.sql&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;insert into Sample (name, address) values ('sample name', 'sample address');&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;with the simple command:&lt;span style="font-size:small;"&gt;&lt;code&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;exec.cmd&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;@echo off&lt;br /&gt;SET DATABASE_HOST=localhost&lt;br /&gt;SET DATABASE_NAME=db&lt;br /&gt;SET DATABASE_USER=root&lt;br /&gt;SET DATABASE_PASSWORD=********&lt;br /&gt;&lt;br /&gt;mysql -h %DATABASE_HOST% -u %DATABASE_USER%  -p%DATABASE_PASSWORD%  -e "source data.sql" %DATABASE_NAME%&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and dump data from database with this command:&lt;span style="font-size:small;"&gt;&lt;code&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;dump.cmd&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;@echo off&lt;br /&gt;SET DATABASE_HOST=localhost&lt;br /&gt;SET DATABASE_NAME=db&lt;br /&gt;SET DATABASE_USER=root&lt;br /&gt;SET DATABASE_PASSWORD=********&lt;br /&gt;&lt;br /&gt;md tables&lt;br /&gt;mysqldump --compact --no-create-info --tab=tables -h %DATABASE_HOST% -u %DATABASE_USER%  -p%DATABASE_PASSWORD%  %DATABASE_NAME%&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For these purposes you should have only 2 files from mysql: &lt;code&gt;&lt;b&gt;mysql.exe&lt;/b&gt; and &lt;b&gt;mysqldump.exe&lt;/b&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-8107775981366621042?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/8107775981366621042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=8107775981366621042' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/8107775981366621042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/8107775981366621042'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/10/mysql-shell-scripting.html' title='MySQL shell scripting'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_ruD_KHp6My0/RyeEIDbp9cI/AAAAAAAAAag/NS3TmB_Xj2M/s72-c/mysql_100x52-64.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-7612256399570860897</id><published>2007-10-16T00:36:00.000+04:00</published><updated>2007-10-16T00:41:45.675+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><title type='text'>Three photos of old boards</title><content type='html'>Diamond Monster 3Dfx.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_ruD_KHp6My0/RxPQVhueaEI/AAAAAAAAAaY/RoQk7MpDdX4/s1600-h/CIMG1611.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_ruD_KHp6My0/RxPQVhueaEI/AAAAAAAAAaY/RoQk7MpDdX4/s320/CIMG1611.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5121666269499516994" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Creative Sound Blaster.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ruD_KHp6My0/RxPP_RueaDI/AAAAAAAAAaQ/VpMCFB4AZyI/s1600-h/CIMG1610.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ruD_KHp6My0/RxPP_RueaDI/AAAAAAAAAaQ/VpMCFB4AZyI/s320/CIMG1610.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5121665887247427634" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;BusLogic SCSI adapter.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/RxPPyxueaCI/AAAAAAAAAaI/CvEOnyR7EAE/s1600-h/CIMG1609.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ruD_KHp6My0/RxPPyxueaCI/AAAAAAAAAaI/CvEOnyR7EAE/s320/CIMG1609.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5121665672499062818" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-7612256399570860897?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/7612256399570860897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=7612256399570860897' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7612256399570860897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7612256399570860897'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/10/three-photos-of-old-boards.html' title='Three photos of old boards'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_ruD_KHp6My0/RxPQVhueaEI/AAAAAAAAAaY/RoQk7MpDdX4/s72-c/CIMG1611.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-5370186798457924570</id><published>2007-10-06T20:27:00.000+04:00</published><updated>2007-10-16T00:43:16.640+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Money'/><category scheme='http://www.blogger.com/atom/ns#' term='Project'/><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>Active money</title><content type='html'>I was on vacation last week.&lt;br /&gt;And now I have started my new blog:&lt;br /&gt;&lt;div style="text-align:center; font-size: large;"&gt;&lt;a href="http://activemoney.blogspot.com"&gt;Active Money&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Active money - blog about money.&lt;br /&gt;About coins and paper currency and theirs views.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ruD_KHp6My0/Rwe5QBueYYI/AAAAAAAAAMg/em3T4ulyZwY/s1600-h/activemoney.blogspot.com.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_ruD_KHp6My0/Rwe5QBueYYI/AAAAAAAAAMg/em3T4ulyZwY/s400/activemoney.blogspot.com.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5118263186522268034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I will publish the scanned images and photos of money.&lt;br /&gt;At first I'm going to publish Russian money from my family collection.&lt;br /&gt;&lt;div style="text-align:center; font-size: large;"&gt;&lt;br /&gt;&lt;a href="http://activemoney.blogspot.com"&gt;Welcome!&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-5370186798457924570?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/5370186798457924570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=5370186798457924570' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/5370186798457924570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/5370186798457924570'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/10/active-money.html' title='Active money'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_ruD_KHp6My0/Rwe5QBueYYI/AAAAAAAAAMg/em3T4ulyZwY/s72-c/activemoney.blogspot.com.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-462180840362522023</id><published>2007-09-12T00:58:00.000+04:00</published><updated>2008-01-24T16:29:18.136+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WinAPI'/><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><category scheme='http://www.blogger.com/atom/ns#' term='JNI'/><title type='text'>Java code injection via WinAPI's CreateRemoteThread  function</title><content type='html'>There is the way to inject some functionality into JVM (Java Virtual Machine) from another process or another JVM.&lt;br /&gt;&lt;br /&gt;It works only in Windows NT/200/XP and uses WinAPI functions.&lt;br /&gt;Today I publish this solution.&lt;br /&gt;&lt;br /&gt;How it works:&lt;ul&gt;&lt;li&gt;User compiles Injector.class, Injector.dll, Insider.dll from sources (via make.bat)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;User starts java application (e.g.: start java -jar %JAVA_HOME%\demo\jfc\Notepad\notepad.jar) in the &lt;span style="color:red;"&gt;&lt;b&gt;JVM-1&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;User recognises the PID (process id) of started application (via Task Manager)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;User executes &lt;code&gt;java -Djava.library.path=. Injector&lt;/code&gt; (starts &lt;span style="color:red;"&gt;&lt;b&gt;JVM-2&lt;/b&gt;&lt;/span&gt;) and enters PID of &lt;span style="color:red;"&gt;&lt;b&gt;JVM-1&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="color:red;"&gt;&lt;b&gt;JVM-1&lt;/b&gt;&lt;/span&gt; calls &lt;b&gt;Injector.dll&lt;/b&gt;'s native function&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Injector.dll&lt;/b&gt; calls &lt;b&gt;CreateRemoteThread&lt;/b&gt; WinAPI function and loads &lt;b&gt;Insider.dll&lt;/b&gt; into &lt;span style="color:red;"&gt;&lt;b&gt;JVM-1&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Insider.dll&lt;/b&gt; attaches to &lt;span style="color:red;"&gt;&lt;b&gt;JVM-1&lt;/b&gt;&lt;/span&gt; via JNI,  defines new class from bytes array and loads it.&lt;br /&gt;!!! In this case class's bytecode stores as a &lt;code&gt;jbyte clazz[] array&lt;/code&gt; within the &lt;b&gt;Insider.dll&lt;/b&gt; &lt;/li&gt;&lt;br /&gt;&lt;li&gt;And then new class works in the &lt;span style="color:red;"&gt;&lt;b&gt;JVM-1&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ruD_KHp6My0/RucWM_2_zsI/AAAAAAAAAK0/ZSbfO3M7nVY/s1600-h/model.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_ruD_KHp6My0/RucWM_2_zsI/AAAAAAAAAK0/ZSbfO3M7nVY/s320/model.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5109076714831466178" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Injected class only prints numbers within JVM-1's console:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_ruD_KHp6My0/RucEnf2_zrI/AAAAAAAAAKs/NGy7P70AwcY/s1600-h/screen.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_ruD_KHp6My0/RucEnf2_zrI/AAAAAAAAAKs/NGy7P70AwcY/s320/screen.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5109057378888699570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sources:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Bin2H.java&lt;br /&gt;Injector.cpp&lt;br /&gt;Injector.java&lt;br /&gt;Insider.java&lt;br /&gt;insider.cpp&lt;br /&gt;make.bat&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;listed below:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;hr/&gt;&lt;b&gt;Bin2H.java &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;public class Bin2H {&lt;br /&gt;    public static void main(String[] args) throws Exception {&lt;br /&gt;        System.out.print("#include &amp;lt;jni.h&amp;gt;\nconst jbyte clazz[]={");&lt;br /&gt;        for (int i = System.in.read(); i &amp;gt;= 0; i = System.in.read()) &lt;br /&gt;            System.out.print(Integer.toString(i) + ",");&lt;br /&gt;        System.out.print("};");&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;hr/&gt;&lt;b&gt;Injector.cpp&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;windows.h&amp;gt;&lt;br /&gt;#include &amp;lt;jni.h&amp;gt;&lt;br /&gt;#include "injector.h"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void Inject (unsigned long PID, const char *dllname)&lt;br /&gt;{&lt;br /&gt;    DWORD hLibModule;&lt;br /&gt;&lt;br /&gt;    HMODULE hKernel32 = GetModuleHandle (TEXT ("Kernel32"));&lt;br /&gt;&lt;br /&gt;    void *hProcess = OpenProcess (PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION |&lt;br /&gt;        PROCESS_VM_WRITE, false, PID);&lt;br /&gt;    int cch = strlen (dllname) + 1;&lt;br /&gt;    void *pLibRemote = VirtualAllocEx (hProcess, NULL, cch, MEM_COMMIT,&lt;br /&gt;        PAGE_READWRITE);&lt;br /&gt;&lt;br /&gt;    WriteProcessMemory (hProcess, pLibRemote, (void *) dllname, cch, NULL);&lt;br /&gt;&lt;br /&gt;    HANDLE hThread = CreateRemoteThread (hProcess, NULL, 0,&lt;br /&gt;        (PTHREAD_START_ROUTINE)&lt;br /&gt;        GetProcAddress (hKernel32,&lt;br /&gt;        "LoadLibraryA"),&lt;br /&gt;        pLibRemote, 0, NULL);&lt;br /&gt;&lt;br /&gt;    WaitForSingleObject (hThread, INFINITE);&lt;br /&gt;    GetExitCodeThread( hThread, &amp;amp;hLibModule );&lt;br /&gt;    CloseHandle (hThread);&lt;br /&gt;&lt;br /&gt;    VirtualFreeEx (hProcess, pLibRemote, sizeof (dllname), MEM_RELEASE);&lt;br /&gt;&lt;br /&gt;    hThread = CreateRemoteThread (hProcess, NULL, 0,&lt;br /&gt;        (PTHREAD_START_ROUTINE) GetProcAddress (hKernel32,&lt;br /&gt;        "FreeLibrary"),&lt;br /&gt;        (void *) hLibModule, 0, NULL);&lt;br /&gt;    WaitForSingleObject (hThread, INFINITE);&lt;br /&gt;    CloseHandle (hThread);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void JNICALL Java_Injector_inject (JNIEnv * env, jclass, jint pid, jstring dll)&lt;br /&gt;{&lt;br /&gt;    try&lt;br /&gt;    {&lt;br /&gt;        Inject (pid, env-&amp;gt;GetStringUTFChars (dll, NULL));&lt;br /&gt;    } catch (...)&lt;br /&gt;    {&lt;br /&gt;        MessageBox (NULL, "Exception::Inject", "Injector", MB_ICONERROR);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;hr/&gt;&lt;b&gt;Injector.java &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;&lt;br /&gt;public class Injector {&lt;br /&gt;    public static native void inject(int pid, String dll);&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        System.loadLibrary("Injector");&lt;br /&gt;        byte[] str = new byte[5];&lt;br /&gt;        try {&lt;br /&gt;            System.in.read(str);&lt;br /&gt;            System.out.println(new File("").getAbsolutePath()+"\\insider.dll");         &lt;br /&gt;            inject(Integer.parseInt(new String(str).trim()), new File("").getAbsolutePath()+"\\insider.dll");&lt;br /&gt;        } catch (IOException e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;hr/&gt;&lt;b&gt;insider.cpp &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;windows.h&amp;gt;&lt;br /&gt;#include &amp;lt;jni.h&amp;gt;&lt;br /&gt;#include "insider.h"&lt;br /&gt;&lt;br /&gt;BOOL APIENTRY&lt;br /&gt;DllMain (HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)&lt;br /&gt;{&lt;br /&gt;  if (ul_reason_for_call == DLL_PROCESS_ATTACH)&lt;br /&gt;    {&lt;br /&gt;      JavaVM *vmBuf;&lt;br /&gt;      JNIEnv *env;&lt;br /&gt;      jsize nVMs;&lt;br /&gt;      jint res = 0;&lt;br /&gt;      jclass resjclass = NULL;&lt;br /&gt;      try&lt;br /&gt;      {&lt;br /&gt;    res = JNI_GetCreatedJavaVMs (&amp;amp;vmBuf, 1, &amp;amp;nVMs);&lt;br /&gt;    if (res != JNI_OK || nVMs &amp;lt; 1)&lt;br /&gt;      {&lt;br /&gt;        MessageBox (NULL, "JVMs not found", "Insider", MB_ICONERROR);&lt;br /&gt;        return FALSE;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;      catch (...)&lt;br /&gt;      {&lt;br /&gt;    MessageBox (NULL, "Exception:JNI_GetCreatedJavaVMs", "Insider",&lt;br /&gt;            MB_ICONERROR);&lt;br /&gt;    return FALSE;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      try&lt;br /&gt;      {&lt;br /&gt;    res = vmBuf[0].AttachCurrentThread ((void **) &amp;amp;env, NULL);&lt;br /&gt;    if (res != JNI_OK)&lt;br /&gt;      {&lt;br /&gt;        MessageBox (NULL, "Can't attach to JVM", "Insider", MB_ICONERROR);&lt;br /&gt;        return FALSE;&lt;br /&gt;      }&lt;br /&gt;      }&lt;br /&gt;      catch (...)&lt;br /&gt;      {&lt;br /&gt;    MessageBox (NULL, "Exception:AttachCurrentThread", "Insider",&lt;br /&gt;            MB_ICONERROR);&lt;br /&gt;    return FALSE;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      try&lt;br /&gt;      {&lt;br /&gt;    resjclass = env-&amp;gt;DefineClass ("Insider", NULL, clazz, sizeof (clazz));&lt;br /&gt;    if (resjclass == NULL)&lt;br /&gt;      {&lt;br /&gt;        MessageBox (NULL, "Error Define Class", "Insider", MB_ICONERROR);&lt;br /&gt;        return FALSE;&lt;br /&gt;      }&lt;br /&gt;    resjclass = env-&amp;gt;FindClass ("Insider");&lt;br /&gt;    if (resjclass == NULL)&lt;br /&gt;      {&lt;br /&gt;        MessageBox (NULL, "Error Load Class", "Insider", MB_ICONERROR);&lt;br /&gt;        return FALSE;&lt;br /&gt;      }&lt;br /&gt;      }&lt;br /&gt;      catch (...)&lt;br /&gt;      {&lt;br /&gt;    MessageBox (NULL, "Exception:DefineClass,FindClass", "Insider",&lt;br /&gt;            MB_ICONERROR);&lt;br /&gt;      }&lt;br /&gt;      try&lt;br /&gt;      {&lt;br /&gt;    vmBuf[0].DetachCurrentThread ();&lt;br /&gt;      }&lt;br /&gt;      catch (...)&lt;br /&gt;      {&lt;br /&gt;    MessageBox (NULL, "Exception:DetachCurrentThread", "Insider",&lt;br /&gt;            MB_ICONERROR);&lt;br /&gt;    return FALSE;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;  return TRUE;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;hr/&gt;&lt;b&gt;Insider.java &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;//Warning: Make Insider as single class!&lt;br /&gt;&lt;br /&gt;public class Insider implements Runnable {&lt;br /&gt;    static {&lt;br /&gt;        Thread t = new Thread(new Insider());&lt;br /&gt;        t.setPriority(Thread.MIN_PRIORITY);&lt;br /&gt;        t.setDaemon(true);&lt;br /&gt;        t.start();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void run() {&lt;br /&gt;        int i = 0;&lt;br /&gt;        while (true) {&lt;br /&gt;            System.out.println(i++);&lt;br /&gt;            try {&lt;br /&gt;                Thread.sleep(300);&lt;br /&gt;            } catch (InterruptedException e) {&lt;br /&gt;                break;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;hr/&gt;&lt;b&gt;make.bat&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;@echo off&lt;br /&gt;call "E:\Devel\Microsoft Visual Studio\VC98\Bin\vcvars32.bat" &lt;br /&gt;set JAVA_HOME=E:\Devel\jdk1.5.0_09&lt;br /&gt;&lt;br /&gt;set PATH=%PATH%;%JAVA_HOME%\bin&lt;br /&gt;&lt;br /&gt;rd /Q /S out&lt;br /&gt;md out&lt;br /&gt;&lt;br /&gt;javac -d out Injector.java&lt;br /&gt;javah -classpath out Injector&lt;br /&gt;javac -source 1.3 -target 1.1 Insider.java&lt;br /&gt;javac Bin2H.java&lt;br /&gt;type Insider.class |java Bin2H &amp;gt;insider.h&lt;br /&gt;del Bin2H.class&lt;br /&gt;del Insider.class&lt;br /&gt;&lt;br /&gt;cl.exe /c -GX /I%JAVA_HOME%\include /I%JAVA_HOME%\include\win32 Injector.cpp&lt;br /&gt;link /DLL /OUT:out/Injector.dll kernel32.lib user32.lib gdi32.lib Injector.obj&lt;br /&gt;&lt;br /&gt;cl.exe /c -GX /I%JAVA_HOME%\include /I%JAVA_HOME%\include\win32 Insider.cpp&lt;br /&gt;link /DLL /OUT:out/Insider.dll kernel32.lib user32.lib gdi32.lib %JAVA_HOME%\lib\jvm.lib Insider.obj&lt;br /&gt;&lt;br /&gt;del Insider.obj&lt;br /&gt;del Injector.obj&lt;br /&gt;del Injector.h&lt;br /&gt;del Insider.h&lt;br /&gt;del out\Injector.exp&lt;br /&gt;del out\Injector.lib &lt;br /&gt;&lt;br /&gt;echo java -Djava.library.path=. Injector&amp;gt;out\injector.bat&lt;br /&gt;echo start java -jar %JAVA_HOME%\demo\jfc\Notepad\notepad.jar Notepad &amp;gt;out\demo.bat&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;How do you like it?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;span style="font-size: large;"&gt;You may download these sources from &lt;a href="http://xantorohara.googlepages.com/xantorohara.blogspot.comsamples"&gt;Xantorohara.blogspot.com samples&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-462180840362522023?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/462180840362522023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=462180840362522023' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/462180840362522023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/462180840362522023'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/09/java-code-injection-via-winapis.html' title='Java code injection via WinAPI&apos;s CreateRemoteThread  function'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_ruD_KHp6My0/RucWM_2_zsI/AAAAAAAAAK0/ZSbfO3M7nVY/s72-c/model.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-262099480356218082</id><published>2007-09-11T23:54:00.000+04:00</published><updated>2007-09-12T00:14:07.294+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Online Service'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Blogsource</title><content type='html'>I've released new online service: &lt;a href="http://xantorohara.com/blogsource"&gt;Blogsource&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/Rubzz_2_zqI/AAAAAAAAAKk/7Oyp6b7_TYs/s1600-h/screen.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ruD_KHp6My0/Rubzz_2_zqI/AAAAAAAAAKk/7Oyp6b7_TYs/s320/screen.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5109038901939392162" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It replaces ampersands, tabs, less/greater braces and prepares source code for posting into blog.&lt;br /&gt;&lt;br /&gt;E.g.:&lt;br /&gt;&lt;pre&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;    function convert(source, output) {&lt;br /&gt;        var sourceString = document.getElementById(source).value&lt;br /&gt;        var outputString = "&amp;lt;pre&amp;gt;";&lt;br /&gt;        for (var i = 0; i &amp;lt; sourceString.length; i++) {&lt;br /&gt;            var part = sourceString.charAt(i);&lt;br /&gt;            switch (part) {&lt;br /&gt;                case '&amp;gt;':&lt;br /&gt;                    part = "&amp;amp;gt;";&lt;br /&gt;                    break;&lt;br /&gt;                case '&amp;lt;':&lt;br /&gt;                    part = "&amp;amp;lt;";&lt;br /&gt;                    break;&lt;br /&gt;                case '&amp;amp;':&lt;br /&gt;                    part = "&amp;amp;amp;";&lt;br /&gt;                    break;&lt;br /&gt;                case '\t':&lt;br /&gt;                    part = "    ";&lt;br /&gt;                    break;&lt;br /&gt;            }&lt;br /&gt;            outputString += part;&lt;br /&gt;        }&lt;br /&gt;        outputString += "&amp;lt;/pre&amp;gt;";&lt;br /&gt;        document.getElementById(output).value = outputString;&lt;br /&gt;    }&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you prefer shell scripts, you may use this:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sed -e 's/\x26/\&amp;amp;amp;/g;s/\x3c/\&amp;amp;lt;/g;s/\x3e/\&amp;amp;gt;/g' sourcefile.txt | expand -t 4 &amp;gt;sourcefile.blog &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;In any case:&lt;br /&gt;&lt;div style="text-align:center; font-size: large;"&gt;&lt;a href="http://xantorohara.com/blogsource"&gt;Welcome&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-262099480356218082?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/262099480356218082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=262099480356218082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/262099480356218082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/262099480356218082'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/09/blogsource.html' title='Blogsource'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_ruD_KHp6My0/Rubzz_2_zqI/AAAAAAAAAKk/7Oyp6b7_TYs/s72-c/screen.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-4638560452041986130</id><published>2007-09-10T21:59:00.000+04:00</published><updated>2007-10-20T17:59:22.986+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Online Service'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Javascript injection</title><content type='html'>There is the way to include javascript into any html pages via 'javascript:' protocol. Internet Explorer and FireFox support this.&lt;br /&gt;Just open web page and replace site's URL with some javascript e.g.: &lt;code&gt;javascript: alert('WOW!');&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I've released online tool for web developers that based on this feature - &lt;span style="font-size: large;"&gt;&lt;a href="http://xantorohara.com/hyperbox"&gt;Hyperbox&lt;/a&gt;&lt;/span&gt;. Developers can use it for design tasks.&lt;br /&gt;&lt;br /&gt;It is simple to use:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Open any site (e.g.: google.com).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Replace site's URL with this string:&lt;br /&gt;&lt;div style="color: red;"&gt;&lt;code&gt;&lt;br /&gt;javascript:(function(){var s=document.createElement('script'); s.src='http://xantorohara.jino-net.ru/hyperbox/hyperbox.js'; s.type='text/javascript'; document.getElementsByTagName('head')[0].appendChild(s); })();&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Move it, resize, change color and borders, measure.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/RuWGQP2_zpI/AAAAAAAAAKc/dwzhf3rXk98/s1600-h/s3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ruD_KHp6My0/RuWGQP2_zpI/AAAAAAAAAKc/dwzhf3rXk98/s320/s3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5108636966014930578" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;This javascript tool is absolutely free for using and modifying.&lt;br /&gt;Everybody may download the &lt;a href="http://xantorohara.jino-net.ru/hyperbox/hyperbox.js"&gt;script&lt;/a&gt; from my &lt;a href="http://xantorohara.jino-net.ru/hyperbox"&gt;site&lt;/a&gt; and investigate it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-4638560452041986130?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/4638560452041986130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=4638560452041986130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4638560452041986130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4638560452041986130'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/09/javascript-injection.html' title='Javascript injection'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_ruD_KHp6My0/RuWGQP2_zpI/AAAAAAAAAKc/dwzhf3rXk98/s72-c/s3.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-5915469537731000496</id><published>2007-09-09T23:22:00.000+04:00</published><updated>2007-09-09T23:33:50.375+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Telecom'/><title type='text'>Lord of the Rings. MSSP, MSDP ring protection</title><content type='html'>I was system architect in the telecommunication company several years ago.&lt;br /&gt;And I am the author of the Network Managament System (NMS) for SDH, PDH, Ethernet networks and equipment.&lt;br /&gt;The most interesting things in the SDH/PDH - theirs protection schemes:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;MSDP Ring (Dedicated ring). One unidirectional ring for main traffic and one for protection.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ruD_KHp6My0/RuRIav2_zoI/AAAAAAAAAKU/Sp3PPYIzTDI/s1600-h/MSDPRing.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_ruD_KHp6My0/RuRIav2_zoI/AAAAAAAAAKU/Sp3PPYIzTDI/s320/MSDPRing.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5108287501705924226" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;MSSP Ring 2-Fiber (Shared ring). 1/2 of bidirectional ring for main traffic and 1/2 for protection.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_ruD_KHp6My0/RuRIVP2_znI/AAAAAAAAAKM/gwBj5f1RA5A/s1600-h/MSSPRing_2f.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_ruD_KHp6My0/RuRIVP2_znI/AAAAAAAAAKM/gwBj5f1RA5A/s320/MSSPRing_2f.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5108287407216643698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;MSSP Ring 4-Fiber (Shared ring). One bidirectional ring for main traffic and one for protection.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ruD_KHp6My0/RuRIOv2_zmI/AAAAAAAAAKE/XE4PYi7kaMI/s1600-h/MSSPRing_4f.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_ruD_KHp6My0/RuRIOv2_zmI/AAAAAAAAAKE/XE4PYi7kaMI/s320/MSSPRing_4f.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5108287295547493986" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;It is possible to use protecting channels for not protected (NOP) traffic while ring works without breaks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-5915469537731000496?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/5915469537731000496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=5915469537731000496' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/5915469537731000496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/5915469537731000496'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/09/lord-of-rings-mssp-msdp-ring-protection.html' title='Lord of the Rings. MSSP, MSDP ring protection'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_ruD_KHp6My0/RuRIav2_zoI/AAAAAAAAAKU/Sp3PPYIzTDI/s72-c/MSDPRing.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-1425809123591551713</id><published>2007-09-09T22:59:00.000+04:00</published><updated>2007-09-09T23:16:00.021+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='AWT'/><title type='text'>OS input events generation</title><content type='html'>The simplest way to generate system input events (mouse and keyboard) is using &lt;b&gt;Robot&lt;/b&gt; class from Java API.&lt;br /&gt;&lt;br /&gt;Source code that listed below,  moves mouse over the screen and presses mouse's button.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;JRobot.java&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;import java.awt.AWTException;&lt;br /&gt;import java.awt.Dimension;&lt;br /&gt;import java.awt.Point;&lt;br /&gt;import java.awt.Robot;&lt;br /&gt;import java.awt.Toolkit;&lt;br /&gt;import java.awt.event.InputEvent;&lt;br /&gt;&lt;br /&gt;public class JRobot {&lt;br /&gt;    private Robot robot = null;&lt;br /&gt;&lt;br /&gt;    private Point point = new Point(0, 0);&lt;br /&gt;&lt;br /&gt;    private void relativeMouseMove(int x, int y) {&lt;br /&gt;        point.x+=x;&lt;br /&gt;        point.y+=y;&lt;br /&gt;        robot.mouseMove(point.x, point.y);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private JRobot() {&lt;br /&gt;        try {&lt;br /&gt;            robot = new Robot();&lt;br /&gt;        } catch (AWTException e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;            return;&lt;br /&gt;        }&lt;br /&gt;        robot.setAutoDelay(1);&lt;br /&gt;&lt;br /&gt;        Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();&lt;br /&gt;        relativeMouseMove(32, screen.height - 8);&lt;br /&gt;        robot.mousePress(InputEvent.BUTTON1_MASK);&lt;br /&gt;&lt;br /&gt;        for (int i = 0; i &amp;lt; 256; i++) {&lt;br /&gt;            relativeMouseMove(0, -1);           &lt;br /&gt;        }&lt;br /&gt;        robot.delay(300);&lt;br /&gt;        robot.waitForIdle();&lt;br /&gt;        for (int i = 0; i &amp;lt; 256; i++) {&lt;br /&gt;            relativeMouseMove(1, 0);            &lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        new JRobot();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It is possible to use Robot for the various purposes ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-1425809123591551713?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/1425809123591551713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=1425809123591551713' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/1425809123591551713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/1425809123591551713'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/09/os-input-event-generation.html' title='OS input events generation'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-6337579886158008643</id><published>2007-09-09T22:24:00.000+04:00</published><updated>2007-09-09T22:51:19.126+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3D'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>Interactive Graphical System</title><content type='html'>In the earliest days of my programming career I wrote many simple-minded programs.&lt;br /&gt;&lt;br /&gt;One of them - Interactive Graphical System (IGS), in that (х&lt;sup&gt;3&lt;/sup&gt;+а&lt;sub&gt;1&lt;/sub&gt;у&lt;sup&gt;3&lt;/sup&gt;+а&lt;sub&gt;2&lt;/sub&gt;х&lt;sup&gt;2&lt;/sup&gt;у+а&lt;sub&gt;3&lt;/sub&gt;ху&lt;sup&gt;2&lt;/sup&gt;+а&lt;sub&gt;4&lt;/sub&gt;х&lt;sup&gt;2&lt;/sup&gt;+а&lt;sub&gt;5&lt;/sub&gt;у&lt;sup&gt;2&lt;/sup&gt;+а&lt;sub&gt;6&lt;/sub&gt;ху+а&lt;sub&gt;7&lt;/sub&gt;х+а&lt;sub&gt;8&lt;/sub&gt;у+а&lt;sub&gt;9&lt;/sub&gt;=0) mathematical formula was implemented.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ruD_KHp6My0/RuQ6q_2_zlI/AAAAAAAAAJ8/akflG5qIOUg/s1600-h/igs1.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ruD_KHp6My0/RuQ6q_2_zlI/AAAAAAAAAJ8/akflG5qIOUg/s320/igs1.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5108272387716009554" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It was written on Borland C++, at university, many years ago...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-6337579886158008643?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/6337579886158008643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=6337579886158008643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/6337579886158008643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/6337579886158008643'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/09/interactive-graphical-system.html' title='Interactive Graphical System'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_ruD_KHp6My0/RuQ6q_2_zlI/AAAAAAAAAJ8/akflG5qIOUg/s72-c/igs1.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-7151620884392365602</id><published>2007-09-09T21:39:00.000+04:00</published><updated>2007-09-09T22:08:58.325+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='SWT'/><title type='text'>SWT events capturing</title><content type='html'>Year ago I wrote this small SWT application that introduces how grab of SWT events works.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;Launcher.java&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;import java.util.Hashtable;&lt;br /&gt;import java.util.Map;&lt;br /&gt;import java.util.Set;&lt;br /&gt;&lt;br /&gt;import org.eclipse.swt.SWT;&lt;br /&gt;import org.eclipse.swt.widgets.Button;&lt;br /&gt;import org.eclipse.swt.widgets.Display;&lt;br /&gt;import org.eclipse.swt.widgets.Event;&lt;br /&gt;import org.eclipse.swt.widgets.Listener;&lt;br /&gt;import org.eclipse.swt.widgets.MessageBox;&lt;br /&gt;import org.eclipse.swt.widgets.Shell;&lt;br /&gt;&lt;br /&gt;public class Launcher {&lt;br /&gt;    private Shell shell;&lt;br /&gt;&lt;br /&gt;    private Map&amp;lt;Integer, String&amp;gt; eventMap = new Hashtable&amp;lt;Integer, String&amp;gt;();&lt;br /&gt;    {&lt;br /&gt;        eventMap.put(SWT.Paint, "Paint");&lt;br /&gt;        eventMap.put(SWT.Selection, "Selection");&lt;br /&gt;        eventMap.put(SWT.DefaultSelection, "DefaultSelection");&lt;br /&gt;        eventMap.put(SWT.Dispose, "Dispose");&lt;br /&gt;        eventMap.put(SWT.FocusIn, "FocusIn");&lt;br /&gt;        eventMap.put(SWT.FocusOut, "FocusOut");&lt;br /&gt;        eventMap.put(SWT.Hide, "Hide");&lt;br /&gt;        eventMap.put(SWT.Show, "Show");&lt;br /&gt;        eventMap.put(SWT.KeyDown, "KeyDown");&lt;br /&gt;        eventMap.put(SWT.KeyUp, "KeyUp");&lt;br /&gt;        eventMap.put(SWT.MouseDown, "MouseDown");&lt;br /&gt;        eventMap.put(SWT.MouseUp, "MouseUp");&lt;br /&gt;        eventMap.put(SWT.MouseDoubleClick, "MouseDoubleClick");&lt;br /&gt;        eventMap.put(SWT.MouseMove, "MouseMove");&lt;br /&gt;        eventMap.put(SWT.Resize, "Resize");&lt;br /&gt;        eventMap.put(SWT.Move, "Move");&lt;br /&gt;        eventMap.put(SWT.Close, "Close");&lt;br /&gt;        eventMap.put(SWT.Activate, "Activate");&lt;br /&gt;        eventMap.put(SWT.Deactivate, "Deactivate");&lt;br /&gt;        eventMap.put(SWT.Iconify, "Iconify");&lt;br /&gt;        eventMap.put(SWT.Deiconify, "Deiconify");&lt;br /&gt;        eventMap.put(SWT.Expand, "Expand");&lt;br /&gt;        eventMap.put(SWT.Collapse, "Collapse");&lt;br /&gt;        eventMap.put(SWT.Modify, "Modify");&lt;br /&gt;        eventMap.put(SWT.Verify, "Verify");&lt;br /&gt;        eventMap.put(SWT.Help, "Help");&lt;br /&gt;        eventMap.put(SWT.Arm, "Arm");&lt;br /&gt;        eventMap.put(SWT.MouseExit, "MouseExit");&lt;br /&gt;        eventMap.put(SWT.MouseEnter, "MouseEnter");&lt;br /&gt;        eventMap.put(SWT.MouseHover, "MouseHover");&lt;br /&gt;        eventMap.put(SWT.Traverse, "Traverse");&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private Listener uniListener = new Listener() {&lt;br /&gt;        public void handleEvent(Event event) {&lt;br /&gt;            String eventName = eventMap.get(event.type);&lt;br /&gt;            if (eventName != null)&lt;br /&gt;                System.out&lt;br /&gt;                        .println(eventName + " \t " + event.widget.getClass());&lt;br /&gt;        }&lt;br /&gt;    };&lt;br /&gt;&lt;br /&gt;    private void addHooks(Display display) {&lt;br /&gt;        Set&amp;lt;Integer&amp;gt; eventTypes = eventMap.keySet();&lt;br /&gt;        for (Integer eventType : eventTypes)&lt;br /&gt;            display.addFilter(eventType, uniListener);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void removeHooks(Display display) {&lt;br /&gt;        Set&amp;lt;Integer&amp;gt; eventTypes = eventMap.keySet();&lt;br /&gt;        for (Integer eventType : eventTypes)&lt;br /&gt;            display.removeFilter(eventType, uniListener);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public Launcher() {&lt;br /&gt;        super();&lt;br /&gt;        Display display = new Display();&lt;br /&gt;        shell = new Shell(display);&lt;br /&gt;        shell.setText("SWTAppNQ3");&lt;br /&gt;        shell.setSize(320, 240);&lt;br /&gt;        Button button = new Button(shell, SWT.NONE);&lt;br /&gt;        button.setText("Cool Button");&lt;br /&gt;        button&lt;br /&gt;                .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {&lt;br /&gt;                    public void widgetSelected(&lt;br /&gt;                            org.eclipse.swt.events.SelectionEvent e) {&lt;br /&gt;                        MessageBox messageBox = new MessageBox(shell);&lt;br /&gt;                        messageBox.setMessage("Pressed");&lt;br /&gt;                        messageBox.open();&lt;br /&gt;                    }&lt;br /&gt;                });&lt;br /&gt;&lt;br /&gt;        button.pack();&lt;br /&gt;        addHooks(display);&lt;br /&gt;&lt;br /&gt;        shell.open();&lt;br /&gt;&lt;br /&gt;        while (!shell.isDisposed()) {&lt;br /&gt;            if (!display.readAndDispatch()) {&lt;br /&gt;                display.sleep();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        removeHooks(display);&lt;br /&gt;        display.dispose();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        new Launcher();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This program in action:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_ruD_KHp6My0/RuQwrP2_zkI/AAAAAAAAAJ0/_OjIaHfhNPc/s1600-h/screen.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_ruD_KHp6My0/RuQwrP2_zkI/AAAAAAAAAJ0/_OjIaHfhNPc/s320/screen.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5108261396894699074" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-7151620884392365602?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/7151620884392365602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=7151620884392365602' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7151620884392365602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7151620884392365602'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/09/swt-events-capturing.html' title='SWT events capturing'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_ruD_KHp6My0/RuQwrP2_zkI/AAAAAAAAAJ0/_OjIaHfhNPc/s72-c/screen.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-2428059145504549835</id><published>2007-09-09T19:24:00.001+04:00</published><updated>2007-11-01T21:05:06.760+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='SWT'/><title type='text'>SWT development quick start</title><content type='html'>&lt;a href="http://www.eclipse.org/swt"&gt;SWT: The Standard Widget Toolkit&lt;/a&gt; - is open source UI toolkit for Java applications.&lt;br /&gt;&lt;br /&gt;SWT contains powerful set of widgets - UI components.&lt;br /&gt;SWT applications work fast, because this toolkit based on native OS libraries.&lt;br /&gt;And development of SWT applications is pretty simple.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;List of SWT UI components you can see at &lt;a href="http://www.eclipse.org/swt/widgets"&gt;Widgets&lt;/a&gt; page.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ruD_KHp6My0/RuQRgv2_zjI/AAAAAAAAAJs/2FBAGik8-sI/s1600-h/step0.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_ruD_KHp6My0/RuQRgv2_zjI/AAAAAAAAAJs/2FBAGik8-sI/s320/step0.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5108227131645611570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eclipse.org/swt/snippets"&gt;Snippets&lt;/a&gt; page contains many SWT samples. It is a good idea to download all these examples and review theirs.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ruD_KHp6My0/RuQRR_2_ziI/AAAAAAAAAJk/aU7rVdo0cG4/s1600-h/step01.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ruD_KHp6My0/RuQRR_2_ziI/AAAAAAAAAJk/aU7rVdo0cG4/s320/step01.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5108226878242541090" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Start Eclipse, create new Java project.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/RuQRJf2_zhI/AAAAAAAAAJc/agWi6Eq1pNM/s1600-h/step1.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ruD_KHp6My0/RuQRJf2_zhI/AAAAAAAAAJc/agWi6Eq1pNM/s320/step1.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5108226732213653010" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Put downloaded snippets into the project's src directory.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_ruD_KHp6My0/RuQRCP2_zgI/AAAAAAAAAJU/5LFLd0j_LVY/s1600-h/step2.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_ruD_KHp6My0/RuQRCP2_zgI/AAAAAAAAAJU/5LFLd0j_LVY/s320/step2.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5108226607659601410" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Add SWT library to the project's build path from the Eclipse's plugins directory (e.g.: plugins/org.eclipse.swt.win32.win32.x86_3.2.0.v3232m.jar).&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ruD_KHp6My0/RuQQm_2_zfI/AAAAAAAAAJM/gUzUStZWorU/s1600-h/step3.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ruD_KHp6My0/RuQQm_2_zfI/AAAAAAAAAJM/gUzUStZWorU/s320/step3.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5108226139508166130" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Then select on of the snippets and run it.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_ruD_KHp6My0/RuQQdP2_zeI/AAAAAAAAAJE/HPlE81E3xd8/s1600-h/step4.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_ruD_KHp6My0/RuQQdP2_zeI/AAAAAAAAAJE/HPlE81E3xd8/s320/step4.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5108225972004441570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Does it work? :-)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ruD_KHp6My0/RuQQU_2_zdI/AAAAAAAAAI8/pN7fvRG3rM8/s1600-h/step5.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ruD_KHp6My0/RuQQU_2_zdI/AAAAAAAAAI8/pN7fvRG3rM8/s320/step5.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5108225830270520786" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;span style="font-size: large;"&gt;You may download these sources from &lt;a href="http://xantorohara.googlepages.com/xantorohara.blogspot.comsamples"&gt;Xantorohara.blogspot.com samples&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-2428059145504549835?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/2428059145504549835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=2428059145504549835' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2428059145504549835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2428059145504549835'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/09/swt-development-quick-start.html' title='SWT development quick start'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_ruD_KHp6My0/RuQRgv2_zjI/AAAAAAAAAJs/2FBAGik8-sI/s72-c/step0.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-1851114556730078103</id><published>2007-09-06T15:40:00.001+04:00</published><updated>2007-09-06T16:23:31.520+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3D'/><title type='text'>3D Pictures Gallery</title><content type='html'>Sometimes I model 3D pictures.&lt;br /&gt;These are mine:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/Rt_qBv2_zcI/AAAAAAAAAI0/zZjaAeMQUwg/s1600-h/008-640.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ruD_KHp6My0/Rt_qBv2_zcI/AAAAAAAAAI0/zZjaAeMQUwg/s320/008-640.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107057818209340866" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ruD_KHp6My0/Rt_p-_2_zbI/AAAAAAAAAIs/_C9CmeNHeaA/s1600-h/bamboo7.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_ruD_KHp6My0/Rt_p-_2_zbI/AAAAAAAAAIs/_C9CmeNHeaA/s320/bamboo7.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107057770964700594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_ruD_KHp6My0/Rt_p6f2_zaI/AAAAAAAAAIk/wU04n_93PWc/s1600-h/bubaloo.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_ruD_KHp6My0/Rt_p6f2_zaI/AAAAAAAAAIk/wU04n_93PWc/s320/bubaloo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107057693655289250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ruD_KHp6My0/Rt_p2P2_zZI/AAAAAAAAAIc/tU5DqZDhJsQ/s1600-h/conestar04.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ruD_KHp6My0/Rt_p2P2_zZI/AAAAAAAAAIc/tU5DqZDhJsQ/s320/conestar04.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107057620640845202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/Rt_puv2_zYI/AAAAAAAAAIU/MWWPkG-sjZ0/s1600-h/Dstar002.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ruD_KHp6My0/Rt_puv2_zYI/AAAAAAAAAIU/MWWPkG-sjZ0/s320/Dstar002.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107057491791826306" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ruD_KHp6My0/Rt_prP2_zXI/AAAAAAAAAIM/h8iDMSD1BNo/s1600-h/elfinity_release.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ruD_KHp6My0/Rt_prP2_zXI/AAAAAAAAAIM/h8iDMSD1BNo/s320/elfinity_release.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5107057431662284146" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ruD_KHp6My0/Rt_poP2_zWI/AAAAAAAAAIE/-itipA2JCTw/s1600-h/elfix_grub.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ruD_KHp6My0/Rt_poP2_zWI/AAAAAAAAAIE/-itipA2JCTw/s320/elfix_grub.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5107057380122676578" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ruD_KHp6My0/Rt_plP2_zVI/AAAAAAAAAH8/hrLtlKslx5I/s1600-h/gilette7.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ruD_KHp6My0/Rt_plP2_zVI/AAAAAAAAAH8/hrLtlKslx5I/s320/gilette7.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107057328583069010" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/Rt_phv2_zUI/AAAAAAAAAH0/xWBaAPV8v3k/s1600-h/greenstonehage.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ruD_KHp6My0/Rt_phv2_zUI/AAAAAAAAAH0/xWBaAPV8v3k/s320/greenstonehage.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107057268453526850" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ruD_KHp6My0/Rt_pXP2_zTI/AAAAAAAAAHs/UleTk8EMLK4/s1600-h/heart.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ruD_KHp6My0/Rt_pXP2_zTI/AAAAAAAAAHs/UleTk8EMLK4/s320/heart.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107057088064900402" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ruD_KHp6My0/Rt_pSP2_zSI/AAAAAAAAAHk/CCjsoIYC_Z8/s1600-h/jaja-bings.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ruD_KHp6My0/Rt_pSP2_zSI/AAAAAAAAAHk/CCjsoIYC_Z8/s320/jaja-bings.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107057002165554466" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ruD_KHp6My0/Rt_pO_2_zRI/AAAAAAAAAHc/LHLmaP_8QY8/s1600-h/jaja-bings-array.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_ruD_KHp6My0/Rt_pO_2_zRI/AAAAAAAAAHc/LHLmaP_8QY8/s320/jaja-bings-array.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107056946330979602" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/Rt_pLv2_zQI/AAAAAAAAAHU/3Q8INJct45Y/s1600-h/katana.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ruD_KHp6My0/Rt_pLv2_zQI/AAAAAAAAAHU/3Q8INJct45Y/s320/katana.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107056890496404738" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_ruD_KHp6My0/Rt_pIf2_zPI/AAAAAAAAAHM/1phd6yEYcL0/s1600-h/katana2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_ruD_KHp6My0/Rt_pIf2_zPI/AAAAAAAAAHM/1phd6yEYcL0/s320/katana2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107056834661829874" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_ruD_KHp6My0/Rt_o_f2_zOI/AAAAAAAAAHE/-erpJfJtHkk/s1600-h/liberty007.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_ruD_KHp6My0/Rt_o_f2_zOI/AAAAAAAAAHE/-erpJfJtHkk/s320/liberty007.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107056680043007202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ruD_KHp6My0/Rt_o7P2_zNI/AAAAAAAAAG8/Ocs6rUAKljk/s1600-h/logo.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ruD_KHp6My0/Rt_o7P2_zNI/AAAAAAAAAG8/Ocs6rUAKljk/s320/logo.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5107056607028563154" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_ruD_KHp6My0/Rt_o0f2_zMI/AAAAAAAAAG0/ABF3Ce3OTPk/s1600-h/logo2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_ruD_KHp6My0/Rt_o0f2_zMI/AAAAAAAAAG0/ABF3Ce3OTPk/s320/logo2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5107056491064446146" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ruD_KHp6My0/Rt_os_2_zLI/AAAAAAAAAGs/Id5mA1CZXGE/s1600-h/ne200021.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_ruD_KHp6My0/Rt_os_2_zLI/AAAAAAAAAGs/Id5mA1CZXGE/s320/ne200021.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107056362215427250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/Rt_omv2_zKI/AAAAAAAAAGk/-_VN6tIskns/s1600-h/ne200022.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ruD_KHp6My0/Rt_omv2_zKI/AAAAAAAAAGk/-_VN6tIskns/s320/ne200022.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107056254841244834" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_ruD_KHp6My0/Rt_oif2_zJI/AAAAAAAAAGc/Sw6RbdZkgS8/s1600-h/olimpic4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_ruD_KHp6My0/Rt_oif2_zJI/AAAAAAAAAGc/Sw6RbdZkgS8/s320/olimpic4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107056181826800786" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ruD_KHp6My0/Rt_oeP2_zII/AAAAAAAAAGU/0PHfRMkMXf4/s1600-h/phone17.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ruD_KHp6My0/Rt_oeP2_zII/AAAAAAAAAGU/0PHfRMkMXf4/s320/phone17.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107056108812356738" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ruD_KHp6My0/Rt_obP2_zHI/AAAAAAAAAGM/GIZ8_R0B3uE/s1600-h/rapira004.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ruD_KHp6My0/Rt_obP2_zHI/AAAAAAAAAGM/GIZ8_R0B3uE/s320/rapira004.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107056057272749170" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/Rt_oXv2_zGI/AAAAAAAAAGE/rfUJaYwJ1DU/s1600-h/rapira009.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ruD_KHp6My0/Rt_oXv2_zGI/AAAAAAAAAGE/rfUJaYwJ1DU/s320/rapira009.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107055997143207010" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ruD_KHp6My0/Rt_oQ_2_zFI/AAAAAAAAAF8/sYCSrxrQNEc/s1600-h/Redmons.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_ruD_KHp6My0/Rt_oQ_2_zFI/AAAAAAAAAF8/sYCSrxrQNEc/s320/Redmons.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107055881179090002" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ruD_KHp6My0/Rt_oIP2_zEI/AAAAAAAAAF0/dWZcnS3_mpo/s1600-h/rose04_1-100.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ruD_KHp6My0/Rt_oIP2_zEI/AAAAAAAAAF0/dWZcnS3_mpo/s320/rose04_1-100.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107055730855234626" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/Rt_oBv2_zDI/AAAAAAAAAFs/2ETlghSLoI8/s1600-h/rose062.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ruD_KHp6My0/Rt_oBv2_zDI/AAAAAAAAAFs/2ETlghSLoI8/s320/rose062.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107055619186084914" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_ruD_KHp6My0/Rt_n5f2_zCI/AAAAAAAAAFk/J2I0nAYjt0Y/s1600-h/space_walker5.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_ruD_KHp6My0/Rt_n5f2_zCI/AAAAAAAAAFk/J2I0nAYjt0Y/s320/space_walker5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107055477452164130" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ruD_KHp6My0/Rt_ny_2_zBI/AAAAAAAAAFc/92WXFX2H5rg/s1600-h/sphereS.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_ruD_KHp6My0/Rt_ny_2_zBI/AAAAAAAAAFc/92WXFX2H5rg/s320/sphereS.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107055365783014418" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ruD_KHp6My0/Rt_nr_2_zAI/AAAAAAAAAFU/8VT4QFime8Y/s1600-h/stm_nte06.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_ruD_KHp6My0/Rt_nr_2_zAI/AAAAAAAAAFU/8VT4QFime8Y/s320/stm_nte06.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107055245523930114" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/Rt_nmv2_y_I/AAAAAAAAAFM/EK-0ByQ-asE/s1600-h/strela.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ruD_KHp6My0/Rt_nmv2_y_I/AAAAAAAAAFM/EK-0ByQ-asE/s320/strela.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107055155329616882" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ruD_KHp6My0/Rt_ni_2_y-I/AAAAAAAAAFE/ofi4Os0N7bM/s1600-h/strela6.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_ruD_KHp6My0/Rt_ni_2_y-I/AAAAAAAAAFE/ofi4Os0N7bM/s320/strela6.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107055090905107426" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ruD_KHp6My0/Rt_nfP2_y9I/AAAAAAAAAE8/UkgnJxALLhA/s1600-h/Yula02.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ruD_KHp6My0/Rt_nfP2_y9I/AAAAAAAAAE8/UkgnJxALLhA/s320/Yula02.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5107055026480597970" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_ruD_KHp6My0/Rt_nWf2_y8I/AAAAAAAAAE0/exTRQSQyi5I/s1600-h/zbody.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_ruD_KHp6My0/Rt_nWf2_y8I/AAAAAAAAAE0/exTRQSQyi5I/s320/zbody.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5107054876156742594" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-1851114556730078103?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/1851114556730078103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=1851114556730078103' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/1851114556730078103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/1851114556730078103'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/09/3d-pictures-gallery.html' title='3D Pictures Gallery'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_ruD_KHp6My0/Rt_qBv2_zcI/AAAAAAAAAI0/zZjaAeMQUwg/s72-c/008-640.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-6749888807696425524</id><published>2007-09-03T09:37:00.000+04:00</published><updated>2007-09-03T10:08:27.985+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='Ecology'/><category scheme='http://www.blogger.com/atom/ns#' term='Site'/><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>Server from a garbage</title><content type='html'>Last week I started my new project, server and site: &lt;a href="http://xantorohara.com"&gt;xantorohara.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've compiled this server from a "garbage": old PC board, 133MHz processor, 64MB SIMM memory, carton box, scotch tape, wires...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/RtugLv2_yzI/AAAAAAAAADs/1Od8kECCSv8/s1600-h/CIMG1597.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ruD_KHp6My0/RtugLv2_yzI/AAAAAAAAADs/1Od8kECCSv8/s400/CIMG1597.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5105850726240734002" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And it works. Cool, noiseless, energy-efficient, with enough performance for my tasks.&lt;br /&gt;Really, I'm the fan of all old hardware!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/RtugRv2_y0I/AAAAAAAAAD0/9NoYnkNw5-8/s1600-h/DSC00605.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ruD_KHp6My0/RtugRv2_y0I/AAAAAAAAAD0/9NoYnkNw5-8/s400/DSC00605.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5105850829319949122" /&gt;&lt;/a&gt;&lt;br /&gt;Old plates such good!&lt;br /&gt;And I think that reusing of the old hardware will improve ecology on our Earth.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-6749888807696425524?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/6749888807696425524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=6749888807696425524' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/6749888807696425524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/6749888807696425524'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/09/server-from-garbage.html' title='Server from a garbage'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_ruD_KHp6My0/RtugLv2_yzI/AAAAAAAAADs/1Od8kECCSv8/s72-c/CIMG1597.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-549375763639917036</id><published>2007-08-29T00:09:00.000+04:00</published><updated>2007-08-29T00:27:16.852+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WinAPI'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>Windows Service Simple Sample</title><content type='html'>Some years ago I was C/C++ developer and I wrote several windows services.&lt;br /&gt;I know that writing of service programs is quite difficult for beginners.&lt;br /&gt;&lt;br /&gt;In this post I'm publishing simple working example.&lt;br /&gt;This service only beeps with one second's interval after starts.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;hr/&gt;&lt;b&gt;service.c&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;windows.h&amp;gt;&lt;br /&gt;&lt;br /&gt;HANDLE  hServerStopEvent = NULL;&lt;br /&gt;VOID ServiceBody();&lt;br /&gt;VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv);&lt;br /&gt;VOID WINAPI ServiceControlHandler(DWORD dwCtrlCode);&lt;br /&gt;BOOL ReportStatusToSCMgr(DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwWaitHint);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SERVICE_STATUS          ssStatus;&lt;br /&gt;SERVICE_STATUS_HANDLE   sshStatusHandle;&lt;br /&gt;&lt;br /&gt;void _cdecl main(int argc, char **argv)&lt;br /&gt;{&lt;br /&gt;    SERVICE_TABLE_ENTRY dispatchTable[] = &lt;br /&gt;        {{"", (LPSERVICE_MAIN_FUNCTION)ServiceMain }, { NULL, NULL }};&lt;br /&gt;    StartServiceCtrlDispatcher(dispatchTable);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv)&lt;br /&gt;{&lt;br /&gt;    sshStatusHandle = RegisterServiceCtrlHandler( "", ServiceControlHandler);&lt;br /&gt;&lt;br /&gt;    if (!sshStatusHandle)&lt;br /&gt;        goto cleanup;&lt;br /&gt;&lt;br /&gt;    ssStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;&lt;br /&gt;    ssStatus.dwServiceSpecificExitCode = 0;&lt;br /&gt;&lt;br /&gt;    if (!ReportStatusToSCMgr(SERVICE_START_PENDING, NO_ERROR, 3000))&lt;br /&gt;        goto cleanup;&lt;br /&gt;&lt;br /&gt;    ServiceBody();&lt;br /&gt;&lt;br /&gt;cleanup:&lt;br /&gt;    if (sshStatusHandle)&lt;br /&gt;        (VOID)ReportStatusToSCMgr(SERVICE_STOPPED, NO_ERROR, 0);&lt;br /&gt;    return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;VOID WINAPI ServiceControlHandler(DWORD dwCtrlCode)&lt;br /&gt;{&lt;br /&gt;    if(dwCtrlCode==SERVICE_CONTROL_STOP)&lt;br /&gt;    {&lt;br /&gt;        ReportStatusToSCMgr(SERVICE_STOP_PENDING, NO_ERROR, 0);&lt;br /&gt;        if ( hServerStopEvent )&lt;br /&gt;            SetEvent(hServerStopEvent);&lt;br /&gt;    }&lt;br /&gt;    ReportStatusToSCMgr(ssStatus.dwCurrentState, NO_ERROR, 0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;BOOL ReportStatusToSCMgr(DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwWaitHint)&lt;br /&gt;{&lt;br /&gt;    if (dwCurrentState == SERVICE_START_PENDING)&lt;br /&gt;        ssStatus.dwControlsAccepted = 0;&lt;br /&gt;    else&lt;br /&gt;        ssStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;&lt;br /&gt;&lt;br /&gt;    ssStatus.dwCurrentState = dwCurrentState;&lt;br /&gt;    ssStatus.dwWin32ExitCode = dwWin32ExitCode;&lt;br /&gt;    ssStatus.dwWaitHint = dwWaitHint;&lt;br /&gt;&lt;br /&gt;    if ( ( dwCurrentState == SERVICE_RUNNING ) &lt;br /&gt;        || ( dwCurrentState == SERVICE_STOPPED ) )&lt;br /&gt;        ssStatus.dwCheckPoint = 0;&lt;br /&gt;    else&lt;br /&gt;        ssStatus.dwCheckPoint++;&lt;br /&gt;&lt;br /&gt;    return SetServiceStatus( sshStatusHandle, &amp;amp;ssStatus);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//This sample only beeps.&lt;br /&gt;VOID ServiceBody ()&lt;br /&gt;{   &lt;br /&gt;    hServerStopEvent = CreateEvent(NULL, TRUE, FALSE, NULL);&lt;br /&gt;    if (!hServerStopEvent)&lt;br /&gt;        goto cleanup;&lt;br /&gt;&lt;br /&gt;    if (!ReportStatusToSCMgr(SERVICE_RUNNING, NO_ERROR, 0))&lt;br /&gt;        goto cleanup;&lt;br /&gt;&lt;br /&gt;    do &lt;br /&gt;    {&lt;br /&gt;        MessageBeep(-1);&lt;br /&gt;    } while (WaitForSingleObject(hServerStopEvent, 1000 )== WAIT_TIMEOUT);&lt;br /&gt;&lt;br /&gt;cleanup:&lt;br /&gt;    if (hServerStopEvent)&lt;br /&gt;        CloseHandle(hServerStopEvent);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Script for compiling with Visual C++ 6.0:&lt;br /&gt;&lt;pre&gt;&lt;hr/&gt;&lt;b&gt;make_vc6.bat&lt;/b&gt;&lt;br /&gt;@call "D:\Program Files\Microsoft Visual Studio\VC98\Bin\vcvars32.bat"&lt;br /&gt;@cl /nologo service.c user32.lib advapi32.lib&lt;br /&gt;@del service.obj&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you use Visual C++ Express, you need additional Platform SDK from Microsoft.&lt;br /&gt;&lt;br /&gt;Install (register) service via command:&lt;br /&gt;&lt;pre&gt;&lt;hr/&gt;&lt;b&gt;service_create.bat&lt;/b&gt;&lt;br /&gt;sc create "XQX Service" binPath= %CD%\service.exe&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Start service via command:&lt;br /&gt;&lt;pre&gt;&lt;hr/&gt;&lt;b&gt;service_start.bat&lt;/b&gt;&lt;br /&gt;net start "XQX Service"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Stop service via command:&lt;br /&gt;&lt;pre&gt;&lt;hr/&gt;&lt;b&gt;service_stop.bat&lt;/b&gt;&lt;br /&gt;net stop "XQX Service"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Uninstall (remove) service via command:&lt;br /&gt;&lt;pre&gt;&lt;hr/&gt;&lt;b&gt;service_delete.bat&lt;/b&gt;&lt;br /&gt;sc delete "XQX Service"&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-549375763639917036?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/549375763639917036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=549375763639917036' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/549375763639917036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/549375763639917036'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/08/windows-service-simple-sample.html' title='Windows Service Simple Sample'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-393110188981294159</id><published>2007-08-28T22:30:00.000+04:00</published><updated>2007-08-28T22:41:00.957+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>Blog locking</title><content type='html'>Last week my blog was locked by Blogger's spam-prevention robots...&lt;br /&gt;It say:&lt;br /&gt;&lt;em&gt;Blogger's spam-prevention robots have detected that your blog has characteristics of a spam blog.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;But today Blogger's operators have appologized:&lt;br /&gt;&lt;em&gt;Your blog has been reviewed, verified, and cleared for regular use so that&lt;br /&gt;it will no longer appear as potential spam. If you sign out of Blogger and&lt;br /&gt;sign back in again, you should be able to post as normal. Thanks for your&lt;br /&gt;patience, and we apologize for any inconvenience this has caused.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;And now I'm available again :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-393110188981294159?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/393110188981294159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=393110188981294159' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/393110188981294159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/393110188981294159'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/08/blog-locking.html' title='Blog locking'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-261446931412952676</id><published>2007-08-22T13:38:00.000+04:00</published><updated>2007-08-23T13:17:09.173+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><title type='text'>Matrox Mystique Rainbow Runner</title><content type='html'>The best item in my collection of computer hardware is video card "Matrox Mystique Rainbow Runner".&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ruD_KHp6My0/RswEav2_ytI/AAAAAAAAAC8/z2ktFgZkeTg/s1600-h/CIMG1612.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_ruD_KHp6My0/RswEav2_ytI/AAAAAAAAAC8/z2ktFgZkeTg/s400/CIMG1612.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5101457335474178770" /&gt;&lt;/a&gt;&lt;br /&gt;This card looks like a sandwich.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/RswEff2_yuI/AAAAAAAAADE/YIrQF50RxYY/s1600-h/CIMG1613.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ruD_KHp6My0/RswEff2_yuI/AAAAAAAAADE/YIrQF50RxYY/s400/CIMG1613.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5101457417078557410" /&gt;&lt;/a&gt;&lt;br /&gt;It comprises two pieces: main and child.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ruD_KHp6My0/RswEkv2_yvI/AAAAAAAAADM/LguYkBF2fc0/s1600-h/CIMG1614.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_ruD_KHp6My0/RswEkv2_yvI/AAAAAAAAADM/LguYkBF2fc0/s400/CIMG1614.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5101457507272870642" /&gt;&lt;/a&gt;&lt;br /&gt;And also has a set of cables and CDs.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/RswEpf2_ywI/AAAAAAAAADU/1aXRAcqVJUo/s1600-h/CIMG1615.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ruD_KHp6My0/RswEpf2_ywI/AAAAAAAAADU/1aXRAcqVJUo/s400/CIMG1615.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5101457588877249282" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;But it works only in Win3.1-Win95, because this card has been released in past century.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-261446931412952676?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/261446931412952676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=261446931412952676' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/261446931412952676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/261446931412952676'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/08/matrox-mistique-rainbow-runner.html' title='Matrox Mystique Rainbow Runner'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_ruD_KHp6My0/RswEav2_ytI/AAAAAAAAAC8/z2ktFgZkeTg/s72-c/CIMG1612.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-4495189179554433190</id><published>2007-08-20T23:51:00.001+04:00</published><updated>2007-08-21T01:03:34.888+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>HowTo disable speaker in the Linux terminal</title><content type='html'>Speaker in the linux console is very tiresome.&lt;br /&gt;I know way how to disable system speaker.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Insert line:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;set bell-style none&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;to the file &lt;code&gt;&lt;em&gt;.input.rc&lt;/em&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Execute command:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;em&gt;setterm -blength 0&lt;/em&gt;&lt;br /&gt;or&lt;br /&gt;&lt;em&gt;setterm -bfreq 0&lt;/em&gt;&lt;br /&gt;or&lt;br /&gt;&lt;em&gt;echo -ne '\033[11;0]'&lt;/em&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;Enjoy :-).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-4495189179554433190?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/4495189179554433190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=4495189179554433190' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4495189179554433190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4495189179554433190'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/08/howto-disable-speaker-in-linux-terminal.html' title='HowTo disable speaker in the Linux terminal'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-2150561376365558525</id><published>2007-08-20T23:21:00.000+04:00</published><updated>2007-08-20T23:47:28.921+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>HowTo root login without password</title><content type='html'>Only add kernel parameter &lt;code&gt;&lt;em&gt;init=/bin/bash&lt;/em&gt;&lt;/code&gt; at boot time.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;If the boot loader is GRUB, change string parameter from:&lt;br /&gt;   &lt;code&gt;kernel          /boot/vmlinuz-2.6.15-26-386 ...&lt;/code&gt;&lt;br /&gt;to:&lt;br /&gt;   &lt;code&gt;kernel          /boot/vmlinuz-2.6.15-26-386 ... &lt;span style="color:red;"&gt;init=/bin/bash&lt;span&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;If the boot loader is LILO, enter:&lt;br /&gt;boot: &lt;code&gt;linux &lt;span style="color:red;"&gt;init=/bin/sh&lt;span&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;! You should have physical access to the linux server.&lt;/em&gt;&lt;br /&gt;&lt;em&gt;!! It works only when boot loader not have an own password.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Then you can do everything with root permissions, for example repair system or restore root password.&lt;br /&gt;If you want to disable readonly mode, type &lt;code&gt;&lt;em&gt;mount -o remount,rw /&lt;/em&gt;&lt;/code&gt; in the command line.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-2150561376365558525?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/2150561376365558525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=2150561376365558525' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2150561376365558525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2150561376365558525'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/08/howto-root-login-without-password.html' title='HowTo root login without password'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-1123860260947426805</id><published>2007-08-17T10:30:00.000+04:00</published><updated>2007-08-17T10:55:21.572+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Interleaved table</title><content type='html'>Every time I hear question: "How to paint odd and even rows in html table in different colors".&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ruD_KHp6My0/RsVB3f2_ysI/AAAAAAAAAC0/awyB92D4MoY/s1600-h/Screenshot.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_ruD_KHp6My0/RsVB3f2_ysI/AAAAAAAAAC0/awyB92D4MoY/s400/Screenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5099554574767737538" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is the example how to do it simple:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;style type="text/css"&amp;gt;&lt;br /&gt;&lt;span style="color:red;"&gt;&lt;br /&gt;        .odd {background-color: #eee;}&lt;br /&gt;        .even {background-color: #fff;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;    &amp;lt;/style&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&lt;span style="color:red;"&gt;&lt;br /&gt;        function zebra(tableId)&lt;br /&gt;        {&lt;br /&gt;            var table=document.getElementById(tableId);&lt;br /&gt;            if (table)&lt;br /&gt;            {&lt;br /&gt;                var rows = table.getElementsByTagName("tr");&lt;br /&gt;&lt;br /&gt;                for (var i = 0; rows.length &amp;gt; i; i++)&lt;br /&gt;                {&lt;br /&gt;                    rows[i].className = ((i % 2) == 0 ? "odd" : "even");&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;    &amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;table &lt;span style="color:red;"&gt;id="irregular"&lt;/span&gt;&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;        &amp;lt;td&amp;gt;break&amp;lt;/td&amp;gt;&lt;br /&gt;        &amp;lt;td&amp;gt;broke&amp;lt;/td&amp;gt;&lt;br /&gt;        &amp;lt;td&amp;gt;broken&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;        &amp;lt;td&amp;gt;buy&amp;lt;/td&amp;gt;&lt;br /&gt;        &amp;lt;td&amp;gt;bought&amp;lt;/td&amp;gt;&lt;br /&gt;        &amp;lt;td&amp;gt;bought&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;        &amp;lt;td&amp;gt;catch&amp;lt;/td&amp;gt;&lt;br /&gt;        &amp;lt;td&amp;gt;caught&amp;lt;/td&amp;gt;&lt;br /&gt;        &amp;lt;td&amp;gt;caught&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;        &amp;lt;td&amp;gt;forget&amp;lt;/td&amp;gt;&lt;br /&gt;        &amp;lt;td&amp;gt;forgot&amp;lt;/td&amp;gt;&lt;br /&gt;        &amp;lt;td&amp;gt;forgotten&amp;lt;/td&amp;gt;        &lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:red;"&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;    zebra("irregular");&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-1123860260947426805?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/1123860260947426805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=1123860260947426805' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/1123860260947426805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/1123860260947426805'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/08/interleaved-table.html' title='Interleaved table'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_ruD_KHp6My0/RsVB3f2_ysI/AAAAAAAAAC0/awyB92D4MoY/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-6999172760983814271</id><published>2007-08-15T22:21:00.000+04:00</published><updated>2007-08-16T23:44:44.275+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><title type='text'>Power Designer - the best UML and database modeling tool</title><content type='html'>The best software modeling tool which I've ever used is &lt;a href="http://www.sybase.com/products/modelingmetadata/powerdesigner"&gt;Power Designer&lt;/a&gt; from Sybase.&lt;br /&gt;I've got acquainted with this program some years ago (it was a repackaged  version "QDesigner" by Quest Software).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/RsNGE4OCIKI/AAAAAAAAACM/kUmsv0EvbJk/s1600-h/powerdesigner.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_ruD_KHp6My0/RsNGE4OCIKI/AAAAAAAAACM/kUmsv0EvbJk/s400/powerdesigner.PNG" alt="" id="BLOGGER_PHOTO_ID_5098996252738199714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've really enjoyed developing with this tool.&lt;br /&gt;This tool is very useful and usable, flexible, easy to use and pretty good.&lt;br /&gt;&lt;br /&gt;Power Designer CD contains some visual samples.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/RsSLkf2_yrI/AAAAAAAAACs/zVrN-cLPEAw/s1600-h/screen.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ruD_KHp6My0/RsSLkf2_yrI/AAAAAAAAACs/zVrN-cLPEAw/s400/screen.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5099354137233967794" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Object Oriented Model&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;It is possible to create UML diagrams (classes, sequence, deployment, etc.) and generate source codes (for many programming languages) from the model.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ruD_KHp6My0/RsSLYv2_yqI/AAAAAAAAACk/QSim5AGDx0A/s1600-h/langs.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_ruD_KHp6My0/RsSLYv2_yqI/AAAAAAAAACk/QSim5AGDx0A/s400/langs.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5099353935370504866" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Physical Data Model&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Development of a database turns to pleasure. Power Designer can generate SQL scripts with databases and tables definitions. Also it can create test data sets.&lt;br /&gt; &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ruD_KHp6My0/RsSLP_2_ypI/AAAAAAAAACc/Wgys3eFNQgk/s1600-h/dbtype.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ruD_KHp6My0/RsSLP_2_ypI/AAAAAAAAACc/Wgys3eFNQgk/s400/dbtype.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5099353785046649490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've tested and evaluated some trial versions of Power Designer and I may say "it is the best".&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_ruD_KHp6My0/RsNGOoOCILI/AAAAAAAAACU/2Uq7QmVxyPQ/s1600-h/enmodel.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_ruD_KHp6My0/RsNGOoOCILI/AAAAAAAAACU/2Uq7QmVxyPQ/s400/enmodel.jpg" alt="" id="BLOGGER_PHOTO_ID_5098996420241924274" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You may download free evaluation copy of &lt;a href="http://www.sybase.com/products/modelingmetadata/powerdesigner"&gt;Power Designer&lt;/a&gt; or buy it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-6999172760983814271?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/6999172760983814271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=6999172760983814271' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/6999172760983814271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/6999172760983814271'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/08/power-designer-best-uml-and-database.html' title='Power Designer - the best UML and database modeling tool'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_ruD_KHp6My0/RsNGE4OCIKI/AAAAAAAAACM/kUmsv0EvbJk/s72-c/powerdesigner.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-7904624605352396263</id><published>2007-08-14T15:30:00.000+04:00</published><updated>2007-08-14T17:07:23.634+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>HowTo check files integrity via shell script</title><content type='html'>In order to control integrity of files on my fileserver I've created special script.&lt;br /&gt;It walks around filesystem (in the given directory) and calculates checksums for files or checks their.&lt;br /&gt;If the file has been changed after last check the warning message will be displayed.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/RsGUKYOCIJI/AAAAAAAAACE/R0Ie-pGH4Vw/s1600-h/uintegra.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ruD_KHp6My0/RsGUKYOCIJI/AAAAAAAAACE/R0Ie-pGH4Vw/s400/uintegra.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5098519159181025426" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Script:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;xqx_uintegra.sh &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;#Checks files integrity via md5sum utility.&lt;br /&gt;#&lt;br /&gt;#For removal of all *.md5 files, execute: find -name "*.md5" -exec rm {} \;&lt;br /&gt;#Usage:&lt;br /&gt;#       xqx_uintegra.sh "/path/to/directory"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;DATE=`date +%Y.%m.%d_%H.%M.%S.%N`&lt;br /&gt;LOG=~/`basename $0`-$DATE.log&lt;br /&gt;touch $LOG&lt;br /&gt;&lt;br /&gt;if test ! -w "$LOG"; then&lt;br /&gt;    LOG=/dev/stdout&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;SHIFT=$[`tput cols`-10]&lt;br /&gt;MOVE="\\033["$SHIFT"G"&lt;br /&gt;DEFAULT="\\033[0;39m"&lt;br /&gt;RED="\\033[1;31m"&lt;br /&gt;GREEN="\\033[1;32m"&lt;br /&gt;YELLOW="\\033[1;33m"&lt;br /&gt;BLUE="\\033[1;34m"&lt;br /&gt;&lt;br /&gt;logError_end() {&lt;br /&gt;    echo -e "$MOVE$RED$1$DEFAULT"&lt;br /&gt;    echo -e \\t$1 &amp;gt;&amp;gt;$LOG&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;logOk_end() {&lt;br /&gt;    echo -e "$MOVE$GREEN$1$DEFAULT"&lt;br /&gt;    echo -e \\t$1 &amp;gt;&amp;gt;$LOG&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;logWarning_end() {&lt;br /&gt;    echo -e "$MOVE$YELLOW$1$DEFAULT"&lt;br /&gt;    echo -e \\t$1 &amp;gt;&amp;gt;$LOG&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;checkSum() {&lt;br /&gt;    #$1=file&lt;br /&gt;    echo -en CheckSum:\\t$1&lt;br /&gt;    echo -en CheckSum:\\t$1 &amp;gt;&amp;gt;$LOG&lt;br /&gt;    file=`basename $1`&lt;br /&gt;    dir=`dirname $1`&lt;br /&gt;    (cd $dir &amp;amp;&amp;amp; md5sum -c -- $file &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;amp; logOk_end OK || logError_end ERROR)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;calcSum() {&lt;br /&gt;    #$1=file&lt;br /&gt;    echo -en CalcSum:\\t$1&lt;br /&gt;    echo -en CalcSum:\\t$1 &amp;gt;&amp;gt;$LOG&lt;br /&gt;    file=`basename $1`&lt;br /&gt;    dir=`dirname $1`&lt;br /&gt;    (cd $dir &amp;amp;&amp;amp; md5sum -b -- $file &amp;gt;$file.md5 2&amp;gt;/dev/null &amp;amp;&amp;amp; logWarning_end CALCULATED || logError_end ERROR)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;fin_process() {&lt;br /&gt;    while read; do&lt;br /&gt;        #echo $REPLY&lt;br /&gt;        if test -n "`echo $REPLY | grep '\.md5$'`"; then    &lt;br /&gt;            checkSum $REPLY&lt;br /&gt;        else&lt;br /&gt;            if test ! -f "$REPLY.md5"; then&lt;br /&gt;                calcSum $REPLY&lt;br /&gt;            fi&lt;br /&gt;        fi&lt;br /&gt;    done&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;find $1 -type f | fin_process;&lt;br /&gt;echo &lt;br /&gt;echo -e "\\033[1;31m"&lt;br /&gt;cat $LOG |grep ERROR&lt;br /&gt;echo -e "\\033[0;39m"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This script works in Linux systems and under Cygwin environment.&lt;br /&gt;&lt;br /&gt;Examples of usages:&lt;br /&gt;In the Windows+Cygwin:&lt;br /&gt;&lt;code&gt;&lt;b&gt;bash xqx_uintegra.sh E:/Temp/sun&lt;/b&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;In the Linux:&lt;br /&gt;&lt;code&gt;&lt;b&gt;xqx_uintegra.sh /home/fileserver&lt;/b&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-7904624605352396263?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/7904624605352396263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=7904624605352396263' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7904624605352396263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7904624605352396263'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/08/howto-check-files-integrity-via-shell.html' title='HowTo check files integrity via shell script'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_ruD_KHp6My0/RsGUKYOCIJI/AAAAAAAAACE/R0Ie-pGH4Vw/s72-c/uintegra.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-342829906029560730</id><published>2007-08-13T20:30:00.001+04:00</published><updated>2007-08-13T22:09:20.299+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>HowTo understand Vi ( Vim ) editor</title><content type='html'>"Vim (Vi Improved) is very powerful editor..."&lt;br /&gt;It is true, I know, I like it. Vi is the best editor for the Linux/Unix console.&lt;br /&gt;&lt;br /&gt;Have you tried to understand Vi?&lt;br /&gt;&lt;br /&gt;Most people don't understand Vi, because they don't like console and command line, it is needlessly for theirs.&lt;br /&gt;Vi is good for servers, embedded and non-GUI systems;&lt;br /&gt;for admins, linux developers and gurus,&lt;br /&gt;but not for normal people, at first look.&lt;br /&gt;&lt;br /&gt;You may execute &lt;code&gt;&lt;em&gt;vimtutor&lt;/em&gt;&lt;/code&gt; in your command line in order to understand Vi.&lt;br /&gt;Vimtutor is great tutorial.&lt;br /&gt;&lt;br /&gt;Also Vi supports highlighting for many types of files.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_ruD_KHp6My0/RsCIPYOCIII/AAAAAAAAAB8/sHrZSoNRksw/s1600-h/Screenshot-1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_ruD_KHp6My0/RsCIPYOCIII/AAAAAAAAAB8/sHrZSoNRksw/s400/Screenshot-1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5098224575964127362" /&gt;&lt;/a&gt;&lt;br /&gt;I've created consolidated list of Vi commands and hot keys:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;b&gt;Navigation&lt;/b&gt;&lt;br /&gt;h               move cursor left&lt;br /&gt;j               move cursor down&lt;br /&gt;k               move cursor up&lt;br /&gt;l               move cursor right&lt;br /&gt;i, INSERT       edit mode&lt;br /&gt;R               replace mode&lt;br /&gt;ESC             normal mode&lt;br /&gt;CTRL-g          show filename, current location in the file and status&lt;br /&gt;SHIFT-g         goto the end of file&lt;br /&gt;&lt;i&gt;number&lt;/i&gt;+SHIFT-g  goto to the line &lt;i&gt;number&lt;/i&gt;&lt;br /&gt;%               goto the matching pair for brackets [, ], {, }, (, )&lt;br /&gt;:syntax on      switch text highlight on&lt;br /&gt;:help &lt;i&gt;command&lt;/i&gt;   help for the &lt;i&gt;command&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Search&lt;/b&gt;&lt;br /&gt;/               search text&lt;br /&gt;n               search text again&lt;br /&gt;?               search in the backward direction&lt;br /&gt;SHIFT-N         search text again in opposite direction&lt;br /&gt;:set ic         search ignore cases&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Edit&lt;/b&gt;&lt;br /&gt;x               delete character under cursor&lt;br /&gt;de              delete to the end of word&lt;br /&gt;dw              delete to the end of word+space&lt;br /&gt;d$              delete to the end of line&lt;br /&gt;d^              delete to the begin of line&lt;br /&gt;dd              delete a whole line&lt;br /&gt;&lt;br /&gt;ce,w,$,^        do the same as delete command, but also switch to edit mode &lt;br /&gt;&lt;br /&gt;u               undo the last command&lt;br /&gt;U               restore line to it's original state&lt;br /&gt;CTRL-R          redo the last command&lt;br /&gt;&lt;br /&gt;p               put the last deletion after the cursor&lt;br /&gt;o,O             open new empty line below/above the cursor and switch to the edit mode&lt;br /&gt;a               append text after the cursor&lt;br /&gt;A               append text to the end of a line&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Replace&lt;/b&gt;&lt;br /&gt;r+&lt;i&gt;character&lt;/i&gt;     replace character under cursor&lt;br /&gt;:s/&lt;i&gt;old&lt;/i&gt;/&lt;i&gt;new&lt;/i&gt;      replace old text with new text (once)&lt;br /&gt;:s/&lt;i&gt;old&lt;/i&gt;/&lt;i&gt;new&lt;/i&gt;/g    replace all old text with new text in the line&lt;br /&gt;:s/&lt;i&gt;old&lt;/i&gt;/&lt;i&gt;new&lt;/i&gt;/gc   replace all old text with new text in the line, but ask to confirmation&lt;br /&gt;:%s/&lt;i&gt;old&lt;/i&gt;/&lt;i&gt;new&lt;/i&gt;/g   replace all old text with new text in the file&lt;br /&gt;:&lt;i&gt;#&lt;/i&gt;,&lt;i&gt;#&lt;/i&gt;s/&lt;i&gt;old&lt;/i&gt;/&lt;i&gt;new&lt;/i&gt;/g replace all old text with new text between lines in the range #,# &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Common&lt;/b&gt;&lt;br /&gt;&lt;i&gt;number&lt;/i&gt;+&lt;i&gt;command&lt;/i&gt;  repeat &lt;i&gt;command&lt;/i&gt;  &lt;i&gt;number&lt;/i&gt; of times (e.g.: 2dd deletes two lines, 5j moves five lines down)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;File&lt;/b&gt;&lt;br /&gt;:q!             exit without changes&lt;br /&gt;:w              save file&lt;br /&gt;:wq             save and exit&lt;br /&gt;:w &lt;i&gt;filename&lt;/i&gt;     save file as &lt;i&gt;filename&lt;/i&gt;&lt;br /&gt;:#,# w &lt;i&gt;filename&lt;/i&gt; save part of file between lines in the range #,#&lt;br /&gt;:r &lt;i&gt;filename&lt;/i&gt;     insert the contents of the file&lt;br /&gt;:!&lt;i&gt;command&lt;/i&gt;       execute external command&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This article is created in Vi!&lt;br /&gt;&lt;br /&gt;There are some programs which syntax is partially compatible with Vi: ed, sed (stream editor) and others.&lt;br /&gt;E.g.:&lt;br /&gt;command &lt;code&gt;&lt;em&gt;cat file.txt |sed -e '1,10s/a/A/g'&lt;/em&gt;&lt;/code&gt; replaces all 'a' with 'A' from 1 to 10 line.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-342829906029560730?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/342829906029560730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=342829906029560730' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/342829906029560730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/342829906029560730'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/08/howto-understand-vi-vim-editor.html' title='HowTo understand Vi ( Vim ) editor'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_ruD_KHp6My0/RsCIPYOCIII/AAAAAAAAAB8/sHrZSoNRksw/s72-c/Screenshot-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-4469657987510807696</id><published>2007-08-11T01:55:00.000+04:00</published><updated>2007-08-11T03:29:48.557+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>HowTo move objects within the html page via JavaScript</title><content type='html'>For one of my web projects I created universal JavaScript for moving any objects within the page. This is my simple Drag and Drop implementation.&lt;br /&gt;I'm publishing this source. I think, it will be illustrative and useful example.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_ruD_KHp6My0/RrzuxYOCIFI/AAAAAAAAABk/5hPvyuJ7zkQ/s1600-h/Screenshot-1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_ruD_KHp6My0/RrzuxYOCIFI/AAAAAAAAABk/5hPvyuJ7zkQ/s400/Screenshot-1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5097211410358870098" /&gt;&lt;/a&gt;&lt;br /&gt;This screenshot shows how to this script works.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;style type="text/css"&amp;gt;&lt;br /&gt;    .movable {&lt;br /&gt;        position: absolute;&lt;br /&gt;        width: 100px;&lt;br /&gt;        height: 100px;&lt;br /&gt;        background-color: yellow;&lt;br /&gt;        cursor:pointer;&lt;br /&gt;        border:solid 1px gray;&lt;br /&gt;    }&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&lt;br /&gt;    var posx;&lt;br /&gt;    var posy;&lt;br /&gt;    var zMax = 0;&lt;br /&gt;    var obj;&lt;br /&gt;&lt;br /&gt;    function drag_start(itemToMove, e)&lt;br /&gt;    {&lt;br /&gt;        itemToMove.style.zIndex = ++window.zMax;&lt;br /&gt;        if (!e) e = window.event;&lt;br /&gt;        obj = itemToMove;&lt;br /&gt;        posx = e.clientX - parseInt(obj.style.left);&lt;br /&gt;        posy = e.clientY - parseInt(obj.style.top);&lt;br /&gt;        itemToMove.style.cursor="move";&lt;br /&gt;        if (e.preventDefault) e.preventDefault();&lt;br /&gt;        else e.returnValue = false;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    function drag_stop(e)&lt;br /&gt;    {&lt;br /&gt;        if (obj) {&lt;br /&gt;            obj.style.cursor="pointer";            &lt;br /&gt;            obj = null;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    function drag(e)&lt;br /&gt;    {&lt;br /&gt;        if (!obj) return;&lt;br /&gt;&lt;br /&gt;        if (!e) e = window.event;&lt;br /&gt;&lt;br /&gt;        var height, width;&lt;br /&gt;        if (document.all)&lt;br /&gt;        {&lt;br /&gt;            height = document.body.offsetHeight;&lt;br /&gt;            width = document.body.offsetWidth;&lt;br /&gt;        }&lt;br /&gt;        else if (document.layers)&lt;br /&gt;        {&lt;br /&gt;            height = window.innerHeight;&lt;br /&gt;            width = window.innerWidth;&lt;br /&gt;        }&lt;br /&gt;        var newX = e.clientX - posx;&lt;br /&gt;        var newY = e.clientY - posy;&lt;br /&gt;        if (newX &amp;lt; -obj.clientWidth / 2)&lt;br /&gt;        {&lt;br /&gt;            newX = -obj.clientWidth / 2;&lt;br /&gt;            posx = e.clientX - parseInt(obj.style.left);&lt;br /&gt;        }&lt;br /&gt;        if (newY &amp;lt; -obj.clientHeight / 2)&lt;br /&gt;        {&lt;br /&gt;            newY = -obj.clientHeight / 2;&lt;br /&gt;            posy = e.clientY - parseInt(obj.style.top);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        obj.style.left = newX;&lt;br /&gt;        obj.style.top = newY;&lt;br /&gt;&lt;br /&gt;        if (e.preventDefault) e.preventDefault();&lt;br /&gt;        else e.returnValue = false;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    document.onmousemove = drag;&lt;br /&gt;    document.onmouseup = drag_stop;&lt;br /&gt;&lt;br /&gt;    document.ondragstart = function()&lt;br /&gt;    {&lt;br /&gt;        return false;&lt;br /&gt;    }&lt;br /&gt;    document.onselectstart = function()&lt;br /&gt;    {&lt;br /&gt;        return false;&lt;br /&gt;    }&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;div class="movable" style="left:100px; top:100px;" onmousedown="drag_start(this,event)"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class="movable" style="left:200px; top:200px;" onmousedown="drag_start(this,event)"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;E.g.: I used this script in my &lt;a href="http://ruler.blogslov.ru"&gt;Online Ruler&lt;/a&gt;.&lt;br /&gt;You may see how it works, see in action.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-4469657987510807696?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/4469657987510807696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=4469657987510807696' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4469657987510807696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4469657987510807696'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/08/howto-move-objects-within-html-page-via.html' title='HowTo move objects within the html page via JavaScript'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_ruD_KHp6My0/RrzuxYOCIFI/AAAAAAAAABk/5hPvyuJ7zkQ/s72-c/Screenshot-1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-6497392772141900789</id><published>2007-08-09T21:11:00.000+04:00</published><updated>2007-08-28T22:42:10.708+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WinAPI'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>HowTo remove service in Windows</title><content type='html'>Sometimes it is necessary to remove service from the Service List in the Windows Managment Console.&lt;br /&gt;In the past I used program, which I compiled from the MSDN's sources (MSDN Library - October 2001: Samples\VC98\sdk\winbase\winnt\service).&lt;br /&gt;&lt;br /&gt;But I found another way: Windows XP contains special program &lt;code&gt;&lt;em&gt;&lt;b&gt;SC.exe&lt;/b&gt;&lt;/em&gt;&lt;/code&gt;, which can communicates with the Service Controller and installed services (start, stop, remove, create, query, etc.).&lt;br /&gt;After that I use this command in my shell scripts.&lt;br /&gt;&lt;br /&gt;E.g.: for removal of MySQL service, execute command:&lt;br /&gt;&lt;code&gt;&lt;em&gt;sc delete MySQL&lt;/em&gt;&lt;/code&gt;&lt;br /&gt;(! You may restore MySQL service via command &lt;code&gt;&lt;em&gt;mysqld-nt.exe --install&lt;/em&gt;&lt;/code&gt;)&lt;br /&gt;&lt;br /&gt;But if you want to do this from your C++ program, you may use sample's sources from MSDN.&lt;br /&gt;&lt;br /&gt;Part of these is listed below:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;hr/&gt;&lt;br /&gt;&lt;b&gt;service.c&lt;/b&gt;&lt;br /&gt;...&lt;br /&gt;void CmdRemoveService()&lt;br /&gt;{&lt;br /&gt;    SC_HANDLE   schService;&lt;br /&gt;    SC_HANDLE   schSCManager;&lt;br /&gt;&lt;br /&gt;    schSCManager = OpenSCManager(&lt;br /&gt;                        NULL,                   // machine (NULL == local)&lt;br /&gt;                        NULL,                   // database (NULL == default)&lt;br /&gt;                        SC_MANAGER_ALL_ACCESS   // access required&lt;br /&gt;                        );&lt;br /&gt;    if ( schSCManager )&lt;br /&gt;    {&lt;br /&gt;        schService = OpenService(schSCManager, TEXT(SZSERVICENAME), SERVICE_ALL_ACCESS);&lt;br /&gt;&lt;br /&gt;        if (schService)&lt;br /&gt;        {&lt;br /&gt;            // try to stop the service&lt;br /&gt;            if ( ControlService( schService, SERVICE_CONTROL_STOP, &amp;ssStatus ) )&lt;br /&gt;            {&lt;br /&gt;                _tprintf(TEXT("Stopping %s."), TEXT(SZSERVICEDISPLAYNAME));&lt;br /&gt;                Sleep( 1000 );&lt;br /&gt;&lt;br /&gt;                while( QueryServiceStatus( schService, &amp;ssStatus ) )&lt;br /&gt;                {&lt;br /&gt;                    if ( ssStatus.dwCurrentState == SERVICE_STOP_PENDING )&lt;br /&gt;                    {&lt;br /&gt;                        _tprintf(TEXT("."));&lt;br /&gt;                        Sleep( 1000 );&lt;br /&gt;                    }&lt;br /&gt;                    else&lt;br /&gt;                        break;&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                if ( ssStatus.dwCurrentState == SERVICE_STOPPED )&lt;br /&gt;                    _tprintf(TEXT("\n%s stopped.\n"), TEXT(SZSERVICEDISPLAYNAME) );&lt;br /&gt;                else&lt;br /&gt;                    _tprintf(TEXT("\n%s failed to stop.\n"), TEXT(SZSERVICEDISPLAYNAME) );&lt;br /&gt;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            // now remove the service&lt;br /&gt;            if( DeleteService(schService) )&lt;br /&gt;                _tprintf(TEXT("%s removed.\n"), TEXT(SZSERVICEDISPLAYNAME) );&lt;br /&gt;            else&lt;br /&gt;                _tprintf(TEXT("DeleteService failed - %s\n"), GetLastErrorText(szErr,256));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            CloseServiceHandle(schService);&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;            _tprintf(TEXT("OpenService failed - %s\n"), GetLastErrorText(szErr,256));&lt;br /&gt;&lt;br /&gt;        CloseServiceHandle(schSCManager);&lt;br /&gt;    }&lt;br /&gt;    else&lt;br /&gt;        _tprintf(TEXT("OpenSCManager failed - %s\n"), GetLastErrorText(szErr,256));&lt;br /&gt;}&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-6497392772141900789?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/6497392772141900789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=6497392772141900789' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/6497392772141900789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/6497392772141900789'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/08/howto-remove-service-in-windows.html' title='HowTo remove service in Windows'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-608770045917820906</id><published>2007-08-07T01:01:00.000+04:00</published><updated>2007-08-07T01:34:27.606+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Literature'/><title type='text'>Profound poetry, Shakespeare Sonnet 66</title><content type='html'>The most profound text which I ever read is Shakespeare's "Sonnet 66".&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;Tired with all these, for restful death I cry,&lt;br /&gt;As, to behold desert a beggar born,&lt;br /&gt;And needy nothing trimm'd in jollity,&lt;br /&gt;And purest faith unhappily forsworn,&lt;br /&gt;&lt;br /&gt;And guilded honour shamefully misplaced,&lt;br /&gt;And maiden virtue rudely strumpeted,&lt;br /&gt;And right perfection wrongfully disgraced,&lt;br /&gt;And strength by limping sway disabled,&lt;br /&gt;&lt;br /&gt;And art made tongue-tied by authority,&lt;br /&gt;And folly doctor-like controlling skill,&lt;br /&gt;And simple truth miscall'd simplicity,&lt;br /&gt;And captive good attending captain ill:&lt;br /&gt;&lt;br /&gt;Tired with all these, from these would I be gone,&lt;br /&gt;Save that, to die, I leave my love alone.&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;It sounds very beautiful in Russian.&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;Зову я смерть. Мне видеть невтерпеж&lt;br /&gt;Достоинство, что просит подаянья,&lt;br /&gt;Над простотой глумящуюся ложь,&lt;br /&gt;Ничтожество в роскошном одеянье,&lt;br /&gt;&lt;br /&gt;И совершенству ложный приговор,&lt;br /&gt;И девственность, поруганную грубо,&lt;br /&gt;И неуместной почести позор,&lt;br /&gt;И мощь в плену у немощи беззубой,&lt;br /&gt;&lt;br /&gt;И прямоту, что глупостью слывет,&lt;br /&gt;И глупость в маске мудреца, пророка,&lt;br /&gt;И вдохновения зажатый рот,&lt;br /&gt;И праведность на службе у порока.&lt;br /&gt;&lt;br /&gt;Все мерзостно, что вижу я вокруг...&lt;br /&gt;Но как тебя покинуть милый друг!&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Each time when I see an injustice, I recollect these lines.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-608770045917820906?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/608770045917820906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=608770045917820906' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/608770045917820906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/608770045917820906'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/08/profound-poetry-shakespeare-sonnet-66.html' title='Profound poetry, Shakespeare Sonnet 66'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-7841310314382387112</id><published>2007-08-03T21:28:00.000+04:00</published><updated>2007-08-03T22:35:52.502+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>HowTo fix command history in mc under Ubuntu</title><content type='html'>The program which I setup first of all after the Linux installation is mc (Midnight Commander).&lt;br /&gt;It is very friendly and useful for me.&lt;br /&gt;&lt;br /&gt;But in Ubuntu there is one problem with mc: shell's commands history is flooded with a garbage and with many ESC-symbols when I use mc.&lt;br /&gt;&lt;br /&gt;E.g.:&lt;code&gt;&lt;pre&gt;&lt;br /&gt;cd "`echo -e '\057usr'`"&lt;br /&gt;cd "`echo -e '\057usr\057X\061\061R\066\057bin'`"&lt;br /&gt;cd "`echo -e '\057home'`"&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I found the way how to fix this problem.&lt;br /&gt;In the file &lt;code&gt;&lt;em&gt;.bashrc&lt;/em&gt;&lt;/code&gt; string:&lt;br /&gt;&lt;code&gt;&lt;em&gt;export HISTCONTROL=ignoredups&lt;/em&gt;&lt;/code&gt;&lt;br /&gt;should be replaced with:&lt;br /&gt;&lt;code&gt;&lt;em&gt;export HISTCONTROL=ignoreboth&lt;/em&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-7841310314382387112?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/7841310314382387112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=7841310314382387112' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7841310314382387112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7841310314382387112'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/08/howto-fix-command-history-in-mc-under.html' title='HowTo fix command history in mc under Ubuntu'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-3776347208356753282</id><published>2007-08-01T20:38:00.001+04:00</published><updated>2007-08-01T21:01:38.567+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>HowTo convert Windows or DOS text to Linux</title><content type='html'>If you write text file in Windows, it won't be displayed correctly in Linux, because Windows' editors add carriage return symbol &lt;b&gt;(\^)&lt;/b&gt; to the end of each line.&lt;br /&gt;I wrote very simple (but useful) script to migrate text files from Windows to Linux.&lt;br /&gt;Here it is:&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;dos2linux.sh&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;cat $1 | tr -d '\r' &amp;gt;$1.fixed&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Command &lt;b&gt;"./dos2linux.sh text.txt"&lt;/b&gt; reads file "text.txt" and writes fixed file to "text.txt.fixed".&lt;br /&gt;&lt;br /&gt;It works on Linux/Unix platforms or under Cygwin environment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-3776347208356753282?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/3776347208356753282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=3776347208356753282' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/3776347208356753282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/3776347208356753282'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/08/howto-convert-windows-or-dos-text-to.html' title='HowTo convert Windows or DOS text to Linux'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-2454332769806740604</id><published>2007-07-31T21:49:00.000+04:00</published><updated>2007-08-01T20:04:58.248+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>HowTo synchronize directories</title><content type='html'>Sometimes it is necessary to synchronize data between desktop computer and notebook, PC and PocketPC, main and backup server or between directories within one system.&lt;br /&gt;I wrote and use script to this.&lt;br /&gt;This script synchronizes one directory with another.&lt;br /&gt;&lt;br /&gt;E.g.: if you have directory "master" with these files:&lt;br /&gt;&lt;i&gt;master/file1.txt&lt;br /&gt;master/file2.txt&lt;br /&gt;master/dir1&lt;br /&gt;master/dir1/file3.txt&lt;br /&gt;master/dir1/file4.txt&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;and if you want to synchronize it with "slave" directory,&lt;br /&gt;you may type this command:&lt;br /&gt;./xqx_usync.sh master slave&lt;br /&gt;After execution of this command, "slave" directory will contain all files from "master":&lt;br /&gt;&lt;i&gt;slave/dir1&lt;br /&gt;slave/dir1/file3.txt&lt;br /&gt;slave/dir1/file4.txt&lt;br /&gt;slave/file1.txt&lt;br /&gt;slave/file2.txt&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;At first thought, this action looks like copy, but if files in the "master" directory is changed, then after execution of this command again, all data in "slave" will be replaced with new data from "master" directory. Also, if you add new file to the "master" directory, it will be copied into "slave". This script wraps &lt;b&gt;"rsync"&lt;/b&gt; command, that fast and high-performance.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;xqx_usync.sh&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;#This script synchronizes &amp;lt;master&amp;gt; and &amp;lt;slave&amp;gt; directories.&lt;br /&gt;&lt;br /&gt;MASTER=$1/&lt;br /&gt;SLAVE=$2/&lt;br /&gt;&lt;br /&gt;echo -n Syncing $SLAVE with $MASTER...&lt;br /&gt;&lt;br /&gt;if test -z "$MASTER" -o ! -e "$MASTER"; then&lt;br /&gt;echo "Usage: usync &amp;lt;master directory&amp;gt; &amp;lt;slave directory&amp;gt;"&lt;br /&gt;exit&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;if test -z "$SLAVE"; then&lt;br /&gt;SLAVE=.&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;rsync --archive $MASTER $SLAVE&lt;br /&gt;echo OK&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This script is created with Ubuntu Linux.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.ubuntu.com/getubuntu"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_ruD_KHp6My0/Rq-ExIOCIDI/AAAAAAAAABU/K9HbwqREIVM/s400/LaptopUbuntu.jpg" alt="" id="BLOGGER_PHOTO_ID_5093435683134119986" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-2454332769806740604?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/2454332769806740604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=2454332769806740604' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2454332769806740604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2454332769806740604'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/07/howto-synchronize-directories.html' title='HowTo synchronize directories'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_ruD_KHp6My0/Rq-ExIOCIDI/AAAAAAAAABU/K9HbwqREIVM/s72-c/LaptopUbuntu.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-647674282958825173</id><published>2007-07-30T17:24:00.000+04:00</published><updated>2007-07-30T19:29:12.386+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>HowTo make Ubuntu mirror</title><content type='html'>"Ubuntu 6.06 LTS (Dapper Drake)" is my favorite OS (unfortunately, my previous favorite: "RedHat 7.2 (Enigma)" is out of date for modern hardware and software).&lt;br /&gt;&lt;br /&gt;Ubuntu 6.06 LTS is the best solution for modern computers, because it is stable, efficient, user friendly and long term supported (Desktop Edition to 2009 and Server Edition to 2011).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.ubuntu.com"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_ruD_KHp6My0/Rq3nCYOCICI/AAAAAAAAABM/SIW1jRfhMnA/s400/ubuntulogo.png" alt="" id="BLOGGER_PHOTO_ID_5092980781672964130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;But, it is necessary to have wide and persistent Internet connection for updates and installing new packages. It is a good idea to create local "hard" copy of all packages from Ubuntu's site. I wrote script for this purposes and successfully use it.&lt;br /&gt;&lt;br /&gt;This script creates &lt;b&gt;FULL&lt;/b&gt; (~50G) mirror of "Ubuntu 6.06 LTS (Dapper Drake)".&lt;br /&gt;It downloads all &lt;b&gt;binary&lt;/b&gt; and &lt;b&gt;source&lt;/b&gt; packages for both &lt;b&gt;i386&lt;/b&gt; and &lt;b&gt;amd64&lt;/b&gt; platforms.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;xqx_mirror_dapper.sh&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;#!/bin/bash -x&lt;br /&gt;&lt;br /&gt;DATE=`date +%Y.%m.%d_%H.%M.%S.%N`&lt;br /&gt;LOG=~/`basename $0`-$DATE.log&lt;br /&gt;touch $LOG&lt;br /&gt;&lt;br /&gt;if test ! -w "$LOG"; then&lt;br /&gt;   LOG=/dev/stdout&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;DIST=dapper&lt;br /&gt;&lt;br /&gt;/usr/bin/debmirror -m --passive --method=ftp --progress --host=archive.ubuntulinux.org --root=ubuntu \&lt;br /&gt;   --dist=$DIST,$DIST-updates,$DIST-security,$DIST-proposed,$DIST-backports \&lt;br /&gt;   --section=main,multiverse,universe,restricted --arch=i386,amd64 \&lt;br /&gt;   --ignore-release-gpg --timeout=999 $DIST |tee $LOG&lt;br /&gt;&lt;br /&gt;/usr/bin/debmirror -m --passive --method=http --progress --host=archive.canonical.com --root=ubuntu \&lt;br /&gt;   --dist=$DIST-commercial --section=main --arch=i386,amd64 \&lt;br /&gt;   --ignore-release-gpg --timeout=999  $DIST-commercial |tee -a $LOG&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you don't need sources, you may fix this script and add "--nosource" option to the "dembirror" command. Or you may select your own platform with the "--arch=" option.&lt;br /&gt;&lt;br /&gt;When mirror created, you should switch your system to it.&lt;br /&gt;I also created script for this. Here it is:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;xqx_apt_update_dapper.sh&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;if test -z "$1"; then&lt;br /&gt;   echo "Update system from new mirror."&lt;br /&gt;   echo "Usage: $0 &amp;lt;folder with mirrors&amp;gt;"&lt;br /&gt;   exit&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;DIST=dapper&lt;br /&gt;MIRRORS=$1&lt;br /&gt;&lt;br /&gt;cat &amp;gt;/etc/apt/sources.list &amp;lt;&amp;lt;EOF&lt;br /&gt;deb file://$MIRRORS/$DIST/ $DIST main universe multiverse restricted&lt;br /&gt;deb file://$MIRRORS/$DIST/ $DIST-updates main universe multiverse restricted&lt;br /&gt;deb file://$MIRRORS/$DIST/ $DIST-security main universe multiverse restricted&lt;br /&gt;deb file://$MIRRORS/$DIST/ $DIST-backports main universe multiverse restricted&lt;br /&gt;deb file://$MIRRORS/$DIST/ $DIST-proposed main universe multiverse restricted&lt;br /&gt;deb file://$MIRRORS/$DIST-commercial/ $DIST-commercial main&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;echo -e "\\033[1;32m"&lt;br /&gt;cat /etc/apt/sources.list&lt;br /&gt;echo -e "\\033[0;39m"&lt;br /&gt;&lt;br /&gt;echo "Continue with 'apt-get update'? [y/n]"&lt;br /&gt;read&lt;br /&gt;if test $REPLY = y ; then&lt;br /&gt;   apt-get update&lt;br /&gt;else&lt;br /&gt;   exit&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;echo "Continue with 'apt-get upgrade'? [y/n]"&lt;br /&gt;read&lt;br /&gt;if test $REPLY = y ; then&lt;br /&gt;   apt-get upgrade&lt;br /&gt;else&lt;br /&gt;   exit&lt;br /&gt;fi&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-647674282958825173?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/647674282958825173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=647674282958825173' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/647674282958825173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/647674282958825173'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/07/howto-make-ubuntu-mirror.html' title='HowTo make Ubuntu mirror'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_ruD_KHp6My0/Rq3nCYOCICI/AAAAAAAAABM/SIW1jRfhMnA/s72-c/ubuntulogo.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-4426506013248971153</id><published>2007-07-27T14:59:00.000+04:00</published><updated>2007-07-27T15:17:40.935+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>HowTo make temporary directory</title><content type='html'>I use this script for making temporary directories:&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;xqx_utemp.sh&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;#Creates temporary folder with unique name (current date and time).&lt;br /&gt;&lt;br /&gt;DATE=`date +%Y.%m.%d_%H.%M.%S.%N`&lt;br /&gt;mkdir $DATE&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Also, it is possible to create temporary directory via &lt;b&gt;mktemp&lt;/b&gt; utility, but my script is more suitable for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-4426506013248971153?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/4426506013248971153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=4426506013248971153' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4426506013248971153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4426506013248971153'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/07/howto-make-temporary-directory.html' title='HowTo make temporary directory'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-692375159897923563</id><published>2007-07-26T14:16:00.000+04:00</published><updated>2007-11-01T21:02:14.280+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GWT'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Portlet'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss Portal'/><title type='text'>Portals and Portlets with GWT modules</title><content type='html'>Last week I considered possibility of using portlets and GWT modules together (i.e.: GWT inside portlet's window).&lt;br /&gt;And I'm coming to conclusion that it works. And it works pretty good.&lt;br /&gt;&lt;br /&gt;I created several portlets with GWT modules, and also I wrapped some of my GWT applications in a portlets.&lt;br /&gt;&lt;br /&gt;One of them - ChatPortal (simple application for messaging).&lt;br /&gt;&lt;br /&gt;First edition of ChatPortal worked well. But I couldn't put several instances of ChatPortlet windows into the page and couldn't move portlet's window within the page.&lt;br /&gt;&lt;br /&gt;I investigated these problems and found solution how to resolve theirs.&lt;br /&gt;&lt;br /&gt;I changed some ChatPortal's code and Second edition works excellent!&lt;br /&gt;&lt;br /&gt;Now I'm using a "-xs" ("cross-site") version of my module's, which GWT (v1.4) compiler produces.&lt;br /&gt;I.e.: instead of gwt.js or xqx.web.chat.Chat.nocache.js scripts I use &lt;b&gt;xqx.web.chat.Chat-xs.nocache.js&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;And also I found way how to have several windows instances for one portlet within one page. I wrote function, which performs tree-walking over the HTML DOM and finds places where to put my widgets.&lt;br /&gt;&lt;br /&gt;See sources below, they'll say more.&lt;br /&gt;&lt;br /&gt;Dashboard with several instances of portlets with same GWT modules&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_ruD_KHp6My0/Rqh1PYOCIAI/AAAAAAAAAA8/9hZokVeKhIc/s1600-h/multiple.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_ruD_KHp6My0/Rqh1PYOCIAI/AAAAAAAAAA8/9hZokVeKhIc/s400/multiple.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5091448285802143746" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Moving of portlet with GWT module&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ruD_KHp6My0/Rqh1U4OCIBI/AAAAAAAAABE/OoDh5zzE-mY/s1600-h/moving.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_ruD_KHp6My0/Rqh1U4OCIBI/AAAAAAAAABE/OoDh5zzE-mY/s400/moving.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5091448380291424274" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;ChatPortlet.java &lt;/b&gt;&lt;br /&gt;public class ChatPortlet extends GenericPortlet {&lt;br /&gt;&lt;br /&gt; AtomicInteger counter=new AtomicInteger(0);&lt;br /&gt;&lt;br /&gt; protected void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws PortletException, IOException {&lt;br /&gt;  renderResponse.setContentType("text/html");&lt;br /&gt;  PrintWriter writer = renderResponse.getWriter();&lt;br /&gt;&lt;b&gt;  writer.println("&amp;lt;script language='javascript' src='" + renderRequest.getContextPath() + "/&lt;span style="color:red;"&gt;xqx.web.chat.Chat-xs.nocache.js&lt;/span&gt;'&amp;gt;&amp;lt;/script&amp;gt;");&lt;br /&gt;  writer.println("&amp;lt;div id='xqx_web_chat_Chat-"+counter.incrementAndGet()+"'&amp;gt;&amp;lt;/div&amp;gt;");&lt;/b&gt;&lt;br /&gt;  writer.close();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; ...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;Chat.java&lt;/b&gt;&lt;br /&gt;package xqx.web.chat.client;&lt;br /&gt;...&lt;br /&gt;public class Chat implements EntryPoint {&lt;br /&gt;...&lt;br /&gt; private FlowPanel messagesPanel = new FlowPanel();&lt;br /&gt; private ScrollPanel messagesScrollPanel = new ScrollPanel(messagesPanel);&lt;br /&gt;&lt;br /&gt; private TextArea inputTextArea = new TextArea();&lt;br /&gt; private ScrollPanel inputScrollPanel = new ScrollPanel(inputTextArea);&lt;br /&gt;...&lt;br /&gt; public void onModuleLoad() {&lt;br /&gt;&lt;br /&gt;  messagesScrollPanel.setStyleName("xqx_messagesScrollPane");&lt;br /&gt;  messagesScrollPanel.addStyleName("xqx_etchedBorder");&lt;br /&gt;&lt;br /&gt;  inputTextArea.setStyleName("xqx_input");&lt;br /&gt;...&lt;br /&gt;&lt;b&gt;&lt;br /&gt;  String slotId = getEmptySlotId(RootPanel.getBodyElement(), "xqx_web_chat_Chat");&lt;br /&gt;  RootPanel rootPanel = RootPanel.get(slotId);&lt;br /&gt;&lt;br /&gt;  if (rootPanel != null) {&lt;br /&gt;...&lt;br /&gt;   rootPanel.add(messagesScrollPanel);&lt;br /&gt;   rootPanel.add(inputScrollPanel);&lt;br /&gt;   rootPanel.add(sendButton);&lt;br /&gt;...&lt;br /&gt;  }&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;...&lt;br /&gt; }&lt;br /&gt;&lt;b&gt;&lt;br /&gt; private String getEmptySlotId(Element element, String idPrefix) {&lt;br /&gt;  int count = DOM.getChildCount(element);&lt;br /&gt;  if (count == 0) {&lt;br /&gt;   String id = DOM.getElementAttribute(element, "id");&lt;br /&gt;   if (id != null &amp;amp;&amp;amp; id.startsWith(idPrefix)) {&lt;br /&gt;    return id;&lt;br /&gt;   }&lt;br /&gt;  } else {&lt;br /&gt;   for (int i = 0; i &amp;lt; count; i++) {&lt;br /&gt;    String id = getEmptySlotId(DOM.getChild(element, i), idPrefix);&lt;br /&gt;    if (id != null)&lt;br /&gt;     return id;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  return null;&lt;br /&gt; }&lt;br /&gt;&lt;/b&gt;&lt;br /&gt; private void printMessages(Message[] messages) {&lt;br /&gt;...&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;                              &lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I use GWT v1.4 beta and JBoss Portal 2.6.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;span style="font-size: large;"&gt;You may download these sources from &lt;a href="http://xantorohara.googlepages.com/xantorohara.blogspot.comsamples"&gt;Xantorohara.blogspot.com samples&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-692375159897923563?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/692375159897923563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=692375159897923563' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/692375159897923563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/692375159897923563'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/07/portals-and-portlets-with-gwt-modules.html' title='Portals and Portlets with GWT modules'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_ruD_KHp6My0/Rqh1PYOCIAI/AAAAAAAAAA8/9hZokVeKhIc/s72-c/multiple.PNG' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-2605399389415776718</id><published>2007-07-25T21:03:00.000+04:00</published><updated>2007-07-25T21:17:24.154+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>HowTo make backup via tar.bz2</title><content type='html'>Tar (with bzip2 compression) is the best tool for making archive backups.&lt;br /&gt;I wrote simple script, that creates backups of files or directories.&lt;br /&gt;It creates backups with unique (depended on date) prefix.&lt;br /&gt;&lt;br /&gt;E.g.: it creates file &lt;b&gt;Xantorohara-2007.07.25_21.11.19.749614000.tar.bz2&lt;/b&gt;&lt;br /&gt;from directory &lt;b&gt;Xantorohara&lt;/b&gt; via command &lt;b&gt;xqx_ubackup.sh Xantorohara&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;xqx_ubackup.sh&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;if test -z "$1"; then&lt;br /&gt;    echo "Create backup archive with unique (depended on date) name."&lt;br /&gt;    echo "Usage: $0 &amp;lt;target file or folder&amp;gt; &amp;lt;(optional) path, where to put archive&amp;gt;"&lt;br /&gt;    exit&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;DATE=`date +%Y.%m.%d_%H.%M.%S.%N`&lt;br /&gt;if test -z "$2"; then&lt;br /&gt;    tar -cjf ./"$1"-$DATE.tar.bz2 "$1"&lt;br /&gt;else&lt;br /&gt;    tar -cjf "$2"/"$1"-$DATE.tar.bz2 "$1"&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-2605399389415776718?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/2605399389415776718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=2605399389415776718' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2605399389415776718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2605399389415776718'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/07/howto-make-backup-via-tarbz2.html' title='HowTo make backup via tar.bz2'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-7653702735555868249</id><published>2007-07-24T17:51:00.001+04:00</published><updated>2008-11-19T15:45:07.628+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Proxy'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss Portal'/><title type='text'>JBoss Portal and Proxy Server</title><content type='html'>"News" and "Weather" pages didn't work in my JBoss Portal.&lt;br /&gt;My computer located in the the local network area and I use Internet via HTTP proxy server.&lt;br /&gt;&lt;br /&gt;Today I found a solution how to configure my JBoss Portal in order to connect it with Internet.&lt;br /&gt;&lt;br /&gt;The simplest way is to add specific properties to the &lt;b&gt;JAVA_OPTS&lt;/b&gt; variable.&lt;br /&gt;&lt;br /&gt;I added one string at the beginning of run.bat file:&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;set JAVA_OPTS=-Dhttp.proxyHost=&amp;lt;Proxy Host&amp;gt; -Dhttp.proxyPort=&amp;lt;Proxy Port&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;In Linux it should be:&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;JAVA_OPTS="-Dhttp.proxyHost=&amp;lt;Proxy Host&amp;gt; -Dhttp.proxyPort=&amp;lt;Proxy Port&amp;gt;"&lt;br /&gt;&lt;br /&gt;&lt;b&gt;You should replace values "Proxy Host" and "Proxy Port" with actual data for your network.&lt;/b&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;Now all portlets are working and I'm happy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-7653702735555868249?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/7653702735555868249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=7653702735555868249' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7653702735555868249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/7653702735555868249'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/07/jboss-portal-and-proxy-server.html' title='JBoss Portal and Proxy Server'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-3792907108238938844</id><published>2007-07-23T18:23:00.000+04:00</published><updated>2007-07-30T12:24:18.338+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>HowTo make a copy of web site</title><content type='html'>Sometimes it is necessary to copy content from the remote web site.&lt;br /&gt;GNU &lt;b&gt;Wget&lt;/b&gt; is the best solution for this purpose.&lt;br /&gt;Wget is a standard utility in most of Linux-like systems (and in the Cygwin) for downloads of files from the Web.&lt;br /&gt;&lt;br /&gt;Good idea to wrap wget into the shell script like this:&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;xqx_teleport.sh&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;if test -z "$1"; then&lt;br /&gt;    echo "Create local copy of http site."&lt;br /&gt;    echo "Usage: echo $0 &amp;lt;target URL&amp;gt;"&lt;br /&gt;    exit&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;DATE=`date +%Y.%m.%d_%H.%M.%S.%N`&lt;br /&gt;LOG=~/`basename $0`-$DATE.log&lt;br /&gt;touch $LOG&lt;br /&gt;&lt;br /&gt;if test ! -w "$LOG"; then&lt;br /&gt;    LOG=/dev/stdout&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;wget --continue --recursive --no-parent --relative --convert-links $1 |tee $LOG&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For example, if you want to copy documents from the site "http://www.w3.org/TR/xhtml11" you should execute this command:&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;b&gt;xqx_teleport.sh http://www.w3.org/TR/xhtml11&lt;/b&gt;&lt;/pre&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-3792907108238938844?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/3792907108238938844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=3792907108238938844' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/3792907108238938844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/3792907108238938844'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/07/howto-make-copy-of-web-site.html' title='HowTo make a copy of web site'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-5358116413522766495</id><published>2007-07-20T15:18:00.000+04:00</published><updated>2007-07-30T12:24:44.389+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><title type='text'>HowTo make backup via Rar</title><content type='html'>Just use this command:&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;In Windows&lt;/b&gt;&lt;br /&gt; rar a -r -m5 -k -s -ag-YYYY.MM.DD_HH.MM.SS.N %1.rar %1&lt;br /&gt;&lt;br /&gt;You should put this command into .cmd or .bat file e.g.: &lt;b&gt;xqx_ubackup_rar.cmd&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Usage: xqx_ubackup_rar.cmd file-or-folder-for-backup&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Tip: You may copy &lt;b&gt;rar.exe&lt;/b&gt; from WinRar installation directory to the Windows directory and use it in command line.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;In Linux&lt;/b&gt;&lt;br /&gt; rar a -r -m5 -k -s -ag-YYYY.MM.DD_HH.MM.SS.N $1.rar $1&lt;br /&gt;&lt;br /&gt;You should put this command into .sh file e.g.: &lt;b&gt;xqx_ubackup_rar.sh&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Usage: xqx_ubackup_rar.sh file-or-folder-for-backup&lt;/b&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.win-rar.com/"&gt;&lt;span&gt;&lt;span style="font-size:small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;pre&gt;&lt;span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;span style="font-size:small;"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_ruD_KHp6My0/RqCeoKKs27I/AAAAAAAAAA0/3s3_zSqj134/s400/winrar.PNG" alt="" id="BLOGGER_PHOTO_ID_5089241991689853874" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-5358116413522766495?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/5358116413522766495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=5358116413522766495' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/5358116413522766495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/5358116413522766495'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/07/howto-make-backup-via-rar.html' title='HowTo make backup via Rar'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_ruD_KHp6My0/RqCeoKKs27I/AAAAAAAAAA0/3s3_zSqj134/s72-c/winrar.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-2981242514700121566</id><published>2007-07-19T12:08:00.000+04:00</published><updated>2007-07-19T13:07:51.976+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ant'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>HowTo backup Java project</title><content type='html'>This topic may be helpful for Java developers, who use Ant and want to backup their Java projects (especially for developers, who don't use any of Version Control Systems like CVS, SVN, etc.).&lt;br /&gt;&lt;br /&gt;I've created simple Ant script for backup purposes. This script creates archive with unique (time depended) name.&lt;br /&gt;&lt;br /&gt;E.g.: If project (project's folder) has name &lt;b&gt;"Eclipsoid"&lt;/b&gt;, it will be packed to &lt;b&gt;"Eclipsoid-2007.07.19_11.52.00.tar.bz2"&lt;/b&gt; archived file.&lt;br /&gt;&lt;br /&gt;You may insert &lt;b&gt;"ubackup"&lt;/b&gt; target into your project's build.xml file or use this script standalone.&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;build.xml&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;project default="ubackup" basedir="."&amp;gt;&lt;br /&gt; &amp;lt;target name="ubackup"&amp;gt;&lt;br /&gt;  &amp;lt;tstamp&amp;gt;&lt;br /&gt;   &amp;lt;format property="backuptime" pattern="yyyy.MM.dd_HH.mm.ss"/&amp;gt;&lt;br /&gt;  &amp;lt;/tstamp&amp;gt;&lt;br /&gt;  &amp;lt;basename property="currentdir" file="."/&amp;gt;&lt;br /&gt;  &amp;lt;property name="backupfilename" value="${currentdir}-${backuptime}"/&amp;gt;&lt;br /&gt;  &amp;lt;tar destfile="../${backupfilename}.tar.bz2" compression="bzip2" basedir="../${currentdir}"/&amp;gt;&lt;br /&gt; &amp;lt;/target&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ant.apache.org"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_ruD_KHp6My0/Rp8dB6Ks26I/AAAAAAAAAAs/itenjWtB23I/s400/ant_logo_large.gif" alt="" id="BLOGGER_PHOTO_ID_5088818022583163810" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-2981242514700121566?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/2981242514700121566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=2981242514700121566' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2981242514700121566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/2981242514700121566'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/07/howto-backup-java-project.html' title='HowTo backup Java project'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_ruD_KHp6My0/Rp8dB6Ks26I/AAAAAAAAAAs/itenjWtB23I/s72-c/ant_logo_large.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-5562576029518324759</id><published>2007-07-18T14:48:00.000+04:00</published><updated>2007-11-01T20:58:42.360+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Portlet'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss Portal'/><title type='text'>Inter Portlet Communication in JBoss Portal 2.6</title><content type='html'>Have you tried to deploy HelloWorldIPC portlet (from &lt;a href="http://labs.jboss.com/portletswap/"&gt;Portlet Swap&lt;/a&gt;) into JBoss Portal 2.6?&lt;br /&gt;I've tried, but it was unsuccessful.&lt;br /&gt;This portlet works in previous version of JBoss Portal, but doesn't work in 2.6, because some APIs in JBoss Portal was slightly changed.&lt;br /&gt;I've read some developers documentation and found way to resolve this problem, and I created sample of Inter Portlet Communication for &lt;a href="http://labs.jboss.com/jbossportal/"&gt;JBoss Portal 2.6.&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://labs.jboss.com/jbossportal/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_ruD_KHp6My0/RpprHaKs25I/AAAAAAAAAAk/bXPmnrGLlZk/s400/portal.gif" alt="" id="BLOGGER_PHOTO_ID_5087496504095857554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I think, it will be useful for developers. You may see sources below.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;Project files&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;./build.properties&lt;br /&gt;./build.xml&lt;br /&gt;./local.properties&lt;br /&gt;./src&lt;br /&gt;./src/META-INF&lt;br /&gt;./src/META-INF/jboss-service.xml&lt;br /&gt;./src/WEB-INF&lt;br /&gt;./src/WEB-INF/portlet-instances.xml&lt;br /&gt;./src/WEB-INF/portlet.xml&lt;br /&gt;./src/WEB-INF/web.xml&lt;br /&gt;./src/WEB-INF/xlamipc-object.xml&lt;br /&gt;./src/xqx&lt;br /&gt;./src/xqx/web&lt;br /&gt;./src/xqx/web/xlam&lt;br /&gt;./src/xqx/web/xlam/XLamMasterPortlet.java&lt;br /&gt;./src/xqx/web/xlam/XLamSlavePortlet.java&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;jboss-service.xml&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;server&amp;gt;&lt;br /&gt;    &amp;lt;mbean code="org.jboss.portal.core.event.PortalEventListenerServiceImpl"&lt;br /&gt;           name="portal:service=ListenerService,type=ipc_listener" xmbean-dd=""&lt;br /&gt;           xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean"&amp;gt;&lt;br /&gt;        &amp;lt;xmbean/&amp;gt;&lt;br /&gt;        &amp;lt;depends&lt;br /&gt;            optional-attribute-name="Registry" proxy-type="attribute"&amp;gt;portal:service=ListenerRegistry&lt;br /&gt;        &amp;lt;/depends&amp;gt;&lt;br /&gt;        &amp;lt;attribute name="RegistryId"&amp;gt;ipc_listener&amp;lt;/attribute&amp;gt;&lt;br /&gt;        &amp;lt;attribute name="ListenerClassName"&amp;gt;xqx.web.xlam.XLamSlavePortlet$Listener&amp;lt;/attribute&amp;gt;&lt;br /&gt;    &amp;lt;/mbean&amp;gt;   &lt;br /&gt;&amp;lt;/server&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;portlet-instances.xml&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" standalone="yes"?&amp;gt;&lt;br /&gt;&amp;lt;deployments&amp;gt;&lt;br /&gt;    &amp;lt;deployment&amp;gt;&lt;br /&gt;        &amp;lt;instance&amp;gt;&lt;br /&gt;            &amp;lt;instance-id&amp;gt;XLamMasterPortletInstance&amp;lt;/instance-id&amp;gt;&lt;br /&gt;            &amp;lt;portlet-ref&amp;gt;XLamMasterPortlet&amp;lt;/portlet-ref&amp;gt;&lt;br /&gt;        &amp;lt;/instance&amp;gt;&lt;br /&gt;    &amp;lt;/deployment&amp;gt;&lt;br /&gt;    &amp;lt;deployment&amp;gt;&lt;br /&gt;        &amp;lt;instance&amp;gt;&lt;br /&gt;            &amp;lt;instance-id&amp;gt;XLamSlavePortletInstance&amp;lt;/instance-id&amp;gt;&lt;br /&gt;            &amp;lt;portlet-ref&amp;gt;XLamSlavePortlet&amp;lt;/portlet-ref&amp;gt;&lt;br /&gt;        &amp;lt;/instance&amp;gt;&lt;br /&gt;    &amp;lt;/deployment&amp;gt;&lt;br /&gt;    &lt;br /&gt;&amp;lt;/deployments&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;portlet.xml&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"&lt;br /&gt;             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;             xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"&lt;br /&gt;             version="1.0"&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;portlet&amp;gt;&lt;br /&gt;        &amp;lt;portlet-name&amp;gt;XLamMasterPortlet&amp;lt;/portlet-name&amp;gt;&lt;br /&gt;        &amp;lt;portlet-class&amp;gt;xqx.web.xlam.XLamMasterPortlet&amp;lt;/portlet-class&amp;gt;&lt;br /&gt;        &amp;lt;supports&amp;gt;&lt;br /&gt;            &amp;lt;mime-type&amp;gt;text/html&amp;lt;/mime-type&amp;gt;&lt;br /&gt;            &amp;lt;portlet-mode&amp;gt;VIEW&amp;lt;/portlet-mode&amp;gt;&lt;br /&gt;            &amp;lt;portlet-mode&amp;gt;HELP&amp;lt;/portlet-mode&amp;gt;&lt;br /&gt;        &amp;lt;/supports&amp;gt;&lt;br /&gt;        &amp;lt;portlet-info&amp;gt;&lt;br /&gt;            &amp;lt;title&amp;gt;XLam Master Portlet&amp;lt;/title&amp;gt;&lt;br /&gt;        &amp;lt;/portlet-info&amp;gt;&lt;br /&gt;    &amp;lt;/portlet&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;portlet&amp;gt;&lt;br /&gt;        &amp;lt;portlet-name&amp;gt;XLamSlavePortlet&amp;lt;/portlet-name&amp;gt;&lt;br /&gt;        &amp;lt;portlet-class&amp;gt;xqx.web.xlam.XLamSlavePortlet&amp;lt;/portlet-class&amp;gt;&lt;br /&gt;        &amp;lt;supports&amp;gt;&lt;br /&gt;            &amp;lt;mime-type&amp;gt;text/html&amp;lt;/mime-type&amp;gt;&lt;br /&gt;            &amp;lt;portlet-mode&amp;gt;VIEW&amp;lt;/portlet-mode&amp;gt;&lt;br /&gt;        &amp;lt;/supports&amp;gt;&lt;br /&gt;        &amp;lt;portlet-info&amp;gt;&lt;br /&gt;            &amp;lt;title&amp;gt;XLam Slave Portlet&amp;lt;/title&amp;gt;&lt;br /&gt;        &amp;lt;/portlet-info&amp;gt;&lt;br /&gt;    &amp;lt;/portlet&amp;gt;&lt;br /&gt;   &lt;br /&gt;&amp;lt;/portlet-app&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;web.xml&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;web-app version="2.4"&lt;br /&gt;         xmlns="http://java.sun.com/xml/ns/j2ee"&lt;br /&gt;         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&amp;gt;&lt;br /&gt;&amp;lt;/web-app&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;xlamipc-object.xml&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;deployments&amp;gt;&lt;br /&gt;    &amp;lt;deployment&amp;gt;&lt;br /&gt;        &amp;lt;if-exists&amp;gt;overwrite&amp;lt;/if-exists&amp;gt;&lt;br /&gt;        &amp;lt;parent-ref&amp;gt;default&amp;lt;/parent-ref&amp;gt;&lt;br /&gt;        &amp;lt;page&amp;gt;&lt;br /&gt;            &amp;lt;page-name&amp;gt;XLamIPC&amp;lt;/page-name&amp;gt;&lt;br /&gt;            &amp;lt;listener&amp;gt;ipc_listener&amp;lt;/listener&amp;gt;&lt;br /&gt;            &amp;lt;window&amp;gt;&lt;br /&gt;                &amp;lt;window-name&amp;gt;XLamMasterPortletWindow&amp;lt;/window-name&amp;gt;&lt;br /&gt;                &amp;lt;instance-ref&amp;gt;XLamMasterPortletInstance&amp;lt;/instance-ref&amp;gt;&lt;br /&gt;                &amp;lt;region&amp;gt;left&amp;lt;/region&amp;gt;&lt;br /&gt;                &amp;lt;height&amp;gt;0&amp;lt;/height&amp;gt;&lt;br /&gt;            &amp;lt;/window&amp;gt;&lt;br /&gt;&lt;br /&gt;            &amp;lt;window&amp;gt;&lt;br /&gt;                &amp;lt;window-name&amp;gt;XLamSlavePortletWindow&amp;lt;/window-name&amp;gt;&lt;br /&gt;                &amp;lt;instance-ref&amp;gt;XLamSlavePortletInstance&amp;lt;/instance-ref&amp;gt;&lt;br /&gt;                &amp;lt;region&amp;gt;center&amp;lt;/region&amp;gt;&lt;br /&gt;                &amp;lt;height&amp;gt;0&amp;lt;/height&amp;gt;&lt;br /&gt;            &amp;lt;/window&amp;gt;&lt;br /&gt;        &amp;lt;/page&amp;gt;&lt;br /&gt;    &amp;lt;/deployment&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/deployments&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;XLamMasterPortlet.java&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;package xqx.web.xlam;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import javax.portlet.ActionRequest;&lt;br /&gt;import javax.portlet.ActionResponse;&lt;br /&gt;import javax.portlet.GenericPortlet;&lt;br /&gt;import javax.portlet.PortletException;&lt;br /&gt;import javax.portlet.RenderRequest;&lt;br /&gt;import javax.portlet.RenderResponse;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.PrintWriter;&lt;br /&gt;&lt;br /&gt;public class XLamMasterPortlet extends GenericPortlet&lt;br /&gt;{&lt;br /&gt;    protected void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws PortletException, IOException&lt;br /&gt;    {&lt;br /&gt;        renderResponse.setContentType("text/html");&lt;br /&gt;        PrintWriter writer = renderResponse.getWriter();&lt;br /&gt;        writer.println("&amp;lt;form action='" + renderResponse.createActionURL() + "' method='post'&amp;gt;");&lt;br /&gt;        writer.println("&amp;lt;input name='txt' type='text'/&amp;gt;");&lt;br /&gt;        writer.println("&amp;lt;input type='submit' value='Send to Slave' /&amp;gt;");&lt;br /&gt;        writer.println("&amp;lt;/form&amp;gt;");&lt;br /&gt;        writer.close();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    protected void doHelp(RenderRequest renderRequest, RenderResponse renderResponse) throws PortletException, IOException&lt;br /&gt;    {&lt;br /&gt;        renderResponse.setContentType("text/html");&lt;br /&gt;        PrintWriter writer = renderResponse.getWriter();&lt;br /&gt;        writer.write("Visit &amp;lt;a href='http://xantorohara.blogspot.com/'&amp;gt;Xantorohara blog&amp;lt;/a&amp;gt; for another info.");&lt;br /&gt;        writer.close();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void processAction(ActionRequest actionRequest, ActionResponse actionResponse) throws PortletException, IOException&lt;br /&gt;    {&lt;br /&gt;        //prevent super exception&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;XLamSlavePortlet.java&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;package xqx.web.xlam;&lt;br /&gt;&lt;br /&gt;import org.jboss.portal.WindowState;&lt;br /&gt;import org.jboss.portal.api.node.PortalNode;&lt;br /&gt;import org.jboss.portal.api.node.event.PortalNodeEvent;&lt;br /&gt;import org.jboss.portal.api.node.event.PortalNodeEventContext;&lt;br /&gt;import org.jboss.portal.api.node.event.PortalNodeEventListener;&lt;br /&gt;import org.jboss.portal.api.node.event.WindowActionEvent;&lt;br /&gt;&lt;br /&gt;import javax.portlet.ActionRequest;&lt;br /&gt;import javax.portlet.ActionResponse;&lt;br /&gt;import javax.portlet.GenericPortlet;&lt;br /&gt;import javax.portlet.PortletException;&lt;br /&gt;import javax.portlet.PortletSecurityException;&lt;br /&gt;import javax.portlet.RenderRequest;&lt;br /&gt;import javax.portlet.RenderResponse;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.PrintWriter;&lt;br /&gt;&lt;br /&gt;public class XLamSlavePortlet extends GenericPortlet&lt;br /&gt;{&lt;br /&gt;    public static class Listener implements PortalNodeEventListener&lt;br /&gt;    {&lt;br /&gt;        public PortalNodeEvent onEvent(PortalNodeEventContext context, PortalNodeEvent event)&lt;br /&gt;        {&lt;br /&gt;            PortalNode node = event.getNode();&lt;br /&gt;            String nodeName = node.getName();&lt;br /&gt;            WindowActionEvent newEvent = null;&lt;br /&gt;            if (nodeName.equals("XLamMasterPortletWindow") &amp;amp;&amp;amp; event instanceof WindowActionEvent)&lt;br /&gt;            {&lt;br /&gt;                WindowActionEvent wae = (WindowActionEvent) event;&lt;br /&gt;                PortalNode windowB = node.resolve("../XLamSlavePortletWindow");&lt;br /&gt;                if (windowB != null)&lt;br /&gt;                {&lt;br /&gt;                    newEvent = new WindowActionEvent(windowB);&lt;br /&gt;                    newEvent.setMode(wae.getMode());&lt;br /&gt;                    newEvent.setWindowState(WindowState.MAXIMIZED);&lt;br /&gt;                    newEvent.setParameters(wae.getParameters());&lt;br /&gt;                    return newEvent;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            return context.dispatch();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void processAction(ActionRequest request, ActionResponse response) throws PortletException, PortletSecurityException, IOException&lt;br /&gt;    {&lt;br /&gt;        String txt = request.getParameter("txt");&lt;br /&gt;        if (txt != null)&lt;br /&gt;        {&lt;br /&gt;            response.setRenderParameter("txt", txt);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    protected void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws PortletException, PortletSecurityException, IOException&lt;br /&gt;    {&lt;br /&gt;        renderResponse.setContentType("text/html");&lt;br /&gt;        PrintWriter writer = renderResponse.getWriter();&lt;br /&gt;        writer.write("Message from Master:");&lt;br /&gt;        String txt = renderRequest.getParameter("txt");&lt;br /&gt;        writer.println("txt: " + txt);&lt;br /&gt;        writer.close();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;build.properties&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;project.name=XLamIPC&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;build.xml&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="ISO-8859-1"?&amp;gt;&lt;br /&gt;    &lt;br /&gt;&amp;lt;project name="xlam" default="war"&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;property file="local.properties"/&amp;gt;&lt;br /&gt;    &amp;lt;property file="build.properties"/&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;property name="build" value="build"/&amp;gt;&lt;br /&gt;    &amp;lt;property name="jarfile" value="${project.name}.jar"/&amp;gt;&lt;br /&gt;    &amp;lt;property name="warfile" value="${project.name}.war"/&amp;gt;&lt;br /&gt;    &amp;lt;property name="sarfile" value="${project.name}.sar"/&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;path id="classpath"&amp;gt;&lt;br /&gt;        &amp;lt;fileset dir="${jbossportal.lib}" includes="**/*.jar"/&amp;gt;&lt;br /&gt;    &amp;lt;/path&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;target name="clean"&amp;gt;&lt;br /&gt;        &amp;lt;delete dir="${build}"/&amp;gt;&lt;br /&gt;    &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;target name="jar" depends="clean"&amp;gt;&lt;br /&gt;        &amp;lt;mkdir dir="${build}/bin"/&amp;gt;&lt;br /&gt;        &amp;lt;javac srcdir="src" destdir="${build}/bin" classpathref="classpath" debug="true"/&amp;gt;&lt;br /&gt;        &amp;lt;jar basedir="${build}/bin" jarfile="${build}/${jarfile}"/&amp;gt;&lt;br /&gt;    &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;target name="war" depends="jar"&amp;gt;&lt;br /&gt;        &amp;lt;copy file="${build}/${jarfile}" todir="${build}/war/WEB-INF/lib"/&amp;gt;&lt;br /&gt;        &amp;lt;copy todir="${build}/war/WEB-INF"&amp;gt;&lt;br /&gt;            &amp;lt;fileset dir="src/WEB-INF"/&amp;gt;&lt;br /&gt;        &amp;lt;/copy&amp;gt;&lt;br /&gt;        &amp;lt;jar basedir="${build}/war" jarfile="${build}/${warfile}"/&amp;gt;&lt;br /&gt;    &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;target name="sar" depends="war"&amp;gt;&lt;br /&gt;        &amp;lt;copy file="${build}/${warfile}" todir="${build}/sar"/&amp;gt;&lt;br /&gt;        &amp;lt;copy file="${build}/${jarfile}" todir="${build}/sar/lib"/&amp;gt;&lt;br /&gt;        &amp;lt;copy todir="${build}/sar/META-INF"&amp;gt;&lt;br /&gt;            &amp;lt;fileset dir="src/META-INF"/&amp;gt;&lt;br /&gt;        &amp;lt;/copy&amp;gt;&lt;br /&gt;        &amp;lt;jar basedir="${build}/sar" jarfile="${build}/${sarfile}"/&amp;gt;&lt;br /&gt;    &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;target name="undeploy"&amp;gt;&lt;br /&gt;        &amp;lt;delete file="${jbossportal.node}/deploy/${sarfile}"/&amp;gt;&lt;br /&gt;    &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;target name="deploy" depends="undeploy, sar"&amp;gt;&lt;br /&gt;        &amp;lt;copy file="${build}/${sarfile}" todir="${jbossportal.node}/deploy"/&amp;gt;&lt;br /&gt;    &amp;lt;/target&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;b&gt;local.properties (* You should replace paths with your real data)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;jdk.home=E:/devenv/tools/jdk-1.5.0_04&lt;br /&gt;&lt;br /&gt;jbossportal.home=E:/devenv/tools/jboss-portal-2.6&lt;br /&gt;jbossportal.node=${jbossportal.home}/server/default&lt;br /&gt;jbossportal.lib=${jbossportal.node}/deploy/jboss-portal.sar/lib&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;span style="font-size: large;"&gt;You may download these sources from &lt;a href="http://xantorohara.googlepages.com/xantorohara.blogspot.comsamples"&gt;Xantorohara.blogspot.com samples&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-5562576029518324759?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/5562576029518324759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=5562576029518324759' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/5562576029518324759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/5562576029518324759'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/07/inter-portlet-communication-in-jboss.html' title='Inter Portlet Communication in JBoss Portal 2.6'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_ruD_KHp6My0/RpprHaKs25I/AAAAAAAAAAk/bXPmnrGLlZk/s72-c/portal.gif' height='72' width='72'/><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-6510158076605084483</id><published>2007-07-17T17:51:00.000+04:00</published><updated>2007-08-11T01:54:20.395+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell script'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>HowTo post html code into blog</title><content type='html'>Sometimes bloggers need to publish some text, which not displayed correctly into their blog.&lt;br /&gt;&lt;br /&gt;For example, you can't post this html directly into your blog:&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;    &amp;lt;title&amp;gt;XLam&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;script language='javascript' src='xqx.web.xlam.XLam.nocache.js'&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;div id='uid'&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;but you can convert it into this format:&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&amp;amp;lt;html&amp;amp;gt;&lt;br /&gt;&amp;amp;lt;head&amp;amp;gt;&lt;br /&gt;    &amp;amp;lt;title&amp;amp;gt;XLam&amp;amp;lt;/title&amp;amp;gt;&lt;br /&gt;&amp;amp;lt;/head&amp;amp;gt;&lt;br /&gt;&amp;amp;lt;body&amp;amp;gt;&lt;br /&gt;&amp;amp;lt;script language='javascript' src='xqx.web.xlam.XLam.nocache.js'&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;&lt;br /&gt;&amp;amp;lt;div id='uid'&amp;amp;gt;&amp;amp;lt;/div&amp;amp;gt;&lt;br /&gt;&amp;amp;lt;/body&amp;amp;gt;&lt;br /&gt;&amp;amp;lt;/html&amp;amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;and then successfully publish it.&lt;br /&gt;&lt;br /&gt;For this purpose, bloggers may use this script:&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;#This simple shell script replaces symbols in the given xml/html &lt;b&gt;file&lt;/b&gt; and writes it to file &lt;b&gt;file&lt;/b&gt;.blog&lt;br /&gt;#Symbols to replace:&lt;br /&gt;# '&amp;lt;' with &amp;amp;lt;&lt;br /&gt;# '&amp;gt;' with &amp;amp;gt;&lt;br /&gt;# '&amp;amp;' with &amp;amp;amp;&lt;br /&gt;#&lt;br /&gt;#Usage: html2blog.sh &lt;b&gt;file&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;sed -e 's/\x26/\&amp;amp;amp;/g;s/\x3c/\&amp;amp;lt;/g;s/\x3e/\&amp;amp;gt;/g' $1 &amp;gt;$1.blog&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It works on Linux/Unix platforms or under Cygwin environment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-6510158076605084483?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/6510158076605084483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=6510158076605084483' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/6510158076605084483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/6510158076605084483'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/07/howto-post-html-code-into-blog.html' title='HowTo post html code into blog'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-4246256695138695988</id><published>2007-07-16T18:43:00.001+04:00</published><updated>2007-07-30T12:25:52.578+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GWT'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Portlet'/><title type='text'>GWT. Multiple widget's instances.</title><content type='html'>Portlets and GWT look nice together. At first sight.&lt;br /&gt;There is one problem in their cooperation: we can't use multiple instances of same GWT modules in one html page, so we can't build normal portlet.&lt;br /&gt;&lt;br /&gt;For example, I have simple GWT module with this entry point:&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;public class XLam implements EntryPoint {&lt;br /&gt;...&lt;br /&gt; public void onModuleLoad()&lt;br /&gt; {&lt;br /&gt;     RootPanel.get("&lt;b&gt;unique_html_element_id&lt;/b&gt;").add(somewidget);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And I would like to add this GWT module into my portlet. For this case I write code:&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;public class XLamPortlet extends GenericPortlet&lt;br /&gt;{&lt;br /&gt; protected void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws PortletException, PortletSecurityException, IOException&lt;br /&gt; {&lt;br /&gt;  ...&lt;br /&gt;     writer.println("&amp;lt;script language='javascript' src='" + renderRequest.getContextPath() + "/xqx.web.xlam.XLam.nocache.js'&amp;gt;&amp;lt;/script&amp;gt;");&lt;br /&gt;     writer.println("&amp;lt;div id='&lt;b&gt;unique_html_element_id&lt;/b&gt;'&amp;gt;&amp;lt;/div&amp;gt;");&lt;br /&gt;     ...&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When I try to place two same portlets into one page I get collision between GWT instances, of course.&lt;br /&gt;&lt;br /&gt;I think, that should be way to resolve this problem and I'm trying to find it.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:red;"&gt;Has someone any solution for this?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Today I've researched JavaScript, which generated by GWT compiler.&lt;br /&gt;I found some ways how to resolve this problem.&lt;br /&gt;&lt;br /&gt;It is possible to change some parts of the *.js compiled code, e.g.:.&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&lt;b&gt;Rewrite in *.cache.html&lt;/b&gt;&lt;br /&gt;..&lt;br /&gt;function wq(a)&lt;br /&gt;{&lt;br /&gt;    &lt;s&gt;hh(pi('unique_html_element_id'), a.b);&lt;/s&gt;&lt;br /&gt;    hh(pi($wnd.unique_html_element_id), a.b);&lt;br /&gt;    a.c = lq(new kq(), a);&lt;br /&gt;    id(a.c, 1000);&lt;br /&gt;}&lt;br /&gt;...&lt;br /&gt;&lt;b&gt;Define variables 'on the fly' in *.nocache.js&lt;/b&gt;&lt;br /&gt;...&lt;br /&gt;var unique_html_element_id='unique_html_element_id';&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;Or, maybe, rewrite or append additional parameters to some functions like this:&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;function gwtOnLoad(b, d, c)&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;But all these are dead-end ways :-(&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I think, Google may create useful mechanism for this.&lt;br /&gt;&lt;br /&gt;How? I mean, via special parameter in EntryPoint.onModuleLoad() function.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:large;color:red;"&gt;&lt;br /&gt;GWT Team, it is really necessary for many web developers!&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-4246256695138695988?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/4246256695138695988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=4246256695138695988' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4246256695138695988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/4246256695138695988'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/07/gwt-multiple-widgets-instances.html' title='GWT. Multiple widget&apos;s instances.'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306704057846428012.post-5644777830179243134</id><published>2007-07-13T18:50:00.001+04:00</published><updated>2007-11-01T20:53:03.157+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GWT'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='Portlet'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss Portal'/><title type='text'>Portlets and GWT</title><content type='html'>I've tried to search any useful samples of development Portlets with GWT.&lt;br /&gt;But I found only one such sample: &lt;a href="http://ddwiki.di.uoa.gr/mediawiki/index.php/Developing_Portlets_with_GWT"&gt;Developing_Portlets_with_GWT&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now I'm investigating possibility of development JSR168 Portlets together with Google Web Tolkit (I'm using JBoss Portal 2.6 and GWT 1.4).&lt;br /&gt;&lt;br /&gt;This subject too interesting for me, and, I think, for many other developers, because:&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/webtoolkit/"&gt;GWT&lt;/a&gt; is very useful stuff for  development AJAX- based web applications.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://code.google.com/webtoolkit/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_ruD_KHp6My0/RppqzKKs24I/AAAAAAAAAAc/MGXvsU57las/s400/code_sm.png" alt="" id="BLOGGER_PHOTO_ID_5087496156203506562" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://labs.jboss.com/jbossportal/"&gt;JBoss Portal&lt;/a&gt; is powerful and popular platform for this.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://labs.jboss.com/jbossportal/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_ruD_KHp6My0/RpprHaKs25I/AAAAAAAAAAk/bXPmnrGLlZk/s400/portal.gif" alt="" id="BLOGGER_PHOTO_ID_5087496504095857554" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;If these technologies work together, it will be great!&lt;br /&gt;&lt;br /&gt;But there are problems and questions present on this way. I'm going to say about these problems in next posts.&lt;br /&gt;This post about simple portlet based on GWT:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ruD_KHp6My0/RpeY-aKs23I/AAAAAAAAAAU/qX09RzsoESc/s1600-h/xlam.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_ruD_KHp6My0/RpeY-aKs23I/AAAAAAAAAAU/qX09RzsoESc/s400/xlam.PNG" alt="" id="BLOGGER_PHOTO_ID_5086702502081780594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This portlet only receives time from server every second and repaints this time.&lt;br /&gt;There are some source code presented below (I think it helps for someone).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;Project files&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;./build.properties&lt;br /&gt;./build.xml&lt;br /&gt;./local.properties&lt;br /&gt;./src&lt;br /&gt;./src/WEB-INF&lt;br /&gt;./src/WEB-INF/portlet-instances.xml&lt;br /&gt;./src/WEB-INF/portlet.xml&lt;br /&gt;./src/WEB-INF/web.xml&lt;br /&gt;./src/WEB-INF/xlam-object.xml&lt;br /&gt;./src/xqx&lt;br /&gt;./src/xqx/web&lt;br /&gt;./src/xqx/web/xlam&lt;br /&gt;./src/xqx/web/xlam/client&lt;br /&gt;./src/xqx/web/xlam/client/rpc&lt;br /&gt;./src/xqx/web/xlam/client/rpc/XLamService.java&lt;br /&gt;./src/xqx/web/xlam/client/rpc/XLamServiceAsync.java&lt;br /&gt;./src/xqx/web/xlam/client/Time.java&lt;br /&gt;./src/xqx/web/xlam/client/XLam.java&lt;br /&gt;./src/xqx/web/xlam/public&lt;br /&gt;./src/xqx/web/xlam/public/XLam.html&lt;br /&gt;./src/xqx/web/xlam/server&lt;br /&gt;./src/xqx/web/xlam/server/XLamServiceImpl.java&lt;br /&gt;./src/xqx/web/xlam/XLam.gwt.xml&lt;br /&gt;./src/xqx/web/xlam/XLamPortlet.java&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;portlet-instances.xml&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" standalone="yes"?&amp;gt;&lt;br /&gt;&amp;lt;deployments&amp;gt;&lt;br /&gt;&amp;lt;deployment&amp;gt;&lt;br /&gt;  &amp;lt;instance&amp;gt;&lt;br /&gt;      &amp;lt;instance-id&amp;gt;XLamPortletInstance&amp;lt;/instance-id&amp;gt;&lt;br /&gt;      &amp;lt;portlet-ref&amp;gt;XLamPortlet&amp;lt;/portlet-ref&amp;gt;&lt;br /&gt;  &amp;lt;/instance&amp;gt;&lt;br /&gt;&amp;lt;/deployment&amp;gt;&lt;br /&gt;&amp;lt;/deployments&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;portlet.xml&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"&lt;br /&gt;       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;       xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd&lt;br /&gt;        http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"&lt;br /&gt;       version="1.0"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;portlet&amp;gt;&lt;br /&gt;  &amp;lt;portlet-name&amp;gt;XLamPortlet&amp;lt;/portlet-name&amp;gt;&lt;br /&gt;  &amp;lt;portlet-class&amp;gt;xqx.web.xlam.XLamPortlet&amp;lt;/portlet-class&amp;gt;&lt;br /&gt;  &amp;lt;supports&amp;gt;&lt;br /&gt;      &amp;lt;mime-type&amp;gt;text/html&amp;lt;/mime-type&amp;gt;&lt;br /&gt;      &amp;lt;portlet-mode&amp;gt;VIEW&amp;lt;/portlet-mode&amp;gt;&lt;br /&gt;      &amp;lt;portlet-mode&amp;gt;EDIT&amp;lt;/portlet-mode&amp;gt;&lt;br /&gt;      &amp;lt;portlet-mode&amp;gt;HELP&amp;lt;/portlet-mode&amp;gt;&lt;br /&gt;  &amp;lt;/supports&amp;gt;&lt;br /&gt;  &amp;lt;portlet-info&amp;gt;&lt;br /&gt;      &amp;lt;title&amp;gt;XLam Portlet&amp;lt;/title&amp;gt;&lt;br /&gt;  &amp;lt;/portlet-info&amp;gt;&lt;br /&gt;&amp;lt;/portlet&amp;gt;&lt;br /&gt;&amp;lt;/portlet-app&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;web.xml&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;web-app version="2.4"&lt;br /&gt;   xmlns="http://java.sun.com/xml/ns/j2ee"&lt;br /&gt;   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee&lt;br /&gt;    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;servlet&amp;gt;&lt;br /&gt;  &amp;lt;servlet-name&amp;gt;XLamService&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;  &amp;lt;servlet-class&amp;gt;&lt;br /&gt;      xqx.web.xlam.server.XLamServiceImpl&lt;br /&gt;  &amp;lt;/servlet-class&amp;gt;&lt;br /&gt;&amp;lt;/servlet&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;  &amp;lt;servlet-name&amp;gt;XLamService&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;  &amp;lt;url-pattern&amp;gt;/XLamService&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/web-app&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;xlam-object.xml&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;deployments&amp;gt;&lt;br /&gt;&amp;lt;deployment&amp;gt;&lt;br /&gt;  &amp;lt;if-exists&amp;gt;overwrite&amp;lt;/if-exists&amp;gt;&lt;br /&gt;  &amp;lt;parent-ref&amp;gt;default&amp;lt;/parent-ref&amp;gt;&lt;br /&gt;  &amp;lt;page&amp;gt;&lt;br /&gt;      &amp;lt;page-name&amp;gt;XLam&amp;lt;/page-name&amp;gt;&lt;br /&gt;      &amp;lt;window&amp;gt;&lt;br /&gt;          &amp;lt;window-name&amp;gt;XLamPortletWindow&amp;lt;/window-name&amp;gt;&lt;br /&gt;          &amp;lt;instance-ref&amp;gt;XLamPortletInstance&amp;lt;/instance-ref&amp;gt;&lt;br /&gt;          &amp;lt;region&amp;gt;left&amp;lt;/region&amp;gt;&lt;br /&gt;          &amp;lt;height&amp;gt;0&amp;lt;/height&amp;gt;&lt;br /&gt;      &amp;lt;/window&amp;gt;&lt;br /&gt;  &amp;lt;/page&amp;gt;&lt;br /&gt;&amp;lt;/deployment&amp;gt;&lt;br /&gt;&amp;lt;/deployments&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;XLamService.java&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;package xqx.web.xlam.client.rpc;&lt;br /&gt;&lt;br /&gt;import com.google.gwt.core.client.GWT;&lt;br /&gt;import com.google.gwt.user.client.rpc.RemoteService;&lt;br /&gt;import com.google.gwt.user.client.rpc.ServiceDefTarget;&lt;br /&gt;import xqx.web.xlam.client.Time;&lt;br /&gt;&lt;br /&gt;public interface XLamService extends RemoteService {&lt;br /&gt;&lt;br /&gt;Time getTime();&lt;br /&gt;&lt;br /&gt;public static class App {&lt;br /&gt;private static xqx.web.xlam.client.rpc.XLamServiceAsync ourInstance = null;&lt;br /&gt;&lt;br /&gt;public static synchronized xqx.web.xlam.client.rpc.XLamServiceAsync getInstance() {&lt;br /&gt;if (ourInstance == null) {&lt;br /&gt;ourInstance = (xqx.web.xlam.client.rpc.XLamServiceAsync) GWT.create(XLamService.class);&lt;br /&gt;((ServiceDefTarget) ourInstance).setServiceEntryPoint(GWT.getModuleBaseURL() + "XLamService");&lt;br /&gt;}&lt;br /&gt;return ourInstance;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;XLamServiceAsync.java&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;package xqx.web.xlam.client.rpc;&lt;br /&gt;&lt;br /&gt;import com.google.gwt.user.client.rpc.AsyncCallback;&lt;br /&gt;&lt;br /&gt;public interface XLamServiceAsync&lt;br /&gt;{&lt;br /&gt;void getTime(AsyncCallback callback);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;Time.java&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;package xqx.web.xlam.client;&lt;br /&gt;&lt;br /&gt;import com.google.gwt.user.client.rpc.IsSerializable;&lt;br /&gt;&lt;br /&gt;public class Time implements IsSerializable&lt;br /&gt;{&lt;br /&gt;private String time;&lt;br /&gt;&lt;br /&gt;public String getTime() { return time; }&lt;br /&gt;&lt;br /&gt;public Time(String message) { this.time = message; }&lt;br /&gt;&lt;br /&gt;public Time() { }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;XLam.java&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;package xqx.web.xlam.client;&lt;br /&gt;&lt;br /&gt;import com.google.gwt.core.client.EntryPoint;&lt;br /&gt;import com.google.gwt.user.client.Timer;&lt;br /&gt;import com.google.gwt.user.client.Window;&lt;br /&gt;import com.google.gwt.user.client.rpc.AsyncCallback;&lt;br /&gt;import com.google.gwt.user.client.ui.Label;&lt;br /&gt;import com.google.gwt.user.client.ui.RootPanel;&lt;br /&gt;import xqx.web.xlam.client.rpc.XLamService;&lt;br /&gt;&lt;br /&gt;public class XLam implements EntryPoint&lt;br /&gt;{&lt;br /&gt;private Timer timer;&lt;br /&gt;private Label label = new Label("Wait...");&lt;br /&gt;&lt;br /&gt;private class CallBack implements AsyncCallback&lt;br /&gt;{&lt;br /&gt;  public void onFailure(Throwable caught)&lt;br /&gt;  {&lt;br /&gt;      timer.cancel();&lt;br /&gt;      Window.alert(caught.getMessage());&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void onSuccess(Object result)&lt;br /&gt;  {&lt;br /&gt;      label.setText(((Time) result).getTime());&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private CallBack callBack = new CallBack();&lt;br /&gt;&lt;br /&gt;public void onModuleLoad()&lt;br /&gt;{&lt;br /&gt;  RootPanel.get("uid").add(label);&lt;br /&gt;&lt;br /&gt;  timer = new Timer()&lt;br /&gt;  {&lt;br /&gt;      public void run()&lt;br /&gt;      {&lt;br /&gt;          XLamService.App.getInstance().getTime(callBack);&lt;br /&gt;      }&lt;br /&gt;  };&lt;br /&gt;  timer.scheduleRepeating(1000);&lt;br /&gt;}&lt;br /&gt;}                           &lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;XLam.html (dummy)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;XLam&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;script language='javascript' src='xqx.web.xlam.XLam.nocache.js'&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;div id='uid'&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;XLamServiceImpl.java&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;package xqx.web.xlam.server;&lt;br /&gt;&lt;br /&gt;import com.google.gwt.user.server.rpc.RemoteServiceServlet;&lt;br /&gt;import xqx.web.xlam.client.Time;&lt;br /&gt;import xqx.web.xlam.client.rpc.XLamService;&lt;br /&gt;&lt;br /&gt;import java.text.DateFormat;&lt;br /&gt;import java.util.Date;&lt;br /&gt;&lt;br /&gt;public class XLamServiceImpl extends RemoteServiceServlet implements XLamService&lt;br /&gt;{&lt;br /&gt;public Time getTime()&lt;br /&gt;{&lt;br /&gt;  String out = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.FULL).format(new Date());&lt;br /&gt;  return new Time(out);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;XLamPortlet.java&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;package xqx.web.xlam;&lt;br /&gt;&lt;br /&gt;import javax.portlet.GenericPortlet;&lt;br /&gt;import javax.portlet.PortletException;&lt;br /&gt;import javax.portlet.PortletSecurityException;&lt;br /&gt;import javax.portlet.RenderRequest;&lt;br /&gt;import javax.portlet.RenderResponse;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.PrintWriter;&lt;br /&gt;&lt;br /&gt;public class XLamPortlet extends GenericPortlet&lt;br /&gt;{&lt;br /&gt;protected void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws PortletException, PortletSecurityException, IOException&lt;br /&gt;{&lt;br /&gt;  renderResponse.setContentType("text/html");&lt;br /&gt;  PrintWriter writer = renderResponse.getWriter();&lt;br /&gt;&lt;span style="color:red;"&gt;  writer.println("&amp;lt;script language='javascript' src='" + renderRequest.getContextPath() + "/xqx.web.xlam.XLam.nocache.js'&amp;gt;&amp;lt;/script&amp;gt;");&lt;/span&gt;&lt;br /&gt;  writer.println("GWT time:");&lt;br /&gt;  writer.println("&amp;lt;div id='uid'&amp;gt;&amp;lt;/div&amp;gt;");&lt;br /&gt;  writer.close();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected void doHelp(RenderRequest renderRequest, RenderResponse renderResponse) throws PortletException, PortletSecurityException, IOException&lt;br /&gt;{&lt;br /&gt;  renderResponse.setContentType("text/html");&lt;br /&gt;  PrintWriter writer = renderResponse.getWriter();&lt;br /&gt;  writer.write("Help");&lt;br /&gt;  writer.close();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected void doEdit(RenderRequest renderRequest, RenderResponse renderResponse) throws PortletException, PortletSecurityException, IOException&lt;br /&gt;{&lt;br /&gt;  renderResponse.setContentType("text/html");&lt;br /&gt;  PrintWriter writer = renderResponse.getWriter();&lt;br /&gt;  writer.println("Edit");&lt;br /&gt;  writer.close();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;XLam.gwt.xml&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;module&amp;gt;&lt;br /&gt;&amp;lt;inherits name='com.google.gwt.user.User'/&amp;gt;&lt;br /&gt;&amp;lt;entry-point class='xqx.web.xlam.client.XLam'/&amp;gt;&lt;br /&gt;&amp;lt;servlet path="/XLamService" class="xqx.web.xlam.server.XLamServiceImpl"/&amp;gt;&lt;br /&gt;&amp;lt;/module&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Build, deploy and view (http://localhost:8080/portal/auth/portal/default/XLam)&lt;br /&gt;&lt;br /&gt;For building purpose you may use this Ant file:&lt;br /&gt;&lt;span style="font-size:small;"&gt;&lt;pre&gt;&lt;hr /&gt;&lt;b&gt;build.xml&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="ISO-8859-1"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;project name="xlam" default="war"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;property file="local.properties"/&amp;gt;&lt;br /&gt;&amp;lt;property file="build.properties"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;property name="build" value="build"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;property name="jarfile" value="${project.name}.jar"/&amp;gt;&lt;br /&gt;&amp;lt;property name="warfile" value="${project.name}.war"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;path id="classpath"&amp;gt;&lt;br /&gt;  &amp;lt;fileset dir="${jbossportal.lib}" includes="**/*.jar"/&amp;gt;&lt;br /&gt;  &amp;lt;fileset dir="${gwt.home}" includes="**/*.jar"/&amp;gt;&lt;br /&gt;  &amp;lt;fileset file="${jarfile}"/&amp;gt;&lt;br /&gt;  &amp;lt;pathelement location="src"/&amp;gt;&lt;br /&gt;&amp;lt;/path&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;target name="clean"&amp;gt;&lt;br /&gt;  &amp;lt;delete dir="${build}"/&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;target name="jar" depends="clean"&amp;gt;&lt;br /&gt;  &amp;lt;mkdir dir="${build}/bin"/&amp;gt;&lt;br /&gt;  &amp;lt;javac srcdir="src" destdir="${build}/bin" classpathref="classpath" debug="true"/&amp;gt;&lt;br /&gt;  &amp;lt;jar basedir="${build}/bin" jarfile="${build}/${jarfile}"/&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;target name="war" depends="jar, gwt"&amp;gt;&lt;br /&gt;  &amp;lt;copy todir="${build}/war"&amp;gt;&lt;br /&gt;      &amp;lt;fileset dir="${build}/www/${project.package}.${project.name}"&amp;gt;&lt;br /&gt;          &amp;lt;exclude name="**/*cache.xml"/&amp;gt;&lt;br /&gt;          &amp;lt;exclude name="**/history.html"/&amp;gt;&lt;br /&gt;      &amp;lt;/fileset&amp;gt;&lt;br /&gt;  &amp;lt;/copy&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;copy todir="${build}/war/WEB-INF"&amp;gt;&lt;br /&gt;      &amp;lt;fileset dir="src/WEB-INF"/&amp;gt;&lt;br /&gt;  &amp;lt;/copy&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;copy todir="${build}/war/WEB-INF/lib"&amp;gt;&lt;br /&gt;      &amp;lt;fileset file="${build}/${jarfile}"/&amp;gt;&lt;br /&gt;      &amp;lt;fileset file="${gwt.home}/gwt-servlet.jar"/&amp;gt;&lt;br /&gt;  &amp;lt;/copy&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;jar basedir="${build}/war" jarfile="${build}/${warfile}"/&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;target name="gwt"&amp;gt;&lt;br /&gt;  &amp;lt;mkdir dir="${build}/www"/&amp;gt;&lt;br /&gt;  &amp;lt;java classname="com.google.gwt.dev.GWTCompiler" fork="true" dir="${build}" classpathref="classpath"&amp;gt;&lt;br /&gt;      &amp;lt;arg line="-out www ${project.package}.${project.name}"/&amp;gt;&lt;br /&gt;  &amp;lt;/java&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;target name="shell" depends="jar"&amp;gt;&lt;br /&gt;  &amp;lt;delete dir="${build}/www"/&amp;gt;&lt;br /&gt;  &amp;lt;mkdir dir="${build}/www"/&amp;gt;&lt;br /&gt;  &amp;lt;java classname="com.google.gwt.dev.GWTShell" fork="true" dir="${build}" classpathref="classpath"&amp;gt;&lt;br /&gt;      &amp;lt;arg line="-out www ${project.package}.${project.name}/${project.name}.html"/&amp;gt;&lt;br /&gt;  &amp;lt;/java&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;target name="undeploy"&amp;gt;&lt;br /&gt;  &amp;lt;delete file="${jbossportal.node}/deploy/${warfile}"/&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;target name="deploy" depends="undeploy, war"&amp;gt;&lt;br /&gt;  &amp;lt;copy file="${build}/${warfile}" todir="${jbossportal.node}/deploy"/&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;build.properties&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;project.name=XLam&lt;br /&gt;project.package=xqx.web.xlam&lt;br /&gt;project.sources=xqx/web/xlam&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;local.properties (* You should replace paths with your real data)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;jdk.home=E:/devenv/tools/jdk-1.5.0_04&lt;br /&gt;&lt;br /&gt;jbossportal.home=E:/devenv/tools/jboss-portal-2.6&lt;br /&gt;jbossportal.node=${jbossportal.home}/server/default&lt;br /&gt;jbossportal.lib=${jbossportal.node}/deploy/jboss-portal.sar/lib&lt;br /&gt;&lt;br /&gt;gwt.home=E:/devenv/tools/gwt-windows-1.4.10&lt;br /&gt;gwt.docs.index=${gwt.home}/doc/html/gwt.html&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;You may download these sources from &lt;a href="http://xantorohara.googlepages.com/xantorohara.blogspot.comsamples"&gt;Xantorohara.blogspot.com samples&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306704057846428012-5644777830179243134?l=xantorohara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xantorohara.blogspot.com/feeds/5644777830179243134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306704057846428012&amp;postID=5644777830179243134' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/5644777830179243134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306704057846428012/posts/default/5644777830179243134'/><link rel='alternate' type='text/html' href='http://xantorohara.blogspot.com/2007/07/portlets-and-gwt.html' title='Portlets and GWT'/><author><name>Xantorohara</name><uri>http://www.blogger.com/profile/05302201977749671284</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_ruD_KHp6My0/RppqzKKs24I/AAAAAAAAAAc/MGXvsU57las/s72-c/code_sm.png' height='72' width='72'/><thr:total>16</thr:total></entry></feed>
