<?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-7335438738304284149</id><updated>2012-01-04T15:40:43.521-08:00</updated><category term='server not found'/><category term='argouml'/><category term='selinux'/><category term='smtp'/><category term='proxy'/><category term='skills'/><category term='psched'/><category term='raid5'/><category term='mule'/><category term='instantclient'/><category term='dia'/><category term='htb'/><category term='red hat'/><category term='asus'/><category term='illustrator'/><category term='glassfish'/><category term='feisty'/><category term='open source'/><category term='hardy'/><category term='mda'/><category term='troubleshooting'/><category term='burst'/><category term='ldap'/><category term='popup'/><category term='magicka-fever'/><category term='sapjco'/><category term='comparison'/><category term='tc'/><category term='software engineering'/><category term='uml'/><category term='blues'/><category term='inkscape'/><category term='learning'/><category term='training'/><category term='eeePC'/><category term='rant'/><category term='Human memory'/><category term='debug'/><category term='knowledge'/><category term='ebox'/><category term='centos'/><category term='mysql'/><category term='refactoring'/><category term='wifi'/><category term='php'/><category term='degrade'/><category term='openmdx'/><category term='ohloh'/><category term='xna'/><category term='visio'/><category term='role'/><category term='oracle'/><category term='phpize'/><category term='prevayler'/><category term='system tables'/><category term='sap'/><category term='rational team concert'/><category term='ie6'/><category term='diagramming tools'/><category term='information technology'/><category term='pear'/><category term='atheros'/><category term='ubuntu'/><category term='failure'/><category term='acer'/><category term='oci8'/><category term='subversion'/><category term='profile'/><title type='text'>Inventor's Paradox</title><subtitle type='html'>The solution to a general problem is simpler than a solution to a specific problem, the solution of many problem is simpler than the solution to one problem.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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>54</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7335438738304284149.post-5801752159444307801</id><published>2012-01-04T03:09:00.000-08:00</published><updated>2012-01-04T15:40:43.544-08:00</updated><title type='text'>OSGI commons-logging blues</title><content type='html'>I read that OSGI plugins is difficult to build because of the isolation built into the plugin ecosystem. But only recently I found out that it is really troublesome, tooks me a lot of time to figure these out:&lt;br /&gt;- Import-Package clause in the plugin could import already loaded classes in the main application onto the plugin. But the precondition is that the main application must already register the already loaded class packages (Java packages, &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; maven artifactId) onto the plugin ecosystem.&lt;br /&gt;- Imported classes could refer to other classes. Runtime exception could occur unless the other class packages already &lt;span style="font-weight: bold;"&gt;registered&lt;/span&gt; by the main application (ex. in the Felix configuration map) (or exported by other plugin) AND the other class packages is &lt;span style="font-weight: bold;"&gt;imported&lt;/span&gt; in one of the Import-Package clause.&lt;br /&gt;- The Apache commons-logging library is very much not compatible with OSGI&lt;br /&gt;&lt;br /&gt;In my case, My plugin has a spring-jdbc library dependency. At first I OSGI-imported spring packages from the main application, only to find out that the main application missed some packages, resulting in Runtime exceptions inside  spring  instances. Then I forgo the spring import  stuffs, making them included dependency instead.&lt;br /&gt;Now I am faced by commons-logging errors.&lt;br /&gt;&lt;br /&gt;The final solution is to include spring libraries by transitive dependency but exclude commons-logging, and add SLF4J dependency clauses to replace commons-logging classes :&lt;br /&gt;&lt;div style="font-family:courier new;font-size:85%;"&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; ...&lt;br /&gt; &amp;lt;plugin&amp;gt;&lt;br /&gt; &amp;lt;groupId&amp;gt;org.apache.felix&amp;lt;/groupId&amp;gt;&lt;br /&gt; &amp;lt;artifactId&amp;gt;maven-bundle-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt; &amp;lt;extensions&amp;gt;true&amp;lt;/extensions&amp;gt;&lt;br /&gt; &amp;lt;configuration&amp;gt;&lt;br /&gt;  &amp;lt;instructions&amp;gt;&lt;br /&gt;   &amp;lt;!-- Change package and plugin class here --&amp;gt;&lt;br /&gt;   &amp;lt;Export-Package&amp;gt;telkom.isc&amp;lt;/Export-Package&amp;gt;&lt;br /&gt;   &amp;lt;Private-Package&amp;gt;telkom.isc.*&amp;lt;/Private-Package&amp;gt;&lt;br /&gt;   &amp;lt;Bundle-Activator&amp;gt;telkom.isc.AuditPluginActivator&amp;lt;/Bundle-Activator&amp;gt;&lt;br /&gt;   &amp;lt;Import-Package&amp;gt;!*,org.joget.report.dao,org.joget.report.model,org.joget.report.service,org.joget.commons.util,org.joget.plugin.base,org.joget.plugin.property.model,org.joget.plugin.property.service,org.joget.directory.model,org.joget.directory.model.service,org.joget.directory.dao,org.joget.workflow.model,org.joget.workflow.model.dao,org.joget.workflow.model.service,org.joget.workflow.util,org.joget.apps.app.dao,org.joget.apps.app.lib,org.joget.apps.app.model,org.joget.apps.app.service,org.joget.apps.datalist.lib,org.joget.apps.datalist.model,org.joget.apps.datalist.service,org.joget.apps.form.lib,org.joget.apps.form.dao,org.joget.apps.form.model,org.joget.apps.form.service,org.joget.apps.list.service,org.joget.apps.userview.lib,org.joget.apps.userview.model,org.joget.apps.userview.service,org.joget.apps.workflow.lib,javax.servlet,javax.servlet.http,org.osgi.framework;version=&amp;quot;1.3.0&amp;quot;&amp;lt;/Import-Package&amp;gt;&lt;br /&gt;   &amp;lt;!-- End change package and plugin class here --&amp;gt;&lt;br /&gt;   &amp;lt;Embed-Dependency&amp;gt;scope=compile|runtime;inline=false;artifactId=!commons-logging&amp;lt;/Embed-Dependency&amp;gt;&lt;br /&gt;   &amp;lt;Embed-Transitive&amp;gt;true&amp;lt;/Embed-Transitive&amp;gt;&lt;br /&gt;   &amp;lt;Embed-Directory&amp;gt;dependency&amp;lt;/Embed-Directory&amp;gt;&lt;br /&gt;   &amp;lt;Embed-StripGroup&amp;gt;true&amp;lt;/Embed-StripGroup&amp;gt;&lt;br /&gt;   &amp;lt;DynamicImport-Package&amp;gt;*&amp;lt;/DynamicImport-Package&amp;gt;&lt;br /&gt;  &amp;lt;/instructions&amp;gt;&lt;br /&gt; &amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&amp;lt;/build&amp;gt;&lt;br /&gt;    &amp;lt;dependencies&amp;gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;junit&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;junit&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;4.4&amp;lt;/version&amp;gt;&lt;br /&gt;            &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;       &lt;br /&gt;        &lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;org.springframework&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;spring&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;2.5.6.SEC02&amp;lt;/version&amp;gt;&lt;br /&gt;            &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;org.springframework&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;spring-test&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;2.5.6.SEC02&amp;lt;/version&amp;gt;&lt;br /&gt;            &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;springframework&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;spring-jdbc&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;1.2.6&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;commons-dbcp&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;commons-dbcp&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;1.3&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;commons-pool&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;commons-pool&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;1.5.4&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;org.slf4j&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;jcl104-over-slf4j&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;1.4.2&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;org.slf4j&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;slf4j-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;1.4.2&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;org.slf4j&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;slf4j-log4j12&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;1.4.2&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;org.joget&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;wflow-core&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;3.0-SNAPSHOT&amp;lt;/version&amp;gt;&lt;br /&gt;            &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;        &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;com.oracle&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;ojdbc14&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;10.2.0.2.0&amp;lt;/version&amp;gt;&lt;br /&gt;            &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;        &amp;lt;!-- Change plugin specific dependencies here --&amp;gt;&lt;br /&gt;        &lt;br /&gt;        &amp;lt;!-- End change plugin specific dependencies here --&amp;gt;&lt;br /&gt;    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-5801752159444307801?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/5801752159444307801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=5801752159444307801' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/5801752159444307801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/5801752159444307801'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2012/01/osgi-commons-logging-blues.html' title='OSGI commons-logging blues'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-472044370386055241</id><published>2011-10-06T19:08:00.000-07:00</published><updated>2011-10-06T19:16:04.275-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magicka-fever'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><title type='text'>XNB File format</title><content type='html'>00: 'X'&lt;br /&gt;01: 'N'&lt;br /&gt;02: 'B'&lt;br /&gt;03: 'w'&lt;br /&gt;04-05 : 8004h -&amp;gt; compressed stream, 0004h -&amp;gt; uncompressed stream&lt;br /&gt;06-09: compressedSize&lt;br /&gt;0A-0D: decompressedSize&lt;br /&gt;0E: start of data&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-472044370386055241?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/472044370386055241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=472044370386055241' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/472044370386055241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/472044370386055241'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2011/10/xnb-file-format.html' title='XNB File format'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-1192609762292915572</id><published>2011-08-17T04:46:00.000-07:00</published><updated>2011-08-17T04:52:10.823-07:00</updated><title type='text'>Compress-a-sequence</title><content type='html'>During my attempt to learn LISP/Clojure, I tried the problems in www.4Clojure.com&lt;br /&gt;&lt;br /&gt;4Clojure problem #30 :&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;Write a function which removes consecutive duplicates from a sequence.&lt;br /&gt;&lt;br /&gt;so that&lt;br /&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;code class="clojure keyword"&gt;(&lt;/code&gt;&lt;code class="clojure functions"&gt;=&lt;/code&gt; &lt;code class="clojure keyword"&gt;(&lt;/code&gt;&lt;code class="clojure plain"&gt;__ &lt;/code&gt;&lt;code class="clojure keyword"&gt;[&lt;/code&gt;&lt;code class="clojure value"&gt;1&lt;/code&gt; &lt;code class="clojure value"&gt;1&lt;/code&gt; &lt;code class="clojure value"&gt;2&lt;/code&gt; &lt;code class="clojure value"&gt;3&lt;/code&gt; &lt;code class="clojure value"&gt;3&lt;/code&gt; &lt;code class="clojure value"&gt;2&lt;/code&gt; &lt;code class="clojure value"&gt;2&lt;/code&gt; &lt;code class="clojure value"&gt;3&lt;/code&gt;&lt;code class="clojure keyword"&gt;]&lt;/code&gt;&lt;code class="clojure keyword"&gt;)&lt;/code&gt; &lt;code class="clojure keyword"&gt;'(&lt;/code&gt;&lt;code class="clojure value"&gt;1&lt;/code&gt; &lt;code class="clojure value"&gt;2&lt;/code&gt; &lt;code class="clojure value"&gt;3&lt;/code&gt; &lt;code class="clojure value"&gt;2&lt;/code&gt; &lt;code class="clojure value"&gt;3&lt;/code&gt;&lt;code class="clojure keyword"&gt;)&lt;/code&gt;&lt;code class="clojure keyword"&gt;)&lt;br /&gt;and&lt;br /&gt;&lt;/code&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;code class="clojure keyword"&gt;(&lt;/code&gt;&lt;code class="clojure functions"&gt;=&lt;/code&gt; &lt;code class="clojure keyword"&gt;(&lt;/code&gt;&lt;code class="clojure plain"&gt;__ &lt;/code&gt;&lt;code class="clojure keyword"&gt;[&lt;/code&gt;&lt;code class="clojure keyword"&gt;[&lt;/code&gt;&lt;code class="clojure value"&gt;1&lt;/code&gt; &lt;code class="clojure value"&gt;2&lt;/code&gt;&lt;code class="clojure keyword"&gt;]&lt;/code&gt; &lt;code class="clojure keyword"&gt;[&lt;/code&gt;&lt;code class="clojure value"&gt;1&lt;/code&gt; &lt;code class="clojure value"&gt;2&lt;/code&gt;&lt;code class="clojure keyword"&gt;]&lt;/code&gt; &lt;code class="clojure keyword"&gt;[&lt;/code&gt;&lt;code class="clojure value"&gt;3&lt;/code&gt; &lt;code class="clojure value"&gt;4&lt;/code&gt;&lt;code class="clojure keyword"&gt;]&lt;/code&gt; &lt;code class="clojure keyword"&gt;[&lt;/code&gt;&lt;code class="clojure value"&gt;1&lt;/code&gt; &lt;code class="clojure value"&gt;2&lt;/code&gt;&lt;code class="clojure keyword"&gt;]&lt;/code&gt;&lt;code class="clojure keyword"&gt;]&lt;/code&gt;&lt;code class="clojure keyword"&gt;)&lt;/code&gt; &lt;code class="clojure keyword"&gt;'(&lt;/code&gt;&lt;code class="clojure keyword"&gt;[&lt;/code&gt;&lt;code class="clojure value"&gt;1&lt;/code&gt; &lt;code class="clojure value"&gt;2&lt;/code&gt;&lt;code class="clojure keyword"&gt;]&lt;/code&gt; &lt;code class="clojure keyword"&gt;[&lt;/code&gt;&lt;code class="clojure value"&gt;3&lt;/code&gt; &lt;code class="clojure value"&gt;4&lt;/code&gt;&lt;code class="clojure keyword"&gt;]&lt;/code&gt; &lt;code class="clojure keyword"&gt;[&lt;/code&gt;&lt;code class="clojure value"&gt;1&lt;/code&gt; &lt;code class="clojure value"&gt;2&lt;/code&gt;&lt;code class="clojure keyword"&gt;]&lt;/code&gt;&lt;code class="clojure keyword"&gt;)&lt;/code&gt;&lt;code class="clojure keyword"&gt;)&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;/blockquote&gt;My solution  :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="c1"&gt;;; ywidyatama's solution to Compress a Sequence&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="c1"&gt;;; https://4clojure.com/problem/30&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;fn &lt;/span&gt;&lt;span class="nv"&gt;dedupstr2&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;s&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;/div&gt;&lt;div class="line" id="LC5"&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;reduce &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;fn &lt;/span&gt;&lt;span class="nv"&gt;dedup-reduce&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;seq_or_n1&lt;/span&gt; &lt;span class="nv"&gt;n2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;      &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;lastn1&lt;/span&gt; &lt;/div&gt;&lt;div class="line" id="LC8"&gt;        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;seq? &lt;/span&gt;&lt;span class="nv"&gt;seq_or_n1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;/div&gt;&lt;div class="line" id="LC9"&gt;          &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;last &lt;/span&gt;&lt;span class="nv"&gt;seq_or_n1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;          &lt;span class="nv"&gt;seq_or_n1&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;        &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;seq1&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;seq? &lt;/span&gt;&lt;span class="nv"&gt;seq_or_n1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;seq_or_n1&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;seq &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;seq_or_n1&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;= &lt;/span&gt;&lt;span class="nv"&gt;n2&lt;/span&gt; &lt;span class="nv"&gt;lastn1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;           &lt;span class="nv"&gt;seq1&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;           &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;concat &lt;/span&gt;&lt;span class="nv"&gt;seq1&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;seq &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;n2&lt;/span&gt;&lt;span class="p"&gt;])))&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;      &lt;span class="p"&gt;))&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;    &lt;span class="nv"&gt;s&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&gt;    &lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-1192609762292915572?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/1192609762292915572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=1192609762292915572' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/1192609762292915572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/1192609762292915572'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2011/08/compress-sequence.html' title='Compress-a-sequence'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-6074164671617323712</id><published>2011-06-15T04:17:00.000-07:00</published><updated>2011-06-15T04:23:32.303-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='server not found'/><category scheme='http://www.blogger.com/atom/ns#' term='rational team concert'/><title type='text'>Make Rational Team Concert URLs behave</title><content type='html'>When Rational Team Concert sends email, or show a dependency link to another work item, it uses the hostname in the URL. Imagine that I installed Rational Team Concert in a sandbox server in our intranet, and without any need to register the sandbox server to the DNS. When RTC server sends email, and clicked by any of our programmers, the URL pops up with the hostname - but of course the hostname is not registered in the DNS so we have server not found error.&lt;br /&gt;&lt;br /&gt;Recent googling turned out this IBM &lt;a href="http://publib.boulder.ibm.com/infocenter/rtc/v2r0m0/index.jsp?topic=/com.ibm.help.common.jazz.calm.doc/topics/t_calm_cfg_adv_props.html"&gt;page&lt;/a&gt; that may be of assistance. And I use the /jazz variation of the URL, even tough the page says otherwise. Here is the excerpt from the page :&lt;br /&gt;&lt;br /&gt;&lt;ol class="ol steps"&gt;&lt;li class="li step stepexpand"&gt;&lt;span class="ph cmd"&gt;Open a browser and log in as a member of the JazzAdmins group to the Admin Web UI on the Jazz Team Server:&lt;/span&gt;&lt;ul class="ul choices"&gt;&lt;li class="li choice"&gt;For &lt;span class="keyword"&gt;IBM® Rational® Team Concert&lt;/span&gt;, typically the URL for the Admin Web UI is &lt;samp class="ph codeph"&gt;https://&lt;var class="keyword varname"&gt;host-name&lt;/var&gt;:9443/rtc/admin&lt;/samp&gt;. In the Admin Web UI, click the &lt;span class="ph uicontrol"&gt;Server&lt;/span&gt; tab.&lt;/li&gt;&lt;li class="li choice"&gt;For &lt;span class="keyword"&gt;IBM Rational Quality Manager&lt;/span&gt;, typically the URL for the Admin Web UI is &lt;samp class="ph codeph"&gt;https://&lt;var class="keyword varname"&gt;host-name&lt;/var&gt;:9443/rqm/admin&lt;/samp&gt;. In the Admin Web UI, click the &lt;span class="ph uicontrol"&gt;Server&lt;/span&gt; tab.&lt;/li&gt;&lt;li class="li choice"&gt;For IBM Rational DOORS Requirements Professional, typically the URL for the Admin Web UI is &lt;samp class="ph codeph"&gt;https://&lt;var class="keyword varname"&gt;host-name&lt;/var&gt;:9443/jazz/admin&lt;/samp&gt;. In the Admin Web UI, click the &lt;span class="ph uicontrol"&gt;Server&lt;/span&gt; tab.&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li class="li step stepexpand"&gt;&lt;span class="ph cmd"&gt;In the Configuration pane, click &lt;span class="ph uicontrol"&gt;Advanced Properties&lt;/span&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li class="li step stepexpand"&gt;&lt;span class="ph cmd"&gt;Search for &lt;span class="ph uicontrol"&gt;Public URI Root&lt;/span&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li class="li step stepexpand"&gt;&lt;span class="ph cmd"&gt;In &lt;samp class="ph codeph"&gt;com.ibm.team.repository.service.internal.ServerDescriptionService&lt;/samp&gt;, click &lt;span class="ph uicontrol"&gt;Edit&lt;/span&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li class="li step stepexpand"&gt;&lt;span class="ph cmd"&gt;In the Public URI Root property at the &lt;span class="ph uicontrol"&gt;Current Value&lt;/span&gt; field, enter the  URL &lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;In the URL to be entered, I use https://10.2.3.4:9443/jazz  (where 10.2.3.4 is the sandbox server's IP address)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-6074164671617323712?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/6074164671617323712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=6074164671617323712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/6074164671617323712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/6074164671617323712'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2011/06/make-rational-team-concert-urls-behave.html' title='Make Rational Team Concert URLs behave'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-1587008467447474389</id><published>2010-11-21T23:03:00.000-08:00</published><updated>2010-11-21T23:21:44.232-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='selinux'/><category scheme='http://www.blogger.com/atom/ns#' term='instantclient'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='pear'/><category scheme='http://www.blogger.com/atom/ns#' term='proxy'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='oci8'/><title type='text'>Installing oci8 on Centos</title><content type='html'>Today I have the inclination to resume one of my postponed  to-dos, that is to install Oracle instant client and php extension oci8 in two production servers.&lt;br /&gt;&lt;br /&gt;references :&lt;br /&gt;http://shamuntoha.wordpress.com/2010/04/12/centos-oracle-php-database-connect-oci-instantclient-oci8/&lt;br /&gt;&lt;br /&gt;http://ubuntuforums.org/showthread.php?t=92528&lt;br /&gt;&lt;br /&gt;http://www.jagsiacs.co.uk/node/77&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Overview&lt;br /&gt;&lt;span style="font-size:100%;"&gt;The basic steps are, download and extract basic instant client and SDK instant client. Then do a pecl install oci8 to download and compile oci8 extension. There are few issues I encountered when installing php oci8 extension.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;pear tried to connect directly to pear server. Must set http_proxy using pear config-set command.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;missing links. Because I downloaded zip files, and not rpms, there are few missing links when trying to link oci8 with instant client. The solution is to create them manually&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;intermittent compilation problem. One of two compile result in an error, even with exactly the same arguments and environment condition. This means, if it fails, retry at least once, there is a chance that the second compile will work smoothly.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;SElinux issues. Must do some chcon to allow the execution of instant client libraries. See reference #3.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:130%;"&gt;Pear proxy configuration&lt;/span&gt;&lt;br /&gt;pear config-set http_proxy http://10.x.x.x:8080&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Missing link solution&lt;br /&gt;&lt;/span&gt;Do these commands when current working directory is where the  oracle instant client library were extracted.&lt;br /&gt;&lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 50px; text-align: left;"&gt;ln -s libclntsh.so.10.1 libclntsh.so&lt;br /&gt;ln -s libocci.so.10.1 libocci.so&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Selinux issue solution&lt;br /&gt;&lt;span style="font-size:100%;"&gt;I do these commands to allow execution of oracle libraries from PHP environment :&lt;br /&gt;&lt;blockquote&gt;chcon system_u:object_r:textrel_shlib_t *.so&lt;br /&gt;chcon system_u:object_r:textrel_shlib_t *.10.1&lt;/blockquote&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;But these might not be enough, I only  phpinfo results to confirm that oci8 is indeed loaded by PHP environment. Stay tuned for more info after we try this configuration.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-1587008467447474389?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/1587008467447474389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=1587008467447474389' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/1587008467447474389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/1587008467447474389'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2010/11/installing-oci8-on-centos.html' title='Installing oci8 on Centos'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-6363878119568575137</id><published>2010-10-06T02:35:00.000-07:00</published><updated>2010-10-18T17:00:06.014-07:00</updated><title type='text'>Solving time drift problem on Ubuntu VMWare Guest</title><content type='html'>&lt;span style="font-family:arial;"&gt;I have an Ubuntu VMWare guest, and having trouble with time drift.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;After a bit twiddling with ntp synchronization and still getting unacceptable time drift,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;finally I read a post in http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=471784 :&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;pre class="headers"&gt;&lt;b&gt;&lt;br /&gt;From:&lt;/b&gt; Kazuhiro NISHIYAMA &lt;zn@mbf.nifty.com&gt;&lt;br /&gt;&lt;b&gt;To:&lt;/b&gt; 471784@bugs.debian.org&lt;br /&gt;&lt;b&gt;Subject:&lt;/b&gt; Please recommends open-vm-source&lt;br /&gt;&lt;b&gt;Date:&lt;/b&gt; Fri, 28 Mar 2008 21:13:22 +0900&lt;br /&gt;&lt;/zn@mbf.nifty.com&gt;&lt;/pre&gt; I had a same problem, and resolved following commands:&lt;br /&gt;&lt;pre class="message"&gt;&lt;br /&gt;* sudo aptitude purge open-vm-tools&lt;br /&gt;* sudo reboot&lt;br /&gt;* sudo aptitude install open-vm-source&lt;br /&gt;* pager /usr/share/doc/open-vm-source/README.Debian&lt;br /&gt;* sudo module-assistant prepare open-vm&lt;br /&gt;* sudo module-assistant auto-install open-vm&lt;br /&gt;* sudo aptitude install open-vm-tools&lt;br /&gt;* sudo reboot&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I done the steps above, and it seems to work perfectly.&lt;br /&gt;Oh, I didn't do the reboot parts nor the pager one.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;EDIT: Seems that its not enough. I have a AMD Phenom x4 CPU, which have some anomalies in regard to CPU clock speed.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;The problem is, the CentOS 4.6 Host detected that the CPU have clock speed 1100MHz, in reality the CPU have 2200MHz clock. So, imitating this &lt;a href="http://muffinresearch.co.uk/archives/2008/07/22/vmware-fixing-time-drift-in-amd-dual-core-systems/"&gt;post&lt;/a&gt;, I must tell VMware server the real maximum clock:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;code style="font-family: courier new;"&gt;vi /etc/vmware/config&lt;br /&gt;&lt;br /&gt;edit the file so it resembles these lines:&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;host.cpukHz = 2200000&lt;br /&gt;host.noTSC = "TRUE"&lt;br /&gt;ptsc.noTSC = "TRUE"&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And make sure ntpd runs to handle the small drifts that still occurs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-6363878119568575137?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/6363878119568575137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=6363878119568575137' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/6363878119568575137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/6363878119568575137'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2010/10/solving-time-drift-problem-on-ubuntu.html' title='Solving time drift problem on Ubuntu VMWare Guest'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-1302165184811989254</id><published>2010-08-16T20:43:00.001-07:00</published><updated>2010-08-16T21:26:28.007-07:00</updated><title type='text'>Implementing Multimaster Replication</title><content type='html'>Today I tried to implement multimaster replication on  two  Red Hat  Enterprise Linux 5  servers.&lt;br /&gt;I studied the top three google result for 'multimaster replication mysql' today :&lt;br /&gt;http://onlamp.com/pub/a/onlamp/2006/04/20/advanced-mysql-replication.html&lt;br /&gt;http://dev.mysql.com/doc/refman/5.0/en/replication-howto.html&lt;br /&gt;http://capttofu.livejournal.com/1752.html&lt;br /&gt;&lt;br /&gt;I found these three resources complementary. At first I have no idea about the replication process. Initially followed instructions from Dev.MySQL site to setup one-way replication, then read the livejournal blog for better one-page summary of the process. Reading the ONLAMP Article, I understood the syntax to stop replication and ordered MySQL to skip one SQL statement when resuming replication.&lt;br /&gt;&lt;br /&gt;I'm using replication with existing data in the database, so the steps I use is a little different from the three web resource above. And because I'm using out-of-the box RHEL setup, there is an issue with the firewall blocking port 3306.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Unblock the firewall&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;as root, edit (use vi or nano or something) /etc/sysconfig/iptables&lt;br /&gt;&lt;blockquote&gt;&gt; vi /etc/sysconfig/iptables&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT&lt;/span&gt;&lt;br /&gt;-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited&lt;br /&gt;COMMIT&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;insert the line in red above.&lt;br /&gt;&lt;br /&gt;Other steps is similar to what you might read in these three articles&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Add server-id, log-bin,  sync_binlog, innodb_flush_at_trx_commit to /etc/my.cnf at server A&lt;ul&gt;&lt;li&gt;log-bin=mysql-bin&lt;/li&gt;&lt;li&gt;server-id=1&lt;/li&gt;&lt;li&gt;sync_binlog=1&lt;/li&gt;&lt;li&gt;innodb_flush_log_at_trx_commit=1&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;service mysqld restart (at A)&lt;/li&gt;&lt;li&gt;create repl user at A, grant it replication capabilities : (I omit the domain so I wouldn't be debugging hostname problems, it is safe for my purpose because it is an internal server)&lt;br /&gt;&lt;pre class="programlisting"&gt;mysql&gt; &lt;strong class="userinput"&gt;&lt;code&gt;CREATE USER 'repl'@'%' IDENTIFIED BY 'slavepass';&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;mysql&gt; &lt;strong class="userinput"&gt;&lt;code&gt;GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;run mysql (client) in one terminal session  &lt;strong class="userinput"&gt;&lt;code&gt;: mysql&gt; FLUSH TABLES WITH READ LOCK;&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;in other terminal session, check latest binary log sequence number with &lt;strong class="userinput"&gt;&lt;code&gt;mysql&gt; SHOW MASTER STATUS;&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;pre class="programlisting"&gt;&lt;strong class="userinput"&gt;&lt;code&gt;mysqldump --all-databases --lock-all-tables &gt;dbdump.db&lt;/code&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;back to first mysql session, unlock tables :&lt;br /&gt;&lt;pre class="programlisting"&gt;&lt;strong class="userinput"&gt;&lt;code&gt;mysql&gt; UNLOCK TABLES;&lt;/code&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;prepare server B's /etc/my.cnf with full blown options :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;log-bin=mysql-bin&lt;br /&gt;&lt;/li&gt;&lt;li&gt;server-id=2&lt;br /&gt;&lt;/li&gt;&lt;li&gt;sync_binlog=1&lt;br /&gt;&lt;/li&gt;&lt;li&gt;innodb_flush_log_at_trx_commit=1&lt;br /&gt;&lt;/li&gt;&lt;li&gt;auto_increment_increment=2&lt;br /&gt;&lt;/li&gt;&lt;li&gt;auto_increment_offset=2&lt;br /&gt;&lt;/li&gt;&lt;li&gt;log-slave-updates&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;master-host = &lt;i&gt;ipofserverA&lt;/i&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;master-user = repl&lt;br /&gt;&lt;/li&gt;&lt;li&gt;master-password = &lt;i&gt;passwordOfRepl&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;log-slow-queries=/var/log/mysql-slow.log&lt;br /&gt;&lt;/li&gt;&lt;li&gt;long_query_time=1&lt;br /&gt;&lt;/li&gt;&lt;li&gt;log-queries-not-using-indexes=1&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;start server B's mysql with --skip-slave-start option :&lt;pre class="programlisting"&gt;&lt;code&gt;/bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --user=mysql --skip-slave-start&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;import database dump at B:&lt;br /&gt;&lt;pre class="programlisting"&gt;&lt;strong class="userinput"&gt;&lt;code&gt;mysql &lt;&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;change master on B to refer the A server :&lt;pre class="programlisting"&gt;mysql&gt; &lt;strong class="userinput"&gt;&lt;code&gt;CHANGE MASTER TO&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;-&gt;     &lt;strong class="userinput"&gt;&lt;code&gt;MASTER_HOST='&lt;em class="replaceable"&gt;&lt;code&gt;master_host_name&lt;/code&gt;&lt;/em&gt;',&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;-&gt;     &lt;strong class="userinput"&gt;&lt;code&gt;MASTER_USER='&lt;em class="replaceable"&gt;&lt;code&gt;replication_user_name&lt;/code&gt;&lt;/em&gt;',&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;-&gt;     &lt;strong class="userinput"&gt;&lt;code&gt;MASTER_PASSWORD='&lt;em class="replaceable"&gt;&lt;code&gt;replication_password&lt;/code&gt;&lt;/em&gt;',&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;-&gt;     &lt;strong class="userinput"&gt;&lt;code&gt;MASTER_LOG_FILE='&lt;em class="replaceable"&gt;&lt;code&gt;recorded_log_file_name&lt;/code&gt;&lt;/em&gt;',&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;-&gt;     &lt;strong class="userinput"&gt;&lt;code&gt;MASTER_LOG_POS=&lt;em class="replaceable"&gt;&lt;code&gt;recorded_log_position&lt;/code&gt;&lt;/em&gt;;&lt;/code&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;pre class="programlisting"&gt;mysql&gt; START SLAVE;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;change A's my.cnf file to resemble B's. Substitute a different server-id and auto increment offset.&lt;/li&gt;&lt;li&gt;&lt;pre class="programlisting"&gt;&lt;blockquote&gt;service mysqld restart&lt;/blockquote&gt; (on A:)&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;After these steps, the system choked on first replicated statement from server B. The solution is to stop slave on A and do&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;strong&gt;SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; &lt;/strong&gt;&lt;/code&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;before starting A's slave again.&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-1302165184811989254?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/1302165184811989254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=1302165184811989254' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/1302165184811989254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/1302165184811989254'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2010/08/implementing-multimaster-replication.html' title='Implementing Multimaster Replication'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-6858504113073484744</id><published>2010-08-14T06:53:00.000-07:00</published><updated>2010-08-14T07:26:00.256-07:00</updated><title type='text'>Feedback Cycles - key to timely process delivery</title><content type='html'>I've recently found some analogy in some events occured lately. Its all about feedbacks. Back then when I'm doing undergraduate study in Electronics Engineering, we learnt that feedback is an important element of any control systems. And now, it seems, it still an important element, if we want our process delivers in timely fashion. Allow me to describe the two events where the analogy is found.&lt;br /&gt;First, some person were being requested to upload some data. But they aren't the one to upload it to the system, they only must provide the datafile to the uploader. And where I fits in, uploading the data. Because of  belief that its not in my best interest to upload stuffs, I delegated the task. After the delegate finished with the task, I notify some people that the task is done. Days passed. The software where the uploads being done have a report to validate the data, but somehow the report returns far too much invalid data. Takes us another days to found out that some of the uploaded data's columns were switched. And also that a part of the upload logic  has incorrect mapping. I think, things will be a lot faster if we shorten the feedback cycle - like for instance, if the data provider is the one who uploads the data and also verifies it in system. Then I begin to think that maybe if I were to be the one that upload it things will be different, but..  maybe not. For sure, too many people in the process chain increases process latency. Too late feedback make process go awry.&lt;br /&gt;Second, a few programmers  codes some  functionality I have been given them in form of task list. But I didn't review them, the code were being written with a lot performance problems and some mismatch with the actual need.  I think, if we shorten the feedback cycle things could be better - for example, letting the programmers view the profile log so they know how many unnecessary queries being made to the database. Or letting the user review each task done in the application, so the functionality mismatch is minimal. Waiting the user to actually need to use the functionality and complain about something missing is somehow suboptimal. I begin to think that I must adopt Bill Atkinson's philoshopy, that its better to have few functionality done right than a lot functionality done all wrong !&lt;br /&gt;The analogy could go on and on, for example, when we found out that the reconfiguration of the server to accomodate hosting of a second app actually disables the first app - about two months after the reconfiguration (!). One factor to this incident that I have no logon to try out in the first app so I didn't bother trying to log on to the application.  We found out the error - at the expense of two months application downtime and the need to reinitiate server reconfiguration procedure. There is very much bueraucracy around every operational server in here, partly to prevent this stuff from happening, but also makes recovery  cycle far too long. And I also wondering why there is no automated script to test the  application's logon functionality?&lt;br /&gt;So, feedback in control systems, its very much the same in business processes, and also in software engineering processes. Feedback cycles are important element, no matter in which context you see it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-6858504113073484744?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/6858504113073484744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=6858504113073484744' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/6858504113073484744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/6858504113073484744'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2010/08/feedback-cycles-key-to-timely-process.html' title='Feedback Cycles - key to timely process delivery'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-5633564331694948858</id><published>2010-03-10T02:53:00.000-08:00</published><updated>2010-03-10T03:07:53.486-08:00</updated><title type='text'>Packet Too Large</title><content type='html'>While importing (restoring) a relatively large MySQL backup file, this error occured:&lt;br /&gt;packet too large.&lt;br /&gt;After googling for a while I found this &lt;a href="http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html"&gt;page&lt;/a&gt;. So the cure is to increase max_allowed_packet in my.ini.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-5633564331694948858?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/5633564331694948858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=5633564331694948858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/5633564331694948858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/5633564331694948858'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2010/03/packet-too-large.html' title='Packet Too Large'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-6920116580988614278</id><published>2010-03-04T03:24:00.000-08:00</published><updated>2010-03-04T03:42:31.467-08:00</updated><title type='text'>Dont ever put online redo log and its mirror in one drive</title><content type='html'>Everything is fine in the last one year or so, even if the server crashed several times (maybe bad power line..). Thanks to the RAID5 mechanism (which I must re-add with manual commands each time one drive kicked out of the array), no data were lost in each of the crashes in the past.&lt;br /&gt;In 25 February, 2010, my server's system crashed again. It seems that I overlooked the fact that I placed mirrlog and origlog in one partition. The mirrlogA directory contains a member of redo log group 1 &amp;amp; one member of redo log group 3, and origlogA directory contains another member of the same redo log group.  The file in origlogA is mirrored in mirrlogA, and the thing is, I symlinked them both to the same partition (different directory, of course).  The better practice is, to make those two directory (mirrlogA and origlogA) resides in different physical hard drive. If they reside in the same drive, the probability of both of the online redo log corrupted is becoming significant.  And thats exactly what happened, the file in the origlog has I/O errors when I tried to read it, and the file in the mirrlog is.. corrupted.&lt;br /&gt;OK, so my data weren't lost.. its just takes me a lot of hours puzzled over what should be done to my Oracle Database.  First I tried to  copy the second file to the first one (they should be identical, they are members of the same group). And Oracle started.. churning happily.. but not for long. As soon as I activated the Netweaver ABAP app server, errors churned in alert log. And oracle grinds to halt.&lt;br /&gt;&lt;br /&gt;These two magic lines worked for me to solve this problem :&lt;br /&gt;alter database recover until cancel;&lt;br /&gt;alter database open resetlogs;&lt;br /&gt;&lt;br /&gt;And now i moved the mirrlog to one of the RAID5 partition.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-6920116580988614278?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/6920116580988614278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=6920116580988614278' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/6920116580988614278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/6920116580988614278'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2010/03/dont-ever-put-online-redo-log-and-its.html' title='Dont ever put online redo log and its mirror in one drive'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-4552327985349192689</id><published>2010-02-16T19:51:00.000-08:00</published><updated>2010-03-04T04:07:47.752-08:00</updated><title type='text'>Oracle 9.0.1.1 exp bug</title><content type='html'>I tried to run an intranet app from home, with a database connection from my laptop tunneled to Telkom HQ Data Center.&lt;br /&gt;Seems that the application tooks too many queries and data volume were bit too much (OK, maybe I should profile the data volume &amp;amp; query counts...), it took me an hour of trial and error so that I realized : it  is impossible to run the app without timing out while in tunneled connection.&lt;br /&gt;OK, then proceed to  think.. If this is were my usual application, what would I do ? I would fire up MySQL Administrator and backup the externally located database in my system, then restore it to my local MySQL database.&lt;br /&gt;For oracle database, the tool alternatives were:&lt;br /&gt;- use TOAD to move the database (which, I think would be tedious, and also I have no TOAD installed in my system)&lt;br /&gt;- use Oracle Datapump, which we cannot use because the database are 9.0.1.1, where such technology haven't exist yet, and also .. I have no experience at this moment on Datapump.&lt;br /&gt;- migrate to MySQL, and migrate back to Oracle, because each RDMBS vendor provided tools to migrate from almost any database into _their_ RDBMS&lt;br /&gt;- use exp/imp&lt;br /&gt;Migrating back and forth gives risk of inconsistent data type in the target database. So I choose Exp/imp.&lt;br /&gt;But.. exp/imp have constraints that must be satisfied :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;version of the &lt;span style="font-weight: bold;"&gt;exp &lt;/span&gt;utility must match with the &lt;span style="font-weight: bold;"&gt;source&lt;/span&gt; database&lt;/li&gt;&lt;li&gt;version of the &lt;span style="font-weight: bold;"&gt;imp &lt;/span&gt;utility must match with the &lt;span style="font-weight: bold;"&gt;target&lt;/span&gt; database&lt;/li&gt;&lt;li&gt;the user being used in the source database and target database must in the similar rank, that is, they're both SYSDBAs or they're both normal users&lt;/li&gt;&lt;/ol&gt;These facts I found out the hard way. Please be free to comment if any of these were incorrect.&lt;br /&gt;The exp utility installed in my laptop system are 10.2.0.1.0, and the server is 9.0.1.1. So I must either (a) find one oracle client installation which version is 9.0.1.1, or (b) run the exp in the server.&lt;br /&gt;Running exp on the server, I got these:&lt;blockquote&gt;&lt;br /&gt;&lt;span class="MsgBodyText"&gt;EXP-00008: ORACLE error 6550 encountered&lt;br /&gt;ORA-06550: line 1, column 13:&lt;br /&gt;PLS-00201: identifier 'SYS.LT_EXPORT_PKG' must be declared&lt;br /&gt;ORA-06550: line 1, column 7:&lt;br /&gt;PL/SQL: Statement ignored&lt;br /&gt;EXP-00083: The previous problem occurred when calling SYS.LT_EXPORT_PKG.schema_info_exp&lt;br /&gt;. exporting statistics&lt;br /&gt;Export terminated successfully with warnings.&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="MsgBodyText"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Puzzled for some moment, and after some googling I found :&lt;br /&gt;&lt;span class="MsgBodyText"&gt;GRANT EXECUTE ON sys.lt_export_pkg TO exp_full_database;&lt;br /&gt;or&lt;br /&gt;&lt;/span&gt;&lt;span class="MsgBodyText"&gt;GRANT EXECUTE ON sys.lt_export_pkg TO PUBLIC;&lt;br /&gt;&lt;br /&gt;And now I could export sucessfully with no strange warnings. Then downloaded the exported DMP file, import it here using oracle 10.2's IMP, and continue debugging the app..&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;About Oracle and MySQL&lt;/span&gt;&lt;br /&gt;Some readers who knows me well will wonder why most of my posts is about troubleshooting Oracle, while I am one kind of person who will use MySQL for all purpose if I could. I think, its not that I am forced to work with much more Oracle database than I liked to, its more like that I seldom have problems with MySQL - export/imports run beautifully using MySQL Administrator, and no corrupted data yet when using MySQL.&lt;br /&gt;Ok to be sure lets backup my one and only production app running on mysql :)&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/7335438738304284149-4552327985349192689?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/4552327985349192689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=4552327985349192689' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/4552327985349192689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/4552327985349192689'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2010/02/oracle-9011-exp-bug.html' title='Oracle 9.0.1.1 exp bug'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-5543226589370477319</id><published>2010-02-08T04:39:00.000-08:00</published><updated>2011-09-15T04:10:35.016-07:00</updated><title type='text'>saprfc installation on centos 5</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7GfA0ncvRRM/S3AjLqPhilI/AAAAAAAAADk/GHFxnt1276Y/s1600-h/saprfc-hooray.PNG"&gt;&lt;/a&gt;&lt;br /&gt;After hesitating for a while, I struggled to bring saprfc to live on a Centos 5 installation.&lt;br /&gt;Ok, first, the people I'm helping already installed rfc sdk in /usr/sap/rfcsdk. I am using RFC SDK extracted from RFC_45-20000055.SAR that I've downloaded from SAP Service Marketplace Support links (http://service.sap.com/). The SAR file is suitable for Linux i386 architecture, you might want to use RFC_45-10003377.SAR for Linux x86_64 architecture.&lt;br /&gt;Now i need to compile sap:rfc extension. I used saprfc-1.4.1 downloaded from &lt;a href="http://saprfc.sourceforge.net/"&gt;http://saprfc.sourceforge.net/&lt;/a&gt;. But, no phpize in path, so i must install php-devel first&lt;br /&gt;&amp;gt; yum install php-devel&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7GfA0ncvRRM/S3AjLqPhilI/AAAAAAAAADk/GHFxnt1276Y/s1600-h/saprfc-hooray.PNG"&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7GfA0ncvRRM/S3AjLqPhilI/AAAAAAAAADk/GHFxnt1276Y/s1600-h/saprfc-hooray.PNG"&gt;&lt;/a&gt;&lt;br /&gt;but, because the proxy setup is not done (our server lives outside the DMZ), I must edit yum.conf :&lt;br /&gt;&amp;gt; vi /etc/yum.conf&lt;br /&gt;and add one line :&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7GfA0ncvRRM/S3AjLqPhilI/AAAAAAAAADk/GHFxnt1276Y/s1600-h/saprfc-hooray.PNG"&gt;&lt;/a&gt;&lt;br /&gt;&amp;gt; proxy=http://....&lt;br /&gt;Then I'm ready to try php-devel again.&lt;br /&gt;&amp;gt; yum install php-devel&lt;br /&gt;OK. now try to compile sap:rfc. R the INSTALL file in a flash, and tries these steps (the part b in the INSTALL file)&lt;br /&gt;&amp;gt; cd /home/saprfc-1.4.1&lt;br /&gt;&amp;gt; phpize&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7GfA0ncvRRM/S3AjLqPhilI/AAAAAAAAADk/GHFxnt1276Y/s1600-h/saprfc-hooray.PNG"&gt;&lt;/a&gt;&lt;br /&gt;What? no phpize? I was mistaken thinking that php-devel contains the phpize executable..&lt;br /&gt;Seems that my yum install php-devel failed. Retrying, now with php-xml and php-snmp (becuase yum seems complained that these are not compatible with the version of php-devel I tried to install)&lt;br /&gt;&amp;gt; yum install php-devel php-xml php-snmp&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7GfA0ncvRRM/S3AjLqPhilI/AAAAAAAAADk/GHFxnt1276Y/s1600-h/saprfc-hooray.PNG"&gt;&lt;/a&gt;&lt;br /&gt;Hurray.. install complete.&lt;br /&gt;retries compiling sap:rfc&lt;br /&gt;&amp;gt; cd /home/saprfc-1.4.1&lt;br /&gt;&amp;gt; phpize&lt;br /&gt;&lt;blockquote&gt;[root@localhost saprfc-1.4.1]# phpize&lt;br /&gt;Configuring for:&lt;br /&gt;PHP Api Version:         20041225&lt;br /&gt;Zend Module Api No:      20050922&lt;br /&gt;Zend Extension Api No:   220051025&lt;br /&gt;config.m4:30: warning: AC_CANONICAL_HOST invoked multiple times&lt;br /&gt;config.m4:30: warning: AC_CANONICAL_HOST invoked multiple times&lt;br /&gt;&lt;/blockquote&gt;I don't know about AC_CANONICAL_HOST, lets ignore them for now.&lt;br /&gt;&amp;gt; ./configure&lt;br /&gt;all seems OK. If there is an error about missing gcc you should&lt;br /&gt;&amp;gt;yum install gcc&lt;br /&gt;If not, just proceed to make..&lt;br /&gt;&amp;gt; make install&lt;br /&gt;it compiles a saprfc.so in /usr/lib/php/modules.&lt;br /&gt;I took a liberty to write these ini /etc/php.d/saprfc.ini :&lt;br /&gt;&lt;blockquote&gt;; Enable saprfc extension module&lt;br /&gt;extension=saprfc.so&lt;br /&gt;&lt;/blockquote&gt;now restart apache and pray..&lt;br /&gt;&amp;gt; /etc/init.d/httpd restart&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/librfccm.so' - /usr/lib/php/modules/librfccm.so: cannot open shared object file: No such file or directory in Unknown on line 0&lt;br /&gt;PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/saprfc.so' - libstdc++-libc6.2-2.so.3: cannot open shared object file: Too many levels of symbolic links in Unknown on line 0&lt;br /&gt;&lt;/blockquote&gt;Wonderful. Things  so complicated from this moment.&lt;br /&gt;&lt;br /&gt;I think i found the problem:&lt;br /&gt;[root@localhost lib]# ldd /usr/lib/librfccm.so&lt;br /&gt;     linux-gate.so.1 =&amp;gt;  (0x0035e000)&lt;br /&gt;     libdl.so.2 =&amp;gt; /lib/libdl.so.2 (0x004ae000)&lt;br /&gt;     librt.so.1 =&amp;gt; /lib/librt.so.1 (0x006de000)&lt;br /&gt;     libpthread.so.0 =&amp;gt; /lib/libpthread.so.0 (0x00110000)&lt;br /&gt;     libc.so.6 =&amp;gt; /lib/libc.so.6 (0x00127000)&lt;br /&gt;     libstdc++-libc6.2-2.so.3 =&amp;gt; not found&lt;br /&gt;     libm.so.6 =&amp;gt; /lib/libm.so.6 (0x0026a000)&lt;br /&gt;     /lib/ld-linux.so.2 (0x00896000)&lt;br /&gt;[root@localhost lib]# locate libstdc++-libc6.2-2.so.3&lt;br /&gt;/usr/lib/libstdc++-libc6.2-2.so.3&lt;br /&gt;[root@localhost lib]# ls -l /usr/lib/libstdc++-libc6.2-2.so.3&lt;br /&gt;lrwxrwxrwx 1 root root 18 Jan 26 10:47 /usr/lib/libstdc++-libc6.2-2.so.3 -&amp;gt; libstdc++.so.5.0.5&lt;br /&gt;[root@localhost lib]# locate libstdc++.so.5.0.5&lt;br /&gt;/usr/lib/libstdc++.so.5.0.5&lt;br /&gt;[root@localhost lib]# ls -l /usrlib/libstdc++.so.5.0.5&lt;br /&gt;ls: /usrlib/libstdc++.so.5.0.5: No such file or directory&lt;br /&gt;[root@localhost lib]# ls -l /usr/lib/libstdc++.so.5.0.5&lt;br /&gt;lrwxrwxrwx 1 root root 18 Jan 26 10:50 /usr/lib/libstdc++.so.5.0.5 -&amp;gt; libstdc++.so.5.0.5&lt;br /&gt;&lt;br /&gt;Yes. Endless link of links.&lt;br /&gt;Tried to fix these with updating compat-libstdc++-33 and compat-libstdc++-296 (yes, I only know that the current version of stdc++ being installed is libstdc++so.6.x, and have no idea which of the compat packages contains the 5.0.5 version)&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;yum update compat-libstdc++-33 compat-libstdc++-296&lt;br /&gt;&lt;bla bla=""&gt;...&lt;br /&gt;&lt;br /&gt;[root@localhost ~]# ldd /usr/lib/librfccm.so&lt;br /&gt;     linux-gate.so.1 =&amp;gt;  (0x00854000)&lt;br /&gt;     libdl.so.2 =&amp;gt; /lib/libdl.so.2 (0x00110000)&lt;br /&gt;     librt.so.1 =&amp;gt; /lib/librt.so.1 (0x00114000)&lt;br /&gt;     libpthread.so.0 =&amp;gt; /lib/libpthread.so.0 (0x00811000)&lt;br /&gt;     libc.so.6 =&amp;gt; /lib/libc.so.6 (0x00358000)&lt;br /&gt;     libstdc++-libc6.2-2.so.3 =&amp;gt; /usr/lib/libstdc++-libc6.2-2.so.3 (0x0011d000)&lt;br /&gt;     libm.so.6 =&amp;gt; /lib/libm.so.6 (0x0015f000)&lt;br /&gt;     /lib/ld-linux.so.2 (0x00896000)&lt;br /&gt;     libgcc_s.so.1 =&amp;gt; /lib/libgcc_s.so.1 (0x00186000)&lt;br /&gt;&lt;/bla&gt;&lt;/blockquote&gt;&lt;br /&gt;everything seems in order.&lt;br /&gt;&lt;br /&gt;&amp;gt; /etc/init.d/httpd restart&lt;br /&gt;&lt;br /&gt;and now... drum roll please..&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7GfA0ncvRRM/S3AjLqPhilI/AAAAAAAAADk/GHFxnt1276Y/s1600-h/saprfc-hooray.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 123px;" src="http://2.bp.blogspot.com/_7GfA0ncvRRM/S3AjLqPhilI/AAAAAAAAADk/GHFxnt1276Y/s400/saprfc-hooray.PNG" alt="" id="BLOGGER_PHOTO_ID_5435883433461123666" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-5543226589370477319?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/5543226589370477319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=5543226589370477319' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/5543226589370477319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/5543226589370477319'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2010/02/saprfc-installation-on-centos-5.html' title='saprfc installation on centos 5'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_7GfA0ncvRRM/S3AjLqPhilI/AAAAAAAAADk/GHFxnt1276Y/s72-c/saprfc-hooray.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7335438738304284149.post-1024183687895994286</id><published>2009-12-03T01:19:00.001-08:00</published><updated>2009-12-03T01:36:58.376-08:00</updated><title type='text'>FOSS.IN 2009</title><content type='html'>Its my third day attending the Free and Open Source Software India Conference (FOSS.IN) in Bangalore.&lt;br /&gt;This is my third international event I'm attending, but it also my first international event I'm attending in about.. 10 years :) The first and the second were SEARCC Computer Competition (1996) in Bangkok and IOI 1996 in Hungary.&lt;br /&gt;For us Indonesians, the climate is very much like at home. The food, is on other hand, very foreign tasting. Our hope on tasting familiar food lies on KFC and McDonald's at the Mall named 'The Forum' nearby. Today I tried the food, but I don't think I would dare to eat such food anymore. I raise my hat to the Europeans who faithfully eats the lunch given in the place :)&lt;br /&gt;One problem occured to me is that I couldn't find a place to charge my laptop in an easy way. Further observation revealed, there are few plugs in front of the first row in each Auditorium, which are almost always full. But today I found that there is an extension chord in the floor near the first row, which now I blissfully plugged in my charger.&lt;br /&gt;The conference opened my eyes that Indian people were significantly more involved in FOSS projects than Indonesians.  Their Indians, although some with limited English, seems very interested and some has significant involvement in several FOSS projects, if not pioneering one or two such projects.&lt;br /&gt;'m still attending some of the talks now.. so thats all for now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-1024183687895994286?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/1024183687895994286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=1024183687895994286' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/1024183687895994286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/1024183687895994286'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/12/fossin-2009.html' title='FOSS.IN 2009'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-703532955396717844</id><published>2009-11-21T13:56:00.000-08:00</published><updated>2009-11-21T14:33:42.003-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><title type='text'>IWSS - Java developer's nightmare</title><content type='html'>InterScan Web Security Suite, abbreviated IWSS, it is said to be a comprehensive solution tailored for large corporate deployment. Product of Trend Micro, IWSS scans every HTTP access from a corporate's intranet onto the great internet. Unfortunately, it assumes that every .jar file accessed by a corporate's intranet is a java applet, therefore it naively apply bytecode manipulation on it, making a dialog box pops up every time the class in the jar file access something in the host OS. Like accessing a file in Eclipse's plug-ins folder. Like accessing a file in the Local Settings folder.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7GfA0ncvRRM/Swhqmgz0QPI/AAAAAAAAADc/FUXkfF4eRSI/s1600/applet-alert-iwss.PNG"&gt;&lt;img src="http://1.bp.blogspot.com/_7GfA0ncvRRM/Swhqmgz0QPI/AAAAAAAAADc/FUXkfF4eRSI/s400/applet-alert-iwss.PNG" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 50px;" src="http://1.bp.blogspot.com/_7GfA0ncvRRM/Swhqmgz0QPI/AAAAAAAAADc/FUXkfF4eRSI/s400/applet-alert-iwss.PNG" alt="" id="BLOGGER_PHOTO_ID_5406688562533122290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Why does it have to be like this? When does an antivirus company, allowed to do manipulations that in the past only done by virus? Let me explain. A jar file is an JVM executable. I downloaded tens if not over a hundred jar files from the internet, because Eclipse's update mechanism is just like that- by downloading jar files from the Internet. IWSS tampered with them, modified them.. it modified the executables so I could no longer expect the original behaviour of them. It ruins tens if not hundreds of jar files in my two laptops, which I must cleanup now. Virus in the past also did something similar to this. Exe files were modified by viruses, its header altered to call the virus body attached in the end of the exe file before calling the original entry point of the executable.&lt;br /&gt;Please. I don't think that there is any reason for an antivirus company to behave like a virus. For the damages that already done, I think Trend Micro must provide its users a cleanup tool, a tool that could scan a harddisk for altered jar files, with com.iwss package in it, and modified them to normal, un-applying the bytecode manipulation said before. It is similar to virus cleanup tool, no?&lt;br /&gt;I don't think Trend Micro has done everything they could to detect whether the JAR file is an applet or not. Oh, I see, they seem just UNABLE to do that. I wonder if they were UNABLE to create such bytecode transformation I said in the previous paragraph.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-703532955396717844?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/703532955396717844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=703532955396717844' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/703532955396717844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/703532955396717844'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/11/iwss-java-developers-nightmare.html' title='IWSS - Java developer&apos;s nightmare'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_7GfA0ncvRRM/Swhqmgz0QPI/AAAAAAAAADc/FUXkfF4eRSI/s72-c/applet-alert-iwss.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7335438738304284149.post-2940986277174359478</id><published>2009-11-14T19:49:00.000-08:00</published><updated>2009-11-14T20:39:55.969-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='sapjco'/><category scheme='http://www.blogger.com/atom/ns#' term='mule'/><title type='text'>Installing MULE ESB on Centos</title><content type='html'>I have one configuration that downloads SAP data using a Mule-1.4.4. Why not mule 2? The SAP Transport for Mule 2 didn't exist yet during the time I built the system. It was implemented on a Windows Sandbox system, that unfortunately has few shortcomings such as not being backed by tech support staffs, virus-prone, must be started up after power outages, and shared system load with SAP ERP Sandbox &amp;amp; one Ubuntu OS loaded in VMWare (whew, that's a lot..).&lt;br /&gt;So I think it would be better to migrate the Mule-system into a Centos-powered virtual machine located in the Data Center (where power outages are rare and of course we have no worm/virus problem).&lt;br /&gt;Extracted mule-1.4.4.tar.gz  into /opt/mule-1.4.4. Put the IBM JDK 1.5's bin directory  onto user's PATH by editing user's .bashrc file. Extracted sapjco 2.1.8 into /opt/sapjco2.&lt;br /&gt;Tried run Mule for the first time, but it wants to download &lt;span style="font-weight: bold;"&gt;mail-1.4.jar&lt;/span&gt;. I copied the missing file from the previous system to &lt;span style="font-weight: bold;"&gt;lib\user&lt;/span&gt;. I also copied &lt;span style="font-weight: bold;"&gt;activation-1.1.jar&lt;/span&gt; to &lt;span style="font-weight: bold;"&gt;lib\user&lt;/span&gt;. Mule runs but complains about it being unable to write pid files and  log folders. Chown-ed the entire mule tree to the mule user I created for the purpose of running the system.&lt;br /&gt;Now, for the SAP integration part.. extracted mule-transport-1.1.zip in the home folder of mule user. Copied mule-transport-sap.jar and mule-transport-sap-examples.jar from the target folders resulting from the previous built (on a WinXP system, I think) onto &lt;span style="font-weight: bold;"&gt;lib\user.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;I tried to run the config file from the mule-sap-transport system. Unfortunately it choked because of missing commons-dbcp and ojdbc.jar (I used oracle jdbc endpoint). I copied the missing jars from the previous system onto &lt;span style="font-weight: bold;"&gt;lib\opt&lt;/span&gt; (don't know whether will make any difference if I used lib\user). Symlinked &lt;span style="font-weight: bold;"&gt;sapjco.jar&lt;/span&gt; into &lt;span style="font-weight: bold;"&gt;lib\user&lt;/span&gt;.&lt;br /&gt;At long last, Mule runs now. But when I triggerred the sap download (RFC call), exceptions spewn in the console (or mule.log, depends on I used &lt;span style="font-weight: bold;"&gt;mule start&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;-config ...&lt;/span&gt; or just &lt;span style="font-weight: bold;"&gt;mule -config&lt;/span&gt; ...). It couldn't find the native library librfccm.so, but somehow it was able to load libsapjcorfc.so in the same folder. Must be the wrapper mechanism (mule used wrapper from tanukisoftware) that causes this strangeness. Poking my .bashrc again, and finds out that the LD_LIBRARY_PATH is not being exported.. silly me. Adds LD_LIBRARY_PATH to the export clause, exit the console, re-login, and now it works..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-2940986277174359478?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/2940986277174359478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=2940986277174359478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/2940986277174359478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/2940986277174359478'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/11/installing-mule-esb-on-centos.html' title='Installing MULE ESB on Centos'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-8035719674852334196</id><published>2009-11-14T01:26:00.000-08:00</published><updated>2009-11-14T01:45:33.290-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='raid5'/><category scheme='http://www.blogger.com/atom/ns#' term='degrade'/><category scheme='http://www.blogger.com/atom/ns#' term='failure'/><title type='text'>RAID5 Failure, Again</title><content type='html'>This time I get (another) annoying RAID5 failure. The CentOS 4.7 server won't boot because it was unable to start the RAID5 array. Yes, this is the second time I stumbled upon this problem (see this Indonesian-written &lt;a href="http://inventorsparadox.blogspot.com/2009/01/raid5-failure.html"&gt;post&lt;/a&gt;). I burned a new CentOS 4.7 DVD (using a new REAL server's DVD writer, no less), then I boot up the DVD, typed &lt;span style="font-weight: bold;"&gt;linux rescue &lt;/span&gt;in the boot command line, and tried to follow the exactly the same step I've done and written in this blog, but to no success: the system complains that the superblock doesnt match.&lt;br /&gt;Seems I forgot the new RAID5 configuration in this server. I forgot that I have reinstalled this server with SAP ERP Netweaver, creating two software RAID5 arrays in the process, and of course with different partitions.&lt;br /&gt;The partitions were: sda3, sdb3, sdc1, sdd2. The four partitions created a 215 megablock (thats about 100 GB, I think) md1 partition.  Here's the chemistry:&lt;br /&gt;- The kernel won't add non-fresh member (sdd2) into the array, it kicks it out of the RAID assembly.&lt;br /&gt;- The remaining RAID assembly of three partitions couldn't be started. The cause is, which I found out after forcing the array to run, is that event counter in sda3 is not the same with the others. But kernel said nothing of this in the dmesg log. It just said 'unable to start degraded array ..'&lt;br /&gt;- I forced the assembly to run. Must do this when the md device stopped. So, &lt;span style="font-weight: bold;"&gt;mdadm -S /dev/md1&lt;/span&gt;, then &lt;span style="font-weight: bold;"&gt;mdadm -A --force --run /dev/md1 /dev/sda3 /dev/sdb3 /dev/sdc1 /dev/sdd2&lt;/span&gt;. It runs indeed, writing error messages about sda3&lt;br /&gt;- But sdd2 still kicked out from the array. I must manually add it to the array, &lt;span style="font-weight: bold;"&gt;mdadm -a /dev/md1 /dev/sdd2&lt;/span&gt;&lt;br /&gt;Now, I am just waiting for the recovery (recovery status can be read in /proc/mdstat) to finish, so I could boot up this system in confidence. I hope nothing else went wrong.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-8035719674852334196?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/8035719674852334196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=8035719674852334196' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/8035719674852334196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/8035719674852334196'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/11/raid5-failure-again.html' title='RAID5 Failure, Again'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-2496681368683241475</id><published>2009-10-10T19:09:00.000-07:00</published><updated>2009-10-10T19:44:01.194-07:00</updated><title type='text'>Java-based Domain Driven Frameworks</title><content type='html'>Yesterday I'm browsing and exploring about Full-stack Domain Driven Application Frameworks written in the Java platform. The Java platform still has a lot of potential, but somehow the Rails framework tells me that we're still far from it, my exploration yesterday.&lt;br /&gt;Here is a brief of the frameworks I read about:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;JMatter - This one I already use a few months back. The UI is pretty decent, but the lack of production quality web-based view technology.. makes it very far behind others. It currently only has production-grade Swing viewer, making it a two tier application platform. Security-wise, two-tier platforms are not good -&gt; each client must have a database connection to the db server, which potentially could be abused. Has no authorization code built in. Actions on the entity written in the domain model, encapsulating business logics.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;OpenXava - Web-based GUI with some AJAX parts. Has no authorization code built in. Separates actions from domain model, the concept is that actions must be contained in controllers.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Jspresso - Has multiple view (GUI) technology implemented - ULC, Flex, and WingS. Flex is Adobe's RIA technology, WingS is AJAX Web-based view technology. ULC I have no experience. The Reference manual somewhat not completed. Domain model not written in Java, it was written in spring beans XML. I havent figure out how to write business logic, but entity relationship stuffs seems to be complete. Class-based authorization and dynamic authorization (The docs were very hazy about this one - seems that this is  authorization based on object's state but I havent' found out how to implement authorization based on object's owner).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Nakedobjects - Currently only has Swing/AWT viewer (sorry, haven't got time to find out which is which) and HTML (web-based) viewer. Domain model written in Java, contains business logic (similar to JMatter). Class-based authorization.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Trails - only has Tapestry viewer, which generates Web-based GUI.  Domain Model in Java. Seems to be the only one that implement class based authorization and association-based authorization.&lt;/li&gt;&lt;/ol&gt;The feature I was looking for is association based authorization. But the thing is, OpenXava's view descriptor features seems to be most complete compared to others - makes me hard time thinking whether it is best to start with OpenXava or to start with Trails...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-2496681368683241475?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/2496681368683241475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=2496681368683241475' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/2496681368683241475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/2496681368683241475'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/10/java-based-domain-driven-frameworks.html' title='Java-based Domain Driven Frameworks'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7335438738304284149.post-3293845189031510945</id><published>2009-09-12T18:47:00.000-07:00</published><updated>2009-09-12T19:30:35.905-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tc'/><category scheme='http://www.blogger.com/atom/ns#' term='psched'/><category scheme='http://www.blogger.com/atom/ns#' term='htb'/><category scheme='http://www.blogger.com/atom/ns#' term='burst'/><title type='text'>HTB traffic control burst calculation inaccuracy</title><content type='html'>My previous Kubuntu 7.04's Linux 2.6.20 kernel uses a 1000 Hz timer kernel (refer to HZ &lt;a href="http://lxr.linux.no/#linux+v2.6.20/include/asm-frv/param.h#L5"&gt;constant defininition&lt;/a&gt; and fourth value of kernel ABI /proc/net/psched routine psched_show in &lt;a href="http://lxr.linux.no/linux+*/net/sched/sch_api.c#L1183"&gt;sch_api.c&lt;/a&gt;). HTB's burst is calculated by tc binary using the formula : bitrate/timer frequency + maximum transfer unit.&lt;br /&gt;Ubuntu 8.04's Linux 2.6.24 kernel have an improved packet scheduler timer resolution. It now uses high resolution timer, with nanosecond accuracy. Refer to psched_show in &lt;a href="http://lxr.linux.no/linux+*/net/sched/sch_api.c#L1674"&gt;sch_api.c&lt;/a&gt;, and  Fourth value of /proc/net/psched now returns 1 G (10^&lt;span style="font-size:85%;"&gt;9&lt;/span&gt;). HTB burst calculation is now bitrate/10^&lt;span style="font-size:85%;"&gt;9&lt;/span&gt; + mtu.. Somehow this is will always a small value, and as a side-effect HTB qos scheduler no longer capable of delivering high bitrates accurately to stations.&lt;br /&gt;My analysis based on my limited knowledge of the packet scheduler : the linux's packet scheduler is driven by calls to dequeue function. This might be driven by tx complete interrupt or something else. So it is not timer-driven. But the packet scheduler routines (such as sch_htb) keeps track of passing time using the value of packet scheduler timer (previously, 1KHz timer, and now, the 1 GHz timer). Htb adds tokens into the token bucket based on time passed between previously recorded time of change in the class (cl-&gt;t_c) and the current time (q-&gt;now) (see &lt;a href="http://lxr.linux.no/linux+*/net/sched/sch_htb.c#L660"&gt;sch_htb.c:&lt;/a&gt;660).  Herein lies the problem, the current time q-&gt;now is no longer the current time, because the timer frequency is in nanoseconds and there are tens if not hundreds of instructions being executed between the assignment of q-&gt;now (see htb_dequeue at &lt;a href="http://lxr.linux.no/linux+*/net/sched/sch_htb.c#L894"&gt;sch_htb.c:894&lt;/a&gt;) and the usage of  q-&gt;now. And, maybe, some interrupt has occurred (I dont really know, dequeue is not being called in the context of NMI, is it ?), and maybe one milliseconds has passed..  The inaccuracy of the size of the added token, causes the htb to prevent packets being sent in timely manner -&gt; it thinks that the class not eligible to send package because token remaining is less than packet size, the token count is actually less than what it supposed to be.&lt;br /&gt;This is what I thought, for now. The cure seem to be changing tc source code to assume 1KHz timer (which amounts to 1ms accuracy) when tc finds out that a nanosecond timer is in use, so the token buffer is large enough to cater for problems caused by time inaccuracies said above.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-3293845189031510945?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/3293845189031510945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=3293845189031510945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/3293845189031510945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/3293845189031510945'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/09/htb-traffic-control-burst-calculation.html' title='HTB traffic control burst calculation inaccuracy'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-5658829153621760166</id><published>2009-09-06T15:48:00.000-07:00</published><updated>2009-09-06T16:02:42.747-07:00</updated><title type='text'>Names in our code</title><content type='html'>This is just a summary of some rule-of-thumbs when developing source codes.&lt;br /&gt;&lt;br /&gt;When coding, do these :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;use descriptive names&lt;/li&gt;&lt;li&gt;please classify/categorize so we have shorter source files. Or, we have fewer source files in each folder (distribute files into category folders). In OOP, we should refactor into new classes if things gotten too crowded in one class, or even refactor the class into different packages. In PHP, we should refactor into new files and/or new folders.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Rules that were Anti-patterns :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;don't use generic names like $query. When reading it, I don't have a clue what does it stands for, a query to the users table, or a query to delete a user, or what? OK, maybe it can be used if the scope is local, that is, I could easily look for the meaning in the same function or small file.&lt;/li&gt;&lt;li&gt;avoid long parameter list. It is difficult to find out which parameter means what. We could use: a value class in OOP languages, or associative array in PHP, or even object in PHP, to give meaningful parameter. When function insert(name,address,groupid,status,isAdmin) being called, it becames insert($name,$address,null,0,$isAdmin), and we must look elsewhere what does the 0 stand for.  If we have $entity = array('name' =&gt; $name, 'address' =&gt; $address, 'groupid' =&gt; 0, 'isAdmin' =&gt; isAdmin); and call insert($entity); things are much easier to understand and easier to modify.&lt;br /&gt;&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/7335438738304284149-5658829153621760166?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/5658829153621760166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=5658829153621760166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/5658829153621760166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/5658829153621760166'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/09/names-in-our-code.html' title='Names in our code'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-7549937179828304610</id><published>2009-08-17T23:14:00.000-07:00</published><updated>2009-08-17T23:31:07.227-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debug'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='blues'/><category scheme='http://www.blogger.com/atom/ns#' term='phpize'/><title type='text'>Multiple PHP in a machine blues</title><content type='html'>I am compiling PHP's source code and a PHP extension (apc).  The reason for not using packaged version of PHP is that there is another critical application running in the server, with its own PHP version, and we don't want to risk incompatibility issues forcing the application run with a different PHP version.  Meanwhile I need PHP compiled with debug flags, and also with gd enabled and apc extension for another application. I prefer Debug flags to be enabled because we're testing this whole stuff and don't want to be in the dark when error (s) cropped up (previous set of PHP-apache-oci8 triad sometimes issued segmentation faults but we don't now the source of the errors).&lt;br /&gt;&lt;br /&gt;The problem is, that the apc Makefile won't use the debug flag set during previous PHP compilation. It turns out that we must be very careful that:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the phpize being used is from the correct PHP compilation (I deleted the scripts/phpize and scripts/php-config after changing PHP's configure parameters, then invoke make install on PHP)&lt;/li&gt;&lt;li&gt;no other phpize or php-config is being run, especially by setting the PATH environment variable so the path to the correct phpize/php-config is the first directory listed in the PATH.&lt;/li&gt;&lt;/ul&gt;The second item is blocked me for some time, I didn't realize that the phpize - configure - make phase invoked php-config plainly (using the PATH). Because there is several PHP installation in the system, the php-config being run is from the other installation (the root administrator installed the other PHP binaries in the normal location such as /usr/local/bin).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-7549937179828304610?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/7549937179828304610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=7549937179828304610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/7549937179828304610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/7549937179828304610'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/08/multiple-php-in-machine-blues.html' title='Multiple PHP in a machine blues'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-5243219847013725799</id><published>2009-08-17T20:16:00.001-07:00</published><updated>2009-08-17T23:11:39.737-07:00</updated><title type='text'>Munin, again</title><content type='html'>More problems come when I'm just starting to use Munin-Node to monitor several Windows 2003 servers :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;the memory value reported by Munin-Node are all wrong. The sum of app and unused is not related to total physical memory installed in the servers. It turns out that the Windows API used returns 64-bit values, and simple change to the format specified fixes the problem.&lt;/li&gt;&lt;li&gt;external plugin doesn't work. Turns out that the external plugin must not print the trailing newline when invoked by 'name' argument, and it also must prints a line of '.' after each 'config' and 'value' (or default) invocation.&lt;/li&gt;&lt;li&gt;after several days of running, external plugins stopped working. I used sysinternals' process explorer in the server, and found out that there is some chance that external plugin invocation doesn't close the listener thread. After a few days the unclosed threads became too much and prevent the Munin-Node service from spawning new external plugins.&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/7335438738304284149-5243219847013725799?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/5243219847013725799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=5243219847013725799' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/5243219847013725799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/5243219847013725799'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/08/munin-again.html' title='Munin, again'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-5078975514677318956</id><published>2009-08-06T22:52:00.001-07:00</published><updated>2009-08-08T18:31:31.911-07:00</updated><title type='text'>Munin-Node 1.5 with correct memory plugin</title><content type='html'>Munin is a solution to monitor servers. It shows graphs of some important server's system parameters, such as disk free space, cpu utilization, memory usage, network traffic, and even the HD temperature. Munin requires an agent, called Munin Node, installed at the server (you must be root or administrators to do this). Of course, there is a specific Munin Node to be installed for each operating system. On Ubuntu systems, there is munin packages in ubuntu's repository. Meanwhile Jory Stone created Munin Node for Windows, and I'd be needing that because some of the servers used at my workplace is powered by Windows Server 2003.&lt;br /&gt;I read the postings at jory's Munin Node site, and seems that memory plugin must be patched in order to have visible memory graphs.   I've downloaded the source code from &lt;a href="http://www.jory.info/serendipity/archives/27-Munin-Node-for-Windows-v1.5.html"&gt;jory's site,&lt;/a&gt; then I followed the instructions to fix the memory plugin (uncommented few lines in MemoryMuninNodePlugin.cpp), and the next task is to compile the whole thing.&lt;br /&gt;A simple thing, compiling, is not as simple as it seems.&lt;br /&gt;First, the vcproj file is for VS 2008. I'm using VS 2005. After editing the version part of the file, the project file could be opened. Next, netfw.h couldnt be found. A few googling back and forth found some netfw.h, and I downloaded it with icftypes.h (&lt;span style="text-decoration: underline;"&gt;look &lt;/span&gt;&lt;a href="http://sourceforge.jp/cvs/view/sf-04webserver/ICFControl/icftypes.h?view=log"&gt;here&lt;/a&gt;). Then, msi.lib seems to be missing (I'm using VS 2005 which lacks that file). I am forced to download Platform SDK, and I choose only windows installer SDK to install (minimize download volume). Well, now I have a fresh munin-node.exe. But wheres that upload button in blogger... Oh, blogger doesn't allow us to upload files.&lt;br /&gt;So i upload the executable in my own &lt;a href="http://sites.google.com/site/yudhiwsite/files"&gt;site at google&lt;/a&gt;.&lt;br /&gt;UPDATE:&lt;br /&gt;It seems that, no easy deployments for executables compiled in VS 2005 - we either must link to C Runtime (CRT) static library, or link to CRT DLL and use some mechanisms to ensure the DLL will be installed using Windows SxS (side by side) mechanism.  The mechanisms include making the user installed the VC Runtime redistribution or include the CRT Merge shared module into a MSI-packaged installation format.&lt;br /&gt;I compiled it once more and this time packaged the executable in .MSI format (seems that the vdproj format for VS 2008 were compatible with 2005). Jory sets up the release version to be statically-linked, so the only motivation for .MSI packaging is the ease of service installation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-5078975514677318956?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/5078975514677318956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=5078975514677318956' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/5078975514677318956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/5078975514677318956'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/08/munin-node-15-with-correct-memory.html' title='Munin-Node 1.5 with correct memory plugin'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-471132715777979933</id><published>2009-07-15T21:40:00.000-07:00</published><updated>2009-07-15T21:41:46.647-07:00</updated><title type='text'>OpenOffice 3.1</title><content type='html'>&lt;p&gt;OpenOffice 3.1 melakukan startup dengan cepat - itu impresi pertama saya.  11 detik membuka OpenOffice Calc.  Close, kemudian buka lagi - 3 detik untuk membuka Calc untuk kedua kalinya.&lt;/p&gt; &lt;p&gt;http://www.openoffice.org/dev_docs/features/3.1/index.html&lt;/p&gt; &lt;p&gt;http://openoffice.bouncer.osuosl.org/?product=OpenOffice.org&amp;amp;os=winwjre&amp;amp;lang=en-US&amp;amp;version=3.1.0&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-471132715777979933?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/471132715777979933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=471132715777979933' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/471132715777979933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/471132715777979933'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/07/openoffice-31.html' title='OpenOffice 3.1'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-1930504588795175395</id><published>2009-07-15T18:20:00.000-07:00</published><updated>2009-07-15T18:48:21.804-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='skills'/><category scheme='http://www.blogger.com/atom/ns#' term='information technology'/><title type='text'>Skills Statistics</title><content type='html'>There is always a concern of skill shortage when we try to decide which platform of choice we're going to use to develop internal applications.&lt;br /&gt;Well, maybe we could see what kind of skills is up for sale at www.elance.com :&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_7GfA0ncvRRM/Sl6DcsllxHI/AAAAAAAAACk/F48Sxh-IWC4/s1600-h/elance-2.png"&gt;&lt;img src="http://4.bp.blogspot.com/_7GfA0ncvRRM/Sl6DcsllxHI/AAAAAAAAACk/F48Sxh-IWC4/s320/elance-2.png" src="http://4.bp.blogspot.com/_7GfA0ncvRRM/Sl6DcsllxHI/AAAAAAAAACk/F48Sxh-IWC4/s320/elance-2.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 234px; height: 320px;" alt="" id="BLOGGER_PHOTO_ID_5358865135645869170" border="0" /&gt;&lt;/a&gt;Some thing we could try to relate from this list :&lt;br /&gt;Popularity of programming languages : 1. PHP with 11 thousand freelancers, 2. .NET with 8 thousand, 3.Java with 8 thousand freelancers. ASP.NET ranks further below (5 thousand freelancers), as a web development platform its ranking is not as favorable as  PHP (another popular web development platform). I assume that .NET skill means client-server WinForms skill.  Further down is J2EE which somehow as popular as Visual Basic (we know how popular VB are in the real world.. )&lt;br /&gt;Strange enough, there is no Oracle skilled freelancers open for hire, despite MySql as 1st place popular database and SQL Server as 2nd popular database skill.&lt;br /&gt;Operating System skills : Windows as 1st place with 4 thousand freelancers, but it is not that far with Linux with 3 thousand freelancers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-1930504588795175395?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/1930504588795175395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=1930504588795175395' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/1930504588795175395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/1930504588795175395'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/07/skills-statistics.html' title='Skills Statistics'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7GfA0ncvRRM/Sl6DcsllxHI/AAAAAAAAACk/F48Sxh-IWC4/s72-c/elance-2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7335438738304284149.post-6642379655715552073</id><published>2009-07-10T00:44:00.001-07:00</published><updated>2009-07-10T01:29:13.994-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='training'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><title type='text'>Learning</title><content type='html'>Ada perkataan: makin banyak yang kita tahu, makin sadar kita bahwa kita baru mengetahui sebagian kecil dari pengetahuan yang ada.&lt;br /&gt;Di industri yang saya geluti, industri teknologi informasi, pembelajaran berlangsung tanpa henti. Selalu ada hal yang baru. Sampai suatu saat, berpikir apakah perlu untuk menghentikan penyerapan hal baru dan saatnya menerapkan hal-hal yang telah diketahui.&lt;br /&gt;Mari kita lihat model proses belajar (Learning) yang umum ada di perusahaan jaman dahulu. Pada model ini, moda belajar utama yang diakui perusahaan ialah pembelajaran formal - keryawan dikirim untuk pelatihan, sehingga mendapatkan skill dan knowledge yang dibutuhkan untuk bekerja. Karyawan cuma perlu menerapkan apa yang diberikan dan mengikuti peraturan - it is a simple world. Jika ia belajar dari jalur lain, itu merupakan nilai tambah yang dimilikinya, namun pada model learning lama jalur lain tidak diatur dan tidak diperhitungkan. Perusahaan menyiapkan career path dan learning path - karyawan tinggal mengikuti dengan baik.&lt;br /&gt;Masuklah ke abad 21.&lt;br /&gt;“80% of learning and knowledge transfer occurs through informal, tacit learning activities but only 20% of the budget spent on corporate learning is focused on informal learning activities.”&lt;br /&gt;– The Business Impact of Social Computing on Corporate Learning, Carol Rozwell, Gartner Research&lt;br /&gt;Ada apa dengan formal learning? Masalah dengan formal learning dengan konten semi-statis ialah :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Courseware that is outdated due to lack of bandwidth from the content team&lt;/li&gt;&lt;li&gt;Course content that is not easily accessible or searchable, or that only a handful of subject matter experts even know exists&lt;/li&gt;&lt;li&gt;Overabundant content that can make finding the best fit a daunting task&lt;/li&gt;&lt;li&gt;Content that lacks the real-world examples and insight delivered through interaction with subject matter experts&lt;/li&gt;&lt;li&gt;Content that fails to address “never seen before” situations, and that cannot give learners the confidence needed to perform in a highly uncertain environment&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Perubahan kondisi lapangan terjadi sangat cepat, demand akan knowledge dan skill baru cukup tinggi, sementara tenaga kerja dibatasi mengakibatkan workload tinggi pula - karyawan tidak sempat mengikuti Training, ia akan mengandalkan intuisinya dan bantuan dari expert lewat jalur informal. Ia akan belajar secara informal mendapatkan skill dan knowledge yang dibutuhkannya.. itulah yang akan terjadi. Itulah yang sedang terjadi.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-6642379655715552073?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/6642379655715552073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=6642379655715552073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/6642379655715552073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/6642379655715552073'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/07/learning.html' title='Learning'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-5560424758218504905</id><published>2009-07-09T23:59:00.000-07:00</published><updated>2009-07-10T00:02:28.583-07:00</updated><title type='text'>IE memanggil Firefox ?</title><content type='html'>Siang hari ini ada pasien sebuah komputer yang IE nya ngadat. IE mau muncul, tapi kalau diketik URL di address barnya, muncul popup Application not found. Ada lambang Firefox di start menu tapi executablenya tidak ada. Clue dari pengguna komputer ialah ia tadinya mencoba memasang IE7 dan kemudian diuninstall (sehingga IE yg aktif IE6). Tampaknya Firefoxnya juga diuninstall (entah karena alasan apa).&lt;br /&gt;Googling sana-sini, sampai akhirnya menginstall Windows XP Service Pack 3 karena berasumsi ada DLL yang mismatch atau tidak lengkap. Tetap kondisi tidak membaik.&lt;br /&gt;Ternyata masalahnya ada di sebuah registry key. Entah bagaimana registry key ini merefer ke DLL milik IE7 di temporary folder dan mempengaruhi perilaku IE6 sehingga mencari Firefox (uaneeeh) ketika sebuah URL diketikkan di address bar. Kalo ga percaya, liat bahasan di &lt;a href="http://forums.mozillazine.org/viewtopic.php?f=38&amp;t=541770&amp;start=0&amp;st=0&amp;sk=t&amp;sd=a"&gt;sini&lt;/a&gt; dan &lt;a href="http://weblogs.asp.net/jgalloway/archive/2005/12/28/434132.aspx"&gt;sini&lt;/a&gt;.&lt;br /&gt;Solusi masalah ini ialah menghapus registry key HKEY_CLASSES_ROOT\CLSID\{C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}, tutup semua jendela IE (kalau perlu hentikan Explorer), tunggu 5 detik, kemudian buka kembali IE. Ada yg menyarankan menghapus file DLL IE7 tapi tadi saya tidak lakukan (mungkin kalo error lagi baru aku jalanin :) )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-5560424758218504905?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/5560424758218504905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=5560424758218504905' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/5560424758218504905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/5560424758218504905'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/07/ie-memanggil-firefox.html' title='IE memanggil Firefox ?'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7335438738304284149.post-54281496844953318</id><published>2009-07-09T01:22:00.000-07:00</published><updated>2009-07-10T00:23:21.246-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sap'/><category scheme='http://www.blogger.com/atom/ns#' term='profile'/><category scheme='http://www.blogger.com/atom/ns#' term='role'/><title type='text'>Roles, Profiles dan PFCG di SAP</title><content type='html'>Ini adalah sebuah overview mengenai sistem authorization di SAP. Ketika seorang user (mencoba) melakukan suatu hal di sistem SAP, misalnya membuka transaksi screen ber-kode tertentu, sistem akan memeriksa apakah user tersebut memiliki authorization object tertentu. Jika authorization object tersebut dimiliki, maka diperiksa juga apakah nilai field-fieldnya match atau tidak dengan properti dari operasi yang akan dilakukan. Sebuah authorization object berisi beberapa field, field ini dapat diisi * (wildcard), multiple value ataupun single value, dan logika matching ini disesuaikan dengan jenis value yang diisi. Field diisi * berarti match dengan semua operasi. Field berisi multiple value berarti match jika properti operasi sama dengan salah satu value yang ada. &lt;br /&gt;Role merupakan kumpulan dari Menu dan Authorization Object. Ada pemisahan yang agak kurang natural antara Role dan Profile, di mana Profile yang dimiliki user-lah yang dicek oleh sistem authorization di SAP. Ketika Role disave, ia harus digenerate menjadi Profile. Baik Role dan Profile diasosiasikan dengan user.&lt;br /&gt;Di mana peran PFCG? PFCG menggenerate Profile dari Role. Tetapi lebih penting lagi, ia menggenerate Authorization Object yang diperlukan dari Menu yang telah dipilih ke dalam Role. Dari authorization object yg disuggest oleh PFCG, admin dapat mengubah isi field, menonaktifkan authorization object, atau bahkan menambahkan authorization object baru.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-54281496844953318?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/54281496844953318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=54281496844953318' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/54281496844953318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/54281496844953318'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/07/roles-profiles-dan-pfcg-di-sap.html' title='Roles, Profiles dan PFCG di SAP'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-8790878047652935908</id><published>2009-07-09T01:00:00.001-07:00</published><updated>2009-07-09T01:19:00.148-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='red hat'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Oracle 10.2 on Linux x86_64</title><content type='html'>Bagaimana caranya kita install Oracle Database Server di Linux ? Jika anda berkata, masukkan DVD/CD, run installer, klik next-next-next, anda salah besar..&lt;br /&gt;Isu major: installer Oracle 10g untuk Linux tidak sadar akan semua paket sistem yang diperlukan sebelum instalasi Oracle Database. Hasilnya: ketika cek persyaratan, semua OK, tetapi installer bisa saja mandek di tengah jalan dengan error tertentu.&lt;br /&gt;Guideline : Oracle Metalink Note 169706.1 (aku tahu kode ini malah dari SAP Notes :) ). Pada Red Hat Enterprise Linux 4, atau CentOs 4, Install paket-paket berikut ini sebelum instalasi (perhatikan ada paket x86_64 maupun i386):&lt;br /&gt;# binutils-2.15.92.0.2-13.0.0.0.2.x86_64&lt;br /&gt;# compat-db-4.1.25-9.x86_64.rpm&lt;br /&gt;# compat-gcc-32-c++&lt;br /&gt;# compat-libstdc++-33-3.2.3-47.3.x86_64.rpm&lt;br /&gt;# compat-libstdc++-33-3.2.3-47.3.i386.rpm&lt;br /&gt;# control-center-2.8.0-12.x86_64.rpm&lt;br /&gt;# gcc-3.4.3-47.x86_64.rpm&lt;br /&gt;# gcc-c++-3.4.3-47.x86_64.rpm&lt;br /&gt;# glibc-2.3.4-2.9.x86_64.rpm&lt;br /&gt;# glibc-2.3.4-2.9.i386.rpm&lt;br /&gt;# glibc-common-2.3.4-2.9.x86_64.rpm&lt;br /&gt;# glibc-devel-2.3.4-2.9.x86_64.rpm&lt;br /&gt;# glibc-devel-2.3.4-2.9.i386.rpm&lt;br /&gt;# glibc-headers-2.3.4-2.9.x86_64.rpm&lt;br /&gt;# glibc-kernheaders-2.4-9.1.87.x86_64.rpm&lt;br /&gt;# gnome-libs-1.4.1.2.90-44.1.x86_64&lt;br /&gt;# libaio-0.3.103-3.i386.rpm&lt;br /&gt;# libaio-0.3.103-3.x86_64.rpm&lt;br /&gt;# libgcc-3.4.3-9.EL4&lt;br /&gt;# libstdc++-3.4.3-22.1.x86_64&lt;br /&gt;# libstdc++-devel-3.4.3-22.1.x86_64&lt;br /&gt;# make-3.80-5.x86_64.rpm&lt;br /&gt;# pdksh-5.2.14-30.x86_64.rpm&lt;br /&gt;# sysstat-5.0.5-1.x86_64.rpm&lt;br /&gt;# util-linux-2.12a-16.EL4.23.x86_64 (for raw devices)&lt;br /&gt;# xorg-x11-deprecated-libs-6.8.1-23&lt;br /&gt;# xscreensaver-4.18-5.rhel4.2.x86_64.rpm &lt;br /&gt;Gunakan yum untuk menginstall paket2 ini dari repository paket Linux yang anda gunakan. Saya sarankan Linux yg diinstall pakai distribusi Centos karena repositorynya dapat diakses dengan bebas, jika pakai Red Hat maka repositorynya tidak bebas diakses (anda harus punya support account).&lt;br /&gt;&lt;br /&gt;Sebuah saran: kalau ada paket yg terlewat, dan terjadi error, anda akan tergoda untuk menginstall paket yg terlewat tadi dan menekan tombol Retry di oracle installer. Jangan lakukan itu, pilih abort dan ulangi instalasi dari awal. &lt;br /&gt;&lt;br /&gt;Selain paket-paket, mungkin kernel parameter perlu anda ubah. Edit di /etc/sysctl.conf. Pada setting saya, ada nilai2 berikut :&lt;br /&gt;&lt;blockquote&gt;#oracle-requested params&lt;br /&gt;kernel.sem = 250 32000 100 128&lt;br /&gt;kernel.shmmax = 1073741824&lt;br /&gt;net.ipv4.ip_local_port_range = 1024 65000&lt;br /&gt;net.core.rmem_default = 262144&lt;br /&gt;net.core.rmem_max = 262144&lt;br /&gt;net.core.wmem_default = 262144&lt;br /&gt;net.core.wmem_max = 262144&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-8790878047652935908?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/8790878047652935908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=8790878047652935908' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/8790878047652935908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/8790878047652935908'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/07/oracle-102-on-linux-x8664.html' title='Oracle 10.2 on Linux x86_64'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-1080438912427717093</id><published>2009-04-09T19:05:00.001-07:00</published><updated>2009-04-09T19:05:08.546-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Human memory'/><title type='text'></title><content type='html'>Bagi orang yg telah disebut sebagai pelupa sejak sekolah dasar, tampaknya pertanyaan mendasar ini seharusnya sudah muncul sejak lama. Or is it I who doesn't remember it? &lt;br /&gt;Demo, lets think about analogies - they make things simpler. Ingatan manusia seperti layaknya storage di komputer,  memiliki kapasitas penyimpanan yang besar. Tetapi, informasi tidaklah&lt;br /&gt;hanya disimpan, ia harus bisa dicari dan dikeluarkan kembali. Indexing di komputer, adalah asosiasi di manusia. Manusia mengingat informasi berdasarkan banyak hal, apakah topik, pelaku, waktu, lokasi,  bentuk, ataupun kriteria lainnya. Di sini manusia memiliki tempat yg berbeda untuk asosiasi, dengan kapasitas yg lebih kecil daripada penyimpanan utama tadi. Ada kalanya kita bisa tiba2 teringat suatu hal, disebabkan karena kita memikirkan hal lain yg berhubungan dgn hal pertama tadi.&lt;br /&gt;Kita lupa, adalah akibat dari hilangnya asosiasi ke informasi yg tersimpan di otak. Short term memory, adalah ingatan yg terasosiasi penuh, siap dicari dgn kriteria apapun.&lt;br /&gt;Nah, supaya ingatan tetap bisa diretrieve, apa yg bisa dilakukan? Memaksimalkan memori yg bisa diakses dgn mengoptimalkan penggunaan ruang asosiasi? Mungkin, dgn informasi yg terstruktur, asosiasi yg dibutuhkan menjadi lebih sedikit, sehingga&lt;br /&gt;lebih banyak volume ingatan yg dapat diakses langsung oleh kita.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-1080438912427717093?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/1080438912427717093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=1080438912427717093' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/1080438912427717093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/1080438912427717093'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/04/bagi-orang-yg-telah-disebut-sebagai.html' title=''/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-3247870411154275494</id><published>2009-03-26T05:06:00.000-07:00</published><updated>2009-03-26T06:51:58.735-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='prevayler'/><category scheme='http://www.blogger.com/atom/ns#' term='refactoring'/><title type='text'>Software engineering</title><content type='html'>Jika pelukis membuat lukisan, penulis membuat buku, maka kami, para software engineer, writes code. Kami menulis code dalam bahasa pemrograman, sehingga muncullah software di dalam komputer yang dapat membantu manusia dalam menghadapi aktivitasnya sehari2.&lt;br /&gt;&lt;br /&gt;Suatu fakta yg signifikan, bahwa bidang ini termasuk muda dibandingkan yg lain seperti chemical engineering atau electrical engineering. Saya dulu mengira bahwa perkembangan ilmu di bidang IT atau software, dapat dengan cepat menyebar di seluruh dunia, karena pada umumnya para pelajar IT atau pekerja IT lebih sering menggunakan Internet daripada orang lain. Sehingga, begitu ada breakthrough di teknik object oriented, saya mengira bahwa dalam waktu satu dekade (10 tahun) hampir semua pekerja IT sudah mengerti teknik object oriented tersebut. Teknik yang saya maksud ialah Design Patterns, yang dipublikasikan sekitar 1995 oleh Erich Gamma (sekarang ia bekerja sebagai engineer di IBM). Ternyata, sampai sekarang pun, mayoritas pekerja IT Indonesia belum paham. Mungkin teknik ini terlalu rumit untuk diterapkan secara praktikal, atau mungkin bahwa dunia IT Indonesia tidak terlalu memerlukan object-orientation..&lt;br /&gt;&lt;br /&gt;Dan ini membawa kita ke topik yang menarik, apakah yg diperlukan bagi seorang software engineer di Indonesia? Akan saya coba brainstorming dari aktivitas sehari-hari seorang software engineer (thats me :). Sebuah hal yang cukup sering dilakukan, adalah membangun sebuah aplikasi web-based, untuk memenuhi kebutuhan pencatatan manusia, dan memberikan logika (business logic) sehingga aktivitas (transaksi) sehari-hari lebih teratur dan menaati prinsip-prinsip tertentu. Dan umumnya, setelah dicatat, ada pihak yang tertarik untuk dibuatkan laporan secara otomatis oleh komputer, sesuai dengan keperluannya saat itu.&lt;br /&gt;&lt;br /&gt;Secara teknis, pilihan kami ialah mengcoding aplikasi menggunakan bahasa pemrograman seperti PHP, Java, atau .NET. Akan tetapi, karena targetnya web-based application, kami dituntut juga untuk mengetahui HTML, bahasa yang digunakan untuk 'menggambar' layar-layar user interface yang akan dihadapi user. Untuk mempercantik tampilan, pasangan HTML adalah CSS. Kita lihat bahwa aplikasi web-based memberikan tantangan yang 'lebih' misalnya karena memberikan kita kesempatan untuk mempelajari dan menguasai 3 buah bahasa sekaligus (satu bahasa Core Logic, satu bahasa markup, satu bahasa styling)&lt;br /&gt;Kemudian, karena keperluan manusia yang dibantu komputer umumnya adalah pencatatan, maka tentunya para engineer mempraktekkan &lt;span style="font-style: italic;"&gt;best-practice&lt;/span&gt; beberapa dekade terakhir yaitu penyimpanan data di relational database management system. Kita lihat, bahwa kecenderungan terakhir ini memberikan kesempatan para engineer untuk memahami dan menguasai bahasa keempat, yaitu SQL (structured query language).&lt;br /&gt;SQL sederhana merupakan masalah sepele, tapi sebuah SQL kompleks yang terdiri dari 4 inner query, belasan kolom, dan belasan kondisi WHERE merupakan ujian kemampuan visualisasi abstrak bagi developer, dan merupakan mimpi buruk para software engineer. Beberapa pihak mendiskreditkan RDBMS dan mendorong manusia ke arah lebih civilised seperti object oriented database (atau object oriented persistence system), tetapi saya melihat bahwa kompleksitas SQL muncul karena source code yang sulit diubah dan bukan karena kelemahan konsep RDBMS.&lt;br /&gt;&lt;br /&gt;Sebuah software yang dihasilkan proses engineering, di Indonesia, pada umumnya sulit diubah karena banyak faktor:&lt;br /&gt;1. terlalu banyak duplikasi, akibatnya ketika ingin mengubah satu hal, misalnya nama kolom di suatu tabel, kita harus mengubah di banyak tempat di source code (belasan atau puluhan tempat, jika softwarenya cukup besar)&lt;br /&gt;2. terlalu rumit, sehingga untuk mengubah satu hal, membutuhkan seminggu bagi developer untuk memahami kodenya (sebelum merubah apapun)&lt;br /&gt;3. source code tidak terstruktur, menyulitkan manajemen source code, misalnya untuk mencari source code yang menangani suatu hal tertentu. Asumsi untuk faktor ini ialah kita melakukan maintenance software, tanpa developer yang membuat aplikasi pertama kali.&lt;br /&gt;&lt;br /&gt;Sebuah breakthrough lain, yang cukup signifikan dalam dekade terakhir, ialah Ruby On Rails. Sebenarnya ini merupakan sebuah 'library' dalam bahasa pemrograman Ruby. Yang membuat signifikan, ialah pembuatnya mengklaim 10x perubahan produktivitas ketika melakukan pembuatan aplikasi menggunakan Rails.  Rails bukan hanya library, tetapi merupakan framework, yang 'memaksakan' struktur tertentu pada source yang dibuat. FORTRAN juga memaksakan struktur tertentu, tapi hanya bersifat sintaksis, berbeda dengan Rails yang memaksa kita bekerja dengan konsep Model-View-Controller. MVC merupakan sebuah Architectural Design Pattern yang membuat engineer memisahkan source code menjadi tiga kelompok besar, Model, yang memuat business logic, View, yang memuat logika penampilan, dan Controller, yang memuat logika penerimaan input dari user (button ditekan, form disubmit).  Bagi saya, pemisahan MVC cuma masalah strukturisasi. Ada pula orang yang berpendapat, seharusnya kita tidak perlu mengcode V atau C, karena kedua layer ini dapat dibuat generik (lihat: Naked Objects Framework). Menurut saya, yang terpenting adalah di M-yaitu sang Domain Model. Business logic disimpan di sini, dan Rails mengadopsi konsep Active Record - yaitu mencampur business logic dengan logika persistensi (yang melakukan query ke database untuk menyimpan dan mengambil data). Bagi pembuat Hibernate, sebuah persistence framework berbasis Java, sangat penting untuk memisahkan business logic dan layanan persistensi - jadi kita lihat ada dua konsep berbeda yang berkembang belakangan ini. Saya berprinsip, tidak penting disatukan atau dipisah (seperti halnya MVC) tapi yang terpenting, seberapa mudah saya dapat melakukan perubahan pada Domain Model? Seberapa mudah saya menambahkan satu field? Seberapa sulit saya memindahkan satu property (field) dari satu model (atau entitas, atau tabel di RDBMS) ke model lainnya?&lt;br /&gt;Menurut saya, ini adalah hal yang cukup penting. Saat ini, karena sulit untuk mengubah 'model' (atau desain, atau ERD), maka developer &lt;span style="font-style: italic;"&gt;stuck&lt;/span&gt; pada model yang tidak sesuai dengan kebutuhan sebenarnya. Karena SQL, merupakan bahasa yang sangat powerful, maka aplikasi tetap dapat berfungsi dengan model data yang rancu, namun di sana-sini akan muncul banyak SQL rumit yang menyulitkan perubahan aplikasi. Padahal, perkembangan (development) itu intinya proses perubahan dari aplikasi yang belum jadi menjadi aplikasi yang siap pakai..&lt;br /&gt;&lt;br /&gt;Solusi terhadap masalah kita, sayangnya, menuntut kita berpikir mengabaikan prinsip maupun cara lama. Masalah saat ini tidak akan dapat diselesaikan dengan cara berpikir yang menyebabkan terjadinya masalah tersebut. Beberapa ide pemikir IT dekade terakhir antara lain :&lt;br /&gt;1. memindahkan business logic sepenuhnya ke aplikasi, mengurangi beban kompleksitas pada SQL, stored function, stored procedures, ataupun database triggers. Padahal, ada pekerja IT yg saat ini berprinsip untuk memaksimalkan penempatan business logic di dalam database..&lt;br /&gt;2.  desain, menjadi hal yang tidak tabu untuk dirubah.. kesederhanaan yang terjadi ketika desain berubah menjadi lebih match dengan kondisi riil lapangan, bernilai sangat tinggi - performansi aplikasi meningkat, aplikasi lebih mudah dituning, source code mudah dibaca, penambahan fungsi mudah dilakukan, dan lain-lain, semua ini worthwhile untuk ditukar dengan usaha untuk merombak source code sebagai akibat perubahan desain&lt;br /&gt;3. atau even better, buatlah sehingga merubah desain, semudah mungkin.. menggunakan framework manapun, sehingga hal ini dapat tercapai. Hibernate Persistence Framework menjanjikan para engineer mengkode SQL dengan volume jauh lebih sedikit daripada cara manual, begitu pula Ruby On Rails, CakePHP, CodeIgniter.. Prevayler Persistence Framework, di sisi lain, menjanjikan bahwa para engineer tidak perlu menulis satu barispun SQL (death to the database, they said)&lt;br /&gt;&lt;br /&gt;Kita lihat, ternyata breakthrough 'design patterns' tidaklah useless at all, karena semua framework yang dibuat sekarang, dibangun atas design pattern-design pattern.&lt;br /&gt;&lt;br /&gt;Saya belum menyinggung istilah refactoring di paragraf-paragraf di atas. Idenya ialah, kita harus bisa mengubah desain pada sebuah running application, sehingga kualitasnya meningkat, tanpa mengorbankan fungsionalitas aplikasi. Jadi mirip dengan &lt;span style="font-style: italic;"&gt;tone&lt;/span&gt; yang saya gunakan pada paragraf-paragraf di atas. Sebenarnya, mengukur kualitas software dari banyaknya duplikasi, kompleksitas source code, adalah dua dari banyak metoda yg digunakan untuk mengukur kapan kita harus melakukan refactoring. Bau di code, atau Code smells, begitu istilah Kent Beck &amp;amp; Martin Fowler, yang mereka jadikan patokan perlunya melakukan refactoring atau tidak.  Sebenarnya saya belum menerapkan satu safety net di sini - yaitu automated test. Menurut penulis buku Refactoring, automated test membuat refactoring tidak berakibat buruk bagi fungsionalitas aplikasi. Which is, unfortunately, is the very issue I am facing - tiap refactoring yang saya lakukan di aplikasi saya, membuat munculnya bug-bug yang menghantui user sampai saya perbaiki..&lt;br /&gt;&lt;br /&gt;Ok, now, menutup satu topik yang sudah saya buka, bahwa dalam menulis web based application kita harus memahami minimal 4 bahasa komputer.. Alternatifnya, kita belajar menggunakan GWT (which is, mulai populer setelah beberapa tahun hidup..) GWT membuat kita cuma coding dalam satu bahasa: Java. Ia melakukan konversi dari Java ke Javascript pada saat deployment aplikasi. Sayangnya, kita tetap harus memahami HTML dan CSS, meskipun ada abstraksi HTML yang disertakan oleh GWT sebagai kelas-kelas Java. Setidaknya satu bahasa untuk dipelajari menjadi berkurang :).  I wonder, jika Prevayler tetap dikembangkan, dan dapat  digunakan bersama GWT.. berarti kita bebas dari SQL&amp;amp; Javascript - its a totally killer concept :). Cuma tampaknya, web-based application memang akan lebih tidak menyenangkan dari pada client-server application, yang mana kita sama sekali tidak perlu tahu HTML &amp;amp; CSS, dan tidak perlu tahu perbedaan browser IE dan Firefox :).&lt;br /&gt;&lt;br /&gt;Manusia punya batas, dan mengurangi unnecessary complexity membuat kita dapat memikirkan konsep aplikasi yang lebih useful (dan tentunya.. sedikit lebih rumit)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-3247870411154275494?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/3247870411154275494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=3247870411154275494' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/3247870411154275494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/3247870411154275494'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/03/software-engineering.html' title='Software engineering'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-6914268553727548070</id><published>2009-03-02T07:19:00.000-08:00</published><updated>2009-03-02T07:53:47.554-08:00</updated><title type='text'>Inconsistent Access Control in Liferay Social Office</title><content type='html'>Beberapa hari ini cukup dipusingkan dengan Access Control di Liferay Social Office. Untuk sebuah folder di bawah Document Library, apapun Permissions yang kita set, selalu saja semua user dapat melakukan 'Add Document' atau 'Add Folder'. Kecuali kalau 'view' permission tidak kita berikan ke user, maka user tersebut tidak dapat membuka folder tersebut, apalagi Add Document atau Add Folder. Saya belum cek kalau user mengetikkan URL add document langsung (tanpa view isi foldernya lebih dahulu) tetap bisa dilakukan Add Document atau tidak. Anyway, ternyata masalahnya ada di propagasi permission dari parent folder ke subfoldernya. Semua permission yang dimiliki current user pada sebuah folder akan dipropagasikan ke subfolder di bawahnya. Perilaku Aplikasi menjadi cacat karena Community Member memiliki permission Add Document dan Add Folder pada root folder di komunitas tersebut, sementara tidak ada UI untuk merubah permission pada root folder. Hanya Permission pada folder-folder lain yang dapat diubah, lewat menu 'Action:Permissions' yang tersedia saat kita menampilkan folder tersebut sebagai isi dari folder lain.&lt;br /&gt;Solusi saat ini ialah menambahkan UI untuk mengubah permissions pada current folder yang sedang ditampilkan, sehingga pada saat menampilkan root folder, administrator dapat mengubah permissions pada root folder.&lt;br /&gt;Perubahan pada webapps\ROOT\html\portlet\document_library\view.jsp atau view.portal.jsp :&lt;br /&gt;&lt;br /&gt;(baris: 274)&lt;br /&gt;boolean showCurDocumentSearch = showFileEntriesSearch &amp;amp;&amp;amp; (results.size() &gt; 0);&lt;br /&gt;boolean showChangePermissions = DLFolderPermission.contains(permissionChecker, folder, ActionKeys.PERMISSIONS);&lt;br /&gt;%&gt;&lt;br /&gt;Tambahkan di baris 301:&lt;br /&gt;                         &amp;lt;c:if test=&amp;quot;&amp;lt;%= showChangePermissions %&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;                            &amp;lt;liferay-security:permissionsURL&lt;br /&gt;                                modelResource=&amp;quot;&amp;lt;%= DLFolder.class.getName() %&amp;gt;&amp;quot;&lt;br /&gt;                                modelResourceDescription=&amp;quot;&amp;lt;%= folder.getName() %&amp;gt;&amp;quot;&lt;br /&gt;                                resourcePrimKey=&amp;quot;&amp;lt;%= String.valueOf(folder.getFolderId()) %&amp;gt;&amp;quot;&lt;br /&gt;                                var=&amp;quot;changePermissionsURL&amp;quot;&lt;br /&gt;                            /&amp;gt;&lt;br /&gt;                            &amp;lt;liferay-ui:icon image=&amp;quot;permissions&amp;quot; url=&amp;quot;&amp;lt;%= changePermissionsURL %&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;                        &amp;lt;/c:if&amp;gt;&lt;br /&gt;&lt;br /&gt;Nah, selanjutnya, kami mengalami anomali di portlet permissions. Di Forum Liferay ada beberapa posting yang membahas kasus ketika seseorang pernah diberi akses untuk menambahkan sebuah portlet ke sebuah halaman, kemudian akses tersebut dihilangkan ketika user tersebut telah menambahkan portlet tersebut. Pada banyak kasus, user tetap dapat melihat isi dari portlet yang sudah ditambahkan meskipun hak aksesnya sudah tidak dimiliki. Ia hanya dicegah dari menambahkan portlet, dan tidak dicegah dari melihat isi portlet yang mana ia tidak lagi memiliki akses. Pada kasus kami, manifestasinya ialah kadang-kadang halaman depan user menunjukkan status denied, dan setelah beberapa kali dicoba (dengan navigasi berputar-putar ke tempat lain dahulu)  portlet-portlet di halaman depan user  tetap ditampilkan di halaman default.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-6914268553727548070?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/6914268553727548070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=6914268553727548070' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/6914268553727548070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/6914268553727548070'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/03/inconsistent-access-control-in-liferay.html' title='Inconsistent Access Control in Liferay Social Office'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-4671643009362068829</id><published>2009-02-18T22:18:00.000-08:00</published><updated>2009-02-18T23:03:53.751-08:00</updated><title type='text'>Zend Framework - what a configuration</title><content type='html'>Hari ini mencoba sesuatu yang baru. Menggunakan 3 orang berpengalaman (including.. me:) )untuk menyelesaikan satu hal sepele.. yaitu mengkonfigurasi sebuah aplikasi PHP berbasis Zend Framework sehingga bisa ditaruh di folder selain webroot. Sebenarnya, tidak ada satupun yang pernah menggunakan Zend Framework (kami terbiasa dengan CakePHP dan CodeIgniter), jadi tentunya tetap ada tantangan.&lt;br /&gt;CodeIgniter menggunakan file konfigurasi system/application/config/config.php untuk menset base_url, dan pada CodeIgniter yg kami pakai sudah ada algoritma deteksi otomatis yang berfungsi baik.&lt;br /&gt;&lt;blockquote&gt;$config['base_url'] = "http://".$_SERVER['HTTP_HOST'];&lt;br /&gt;$config['base_url'] .= preg_replace('@/+$@','',dirname($_SERVER['SCRIPT_NAME'])).'/';&lt;/blockquote&gt;Neverthless, untuk Zend tampaknya konfigurasi disimpan di file app.ini. Ternyata, agak sulit juga mencari dokumentasi tentang isi file ini. Setelah membrowsing-browsing cukup lama, kami menemukan dokumentasi fungsi setBaseUrl di FrontPageController. Pertanyaannya.. darimana ini harus disetup? Hipotesa bahwa baseUrl ini seharusnya diubah via app.ini ternyata salah, kami selanjutnya menemukan bahwa ada orang yang mengubah baseUrl di bootstrap.php.&lt;br /&gt;Dan.. setelah mengikuti itu pun.. tetap saja aplikasi merefer ke CSS dan JS yang ditulis tanpa prefix baseUrl yang baru diset..&lt;br /&gt;Penelusuran lebih lanjut, dengan lead dari seseorang dari kami yang menunjukkan bahwa kita baru menset baseUrl di controller, di mana ada kode pada view mengasumsikan keberadaan $this-&gt;baseUrl, yang mana.. ternyata bukan standar Zend Framework..&lt;br /&gt;Mengutip seorang teman yang lebih senior, ternyata embe itu bukan kuda, memang Controller dengan View itu berbeda.. (lain dengan CodeIgniter ya, di mana $this di Controller ekivalen dengan $this di View)&lt;br /&gt;Setelah browsing lebih lanjut, ketemu di blog entry &lt;a href="http://naneau.nl/2007/07/08/use-the-url-view-helper-please/"&gt;ini&lt;/a&gt; dan juga &lt;a href="http://naneau.nl/2007/09/18/the-magic-of-view-helpers/"&gt;ini&lt;/a&gt;, yang menjelaskan bahwa ini memang bukan standar Zend Framework, tapi kita dapat mensetnya di bootstrap.php (juga).&lt;br /&gt;Intinya, cara yang standard dari Zend ialah membuat view dengan kode seperti :&lt;br /&gt;&lt;blockquote&gt;    &amp;lt;a href="&amp;lt;?php echo $this-&amp;gt;url(array(&lt;br /&gt;   'controller' =&amp;gt; 'user',&lt;br /&gt;   'action' =&amp;gt; 'edit',&lt;br /&gt;   'id' =&amp;gt; '123'&lt;br /&gt;   ));?&amp;gt;"&amp;gt;click me!&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;untuk menggantikan&lt;br /&gt;&lt;blockquote&gt;&amp;lt;a href="/my_app/user/edit/id/123/"&amp;gt;click me!&amp;lt;/a&amp;gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;Tetapi ada cara yang lain (non-standard), yaitu&lt;br /&gt;&lt;blockquote&gt;&amp;lt;a href="&amp;lt;?=$this-&amp;gt;baseUrl ?&amp;gt;/user/edit/id/123/"&amp;gt;click me!&amp;lt;/a&amp;gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;Sambil menambahkan di bootstrap.php sehingga (garis besarnya) ada fragmen seperti berikut:&lt;br /&gt;&lt;blockquote&gt;$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');&lt;br /&gt;//view renderer (from the helper broker)&lt;br /&gt;if (is_null($viewRenderer-&amp;gt;view)) {&lt;br /&gt;   $viewRenderer-&amp;gt;init();&lt;br /&gt;   //force instantiation of the view&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$frontController = Zend_Controller_Front::getInstance();&lt;br /&gt;//frontcontroller&lt;br /&gt;&lt;br /&gt;//... additional front controller setup goes here ...&lt;br /&gt;&lt;br /&gt;$frontController-&amp;gt;setBaseUrl('/my_app');&lt;br /&gt;//set your base URL here&lt;br /&gt;&lt;br /&gt;$viewRenderer-&amp;gt;view-&amp;gt;baseUrl = $frontController-&amp;gt;getBaseUrl();&lt;br /&gt;//set baseUrl for views, retrieved from the front controller&lt;br /&gt;&lt;br /&gt;$response = $frontController-&amp;gt;dispatch();&lt;br /&gt;//do... something!&lt;/blockquote&gt;What a configuration. Sebetulnya kalo programmer aslinya (hiudah pakai url helper semua bakal beres. Dan ternyata, masih banyak URL yang ditulis bahkan tanpa referensi ke $this-&amp;gt;baseUrl ataupun $this-&amp;gt;url(...), yang harus ditulis ulang supaya aplikasi dapat hidup di dalam sebuah folder di bawah webroot.&lt;br /&gt;The moral is.. know your framework well.. or else you'll be shot in&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-4671643009362068829?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/4671643009362068829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=4671643009362068829' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/4671643009362068829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/4671643009362068829'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/02/zend-framework-what-configuration.html' title='Zend Framework - what a configuration'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-4646864883738696982</id><published>2009-02-18T21:01:00.000-08:00</published><updated>2009-02-18T22:17:55.323-08:00</updated><title type='text'>What? No delete event in Liferay Social Office?</title><content type='html'>A strange thing indeed, for some company to release a beta software which is not functionally complete. I always thought that a beta software is fully functional but without a production-grade stability. Of course, the software industry has its historical anti-example such as QuarkXpress (3.3 or 4, I forgot) which had an alpha release, beta release, and gamma release, before the true 'Release'.&lt;br /&gt;Liferay Social Office is a simplification of Liferay Portal, configured for optimum social interaction, and in my opinion, knowledge sharing and management. What they really do is rewrite some GUI codes so the resulting UI is not too complicated to master. But here lies the catch. You could create a new Calendar Event, but there is no user interface from where you could delete the event.&lt;br /&gt;Someone posted the question to Liferay's forums, and the question was answered with something like  &lt;blockquote&gt;.. er.. we would include the delete functionality in the next release ..&lt;/blockquote&gt;That is not an acceptable answer for me, because we were trying to use this Social Office for one of our client departments. So, for the meantime, I must be content with adding these lines :&lt;br /&gt;&lt;blockquote&gt;&amp;lt;c:if test="&amp;lt;%= CalEventPermission.contains(permissionChecker, event, ActionKeys.DELETE) %&amp;gt;"&amp;gt;&lt;br /&gt; &amp;lt;portlet:actionURL windowState="&amp;lt;%= WindowState.MAXIMIZED.toString() %&amp;gt;" var="deleteURL"&amp;gt;&lt;br /&gt;  &amp;lt;portlet:param name="struts_action" value="/calendar/edit_event" /&amp;gt;&lt;br /&gt;  &amp;lt;portlet:param name="&amp;lt;%= Constants.CMD %&amp;gt;" value="&amp;lt;%= Constants.DELETE %&amp;gt;" /&amp;gt;&lt;br /&gt;  &amp;lt;portlet:param name="redirect" value="&amp;lt;%= redirect %&amp;gt;" /&amp;gt;&lt;br /&gt;  &amp;lt;portlet:param name="eventId" value="&amp;lt;%= String.valueOf(event.getEventId()) %&amp;gt;" /&amp;gt;&lt;br /&gt; &amp;lt;/portlet:actionURL&amp;gt;&lt;br /&gt;&amp;lt;liferay-ui:icon-delete url="&amp;lt;%= deleteURL %&amp;gt;" /&amp;gt;&lt;br /&gt;&amp;lt;/c:if&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;into the webapps/ROOT/html/portlet/calendar/view_event.jsp.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-4646864883738696982?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/4646864883738696982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=4646864883738696982' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/4646864883738696982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/4646864883738696982'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/02/what-no-delete-event-in-liferay-social.html' title='What? No delete event in Liferay Social Office?'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7335438738304284149.post-7119366402598375464</id><published>2009-02-04T19:57:00.000-08:00</published><updated>2009-02-04T21:52:14.753-08:00</updated><title type='text'>Javascript Confusion</title><content type='html'>Ketika saya dulu mencoba library/framework jQuery, muncul sebuah pertanyaan, kapan kita mulai menggunakan framework/javascript library ? Kapan benefitnya melebihi costnya, misalnya pada waktu eksekusi halaman, kurva pembelajaran.. Pada saat itu performansi jQuery kurang memuaskan untuk kebutuhan kami. Namun karena ga begitu ngerti javascript juga, akhirnya dibiarkan pake jQuery :).&lt;br /&gt;Pada kesempatan berikutnya, saya dan teman saya membuat sebuah aplikasi sederhana dengan deadline yang lumayan ketat. Javascript dihindari karena belum begitu paham dan masalah cross-browser compatibility yang lumayan pelik. Tapi, pada suatu halaman, kita terpaksa menggunakan javascript untuk membuat dua buah radio group saling terkait satu sama lain, yaitu radio group kedua hanya boleh digunakan pada saat sebuah radio button tertentu di group pertama dipilih. Cuma sebuah script onclick, dan script yang dijalankan ketika halaman diload untuk mendisable radio group kedua pada awal halaman. Kenapa nggak di PHP? Takutnya kalau user mendisable javascript, dan kondisi awal halaman sudah di-disable, dia sama sekali tidak bisa memilih radio group kedua.. Biarlah aplikasi tetap berfungsi bagi user tanpa javascript, dengan degraded functionality.&lt;br /&gt;Dengan kebutuhan se-simple itu, ternyata membutuhkan berjam-jam.. dan belum bisa juga menemukan versi yang berfungsi di Internet Explorer maupun Firefox. Akhirnya, aku taruh jquery.js di folder js, dan mulai menggunakannya. Sepuluh menit pertama, sudah bisa menemukan versi yang berjalan baik di IE maupun Firefox.. Meskipun belum sepenuhnya sesuai dengan yang diharapkan. Setelah tweaking lebih lanjut, dan mencoba-coba beberapa pilihan desain (mau didisable ato dihidden ya.. :) ), akhirnya selesai.. dengan empat baris perintah jQuery :) Ya, memang satu baris jQuery itu udah bisa macam-macam.. seperti :&lt;br /&gt;&lt;blockquote&gt; $("#tanya_faskes").children().attr("disabled",true);&lt;br /&gt;&lt;/blockquote&gt;perintah satu baris ini mendisable semua children dari element dengan id 'tanya_faskes'.. Dan berfungsi untuk semua browser.&lt;br /&gt;Now, kenapa kalau di IE tulisan di daerah radio groupnya ikut di disabled .. dan kalo di Firefox tidak...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-7119366402598375464?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/7119366402598375464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=7119366402598375464' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/7119366402598375464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/7119366402598375464'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/02/javascript-confusion.html' title='Javascript Confusion'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-2734287377965648860</id><published>2009-01-29T00:31:00.000-08:00</published><updated>2009-01-29T00:51:21.074-08:00</updated><title type='text'>Guessing root causes</title><content type='html'>Ketika muncul suatu masalah, sering kita hanya dapat mengenali gejala. Dan kemudian melakukan perbaikan berdasarkan gejala tadi. Dan hanya kadang-kadang kita dapat mengenalil root cause, sehingga dapat melakukan perbaikan yang lebih menyeluruh. Seperti hari ini, seorang pengembang mengalami masalah tidak dapat melakukan pembuatan web service di sistem SAP Development. Sebelumnya, di sistem lain yang mirip sandbox, pembuatan web service ini sudah pernah dilakukan. Karena dulu sempet nulis di Wiki, saya jadi bisa ingat lagi kejadian-kejadian ketika dahulu mengaktifkan Web Service di mesin yang lama. Dan jadi ketahuan ada satu langkah yang belum dilakukan. Tetapi.. knowledge milik kita sendiri hanya bisa membantu sejauh itu, tetap belum dapat diaktifkan, si web service itu. Dari transaksi SE80, membuka function group yang tepat, kemudian klik kanan, create web service.. gagal di langkah terakhir wizard.&lt;br /&gt;Transaksi SU53, melihat event kegagalan authorization terakhir .. didapatlah authorization object yang diperlukan untuk melanjutkan step pembuatan web service. Namun setelah authorization object ini didapat, muncul kegagalan berikutnya.. dan lewat SU53 lagi, didapat satu authorization object yang lain, yang belum dimiliki user kita.&lt;br /&gt;This is getting tiresome, mengingat proses memberikan authorization object ke user harus melewati pihak lain, dan kadang-kadang harus menunggu surat-menyurat (you know, some things must be official). Akhirnya kembali ke Google, memanfaatkan pengetahuan kolektif umat manusia (ceile..). Aku mengharapkan menemukan list authorization object yang lengkap di situ. Sayangnya mr Google hanya menemukan halaman yang publik di Internet, dan tidak ada informasi definitif mengenai daftar authorization object di situ.. tapi sebuah keyword yang ultra-important di dunia SAP menarik perhatianku di antara hasil search Google : 'according to SAP Notes 913944 ...'. SAP Notes adalah elemen dari knowledge base SAP, yang hanya bisa dibuka oleh customer terdaftar SAP. Menggunakan login Bos, ke website SAP, pilih SAP notes, masukkan 913944.. voila: muncul list of authorization objects yang diperlukan untuk membuat 'Web Services Datasource'. By interpolation, object2 di situ juga akan bermanfaat kalau kita hanya ingin membuat 'Web Services'..&lt;br /&gt;Could you guess what the root cause are?&lt;br /&gt;Btw, cara-cara serupa di atas juga aku lakukan ketika mencoba memanggil SAP RFC via JCo library, dan kebetulan user yg digunakan untuk RFC tidak memiliki semua authentication objects yang diperlukan..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-2734287377965648860?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/2734287377965648860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=2734287377965648860' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/2734287377965648860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/2734287377965648860'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/01/guessing-root-causes.html' title='Guessing root causes'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-5256491274757235775</id><published>2009-01-29T00:09:00.000-08:00</published><updated>2009-01-29T00:31:27.215-08:00</updated><title type='text'>RAID5 Failure</title><content type='html'>Yak.. itu adalah problem mengerikan yang terjadi kemarin. Sebuah server yang kuinstall Centos 4.7 dan berharddisk empat buah, dipasangi RAID5, dan sudah beberapa bulan melayani kami sebagai Server Linux SAP satu-satunya yang diinstall from scratch. Di situ cuma diinstall aplikasi SAP GRC (Governance, Risk &amp;amp; Compliance) dan SAP Netweaver (+Oracle) sebagai pondasinya.&lt;br /&gt;Kemarin aku mulai menghandle masalah ini, karena penasaran (RAID5 kok bisa fail).&lt;br /&gt;Konsep RAID5 yang kupasang adalah begini: dari 4 buah hard disk, data disebar ke 4 hard disk dengan informasi pelengkap (sejenis CRC mungkin), sehingga sistem tetap berfungsi meskipun salah satu hard disk fail. Ternyata, Software RAID5 di Linux memiliki beberapa karakter:&lt;br /&gt;- ketika sedang beroperasi, dan satu dari 4 hard disk mati, sistem berubah mode operasional, dari normal mode ke degraded mode.  Transisi ini terjadi otomatis, dan mungkin kita bisa lihat di log file.&lt;br /&gt;- tetapi, ketika proses booting, salah satu dari 4 hard disk tidak bisa digunakan, sistem menolak melanjutkan booting. Mungkin idenya adalah supaya system admin mengganti dulu hard disk yang rusak sebelum melanjutkan operasional server.&lt;br /&gt;Nah sebenarnya tidak ada satupun hard disk yang mati, tetapi sistem menolak melanjutkan booting. Aku masukkan CD Centos, masuk ke rescue mode.. Lihat log kernel pakai dmesg, ternyata ada sesuatu yang tidak konsisten dengan salah satu hard disknya. Browsing di internet, orang lain menyarankan untuk memaksa RAID hidup hanya dengan 3 hard disk yang ada dan kemudian meng-add lagi hard disk ke-4 (sda2) ke dalam sistem RAID yg ada. (OK, sebetulnya komponen Software RADI bukanlah hard disk tetapi partisi, software raid yg ini dibangun dari 4 partisi di 4 hard disk berbeda).&lt;br /&gt;Langkah-langkah mdadm --assemble --run /dev/md2 /dev/sda2 /dev/sdb1 /dev/sdc1 /dev/sdd1 telah kujalankan, tetapi tetap saja si RAID tidak mau hidup. Gejalanya ialah isi /proc/mdstat yang menyatakan si-md2 ini inactive.&lt;br /&gt;Akhirnya sistem mau berfungsi setelah ditambah parameter --force. Dan ternyata, bukan hanya si sda2 yang tidak konsisten, sdb1 juga, dan --force tadi memaksa sistem mengganggap dia baik-baik saja. Setelah itu, restart, dan biarkan dia rekonstruksi..&lt;br /&gt;Sebetulnya, ini semua gara-gara kernel panic yang muncul sesekali. Dan setelah kernel panic, mungkin ada data yang belum terkirim ke harddisk-harddisk itu. Sebenernya sih ga terlalu parah kan, cuma beberapa sektor tidak sync, apalagi aku pakai ext3 yang secara default pakai journalling, tetapi metoda failsafe si RAID ini yang mencegah sistem berfungsi sampai semuanya beres (atau dianggap beres :) )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-5256491274757235775?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/5256491274757235775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=5256491274757235775' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/5256491274757235775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/5256491274757235775'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/01/raid5-failure.html' title='RAID5 Failure'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-3601658136709710858</id><published>2009-01-26T23:35:00.000-08:00</published><updated>2009-01-27T00:05:34.659-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troubleshooting'/><category scheme='http://www.blogger.com/atom/ns#' term='popup'/><category scheme='http://www.blogger.com/atom/ns#' term='ie6'/><title type='text'>Tidak bisa buka popup window di IE6</title><content type='html'>Hari ini revisit ke suatu masalah yang mungkin umum terjadi.. Yaitu instalasi Internet Explorer yang ngadat. Dulu waktu kami mroyek di Merpati, pernah kejadian seperti ini, dan kalau tidak salah kami solve dengan mengupdate service pack Windows di semua komputer OP (Planning). Tapi hari ini seorang temanku yang lain mengalami masalah yang agak berbeda, service pack nya sudah maximum, dan setelah mengalami trouble dengan IE 7 ia melakukan uninstall. Ternyata setelah uninstall, Internet Explorer (yang kini versi 6)  masih ngadat. Ia tidak mau membuka pop up window, bahkan yang dicoding tanpa JavaScript sekalipun (just a simple A HREF="_BLANK" dst..).&lt;br /&gt;Kemudian aku googling dan menemukan orang dengan masalah &lt;a href="http://www.computing.net/answers/windows-xp/unable-to-print-or-have-pop-ups-ie/171269.html"&gt;serupa&lt;/a&gt;. Meskipun masalah sebenarnya berbeda, tetapi orang ini sudah menulis semua langkah-langkah yang ia lakukan untuk meresolve masalah ini (dan gagal). Langkah terakhirnya (menginstall ulang Autodesk Trueview 2009), sama sekali tidak generik, dan tidak relevan untuk kasus ini. Untungnya, salah satu dari langkah-langkah sebelumnya berguna untuk Fino (menurutnya, langkah yang benar-benar membuat perbedaan adalah bagian regsvr32):&lt;br /&gt;- membersihkan history dan temp files (&lt;a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;296115" target="_blank"&gt;http://support.microsoft.com/defaul...&lt;/a&gt;)&lt;p&gt;- melakukan Restore/Reset Default Settings dari IE6&lt;br /&gt;&lt;/p&gt;&lt;p&gt;- Menginstall ulang IE6 berdasarkan metoda no. 4 di artikel&lt;a href="http://support.microsoft.com/kb/318378" target="_blank"&gt; http://support.microsoft.com/kb/318378&lt;/a&gt;&lt;/p&gt;- merestart print spooler&lt;br /&gt;&lt;p&gt;- menginstall ulang Java&lt;/p&gt;&lt;p&gt;- meregister ulang file-file berikut ini (lakukan di command prompt):&lt;/p&gt;&lt;p&gt;&gt; cd \windows\system32&lt;/p&gt;&lt;p&gt;&gt; regsvr32 Shdocvw.dll&lt;br /&gt;&gt; regsvr32 Shell32.dll&lt;br /&gt;&gt; regsvr32 Oleaut32.dll&lt;br /&gt;&gt; regsvr32 Actxprxy.dll&lt;br /&gt;&gt; regsvr32 Mshtml.dll&lt;br /&gt;&gt; regsvr32 Urlmon.dll&lt;/p&gt;- menscan seluruh sistem dengan dua antivirus berbeda&lt;br /&gt;&lt;br /&gt;Daftar langkah ini mungkin berguna jika ada orang yang perlu memperbaiki IE-nya yang ngadat.&lt;br /&gt;By the way, kalau masih ngadat, saya menyarankan melihat list Add-Ons di Internet Options:Manage Add-Ons, dan mulai mendisable add-ons yang tidak penting (atau bahkan menguninstall program pembawa add-ons tsb)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-3601658136709710858?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/3601658136709710858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=3601658136709710858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/3601658136709710858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/3601658136709710858'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/01/tidak-bisa-buka-popup-window-di-ie6.html' title='Tidak bisa buka popup window di IE6'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-2873251626436619406</id><published>2009-01-22T19:34:00.000-08:00</published><updated>2009-01-22T20:24:53.563-08:00</updated><title type='text'>SCP Tunneling via SSH</title><content type='html'>Beberapa minggu yang lalu aku diajari trik ini oleh neni, kayaknya sih bakal berguna untuk orang lain..&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_7GfA0ncvRRM/SXk8JELYT1I/AAAAAAAAABM/2BGPz23usts/s1600-h/winscp-1.PNG"&gt;&lt;img src="http://4.bp.blogspot.com/_7GfA0ncvRRM/SXk8JELYT1I/AAAAAAAAABM/2BGPz23usts/s320/winscp-1.PNG" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 223px;" src="http://4.bp.blogspot.com/_7GfA0ncvRRM/SXk8JELYT1I/AAAAAAAAABM/2BGPz23usts/s320/winscp-1.PNG" alt="" id="BLOGGER_PHOTO_ID_5294328963388690258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Kondisi awal: sebuah server (katakan server A) hanya bisa dihubungi lewat server B. Jika kita ingin mengakses file di server A, biasanya kita terpaksa masuk via SSH ke server B, kemudian SCP file dari server A ke server B ato sebaliknya, dan mengeditnya di server B (pakai vi.. ato pico..). Cara ini terlalu ribet untuk pengeditan sederhana.&lt;br /&gt;Solusi neni: Bukalah WinSCP (eh ternyata free ya..), kemudian setting koneksi langsung ke server A, tapi kali ini pilihlah Advanced options dan Connection:Tunnel. Di Tunneling via SSH, isi dengan informasi koneksi ke s&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7GfA0ncvRRM/SXk8QJWzabI/AAAAAAAAABU/oQtoeokJj7g/s1600-h/winscp-2.PNG"&gt;&lt;img src="http://3.bp.blogspot.com/_7GfA0ncvRRM/SXk8QJWzabI/AAAAAAAAABU/oQtoeokJj7g/s320/winscp-2.PNG" style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 226px;" src="http://3.bp.blogspot.com/_7GfA0ncvRRM/SXk8QJWzabI/AAAAAAAAABU/oQtoeokJj7g/s320/winscp-2.PNG" alt="" id="BLOGGER_PHOTO_ID_5294329085037865394" border="0" /&gt;&lt;/a&gt;erver B.&lt;br /&gt;&lt;br /&gt;Kemudian, untuk lebih nyaman lagi, gunakan Notepad++ sebagai text editor, coba pilih menu 'Preferences' dan isikan seperti pada gambar dibawah ini .&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7GfA0ncvRRM/SXlGFPchCsI/AAAAAAAAABc/Qvz4q4O73lE/s1600-h/winscp-3.PNG"&gt;&lt;img src="http://1.bp.blogspot.com/_7GfA0ncvRRM/SXlGFPchCsI/AAAAAAAAABc/Qvz4q4O73lE/s320/winscp-3.PNG" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 266px;" src="http://1.bp.blogspot.com/_7GfA0ncvRRM/SXlGFPchCsI/AAAAAAAAABc/Qvz4q4O73lE/s320/winscp-3.PNG" alt="" id="BLOGGER_PHOTO_ID_5294339892810156738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7GfA0ncvRRM/SXlGWJ3ajGI/AAAAAAAAABs/57Wdfz1byzo/s1600-h/winscp-4.PNG"&gt;&lt;img src="http://2.bp.blogspot.com/_7GfA0ncvRRM/SXlGWJ3ajGI/AAAAAAAAABs/57Wdfz1byzo/s320/winscp-4.PNG" style="cursor: pointer; width: 320px; height: 268px;" src="http://2.bp.blogspot.com/_7GfA0ncvRRM/SXlGWJ3ajGI/AAAAAAAAABs/57Wdfz1byzo/s320/winscp-4.PNG" alt="" id="BLOGGER_PHOTO_ID_5294340183370140770" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-2873251626436619406?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/2873251626436619406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=2873251626436619406' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/2873251626436619406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/2873251626436619406'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/01/scp-tunneling-via-ssh.html' title='SCP Tunneling via SSH'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7GfA0ncvRRM/SXk8JELYT1I/AAAAAAAAABM/2BGPz23usts/s72-c/winscp-1.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7335438738304284149.post-7330322445787166634</id><published>2009-01-21T05:43:00.001-08:00</published><updated>2009-01-21T06:00:14.046-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smtp'/><category scheme='http://www.blogger.com/atom/ns#' term='pear'/><title type='text'>PEAR SMTP</title><content type='html'>Hari ini aku melanjutkan apa yang dikerjakan Neni dengan PEAR::Mail di server e-recruitment (yang sebetulnya.. pekerjaan saya ya harusnya :) ). Status sebelumnya, PEAR::Mail mampu mengirim ke smtp ingoing milik telkom. Tetapi tidak dapat mengirimkan email outgoing ( ke luar telkom) karena smtp yang itu kan.. memang khusus untuk email masuk. Untuk dapat mengirimkan email keluar, kita butuh outgoing SMTP. Kalo dari dalam Telkom, tinggal pakai SMTP-nya domino, berikan authentication sesuai username &amp;amp; password dari account email internal yg dipakai. Nah, kalo dari luar..(servernya kan Internet-facing, technically dia ada di luar intranet Telkom) kita butuh outgoing SMTP yang bisa dipakai anonymously (atau kalau gak, username&amp;amp;password yg bisa dipakai untuk ngirim email). Siang ini dapat bocoran nama salah satu anonynous SMTP punya telkom yang bisa digunakan.&lt;br /&gt;Tetapi percobaan2 awal gagal terus. Ga tau kenapa. Kemudian kuaktifkan error logging PHP (lihat set_error_handler di PHP manual) dengan kode seperti ini (I hate coding without frameworks) :&lt;br /&gt;&lt;blockquote&gt;function myErrorHandler($errno, $errstr, $errfile, $errline)&lt;br /&gt;{&lt;br /&gt;   error_log("at $errfile line $errline : $errstr ($errno)\n",3,"/usr/local/apache/htdocs/erecrut/logs/log1.log");&lt;br /&gt;    return true;&lt;br /&gt;}&lt;br /&gt;$old_error_handler = set_error_handler("myErrorHandler");&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;ok.. keluar errornya cuma sedikit, dan tidak meaningful (cuma notice nggak penting yang ketangkep).&lt;br /&gt;Setelah diingat2, dulu Neni bermasalah dalam mencek error yang muncul (kalo ga salah, kadang tipenya boolean, kadang tipenya object). Dulu aku suruh ga usah dicek aja (karena ga tau cara yg benernya). Dan sekarang saatnya untuk mencari cara yang bener.. :)&lt;br /&gt;Ternyata cara error handling PEAR::Mail yg bener itu mirip seperti ini :&lt;br /&gt;&lt;blockquote&gt; $mail = $smtp-&gt;send($to, $headers, $body);             &lt;br /&gt;                        if (PEAR::isError($mail))&lt;br /&gt;                                error_log("PEAR error: ".var_export($mail,true)."\n",3,"/usr/local/apache/htdocs/erecrut/logs/pearerror.log");&lt;br /&gt;&lt;/blockquote&gt;biarkan PEAR yang meriksa itu error ato bukan. Di sini aku pakai variasi error_log yang naruh pesan ke file, dan karena ngga ngerti pathnya relatif ke mana aku pake path absolut. Soalnya directory lognya harus di- chmod o+rw dulu.&lt;br /&gt;Ternyata.. Ada error yang ditangkap file log ini.. Masalahnya ialah email kita ditolak oleh SMTP server gara2 mengirimkan SPAM. Pesannya kira2 seperti ini: 'localhost rejected because you sent SPAM emails'. Terpikir, mungkin ga ini ditolak gara-gara string nama servernya masih localhost ? Jangan2 dia mengenali komputer yang mengirim email cuma dari string nama servernya? String nama server ini dikirimkan di SMTP ketika memulai percakapan (HELO namaserver). Aku ganti nama servernya dan presto.. all is well.. :&lt;br /&gt;&lt;blockquote&gt; $smtp = Mail::factory('smtp',&lt;br /&gt;                                array ('host' =&gt; $host,&lt;br /&gt;                                        'port' =&gt; $port, 'localhost' =&gt; 'namaserver.di.sini.com'));&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-7330322445787166634?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/7330322445787166634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=7330322445787166634' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/7330322445787166634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/7330322445787166634'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/01/pear-smtp.html' title='PEAR SMTP'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-400373077029360088</id><published>2009-01-20T22:30:00.000-08:00</published><updated>2009-01-20T23:26:28.438-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='system tables'/><title type='text'>How to Recreate MySQL System Tables</title><content type='html'>You might wonder, why would I need to recreate MySQL system tables. Well, the case is that my WoS folder has gotten pretty big, and I lost my original WoS.zip file. And the website doesn't carry WoS anymore. (now its called MoWes, and for some reason I still trust the old' WoS than the MoWes).  I need to copy this to another computer, without the 270 MB-or-so MySQL datafiles. So the solution is-&gt; just copy them, excluding the data folder inside mysql folder. But the newly copied MySQL won't start. It created new datafiles all right, but it still won't start. Examining the log files, it said something about missing grant tables.&lt;br /&gt;So I added this option when starting mysql:&lt;br /&gt;&lt;blockquote&gt;bin\mysqld-nt --skip-grant-tables&lt;br /&gt;&lt;/blockquote&gt;This forced it to start even without grant tables. Now, the grant tables still must be created, and after browsing for a while I found out that we could initialize the grant tables using these scripts:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;mysql_system_tables.sql&lt;/li&gt;&lt;li&gt;mysql_system_tables_data.sql &lt;/li&gt;&lt;li&gt;fill_help_tables.sql&lt;/li&gt;&lt;/ul&gt;These files cannot be found in WoS's mysql folder. Fortunately I found them in /usr/share/mysql folder in my Ubuntu box, assuming that these files are compatible with WoS's mysql I begin running the scripts using MySQL Query Browser.&lt;br /&gt;The first run spits errors. Seems that I must manually do these before those scripts:&lt;br /&gt;&lt;blockquote&gt;create database mysql;&lt;br /&gt;use mysql;&lt;br /&gt;&lt;/blockquote&gt;Then I retried running mysql_system_tables, then all the other scripts. After restarting the mysql server, all seems to be working correctly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-400373077029360088?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/400373077029360088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=400373077029360088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/400373077029360088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/400373077029360088'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/01/how-to-recreate-mysql-system-tables.html' title='How to Recreate MySQL System Tables'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-3208820249734140670</id><published>2009-01-20T20:09:00.000-08:00</published><updated>2009-01-20T20:28:37.382-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='ldap'/><category scheme='http://www.blogger.com/atom/ns#' term='oci8'/><title type='text'>PHP modules' DLL hell</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7GfA0ncvRRM/SXajz9MuYsI/AAAAAAAAABE/ltbbb0h0XzU/s1600-h/php_oci8_problem.PNG"&gt;&lt;img src="http://2.bp.blogspot.com/_7GfA0ncvRRM/SXajz9MuYsI/AAAAAAAAABE/ltbbb0h0XzU/s320/php_oci8_problem.PNG" style="margin: 0px auto 10px; display: block; text-align: right; cursor: pointer; width: 320px; height: 186px;" src="http://2.bp.blogspot.com/_7GfA0ncvRRM/SXajz9MuYsI/AAAAAAAAABE/ltbbb0h0XzU/s320/php_oci8_problem.PNG" alt="" id="BLOGGER_PHOTO_ID_5293598525017187010" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In Windows platform, the webserver package of my choice is MoWes (mobile webserver). In the past it is called WoS (Webserver on a stick). We just copy the folder from one computer to another, and run its exe-file, instantly we have a Apache - MySQL - PHP triad running without any installation hassles.&lt;br /&gt;But recently, I copied the MoWes onto two servers, and I cant seem to load both PHP_OCI8 and PHP_LDAP modules. After a few wrong turns, finally I used Microsoft Visual Studio's Dependency Walker tool. And voila - both of the DLL's problems were shown before my eyes.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_7GfA0ncvRRM/SXaiEEK3YUI/AAAAAAAAAAU/hbo-zDfm2jw/s1600-h/php_ldap_problem.PNG"&gt;&lt;img src="http://4.bp.blogspot.com/_7GfA0ncvRRM/SXaiEEK3YUI/AAAAAAAAAAU/hbo-zDfm2jw/s320/php_ldap_problem.PNG" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 187px;" src="http://4.bp.blogspot.com/_7GfA0ncvRRM/SXaiEEK3YUI/AAAAAAAAAAU/hbo-zDfm2jw/s320/php_ldap_problem.PNG" alt="" id="BLOGGER_PHOTO_ID_5293596602743087426" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;PHP_LDAP's problem was SSLEAY not installed.  PHP_OCI8's problem was that the OCI.DLL is in the AMD 64-bit architecture (equivalent to Intel EM64T architecture) while the php/apache system is in 32-bit architecture. Now, where did I keep the downloaded the oracle instant client for win32..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-3208820249734140670?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/3208820249734140670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=3208820249734140670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/3208820249734140670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/3208820249734140670'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/01/php-modules-dll-hell.html' title='PHP modules&apos; DLL hell'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_7GfA0ncvRRM/SXajz9MuYsI/AAAAAAAAABE/ltbbb0h0XzU/s72-c/php_oci8_problem.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7335438738304284149.post-2778652685838120636</id><published>2009-01-06T03:46:00.000-08:00</published><updated>2009-01-06T17:24:02.206-08:00</updated><title type='text'>Strange Oracle Problems: Oracle database won't start</title><content type='html'>One of the desktops in my office is being used as a Server. It has Quad-core AMD Phenom X4, and 4 hard drives in Linux Software RAID 5 Configuration (Ok, it is a strange beast, because I was the one who chose the components and bought the system). We installed Centos 4.7 (64-bit), Oracle 10g, and SAP Netweaver. It is very much a hassle to set up, the 64-bit Oracle. But recently a strange error pops up when starting the Oracle database. It says, the shared_pool_reserved_size is out-of-bound (too large). The current setting is about 100 MB.  At first, I wonders is this related to problems occured before, because the mixups between 64-bit and 32-bit parts of the Oracle RDBMS. I thought, the valid range of shared_pool_reserved_size is determined by the architecture (that is-64 or 32 bit).&lt;br /&gt;Then, after some readings and pondering, I found out that not the shared_pool_reserved_size that was incorrect, it was the shared_pool. And it has nothing to do with the 64-bit architecture. Current setting of shared_pool is at 157MB, and shared_pool_reserved_size is only allowed from min_reserved_size to 0.5*shared_pool. The correct shared_pool setting is 1570MB (1.5 GB), and some mishaps make one of the numbers truncated..&lt;br /&gt;Learnt some new Oracle commands while fixing this issue.. these could be run even when the database is idle (not mounted, not started).&lt;br /&gt;/home/oraac1&gt;sqlplus /nolog&lt;br /&gt;&gt;CONNECT / AS SYSDBA;&lt;br /&gt;&gt;CREATE PFILE FROM SPFILE;&lt;br /&gt;This command creates a text-based parameter file from the existing binary parameter file.   Which file? The default one. This would differ between systems, but I bet the default one is the one thats being used to start the Oracle RDBMS in normal conditions. In my windows Oracle XE, this is C:\oraclexe\app\oracle\product\10.2.0\server\dbs\SPFILEXE.ORA. In the Linux Oracle, this is /oracle/AC1/102_64/dbs/spfileAC1.ora,  and the created text-based parameter file would be /oracle/AC1/102_64/dbs/initAC1.ora.&lt;br /&gt;After the text-based PFILE was created, I just correct the shared_pool line (add another 0 in the end). Then..&lt;br /&gt;&gt;CREATE SPFILE FROM PFILE;&lt;br /&gt;This command creates a binary startup parameter file from the existing text parameter file. Similar to the previous one, this also refers to default parameter files.&lt;br /&gt;ok.. that done, I just need to start the whole SAP-Oracle system using startsap, and all is well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-2778652685838120636?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/2778652685838120636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=2778652685838120636' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/2778652685838120636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/2778652685838120636'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/01/strange-oracle-problems-oracle-database.html' title='Strange Oracle Problems: Oracle database won&apos;t start'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-8844989648483030699</id><published>2009-01-06T03:02:00.000-08:00</published><updated>2009-01-06T03:46:36.834-08:00</updated><title type='text'>MySQL &amp; Oracle back-and-forth</title><content type='html'>Do you know that Oracle database could be migrated into MySQL database, and vice-versa? Use Oracle's Schema Migration functionality in the free Oracle SQLDeveloper to migrate from MySQL to Oracle, use MySQL Migration Toolkit to migrate from Oracle to MySQL.&lt;br /&gt;&lt;br /&gt;Hint: it is easier to migrate from Oracle to MySQL, than from MySQL to Oracle.. but it is also easier than migrating from Oracle 10g to Oracle 9.2..&lt;br /&gt;&lt;br /&gt;If anyone interest, I could post the details..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-8844989648483030699?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/8844989648483030699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=8844989648483030699' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/8844989648483030699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/8844989648483030699'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2009/01/mysql-oracle-back-and-forth.html' title='MySQL &amp; Oracle back-and-forth'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-3198703903344162553</id><published>2008-12-20T10:24:00.000-08:00</published><updated>2008-12-20T11:24:49.531-08:00</updated><title type='text'>Vermiform Appendix</title><content type='html'>Usus buntu, istilah resminya 'Vermiform Appendix', adalah sebuah silinder dengan satu ujung tertutup yang menempel pada usus. Kegunaanya ialah:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;sebagai organ limfatik, mengandung sel-sel limfoid yang aktif menyerang infeksi (&lt;a href="http://www.sciam.com/article.cfm?id=what-is-the-function-of-t"&gt;Scientific American.com&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;menyimpan bakteri berguna yang dibutuhkan oleh sistem pencernaan manusia, pada saat terjadi serangan kolera/disentri (&lt;a href="http://www.msnbc.msn.com/id/21153898/"&gt;MSNBC.com&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;dapat digunakan dalam operasi/prosedur Mitrofanoff, yaitu operasi pada orang yang memiliki kasus neurogenik bladder (tidak dapat mengendalikan urinasi) sehingga kateter dapat dioperasikan sendiri (&lt;a href="http://www.brazjurol.com.br/january_february_2003/Baskin_ing_53_61.htm"&gt;Mingin &amp;amp; Baskin&lt;/a&gt;)&lt;/li&gt;&lt;/ol&gt;Memang, infeksi pada usus buntu dapat berakibat fatal. Sehingga tenaga medis lebih suka menganjurkan pengambilan usus buntu (appendectomy), jika diketahui terjadi infeksi. Hari Sabtu kemarin, adikku dioperasi usus buntunya. Pada saat operasi, dokter menemukan bahwa ada kista (di ovarium? atau rahim? entah), sehingga operasi dilanjutkan dengan menunggu ginekolog mengangkat kista tersebut.&lt;br /&gt;Bapak kami bercerita bahwa kesimpulan bahwa ada masalah di usus buntu diambil setelah dilakukan appendigram yang menunjukkan bahwa cairan &lt;span style="font-style: italic;"&gt;trace&lt;/span&gt; yang diminum tidak teramati di dalam usus buntu. Dalam sebuah artikel &lt;a href="http://www.talkorigins.org/faqs/vestiges/appendix.html"&gt;pro-evolusi&lt;/a&gt; dikatakan bahwa "The small opening to the &lt;b style="color: black; background-color: rgb(160, 255, 255);"&gt;appendix&lt;/b&gt; eventually &lt;b style="color: black; background-color: rgb(153, 255, 153);"&gt;closes&lt;/b&gt; in most people by middle age" - jadi kalau celah menuju usus buntu itu menutup, bagaimana caranya cairan &lt;span style="font-style: italic;"&gt;trace &lt;/span&gt;masuk ke usus buntu.. ?&lt;br /&gt;&lt;br /&gt;Buat saya, kesimpulan yang bisa ditarik ialah:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;lebih baik cepat dan benar, daripada lambat dan benar, daripada cepat dan salah.. dan dalam urutan tersebut.. Sorry Mr Mario Teguh for this one, I HAVE to disagree with you.. &lt;span style="font-style: italic;"&gt;I hope you never get a chance to motivate our medical professionals&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;kedokteran indonesia &lt;span style="font-style: italic;"&gt;lives in the past&lt;/span&gt;.  Menurut Loren G. Martin di &lt;a href="http://www.sciam.com/article.cfm?id=what-is-the-function-of-t"&gt;sciam.com&lt;/a&gt;,&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;"In the past, the appendix was often routinely removed and discarded during other abdominal surgeries to prevent any possibility of a later attack of appendicitis; the appendix is now spared in case it is needed later for reconstructive surgery if the urinary bladder is removed. In such surgery, a section of the intestine is formed into a replacement bladder, and the appendix is used to re-create a 'sphincter muscle' so that the patient remains continent (able to retain urine). In addition, the appendix has been successfully fashioned into a makeshift replacement for a diseased ureter, allowing urine to flow from the kidneys to the bladder. As a result, the appendix, once regarded as a nonfunctional tissue, is now regarded as an important 'back-up' that can be used in a variety of reconstructive surgical techniques. It is no longer routinely removed and discarded if it is healthy.&lt;/blockquote&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;di era internet, carilah informasi medis pada setiap kesempatan yang ada. You'll need it - dokter-dokter Indonesia terlalu sibuk dalam kegiatan prakteknya masing-masing untuk mengikuti perkembangan zaman (incidentally, begitu pula banyak programmer-programmer dan analyst  di  Software House yang memiliki banyak project, kadang-kadang tidak dapat mengikuti perkembangan masa, tetapi tentunya &lt;span style="font-style: italic;"&gt;lack of knowledge&lt;/span&gt; dalam pembuatan sistem accounting akan memiliki resiko lebih tidak fatal daripada &lt;span style="font-style: italic;"&gt;lack of knowledge&lt;/span&gt; dalam melakukan treatment atas penyakit manusia..)&lt;/li&gt;&lt;/ul&gt;I hope my sister will get well soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-3198703903344162553?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/3198703903344162553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=3198703903344162553' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/3198703903344162553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/3198703903344162553'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2008/12/vermiform-appendix.html' title='Vermiform Appendix'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-686375345169220188</id><published>2008-11-13T15:12:00.000-08:00</published><updated>2008-11-13T15:21:01.566-08:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size:78%;"&gt;&lt;span style="font-family: courier new;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family: arial;"&gt;I'm installing Liferay 5.1.2, bundled with Jetty Servlet Container (Lightweight application server, you might say), in a Windows XP laptop. Unfortunately these errors showed up:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mbeanServer' defined in class path resource [META-INF/management-spring.xml]: Invocation of init method failed; nested exception is java.lang.LinkageError: loader constraint violation: when resolving method "java.lang.management.ManagementFactory.getPlatformMBeanServer()Ljavax/management/MBeanServer;" the class loader (instance of org/mortbay/http/ContextLoader) of the current class, org/springframework/jmx/support/JmxUtils, and the class loader (instance of &lt;bootloader&gt;) for resolved class, java/lang/management/ManagementFactory, have different Class objects for the type javax/management/MBeanServer used in the signature&lt;br /&gt;....   &lt;br /&gt;Caused by: java.lang.LinkageError: loader constraint violation: when resolving method "java.lang.management.ManagementFactory.getPlatformMBeanServer()Ljavax/management/MBeanServer;" the class loader (instance of org/mortbay/http/ContextLoader) of the current class, org/springframework/jmx/support/JmxUtils, and the class loader (instance of &lt;bootloader&gt;) for resolved class, java/lang/management/ManagementFactory, have different Class objects for the type javax/management/MBeanServer used in the signature&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family: arial;"&gt;I resolve this by removing mx4j.jar in \liferay-portal-jetty-5.1.2\webapps\root\WEB-INF\lib. Seems that the problem is similar to the problem in this &lt;a href="http://ryan.chichirico.com/blog/?p=31"&gt;post.&lt;/a&gt; The case is that the Java 6's JRE already contains javax.management.MBeanServer interface class, and conflicts with mx4j.jar which are supplied for those who still use elder JRE/JDK which doesn't contain the MBeanServer interface class.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-686375345169220188?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/686375345169220188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=686375345169220188' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/686375345169220188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/686375345169220188'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2008/11/im-installing-liferay-5.html' title=''/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-533042367793037629</id><published>2008-09-12T22:58:00.000-07:00</published><updated>2008-09-13T00:01:04.748-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='glassfish'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Beware: Your App Server is NOT plug-and-play</title><content type='html'>Recently, I tried to build a simple application with a somewhat curious architecture: this web application forwards the request from user to a message queue, and another application reads from the message queue, executing an insert sql statement for each message. Netbeans 6.5 beta comes with Glassfish v2 Application Server, which is essentially a Sun Java Application Server 9.1-something with its JMS Message Queue implementation and database connection pool. With its default configuration, I created a JDBC connection to an Oracle Express 10g database,  and  also its connection pool. The first application is a JSF application, sending a JMS message to the JMS message queue. The second app is an EJB app, consisting a single message driven bean. Naturally the app server pools this bean too.&lt;br /&gt;Ok, during manual application testing, all works well. During automated testing using ab (ApacheBench), things starts to get strange aft er more than 10 concurrent connections.   With 50 concurrent connections, about 400 row from total of 2000 rows were missing.&lt;br /&gt;The JDBC Connection pool is set to 32 connections, meanwhile the Oracle database allows only 20 or so connections. OK, I set the connection pool to 20 connections.&lt;br /&gt; Now, there are still missing rows, and the server's log indicates message beans that cannot obtain connection resources.  I'm reducing the message bean pool too - but still have missing rows.&lt;br /&gt;I always thought that wrong pool size could affect performance, but wouldn't affect systems correct operation -- this case clearly demonstrated the opposite.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-533042367793037629?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/533042367793037629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=533042367793037629' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/533042367793037629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/533042367793037629'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2008/09/beware-your-app-server-is-not-plug-and.html' title='Beware: Your App Server is NOT plug-and-play'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-8323538604044804245</id><published>2008-09-11T20:44:00.000-07:00</published><updated>2008-10-15T21:21:08.451-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ebox'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='ldap'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>integrasi ebox-usersandgroups dgn Apache-Subversion</title><content type='html'>&lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;adalah&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;sebuah&lt;/span&gt; source control system yang &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;dapat&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;menyimpan&lt;/span&gt; file &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;apapun&lt;/span&gt;. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Prinsip&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;kerjanya&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;lebih&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;mirip&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;CVS&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;daripada&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;SourceSafe&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;dan&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;memang&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;merupakan&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;hasil&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;pengembangan&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;orang&lt;/span&gt;-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;orang&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;yg&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;ingin&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;memperbaiki&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;CVS&lt;/span&gt;. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;Dalam&lt;/span&gt; Subversion, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;kita&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;dapat&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;menyimpan&lt;/span&gt; file source code &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;ataupun&lt;/span&gt; binary (file &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;PHP&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;atau&lt;/span&gt; file Excel, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;misalnya&lt;/span&gt;), &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;memberi&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;akses&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;terpusat&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;ke&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;banyak&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;orang&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;ke&lt;/span&gt; file &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;tersebut&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;memberi&lt;/span&gt; access control (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;siapa&lt;/span&gt; yang &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;boleh&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;menulis&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;siapa&lt;/span&gt; yang &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_44"&gt;hanya&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_45"&gt;dapat&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;membaca&lt;/span&gt;), &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47"&gt;mencatat&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_48"&gt;tiap&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_49"&gt;versi&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_50"&gt;dari&lt;/span&gt; file (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_51"&gt;sehingga&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_52"&gt;ada&lt;/span&gt; history/log &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_53"&gt;revisi&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_54"&gt;tiap&lt;/span&gt; file, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_55"&gt;diubah&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_56"&gt;oleh&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_57"&gt;siapa&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_58"&gt;kapan&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_59"&gt;dan&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_60"&gt;apa&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_61"&gt;pesan&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_62"&gt;perubahannya&lt;/span&gt;).&lt;br /&gt;Subversion &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_63"&gt;memiliki&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_64"&gt;fitur&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_65"&gt;integrasi&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_66"&gt;dengan&lt;/span&gt; Apache Web Server, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_67"&gt;sehingga&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_68"&gt;kita&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_69"&gt;dapat&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_70"&gt;memanfaatkan&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_71"&gt;salah&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_72"&gt;satu&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_73"&gt;dari&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_74"&gt;metoda&lt;/span&gt; authentication yang &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_75"&gt;tersedia&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_76"&gt;bagi&lt;/span&gt; Apache, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_77"&gt;dan&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_78"&gt;memungkinkan&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_79"&gt;akses&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_80"&gt;ke&lt;/span&gt; repository &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_81"&gt;menggunakan&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_82"&gt;protokol&lt;/span&gt; HTTP. Ya &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_83"&gt;benar&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_84"&gt;bisa&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_85"&gt;diakses&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_86"&gt;dengan&lt;/span&gt; web browser, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_87"&gt;tapi&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_88"&gt;hanya&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_89"&gt;akses&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_90"&gt;dasar&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_91"&gt;saja&lt;/span&gt; yang &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_92"&gt;dapat&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_93"&gt;dilakukan&lt;/span&gt;. Ia &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_94"&gt;juga&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_95"&gt;mendukung&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_96"&gt;protokol&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_97"&gt;WebDAV&lt;/span&gt; - yang &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_98"&gt;memungkinkan&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_99"&gt;kita&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_100"&gt;mengakses&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_101"&gt;menggunakan&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_102"&gt;macam&lt;/span&gt;-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_103"&gt;macam&lt;/span&gt; software &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_104"&gt;seperti&lt;/span&gt; Windows Explorer, Microsoft Excel, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_105"&gt;Frontpage&lt;/span&gt;. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_106"&gt;Untuk&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_107"&gt;mendapatkan&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_108"&gt;fitur&lt;/span&gt; yang &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_109"&gt;lengkap&lt;/span&gt;, Subversion repository &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_110"&gt;dapat&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_111"&gt;diakses&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_112"&gt;menggunakan&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_113"&gt;SVN&lt;/span&gt; Client &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_114"&gt;seperti&lt;/span&gt; &lt;a href="http://tortoisesvn.tigris.org/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_115"&gt;TortoiseSVN&lt;/span&gt;&lt;/a&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_116"&gt;atau&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_117"&gt;plugin&lt;/span&gt; &lt;a href="http://subclipse.tigris.org/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_118"&gt;subclipse&lt;/span&gt;.&lt;/a&gt;&lt;br /&gt;Tadinya, saya gunakan metoda authentication dan access control yang berbasis file teks. Satu file merupakan output htpasswd, yang berisi username dan md5 hash, file yang lain ialah ACL untuk repository tersebut. Meskipun praktis, tetapi proses penambahan user tidak dapat dilakukan oleh orang yang awam.&lt;br /&gt;OK, misalkan kita tidak butuh ACL per direktori, cukuplah ACL per repository. Ada opsi lain yaitu menggunakan autentikasi dan otorisasi LDAP, di mana Apache akan menghubungi server LDAP yang kita tunjuk untuk melakukan autentikasi dan otorisasi. Dan jika kita gunakan OpenLDAP di server yang sama, kita dapat menggunakan &lt;a href="http://ebox-platform.com/"&gt;ebox&lt;/a&gt; - sebuah web-based GUI untuk melakukan administrasi server, termasuk memanage user &amp;amp; group di OpenLDAP server.&lt;br /&gt;Saya menginstall package ebox &amp;amp; ebox-usersandgroups di sebuah VMWare Image Ubuntu Hardy. Btw, package ebox yang digunakan diambil dari situs di luar Ubuntu Package Repository - tambahkan ini di /etc/apt/sources.list anda:&lt;br /&gt; &lt;blockquote style="font-family: courier new;"&gt;deb http://ppa.launchpad.net/juruen/ubuntu hardy main&lt;/blockquote&gt;Persiapkan sebuah repository di /var/lib/svn :&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;sudo su&lt;br /&gt;cd /var/lib&lt;br /&gt;mkdir svn&lt;br /&gt;svnadmin create svn&lt;br /&gt;chown -R www-data:www-data svn&lt;br /&gt;&lt;/blockquote&gt; Kemudian, modul user and groups diaktifkan(lewat https interface-nya ebox). Berikutnya, lewat https interface pula, buat group reader dan writer. Kita dapat membuat user baru, mengassign user ke kedua group tersebut.&lt;br /&gt;&lt;br /&gt;Tambahkan isi berikut ini ke /etc/apache2/conf.d/svn-repository.conf (buat file baru):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;location /svnrepo&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Dav svn&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;AuthType Basic&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;AuthName "SVN repository"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;AuthBasicProvider ldap&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SVNPath /var/lib/svn&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;AuthLDAPURL "ldap://127.0.0.1:389/dc=ebox"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;AuthLDAPGroupAttribute memberUid&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;AuthLDAPGroupAttributeIsDN off&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;limitexcept GET PROPFIND OPTIONS REPORT&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Require ldap-group cn=writers,ou=Groups,dc=ebox&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;/limitexcept&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;limit &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;GET PROPFIND OPTIONS REPORT&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Require ldap-group cn=writers,ou=Groups,dc=ebox&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Require ldap-group cn=readers,ou=Groups,dc=ebox&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;/limit&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SVNAutoversioning on&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;/location&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Restart Apache Service setelah mensave file ini.&lt;br /&gt;That's all...&lt;br /&gt;I hope it works for you too ..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-8323538604044804245?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/8323538604044804245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=8323538604044804245' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/8323538604044804245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/8323538604044804245'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2008/09/integrasi-ebox-usersandgroups-dgn.html' title='integrasi ebox-usersandgroups dgn Apache-Subversion'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-7512071027566761040</id><published>2008-07-06T21:24:00.000-07:00</published><updated>2008-07-07T01:05:41.051-07:00</updated><title type='text'>Complexity of Software (1)</title><content type='html'>&lt;blockquote&gt;&lt;/blockquote&gt;One big issue about today's software is its complexity. Today's software is so complex - in the other hand, it doesn't need to be that complex.&lt;br /&gt;&lt;blockquote&gt;I can only speculate why our industry fails to give users what the clearly need and want.&lt;br /&gt;There could be reasons related to organizational culture, or they could be related to certain software business models.&lt;br /&gt;A widespread myth is that current software is inherently complex; so complex that ordinary people cannot possibly understand it and that it is only reasonable to expect flaws.&lt;br /&gt;&lt;br /&gt;Consider a forest with birds singing in the trees and flowers covering its floor. We can easily walk along its paths or you can be adventurous and make your own paths. We can select any aspect of its complex ecosystem and study it for your doctoral thesis. There is unlimited complexity, yet any human can master it to suit his or her purposes. There is no reason why a computer system should be more complex than a forest. I believe that the current complexity is man-made, and that we can resolve it by changing our approach to software development. We merely need to get our priorities right and create the appropriate tools. If we decide to build systems for people, then we will get systems that can be mastered by people.&lt;br /&gt;&lt;br /&gt;- June 2004, Trygve Reenskaug (founder of MVC paradigm)&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-7512071027566761040?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/7512071027566761040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=7512071027566761040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/7512071027566761040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/7512071027566761040'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2008/07/complexity-of-software-1.html' title='Complexity of Software (1)'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-3781708168441683209</id><published>2008-05-19T18:18:00.000-07:00</published><updated>2008-05-19T18:31:05.428-07:00</updated><title type='text'>OpenOffice problems</title><content type='html'>Aku membuat dokumen menggunakan OpenOffice.org Writer (Open Office 2.3),  formatnya .odt. Ketika di export jadi PDF, angka-angka dalam gambar di dalamnya berubah jadi angka arab (Arabic numerals). Setelah upgrade ke OpenOffice 2.4, angka-angka itu kembali normal.&lt;br /&gt;&lt;br /&gt;Karena bosku pakai Microsoft Office, supaya dia bisa membuka dokumen itu aku save sebagai .doc.&lt;br /&gt;Ternyata, table of contentsnya jadi kacau (formatnya berantakan), lalu judul (Heading 1) juga berantakan. Setelah bolak-balik eksperimen, Table Of Contentsnya bisa dibereskan dengan menghapus semua tab stop di style Contents 1, Contents 2, dst yg digunakan sebagai isi ToC. Heading yang berantakan ternyata gara-gara Heading itu mendapat tambahan formatting berupa left indent dan first line indent, dengan mengembalikannya ke format sesuai asli dari stylenya (apply style sekali lagi, meskipun tidak ada hasil yang tampak di .odtnya), hasil save sebagai .doc menjadi sama rapihnya dengan dokumen asli dalam .odt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-3781708168441683209?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/3781708168441683209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=3781708168441683209' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/3781708168441683209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/3781708168441683209'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2008/05/openoffice-problems.html' title='OpenOffice problems'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-6457298286970378173</id><published>2008-05-01T18:59:00.000-07:00</published><updated>2008-05-01T22:38:35.393-07:00</updated><title type='text'>Mumet nginstall eeePC</title><content type='html'>Karena ada sebuah project, maka saya dipinjami sebuah eeePC. Konon software yg saya buat hendak disimpan di situ, sehingga setelah saya beres tim lain tinggal melakukan antarmuka ke eeePC tersebut.&lt;br /&gt;Nah.. eeePC-nya ga punya bluetooth ataupun modem (jadi ga bisa pake telkomnet instan, ga bisa pake handphone ku..) Aku install Kubuntu 7.04 menggunakan USB yg bootable.&lt;br /&gt;&lt;br /&gt;Ternyata.. package yg kubutuhkan lebih dari standard install. Tadinya aku mengcopy-copy file debian package (.deb) dari /var/cache/apt/archives hasil install di Ubuntu yg hidup di dalam VMware Player di laptop (wuih.. panjang juga kalimatnya). Setelah capek ngopy2, maka cari2 cara lain.&lt;br /&gt;Karena modem HSDPA ZTE milik kantor istriku lagi ada di rumah, pertama nyoba koneksi dengan modem itu (USB interface). Setelah habis beberapa jam dengan ngikutin http://blog.ufsoft.org/2007/11/30/zte-mf622-usb-modem-under-linux dan http://ex3me.org/2008/04/20/menginstall-zte-mf622-usb-modem-di-linux-ubuntu/&lt;br /&gt;(mungkin karena pusing aja ya.. entah) akhirnya saya menyerah.&lt;br /&gt;Terus nyoba menghubungkan Sony Ericsson K618i menggunakan kabel USB.. ternyata langsung kedetect, jadi modem di /dev/ttyACM0. (kok tadi ga inget bahwa selain bluetooth bisa pake kabel USB ya.. udah pikun..).&lt;br /&gt;OK kupikir semua udah beres.. kalo download tinggal pake SE K618i itu dan kartu IM3ku..&lt;br /&gt;Ternyata ditengah-tengah download mysql-server-5.0, pulsaku habis.&lt;br /&gt;Uang di tangan cuman 20 ribuan, kagok kalo buat beli pulsa semua. Tadinya mau kusuruh istriku ngambil ke ATM (mau sekalian beli kukusan katanya), tapi ternyata hujan besar. Takut apa-apa di jalan, tidak jadi.&lt;br /&gt;&lt;br /&gt;Di antara percobaan install tersebut (lupa persisnya kapan) saya berhasil menginstall driver madwifi untuk modul wirelessnya.  Kemudian setelah berhasil menbuat eeePC itu jadi Access Point, terbersit ide untuk menggunakan Internet Connection Sharing windows XP untuk menghubungkan eeePC dengan laptop, yg mana terhubung ke telkomnet instan.. Akhirnya pake jasa Telkom juga..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-6457298286970378173?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/6457298286970378173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=6457298286970378173' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/6457298286970378173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/6457298286970378173'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2008/05/mumet-nginstall-eeepc.html' title='Mumet nginstall eeePC'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7335438738304284149.post-398044688262510591</id><published>2008-05-01T18:20:00.000-07:00</published><updated>2008-05-01T18:46:09.144-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eeePC'/><category scheme='http://www.blogger.com/atom/ns#' term='feisty'/><category scheme='http://www.blogger.com/atom/ns#' term='asus'/><category scheme='http://www.blogger.com/atom/ns#' term='acer'/><category scheme='http://www.blogger.com/atom/ns#' term='atheros'/><category scheme='http://www.blogger.com/atom/ns#' term='wifi'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='hardy'/><title type='text'>Using Atheros WiFi in Ubuntu</title><content type='html'>One of the thing that the Ubuntu lacked is a driver for my Atheros WiFi in my Acer laptop.&lt;br /&gt;Recently I've been trying to make use of an Asus eeePC, which also had an Atheros WiFi. To my surprise, its WiFi is operational when booting from Xandros (eeePC customized, and debian OS-based).  But Xandros is too much watered down for my usage (I need to install development environment for libsnmp9 and also need a working mysql server), so I'm installing Ubuntu in a Maxtor Basics Portable drive. Actually I installed a Kubuntu 7.04 Feisty Fawn, with KDE instead of Gnome desktop, but it shouldn't matter much (I hope.. thats the only installer I got back home). Reading this wiki article about &lt;a href="https://help.ubuntu.com/community/EeePC"&gt;Installing Ubuntu in eeePC&lt;/a&gt;,  finally I found that madwifi is the solution.&lt;br /&gt;To quote the steps :&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;sudo apt-get install build-essential&lt;br /&gt;wget http://snapshots.madwifi.org/special/madwifi-ng-r2756+ar5007.tar.gz&lt;br /&gt;tar zxvf madwifi-ng-r2756+ar5007.tar.gz&lt;br /&gt;cd madwifi-ng-r2756+ar5007&lt;br /&gt;make clean&lt;br /&gt;make&lt;br /&gt;sudo make install&lt;br /&gt;reboot&lt;/pre&gt;&lt;/blockquote&gt;Seems that the madwifi driver that works must be obtained from the snapshots site. I don't want to experiment using other version of the driver, so I use that version of the snapshot too.&lt;br /&gt;But.. there is no wireless Access Point in my home. I must set up an ad-Hoc connection. Fiddling with &lt;blockquote&gt;iwconfig ath0 mode Ad-Hoc&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;causes an error message. I began to wonder how I'm going to test the wifi driver, but browsing around for some time (hours? cant recall) then I found that the wifi interface's configuration can only be changed using wlanconfig&lt;br /&gt;&lt;blockquote&gt;wlanconfig ath0 destroy&lt;br /&gt;wlanconfig ath0 create wlandev wifi0 wlanmode ap&lt;br /&gt;iwconfig ath0 essid ABCD&lt;br /&gt;iwconfig ath0 nickname ABCD&lt;br /&gt;iwconfig ath0 channel 6&lt;br /&gt;ifconfig ath0 192.168.0.1&lt;br /&gt;ifconfig ath0 down&lt;br /&gt;ifconfig ath0 up&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Now I got something better than an Ad-Hoc connection -- My Own  WiFi Access Point ! :))&lt;br /&gt;Funny, in the past I was complaining that I got an Atheros in the Acer laptop, I had no idea that Atheros could be configured as an Access Point.&lt;br /&gt;If the steps doesn't work, try to reboot once, or fiddle transmit power settings (you should google for madwifi and iwpriv / iwconfig for that)&lt;br /&gt;The same steps works both for my Acer laptop (using the same Kubuntu 7.04 - Feisty Fawn) and the Asus eeePC I borrowed. The original article is actually using an Ubuntu 8.04 Hardy as opposed to 7.04 Feisty, but fortunately it makes no difference.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-398044688262510591?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/398044688262510591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=398044688262510591' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/398044688262510591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/398044688262510591'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2008/05/using-atheros-wifi-in-ubuntu.html' title='Using Atheros WiFi in Ubuntu'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-3788438313022259467</id><published>2008-04-21T20:47:00.001-07:00</published><updated>2008-04-21T21:17:39.778-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='comparison'/><category scheme='http://www.blogger.com/atom/ns#' term='ohloh'/><title type='text'>Menilai project open source</title><content type='html'>Dengan adanya lusinan (puluhan?) framework open source, tidak mungkin kita memilih dengan cara mencobanya satu demi satu. Mungkin kita lihat yang mana yang populer di kalangan teman-teman kita atau mana yang sering disebut-sebut oleh artikel atau blog di internet.&lt;br /&gt;Dengan adanya situs Ohloh (www.ohloh.net,  yang sekilas saya sebut di posting sebelum ini), cara tadi menjadi kuno dan tidak terstruktur - di Ohloh kita bisa melakukan perbandingan antar project, menilai aktivitas kontributor tiap project, memperkirakan nilai project (berdasarkan jumlah baris - &lt;span style="font-style: italic;"&gt;debatable indeed&lt;/span&gt;). Popularitas sebuah project dinilai dengan ukuran &lt;span style="font-weight: bold;"&gt;Stack&lt;/span&gt; - yaitu berapa orang user Ohloh yang memasukkan project tersebut ke technology stack-nya (dengan kata lain, aktif menggunakan hasil dari project tersebut). Ada juga penilaian ke individu yg terlibat dalam project2 (&lt;span style="font-weight: bold;"&gt;Kudos&lt;/span&gt;),  yang didapatkan dari penilaian orang terhadapnya (sebetulnya ada banyak faktor dan cukup rumit). Ohloh juga menampilkan peta menunjukkan sebaran geografis.&lt;br /&gt;Misalnya kita hendak mencari framework untuk php, kita bisa mencari dengan menggunakan tag, misalnya : "framework php". Dari hasil search, kita bisa melihat mana yang paling populer, atau bahkan bisa memilih tag berikutnya (dari &lt;span style="font-style: italic;"&gt;suggestion &lt;/span&gt;yang muncul) untuk mempersempit hasil search.&lt;br /&gt;Cuma, project summary, tag, dan informasi lain tampaknya harus diedit oleh editor manusia, dan kadang bisa menjadi tidak representatif kalau kebetulan belum ada orang yg mengisi dengan lengkap. Baru saja saya tambahkan summary untuk 'Struts 2'  dan tag-tagnya, sehingga kalau kita cari dengan kriteria "framework java mvc" maka Struts 2 akan muncul bersama Wicket dan Tapestry. Ya, tampaknya ia memiliki semangat wiki, orang yang baru buat login pun bisa mengedit informasi mengenai suatu project.&lt;br /&gt;Selamat membandingkan framework!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-3788438313022259467?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/3788438313022259467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=3788438313022259467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/3788438313022259467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/3788438313022259467'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2008/04/menilai-project-open-source.html' title='Menilai project open source'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-7755947954957220436</id><published>2008-04-21T02:58:00.000-07:00</published><updated>2008-04-21T03:17:04.819-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='illustrator'/><category scheme='http://www.blogger.com/atom/ns#' term='argouml'/><category scheme='http://www.blogger.com/atom/ns#' term='inkscape'/><category scheme='http://www.blogger.com/atom/ns#' term='dia'/><category scheme='http://www.blogger.com/atom/ns#' term='diagramming tools'/><category scheme='http://www.blogger.com/atom/ns#' term='visio'/><title type='text'>Goodbye Visio</title><content type='html'>Setelah mencoba berbagai tool open source, (dan menahan diri untuk tidak memasang Microsoft Visio 2003), kini saya cukup PD untuk membuat macam-macam diagram.&lt;br /&gt;Anda perlu menggambar UML diagram, dan butuh model UML yang bisa dihubungkan dengan macam-macam code generation tool: gunakanlah &lt;a href="http://argouml.tigris.org/"&gt;ArgoUML&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Kekurangannya: hanya bisa menggambar diagram UML, agak berat karena dibuat pakai Java&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Kelebihannya: bisa export XMI dengan format UML 1.4&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Anda perlu menggambar diagram dengan sangat cepat :&lt;br /&gt;gunakanlah &lt;a href="http://www.yworks.com/"&gt;yEd Graph Editor&lt;/a&gt;.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;memiliki macam-macam algoritma layouting untuk menata ulang gambar kita,&lt;/li&gt;&lt;li&gt;tiap node bisa diganti gambarnya (dengan isi dari file .PNG atau .SVG).&lt;/li&gt;&lt;li&gt;sangat intuitif dan mudah, response cepat (seakan-akan bukan dibuat pakai Java..)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Kekurangannya: hanya bisa menggambar diagram yang bisa dimodelkan sebagai graph (yaitu kumpulan Node dan Edge).&lt;/li&gt;&lt;/ul&gt;Anda perlu menggambar ilustrasi diagram yang lumayan cantik :&lt;br /&gt;gunakanlah &lt;a href="http://www.inkscape.org"&gt;InkScape&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;program gambar sekelas Adobe Illustrator/FreeHand&lt;/li&gt;&lt;li&gt;mendukung SVG&lt;/li&gt;&lt;li&gt;dibuat dengan python - jadi responsenya lumayan cepat&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Kekurangannya: mungkin &lt;span style="font-style: italic;"&gt;its just me,&lt;/span&gt; tapi agak sulit digunakan&lt;/li&gt;&lt;/ul&gt;Anda perlu program gambar yang sesuai standar Telkom? (Ada gituh?)&lt;br /&gt;Gunakan OpenOffice Draw.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;kemampuan terbatas&lt;/li&gt;&lt;li&gt;keuntungannya: terpasang di semua laptop Telkom Seat Management II :))&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Dan, sebagai pilihan terakhir, Gnome &lt;a href="http://www.gnome.org/projects/dia/"&gt;Dia&lt;/a&gt; .&lt;br /&gt;&lt;ul&gt;&lt;li&gt;konon dibuat mencoba menyamai Visio&lt;/li&gt;&lt;li&gt;memiliki pustaka dengan banyak &lt;span style="font-style: italic;"&gt;shape -&lt;/span&gt; (tapi masih kurang, meskipun banyak)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;tapi saya mendapatinya sulit digunakan&lt;/li&gt;&lt;/ul&gt;Pembaca mungkin mendapati bahwa banyak antara program-program di atas ber-versi di bawah 1.0, namun ini tidak menjadi kendala bagi kita untuk mengambil manfaat dari program-program tersebut.&lt;br /&gt;Semua program adalah Open-Source, kecuali yEd, yang merupakan Freeware.&lt;br /&gt;(bedanya? kalo cuma freeware ga ada source codenya..)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-7755947954957220436?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/7755947954957220436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=7755947954957220436' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/7755947954957220436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/7755947954957220436'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2008/04/goodbye-visio.html' title='Goodbye Visio'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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-7335438738304284149.post-4002930155282928318</id><published>2008-04-21T01:38:00.000-07:00</published><updated>2008-04-21T04:20:26.395-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mda'/><category scheme='http://www.blogger.com/atom/ns#' term='uml'/><category scheme='http://www.blogger.com/atom/ns#' term='argouml'/><category scheme='http://www.blogger.com/atom/ns#' term='openmdx'/><title type='text'>Model Driven Euphoria</title><content type='html'>Beberapa hari terakhir ini, karena dapat tugas untuk merancang sebuah aplikasi, aku merambah dunia UML, belajar cara memakai tool ArgoUML, susah payah memasang AndroMDA, dan mendownload macam-macam freeware untuk menggambar diagram.&lt;br /&gt;Konsep MDA, Model Driven Architecture, membuat model UML yg kita buat menjadi beberapa kali lebih bernilai daripada sekedar sketsa dan dokumentasi. Ada dua kategori atau generasi tool untuk MDA,&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Tool yang melakukan transformasi dari model yang dibuat, dan kemudian menghasilkan source code dari hasil transformasi. Jargonnya sih, Transformasi PIM (Platform Independent Model) menjadi PSM (Platform Specific Model), dan code generation. AndroMDA termasuk kategori ini.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Tool yang mentransformasi model menjadi runtime data, yang langsung bisa dieksekusi oleh runtime engine tertentu. OpenMDX termasuk kategori ini.&lt;/li&gt;&lt;/ol&gt;Bagi yang pernah menggunakan Rational Rose atau PowerDesigner, tool generasi pertama mirip dengan yang sudah dilakukan tools tersebut (ArgoUML juga bisa melakukan hal ini). Umumnya di dalam model kita tentukan nama method-method yang dimiliki class-class yang kita buat, atribut nya, asosiasinya, dst. Kemudian Rose/PowerDesigner menghasilkan source code dalam bahasa yang kita pilih, namun tentu saja method-method tersebut belum terisi apa-apa dan 'tinggal' diisi oleh sang Developer. Namun tentunya tool generasi pertama bisa melakukan lebih dari itu.. ia bisa memetakan satu kelas yang kita buat menjadi beberapa kelas, dan menggenerate method-method untuk melakukan data access. Misalnya, AndroMDA, dengan cartridge (semacama plugin) Hibernatenya, akan menggenerate :&lt;ul&gt;&lt;li&gt;hbm.xml &lt;span style="font-style: italic;"&gt;mapping, &lt;/span&gt;yang bisa dikustomisasi (misalnya apakah untuk tipe Date ingin kita simpan sebagai oracle DATE atau oracle TIMESTAMP)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;kelas entitas,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;kelas-kelas Data Access Object beserta method load,loadAll, update, delete, dan  removenya, (katanya bahkan kita bisa menspesifikasikan method yg melakukan query dengan OCL ataupun Hibernate-QL)&lt;/li&gt;&lt;/ul&gt;Cartridge AndroMDA yg lain, bpm4struts, menjanjikan transformasi dari activity diagram menjadi kelas-kelas Struts Action class dan ActionForm, pembuatan struts-config.xml, dan bahwa kita tidak akan perlu lagi mengedit secara manual file struts-config.xml ataupun action classes / action forms.&lt;br /&gt;&lt;br /&gt;Bagi mereka yang belum pernah berkutat di J2EE, ataupun berkutat di situ tapi tidak aware tentang Hibernate / Struts, mungkin penjelasan singkatnya sebagai berikut:&lt;ul&gt;&lt;li&gt;Hibernate adalah persistence framework yang membuat kita tidak pernah membuat query INSERT/DELETE/UPDATE/SELECT dengan tangan kita sendiri.. eh editor kita maksudnya&lt;/li&gt;&lt;li&gt;Struts merupakan framework yang menangani flow halaman di aplikasi web, bagaimana sebuah form mendapatkan data, membagi tanggung jawab kelas-kelas menjadi Model-View-dan Controller&lt;/li&gt;&lt;/ul&gt;Semua hasil yang dapat diberikan AndroMDA merupakan perkembangan yang menggembirakan. Sampai saya lihat statistik di &lt;a href="http://www.ohloh.net/projects/232"&gt;ohloh&lt;/a&gt; (apa? decreasing year-over-year project activity?)&lt;br /&gt;Ohloh ini merupakan situs yang cukup unik, ia membantu orang untuk menilai dan membandingkan project-project open source. Kita bisa lihat frekuensi aktivitas commit yg dilakukan tim pengembang, maupun perkiraan distribusi geografis dari pengguna maupun kontributor sebuah project open source.&lt;br /&gt;Kembali ke MDA tadi, setelah melihat bahwa plugin AndroMDA sebagian besar berkutat di antara Spring-Hibernate-jBPM (yg mana saya rasa sedikit 'heavy'), saya mencari alternatif tool MDA yg open-source, dan ketemu dgn OpenMDX.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.openmdx.org/openmdx/core/1.16/quickstart/QuickStart_html_m16ede4dc.gif"&gt;&lt;img src="http://www.openmdx.org/openmdx/core/1.16/quickstart/QuickStart_html_m16ede4dc.gif" fix="fixed" style="cursor: pointer; width: 320px;" src="http://www.openmdx.org/openmdx/core/1.16/quickstart/QuickStart_html_m16ede4dc.gif" alt="" border="0" height="479" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OpenMDX, mengklaim bahwa ia adalah tool MDA generasi kedua (atau kategori kedua, whatever). Di antara klaimnya ialah bahwa round trip time, waktu yg dibutuhkan dari saya mengubah model sampai aplikasinya sudah bisa ditest, adalah 1 menit. Angka ini tampaknya memang hanya bisa dicapai dengan teknologi yg lebih sophisticated dari code generation. Saya belum coba sih.. 69 MB downloadnya, dan sekarang proxy Telkom lagi lambat-lambatnya.&lt;br /&gt;&lt;br /&gt;NB: gambar satu-satunya di blog ini saya dapat dari OpenMDX, tapi tampaknya tidak match dengan klaimnya (ada code-generation di sini). Tapi memang gambar itu didapat dari Quick Start untuk yg versi 1.x, dan sekarang sudah versi 2.0, dan tidak ada gambar yg bagus dari quick start versi 2.0..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7335438738304284149-4002930155282928318?l=inventorsparadox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://inventorsparadox.blogspot.com/feeds/4002930155282928318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7335438738304284149&amp;postID=4002930155282928318' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/4002930155282928318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7335438738304284149/posts/default/4002930155282928318'/><link rel='alternate' type='text/html' href='http://inventorsparadox.blogspot.com/2008/04/model-driven-euphoria.html' title='Model Driven Euphoria'/><author><name>Yudhi Widyatama</name><uri>http://www.blogger.com/profile/09175713355753162410</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>
