<?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-22667616</id><updated>2011-04-22T10:23:34.857+08:00</updated><category term='apache'/><category term='install'/><category term='make'/><category term='terminal'/><category term='package'/><category term='java'/><category term='fink'/><category term='asprise'/><category term='mac'/><category term='gcc'/><category term='ocr'/><category term='projects'/><category term='framework'/><category term='gcc4'/><category term='cron'/><category term='erp'/><category term='solaris'/><category term='compiler'/><category term='library'/><category term='gunzip'/><category term='ip'/><title type='text'>Project Athena</title><subtitle type='html'>Footprint for a big plan ...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-22667616.post-6685596560609491573</id><published>2008-01-24T17:47:00.000+08:00</published><updated>2008-01-24T17:48:29.355+08:00</updated><title type='text'>Hot Code Changes</title><content type='html'>Hot Code Changes&lt;br /&gt;&lt;br /&gt;ClassLoaders let you modify code on the fly without shutting down an application. New code is loaded with Class.forname. It creates new versions of the objects by reloading the classes for the objects with a ClassLoader. You then have both old and new versions of the same object, both with the same name, but with different data and different code. From the JVM’s point of view, a class loaded with a new ClassLoader is a different animal entirely from the one loaded with the standard ClassLoader even if the classes have the same name. You can manipulate both old an new objects with a common interface.&lt;br /&gt;&lt;br /&gt;With a new ClassLoader, you can load a different version of a class. The old objects continue to use the old code. New objects use the new code. A given ClassLoader can load a given class only once. There is no need to unload a class. When the objects using it are no longer referenced, the class object itself, along with the code, will be garbage collected. The same classes, loaded by different class loaders are considered distinct classes. They are not instanceofs each other!&lt;br /&gt;&lt;br /&gt;You will have to instantiate a new ClassLoader every time you have a new generation of classes. You can load all the replacement classes of a generation with the same ClassLoader. However, when you want to replace the replaced classes, you need a yet another new ClassLoader. You can do this with multiple instances of the same ClassLoader. You only need to write one ClassLoader, perhaps not even one, not one for each generation.&lt;br /&gt;&lt;br /&gt;Have a look at the java.net.URLClassLoader. You may find for your given problem you don’t even have to write whole new ClassLoader, just instantiate one of Sun’s.&lt;br /&gt;&lt;br /&gt;http://mindprod.com/jgloss/classloader.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-6685596560609491573?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/6685596560609491573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=6685596560609491573' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/6685596560609491573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/6685596560609491573'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2008/01/hot-code-changes.html' title='Hot Code Changes'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-5924402434920592017</id><published>2008-01-24T17:46:00.000+08:00</published><updated>2008-01-24T17:46:46.970+08:00</updated><title type='text'>How to unload Java Class</title><content type='html'>&lt;a href="http://blog.taragana.com/index.php/archive/how-to-unload-java-class/"&gt;How to unload Java Class&lt;/a&gt;: "I have been asked this question several times. Recently Xyling asked the same question in his blog. So I thought a simple explanation may be in order.&lt;br /&gt;&lt;br /&gt;To unload a class you have to create a custom classloader and load the class using it. Tomcat does it and so does JRun. You can look in Tomcat code for an example.&lt;br /&gt;&lt;br /&gt;After you are done with the class you need to release all references to the class as well as to the class loader by reassigning the variables or setting them to null.&lt;br /&gt;&lt;br /&gt;Then either wait for System.gc() to unload the class or you call it directly in a loop till no more bytes can be freed. however normally calling it twice does the trick.&lt;br /&gt;&lt;br /&gt;Note: You cannot unload a single class. You have to unload the classloader along with it. So obviously System classloader is not the suitable for this task.&lt;br /&gt;&lt;br /&gt;Note 2: This is how JSP pages are reloaded dynamically everytime you change the code. And yes that is why first time takes much longer to load then subsequent times."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-5924402434920592017?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/5924402434920592017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=5924402434920592017' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/5924402434920592017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/5924402434920592017'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2008/01/how-to-unload-java-class.html' title='How to unload Java Class'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-8880310721290868732</id><published>2007-12-08T23:46:00.000+08:00</published><updated>2007-12-08T23:46:49.282+08:00</updated><title type='text'>Access Mac OS X Sharing from Vista</title><content type='html'>I purchased a new laser printer and use my Mac Mini as the printer server.&lt;br /&gt;&lt;br /&gt;My Windows XP laptop can access it. However, Vista desktop got trouble. Here is the solution googled that works:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Click Windows Visa Start Orb&lt;/li&gt;&lt;li&gt;In search box, type "regedit" and return&lt;/li&gt;&lt;li&gt;Once regedit opens, click File -&gt; export to make a backup copy&lt;/li&gt;&lt;li&gt;Navigate to ComputerHKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa.&lt;/li&gt;&lt;li&gt;n the right pane, right-click the "LmCompatibilityLevel" key and select "modify"&lt;/li&gt;&lt;li&gt;Change the value from 3 to 1&lt;/li&gt;&lt;li&gt;Exit regedit and you should now be able to properly authenticate to your Mac OS X (or other Samba) share.&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/22667616-8880310721290868732?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/8880310721290868732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=8880310721290868732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/8880310721290868732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/8880310721290868732'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2007/12/access-mac-os-x-sharing-from-vista.html' title='Access Mac OS X Sharing from Vista'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-850159540345193626</id><published>2007-09-17T18:08:00.000+08:00</published><updated>2007-09-17T18:08:07.130+08:00</updated><title type='text'>Service Group Problems with Apache Axis2</title><content type='html'>Recently, I am doing web services programming with Apache Axis2. I perform several builds with the target stock.aar (every time, the content of services.xml is different). The deployment are successfully all the times. However, when I try to access the web service using a client, I receive the following error:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;... StockQuoteService_Jack2, which is invalid. It does not belong to the stock service group ...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To my understanding, a service group is a .aar file - all the web services contained in the .aar belong to the same service group and the group name is the file name without extension.&lt;br /&gt;&lt;br /&gt;To solve the problem, I restart my Tomcat. It seems that the problem was caused due some caching problems of Axis2.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-850159540345193626?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/850159540345193626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=850159540345193626' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/850159540345193626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/850159540345193626'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2007/09/service-group-problems-with-apache.html' title='Service Group Problems with Apache Axis2'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-8773930387297457180</id><published>2007-08-28T11:00:00.000+08:00</published><updated>2007-11-13T23:58:35.711+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='gunzip'/><category scheme='http://www.blogger.com/atom/ns#' term='gcc4'/><category scheme='http://www.blogger.com/atom/ns#' term='gcc'/><category scheme='http://www.blogger.com/atom/ns#' term='ocr'/><category scheme='http://www.blogger.com/atom/ns#' term='compiler'/><category scheme='http://www.blogger.com/atom/ns#' term='asprise'/><category scheme='http://www.blogger.com/atom/ns#' term='solaris'/><category scheme='http://www.blogger.com/atom/ns#' term='make'/><title type='text'>Compile Asprise OCR on Solaris</title><content type='html'>Reference article: &lt;a href="http://gcc.gnu.org/ml/gcc/1999-08n/msg01022.html"&gt;Hint: How to install gcc on Solaris (easiest way possible - I think)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Actual procedure:&lt;br /&gt;&lt;br /&gt;A. Download all the required software:&lt;br /&gt;&lt;br /&gt;$ cd installer/&lt;br /&gt;$ ftp ftp.sunfreeware.com&lt;br /&gt;ftp&gt; cd pub/freeware/i386/10/&lt;br /&gt;prompt&lt;br /&gt;mget gzip*&lt;br /&gt;mget make*&lt;br /&gt;mget gcc*&lt;br /&gt;ftp&gt; quit&lt;br /&gt;$ ls&lt;br /&gt;gcc-3.3.2-sol10-intel-local.gz  gzip-1.3.5.10-sol10-x86-local&lt;br /&gt;gcc-3.3.6-sol10-intel-local.gz  make-3.80-sol10-intel-local.gz&lt;br /&gt;gcc-3.4.6-sol10-x86-local.gz    make-3.81-sol10-x86-local.gz&lt;br /&gt;gzip-1.3.5-sol10-intel-local&lt;br /&gt;$ su&lt;br /&gt;# bash&lt;br /&gt;# PATH=$PATH:.:/usr/local/bin&lt;br /&gt;# pkgadd -d  gzip-1.3.5-sol10-intel-local&lt;br /&gt;# gunzip -d make-3.81-sol10-x86-local.gz&lt;br /&gt;# pkgadd -d make-3.81-sol10-x86-local&lt;br /&gt;# gzip -d gcc-3.4.6-sol10-x86-local.gz&lt;br /&gt;# pkgadd -d gcc-3.4.6-sol10-x86-local&lt;br /&gt;Do you want to install these conflicting files [y,n,?,q] y&lt;br /&gt;# g++ -v&lt;br /&gt;Reading specs from /opt/bin/../lib/gcc/i386-pc-solaris2.10/3.4.6/specs&lt;br /&gt;Configured with: ../configure --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --enable-shared --enable-languages=c,c++,f77&lt;br /&gt;Thread model: posix&lt;br /&gt;gcc version 3.4.6&lt;br /&gt;# java -version&lt;br /&gt;java version "1.5.0_07"&lt;br /&gt;Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-b03)&lt;br /&gt;Java HotSpot(TM) Server VM (build 1.5.0_07-b03, mixed mode)&lt;br /&gt;# ls /usr/java/include/&lt;br /&gt;jawt.h           jni.h            jvmpi.h          solaris&lt;br /&gt;jdwpTransport.h  jvmdi.h          jvmti.h&lt;br /&gt;# ls /usr/java/include/solaris/&lt;br /&gt;jawt_md.h  jni_md.h&lt;br /&gt;# mkdir java-evaluation&lt;br /&gt;# mkdir java-licensed&lt;br /&gt;# ./buildEvaluation.sh&lt;br /&gt;# ./buildLicensed.sh&lt;br /&gt;# cd java-evaluation/&lt;br /&gt;# chmod a+x *.sh&lt;br /&gt;# ./runDemo1.sh&lt;br /&gt;&lt;br /&gt;--- A general sample with both characters and barcodes ---&lt;br /&gt;&lt;br /&gt;Welcome to Asprise OCR v2.1 Demo!&lt;br /&gt;&lt;br /&gt;Trying to perform OCR on image: /export/home/asprise_dev/ocr/java-evaluation/sample-images/ocr.gif&lt;br /&gt;Exception in thread "main" java.lang.UnsatisfiedLinkError: /export/home/asprise_dev/ocr/java-evaluation/libAspriseOCR.so: ld.so.1: java: fatal: libstdc++.so.6: open failed: No such file or directory&lt;br /&gt;      at java.lang.ClassLoader$NativeLibrary.load(Native Method)&lt;br /&gt;      at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1751)&lt;br /&gt;      at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1676)&lt;br /&gt;      at java.lang.Runtime.loadLibrary0(Runtime.java:822)&lt;br /&gt;      at java.lang.System.loadLibrary(System.java:992)&lt;br /&gt;      at com.asprise.util.ocr.OCR.loadLibrary(OCR.java:247)&lt;br /&gt;      at com.asprise.util.ocr.OCR.&lt;init&gt;(OCR.java:56)&lt;br /&gt;      at com.asprise.util.ocr.demo.Demo.main(Demo.java:51)&lt;br /&gt;&lt;br /&gt;# ftp ftp.sunfreeware.com&lt;br /&gt;ftp&gt; cd pub/freeware/i386/10/&lt;br /&gt;ftp&gt; mget libgcc*&lt;br /&gt;# gzip -d libgcc-3.4.6-sol10-x86-local.gz&lt;br /&gt;# pkgadd -d gcc-3.4.6-sol10-x86-local&lt;br /&gt;export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH:/usr/local/lib&lt;br /&gt;java -classpath .:aspriseOCR.jar:demo.jar com.asprise.util.ocr.demo.Demo sample-images/ocr.gif&lt;br /&gt;&lt;br /&gt;=== ASPRISE OCR SDK EVALUATION ===&lt;br /&gt;&lt;br /&gt;1) For licensing information, visit: http://asprise.com/product/ocr&lt;br /&gt;2) This evaluation version replaces all recognized 'q' and 'x' occurrences with stars ('*').&lt;br /&gt;&lt;br /&gt;[123456789012]&lt;br /&gt;Asprise OCR&lt;br /&gt;Speed. Accuracy.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;UPDATE:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;On a Solaris 10 x86, after install GCC, I run g++ -v, and it reports error about missing iconv. To fix it:&lt;br /&gt;&lt;br /&gt;Go the same FTP folder:&lt;br /&gt;#mget libiconv*&lt;br /&gt;#gzip -d libiconv-1.11-sol10-x86-local.gz&lt;br /&gt;#pkgadd -d &lt;/span&gt;&lt;/init&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;libiconv-1.11-sol10-x86-local&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;init&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/init&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-8773930387297457180?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/8773930387297457180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=8773930387297457180' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/8773930387297457180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/8773930387297457180'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2007/08/compile-asprise-ocr-on-solaris.html' title='Compile Asprise OCR on Solaris'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-2524241635521029473</id><published>2007-05-22T15:35:00.000+08:00</published><updated>2007-05-22T15:35:39.738+08:00</updated><title type='text'>Jakarta JSTL Library</title><content type='html'>&lt;a href="http://jakarta.apache.org/taglibs/doc/standard-doc/standard/GettingStarted.html"&gt;Jakarta JSTL Library&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To use the Standard Taglib from its Jakarta Taglibs distribution, simply copy the JAR files [jstl.jar &amp; standard.jar] in the distribution's 'lib' directory to your application's WEB-INF/lib directory.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;jstl.jar &lt;/span&gt;- JSTL API classes&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;standard.jar&lt;/span&gt; - Standard Taglib JSTL implementation classes&lt;br /&gt;&lt;br /&gt;&lt;p&gt; The constituent tag libraries of Standard Taglib are as follows: &lt;/p&gt;         &lt;table border="1" cellpadding="5"&gt;&lt;tbody&gt;&lt;tr&gt;        &lt;th&gt;Funtional Area&lt;/th&gt;       &lt;th&gt;URI&lt;/th&gt;       &lt;th&gt;Prefix&lt;/th&gt;       &lt;th&gt;Example&lt;/th&gt;     &lt;/tr&gt;     &lt;tr&gt;        &lt;td&gt;Core&lt;/td&gt;       &lt;td&gt;http://java.sun.com/jsp/jstl/core&lt;/td&gt;       &lt;td&gt;          &lt;div align="center"&gt;&lt;span style="font-family:Courier New,Courier,mono;"&gt;c&lt;/span&gt;&lt;/div&gt;       &lt;/td&gt;       &lt;td&gt;&lt;span style="font-family:Courier New,Courier,mono;"&gt;&lt;c:&gt;&lt;i&gt;tagname&lt;/i&gt; ...&gt;&lt;/c:&gt;&lt;/span&gt;&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;        &lt;td&gt;XML processing&lt;/td&gt;       &lt;td&gt;http://java.sun.com/jsp/jstl/xml&lt;/td&gt;       &lt;td&gt;          &lt;div align="center"&gt;&lt;span style="font-family:Courier New,Courier,mono;"&gt;x&lt;/span&gt;&lt;/div&gt;       &lt;/td&gt;       &lt;td&gt;&lt;span style="font-family:Courier New,Courier,mono;"&gt;&lt;x:&gt;&lt;i&gt;tagname&lt;/i&gt; ...&gt;&lt;/x:&gt;&lt;/span&gt;&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;        &lt;td&gt;I18N capable formatting&lt;/td&gt;       &lt;td&gt;http://java.sun.com/jsp/jstl/fmt&lt;/td&gt;       &lt;td&gt;          &lt;div align="center"&gt;&lt;span style="font-family:Courier New,Courier,mono;"&gt;fmt&lt;/span&gt;&lt;/div&gt;       &lt;/td&gt;       &lt;td&gt;&lt;span style="font-family:Courier New,Courier,mono;"&gt;&lt;fmt:&gt;&lt;i&gt;tagname&lt;/i&gt; ...&gt;&lt;/fmt:&gt;&lt;/span&gt;&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;        &lt;td&gt;Database access (SQL)&lt;/td&gt;       &lt;td&gt;http://java.sun.com/jsp/jstl/sql&lt;/td&gt;       &lt;td&gt;          &lt;div align="center"&gt;&lt;span style="font-family:Courier New,Courier,mono;"&gt;sql&lt;/span&gt;&lt;/div&gt;       &lt;/td&gt;       &lt;td&gt;&lt;span style="font-family:Courier New,Courier,mono;"&gt;&lt;sql:&gt;&lt;i&gt;tagname&lt;/i&gt; ...&gt;&lt;/sql:&gt;&lt;/span&gt;&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;        &lt;td&gt;Functions&lt;/td&gt;       &lt;td&gt;http://java.sun.com/jsp/jstl/functions&lt;/td&gt;       &lt;td&gt;          &lt;div align="center"&gt;&lt;span style="font-family:Courier New,Courier,mono;"&gt;fn&lt;/span&gt;&lt;/div&gt;       &lt;/td&gt;       &lt;td&gt;&lt;span style="font-family:Courier New,Courier,mono;"&gt;fn:&lt;i&gt;functionName&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-2524241635521029473?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/2524241635521029473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=2524241635521029473' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/2524241635521029473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/2524241635521029473'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2007/05/jakarta-jstl-library_22.html' title='Jakarta JSTL Library'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-2595751180702643031</id><published>2007-05-22T15:26:00.000+08:00</published><updated>2007-05-22T15:26:13.099+08:00</updated><title type='text'>Jakarta JSTL Library</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-2595751180702643031?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/2595751180702643031/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=2595751180702643031' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/2595751180702643031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/2595751180702643031'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2007/05/jakarta-jstl-library.html' title='Jakarta JSTL Library'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-4699821434750640615</id><published>2007-05-22T13:52:00.000+08:00</published><updated>2007-05-22T13:52:12.245+08:00</updated><title type='text'>Tomcat 6</title><content type='html'>In order to run Tomcat 6 successfully, system environment JAVA_HOME must be set correctly. Otherwise, mysterious  error may occur.&lt;br /&gt;&lt;br /&gt;Java version &gt;= 5.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-4699821434750640615?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/4699821434750640615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=4699821434750640615' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/4699821434750640615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/4699821434750640615'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2007/05/tomcat-6.html' title='Tomcat 6'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-5460847732092080311</id><published>2007-02-06T10:46:00.000+08:00</published><updated>2007-02-06T10:47:41.953+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projects'/><category scheme='http://www.blogger.com/atom/ns#' term='library'/><category scheme='http://www.blogger.com/atom/ns#' term='framework'/><category scheme='http://www.blogger.com/atom/ns#' term='erp'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>The Apache Open For Business Project - Open Source E-Business / E-Commerce, ERP, CRM, POS</title><content type='html'>&lt;a href="http://ofbiz.apache.org/"&gt;The Apache Open For Business Project - Open Source E-Business / E-Commerce, ERP, CRM, POS&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Apache Open For Business Project is an open source enterprise automation software project licensed under the Apache License Version 2.0. By open source enterprise automation we mean: Open Source ERP, Open Source CRM, Open Source E-Business / E-Commerce, Open Source SCM, Open Source MRP, Open Source CMMS/EAM, and so on.&lt;br /&gt;&lt;br /&gt;Apache OFBiz is a foundation and starting point for enterprise solutions, be they for one organization or one million. OFBiz can certainly be used OOTB (out of the box), but if you're looking for something that works really well for that there are many open source projects that do a great job there. OFBiz is great for creating specialized applications for use OOTB by other organizations. OFBiz is also great for organizations that need more than what an OOTB application can offer in order to grow their operations, but find the deployment and maintenance costs of traditional enterprise systems that can handle such things to be unreasonable or unjustifiable.&lt;br /&gt;&lt;br /&gt;Being open source under the Apache 2.0 license and driven by a community Apache OFBiz offers both flexibility by design and by access to code, and a solution where you're not along but rather can work with many others to get things done.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;For answers to your questions you might find the following documents useful:           &lt;a href="http://ofbiz.apache.org/general-overview.html"&gt;General Overview&lt;/a&gt;,           &lt;a href="http://docs.ofbiz.org/x/hgM"&gt;Is Apache OFBiz for Me?&lt;/a&gt;,           &lt;a href="http://ofbiz.apache.org/feature-list.html"&gt;Feature List&lt;/a&gt;, and           &lt;a href="http://ofbiz.apache.org/comingsoon.html"&gt;Features Coming Soon&lt;/a&gt;         &lt;/p&gt;          &lt;p&gt;For more technical information, see the &lt;a href="http://ofbiz.apache.org/documents.html"&gt;Documentation &amp; Books&lt;/a&gt; page.&lt;/p&gt;                  &lt;p&gt;Apache OFBiz offers a great deal of functionality, including:&lt;/p&gt;         &lt;ul&gt;&lt;li&gt;advanced e-commerce&lt;/li&gt;&lt;li&gt;catalog management&lt;/li&gt;&lt;li&gt;promotion &amp;amp; pricing management&lt;/li&gt;&lt;li&gt;order management (sales &amp; purchase)&lt;/li&gt;&lt;li&gt;customer management (part of general party management)&lt;/li&gt;&lt;li&gt;warehouse management&lt;/li&gt;&lt;li&gt;fulfillment (auto stock moves, batched pick, pack &amp;amp; ship)&lt;/li&gt;&lt;li&gt;accounting (invoice, payment &amp;amp; billing accounts, fixed assets)&lt;/li&gt;&lt;li&gt;manufacturing management&lt;/li&gt;&lt;li&gt;general work effort management (events, tasks, projects, requests, etc)&lt;/li&gt;&lt;li&gt;content management (for product content, web sites, general content, blogging, forums, etc)&lt;/li&gt;&lt;li&gt;and much more all in an open source package!&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-5460847732092080311?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/5460847732092080311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=5460847732092080311' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/5460847732092080311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/5460847732092080311'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2007/02/apache-open-for-business-project-open.html' title='The Apache Open For Business Project - Open Source E-Business / E-Commerce, ERP, CRM, POS'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-9089695882638338710</id><published>2007-01-29T10:16:00.000+08:00</published><updated>2007-01-29T10:25:31.468+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ip'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='cron'/><title type='text'>Cron tips - No mail log</title><content type='html'>I use the following cron job to keep tracking the IP of my mac:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;*/20 * * * * curl http://jack.asprise.net/private.php?update=1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The job will be executed every 20 minutes. It will 'visit' a web page, and the web page will detect and store the ip:&lt;br /&gt;&lt;br /&gt;HTTP_X_FORWARDED_FOR: 219.74.x.x&lt;br /&gt;HTTP_CLIENT_IP:&lt;br /&gt;REMOTE_ADDR:  165.21.x.x &lt;hr size="1"&gt;  (January 29, 2007, 9:40 am)&lt;br /&gt;&lt;br /&gt;The annoying part is that I receive a lot of mail, and it turns out that mailing can be disabled by appending &gt; /dev/null:&lt;br /&gt;&lt;br /&gt;*/20 * * * * curl http://jack.asprise.net/private.php?update=1 &lt;span style="font-weight: bold;"&gt;&gt; /dev/null&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;According to &lt;a href="http://builder.com.com/5100-6372-5285858-2.html"&gt;this article&lt;/a&gt;, "&lt;span class="contentText"&gt;Normally, the output generated by every command in the system crontab is automatically mailed to the system administrator (or, in the case of a user crontab, to the user who owns it). If you have a lot of crontab entries, this is a quick way of getting snowed under with e-mail. To avoid this, you can redirect the output of the command/script in the crontab to the system bitbucket /dev/null with the redirection operator".&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/22667616-9089695882638338710?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/9089695882638338710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=9089695882638338710' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/9089695882638338710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/9089695882638338710'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2007/01/cron-tips-no-mail-log.html' title='Cron tips - No mail log'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-3203396978144700036</id><published>2007-01-25T16:15:00.000+08:00</published><updated>2007-01-25T17:20:32.146+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='package'/><category scheme='http://www.blogger.com/atom/ns#' term='install'/><category scheme='http://www.blogger.com/atom/ns#' term='gcc4'/><category scheme='http://www.blogger.com/atom/ns#' term='gcc'/><category scheme='http://www.blogger.com/atom/ns#' term='fink'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='terminal'/><title type='text'>Install software Fink on Mac OS X using Terminal/command; Install GCC4 with Fink</title><content type='html'>&lt;span style="font-style: italic; color: rgb(102, 102, 102);"&gt;First mount the disk image, this command reports back it's path in the /Volumes directory:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;$ hdiutil attach ./file.dmg &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;$ cd /Volumes/SomeVolume&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 102);"&gt;  install the software on the main (boot) partition&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;$ su&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;# installer -pkg ./XcodeTools.mpkg -target /&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 102);"&gt;When you're done with it, either drag it to the trash as usual, or you can type:&lt;/span&gt;&lt;br /&gt;$ hdiutil detach /Volumes/SomeVolume&lt;br /&gt;&lt;br /&gt;I use the above commands to install Fink, then I use the following commands to install GCC4 through Fink:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 51);font-family:georgia;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;apple:~ root# fink install gcc4&lt;/span&gt;&lt;br /&gt;Information about 2131 packages read in 2 seconds.&lt;br /&gt;&lt;br /&gt;WARNING: You are using a version of gcc which is known to produce incorrect output from C++ code&lt;br /&gt;under certain circumstances.&lt;br /&gt;&lt;br /&gt;For information about upgrading, see the Fink web site.&lt;br /&gt;&lt;br /&gt;The following package will be installed or updated:&lt;br /&gt;gcc4&lt;br /&gt;The following 3 additional packages will be installed:&lt;br /&gt;gcc4-shlibs gmp-shlibs odcctools&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Do you want to continue? [Y/n] Y&lt;/span&gt;&lt;br /&gt;/sw/bin/apt-get -q --ignore-breakage --download-only install gcc4=1:4.0.0-1&lt;br /&gt;Reading Package Lists...&lt;br /&gt;Building Dependency Tree...&lt;br /&gt;The following NEW packages will be installed:&lt;br /&gt;gcc4&lt;br /&gt;0 packages upgraded, 1 newly installed, 0 to remove and 7  not upgraded.&lt;br /&gt;Need to get 38.0MB of archives. After unpacking 136MB will be used.&lt;br /&gt;Get:1 http://bindist.finkmirrors.net 10.3/release/main gcc4 1:4.0.0-1 [38.0MB]&lt;br /&gt;Fetched 38.0MB in 10m29s (60.3kB/s)&lt;br /&gt;Download complete and in download only mode&lt;br /&gt;/sw/bin/apt-get -q --ignore-breakage --download-only install gcc4-shlibs=1:4.0.0-1&lt;br /&gt;Reading Package Lists...&lt;br /&gt;Building Dependency Tree...&lt;br /&gt;The following NEW packages will be installed:&lt;br /&gt;gcc4-shlibs&lt;br /&gt;0 packages upgraded, 1 newly installed, 0 to remove and 7  not upgraded.&lt;br /&gt;Need to get 1721kB of archives. After unpacking 8999kB will be used.&lt;br /&gt;Get:1 http://bindist.finkmirrors.net 10.3/release/main gcc4-shlibs 1:4.0.0-1 [1721kB]&lt;br /&gt;Fetched 1721kB in 45s (37.8kB/s)&lt;br /&gt;Download complete and in download only mode&lt;br /&gt;/sw/bin/apt-get -q --ignore-breakage --download-only install gmp-shlibs=4.1.3-11&lt;br /&gt;Reading Package Lists...&lt;br /&gt;Building Dependency Tree...&lt;br /&gt;The following NEW packages will be installed:&lt;br /&gt;gmp-shlibs&lt;br /&gt;0 packages upgraded, 1 newly installed, 0 to remove and 7  not upgraded.&lt;br /&gt;Need to get 764kB of archives. After unpacking 2912kB will be used.&lt;br /&gt;Get:1 http://bindist.finkmirrors.net 10.3/release/main gmp-shlibs 4.1.3-11 [764kB]&lt;br /&gt;Fetched 764kB in 14s (54.1kB/s)&lt;br /&gt;Download complete and in download only mode&lt;br /&gt;/sw/bin/apt-get -q --ignore-breakage --download-only install odcctools=528-20050308&lt;br /&gt;Reading Package Lists...&lt;br /&gt;Building Dependency Tree...&lt;br /&gt;The following NEW packages will be installed:&lt;br /&gt;odcctools&lt;br /&gt;0 packages upgraded, 1 newly installed, 0 to remove and 7  not upgraded.&lt;br /&gt;Need to get 2799kB of archives. After unpacking 8815kB will be used.&lt;br /&gt;Get:1 http://bindist.finkmirrors.net 10.3/release/main odcctools 528-20050308 [2799kB]&lt;br /&gt;Fetched 2799kB in 1m2s (44.9kB/s)&lt;br /&gt;Download complete and in download only mode&lt;br /&gt;dpkg -i /sw/var/cache/apt/archives/gmp-shlibs_4.1.3-11_darwin-powerpc.deb&lt;br /&gt;Selecting previously deselected package gmp-shlibs.&lt;br /&gt;(Reading database ... 4131 files and directories currently installed.)&lt;br /&gt;Unpacking gmp-shlibs (from .../gmp-shlibs_4.1.3-11_darwin-powerpc.deb) ...&lt;br /&gt;Setting up gmp-shlibs (4.1.3-11) ...&lt;br /&gt;dpkg -i /sw/var/cache/apt/archives/odcctools_528-20050308_darwin-powerpc.deb&lt;br /&gt;Selecting previously deselected package odcctools.&lt;br /&gt;(Reading database ... 4147 files and directories currently installed.)&lt;br /&gt;Unpacking odcctools (from .../odcctools_528-20050308_darwin-powerpc.deb) ...&lt;br /&gt;Setting up odcctools (528-20050308) ...&lt;br /&gt;&lt;br /&gt;dpkg -i /sw/var/cache/apt/archives/gcc4_1%3a4.0.0-1_darwin-powerpc.deb /sw/var/cache/apt/archives/gcc4-shlibs_1%3a4.0.0-1_darwin-powerpc.deb&lt;br /&gt;Selecting previously deselected package gcc4.&lt;br /&gt;(Reading database ... 4209 files and directories currently installed.)&lt;br /&gt;Unpacking gcc4 (from .../gcc4_1%3a4.0.0-1_darwin-powerpc.deb) ...&lt;br /&gt;Selecting previously deselected package gcc4-shlibs.&lt;br /&gt;Unpacking gcc4-shlibs (from .../gcc4-shlibs_1%3a4.0.0-1_darwin-powerpc.deb) ...&lt;br /&gt;Setting up gcc4-shlibs (4.0.0-1) ...&lt;br /&gt;&lt;br /&gt;Setting up gcc4 (4.0.0-1) ...&lt;br /&gt;&lt;br /&gt;apple:~ root#&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;apple:~ root# gcc-4 -v&lt;/span&gt;&lt;br /&gt;Using built-in specs.&lt;br /&gt;Target: powerpc-apple-darwin7&lt;br /&gt;Configured with: ../configure --prefix=/sw --prefix=/sw/lib/gcc4 --enable-languages=c,c++,f95,objc --infodir=/share/info --with-gmp=/sw --with-included-gettext --host=powerpc-apple-darwin7 --with-as=/sw/lib/odcctools/bin/as --with-ld=/sw/lib/odcctools/bin/ld&lt;br /&gt;Thread model: posix&lt;br /&gt;gcc version 4.0.0&lt;br /&gt;apple:~ root# g++&lt;br /&gt;g++      g++-3.3  g++-4   &lt;br /&gt;apple:~ root# g++&lt;br /&gt;g++      g++-3.3  g++-4   &lt;br /&gt;apple:~ root# g++-4&lt;br /&gt;g++-4: no input files&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;apple:~ root# g++-4 -v&lt;/span&gt;&lt;br /&gt;Using built-in specs.&lt;br /&gt;Target: powerpc-apple-darwin7&lt;br /&gt;Configured with: ../configure --prefix=/sw --prefix=/sw/lib/gcc4 --enable-languages=c,c++,f95,objc --infodir=/share/info --with-gmp=/sw --with-included-gettext --host=powerpc-apple-darwin7 --with-as=/sw/lib/odcctools/bin/as --with-ld=/sw/lib/odcctools/bin/ld&lt;br /&gt;Thread model: posix&lt;br /&gt;gcc version 4.0.0&lt;br /&gt;apple:~ root#&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/22667616-3203396978144700036?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/3203396978144700036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=3203396978144700036' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/3203396978144700036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/3203396978144700036'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2007/01/install-software-on-mac-os-x-using.html' title='Install software Fink on Mac OS X using Terminal/command; Install GCC4 with Fink'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-115021941173896127</id><published>2006-06-14T01:22:00.000+08:00</published><updated>2006-06-14T01:25:40.386+08:00</updated><title type='text'>Cron</title><content type='html'>&lt;pre&gt;&lt;u&gt;&lt;b&gt;Cron&lt;br /&gt;&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;This file is an introduction to cron, it covers the basics of what cron does,&lt;br /&gt;and how to use it.&lt;br /&gt;&lt;u&gt;&lt;b&gt;&lt;br /&gt;What is cron?&lt;br /&gt;&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;Cron is the name of program that enables unix users to execute commands or&lt;br /&gt;scripts (groups of commands) automatically at a specified time/date. It is&lt;br /&gt;normally used for sys admin commands, like &lt;i&gt;makewhatis&lt;/i&gt;, which builds a&lt;br /&gt;search database for the &lt;i&gt;man -k&lt;/i&gt; command, or for running a backup script,&lt;br /&gt;but can be used for anything. A common use for it today is connecting to&lt;br /&gt;the internet and downloading your email.&lt;br /&gt;&lt;br /&gt;This file will look at Vixie Cron, a version of cron authored by Paul Vixie.&lt;br /&gt;&lt;u&gt;&lt;b&gt;&lt;br /&gt;How to start Cron&lt;br /&gt;&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;Cron is a daemon, which means that it only needs to be started once, and will&lt;br /&gt;lay dormant until it is required. A Web server is a daemon, it stays dormant&lt;br /&gt;until it gets asked for a web page. The cron daemon, or &lt;i&gt;crond&lt;/i&gt;, stays dormant&lt;br /&gt;until a time specified in one of the config files, or &lt;i&gt;crontabs&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;On most Linux distributions crond is automatically installed and entered into&lt;br /&gt;the start up scripts. To find out if it's running do the following:&lt;br /&gt;&lt;b&gt;&lt;br /&gt;cog@pingu $ ps aux | grep crond&lt;br /&gt;root       311  0.0  0.7  1284  112 ?        S    Dec24   0:00 crond&lt;br /&gt;cog       8606  4.0  2.6  1148  388 tty2     S    12:47   0:00 grep crond&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;The top line shows that crond is running, the bottom line is the search&lt;br /&gt;we just run.&lt;br /&gt;&lt;br /&gt;If it's not running then either you killed it since the last time you rebooted,&lt;br /&gt;or it wasn't started.&lt;br /&gt;&lt;br /&gt;To start it, just add the line &lt;i&gt;crond&lt;/i&gt; to one of your start up scripts. The&lt;br /&gt;process automatically goes into the back ground, so you don't have to force&lt;br /&gt;it with &lt;i&gt;&amp;&lt;/i&gt;. Cron will be started next time you reboot. To run it without&lt;br /&gt;rebooting, just type &lt;i&gt;crond&lt;/i&gt; as root:&lt;br /&gt;&lt;b&gt;&lt;br /&gt;root@pingu # crond&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;With lots of daemons, (e.g. httpd and syslogd) they need to be restarted&lt;br /&gt;after the config files have been changed so that the program has a chance&lt;br /&gt;to reload them. Vixie Cron will automatically reload the files after they&lt;br /&gt;have been edited with the &lt;i&gt;crontab&lt;/i&gt; command. Some cron versions reload the&lt;br /&gt;files every minute, and some require restarting, but Vixie Cron just loads&lt;br /&gt;the files if they have changed.&lt;br /&gt;&lt;u&gt;&lt;b&gt;&lt;br /&gt;Using cron&lt;br /&gt;&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;There are a few different ways to use cron (surprise, surprise).&lt;br /&gt;&lt;br /&gt;In the &lt;i&gt;/etc&lt;/i&gt; directory you will probably find some sub directories called&lt;br /&gt;'&lt;i&gt;cron.hourly&lt;/i&gt;', '&lt;i&gt;cron.daily&lt;/i&gt;', '&lt;i&gt;cron.weekly&lt;/i&gt;' and '&lt;i&gt;cron.monthly&lt;/i&gt;'. If you place&lt;br /&gt;a script into one of those directories it will be run either hourly, daily,&lt;br /&gt;weekly or monthly, depending on the name of the directory.&lt;br /&gt;&lt;br /&gt;If you want more flexibility than this, you can edit a crontab (the name&lt;br /&gt;for cron's config files). The main config file is normally &lt;i&gt;/etc/crontab&lt;/i&gt;.&lt;br /&gt;On a default RedHat install, the crontab will look something like this:&lt;br /&gt;&lt;b&gt;&lt;br /&gt;root@pingu # cat /etc/crontab&lt;br /&gt;SHELL=/bin/bash&lt;br /&gt;PATH=/sbin:/bin:/usr/sbin:/usr/bin&lt;br /&gt;MAILTO=root&lt;br /&gt;HOME=/&lt;br /&gt;&lt;br /&gt;# run-parts&lt;br /&gt;01 * * * * root run-parts /etc/cron.hourly&lt;br /&gt;02 4 * * * root run-parts /etc/cron.daily&lt;br /&gt;22 4 * * 0 root run-parts /etc/cron.weekly&lt;br /&gt;42 4 1 * * root run-parts /etc/cron.monthly&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;The first part is almost self explanatory; it sets the variables for cron.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;SHELL&lt;/i&gt; is the 'shell' cron runs under. If unspecified, it will default to&lt;br /&gt;the entry in the &lt;i&gt;/etc/passwd&lt;/i&gt; file.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;PATH&lt;/i&gt; contains the directories which will be in the search path for cron&lt;br /&gt;e.g if you've got a program 'foo' in the directory /usr/cog/bin, it might&lt;br /&gt;be worth adding /usr/cog/bin to the path, as it will stop you having to use&lt;br /&gt;the full path to 'foo' every time you want to call it.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;MAILTO&lt;/i&gt; is who gets mailed the output of each command. If a command cron is&lt;br /&gt;running has output (e.g. status reports, or errors), cron will email the output&lt;br /&gt;to whoever is specified in this variable. If no one if specified, then the&lt;br /&gt;output will be mailed to the owner of the process that produced the output.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;HOME&lt;/i&gt; is the home directory that is used for cron. If unspecified, it will&lt;br /&gt;default to the entry in the &lt;i&gt;/etc/passwd&lt;/i&gt; file.&lt;br /&gt;&lt;br /&gt;Now for the more complicated second part of a crontab file.&lt;br /&gt;An entry in cron is made up of a series of fields, much like the /etc/passwd&lt;br /&gt;file is, but in the crontab they are separated by a space. There are normally&lt;br /&gt;seven fields in one entry. The fields are:&lt;br /&gt;&lt;b&gt;&lt;br /&gt;minute hour dom month dow user cmd&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;i&gt;minute&lt;/i&gt; This controls what minute of the hour the command will run on,&lt;br /&gt;  and is between '0' and '59'&lt;br /&gt;&lt;i&gt;hour&lt;/i&gt; This controls what hour the command will run on, and is specified in&lt;br /&gt;     the 24 hour clock, values must be between 0 and 23 (0 is midnight)&lt;br /&gt;&lt;i&gt;dom&lt;/i&gt; This is the Day of Month, that you want the command run on, e.g. to&lt;br /&gt;  run a command on the 19th of each month, the dom would be 19.&lt;br /&gt;&lt;i&gt;month&lt;/i&gt; This is the month a specified command will run on, it may be specified&lt;br /&gt;  numerically (0-12), or as the name of the month (e.g. May)&lt;br /&gt;&lt;i&gt;dow&lt;/i&gt; This is the Day of Week that you want a command to be run on, it can&lt;br /&gt;  also be numeric (0-7) or as the name of the day (e.g. sun).&lt;br /&gt;&lt;i&gt;user&lt;/i&gt; This is the user who runs the command.&lt;br /&gt;&lt;i&gt;cmd&lt;/i&gt; This is the command that you want run. This field may contain&lt;br /&gt;  multiple words or spaces.&lt;br /&gt;&lt;br /&gt;If you don't wish to specify a value for a field, just place a &lt;i&gt;*&lt;/i&gt; in the&lt;br /&gt;field.&lt;br /&gt;&lt;br /&gt;e.g.&lt;b&gt;&lt;br /&gt;01 * * * * root echo "This command is run at one min past every hour"&lt;br /&gt;17 8 * * * root echo "This command is run daily at 8:17 am"&lt;br /&gt;17 20 * * * root echo "This command is run daily at 8:17 pm"&lt;br /&gt;00 4 * * 0 root echo "This command is run at 4 am every Sunday"&lt;br /&gt;* 4 * * Sun root echo "So is this"&lt;br /&gt;42 4 1 * * root echo "This command is run 4:42 am every 1st of the month"&lt;br /&gt;01 * 19 07 * root echo "This command is run hourly on the 19th of July"&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Notes:&lt;br /&gt;&lt;br /&gt;Under dow 0 and 7 are both Sunday.&lt;br /&gt;&lt;br /&gt;If both the dom and dow are specified, the command will be executed when&lt;br /&gt;either of the events happen.&lt;br /&gt;e.g.&lt;b&gt;&lt;br /&gt;* 12 16 * Mon root cmd&lt;/b&gt;&lt;br /&gt;Will run cmd at midday every Monday and every 16th, and will produce the&lt;br /&gt;same result as both of these entries put together would:&lt;br /&gt;&lt;b&gt;* 12 16 * * root cmd&lt;br /&gt;* 12 * * Mon root cmd&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Vixie Cron also accepts lists in the fields. Lists can be in the form, 1,2,3&lt;br /&gt;(meaning 1 and 2 and 3) or 1-3 (also meaning 1 and 2 and 3).&lt;br /&gt;e.g.&lt;br /&gt;&lt;b&gt;59 11 * * 1,2,3,4,5 root backup.sh&lt;/b&gt;&lt;br /&gt;Will run backup.sh at 11:59 Monday, Tuesday, Wednesday, Thursday and Friday,&lt;br /&gt;as will:&lt;br /&gt;&lt;b&gt;59 11 * * 1-5 root backup.sh &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Cron also supports 'step' values.&lt;br /&gt;A value of &lt;i&gt;*/2&lt;/i&gt; in the dom field would mean the command runs every two days&lt;br /&gt;and likewise, &lt;i&gt;*/5&lt;/i&gt; in the hours field would mean the command runs every&lt;br /&gt;5 hours.&lt;br /&gt;e.g.&lt;br /&gt;&lt;b&gt;* 12 10-16/2 * * root backup.sh&lt;/b&gt;&lt;br /&gt;is the same as:&lt;br /&gt;&lt;b&gt;* 12 10,12,14,16 * * root backup.sh&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;*/15 9-17 * * * root connection.test&lt;/b&gt;&lt;br /&gt;Will run connection.test every 15 mins between the hours or 9am and 5pm&lt;br /&gt;&lt;br /&gt;Lists can also be combined with each other, or with steps:&lt;br /&gt;&lt;b&gt;* 12 1-15,17,20-25 * * root cmd&lt;/b&gt;&lt;br /&gt;Will run cmd every midday between the 1st and the 15th as well as the 20th&lt;br /&gt;and 25th (inclusive) and also on the 17th of every month.&lt;br /&gt;&lt;b&gt;* 12 10-16/2 * * root backup.sh&lt;/b&gt;&lt;br /&gt;is the same as:&lt;br /&gt;&lt;b&gt;* 12 10,12,14,16 * * root backup.sh&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;When using the names of weekdays or months, it isn't case sensitive, but only&lt;br /&gt;the first three letters should be used, e.g. Mon, sun or Mar, jul.&lt;br /&gt;&lt;br /&gt;Comments are allowed in crontabs, but they must be preceded with a '#', and&lt;br /&gt;must be on a line by them self.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;&lt;br /&gt;Multiuser cron&lt;br /&gt;&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;As Unix is a multiuser OS, some of the apps have to be able to support&lt;br /&gt;multiple users, cron is one of these. Each user can have their own crontab&lt;br /&gt;file, which can be created/edited/removed by the command &lt;i&gt;crontab&lt;/i&gt;. This&lt;br /&gt;command creates an individual crontab file and although this is a text file,&lt;br /&gt;as the &lt;i&gt;/etc/crontab&lt;/i&gt; is, it shouldn't be edited directly. The crontab file is&lt;br /&gt;often stored in &lt;i&gt;/var/spool/cron/crontabs/&lt;user&gt;&lt;/user&gt;&lt;/i&gt; (Unix/Slackware/*BSD),&lt;br /&gt;&lt;i&gt;/var/spool/cron/&lt;user&gt;&lt;/user&gt;&lt;/i&gt; (RedHat) or &lt;i&gt;/var/cron/tabs/&lt;user&gt;&lt;/user&gt;&lt;/i&gt; (SuSE),&lt;br /&gt;but might be kept elsewhere depending on what Un*x flavor you're running.&lt;br /&gt;&lt;br /&gt;To edit (or create) your crontab file, use the command &lt;i&gt;crontab -e&lt;/i&gt;, and this&lt;br /&gt;will load up the editor specified in the environment variables &lt;i&gt;EDITOR&lt;/i&gt; or&lt;br /&gt;&lt;i&gt;VISUAL&lt;/i&gt;, to change the editor invoked on Bourne-compliant shells, try:&lt;br /&gt;&lt;b&gt;cog@pingu $ export EDITOR=vi&lt;/b&gt;&lt;br /&gt;On C shells:&lt;br /&gt;&lt;b&gt;cog@pingu $ setenv EDITOR vi&lt;/b&gt;&lt;br /&gt;You can of course substitute vi for the text editor of your choice.&lt;br /&gt;&lt;br /&gt;Your own personal crontab follows exactly the same format as the main&lt;br /&gt;&lt;i&gt;/etc/crontab&lt;/i&gt; file does, except that you need not specify the &lt;i&gt;MAILTO&lt;/i&gt;&lt;br /&gt;variable, as this entry defaults to the process owner, so you would be mailed&lt;br /&gt;the output anyway, but if you so wish, this variable can be specified.&lt;br /&gt;You also need not have the user field in the crontab entries. e.g.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;min hr dom month dow cmd&lt;br /&gt;&lt;/b&gt;&lt;span style="font-family:mon;"&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.unixgeeks.org/security/newbie/unix/cron-1.html"&gt;http://www.unixgeeks.org/security/newbie/unix/cron-1.html&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;/i&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-115021941173896127?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/115021941173896127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=115021941173896127' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/115021941173896127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/115021941173896127'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2006/06/cron.html' title='Cron'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-114369090402464778</id><published>2006-03-30T11:55:00.000+08:00</published><updated>2006-03-30T11:55:04.273+08:00</updated><title type='text'>BACKUP - Now It's Easy to Back Up Data on a Network - New York Times</title><content type='html'>&lt;a href="http://www.nytimes.com/2006/03/30/technology/circuits/30basics.html?ei=5088&amp;amp;en=e92387da6dedfda4&amp;ex=1301374800&amp;amp;partner=rssnyt&amp;emc=rss&amp;amp;pagewanted=all"&gt;Now It's Easy to Back Up Data on a Network - New York Times&lt;/a&gt;:&lt;br /&gt;Backing up files, by definition, requires a second hard drive. The biggest risk of data loss is disk failure, yet it never hurts to consider the possibility of theft, fire or physical damage either. It pays, then, to have an external second drive that you keep apart from your computer.&lt;br /&gt;&lt;br /&gt;Called local external drives, these hook up directly to your computer by a U.S.B. or FireWire connection. They have been around for years at very affordable prices. Networked drives have also been in existence for a long time, found mainly in offices. But now drives linked to a network router by an Ethernet connection are finally ready for the home.&lt;br /&gt;&lt;br /&gt;Like multiple-TV homes before them, many homes now have two or more PC's. With high-speed Internet connections widespread, home networking routers no longer seem like alien technological wonders (though their alien roots still show on occasion when they misbehave). A networked drive plugged into a router can serve multiple computers at the same time. Many can even work with Macs and Windows PC's simultaneously.&lt;br /&gt;&lt;br /&gt;Networked-drive storage systems typically include automatic backup software. Many have a U.S.B. port for connecting a printer, so that everyone on the network can share it. And when it comes to those iTunes purchases, there's an added bonus: the drives don't just back up your entertainment, but also give multiple computers access to the same files. Downloaded music, the latest family snapshots and even home videos uploaded from the camcorder are available to anyone in the house, &lt;span style="color:#993399;"&gt;regardless of which computers are turned on, and without the need to synchronize data in some overly technical way.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Out of a dozen or so networked storage systems designed for home use, I tested four. Three of the biggest hard-drive manufacturers offer stand-alone networked drives: Shared Storage by &lt;a title="Maxtor" href="http://www.nytimes.com/redirect/marketwatch/redirect.ctx?MW=http://custom.marketwatch.com/custom/nyt-com/html-companyprofile.asp&amp;symb=MXO"&gt;Maxtor&lt;/a&gt; (list price $280 to $500), Mirra from Seagate ($280 to $500) and NetCenter by &lt;a title="Western Digital" href="http://www.nytimes.com/redirect/marketwatch/redirect.ctx?MW=http://custom.marketwatch.com/custom/nyt-com/html-companyprofile.asp&amp;amp;symb=WDC"&gt;Western Digital&lt;/a&gt; ($210 to $330). Last year, the network-hardware maker Netgear introduced the Storage Central SC101 ($130), a networked housing built to support two standard PC drives (sold separately or bundled, at extra cost, with the device).&lt;br /&gt;&lt;br /&gt;The Shared Storage by Maxtor was my starting point, and it turned out to be appropriate. The single-drive 500-gigabyte unit I tested is easy to plug in and configure. Its bundled automatic backup software is noticeably unsophisticated, but it works.&lt;span style="color:#cc33cc;"&gt; I could easily select the particular folders I wanted to protect, and schedule times when their contents would be copied over to the drive.&lt;/span&gt;&lt;span style="color:#993399;"&gt; &lt;/span&gt;It has U.S.B. ports for sharing a printer or even adding additional U.S.B. hard drives. &lt;span style="color:#cc33cc;"&gt;Most important, its software works on both Macs and Windows PC's.&lt;/span&gt; My Mac's right-brain files (music and photos) and my PC's left-brain files (Word docs, spreadsheets, etc.) could be backed up together on one hefty drive."&lt;br /&gt;&lt;br /&gt;After configuring the Mirra software to back up a few folders on my hard drive, I grabbed another computer that has a separate connection to the Internet. I went to &lt;a href="http://mirra.com/" target="_"&gt;Mirra.com&lt;/a&gt; and logged in using a name I had provided during setup. Sure enough, the files I was moving to the Mirra were already visible online. I could browse folders full of pictures in thumbnail view, and could download any file to the computer.&lt;br /&gt;&lt;br /&gt;Whichever approach you choose, make sure you anticipate your capacity requirement. Music, photos and video can demand plenty of space, especially if you have to back up two or three computers' worth. Once you get the hang of it, you might keep all of your media files on a networked device. But then, of course, your backup drive will need a backup drive of its own. Surely you saw that coming.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://graphics8.nytimes.com/images/2006/03/29/technology/basics.span.jpg" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-114369090402464778?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/114369090402464778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=114369090402464778' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114369090402464778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114369090402464778'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2006/03/backup-now-its-easy-to-back-up-data-on.html' title='BACKUP - Now It&apos;s Easy to Back Up Data on a Network - New York Times'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-114368327744990655</id><published>2006-03-30T09:47:00.000+08:00</published><updated>2006-03-30T09:47:57.706+08:00</updated><title type='text'>JDIC - JDesktop Integration Components</title><content type='html'>&lt;a href="https://jdic.dev.java.net/documentation/index.html"&gt;jdic: JDIC Documentation&lt;/a&gt;: "JDIC API&lt;br /&gt;&lt;br /&gt;The JDIC API provides an interface from applications to the native desktop.&lt;br /&gt;API Documentation (javadoc): Browsable API specification. This documentation is also included in the JDIC download for offline viewing. The JDIC API contains four packages:&lt;br /&gt;&lt;br /&gt;org.jdesktop.jdic.init: Provides the initialization information for JDIC to set the environment variables or initialize the set up for native libraries and executable files.&lt;br /&gt;&lt;br /&gt;org.jdesktop.jdic.browser: Provides an AWT component to enable the &lt;span style="color:#cc33cc;"&gt;&lt;strong&gt;embedding of the desktop's web browsing component into Java applications&lt;/strong&gt;&lt;/span&gt; and applets. The API supports URL navigation, a basic history mechanism, and progress notification.&lt;br /&gt;&lt;br /&gt;org.jdesktop.jdic.desktop: A set of APIs to &lt;span style="color:#cc33cc;"&gt;launch native applications, including the document viewer applications associated with a particular file type&lt;/span&gt;, the system browser, and the system mailer.&lt;br /&gt;&lt;br /&gt;org.jdesktop.jdic.filetypes: A set of APIs to &lt;span style="color:#cc33cc;"&gt;associate document viewer applications with file types&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;org.jdesktop.jdic.tray: A set of APIs to to create &lt;span style="color:#cc33cc;"&gt;tray icons on the desktop&lt;/span&gt;."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-114368327744990655?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/114368327744990655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=114368327744990655' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114368327744990655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114368327744990655'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2006/03/jdic-jdesktop-integration-components.html' title='JDIC - JDesktop Integration Components'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-114345144857234348</id><published>2006-03-27T17:24:00.000+08:00</published><updated>2006-03-27T17:24:16.683+08:00</updated><title type='text'>thinking from the user in</title><content type='html'>"It takes a lot more work to understand the other person than it takes to understand you. You might say, 'I have these two things together so I will let the user�the person using the API�manipulate them.' But that user didn't say, 'Hey, I want to manipulate these two data structures!' Often the user is saying, 'I want to get this result.' If users could get a result without manipulating the data structures, they'd be happy as clams. If you can make it more natural for them to get that result, the fact that you have to go through 10 times as much work to access those data structures is good; it means you are providing value. Many people are much more likely to think about what they have in hand and what they can do. They think from the implementation out, instead of thinking from the user in. "&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-114345144857234348?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/114345144857234348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=114345144857234348' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114345144857234348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114345144857234348'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2006/03/thinking-from-user-in.html' title='thinking from the user in'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-114283608950716599</id><published>2006-03-20T14:28:00.000+08:00</published><updated>2006-03-20T14:28:09.733+08:00</updated><title type='text'>Get Large File Icons</title><content type='html'>&lt;a href="http://www.onjava.com/pub/a/onjava/2005/08/10/swinghacks.html?page=2"&gt;ONJava.com -- Hacking Swing with Undocumented Classes and Properties&lt;/a&gt;: "Get Large File Icons&lt;br /&gt;Not to leave Windows lonely, here is an undocumented class that will let you obtain large desktop icons and other file information. The FileSystemView only provides access to file icons of a 'default' size, which usually means 16 by 16 pixels. If you look at your operating system desktop, however, you may see icons that are much bigger, with more detail. There is no standardized way of getting to the larger icons, but on &lt;strong&gt;Windows&lt;/strong&gt; you can use the hidden class called sun.awt.shell.ShellFolder to retrieve larger (32 by 32) desktop file icons. This class is &lt;strong&gt;only available in Sun's JVM&lt;/strong&gt;, so it won't work with other vendors, or on other platforms.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The code below will take a filename and show the file's large icon in a window.&lt;br /&gt;&lt;br /&gt;public class LargeIconTest {&lt;br /&gt;&lt;br /&gt;public static void main(String[] args) throws Exception {&lt;br /&gt;// Create a File instance of an existing file&lt;br /&gt;File file = new File(args[0]);&lt;br /&gt;&lt;br /&gt;// Get metadata and create an icon&lt;br /&gt;sun.awt.shell.ShellFolder sf =&lt;br /&gt;sun.awt.shell.ShellFolder.getShellFolder(file);&lt;br /&gt;Icon icon = new ImageIcon(sf.getIcon(true));&lt;br /&gt;System.out.println('type = ' + sf.getFolderType());&lt;br /&gt;&lt;br /&gt;// show the icon&lt;br /&gt;JLabel label = new JLabel(icon);&lt;br /&gt;JFrame frame = new JFrame();&lt;br /&gt;frame.getContentPane().add(label);&lt;br /&gt;frame.pack();&lt;br /&gt;frame.show();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;ShellFolder is a wrapper for the metadata of the selected file. From this object, you can retrieve both the icon and a text description of the file's type. If you run this on an MP3 file, it might print the string "type = MPEG Layer 3 Audio" and show a 32 by 32 pixel iTunes MP3 icon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-114283608950716599?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/114283608950716599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=114283608950716599' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114283608950716599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114283608950716599'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2006/03/get-large-file-icons.html' title='Get Large File Icons'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-114188706435270757</id><published>2006-03-09T14:51:00.000+08:00</published><updated>2006-03-09T14:51:04.496+08:00</updated><title type='text'>Retroweaver - Develop With 1.5 And Deploy With 1.4!</title><content type='html'>&lt;a href="http://retroweaver.sourceforge.net/"&gt;Retroweaver&lt;/a&gt;: "Retroweaver: Use the language of the future, now.&lt;br /&gt;&lt;br /&gt;Retroweaver is a bytecode weaver that enables you to take advantage of the new Java 1.5 language features, while still retaining total binary compatability with 1.4 virtual machines. &lt;span style="color:#cc33cc;"&gt;Retroweaver operates by transforming Java class files compiled by a 1.5 compiler into version 1.4 class files which can then be run on any 1.4 virtual machine.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So, when your favorite vendor tells you that their application server won't be supporting JDK 1.5 until 2007, or your customers won't have JDK 1.5 for years to come, or your manager refuses to begin development on a beta JDK, put Retroweaver to work for you."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-114188706435270757?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/114188706435270757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=114188706435270757' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114188706435270757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114188706435270757'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2006/03/retroweaver-develop-with-15-and-deploy.html' title='Retroweaver - Develop With 1.5 And Deploy With 1.4!'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-114178996399247710</id><published>2006-03-08T11:52:00.000+08:00</published><updated>2006-03-08T11:52:44.146+08:00</updated><title type='text'>JAI create a tiff file - set resolution DPI</title><content type='html'>&lt;a href="http://forum.java.sun.com/thread.jspa?forumID=28&amp;threadID=691171"&gt;Java Forums - PLEASE HELP - JAI create a tiff file&lt;/a&gt;: "PLEASE HELP - JAI create a tiff file&lt;br /&gt;Author: George_Azzopardi Posts: 3 Registered: 12/19/04&lt;br /&gt;Dec 12, 2005 6:51 AM&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hi people,&lt;br /&gt;&lt;br /&gt;I am trying to reate a TIFF file compressed for a Fax Server. The resolution of such an image must be 200dpi by 100dpi as per server requirements.&lt;br /&gt;&lt;br /&gt;I am managing the create a tiff file with these requirements. However, since I am using a resolution of 200dpi by 100dpi, the final image is squashed vertically. The following is the code which I am using.&lt;br /&gt;&lt;br /&gt;// loading the image&lt;br /&gt;RenderedImage src = myCreateImage();&lt;br /&gt;// this is a proprietary method which returns a RenderedImage&lt;br /&gt;&lt;br /&gt;// Specifing the tompression Group&lt;br /&gt;TIFFEncodeParam param = new TIFFEncodeParam();&lt;br /&gt;param.setCompression(TIFFEncodeParam.COMPRESSION_GROUP4);&lt;br /&gt;&lt;br /&gt;//set the image resolution to 200 x 100&lt;br /&gt;TIFFField[] extras = new TIFFField[2];&lt;br /&gt;extras[0] = new TIFFField(282, TIFFField.TIFF_RATIONAL, 1, (Object)new long[][] {{(long)200, (long)1},{(long)0 ,(long)0}});&lt;br /&gt;extras[1] = new TIFFField(283, TIFFField.TIFF_RATIONAL, 1, (Object)new long[][] {{(long)100, (long)1},{(long)0 ,(long)0}});&lt;br /&gt;param.setExtraFields(extras);&lt;br /&gt;&lt;br /&gt;OutputStream outputStream = new FileOutputStream ('c:/test.tif');&lt;br /&gt;TIFFImageEncoder encoder = new TIFFImageEncoder (outputStream, param);&lt;br /&gt;encoder.encode(src);&lt;br /&gt;outputStream.close();&lt;br /&gt;outputStream = null;&lt;br /&gt;&lt;br /&gt;Any help would be highly appreciated&lt;br /&gt;&lt;br /&gt;Thanks &amp; Regards&lt;br /&gt;&lt;br /&gt;George Azzopardi&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Re: PLEASE HELP - JAI create a tiff f"&lt;br /&gt;&lt;br /&gt;Maybe it's because you're not setting the resolution unit (tag 296)Example:TIFFField[] extras = new TIFFField[3];extras[0] = new TIFFField(282,TIFFField.TIFF_RATIONAL, 1, (Object)new long[][] {{200,(long)1},{(long)0 ,(long)0}}); //xextras[1] = new TIFFField(283,TIFFField.TIFF_RATIONAL, 1, (Object)new long[][] {{100,(long)1},{(long)0 ,(long)0}}); //y //set resolution unit to inchesextras[2] = new TIFFField(296, TIFFField.TIFF_SHORT, 1, (Object) new char[] {2}); //2 for inches param.setExtraFields(extras);&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-114178996399247710?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/114178996399247710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=114178996399247710' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114178996399247710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114178996399247710'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2006/03/jai-create-tiff-file-set-resolution.html' title='JAI create a tiff file - set resolution DPI'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-114144513586833434</id><published>2006-03-04T12:05:00.000+08:00</published><updated>2006-03-04T12:05:36.076+08:00</updated><title type='text'>Jess, the Rule Engine for the Java Platform</title><content type='html'>&lt;a href="http://www.jessrules.com/jess/guidelines.shtml"&gt;Jess, the Rule Engine for the Java Platform&lt;/a&gt;: "&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#cc33cc;"&gt;&lt;strong&gt;Some Guidelines For Deciding Whether To Use A Rules Engine&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;Some Guidelines For Deciding Whether To Use A Rules Engine&lt;br /&gt;by George Rudolph&lt;br /&gt;Is your algorithm primarily compute-intensive or is there significant decision-making capability involved?&lt;br /&gt;If your basic algorithm is compute-intensive or a table-lookup, without much conditional branching or decision-making involved, then don't use a rules engine.&lt;br /&gt;If however, the algorithm involves significant conditional branching or decision-making, then consider using a rules engine.&lt;br /&gt;Once you've determined that your algorithm involves significant decision-making capability, you ought to be able to write some rules specifying the decisions that need to be made. Are the decisions that need to be made relatively simple, or potentially complex?&lt;br /&gt;If you find that you can't write the decision rules, for whatever reason, then stop here until you can, or use some other tool instead that will help you discover the rules you need. Put another way, if you can't state some rules, don't use a rules engine.&lt;br /&gt;If you have 2, or fewer, conditions in your rules (or, for example, a block with 2 nested if-statements or less), don't use a rules engine-it's probably overkill.&lt;br /&gt;If you have 3 or more conditions in your rules (or, for example, a block with 3 or more nested if-statements in pseudo-code), then consider using a rules engine.&lt;br /&gt;Once you've determined that the decisions are complex enough, is your algorithm basically static, or are the rules likely to change reasonably often over time?&lt;br /&gt;If the rules/logic are well-defined and static, then don't use a rules engine-you probably don't need the overhead or flexibility.&lt;br /&gt;If the rules are likely to change over time due to the nature of the application, then consider using a rules engine-the flexibility is worth the overhead.&lt;br /&gt;Once you've determined that rules may need to be flexible, are you going to maintain the code or finished product over time, or is this effort a one-shot effort?&lt;br /&gt;If the code is not going to be maintained over time, then don't use a rules engine-you probably won't gain any significant advantage from it.&lt;br /&gt;If the code is going to be maintained over time, consider using a rules engine-the ROI will be worth it (see question #6).&lt;br /&gt;Rules engines continue to get faster and faster, but some applications simply require every bit of speed and performance optimization you can reasonably give. Does your customer require a custom solution or do you need to hard-wire the algorithm for absolute high-end performance, or can the solution accommodate a rules engine?&lt;br /&gt;If you need to optimize for speed and memory, or your customer requires a custom solution, then don't use a rules engine.&lt;br /&gt;If the performance requirements will accommodate a rules engine solution, then consider using one.&lt;br /&gt;If you answered all the other questions appropriately, can the project/product line afford the overall cost of using a rules engine over the project/product lifecycle?&lt;br /&gt;There are a number of costs typically associated with using rules engine tools:&lt;br /&gt;Licensing fees for development and deployment of the engine&lt;br /&gt;Training developers and (if necessary) end-users (time and money)&lt;br /&gt;ROI (return on investment)-financial analysts have shown that you don't begin to break even monetarily on the typical investment in rules engine technology until at least 1 year after deployment to your customer. However, at that point, the flexibility and ease-of-maintenance begin to show significant returns.&lt;br /&gt;If the project schedule or product lifecycle can't accommodate the cost of a rules engine, in terms of time and money, then don't use one.&lt;br /&gt;If you can't afford to wait at least a year to break even and begin to see a significant ROI, don't use a rules engine.&lt;br /&gt;If you can't afford to train your developers and end-users, and you can't afford to hire a consultant, don't use a rules engine.&lt;br /&gt;If, however, your project/product lifecycle costs can accommodate the use of a rules engine, it would be well worth the investment, so use one.&lt;br /&gt;Additional NoteA rules engine tool can be very helpful during software development, regardless of other considerations:&lt;br /&gt;For simulation and prototyping.&lt;br /&gt;In cases where you find you may not really know or understand the rules you are trying to encode in your algorithm, a rules engine can provide a flexible way to encode and modify the rules over time as they are discovered.&lt;br /&gt;A rules engine architecture also provides a convenient structure for separating "business logic" from the rest of the system, aiding in the effort to clearly "separate concerns".&lt;br /&gt;Last modified: Mon Mar 17 07:07:15 EST 2003&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-114144513586833434?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/114144513586833434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=114144513586833434' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114144513586833434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114144513586833434'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2006/03/jess-rule-engine-for-java-platform.html' title='Jess, the Rule Engine for the Java Platform'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-114135276886780554</id><published>2006-03-03T10:26:00.000+08:00</published><updated>2006-03-03T10:26:08.933+08:00</updated><title type='text'>Java SE 6 First Impressions: A Desktop Winner - 2</title><content type='html'>&lt;a href="http://www.devx.com/Java/Article/30722/1954?pf=true"&gt;Java SE 6 First Impressions: A Desktop Winner&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;"&lt;span style="color:#cc33cc;"&gt;Splash screen support&lt;/span&gt;�Splash screens inform a user that an application is starting while he waits. Java SE 6 adds support for splash screens that can be displayed even before the JVM starts.&lt;br /&gt;&lt;br /&gt;Java Foundation Classes (JFC) and Swing Improvements:&lt;br /&gt;Java SE 6 leverages Windows APIs to both improve performance and ensure the Windows look-and-feel on current and future versions of Windows.&lt;br /&gt;It improves layout management to include customizable layout managers and includes other enhancements to simplify GUI component layout.&lt;br /&gt;It has vastly improved Swing drag-and-drop, making it customizable.&lt;br /&gt;True double-buffering provides quick, smooth graphic transitions.&lt;br /&gt;&lt;span style="color:#cc33cc;"&gt;System Tray Support&lt;/span&gt;�Two new classes, SystemTray and TrayIcon, in the java.awt package allow you to add icons, tool tips, and pop-up menus to the Windows or Gnome Linux system tray. The system tray is the desktop area shared by all applications, usually located in the lower-right corner. Actions and events allow your Java application to track mouse clicks on the items you place in the tray, and respond to those clicks. I have found this feature useful for my server applications as well. For instance, used with the Desktop API (see below), I now add an icon to the system tray to easily launch a browser for the application's administrative HTML page. Regardless of OS (Linux or Windows), I no longer need to recall the application's administrative port or URL�simply click the icon and the page appears.&lt;br /&gt;&lt;span style="color:#cc33cc;"&gt;Improved print support for JTable&lt;/span&gt;&lt;br /&gt;Java 2D enhancements�Improvements have been made to text display quality, especially on LCD monitors. Integration with the host desktop's &lt;span style="color:#cc33cc;"&gt;font anti-aliasing&lt;/span&gt; settings ensures consistent text rendering.&lt;br /&gt;The new java.awt.Desktop API—The new Java SE 6 Desktop package aims to make Java UI applications "first-class citizens." With this package, Java applications can &lt;span style="color:#cc33cc;"&gt;launch the default browser and email client, and integrate with common desktop applications &lt;/span&gt;(such as OpenOffice) to open, edit, and print files of specific types. The Desktop package offers this ability through action events (Desktop.Action) that you can integrate into your applications.&lt;br /&gt;Internationalization—Java SE 6 supports "plugability" for some locale-specific features, such as date formatting, Unicode text normalization, and resource bundles&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-114135276886780554?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/114135276886780554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=114135276886780554' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114135276886780554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114135276886780554'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2006/03/java-se-6-first-impressions-desktop_03.html' title='Java SE 6 First Impressions: A Desktop Winner - 2'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-114135252537499450</id><published>2006-03-03T10:22:00.000+08:00</published><updated>2006-03-03T10:22:05.540+08:00</updated><title type='text'>Java SE 6 First Impressions: A Desktop Winner</title><content type='html'>&lt;a href="http://www.devx.com/Java/Article/30722/1954?pf=true"&gt;Java SE 6 First Impressions: A Desktop Winner&lt;/a&gt;: "Developer Productivity&lt;br /&gt;&lt;br /&gt;The new &lt;span style="color:#cc33cc;"&gt;Java Compiler API&lt;/span&gt; allows Java source to be compiled from within a Java application. During compilation, the application has access to the library dependency information as formulated, along with any warnings, errors, and other messages that are generated. Although this feature did not seem like something I would use often, I quickly found new uses for it. For instance, I used it to quickly build the data-access layer for an application I had been building. The code I wrote generated and compiled the classes used to access the application's database tables. The end result was a JAR file that was generated, built, and deployed as part of the system's Ant scripts. The fact that the classes are compiled from within the application makes the code generation interactive�I can modify and build the classes iteratively.&lt;br /&gt;&lt;br /&gt;To enable Java scripting, Java SE 6 supports JSR 223, a &lt;span style="color:#cc33cc;"&gt;scripting framework&lt;/span&gt; that provides scripting language access to Java internals. You can locate scripting engines and invoke them to run scripts at runtime. The Scripting API allows you to provide Java support for the scripting language of your choice. In addition, the Web Scripting Framework allows script code to generate Web content within any Servlet container.&lt;br /&gt;&lt;br /&gt;For debugging, the &lt;span style="color:#cc33cc;"&gt;Java Platform Debugger (JPDA) &lt;/span&gt;has been enhanced to detect deadlocks and generate stack traces for monitor objects that are locked. In addition, Java SE 6 adds support to allow agents to attach to a running JVM for diagnostic purposes. "&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-114135252537499450?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/114135252537499450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=114135252537499450' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114135252537499450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114135252537499450'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2006/03/java-se-6-first-impressions-desktop.html' title='Java SE 6 First Impressions: A Desktop Winner'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-114110891468491640</id><published>2006-02-28T14:41:00.000+08:00</published><updated>2006-02-28T14:41:54.803+08:00</updated><title type='text'>Backport ot JSR 166 (java.util.concurrent) to Java 1.4</title><content type='html'>backport-util-concurrent&lt;br /&gt;Backport ot JSR 166 (java.util.concurrent) to Java 1.4&lt;br /&gt;maintained by Dawid Kurzyniec&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/index.php"&gt;backport-util-concurrent - Distributed Computing Laboratory, Emory University&lt;/a&gt;: "&lt;br /&gt;&lt;br /&gt;Overview&lt;br /&gt;This package is the backport of java.util.concurrent API, introduced in Java 5.0, to Java 1.4. The backport is based on public-domain sources from the JSR 166 CVS repository, the dl.util.concurrent package, and the Doug Lea's collections package. The backport is close to complete; unsupported functionality is limited to: 1) classes that rely on explicit JVM support and cannot be emulated at a satisfactory performance level, 2) some of the functions described in the original javadoc as 'designed primarily for use in monitoring in system state, not for synchronization control', or 3) functionality that would require development of substantial amount of new code.&lt;br /&gt;The purpose of this library is to enable gradual migration from Java 1.4 to 5.0: the library allows to develop concurrent applications for Java 1.4 that should work with Java 5.0 simply by changing "&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-114110891468491640?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/114110891468491640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=114110891468491640' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114110891468491640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114110891468491640'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2006/02/backport-ot-jsr-166-javautilconcurrent.html' title='Backport ot JSR 166 (java.util.concurrent) to Java 1.4'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-114059971672923004</id><published>2006-02-22T17:15:00.000+08:00</published><updated>2006-02-22T17:28:52.626+08:00</updated><title type='text'>Document Your Code Properly</title><content type='html'>Today when i was doing some research on thread pool implementation, I found that I implemented one back in the year 2003. Unfortunately, the classes are not documented properly. As a result, I do not know how to use them and i have no idea the limitations.&lt;br /&gt;&lt;br /&gt;So the moral of the story is that:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;&lt;strong&gt;Document Your Code Properly&lt;/strong&gt;&lt;/span&gt;, otherwise, you can never re-use it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-114059971672923004?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/114059971672923004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=114059971672923004' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114059971672923004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114059971672923004'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2006/02/document-your-code-properly.html' title='Document Your Code Properly'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-114057235346757552</id><published>2006-02-22T09:39:00.000+08:00</published><updated>2006-02-22T09:39:13.480+08:00</updated><title type='text'>Web Services Upend Old Ideas About the Little Guy's Role - New York Times</title><content type='html'>&lt;a href="http://www.nytimes.com/2006/02/21/business/businessspecial2/21growth.html?ei=5088&amp;amp;en=1c876b314e4786c5&amp;ex=1298178000&amp;amp;adxnnl=0&amp;partner=rssnyt&amp;amp;emc=rss&amp;adxnnlx=1140570530-CHTnsuOeKDFjKkeCYQsKaA&amp;amp;pagewanted=print"&gt;Web Services Upend Old Ideas About the Little Guy's Role - New York Times&lt;/a&gt;: "February 21, 2006&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;&lt;strong&gt;Web Services Upend Old Ideas About the Little Guy's Role&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;By &lt;a title="More Articles by Steve Lohr" href="http://topics.nytimes.com/top/reference/timestopics/people/l/steve_lohr/index.html?inline=nyt-per"&gt;STEVE LOHR&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The old story of technology in business was a trickle-down affair. From telephones to computers, big companies came first. They could afford the latest innovations, and they reaped the benefits of greater efficiency, increased sales and expansion into distant markets. As a technology spread and costs fell, small businesses joined the parade, though from the rear.&lt;br /&gt;Now that pattern is being challenged by a bottom-up revolution, one fueled by a second wave of Internet technologies like the search services from &lt;a title="Google" href="http://www.nytimes.com/redirect/marketwatch/redirect.ctx?MW=http://custom.marketwatch.com/custom/nyt-com/html-companyprofile.asp&amp;symb=GOOG"&gt;Google&lt;/a&gt;, &lt;a title="Yahoo" href="http://www.nytimes.com/redirect/marketwatch/redirect.ctx?MW=http://custom.marketwatch.com/custom/nyt-com/html-companyprofile.asp&amp;amp;symb=YHOO"&gt;Yahoo&lt;/a&gt; and &lt;a title="Microsoft" href="http://www.nytimes.com/redirect/marketwatch/redirect.ctx?MW=http://custom.marketwatch.com/custom/nyt-com/html-companyprofile.asp&amp;symb=MSFT"&gt;Microsoft&lt;/a&gt; and software delivered as a utilitylike service over the Web.&lt;br /&gt;The second-generation Internet technologies — combined with earlier tools like the Web itself and e-mail — are drastically reducing the cost of communicating, finding things and distributing and receiving services online. That means a cost leveling that puts small companies on equal footing with big ones, making it easier for upstarts to innovate, disrupt industries and even get big fast.&lt;br /&gt;The phenomenon is a big step in the democratization of information technology. Its imprint is evident well beyond business, in the social and cultural impact of everything from blogs to online role-playing games. Still, it seems that small businesses, and the marketplace they represent, will be affected the most in the overall economy. Long-held assumptions are suddenly under assault.&lt;br /&gt;Fortune Below 500&lt;br /&gt;One truism has been that while small businesses represent a huge market — companies with fewer than 500 employees, the government reports, account for half the nation's economic output and 60 to 80 percent of all new jobs — it is highly fragmented and hard to reach.&lt;br /&gt;So big companies typically shunned the small-business market, and Silicon Valley start-ups tended to sidestep it, instead devising business plans focused on either the consumer or the large-corporate market. But Salesforce.com, which supplies customer tracking and management software online, has shown how to create a thriving business by selling first to small businesses.&lt;br /&gt;"Our company was based on building momentum from the bottom up, and using the Web as we do drastically reduces the cost of sales and service," said Phill Robinson, senior vice president for marketing.&lt;br /&gt;Today, the company has more than 18,000 customers and sales of more than $300 million a year. Its only problem seems to be growing pains, as the company's network went down a couple of times in the last two months. Many start-ups are trying to follow in the footsteps of Salesforce by offering software as an online service to reach smaller companies.&lt;br /&gt;&lt;a title="I.B.M." href="http://www.nytimes.com/redirect/marketwatch/redirect.ctx?MW=http://custom.marketwatch.com/custom/nyt-com/html-companyprofile.asp&amp;amp;symb=IBM"&gt;I.B.M.&lt;/a&gt; makes its living catering to the costly needs of its Fortune 500 clientele. But last year, it began offering small businesses Web-based software services like filtering for e-mail spam and viruses, starting at less than $2 per employee a month.&lt;br /&gt;"I.B.M. could not afford to touch this market years ago," said James M. Corgel, general manager of services for small and medium-size businesses. "But as we automate more, we can afford to sell to the small-business market."&lt;br /&gt;Creating More Gazelles&lt;br /&gt;Students of small business have often noted that the most economically significant companies are the "gazelles," small businesses that become dynamic fast-growing companies. The new Web-based technologies could foster a proliferation of gazelles, stimulating job creation and wealth across the economy.&lt;br /&gt;"In principle, this should lower barriers to the entry and growth of innovative small enterprises," said Frederic M. Scherer, an economist and professor emeritus at the John F. Kennedy School of Government at Harvard University.&lt;br /&gt;That principle is being widely practiced these days. Take the example of Bella Pictures, a three-year-old business in San Francisco. Its goal is to transform the enterprise of wedding pictures from a local craft of mixed quality into a national business of consistently high quality and personalized service. It has grown rapidly, and last wedding season, May through October, Bella shot photographs at 1,300 weddings.&lt;br /&gt;Bella's 150 freelance photographers and 50 consultants in a dozen cities are linked in a virtual network. Every job, assignment, bride and mother-of-the-bride preference is entered into a Web-based customer relationship management program. Bella markets itself by buying keywords, like "wedding photography," on search engines like Google and Yahoo to bring customers to its Web site, &lt;a href="http://bellapictures.com/" target="_"&gt;bellapictures.com&lt;/a&gt;.&lt;br /&gt;Bella solicits photographers on Craigslist, the online bulletin board, and photographers submit portfolios through the Web, too. All photographs are taken with digital cameras.&lt;br /&gt;The technology behind Bella, said Tom Kramer, the president and a founder, has become available and affordable only in the last few years. Sophisticated customer- and job-tracking software, he said, used to be available only as million-dollar software applications, with hefty annual maintenance fees. Today, its Web-based equivalent is a pay-for-use service from Salesforce, which costs Bella a couple of thousand dollars a month. Web searching, online listings and the spread of digital photography, he added, are all crucial tools for Bella.&lt;br /&gt;"Our business wouldn't have been possible five years ago," he said.&lt;br /&gt;More Growth on Tap&lt;br /&gt;The new technology is also giving small businesses the freedom to pursue new strategies. Brooklyn Brewery, founded in 1988, took a new path less than three years ago. The company wanted to build its beer into a larger regional brand. So it sold the trucks and storage facilities that it had used mainly in the New York area, and hired independent distributors to deliver its beer up and down the East Coast.&lt;br /&gt;To become a regional business, the company wanted most of its employees to work outside Brooklyn, promoting its beer in new markets. It invested about $20,000 in a computer network so that its 15-person sales force, spread from Massachusetts to Georgia, could tap in from notebook computers for information on everything from sales leads to poster art for tavern promotions.&lt;br /&gt;The strategy has paid off. Sales at the 27-person company have grown nearly 30 percent over the last couple of years to about $10 million in 2005, said Eric Ottaway, the general manager, who expects sales to rise about 15 percent this year. The growth has come without adding to his four-person administrative staff, Mr. Ottaway said.&lt;br /&gt;Brooklyn Brewery farms out the maintenance of its computer network to a services company, Quality Technology Solutions of Morris Plains, N.J., which typically works for larger businesses. But it can make money on a smaller account like the beer maker because of the Internet and features that Microsoft has added to its Small Business Server software, which enables remote updating, troubleshooting and bug fixes, said Neil Rosenberg, president of Quality Technology Solutions. Mr. Rosenberg's experts can now monitor and tweak the brewery's computers from New Jersey.&lt;br /&gt;"So I don't have to schlep a technician to Brooklyn for 80 to 90 percent of the problems," he said.&lt;br /&gt;I.B.M., the giant of the technology services business, is not sending consultants to Cole Harford in Overland Park, Kan., either. Last year, Cole Harford, a distributor of restaurant supplies like napkins and plastic cups, started using a couple of I.B.M. Web-based software programs that monitor Cole Harford's e-mail for spam and viruses, blocking malicious code from reaching its 75 desktop and notebook personal computers. The service has been remarkably effective, said Laurel Johnson, the information technology director at Cole Harford, and it costs less than $5 a month per user.&lt;br /&gt;Previously, Ms. Johnson said, she and an assistant used to spend two days a week wrestling with virus and spam troubles. Today, those problems take only four hours a month of her time, so she is planning to finally tackle a long-delayed project to automate the company's four warehouses.&lt;br /&gt;Providing a Second Wind&lt;br /&gt;The new Web technologies have also given a second life to languishing small businesses. Until a few years ago, the Newark Nut Company, a retail and wholesale vendor of nuts, candy and other snacks, was struggling in a declining urban neighborhood. But in 2003, Jeffrey Braverman decided to leave behind his six-figure salary at a private investment company in Manhattan and help revive his family's business.&lt;br /&gt;Mr. Braverman pushed the business online, studied Web marketing and bought keywords on search engines. Since then, the company's employment has tripled to 12 people, Mr. Braverman said, and sales have tripled into millions of dollars a year. The business, now called &lt;a href="http://nutsonline.com/" target="_"&gt;Nutsonline.com&lt;/a&gt;, recently relocated to Linden, N.J.&lt;br /&gt;Search technology, he said, can really open the door to wider markets for small companies. Far-flung customers can find a company's products, while keyword advertising makes marketing more specific and affordable. "It's just been phenomenal what Google has done for our business," said Mr. Braverman, who is 25.&lt;br /&gt;Smaller businesses have now taken the lead in spending on information technology. Small and medium-size businesses — those with fewer than 1,000 employees — account for half of all spending on hardware, software and services in the United States, and their spending grew 35 percent faster last year than the overall market, according to IDC, a research firm. That trend, said Ray Boggs, an IDC analyst, is expected to continue for the next few years as small businesses become more eager and adept at using new Web technology.&lt;br /&gt;JotSpot is a Silicon Valley start-up betting on the small-business market. It offers collaborative work spaces online where people can share and edit Web-based documents and databases for project management, help desks, recruiting, product development and other tasks.&lt;br /&gt;JotSpot calls them "do-it-yourself applications." Anyone can create up to 20 Web pages shared by five people, at no cost. For more pages and larger groups, the monthly fees start at $9.&lt;br /&gt;"The sweet spot for us is small businesses up to 200 people," said Joe Kraus, a co-founder and the chief executive of JotSpot. "The rise of software as a Web service, combined with search marketing, has totally changed the economics of supplying and selling technology to small businesses."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-114057235346757552?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/114057235346757552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=114057235346757552' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114057235346757552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114057235346757552'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2006/02/web-services-upend-old-ideas-about.html' title='Web Services Upend Old Ideas About the Little Guy&apos;s Role - New York Times'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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-22667616.post-114051548766166595</id><published>2006-02-21T17:51:00.000+08:00</published><updated>2006-02-21T17:51:27.673+08:00</updated><title type='text'>LDAP Benefits</title><content type='html'>MDCL LDAP PROFESSIONAL SERVICES对于企业来说，主要可为企业解决三个方面的问题：&lt;br /&gt;&lt;br /&gt;· 为企业建立一个登录平台　 通过登录平台，企业各个系统可实现统一用户登录、统一用户验证。&lt;br /&gt;· 为企业建立一个权限平台　 权限平台可以使企业各个系统使用统一的权限平台，LDAP统一规划权限，各系统具体实施。&lt;br /&gt;· 为企业建立一个数据平台　 数据平台包括两个方面，一个是共享数据，一个是系统数据。共享数据可为企业中的各个系统共同使用，而系统数据是各个系统私有的数据，由每个系统单独使用。&lt;br /&gt;&lt;br /&gt;LDAP是轻量目录访问协议，它特有的树状数据组织方式可将企业资源信息直观清楚的表述出来，它比数据库更快的查询速度使得它可以满足企业各个系统对它的同时访问要求，它强大的ACI权限控制机制可将各个系统对其数据的权限灵活严格地进行限制。LDAP完全可以满足企业在资源统一管理以及用户统一登录、权限统一控制等方面的需求。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MDCL作为中国IT集成服务的先锋，关注各企业LDAP的需求由来已久，经过在实践中对LDAP的更深入了解，MDCL 成功的推出了MDCL LDAP PROFESSIONAL SERVICES，它继承了业界标准的LDAP技术，对LDAP加入了自己的理解，对LDAP思想进行了扩展和延伸，提供为企业进行LDAP规划，探讨企业的其他应用与LDAP的接口，以达到企业应用的统一登录、企业用户的统一管理。资源统一管理，服务分布放置。&lt;br /&gt;&lt;br /&gt;1. 企业中不同的系统都维护一套属于自己的用户信息，对于整个企业来说，它带来了两个弊端：· 增加了企业的维护成本。· 各个系统中维护的信息的更新不能及时反映到其他的系统中。&lt;br /&gt;&lt;br /&gt;2. 将用户信息用目录服务统一规划起来后，它将为企业带来两个好处：· 降低了企业维护用户信息的成本。· 确保各个系统访问的用户信息都是及时的、准确的。&lt;br /&gt;&lt;br /&gt;实现企业信息化建设的统一规划· 企业用户登录的统一规划· 企业权限验证的统一规划以便实现未来的PORTAL(企业门户)的频道展现和SSO(统一登录) 单一维护入口，维护和管理不同的数据，自动更新不同的服务。 用户信息在目录数据库中存放，各个系统与目录数据库联系。· 企业新增一员工，通过统一的用户管理入口，在目录数据库中增加一用户，建立他的邮箱。· 企业中的其他应用可以直接使用该用户信息。&lt;br /&gt;&lt;br /&gt;MDCL LDAP PROFESSIONAL SERVICES不仅解决企业人员统一问题，还可以对企业的其他共享信息实现统一管理。目录服务中还可以存储的数据类型包括：· 共享信息（打印机、传真机） · 客户的联系信息(供应商、合作伙伴) · 软件包的配置信息 · 公用证书和安全密匙· 企业的其他资源信息&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.mdcl.com.cn/img/xnr_07.gif" /&gt;&lt;br /&gt;&lt;img src="http://www.mdcl.com.cn/img/xnr_08.gif" /&gt;&lt;br /&gt;&lt;img src="http://www.mdcl.com.cn/img/xnr_09.gif" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22667616-114051548766166595?l=proathena.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://proathena.blogspot.com/feeds/114051548766166595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22667616&amp;postID=114051548766166595' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114051548766166595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22667616/posts/default/114051548766166595'/><link rel='alternate' type='text/html' href='http://proathena.blogspot.com/2006/02/ldap-benefits.html' title='LDAP Benefits'/><author><name>Jack</name><uri>http://www.blogger.com/profile/01293181000384069590</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></feed>
