<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C04CSH09fCp7ImA9WhRUF0U.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667</id><updated>2012-01-28T12:19:29.364-08:00</updated><category term="fsck" /><category term="javascript" /><category term="debugging" /><category term="broken partition" /><category term="voiprakyat" /><category term="checkinstall" /><category term="network manager" /><category term="ibpp" /><category term="input" /><category term="pidgin" /><category term="youtube" /><category term="wine" /><category term="ghostscript" /><category term="firebird" /><category term="install-wine-deps.sh" /><category term="delphi" /><category term="firefox" /><category term="maxlength" /><category term="css" /><category term="windows" /><category term="ext4" /><category term="e-spt" /><category term="textarea" /><category term="dispatcher.d" /><category term="local web mirror" /><category term="yahoo messenger" /><category term="ubuntu 9.04" /><category term="c++" /><category term="recompile php" /><category term="hamachi" /><category term="configure php parameters" /><category term="enter key to move to next field" /><category term="google chrome xdebug helper" /><category term="apache" /><category term="linux" /><category term="libcupsys2-dev" /><category term="voiprakyat.or.id" /><category term="php" /><category term="programming" /><category term="creating deb file" /><category term="voip" /><category term="codeigniter debug" /><category term="installing mysql 5.1.37" /><category term="testdisk" /><category term="internet telephone" /><category term="nokia e51" /><category term="ubuntu 9.10" /><category term="merge pdfs" /><category term="google chrome" /><category term="pdf" /><category term="e2fsck" /><category term="jquery" /><category term="grub rescue prompt" /><category term="timbangan elektronik" /><category term="wxwidgets" /><category term="html" /><category term="xdebug" /><category term="shutdown problem" /><category term="acpid" /><category term="webhttrack" /><category term="ubuntu" /><category term="repair partition" /><category term="debug javascript" /><title>Bambang P notes...</title><subtitle type="html">Personal notes of Bambang Pranoto of various computing topics especially programming</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://bpranoto.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>26</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/BambangPNotes" /><feedburner:info uri="bambangpnotes" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;C04CSH08eyp7ImA9WhRUF0U.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-6981498375277425944</id><published>2012-01-28T12:12:00.000-08:00</published><updated>2012-01-28T12:19:29.373-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-28T12:19:29.373-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="checkinstall" /><category scheme="http://www.blogger.com/atom/ns#" term="creating deb file" /><category scheme="http://www.blogger.com/atom/ns#" term="wine" /><title>Creating custom build wine deb package</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/B_hxIIiSeTt8tSymsWT7tbWOVYE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B_hxIIiSeTt8tSymsWT7tbWOVYE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/B_hxIIiSeTt8tSymsWT7tbWOVYE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B_hxIIiSeTt8tSymsWT7tbWOVYE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;In one of my projects, I need to install custom build of wine to several computers running ubuntu.&lt;br /&gt;
Hence, I had to get the sources, apply the patch files and then compile the source. &amp;nbsp;Doing this for 1 computer is okay, however repeating this to several computers is a huge waste of time.&lt;br /&gt;
&lt;br /&gt;
The solution is compiling once and then build a debian package (*.deb), so for the other computers we just install the debian package file. Fortunately, making a debian package is very-very easy. Here is what I did:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;ol&gt;
&lt;li&gt;Install wine recommended packages:&lt;br /&gt;&lt;code&gt;$ wget&lt;span style="background-color: white; font-family: 'bitstream vera sans', verdana, arial, helvetica, sans-serif; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;http://winezeug.googlecode.com/svn/trunk/install-wine-deps.sh&lt;br /&gt;$ chmod 755 install-wine-deps.sh&lt;br /&gt;$ sudo ./install-wine-deps.sh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
Install checkinstall:&lt;br /&gt;
&lt;code&gt;
$ sudo apt-get install checkinstall
&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Get the wine source:&lt;br /&gt;&lt;code&gt;$ wget&amp;nbsp;http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.3.38.tar.bz2&lt;br /&gt;$ tar -xf&amp;nbsp;wine-1.3.38.tar.bz2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Patch the wine sources&lt;/li&gt;
&lt;li&gt;Configure and compile:&lt;br /&gt;$ cd&amp;nbsp;wine-1.4-rc1&lt;br /&gt;$ ./configure&lt;/li&gt;
&lt;li&gt;Create the deb file with checkinstall:&lt;br /&gt; 
In this step, instead of run &lt;code&gt;sudo make install&lt;/code&gt;, we run checkinstall to make the .deb file:&lt;br /&gt;
&lt;code&gt;
$ sudo checkinstall
&lt;/code&gt;
&lt;br /&gt;

checkinstall will present some parameter. Modify the parameters as you like and then press ENTER to continue. At the end of the process, wine will be installed in your system and as a bonus you will have a .deb file which can be installed on other computers without the tedious process of compiling.

&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/7890476220667452667-6981498375277425944?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/mTytuV5yJpo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/6981498375277425944/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2012/01/creating-custom-build-wine-deb-package.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/6981498375277425944?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/6981498375277425944?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/mTytuV5yJpo/creating-custom-build-wine-deb-package.html" title="Creating custom build wine deb package" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2012/01/creating-custom-build-wine-deb-package.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MFQ3kzfSp7ImA9WhRVFUs.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-7014161229960470523</id><published>2012-01-14T10:23:00.000-08:00</published><updated>2012-01-14T10:23:32.785-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-14T10:23:32.785-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="merge pdfs" /><category scheme="http://www.blogger.com/atom/ns#" term="ghostscript" /><category scheme="http://www.blogger.com/atom/ns#" term="pdf" /><title>Merge several pdfs in ubuntu</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ycw2p62dM1IYgSS0dnPznVCDo4U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ycw2p62dM1IYgSS0dnPznVCDo4U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ycw2p62dM1IYgSS0dnPznVCDo4U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ycw2p62dM1IYgSS0dnPznVCDo4U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Some times we need to merge several pdf files into 1 pdf file. Fortunately, it is very easy to do it in ubuntu.&lt;i&gt;&amp;nbsp;&lt;/i&gt;For instance, I have 2 pdf files: proposal_rpi.pdf and program_qc.pdf.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Here is how I merge these 2 files into 1 pdf file: proposal_jan_15_2012.pdf:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;code&gt;
bambang@bambang-notebook:~$ gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=proposal_jan_15_2012.pdf -dBATCH proposal_rpi.pdf program_qc.pdf
&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7890476220667452667-7014161229960470523?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/HM1pRY0_yuI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/7014161229960470523/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2012/01/merge-several-pdfs-in-ubuntu.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/7014161229960470523?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/7014161229960470523?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/HM1pRY0_yuI/merge-several-pdfs-in-ubuntu.html" title="Merge several pdfs in ubuntu" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2012/01/merge-several-pdfs-in-ubuntu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEBQ348eyp7ImA9WhRVE04.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-8844457209253678998</id><published>2012-01-11T19:23:00.000-08:00</published><updated>2012-01-11T19:24:12.073-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-11T19:24:12.073-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="configure php parameters" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="recompile php" /><title>Tip: Recompiling PHP under linux</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gpRzliHAhNwolOa6V0rhmXWqtRg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gpRzliHAhNwolOa6V0rhmXWqtRg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gpRzliHAhNwolOa6V0rhmXWqtRg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gpRzliHAhNwolOa6V0rhmXWqtRg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;There is a problem if we install PHP from source, i.e: when we need to recompile due to a new version we should reapply the old  configure parameter. Forgetting to enable some features often means break our web application which depends to the feature, however it is also hard memorizing what parameters we passed to the configure command as we do not often compiling the PHP.

Fortunately, there is an easy way. Here it goes:

&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Download the newest php source, here is the newest version (5.3.9) as I wrote this blog:&lt;br /&gt;
&lt;a href="http://www.php.net/get/php-5.3.9.tar.bz2/from/a/mirror"&gt;http://www.php.net/get/php-5.3.9.tar.bz2/from/a/mirror&lt;/a&gt;
&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;
Extract the php source:
&lt;br /&gt;
&lt;code&gt;
bambang@bambang-notebook:~/Downloads/php$ tar -xf php-5.3.9.tar.gz&lt;br /&gt;
bambang@bambang-notebook:~/Downloads/php$ cd php-5.3.9&lt;br /&gt;
bambang@bambang-notebook:~/Downloads/php/php-5.3.9$&lt;br /&gt;
&lt;/code&gt;


&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;Write a phpinfo.php to your web server document folder. The content of the script:
&lt;br /&gt;
&lt;code&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php echo phpinfo(); ?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Open the phpinfo.php above in your browser:
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-imPAumYBngI/Tw5PbC9CVjI/AAAAAAAAA1I/Y_QBLZb7EPY/s1600/phpinfo-php-configure-params.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="137" src="http://3.bp.blogspot.com/-imPAumYBngI/Tw5PbC9CVjI/AAAAAAAAA1I/Y_QBLZb7EPY/s400/phpinfo-php-configure-params.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Notice the configure command on the third row, block and copy the configure command
&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;Go back to your terminal in the step 2, and paste the command and press enter:
&lt;br /&gt;
&lt;code&gt;
bambang@bambang-notebook:~/Downloads/php/php-5.3.9$ './configure' '--with-apxs2=/usr/bin/apxs2' '--with-interbase=/opt/firebird' '--enable-sockets' '--with-pear' '--with-gd' '--with-mysql=/usr/bin/mysql_config' '--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--enable-soap' '--enable-libxml' '--enable-calendar' '--with-pdo-firebird=/opt/firebird'&lt;br /&gt;

&lt;/code&gt; 
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;After this step, you simply run make and sudo make install to upgrade your php.
&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/7890476220667452667-8844457209253678998?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/2-sGcDM9Hto" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/8844457209253678998/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2012/01/tip-recompiling-php-under-linux.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/8844457209253678998?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/8844457209253678998?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/2-sGcDM9Hto/tip-recompiling-php-under-linux.html" title="Tip: Recompiling PHP under linux" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-imPAumYBngI/Tw5PbC9CVjI/AAAAAAAAA1I/Y_QBLZb7EPY/s72-c/phpinfo-php-configure-params.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2012/01/tip-recompiling-php-under-linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4BR3o7fSp7ImA9WhRWEUs.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-2680618707225217964</id><published>2011-12-07T23:33:00.001-08:00</published><updated>2011-12-29T05:22:36.405-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-29T05:22:36.405-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><category scheme="http://www.blogger.com/atom/ns#" term="maxlength" /><category scheme="http://www.blogger.com/atom/ns#" term="textarea" /><category scheme="http://www.blogger.com/atom/ns#" term="html" /><title>HTML &lt;textarea&gt; maxlength problem</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/o8r4-SjdutDgTHWIYRtDYSnA_C4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o8r4-SjdutDgTHWIYRtDYSnA_C4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/o8r4-SjdutDgTHWIYRtDYSnA_C4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o8r4-SjdutDgTHWIYRtDYSnA_C4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;We can limit the maximum characters in &lt;i&gt;&amp;lt;input&amp;gt;&lt;/i&gt; with &lt;i&gt;&amp;lt;maxlength&amp;gt;&lt;/i&gt; attribute. However
it is not possible to do the same thing with &lt;i&gt;&amp;lt;textarea&amp;gt;&lt;/i&gt;. This will be a problem if value of the &lt;i&gt;&amp;lt;textarea&amp;gt;&lt;/i&gt; will be stored into database table and the length of the user input exceeds the field's length, either the value will
be truncated or your database will throw an error to you.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Fortunately, a little jquery script can help here:

&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;

&amp;lt;/head&amp;gt;

&amp;lt;body&amp;gt;

&amp;lt;script type="text/javascript" src="jquery.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type="text/javascript"&amp;gt;
$(document).ready
(
 function()
 {
  $("textarea[maxlength]").keypress
  (
   function()
   {
    var maxlength = $(this).attr("maxlength");
    if ( this.value.length &amp;gt; maxlength )
    {
     this.value = this.value.substring(0,maxlength-1);
    }    
   }
  )
 }
)
&amp;lt;/script&amp;gt;

&amp;lt;form&amp;gt;
This text box is limited to 5 chars &amp;lt;textarea maxlength="5"&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;br&amp;gt;
This text box is not limited &amp;lt;textarea&amp;gt;&amp;lt;/textarea&amp;gt;
&amp;lt;/form&amp;gt;

&amp;lt;/body&amp;gt;

&amp;lt;/html&amp;gt;

&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7890476220667452667-2680618707225217964?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/XHhn-x2ANYc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/2680618707225217964/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2011/12/html-maxlength-problem.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/2680618707225217964?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/2680618707225217964?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/XHhn-x2ANYc/html-maxlength-problem.html" title="HTML &amp;lt;textarea&amp;gt; maxlength problem" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2011/12/html-maxlength-problem.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8GRn09eyp7ImA9WhRXEk8.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-4725666949427713529</id><published>2011-12-06T22:45:00.001-08:00</published><updated>2011-12-18T07:07:07.363-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-18T07:07:07.363-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="google chrome xdebug helper" /><category scheme="http://www.blogger.com/atom/ns#" term="codeigniter debug" /><category scheme="http://www.blogger.com/atom/ns#" term="xdebug" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="debugging" /><category scheme="http://www.blogger.com/atom/ns#" term="google chrome" /><title>Debugging php application with xdebug, netbeans and Google Chrome</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mesu_pJytodRmVtbI4RTMfmEVTs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mesu_pJytodRmVtbI4RTMfmEVTs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mesu_pJytodRmVtbI4RTMfmEVTs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mesu_pJytodRmVtbI4RTMfmEVTs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Debugging PHP application is a pain. When we get problems, we often to use var_dump() or die() in various location to inspect 
the variables and then clean them again once the problem is solved.

Fortunately, there is a piece of software called xdebug which can tremendously help us debugging php code. This article is about using xdebug in linux environment.

&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;
What we need:
&lt;ul&gt;
&lt;li&gt;A working apache2 web server with PHP
&lt;/li&gt;
&lt;li&gt;Netbeans: an excellent IDE for writing PHP application
&lt;/li&gt;
&lt;li&gt;xdebug
&lt;/li&gt;
&lt;/ul&gt;
I assume you already have the first two.
&lt;/li&gt;
&lt;li&gt;Install xdebug, open linux terminal, change to root and install xdebug with command (pecl install debug). See below
&lt;pre&gt;bambang@bambang-notebook:~$ sudo su
[sudo] password for bambang: 
root@bambang-notebook:/home/bambang#pecl install xdebug
downloading xdebug-2.1.2.tar ...
Starting to download xdebug-2.1.2.tar (Unknown size)
.................................done: 1,340,416 bytes
66 source files, building
running: phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
.....
..... &lt;snipped&gt;
......
Build process completed successfully
Installing '/usr/local/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so'
install ok: channel://pecl.php.net/xdebug-2.1.2
configuration option "php_ini" is not set to php.ini location
You should add "extension=xdebug.so" to php.ini

&lt;/snipped&gt;&lt;/pre&gt;
Note where the xdebug.so is installed in the line &lt;i&gt;Installing '/usr/local/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so'&lt;/i&gt;
&lt;/li&gt;
&lt;li&gt;Add these lines to your php.ini. In my case /usr/local/lib/php.ini.&amp;nbsp;&lt;/li&gt;
:
&lt;pre&gt;zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so"
xdebug.remote_enable=on
xdebug.remote_log="/var/log/xdebug.log"
xdebug.remote_host=localhost
xdebug.remote_handler=dbgp
xdebug.remote_port=9000
&lt;/pre&gt;
&lt;li&gt;Restart apache
&lt;pre&gt;root@bambang-notebook:/home/bambang# /etc/init.d/apache2 restart
 * Restarting web server apache2                                                 ... waiting                                                             [ OK ]
root@bambang-notebook:/home/bambang# 

&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Write a phpinfo.php page in your web directory like this:
&lt;pre&gt;&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;?php echo phpinfo(); ?&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Open the phpinfo.php in your browser and check whether the xdebug is successfully installed.

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-kWZ76PTCPp8/TuIAEMd7uAI/AAAAAAAAAz0/rZ3pHserzG0/s1600/phpinfo_xdebug.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="338" src="http://4.bp.blogspot.com/-kWZ76PTCPp8/TuIAEMd7uAI/AAAAAAAAAz0/rZ3pHserzG0/s400/phpinfo_xdebug.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Now go to Netbeans and navigate through menu &lt;i&gt;Tools-&amp;gt;Option-&amp;gt;PHP&lt;/i&gt; and make sure the Debugger port is the same
with what we set in the php.ini above. I clear &lt;i&gt;Stop at First Line&lt;/i&gt; check mark, but it is okay if you let it checked. If it is checked, the debugger will stop at first php statement. But I only want it stops on break point.&lt;/li&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-_sijcVq2Gi8/TuIq9cZNNxI/AAAAAAAAA04/prIEoaAfJc8/s1600/netbeans-php-options.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="229" src="http://3.bp.blogspot.com/-_sijcVq2Gi8/TuIq9cZNNxI/AAAAAAAAA04/prIEoaAfJc8/s320/netbeans-php-options.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;li&gt;Open your chrome, &amp;nbsp;goto &lt;a href="https://chrome.google.com/webstore/detail/eadndfjplgieldjbigjakmdgkmoaaaoc" target="_blank"&gt;https://chrome.google.com/webstore/detail/eadndfjplgieldjbigjakmdgkmoaaaoc&lt;/a&gt;&amp;nbsp;and install the xdebug helper.&lt;/li&gt;
&lt;li&gt;Now we are ready to debug, in this example I'll debug my CodeIgniter application. First I open one of my controller: daftar_negara.php and place a breakpoint in line 11 by clicking the line number or press ctrl-f8.
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-f7NML0P5yLE/TuH_Kehv79I/AAAAAAAAAzo/3ZYlusLcj_4/s1600/netbeans_breakpont.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="201" src="http://4.bp.blogspot.com/-f7NML0P5yLE/TuH_Kehv79I/AAAAAAAAAzo/3ZYlusLcj_4/s400/netbeans_breakpont.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Still inside Netbeans run the debugger by clicking menu &lt;i&gt;Debug-&amp;gt;Debug Project&lt;/i&gt; or clicking the debug icon in the netbeans taskbar like (see the image below):
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/--2cX4__xa3Y/TuIA9XiDyoI/AAAAAAAAA0A/PbzUnAPEPzU/s1600/netbeans_debugger_icon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="73" src="http://1.bp.blogspot.com/--2cX4__xa3Y/TuIA9XiDyoI/AAAAAAAAA0A/PbzUnAPEPzU/s400/netbeans_debugger_icon.png" width="62" /&gt;&lt;/a&gt;&lt;/div&gt;

The debugger will launch our project in chrome. Now we need to activate chrome xdebug helper, click the xhelper debug icon in right end of the address bar until it turns to green.

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-yRjywLieRD4/TuIi63M3gTI/AAAAAAAAA0M/oLXpXAeZot0/s1600/chrome_xhelper_icon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="81" src="http://3.bp.blogspot.com/-yRjywLieRD4/TuIi63M3gTI/AAAAAAAAA0M/oLXpXAeZot0/s400/chrome_xhelper_icon.png" width="77" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Now press F5 (refresh), xdebug will stop the execution on our breakpoint and switch to our neatbeans:&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-NDA40oIKsB0/TuIlA_yotPI/AAAAAAAAA0Y/m6edqFhV-_4/s1600/xdebug_netbeans_inaction.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="262" src="http://4.bp.blogspot.com/-NDA40oIKsB0/TuIlA_yotPI/AAAAAAAAA0Y/m6edqFhV-_4/s400/xdebug_netbeans_inaction.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
Now, we can step over, step info etc. via netbeans debugger tool bar, of course you can also use the shortcut key (F8,F7 etc):

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-xDBIa0xaeuI/TuImD93Yt4I/AAAAAAAAA0k/y6eWOumEsIQ/s1600/netbeans_debugger_toolbar.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="63" src="http://4.bp.blogspot.com/-xDBIa0xaeuI/TuImD93Yt4I/AAAAAAAAA0k/y6eWOumEsIQ/s400/netbeans_debugger_toolbar.png" width="255" /&gt;&lt;/a&gt;&lt;/div&gt;
We can also inspect the variable values in the window below the code window:

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-S-c7XrmXtBg/TuImtG9Qu5I/AAAAAAAAA0w/l0OmrvEXUSE/s1600/variable_watches.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="136" src="http://1.bp.blogspot.com/-S-c7XrmXtBg/TuImtG9Qu5I/AAAAAAAAA0w/l0OmrvEXUSE/s400/variable_watches.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
From here, I am sure you can figure the rest yourself. Happy bug hunting!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7890476220667452667-4725666949427713529?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/XguOetTrN1o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/4725666949427713529/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2011/12/debugging-php-application-with-xdebug.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/4725666949427713529?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/4725666949427713529?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/XguOetTrN1o/debugging-php-application-with-xdebug.html" title="Debugging php application with xdebug, netbeans and Google Chrome" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-kWZ76PTCPp8/TuIAEMd7uAI/AAAAAAAAAz0/rZ3pHserzG0/s72-c/phpinfo_xdebug.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2011/12/debugging-php-application-with-xdebug.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAFQXo9fCp7ImA9WhRQEUQ.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-1190741443778076034</id><published>2011-12-06T09:08:00.001-08:00</published><updated>2011-12-06T09:48:30.464-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-06T09:48:30.464-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><category scheme="http://www.blogger.com/atom/ns#" term="enter key to move to next field" /><title>Web app: move to next field with enter ala dos application</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/r7h2yCS-__Mi62JnqiY8x-ZXzyQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r7h2yCS-__Mi62JnqiY8x-ZXzyQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/r7h2yCS-__Mi62JnqiY8x-ZXzyQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r7h2yCS-__Mi62JnqiY8x-ZXzyQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;This is a little experiment on how to use enter as a mean to move to the next input field in web application ala dos application. We need jquery here. 

Here we simply trap the enter key with keypress event. 
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Inside the event, we check the control tabIndex. Actually, the html elements have tabIndex property, unfortunately (at least in my case with google chrome) the value always 0, so we need a helper funtion myTabPosition which simply scan the parent's child node until it find itself name. 
&lt;br /&gt;
After we have the tab index, we simply focus to the next sibling.
&lt;br /&gt;
&lt;br /&gt;
Here is my solution:
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;

&amp;lt;/head&amp;gt;

&amp;lt;body&amp;gt;

&amp;lt;script type="text/javascript" src="jquery.js"&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;script type="text/javascript"&amp;gt;
$(document).ready
(
 function()
 {
  $(".ala_desktop").keypress
  (
   function(event)
   {
    if (event.which==13)
    {
     i = myTabPosition(this) + 1;
     nxt=this.form.elements[i];
     nxt.focus();
     nxt.select();
     return false;
    }
    return true;   
   }
  )
 }
)

function myTabPosition( o )
{
 var MyName = o.name;
 var MyParent = o.form;
 var i;
 var retval = -1;
 for (i = 0 ; i &amp;lt; MyParent.elements.length - 1 ; i++ )
 {
  if ( MyParent.elements[i].name == MyName )
  {
   retval = i;
   break;
  }
 }
 return retval;
}
&amp;lt;/script&amp;gt;

&amp;lt;form name="coba"&amp;gt;
Name : &amp;lt;input type="text" name="Name" id="Name" class="ala_desktop"&amp;gt;&amp;lt;br&amp;gt;
Address : &amp;lt;input type="text" name="Address" id="Address" class="ala_desktop"&amp;gt;&amp;lt;br&amp;gt;
City : &amp;lt;input type="text" name="City" id="City" class="ala_desktop"&amp;gt;

&amp;lt;/form&amp;gt;

&amp;lt;/body&amp;gt;

&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7890476220667452667-1190741443778076034?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/2mGHFhC86uQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/1190741443778076034/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2011/12/web-app-move-to-next-field-with-enter.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/1190741443778076034?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/1190741443778076034?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/2mGHFhC86uQ/web-app-move-to-next-field-with-enter.html" title="Web app: move to next field with enter ala dos application" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2011/12/web-app-move-to-next-field-with-enter.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQDSH04fyp7ImA9WhRQEUo.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-1636172977153348871</id><published>2011-12-04T00:56:00.001-08:00</published><updated>2011-12-06T03:52:59.337-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-06T03:52:59.337-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><category scheme="http://www.blogger.com/atom/ns#" term="input" /><category scheme="http://www.blogger.com/atom/ns#" term="html" /><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title>HTML &lt;input&gt; tips - 01</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dqwYvVNlzZ8VQ7RdLJ_VuINN9GE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dqwYvVNlzZ8VQ7RdLJ_VuINN9GE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dqwYvVNlzZ8VQ7RdLJ_VuINN9GE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dqwYvVNlzZ8VQ7RdLJ_VuINN9GE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Beberapa tips yang berguna untuk penggunaan &amp;lt;input&amp;gt; pada html.
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Membatasi jumlah character maksimal yang boleh diinput.&lt;br /&gt;
Gunakan attribute &lt;i&gt;&lt;b&gt;maxlength&lt;/b&gt;&lt;/i&gt;.
Contoh:
&lt;pre&gt;&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;/head&amp;gt;

&amp;lt;body&amp;gt;
Input ini hanya dibatasi 5 character saja &amp;lt;input type="text" maxlength="5"&amp;gt;
&amp;lt;/body&amp;gt;

&amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;pre&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Memaksa semua input ke huruf besar atau huruf kecil.
&lt;br /&gt;
Untuk hal ini kita harus menggunakan CSS property &lt;b&gt;&lt;i&gt;text-transform&lt;/i&gt;&lt;/b&gt;. Untuk memaksa semua input ke huruf besar gunakan 
&lt;b&gt;&lt;i&gt;text-transform:uppercase&lt;/i&gt;&lt;/b&gt;, untuk ke huruf kecil gunakan &lt;b&gt;&lt;i&gt;text-transform:lowercase&lt;/i&gt;&lt;/b&gt;.

Namun harus diperhatikan bahwa CSS hanya merubah tampilan saja, tetapi value dari text box itu sendiri tetap. Semisal kita
mengketik kata 'semarang' dalam huruf kecil, dengan text-transform:uppercase yang ditampilkan adalah 'SEMARANG', tetapi value dari &amp;lt;input&amp;gt; tetap 'semarang' dalam huruf kecil. Untuk memaksa value juga berubah ke huruf besar, kita harus mengkombinasikan css dengan jquery script yang mentrap event blur.

Dalam hal ini kita memerlukan jquery, jika di komputer anda belum terinstall download terlebih dahulu jquery versi terbaru di &lt;a href="http://docs.jquery.com/Downloading_jQuery"&gt;http://docs.jquery.com/Downloading_jQuery&lt;/a&gt;.
&lt;br /&gt;
Nama file hasil download jQuery mengandung version number dan jenis script yang kita download (minified atau compressed). Copykan file tsb. ke web directory kita dan rename filenya menjadi jquery.js.
&lt;br /&gt;
&lt;br /&gt;

Contoh:

&lt;pre&gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;style type="text/css"&amp;gt;
input.hurufbesar {
text-transform:uppercase
}
&amp;lt;/style&amp;gt;

&amp;lt;script type="text/javascript" src="jquery.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type="text/javascript"&amp;gt;
$(document).ready
(
 function()
 {
  $('input.hurufbesar').blur
  (
   function()
   {
    this.value = this.value.toUpperCase();
   }
  )
 }
)

function CheckValue()
{
 alert( "Value yang diketik adalah :" + document.getElementById('inputan').value );
}
&amp;lt;/script&amp;gt;

&amp;lt;/head&amp;gt;

&amp;lt;body&amp;gt;
Input ini dalam huruf besar semua &amp;lt;input type="text" class="hurufbesar" id="inputan"&amp;gt;

&amp;lt;input type="button" value="Check" onclick="javascript:CheckValue()"&amp;gt;

&amp;lt;/body&amp;gt;

&amp;lt;/html&amp;gt;
&lt;/pre&gt;


&lt;/li&gt;
&lt;li&gt;Membatasi hanya angka saja yang boleh diinput.
&lt;br /&gt;
Untuk keperluan ini kita bisa menggunakan jQuery. 
&lt;br /&gt;
Selanjutnya kita buat sebuah function yang akan dijalankan pada waktu terjadi event keypress pada tag &amp;lt;input&amp;gt; yang mempunyai class &lt;i&gt;&lt;b&gt;angkasaja&lt;/b&gt;&lt;/i&gt; sbb:
&lt;br /&gt;&lt;br /&gt;
&lt;pre&gt;$(document).ready
(
 function()
 {
  $("input.angkasaja").keypress
  (
   function( event )
   {
    return ( event.which &amp;gt;= 48 &amp;amp;&amp;amp; event.which &amp;lt;= 57 );
   }
  )
 }
)

&lt;/pre&gt;
&lt;br /&gt;
Code snippet di atas, intinya adalah bahwa setiap terjadi event keypress (tombol ditekan) akan dilakukan pengecekan apakah
keycode dari tombol yang ditekan ada di antara 48 (ascii code dari angka 0) dan 57 (ascii code dari angka 9), apabila ya 
event functionnya akan mereturn TRUE artinya keypress diaccept, tapi bila tidak event functionnya akan mereturn FALSE artinya
inputan ditolak.

&lt;br /&gt;&lt;br /&gt;
Selanjutnya, untuk semua &amp;lt;input&amp;gt; di mana kita menghendaki bahwa yang bisa diinput hanya angka saja, cukup kita berikan class &lt;b&gt;&lt;i&gt;angkasaja&lt;/i&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;br /&gt;
Contoh:
&lt;br /&gt;
&lt;pre&gt;&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;script type="text/javascript" src="jquery.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;

&amp;lt;script type="text/javascript"&amp;gt;
$(document).ready
(
 function()
 {
  $("input.angkasaja").keypress
  (
   function( event )
   {
    return ( event.which &amp;gt;= 48 &amp;amp;&amp;amp; event.which &amp;lt;= 57 );
   }
  )
 }
)
&amp;lt;/script&amp;gt;

&amp;lt;body&amp;gt;
Hanya angka yang bisa diinput &amp;lt;input type="text" class="angkasaja"&amp;gt;
&amp;lt;/body&amp;gt;

&amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
Pada seri berikutnya kita akan bahas bagaimana menginput angka dengan separator ribuan dan desimal dan bagaimana kita bisa
menginput data tanggal dengan mengklik kalender yang akan ditampilkan.
&lt;br /&gt;
Semoga membantu&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7890476220667452667-1636172977153348871?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/GEmETHt-Jac" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/1636172977153348871/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2011/12/html-tips.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/1636172977153348871?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/1636172977153348871?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/GEmETHt-Jac/html-tips.html" title="HTML &amp;lt;input&amp;gt; tips - 01" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2011/12/html-tips.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYHRHk6eCp7ImA9WhRRGE4.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-5924731905435337791</id><published>2011-12-02T03:01:00.001-08:00</published><updated>2011-12-02T05:22:15.710-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-02T05:22:15.710-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="debug javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="google chrome" /><title>Debug javascript dengan Google Chrome</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HG1HULl4gGMIIIjfWkY9235LFfk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HG1HULl4gGMIIIjfWkY9235LFfk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HG1HULl4gGMIIIjfWkY9235LFfk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HG1HULl4gGMIIIjfWkY9235LFfk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Buat halaman html yang akan dibuat. Contoh:
&lt;br /&gt;
hapusaja.html
&lt;pre&gt;&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;

&amp;lt;script type="text/javascript"&amp;gt;

function Sajikan()
{
 Sel = document.getElementById( "PILIHAN" );
 alert( "Mangga dahar " + Sel.options[ Sel.selectedIndex].value );
}

&amp;lt;/script&amp;gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
Mau buah apa? 
&amp;lt;select id="PILIHAN" onclick="Sajikan()"&amp;gt;
&amp;lt;option value="Gedhang"&amp;gt;Pisang&amp;lt;/option&amp;gt;
&amp;lt;option value="Kates"&amp;gt;Pepaya&amp;lt;/option&amp;gt;
&amp;lt;option value="Pelem"&amp;gt;Mangga&amp;lt;/option&amp;gt;
&amp;lt;/select&amp;gt;


&amp;lt;/body&amp;gt;

&amp;lt;/html&amp;gt;&lt;a name='more'&gt;&lt;/a&gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Buka di Google Chrome
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-Tchb4SReRBs/TtjHd2WIANI/AAAAAAAAAyI/CCS1rYqz4XA/s1600/debug_javascript_google_chrome_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="123" src="http://2.bp.blogspot.com/-Tchb4SReRBs/TtjHd2WIANI/AAAAAAAAAyI/CCS1rYqz4XA/s320/debug_javascript_google_chrome_01.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Aktifkan debugger dengan klik kanan lalu klik 'Inspect Element'

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-bo2viOJUYXY/TtjKDLKdbQI/AAAAAAAAAyU/satTdivKGao/s1600/debug_javascript_google_chrome_02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="http://4.bp.blogspot.com/-bo2viOJUYXY/TtjKDLKdbQI/AAAAAAAAAyU/satTdivKGao/s320/debug_javascript_google_chrome_02.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Layar google chrome akan terbagi menjadi 2 bagian, bagian bawah ada windows untuk melihat elemen-elemen halaman page. Atur proporsi bagian atas dan bagian bawah dengan mendrag pembatas window ke atas atau ke bawah.
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-lgYzefJWCLM/TtjLWuYEUJI/AAAAAAAAAyg/-_mMuR5Mw30/s1600/debug_javascript_google_chrome_03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://1.bp.blogspot.com/-lgYzefJWCLM/TtjLWuYEUJI/AAAAAAAAAyg/-_mMuR5Mw30/s400/debug_javascript_google_chrome_03.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
Klik Script
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-5FPlXgmQ-y8/TtjL1qM4rjI/AAAAAAAAAys/6iPpGb6kxK4/s1600/debug_javascript_google_chrome_04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://1.bp.blogspot.com/-5FPlXgmQ-y8/TtjL1qM4rjI/AAAAAAAAAys/6iPpGb6kxK4/s400/debug_javascript_google_chrome_04.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
Klik baris 11 untuk meletakkan break point di baris tsb.
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-e34dKxPOTAo/TtjMWkUqZXI/AAAAAAAAAy4/oMpYvK8Kcc0/s1600/debug_javascript_google_chrome_05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://3.bp.blogspot.com/-e34dKxPOTAo/TtjMWkUqZXI/AAAAAAAAAy4/oMpYvK8Kcc0/s400/debug_javascript_google_chrome_05.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
Sekarang pada pilihan 'Mau buah apa?', pilih salah satu buah:
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-F2Gp21EL2tU/TtjNOQHc0lI/AAAAAAAAAzE/qzBxGDVG2Uc/s1600/debug_javascript_google_chrome_06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://4.bp.blogspot.com/-F2Gp21EL2tU/TtjNOQHc0lI/AAAAAAAAAzE/qzBxGDVG2Uc/s400/debug_javascript_google_chrome_06.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
Setelah pilihan buah diklik, maka debugger akan berhenti pada baris 11. Klik F10 untuk 'step over next function call', atau F11 untuk 'step into next function call'.
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-EUoQ7ZWwMJ8/TtjOT0jPw1I/AAAAAAAAAzQ/a4XPU-Vu1Gc/s1600/debug_javascript_google_chrome_07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://1.bp.blogspot.com/-EUoQ7ZWwMJ8/TtjOT0jPw1I/AAAAAAAAAzQ/a4XPU-Vu1Gc/s400/debug_javascript_google_chrome_07.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;b&gt;&lt;i&gt;Catatan&lt;/i&gt;&lt;/b&gt;: Tidak seperti firefox anda tidak perlu menginstall addon tambahan apapun pada google chrome untuk fasilitas debugging ini.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7890476220667452667-5924731905435337791?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/VsCEEBZoATk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/5924731905435337791/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2011/12/debug-javascript-dengan-google-chrome.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/5924731905435337791?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/5924731905435337791?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/VsCEEBZoATk/debug-javascript-dengan-google-chrome.html" title="Debug javascript dengan Google Chrome" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-Tchb4SReRBs/TtjHd2WIANI/AAAAAAAAAyI/CCS1rYqz4XA/s72-c/debug_javascript_google_chrome_01.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2011/12/debug-javascript-dengan-google-chrome.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYCQXk_eCp7ImA9WhRSEkk.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-2348512099797824605</id><published>2011-11-08T17:05:00.000-08:00</published><updated>2011-11-13T20:16:00.740-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-13T20:16:00.740-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="nokia e51" /><category scheme="http://www.blogger.com/atom/ns#" term="voiprakyat.or.id" /><category scheme="http://www.blogger.com/atom/ns#" term="voip" /><category scheme="http://www.blogger.com/atom/ns#" term="voiprakyat" /><category scheme="http://www.blogger.com/atom/ns#" term="internet telephone" /><title>Menginstall VoIP di Nokia E51</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tGiHghpw0G0MYBzfnP9yuBXr-Jc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tGiHghpw0G0MYBzfnP9yuBXr-Jc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tGiHghpw0G0MYBzfnP9yuBXr-Jc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tGiHghpw0G0MYBzfnP9yuBXr-Jc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;VoIP (Voice over IP) adalah solusi koneksi telpon lewat Internet. Pada suatu jaringan VoIP ada sebuah komputer yang berfungsi sebagai Sentral Telpon atau Operator, komputer ini di sebut sebagai Server. Sedangkan pesawat-pesawat telpon pelanggannya berupa komputer atau perangkat-perangkat lain (termasuk smartphone) yang terhubung dengan internet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Salah satu server VoIP indonesia adalah http://voiprakyat.or.id yang disponsori oleh bapak Onno Purbo. VoIPRakyat ini dibuat dari rakyat Indonesia untuk rakyat Indonesia alias gratis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Baru-baru ini, aku barusan pasang wifi router di rumah. Harga router wifi sekarang sudah murah, aku beli DLink type DIR-600 seharga Rp 235 ribu rupiah dan itupun agak kemahalan karena begitu selesai beli aku check harganya di bhineka.com cuma Rp 218 ribu he..he... Kebetulan aku punya HPku adalah nokia E51 yang mempunyai fasilitas wifi dan ada fitur Internet Telephone, jadi aku pikir tentunya HP ini bisa dimanfaatkan untuk voip dan ternyata memang bisa he..he...Berikut langkah-langkahnya: &lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. Registrasi &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Daftar dulu untuk mendapatkan nomor telpon di voiprakyat lewat http://voiprakyat.or.id/?inc=signup&amp;amp;op=user , setelah pendaftaran berhasil anda akan mendapatkan voip id dan nomor telpon. Nomor telpon ini juga akan dikirim ke email anda untuk arsipnya. Di bawah ini adalah email konfirmasi pendaftaranku:&lt;br /&gt;
&lt;br /&gt;
=== 8&amp;lt; =========&lt;br /&gt;
&lt;br /&gt;
Halo Bambang Pranoto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Selamat datang di VoIP Rakyat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Di bawah ini adalah account ID dan password anda yang dapat anda gunakan untuk login ke VoIP Rakyat baik melalui website http://www.voiprakyat.or.id atau dengan VoIP Rakyat Communicator dan SIP/IAX2 softphone lainnya.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VoIP ID : nnnnnn (berupa 6 digit angka)&lt;br /&gt;
&lt;br /&gt;
IM ID : bpranoto&lt;br /&gt;
&lt;br /&gt;
Password : *****&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nomor telepon VoIP anda adalah : nnnnnn (sama dengan VoIP ID di atas)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nomor lengkap telepon VoIP anda adalah : +62 848 1001 nnnnnn (tanpa spasi)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SIP proxy atau IAX gateway kami adalah : voiprakyat.or.id&lt;br /&gt;
&lt;br /&gt;
IM server kami adalah: voiprakyat.or.id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Gunakan IM ID sebagai Account ID anda untuk login ke IM server voiprakyat.or.id menggunakan VoIP Rakyat Communicator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Summary:&lt;br /&gt;
&lt;br /&gt;
SIP address anda : nnnnnnn@voiprakyat.or.id&lt;br /&gt;
&lt;br /&gt;
XMPP ID/JID dan email anda : bpranoto@voiprakyat.or.id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Salam hangat,&lt;br /&gt;
&lt;br /&gt;
VoIP Rakyat Development Team.&lt;br /&gt;
&lt;br /&gt;
=== 8&amp;lt; =========&lt;br /&gt;
&lt;br /&gt;
Informasi penting di sini adalah: VoIP ID, password dan alamat server yaitu voiprakyat.or.id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. Konfigurasi SIP  di Nokia E51&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
SIP (Session Initiation Protocol) adalah protocol yang dipergunakan untuk VoIP&lt;br /&gt;
&lt;br /&gt;
Akses lewat Menu =&amp;gt; Tools =&amp;gt; Settings =&amp;gt; Connection =&amp;gt; SIP Settings&lt;br /&gt;
&lt;br /&gt;
Option -&amp;gt; Add new -&amp;gt; Use Default Profile&lt;br /&gt;
&lt;br /&gt;
Isikan data-datanya sbb:&lt;br /&gt;
&lt;br /&gt;
Profile name : voiprakyat atau apa saja terserah anda&lt;br /&gt;
&lt;br /&gt;
Service profile: IETF&lt;br /&gt;
&lt;br /&gt;
Default Access Point: pilih salah satu dari access point yang ada&lt;br /&gt;
&lt;br /&gt;
Public Username: sip:nnnnnn@voiprakyat.or.id (nnnnnn adalah VoIP ID anda, lihat step 1 )&lt;br /&gt;
&lt;br /&gt;
User compression: No&lt;br /&gt;
&lt;br /&gt;
Registration: When needed&lt;br /&gt;
&lt;br /&gt;
Use Security: No&lt;br /&gt;
&lt;br /&gt;
Proxy Server: (tidak usah diset, atau set sesuai kebutuhan)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Registrar Server:&lt;br /&gt;
&lt;br /&gt;
Registrar Server address:  sip:voiprakyat.or.id&lt;br /&gt;
&lt;br /&gt;
Realm: voiprakyat.or.id&lt;br /&gt;
&lt;br /&gt;
Username: nnnnnn (nnnnnn adalah VoIP ID anda dari point 1)&lt;br /&gt;
&lt;br /&gt;
Password: ****** (sesuai password yang anda dapat dari point 1 )&lt;br /&gt;
&lt;br /&gt;
Transport Type: UDP&lt;br /&gt;
&lt;br /&gt;
Port: 5060&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Konfigurasi SIP selesai.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Konfigurasi Internet Tel di Nokia E51&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Akses lewat Menu =&amp;gt; Tools =&amp;gt; Settings =&amp;gt; Connection =&amp;gt; Internet tel.&lt;br /&gt;
&lt;br /&gt;
Option -&amp;gt; New Profile&lt;br /&gt;
&lt;br /&gt;
Name -&amp;gt; VoIPRakyat atau terserah anda&lt;br /&gt;
&lt;br /&gt;
SIP Profiles -&amp;gt; VoIPRakyat  (sesuai dengan yang anda set di poin 2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4.Cara menggunakan panggilan voip&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Untuk dapat melakukan panggilan VoIP pastikan ada koneksi Internet tersedia di HP anda.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lewat home screen, tekan nomor yang akan dipanggil (contoh: 901 nomor test voiprakyat), jangan tekan tombol dial (warna hijau) tapi tekan Option -&amp;gt; Call -&amp;gt; Voice Call -&amp;gt; Internet Call&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Untuk menyimpan di Daftar Kontak, simpan nomor telpon di field Internet telephone dengan format nomor seperti ini: 901@voiprakyat.or.id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Untuk membuat panggilan lewat  Daftar Kontak, buka record kontak yang akan dihubungi, sorot Internet telephone kemudian tekan tombol dial (warna hijau).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Yang disayangkan, saat ini belum ada konektifiti antara voiprakyat dengan nomor telpon PSTN dan cellular sehingga kita hanya bisa saling berhubungan antara nomor voiprakyat saja.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Besok aku akan coba register dan install di BB istriku. Buat teman-teman (ma'af hanya bagi yang benar-benar kenal sama aku) yang sudah mencoba dan berhasil silahkan kirim message untuk nomor telpon voipku.&lt;br /&gt;
&lt;ol&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7890476220667452667-2348512099797824605?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/KGkZFgYCtAQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/2348512099797824605/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2011/11/menginstall-voip-di-nokia-e51.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/2348512099797824605?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/2348512099797824605?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/KGkZFgYCtAQ/menginstall-voip-di-nokia-e51.html" title="Menginstall VoIP di Nokia E51" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2011/11/menginstall-voip-di-nokia-e51.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IGSH4yeip7ImA9WhdaGU0.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-5368422084381987033</id><published>2011-10-29T00:23:00.000-07:00</published><updated>2011-10-29T08:18:49.092-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-29T08:18:49.092-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="broken partition" /><category scheme="http://www.blogger.com/atom/ns#" term="grub rescue prompt" /><category scheme="http://www.blogger.com/atom/ns#" term="ext4" /><category scheme="http://www.blogger.com/atom/ns#" term="fsck" /><category scheme="http://www.blogger.com/atom/ns#" term="e2fsck" /><category scheme="http://www.blogger.com/atom/ns#" term="testdisk" /><category scheme="http://www.blogger.com/atom/ns#" term="repair partition" /><title>Recovering broken ubuntu partition</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7XULDg1dWQuSEXMpMyN7JxqjPm4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7XULDg1dWQuSEXMpMyN7JxqjPm4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7XULDg1dWQuSEXMpMyN7JxqjPm4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7XULDg1dWQuSEXMpMyN7JxqjPm4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Recently, one of my client's computer (Ubuntu 10.10) refused to boot. Instead of booting the operating system it fell down to grub rescue prompt. This indicated that grub could not find its configuration file and it meant the partition table was corrupted :(.&lt;br /&gt;
&lt;br /&gt;
Fortunately, I finally succeeded repairing the system. What I learned from this experience is that ext file system is such a wonderful system which enabling partition recovery.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;br /&gt;These are steps I took, unfortunately there were no screenshots (forgot to take):&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;
&lt;li&gt;Boot with Ubuntu live CD. The booting seemed took time forever because it tried to access the broken partition, but eventually the live session was up.&lt;/li&gt;
&lt;li&gt;Open terminal, became root and checked whether the partition was still there.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#fdisk -l&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Fortunately, fdisk still list the hard disk partition.&lt;/li&gt;
&lt;li&gt;Try to repair with e2fsck.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#e2fsck -C 0 -v /dev/sda1 &lt;/code&gt;&lt;br /&gt;-C 0: means the completion information will be written in file descriptor 0 which is our console.&lt;br /&gt;-v: verbose&lt;br /&gt;&lt;br /&gt;Unfortunately, this step failed. &lt;/li&gt;
&lt;li&gt;After some googling research, I knew that ext file system save its meta data structure in what is called "Superblock" and fortunately ext file system have several Superblocks, so if one superblock is failed we can recover from the other superblock. Now, my problem was find a way to query the superblocks. A way to query the superblock is with dumpe2fs&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# dumpe2fs /dev/sda1 | grep -i superblock&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately, this step also failed. dumpe2fs could not read partition /dev/sda1&lt;/li&gt;
&lt;li&gt;Next step, I tried testdisk. You can read how to use testdisk here: http://www.howtogeek.com/howto/15761/recover-data-like-a-forensics-expert-using-an-ubuntu-live-cd/. Unfortunately, when testdisk "Analyze" function also failed to recover the partition. Its automatic search algorithm report that what it found were ntfs partitions which obviously wrong :)&lt;/li&gt;
&lt;li&gt;I then explored testdisk Advanced menu (File system utils). I found there was a facility to locate the superblock backups. I run this menu and fortunately it found all the superblock backups. Testdisk wrote all the findings in testdisk.log file so we didn't have to take the note manually.&lt;/li&gt;
&lt;li&gt;Quit running e2fsck again but this time with -b (use alternative superblock) option.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#e2fsck -b nnn &lt;nnnnn&gt; -C 0 -v -p -y /dev/sda1&lt;/nnnnn&gt;&lt;/code&gt;&lt;br /&gt;replace nnn with&lt;nnnnn&gt; one of the superblock backup found by testdisk in the above step. Look in testdisk.log&lt;br /&gt;&lt;br /&gt;This time e2fsck succeeded repairing the partition. I rebooted the computer, took out the live cd and the computer came to life again.&lt;/nnnnn&gt;&lt;/li&gt;
&lt;/span&gt;&lt;/ol&gt;
&lt;span class="fullpost"&gt;&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/7890476220667452667-5368422084381987033?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/KD1rsvtrLsg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/5368422084381987033/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2011/10/recovering-broken-ubuntu-partition.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/5368422084381987033?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/5368422084381987033?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/KD1rsvtrLsg/recovering-broken-ubuntu-partition.html" title="Recovering broken ubuntu partition" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2011/10/recovering-broken-ubuntu-partition.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IDQXc4fyp7ImA9WxFbFEU.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-5981994082572164950</id><published>2010-06-28T20:05:00.000-07:00</published><updated>2010-07-07T00:59:30.937-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-07T00:59:30.937-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="firefox" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="pdf" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>View pdf document inline in firefox linux</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/O445nx1Ui4lQOUlW6aDn2b2666E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O445nx1Ui4lQOUlW6aDn2b2666E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/O445nx1Ui4lQOUlW6aDn2b2666E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O445nx1Ui4lQOUlW6aDn2b2666E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;In my bus ticketing web application, tickets are generated in form of pdf file. The problem is firefox (currently version 3.6.6) is not designed to display pdf file in its browser window out of the box, we need to install a plugin.&lt;br /&gt;&lt;br /&gt;The first obvious option is to install adobe acrobat reader for linux which includes firefox plugin (can be freely downloaded from Adobe web site). However, there are some problems:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt; It is huge!&lt;br /&gt;&lt;/li&gt;&lt;li&gt; Seems there are some memory leaks (firefox 3,6.3 and acrobat reader 9.3.2), after some time it only displays white blank page. You need to restart firefox to cure it. I don't know whether the problem is in acrobat or firefox.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Fortunately, for Ubuntu, we still have another option:&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt; Install mozzplugger and xpdf-reader:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ sudo apt-get install mozplugger xpdf&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Edit mozzplugger configuration file:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ sudo vim /etc/mozpluggerrc&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Find this line:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;text/x-pdf:pdf:PDF file&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Replace the blocks below that line to:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;       repeat noisy swallow(Xpdf) fill: xpdf "$file"&lt;br /&gt;       repeat noisy swallow(evince) fill: evice "$file"&lt;br /&gt;       ACROREAD()&lt;br /&gt;       repeat noisy swallow(okular) fill: okular "$file"&lt;br /&gt;       GV()&lt;br /&gt;       repeat noisy fill exits: xpdf "$file"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; Save the file&lt;br /&gt;&lt;/li&gt;&lt;li&gt; Restart firefox&lt;br /&gt;&lt;/li&gt;&lt;li&gt; Done. And here is a screen shot:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lx3ybG2Edyw/TClpBrH4TrI/AAAAAAAAAt0/B6GUZu-nI5g/s1600/Screenshot-ticket_form.php+%28application-pdf+Object%29+-+Mozilla+Firefox.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 206px;" src="http://2.bp.blogspot.com/_lx3ybG2Edyw/TClpBrH4TrI/AAAAAAAAAt0/B6GUZu-nI5g/s320/Screenshot-ticket_form.php+%28application-pdf+Object%29+-+Mozilla+Firefox.png" alt="" id="BLOGGER_PHOTO_ID_5488033098404220594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&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/7890476220667452667-5981994082572164950?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/XVaCECgdr1A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/5981994082572164950/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2010/06/view-pdf-document-inline-in-firefox.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/5981994082572164950?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/5981994082572164950?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/XVaCECgdr1A/view-pdf-document-inline-in-firefox.html" title="View pdf document inline in firefox linux" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_lx3ybG2Edyw/TClpBrH4TrI/AAAAAAAAAt0/B6GUZu-nI5g/s72-c/Screenshot-ticket_form.php+%28application-pdf+Object%29+-+Mozilla+Firefox.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2010/06/view-pdf-document-inline-in-firefox.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EGR3ozcSp7ImA9WxNbE0U.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-4245104186560886800</id><published>2009-11-16T07:24:00.000-08:00</published><updated>2009-11-16T07:33:46.489-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-16T07:33:46.489-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="libcupsys2-dev" /><category scheme="http://www.blogger.com/atom/ns#" term="install-wine-deps.sh" /><category scheme="http://www.blogger.com/atom/ns#" term="wine" /><title>Installing wine on Ubuntu 9.10 from source</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XdNw_9Y9fHuC9xPwFjOObLsZbQ8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XdNw_9Y9fHuC9xPwFjOObLsZbQ8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XdNw_9Y9fHuC9xPwFjOObLsZbQ8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XdNw_9Y9fHuC9xPwFjOObLsZbQ8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;I just upgraded my ubuntu 9.04 to ubuntu 9.10.&lt;br /&gt;&lt;br /&gt;Before recompiling wine, we needed to install all the dependencies. &lt;br /&gt;&lt;br /&gt;I grabbed the newest dependencies installation script from http://winezeug.googlecode.com/svn/trunk/install-wine-deps.sh&lt;br /&gt;&lt;br /&gt;However, when I ran it, it stopped with an error:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Reading package lists... Done&lt;br /&gt;Building dependency tree       &lt;br /&gt;Reading state information... Done&lt;br /&gt;Package libcupsys2-dev is a virtual package provided by:&lt;br /&gt;  libcups2-dev 1.4.1-5ubuntu2.1&lt;br /&gt;You should explicitly select one to install.&lt;br /&gt;E: Package libcupsys2-dev has no installation candidate&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;From the error message, the solution is clear, edit the script and replace libcupsys2-dev with libcups2-dev&lt;br /&gt;&lt;br /&gt;... and we can enjoy the wine again now&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7890476220667452667-4245104186560886800?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/Bvhy58-nFyo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/4245104186560886800/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2009/11/installing-wine-on-ubuntu-910-from.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/4245104186560886800?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/4245104186560886800?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/Bvhy58-nFyo/installing-wine-on-ubuntu-910-from.html" title="Installing wine on Ubuntu 9.10 from source" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2009/11/installing-wine-on-ubuntu-910-from.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcEQXoyfip7ImA9WxNbE0U.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-3758831822624992818</id><published>2009-11-14T19:20:00.000-08:00</published><updated>2009-11-16T07:06:40.496-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-16T07:06:40.496-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu 9.10" /><category scheme="http://www.blogger.com/atom/ns#" term="hamachi" /><title>Ubuntu 9.10 hamachi problem</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pQXw1gFUFLo5SSJeIYpBs36JMN8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pQXw1gFUFLo5SSJeIYpBs36JMN8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pQXw1gFUFLo5SSJeIYpBs36JMN8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pQXw1gFUFLo5SSJeIYpBs36JMN8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;I just installed Ubuntu 9.10 on a fresh new computer for a client. &lt;br /&gt;&lt;br /&gt;For this particular computer I install hamachi. Unfortunately, when run it only displayed 'Killed' in console and then a crash report notification appeared on the notification panel.&lt;br /&gt;&lt;br /&gt;After some googling, it turned that this new ubuntu doesn't like UPX packed application and unfortunately hamachi for linux (version hamachi-lnx-0.9.9.9-20) is one of it. &lt;br /&gt;&lt;br /&gt;The solution is:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt; Install upx uncompressor:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$sudo apt-get install upx-ucl&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;li&gt;Unpack hamachi (assuming hamachi is installed in /usr/bin):&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ sudo upx -d hamachi&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;After that, hamachi ran fine. This solution is also applied for other UPX packed applications. Hopefully, Ubuntu fixes this upx packed application problem which will be the best solution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7890476220667452667-3758831822624992818?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/PPuACptJjfM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/3758831822624992818/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2009/11/ubuntu-910-hamachi-problem.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/3758831822624992818?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/3758831822624992818?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/PPuACptJjfM/ubuntu-910-hamachi-problem.html" title="Ubuntu 9.10 hamachi problem" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2009/11/ubuntu-910-hamachi-problem.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04NRn84eCp7ImA9WxNREUo.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-3013158093144912729</id><published>2009-09-05T11:59:00.001-07:00</published><updated>2009-09-05T12:46:37.130-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-05T12:46:37.130-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="youtube" /><title>Cara mendownload video youtube yang tidak dapat didownload....</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vVnGyjGXjOqnBd3dXbEjwhxY4Gs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vVnGyjGXjOqnBd3dXbEjwhxY4Gs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vVnGyjGXjOqnBd3dXbEjwhxY4Gs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vVnGyjGXjOqnBd3dXbEjwhxY4Gs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Video-video di youtube.com tidak dapat didownload secara langsung, tetapi ada beberapa situs-situs dan program-program utility termasuk addon Mozila firefox dan Widget dari Opera yang memungkinkan kita mendownload video dari youtube.&lt;br /&gt;&lt;br /&gt;Namun beberapa video tidak dapat didownload dengan program-program khusus di atas. Kelihatannya youtube melakukan proteksi sehingga beberapa video hanya dapat dimainkan tetapi tidak dapat didownload. Sebagai contoh: http://www.youtube.com/watch?v=_fgURJZebqc&lt;br /&gt;&lt;br /&gt;Lalu bagaimana cara kita mendownload video-video yang tidak dapat didownload tersebut?&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Apapun proteksi yang dilakukan youtube, sebenarnya komputer kita telah mendownload file video tersebut. Kalau tidak, bagaimana browser kita bisa memainkan video tsb? Jadi kuncinya adalah bagaimana menemukan file yang telah didownload oleh browser kita tsb. Ikuti langkah-langkah ini.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;File-file video dari youtube adalah dalam format file .flv, maka pertama-tama kita harus mempunyai player dari file flv. Silahkan search di google player-player yang bisa memainkan file flv, ada banyak dan rasanya semua merupakan freeware yang dapat didownload gratis.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;li&gt;Buka youtube di browser kita dan nikmati videonya sampai selesai.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lx3ybG2Edyw/SqK-PP7ZZ9I/AAAAAAAAAsk/DkoBAPU6HoI/s1600-h/open_in_your_browser.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 194px;" src="http://2.bp.blogspot.com/_lx3ybG2Edyw/SqK-PP7ZZ9I/AAAAAAAAAsk/DkoBAPU6HoI/s320/open_in_your_browser.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5378070074216769490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;li&gt;Tunggu video sampai tuntas dimainkan, lalu cari direktori cache dari browser kita. Untuk Opera direktori tempat browser menyimpan file-file yang didonwload dapat dilihat dengan mengetikan di address barnya &lt;b&gt;&lt;i&gt;opera:about&lt;/i&gt;&lt;/b&gt;, untuk Firefox kita dapat melihatnya dengan mengetikkan &lt;b&gt;&lt;i&gt;about:cache&lt;/i&gt;&lt;/b&gt; di address barnya. Sorot textnya dan kemudian copy ke buffer.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lx3ybG2Edyw/SqK-8zm6I5I/AAAAAAAAAss/jPxiL3ELdd0/s1600-h/where_opera_stores_the_files.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 194px;" src="http://2.bp.blogspot.com/_lx3ybG2Edyw/SqK-8zm6I5I/AAAAAAAAAss/jPxiL3ELdd0/s320/where_opera_stores_the_files.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5378070856888624018" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;li&gt;Buka Windows Explorer atau My Computer dan Paste di address bar lalu tekan Enter.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_lx3ybG2Edyw/SqK_M9tQ2-I/AAAAAAAAAs0/lJeBzxfOTxg/s1600-h/open_the_cache_directory.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_lx3ybG2Edyw/SqK_M9tQ2-I/AAAAAAAAAs0/lJeBzxfOTxg/s320/open_the_cache_directory.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5378071134477540322" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;li&gt;Selanjutnya Klik View -&gt; Details dan kemudian View -&gt; Arrange Icons by -&gt; Size dan kemudian ulangi sekali lagi View -&gt; Arrange Icons by -&gt; Size. Setelah ini, file-file yang ada di direktori tsb. akan ditampilkan dari ukurannya yang paling besar ke paling kecil.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_lx3ybG2Edyw/SqK_jcmqg0I/AAAAAAAAAs8/5QSnW5o9q1U/s1600-h/files_sort_by_size_descending.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_lx3ybG2Edyw/SqK_jcmqg0I/AAAAAAAAAs8/5QSnW5o9q1U/s320/files_sort_by_size_descending.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5378071520728482626" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;li&gt;Dari Size dan Date Modifiednya, kita tahu bahwa (kemungkinan besar) file yang paling atas adalah file video yang kita cari. Copykan file tsb. ke folder yang kita kehendaki, rename dan berikan extension .flv Pada contoh ini, file yang aku download aku rename menjadi file origami_cow.flv&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_lx3ybG2Edyw/SqK_wLMwCuI/AAAAAAAAAtE/RyMPswx9nxM/s1600-h/copy_the_file_and_rename_to_flv_file.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_lx3ybG2Edyw/SqK_wLMwCuI/AAAAAAAAAtE/RyMPswx9nxM/s320/copy_the_file_and_rename_to_flv_file.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5378071739394689762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;li&gt;Buka file origami_cow.flv tersebut di flv player kita.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lx3ybG2Edyw/SqK_-2CrEcI/AAAAAAAAAtM/zULvrtH9iV8/s1600-h/played_offline_with_flv_player.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 301px;" src="http://3.bp.blogspot.com/_lx3ybG2Edyw/SqK_-2CrEcI/AAAAAAAAAtM/zULvrtH9iV8/s320/played_offline_with_flv_player.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5378071991413313986" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&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/7890476220667452667-3013158093144912729?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/xm01kh5XRKk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/3013158093144912729/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2009/09/cara-mendownload-video-youtube-yang.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/3013158093144912729?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/3013158093144912729?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/xm01kh5XRKk/cara-mendownload-video-youtube-yang.html" title="Cara mendownload video youtube yang tidak dapat didownload...." /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_lx3ybG2Edyw/SqK-PP7ZZ9I/AAAAAAAAAsk/DkoBAPU6HoI/s72-c/open_in_your_browser.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2009/09/cara-mendownload-video-youtube-yang.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08BSHw6eyp7ImA9WxNTGEo.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-2547724523848072533</id><published>2009-08-20T17:19:00.000-07:00</published><updated>2009-08-21T11:37:39.213-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-21T11:37:39.213-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="installing mysql 5.1.37" /><category scheme="http://www.blogger.com/atom/ns#" term="windows" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="apache" /><title>Problem installing MySQL 5.1.37 on Windows</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/b_HTrwvXvVxZZESi0ViYlUBp5B4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b_HTrwvXvVxZZESi0ViYlUBp5B4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/b_HTrwvXvVxZZESi0ViYlUBp5B4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b_HTrwvXvVxZZESi0ViYlUBp5B4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Last night, I decided to upgrade my MySQL from version 4.1 to version 5 on my Windows XP box. I went to &lt;a href=http://dev.mysql.com/downloads/mysql/5.1.html#win32&gt;mysql's download area&lt;/a&gt; and downloaded the latest windows MSI installer version 5.1.37.&lt;br /&gt;&lt;br /&gt;After finished downloading the huge 91MB file, I backed up my MySQL database with mysqldump, uninstalled the old version 4.1 and began installed the new version, unfortunately the installation always failed with this message:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;&lt;b&gt;MySQL Server 5.1 Setup Wizard ended prematurely&lt;br /&gt;&lt;br /&gt;The wizard was interrupted before MySQL Server 5.1. could be completely installed.&lt;br /&gt;&lt;br /&gt;Your system has not been modified. To complete installation at another time, please run&lt;br /&gt;setup again.&lt;/i&gt;&lt;/b&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Again, the old uncle google came to help. This is MySQL's bug, didn't they test it before releasing the new version? Google pointed me to &lt;a href="http://bugs.mysql.com/bug.php?id=45418"&gt;a solution&lt;/a&gt;: you need to download and install orca, a tool for editing MSI files, which can be downloaded from &lt;a href="http://www.technipages.com/wp-content/uploads/2007/11/orca.Msi"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Open the MySQL msi installation file, find and delete the action row SetDateTime and then save the msi file. After that, I had the new MySQL 5.1 installed on my computer. There was also no problem restoring the database.&lt;br /&gt;&lt;br /&gt;The next step was copying the libmysql.dll file to my php installation directory. Unfortunately, another problem came! the apache server always crashed whenever I loaded my php application, and again uncle google came to rescue, he leaded me to download &lt;a href="http://windows.php.net/downloads/snaps/php-5.2-win32-VC6-x86-latest.zip"&gt;this zip file&lt;/a&gt;, put down the apache server, copying the libmysql.dll from the zip file to the php directory, restarting the apache and then everything runs well.&lt;br /&gt;&lt;br /&gt;Kudos to uncle google!&lt;br /&gt;&lt;br /&gt;&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/7890476220667452667-2547724523848072533?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/XC6n2D6OVSI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/2547724523848072533/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2009/08/problem-installing-mysql-5137-on.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/2547724523848072533?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/2547724523848072533?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/XC6n2D6OVSI/problem-installing-mysql-5137-on.html" title="Problem installing MySQL 5.1.37 on Windows" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2009/08/problem-installing-mysql-5137-on.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMGQnwyfSp7ImA9WxNTE08.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-7048937403301986719</id><published>2009-08-14T13:54:00.000-07:00</published><updated>2009-08-15T00:47:03.295-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-15T00:47:03.295-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="network manager" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="dispatcher.d" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu 9.04" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Gnome Network Manager dispatcher.d scripts doesn't run</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Hufv_iKQiBJssh5nSO0Ushp2ypU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Hufv_iKQiBJssh5nSO0Ushp2ypU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Hufv_iKQiBJssh5nSO0Ushp2ypU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Hufv_iKQiBJssh5nSO0Ushp2ypU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;I just set up a new linux box of Ubuntu 9.04. &lt;br /&gt;&lt;br /&gt;This computer will connect to netware servers, so I installed ipx. However, with this particular version of Ubuntu, the ipx won't start at boot time eventhough it has starting script in the /etc/init.d which is correctly linked to startup directories (/etc/rc2.d, /etc/rc3.d, etc). I guessed the reason is Gnome Network Manager, somehow it prevented ipx to be started.&lt;br /&gt;&lt;br /&gt;I then wrote a script in /etc/NetworkManager/dispatcher.d, I gave it a name: 02ipx.sh, so it will executed after the built in /etc/NetworkManager/01ifupdown, the content is very simple&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;if [ "$1" == "eth0" ] &amp;&amp; [ $2 == "up" ]&lt;br /&gt;then&lt;br /&gt; /etc/init.d/ipx restart&lt;br /&gt;fi&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I assign root as the owner of script and set the permission to 775. Unfortunately, this script was never called!!&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;After spent 5 hours pulling my hairs, uncle Google came to help with &lt;br /&gt;&lt;a href="http://markmail.org/message/lqq2rup4ludz4q7z#query:network%20manager%20dispatcher.d%20not%20running+page:1+mid:43klj3a75iyryv5g+state:results"&gt;this page&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It turns that Network Manager is very picky with the script permission and ownership. Here is the relevant quote :&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;font size="small"&gt;&lt;br /&gt;Yep that is correct from the source:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://svn.gnome.org/viewvc/NetworkManager/tags/NETWORKMANAGER_0_6_5_RELEASE/dispatcher-daemon/NetworkManagerDispatcher.c?view=markup"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Yep that is correct from the source:&lt;br /&gt;&lt;br /&gt;http://svn.gnome.org/viewvc/NetworkManager/tags/NETWORKMANAGER_0_6_5_RELEASE/dispatcher-daemon/NetworkManagerDispatcher.c?view=markup&lt;br /&gt;&lt;br /&gt;/* * nmd_permission_check *&lt;br /&gt;* Verify that the given script has the permissions we want. Specifically, &lt;br /&gt;* ensure that the file is&lt;br /&gt;* - A regular file. &lt;br /&gt;* - Owned by root. &lt;br /&gt;* - Not writable by the group or by other. &lt;br /&gt;* - Not setuid. &lt;br /&gt;* - Executable by the owner. &lt;br /&gt;* */&lt;br /&gt;&lt;/font&gt; &lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;So the Network Manager doesn't like the 775 permission of my script. Changing the permission to 755 solves my problem.&lt;br /&gt;&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/7890476220667452667-7048937403301986719?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/K7n1QOrohjU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/7048937403301986719/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2009/08/gnome-network-manager-dispatcherd.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/7048937403301986719?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/7048937403301986719?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/K7n1QOrohjU/gnome-network-manager-dispatcherd.html" title="Gnome Network Manager dispatcher.d scripts doesn't run" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2009/08/gnome-network-manager-dispatcherd.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMMQ386eyp7ImA9WxJaFEQ.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-4348583155545913219</id><published>2009-08-05T11:16:00.000-07:00</published><updated>2009-08-05T11:38:02.113-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-05T11:38:02.113-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="shutdown problem" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="acpid" /><title>Ubuntu shutdown problem, acpid: exiting...</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GqTrFL2YSuz_P7oWVbe1V2M_DtI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GqTrFL2YSuz_P7oWVbe1V2M_DtI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GqTrFL2YSuz_P7oWVbe1V2M_DtI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GqTrFL2YSuz_P7oWVbe1V2M_DtI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Some times ago, I uninstalled gnome network-manager on my Ubuntu 9.04 dan replaced it with WICD because it won't bring up ipx protocol on boot time. Unfortunately, WICD also has its own problem, it can't bring up your wired and wireless interface simultaneously.&lt;br /&gt;&lt;br /&gt;Tonight, I decided to replace WICD with gnome network-manager and I planned to fix the ipx problem through its dispatcher scripts feature. Surprisingly, right after the network manager installed there is no problem with the ipx protocol, apparently the package network-manager in ubuntu repository has been updated recently.&lt;br /&gt;&lt;br /&gt;However, when I shutdown or restarted my computer, it always hang with a blank screen displaying the message: &lt;span style="font-style:italic;"&gt;acpid:exiting&lt;/span&gt;, the only way to completely shut down my laptop is only by pressing the power button for about 3 seconds. &lt;br /&gt;&lt;br /&gt;After some googling, it turns that the problem was the network interfaces should be brought down before taking down the computer.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Here is the solution:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Edit as root the file /etc/init.d/alsa-utils&lt;br /&gt;&lt;li&gt;Find &lt;i&gt;stop)&lt;/i&gt;, here is what it looks like:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  stop)&lt;br /&gt;        EXITSTATUS=0&lt;br /&gt;        TARGET_CARD="$2"&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Insert statements to bring down your network interfaces:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  stop)&lt;br /&gt;        ifconfig wlan0 down&lt;br /&gt;        ifconfig eth0 down&lt;br /&gt;        EXITSTATUS=0&lt;br /&gt;        TARGET_CARD="$2"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Problem solved ... :)&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/7890476220667452667-4348583155545913219?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/HqDKbJD-kR0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/4348583155545913219/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2009/08/ubuntu-shutdown-problem-acpid-exiting.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/4348583155545913219?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/4348583155545913219?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/HqDKbJD-kR0/ubuntu-shutdown-problem-acpid-exiting.html" title="Ubuntu shutdown problem, acpid: exiting..." /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2009/08/ubuntu-shutdown-problem-acpid-exiting.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MBR3w8cSp7ImA9WxJVEk0.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-7552465741597522780</id><published>2009-06-28T10:05:00.000-07:00</published><updated>2009-06-28T10:17:36.279-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-28T10:17:36.279-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="yahoo messenger" /><category scheme="http://www.blogger.com/atom/ns#" term="pidgin" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Yahoo messenger problem on Linux</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sgvX288wAsJ5_vIBDCcAewOPx1k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sgvX288wAsJ5_vIBDCcAewOPx1k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sgvX288wAsJ5_vIBDCcAewOPx1k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sgvX288wAsJ5_vIBDCcAewOPx1k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Recently, I can't connect to yahoo messenger through Pidgin on my Ubuntu 9.04 box. After some googling I found this page: http://news.softpedia.com/news/How-to-Fix-Yahoo-problem-in-Pidgin-114754.shtml&lt;br /&gt;&lt;br /&gt;Unfortunately, after following the steps I still can't connect to yahoo with error message: unknown "error 1013. Logging into the Yahoo! website may fix this". Logging to yahoo website as suggested doesn't cure the problem :(&lt;br /&gt;&lt;br /&gt;After some more googling, I found this page: http://developer.pidgin.im/ticket/9467. Removing the @yahoo.com part of your pidgen account solves the problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7890476220667452667-7552465741597522780?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/0LnM3ObkIa8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/7552465741597522780/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2009/06/yahoo-messenger-problem-on-linux.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/7552465741597522780?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/7552465741597522780?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/0LnM3ObkIa8/yahoo-messenger-problem-on-linux.html" title="Yahoo messenger problem on Linux" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2009/06/yahoo-messenger-problem-on-linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQNRHc-fCp7ImA9WxJXGU8.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-8157556303814786341</id><published>2009-06-13T11:31:00.000-07:00</published><updated>2009-06-13T13:03:15.954-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-13T13:03:15.954-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="e-spt" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="wine" /><title>Menjalankan e-spt di linux.</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hFcA7KPyHTMOjyazTfKCi9naP0M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hFcA7KPyHTMOjyazTfKCi9naP0M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hFcA7KPyHTMOjyazTfKCi9naP0M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hFcA7KPyHTMOjyazTfKCi9naP0M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Dirjen pajak belakangan ini mensosialisasikan e-spt yaitu program aplikasi komputer yang dipergunakan untuk pelaporan pajak (spt).&lt;br /&gt;&lt;br /&gt;Namun salah satu kendala besar bagi perusahaan-perusahaan menggunakan linux adalah bahwa program-program e-spt ini didesign hanya untuk komputer-komputer dengan O/S windows. Apakah kita harus mengorbankan sebuah komputer khusus plus o/s Windows hanya khusus untuk aplikasi e-spt ini?&lt;br /&gt;&lt;br /&gt;Untungnya, jawabannya adalah tidak, Wine (http://www.winehq.org) adalah sahabat anda. Bagaimana langkah-langkahnya?&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Install wine.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Install komponen-komponen windows dengan bantuan winetricks&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Download dan install program e-spt&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Set format tanggal Wine sesuai dengan format tanggal Indonesia&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Detail langkah-langkah di atas adalah sbb:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Install wine.&lt;br /&gt;Secara garis besar ada 2 cara untuk menginstall Wine:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Install package binary&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Install dari source&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Cara paling mudah dan cepat adalah dengan menginstall package binary. Namun, metode ini mempunyai beberapa kelemahan: Package yang terinstall sering kali tertinggal beberapa versi dari versi terbaru, padahal untuk saat ini, development wine berkembang dengan cepat. Kompatibilitas dan stabilitas versi terbaru jauh lebih baik dari versi-versi sebelumnya. Kelemahan lain adalah kesulitan melakukan patching apabila ditemukan sebuah masalah.&lt;br /&gt;&lt;br /&gt;Dengan pertimbangan-pertimbangan di atas, penulis lebih menyukai instalasi Wine dari source code. Langkah-langkah untuk menginstall wine dari source di Ubuntu 7.10 s/d 9.04 adalah sbb:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Install package-package dependency yang diperlukan:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ wget http://winezeug.googlecode.com/svn/trunk/install-wine-deps.sh&lt;br /&gt;$ sudo ./install-wine-deps.sh&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Download, compile dan install package wine terbaru dari http://www.winehq.org, pada saat tulisan ini dibuat versi terbaru adalah versi 1.1.23&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ wget http://prdownloads.sourceforge.net/wine/wine-1.1.23.tar.bz2&lt;br /&gt;$ tar -xf wine-1.1.23.tar.bz2&lt;br /&gt;$ cd wine-1.1.23&lt;br /&gt;$ ./configure&lt;br /&gt;$ make depend &amp;amp;&amp;amp; make&lt;br /&gt;$ sudo make install&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Install komponen-komponen windows dengan bantuan winetricks&lt;/li&gt;&lt;br /&gt;Winetricks merupakan script yang berguna untuk mendownload komponen-komponen windows yang diperlukan. Script ini dapat didownload dari http://winezeug.googlecode.com/svn/trunk/winetricks. Ikuti langkah-langkah ini:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ sudo apt-get install cabextract&lt;br /&gt;$ wget -c http://winezeug.googlecode.com/svn/trunk/winetricks&lt;br /&gt;$ chmod 755 winetricks&lt;br /&gt;$ ./winetricks&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Interface graphical dari winetricks akan muncul sbb:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lx3ybG2Edyw/SjP9AZVH05I/AAAAAAAAAlM/jdRuDphlsQ4/s1600-h/winetricks.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://2.bp.blogspot.com/_lx3ybG2Edyw/SjP9AZVH05I/AAAAAAAAAlM/jdRuDphlsQ4/s320/winetricks.png" alt="" id="BLOGGER_PHOTO_ID_5346895365860217746" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tandai package-package jet40, mdac28 dan mfc42 dan kemudian clik OK. Winetricks akan mendownload package-package ybs. dan menginstallkan ke wine. Ikuti tahap-tahap penginstallan tiap-tiap package.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Download dan install program e-spt&lt;br /&gt;Program-program e-spt dapat di download dari situs dirjen pajak: http://www.pajak.go.id/index.php?option=com_content&amp;view=article&amp;id=73&amp;Itemid=107&lt;br /&gt;&lt;br /&gt;Sebagai contoh kita akan install e-spt untuk SPT Masa PPN&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ wget -c http://www.pajak.go.id/dmdocuments/Installer%20eSPT%20PPN%201107%20Versi%203.0%20With%20Zip%20+%20Pembetulan%202%20Digit%20%2803-03-2009%29.zip&lt;br /&gt;$ unzip "Installer eSPT PPN 1107 Versi 3.0 With Zip + Pembetulan 2 Digit (03-03-2009).zip"&lt;br /&gt;$ cd "Installer eSPT PPN 1107 Versi 3.0 With Zip + Pembetulan 2 Digit (03-03-2009)"&lt;br /&gt;$ wine setup.exe&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Set format tanggal Wine sesuai dengan format tanggal Indonesia&lt;/li&gt;&lt;br /&gt;Program e-spt mensyaratkan format tanggal harus dalam dd/MM/yyyy. Untuk itu ubahlah key registry HKEY_CURRENT_USER\ControlPanel\International\sShortDate menjadi dd/MM/yyyy&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ wine regedit&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_lx3ybG2Edyw/SjQDp-Qy2MI/AAAAAAAAAlU/dV0yLhDMn8o/s1600-h/wine_change_date_format.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://4.bp.blogspot.com/_lx3ybG2Edyw/SjQDp-Qy2MI/AAAAAAAAAlU/dV0yLhDMn8o/s320/wine_change_date_format.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5346902677218580674" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Dan hore! Program e-spt PPN telah terinstall di sistim linux kita. Di ubuntu, jalankan lewat menu Applications -&gt; Wine -&gt; Programs -&gt; eSPT PPN 1107 Versi 3.0 -&gt; eSPT PPN 1107 Versi 3.0&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lx3ybG2Edyw/SjQF3Dcw5AI/AAAAAAAAAlc/xB8MAUguICs/s1600-h/e-sptPPN1107.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_lx3ybG2Edyw/SjQF3Dcw5AI/AAAAAAAAAlc/xB8MAUguICs/s320/e-sptPPN1107.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5346905100972516354" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&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/7890476220667452667-8157556303814786341?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/C9efVvH5Z_A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/8157556303814786341/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2009/06/menjalankan-e-spt-di-linux.html#comment-form" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/8157556303814786341?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/8157556303814786341?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/C9efVvH5Z_A/menjalankan-e-spt-di-linux.html" title="Menjalankan e-spt di linux." /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_lx3ybG2Edyw/SjP9AZVH05I/AAAAAAAAAlM/jdRuDphlsQ4/s72-c/winetricks.png" height="72" width="72" /><thr:total>9</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2009/06/menjalankan-e-spt-di-linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUCQnozeCp7ImA9WxJREEU.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-6544550322894774620</id><published>2009-05-11T16:53:00.000-07:00</published><updated>2009-05-11T17:14:23.480-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-11T17:14:23.480-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="webhttrack" /><category scheme="http://www.blogger.com/atom/ns#" term="ibpp" /><category scheme="http://www.blogger.com/atom/ns#" term="firebird" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="wxwidgets" /><category scheme="http://www.blogger.com/atom/ns#" term="local web mirror" /><title>download ibpp and its documentation</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TYwFrn9uOipIkG2TFjEvMhYFSEQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TYwFrn9uOipIkG2TFjEvMhYFSEQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TYwFrn9uOipIkG2TFjEvMhYFSEQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TYwFrn9uOipIkG2TFjEvMhYFSEQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Okay,&lt;br /&gt;&lt;br /&gt;I think it's time to try make a real database application using C++ and WxWidget. The tools needed which I already have so far:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;C++: it is a native language with linux. Almost every linux distribution have it, and if you don't have it and you're using ubuntu, just install package base-essential with synaptic or apt-get.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;WxWidgets: the main library which supposed to make our life easier.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Code::Blocks: the IDE&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Firebird database server.&lt;br /&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;We still need client library for accessing the database server. WxWidgets has database access functions using ODBC. But, I don't like ODBC, I prefer to have client library which access the database natively.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;After some google research, ibpp seems the best c++ firebird client library. I downloaded the library from http://www.ibpp.org/. But, a library is no use at all without documentation and it's very unfortunate ibpp only provides online documentation. As we live in Indonesia we certainly need an offline documentation so we can work without internet connection.&lt;br /&gt;&lt;br /&gt;Thanks to uncle google (again), I found a free utility which can save an entire website for offline reading from here: http://www.httrack.com/page/2/en/index.html. Installing under linux takes the usual route:&lt;br /&gt;&lt;br /&gt;&lt;font size="-1"&gt;&lt;i&gt;&lt;br /&gt;$ wget -c http://www.httrack.com/httrack-3.43-4.tar.gz&lt;br /&gt;$ tar -xf httrack-3.43-4.tar.gz&lt;br /&gt;$ cd httrack-3.43.4&lt;br /&gt;$ ./configure&lt;br /&gt;&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;configure doesn't complain anything! I the proceeded&lt;br /&gt;&lt;br /&gt;&lt;font size="-1"&gt;&lt;i&gt;&lt;br /&gt;$ make&lt;br /&gt;# make install&lt;br /&gt;&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Great!, now I have "WebHTTrack Website Copier" in my Applications-&gt;Internet menu, unfortunately nothing comes up when I clicked it.... :(&lt;br /&gt;&lt;br /&gt;Stuck? of course no! I tried to run it from terminal and here is what came up:&lt;br /&gt;&lt;br /&gt;&lt;font size="-1"&gt;&lt;i&gt;&lt;br /&gt;$ webhttrack/usr/local/bin/htsserver: error while loading shared libraries: libhttrack.so.2: cannot open shared object file: No such file or directory&lt;br /&gt;/usr/local/bin/webhttrack(6248): could not spawn htsserver&lt;br /&gt;&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;So it missed libhhtrack.so.2, it turns out that this file is located in /usr/local/lib. Make a soft link to it in the /usr/lib solves the problem:&lt;br /&gt;&lt;br /&gt;&lt;font size="-1"&gt;&lt;i&gt;&lt;br /&gt;# ln -s /usr/local/lib/libhttrack.so.2 /usr/lib/libhttrack.so.2&lt;br /&gt;&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Next step is firing webhttrack, make a new project and point the url address to ibpp online documentation (http://www.ibpp.org/reference), and 2 minutes later I have the documentation in my harddisk.&lt;br /&gt;&lt;br /&gt;&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/7890476220667452667-6544550322894774620?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/Tm5TGDCdk-M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/6544550322894774620/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2009/05/download-ibpp-and-its-documentation.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/6544550322894774620?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/6544550322894774620?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/Tm5TGDCdk-M/download-ibpp-and-its-documentation.html" title="download ibpp and its documentation" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2009/05/download-ibpp-and-its-documentation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIFRns-eSp7ImA9WxJSGUk.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-463185794692420665</id><published>2009-05-09T21:46:00.000-07:00</published><updated>2009-05-10T02:41:57.551-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-10T02:41:57.551-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="timbangan elektronik" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="delphi" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="wine" /><title>Program timbangan elektronik, sebuah program Windows yang dijalankan di Linux.</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/i6Wry_NAuvHu9YxFIia_j5NLyWE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i6Wry_NAuvHu9YxFIia_j5NLyWE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/i6Wry_NAuvHu9YxFIia_j5NLyWE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i6Wry_NAuvHu9YxFIia_j5NLyWE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Kemarin, mumpung hari libur aku setup program timbangan digital baru di kantor.&lt;br /&gt;&lt;br /&gt;Program yang lama merupakan program DOS yang aku tulis dengan menggunakan Clipper, program ini berjalan dengan baik di linux dengan bantuan dosemu.&lt;br /&gt;&lt;br /&gt;Program baru merupakan program Windows. Salah satu improvement dalam program ini adalah support untuk beberapa jenis indikator. Program diinstall di linux dengan wine versi 1.1.20.&lt;br /&gt;&lt;br /&gt;Beberapa catatan dalam instalasi program ini di wine:&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Pencetakan slip bukti timbangan dan laporan-2 menggunakan printer Dot Matrix. Apabila pencetakan dilakukan lewat printer driver, pencetakan dengan printer dot matrix akan menjadi sangat lambat plus hasil buruk plus boros pita... :)&lt;br /&gt;&lt;br /&gt;Oleh karena itu, program ini melakukan pencetakan langsung melalui printer port lpt1. Di windows, hal ini tidak menjadi suatu permasalahan,  di linux dengan wine, maka lpt1 akan dimap ke /dev/lp0.&lt;br /&gt;&lt;br /&gt;Masalahnya, owner dari device ini adalah root dan group lp. Secara default user-user di Ubuntu (..nggak tahu untuk distro lainnya) tidak termasuk dalam group lp. Maka, jika kita dalam wine berusaha mencetak ke lpt1 akan selalu ditolak. Silahkan coba perintah-perintah di bawah ini:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;$wine cmd&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;C:\&gt;dir &gt; lpt1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Kalau respon yang kita dapat adalah printer kita mencetak isi C:\, maka selamat! Tapi jika yang anda dapatkan adalah error message: Access denied, silahkan baca lebih lanjut.&lt;br /&gt;&lt;br /&gt;Lalu apa solusinya? menjalankan wine sebagai root? ha..ha..,ya enggaklah, itu kan solusi bodoh (yang sayangnya sering kali aku lihat dilakukan orang-orang). Solusi paling tepat adalah memasukkan user ke dalam group lp:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;$sudo usermod -a -G lp bambang&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Awas: perubahan ini hanya efektif setelah anda logoff dan login kembali!&lt;br /&gt;&lt;br /&gt;Setelah itu, silahkankan anda masuk lagi ke command prompt wine dan coba cetak isi directory ke printer anda&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Masalah lain, pada modul setting konfigurasi Indikator (Indikator adalah alat pembaca hasil timbangan yang terkonek ke komputer kita melalui serial port), program berusaha mencari serial port apa saja yang ada di komputer kita.&lt;br /&gt;&lt;br /&gt;Pencarian serial ports ini dilakukan pada registry window: &lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;HKLM\HARDWARE\DEVICEMAP\SERIALCOMM&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Masalahnya, di wine (sampai dengan versi pada waktu blog ini ditulis: 1.1.21), registry key ini tidak ada! Penambahan secara manual tidak bisa dilakukan karena ini merupakan volatile key, yang artinya registry key ini secara otomatis akan diupdate oleh windows (atau wine) dengan melakukan pengecekan terhadap hardware yang ada.&lt;br /&gt;&lt;br /&gt;Ada 2 solusi untuk masalah ini:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Cek terlebih dahulu registry key tsb. ada atau tidak. Jika ada, go ahead! Silahkan tanya ke om Windows, serial port apa saja yang ada di komputer ini. Tapi jika registry key ini tidak ada (yang artinya anda sedang jalan di wine yang belum terpatch, ya nggak usah tanya ke windows. Di program saya, pilihan setting com port ini melalui sebuah combobox. Program ini dibuat dengan Delphi7 dan komponen TComPort, ini yang saya lakukan:&lt;br /&gt;&lt;br /&gt;&lt;font size="-1"&gt;&lt;i&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  // Serial Port&lt;br /&gt;  try&lt;br /&gt;    CPort.EnumComPorts(Self.CBSerialPort.Items);&lt;br /&gt;  except&lt;br /&gt;    if IWSDataModule.ComPorts = '' then begin&lt;br /&gt;      MessageDlg( 'Gagal membaca registry key HKLM\HARDWARE\DEVICEMAPPING\SERIALCOMM.'&lt;br /&gt;                   + #13#10'Apakah program ini dijalankan di wine? Set Serial Port yang ada di file '&lt;br /&gt;                    + ChangeFileExt( ParamStr(0) , '.ini'), mtError,[mbAbort],0);&lt;br /&gt;      Abort;&lt;br /&gt;    end;&lt;br /&gt;    Self.CBSerialPort.Items.Clear;&lt;br /&gt;    Str := IWSDataModule.ComPorts;&lt;br /&gt;    while Str &lt;&gt; '' do begin&lt;br /&gt;      i := Pos( ',' , Str );&lt;br /&gt;      if i &lt;&gt; 0 then begin&lt;br /&gt;        Str1 := Trim(Copy( Str,1,i -1 ));&lt;br /&gt;        Str := Trim(Copy(Str,i+1,Length(Str)-i ));&lt;br /&gt;      end&lt;br /&gt;      else begin&lt;br /&gt;        Str1 := Trim( Str);&lt;br /&gt;        Str := '';&lt;br /&gt;      end;&lt;br /&gt;      Self.CBSerialPort.Items.Add(UpperCase(Str1));&lt;br /&gt;    end;&lt;br /&gt;  end;&lt;br /&gt;  Self.CBSerialPort.ItemIndex := Self.CBSerialPort.Items.IndexOf(SerialPortIndikator);&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Patch wine anda! Tentu saja ini hanya bisa dilakukan kalau kita install wine melalui source code (inilah alasan utama kenapa aku nggak mau install wine pakai cara gampang dengan install package jadinya). Patch agar supaya Wine melisting serial port apa saja yang ada ke registry key HKLM/HARDWARE/DEVICEMAP/SERIALCOMM tsb. dapat anda dapatkan di:&lt;br /&gt;&lt;br /&gt;http://www.nabble.com/create-DEVICEMAP%5CSERIALCOMM-registry-entries-td20693044.html&lt;br /&gt;&lt;br /&gt;Hanya saja masalahnya patch ini gagal diappliedkan ke wine versi 1.1.21, untuk itu berdasarkan patch tsb. saya buat patch di bawah ini, patch dilakukan terhadap file dlls/kernel32/oldconfig.c:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-size:75%"&gt;&lt;br /&gt;&lt;br /&gt;--- oldconfig.old.c 2009-05-10 12:39:08.000000000 +0700&lt;br /&gt;+++ oldconfig.c 2009-05-10 12:53:06.000000000 +0700&lt;br /&gt;@@ -331,8 +331,8 @@&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-/* create the hardware registry branch */&lt;br /&gt;-static void create_hardware_branch(void)&lt;br /&gt;+/* create the scsi registry branch */&lt;br /&gt;+static void create_scsi_branch(void)&lt;br /&gt;{&lt;br /&gt;  /* The following mostly will work on Linux, but should not cause&lt;br /&gt;   * problems on other systems. */&lt;br /&gt;@@ -454,6 +454,149 @@&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;+/* create SERIALCOMM branch containing keys for /dev/ttyS* */&lt;br /&gt;+void create_serialcomm_branch(void)&lt;br /&gt;+{&lt;br /&gt;+    OBJECT_ATTRIBUTES attr;&lt;br /&gt;+    UNICODE_STRING nameU;&lt;br /&gt;+    WCHAR dataW[50];&lt;br /&gt;+    DWORD length;&lt;br /&gt;+    DWORD disp;&lt;br /&gt;+    HANDLE targetKey;&lt;br /&gt;+    struct dirent * dent;&lt;br /&gt;+    DIR * dir;&lt;br /&gt;+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)&lt;br /&gt;+    char deviceprefix[5] = "cuad";&lt;br /&gt;+#else&lt;br /&gt;+    char deviceprefix[5] = "ttyS";&lt;br /&gt;+#endif&lt;br /&gt;+    int portmap[256];&lt;br /&gt;+    int isdevice[256];&lt;br /&gt;+    char readlinkbuf[261];&lt;br /&gt;+    char keyname[] = "\\Device\\Serial999";&lt;br /&gt;+    char keydata[] = "COM999";&lt;br /&gt;+    const char * wineprefixdir;&lt;br /&gt;+    char * dosdevicepath = 0;&lt;br /&gt;+    static const char dosdevdirsuffix[] = "/dosdevices";&lt;br /&gt;+    int suffixlength = 11;&lt;br /&gt;+    int pathlength = 0;&lt;br /&gt;+    int index = 0;&lt;br /&gt;+    int numbytes = 0;&lt;br /&gt;+    int devnumber = 0;&lt;br /&gt;+    int portnumber = 0;&lt;br /&gt;+&lt;br /&gt;+    attr.Length = sizeof(attr);&lt;br /&gt;+    attr.RootDirectory = 0;&lt;br /&gt;+    attr.ObjectName = &amp;nameU;&lt;br /&gt;+    attr.Attributes = 0;&lt;br /&gt;+    attr.SecurityDescriptor = NULL;&lt;br /&gt;+    attr.SecurityQualityOfService = NULL;&lt;br /&gt;+&lt;br /&gt;+    /* Ensure there is HARDWARE\\DEVICEMAP\\SERIALCOMM key */&lt;br /&gt;+    if(!RtlCreateUnicodeStringFromAsciiz( &amp;amp;nameU, "Machine\\HARDWARE\\DEVICEMAP\\SERIALCOMM" ) ||&lt;br /&gt;+        NtCreateKey( &amp;amp;targetKey, KEY_ALL_ACCESS, &amp;amp;attr, 0,&lt;br /&gt;+                     NULL, REG_OPTION_VOLATILE, &amp;amp;disp ))&lt;br /&gt;+    {&lt;br /&gt;+        ERR("Cannot create DEVICEMAP\\SERIALCOMM registry key\n" );&lt;br /&gt;+        return;&lt;br /&gt;+    }&lt;br /&gt;+    RtlFreeUnicodeString( &amp;amp;nameU );&lt;br /&gt;+&lt;br /&gt;+    /*initialise portmap and devices arrays to -1*/&lt;br /&gt;+    for(index = 0; index &lt; wineprefixdir =" wine_get_config_dir();" pathlength =" strlen(wineprefixdir)" dosdevicepath =" HeapAlloc(GetProcessHeap()," dir =" opendir(" dent =" readdir(dir)))"&gt;d_name, deviceprefix, 4) == 0)&lt;br /&gt;+            {&lt;br /&gt;+                /*d_name is null terminated already*/&lt;br /&gt;+                devnumber = strtol(dent-&gt;d_name + 4, NULL, 10);&lt;br /&gt;+                /*which COM port will this device map onto*/&lt;br /&gt;+                portmap[devnumber] = devnumber + 1;&lt;br /&gt;+                isdevice[devnumber] = 1;&lt;br /&gt;+            }&lt;br /&gt;+        }&lt;br /&gt;+    }&lt;br /&gt;+    closedir(dir);&lt;br /&gt;+ &lt;br /&gt;+    /* Enumerate all dosdevices/com* symlinks */&lt;br /&gt;+    dir = opendir(dosdevicepath);&lt;br /&gt;+    if(dir)&lt;br /&gt;+    {&lt;br /&gt;+        dosdevicepath[pathlength -1] = '/';&lt;br /&gt;+        while((dent = readdir(dir)))&lt;br /&gt;+        {&lt;br /&gt;+            if(strncmp(dent-&gt;d_name, "com", 3) == 0)&lt;br /&gt;+            {&lt;br /&gt;+                portnumber = strtol(dent-&gt;d_name + 3, NULL, 10);&lt;br /&gt;+                if(portnumber &lt;&gt; 256)&lt;br /&gt;+                {&lt;br /&gt;+                    continue;&lt;br /&gt;+                }&lt;br /&gt;+                else&lt;br /&gt;+                {&lt;br /&gt;+                    /* get the symlink target&lt;br /&gt;+                     * strtol the last chars&lt;br /&gt;+                     * check and set portmap entry */&lt;br /&gt;+                    memcpy(dosdevicepath + pathlength, dent-&gt;d_name, strlen(dent-&gt;d_name) + 1);&lt;br /&gt;+                    numbytes = readlink(dosdevicepath, readlinkbuf, 261);&lt;br /&gt;+                    if(numbytes &gt; 0 &amp;amp;&amp;amp; numbytes &lt; devnumber =" strtol(readlinkbuf" index =" 0;" index =" 0;"&gt;&lt;br /&gt;&lt;br /&gt;Cara untuk mengapplykan patch tsb. di atas:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt; Save patch tsb. dengan nama devicemap_serialcomm.diff ke directory dlls/kernel32&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt; masuk ke directory dlls/kernet32 dan lakukan patch dengan command:&lt;br /&gt;&lt;span style="font-size:-1;"&gt;&lt;i&gt;patch -i nama devicemap_serialcomm.diff &lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&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/7890476220667452667-463185794692420665?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/V8UYOT-nbEU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/463185794692420665/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2009/05/program-timbangan-elektronik-sebuah.html#comment-form" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/463185794692420665?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/463185794692420665?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/V8UYOT-nbEU/program-timbangan-elektronik-sebuah.html" title="Program timbangan elektronik, sebuah program Windows yang dijalankan di Linux." /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><thr:total>8</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2009/05/program-timbangan-elektronik-sebuah.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QCRXw7fCp7ImA9WxJSGU4.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-226742067422465191</id><published>2009-05-08T11:12:00.000-07:00</published><updated>2009-05-10T00:09:24.204-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-10T00:09:24.204-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="c++" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="wxwidgets" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Installing code::block</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vojd0F03SJcebWepT1PY2SMRTtY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vojd0F03SJcebWepT1PY2SMRTtY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vojd0F03SJcebWepT1PY2SMRTtY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vojd0F03SJcebWepT1PY2SMRTtY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Now, I begin to understand the mechanism of wxWidget. Time to look for a good IDE. After some googling session, I decide to install code::block.&lt;br /&gt;&lt;br /&gt;At first, I downloaded the source code. However, I failed to build it myself and found it is too complicated to rectify the problem. So, I downloaded the *.deb package and installed it:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-style: italic;"&gt;$wget -c http://transact.dl.sourceforge.net/sourceforge/codeblocks/codeblocks_8.02-0ubuntu1.deb.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$tar -xf codeblocks_8.02-0ubuntu1.deb.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;#sudo dpkg -i *.deb&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Surprisingly, right after the package installed synaptic update manager  shouted that an upgraded package is available from repository .... :) If only I knew from the beginning I will install from the repository instead...:)&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/7890476220667452667-226742067422465191?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/9s5SXliCsUE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/226742067422465191/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2009/05/installing-codeblock.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/226742067422465191?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/226742067422465191?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/9s5SXliCsUE/installing-codeblock.html" title="Installing code::block" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2009/05/installing-codeblock.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QAQnk5cSp7ImA9WxJSGU4.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-5239523583572522717</id><published>2009-05-08T10:51:00.000-07:00</published><updated>2009-05-10T00:09:03.729-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-10T00:09:03.729-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="c++" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="wxwidgets" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>wxWidgets: Adding menu and status bar</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8iKBLJ6TmMW2TBeOP81t_5Jh6JY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8iKBLJ6TmMW2TBeOP81t_5Jh6JY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8iKBLJ6TmMW2TBeOP81t_5Jh6JY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8iKBLJ6TmMW2TBeOP81t_5Jh6JY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Steps to add menu:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Define IDs for our menu items&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;enum&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    ID_QUIT,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    ID_ABOUT,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    ID_POPUP&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Create instances of wxMenu inside the constructor of the main windows&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;    wxMenu *MenuFile = new wxMenu;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    MenuFile-&gt;Append( ID_ABOUT , _T("&amp;amp;About"));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    MenuFile-&gt;Append( ID_QUIT , _T("&amp;amp;Quit"));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    wxMenu *MenuData = new wxMenu;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    MenuData-&gt;Append( ID_POPUP , _T( "Another &amp;amp;Form"));&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Create an instance of wxMenuBar&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;    wxMenuBar *MenuBar = new wxMenuBar;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Add our instances of wxMenus to the menubar&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;    MenuBar-&gt;Append( MenuFile , _T("&amp;amp;File") );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    MenuBar-&gt;Append( MenuData , _T("&amp;amp;Data") );&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Assign the menubar to the main windows&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;    this-&gt;SetMenuBar( MenuBar);&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Declare event function in our main windows class declaration&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;class MainWindow: public wxFrame&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;public:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    MainWindow(const wxString&amp;amp; title , const wxPoint&amp;amp; pos , const wxSize&amp;amp; size );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    void MenuClickQuit( wxCommandEvent&amp;amp; event);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    void MenuClickAbout( wxCommandEvent&amp;amp; event);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    void MenuClickPopup( wxCommandEvent&amp;amp; event);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    DECLARE_EVENT_TABLE()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;Don't forget to put the magic macro: DECLARE_EVENT_TABLE()&lt;/li&gt;&lt;li&gt;Write implementation of the event functions.&lt;br /&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;void MainWindow::MenuClickQuit( wxCommandEvent&amp;amp; event)&lt;br /&gt;{&lt;br /&gt; cout &lt;&lt; "Quit\n";     this-&gt;Close( TRUE );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void MainWindow::MenuClickAbout( wxCommandEvent&amp;amp; event)&lt;br /&gt;{&lt;br /&gt; wxMessageBox( _T("Learning wxWidgets") , _T( "About" ), wxOK | wxCANCEL | wxICON_INFORMATION , this );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void MainWindow::MenuClickPopup( wxCommandEvent&amp;amp; event)&lt;br /&gt;{&lt;br /&gt; FormData *f = new FormData( this , _T("FormData"), wxPoint(-1,-1) , wxSize(-1,-1) );&lt;br /&gt; f-&gt;Show( TRUE);&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;...and again a magic macro which glues our event to the system:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;BEGIN_EVENT_TABLE( MainWindow , wxFrame)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    EVT_MENU( ID_QUIT , MainWindow::MenuClickQuit)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    EVT_MENU( ID_ABOUT , MainWindow::MenuClickAbout )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    EVT_MENU( ID_POPUP , MainWindow::MenuClickPopup )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;END_EVENT_TABLE()&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;In our MenuClickPopup event we create a child form. We pass the main window as it's parent in the first parameter. By doing so, if the main window is closed, the child windows will be all closed to.&lt;br /&gt;&lt;br /&gt;Here is the complete source:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;#include &amp;lt;wx/wx.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;#include &amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;using namespace std;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;enum&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    ID_QUIT,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    ID_ABOUT,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    ID_POPUP&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;// Create our Application class derived from wxApp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;class MyApp: public wxApp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;public:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    bool OnInit();    // have to override onInit&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;class MainWindow: public wxFrame&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;public:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    MainWindow(const wxString&amp;amp; title , const wxPoint&amp;amp; pos , const wxSize&amp;amp; size );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    void MenuClickQuit( wxCommandEvent&amp;amp; event);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    void MenuClickAbout( wxCommandEvent&amp;amp; event);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    void MenuClickPopup( wxCommandEvent&amp;amp; event);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    DECLARE_EVENT_TABLE()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;class FormData : public wxFrame&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;public:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    FormData( wxWindow* Parent,const wxString&amp;amp; Title , const wxPoint&amp;amp; Pos , const wxSize&amp;amp; size);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;MainWindow::MainWindow(const  wxString&amp;amp; title , const wxPoint&amp;amp; pos , const wxSize&amp;amp; size )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;: wxFrame( NULL, -1, title, pos, size)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    this-&gt;Show( TRUE);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    wxMenu *MenuFile = new wxMenu;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    MenuFile-&gt;Append( ID_ABOUT , _T("&amp;amp;About"));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    MenuFile-&gt;Append( ID_QUIT , _T("&amp;amp;Quit"));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    wxMenu *MenuData = new wxMenu;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    MenuData-&gt;Append( ID_POPUP , _T( "Another &amp;amp;Form"));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    wxMenuBar *MenuBar = new wxMenuBar;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    MenuBar-&gt;Append( MenuFile , _T("&amp;amp;File") );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    MenuBar-&gt;Append( MenuData , _T("&amp;amp;Data") );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    this-&gt;SetMenuBar( MenuBar);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    // status bar&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    this-&gt;CreateStatusBar();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    this-&gt;SetStatusText( _T("Bambang is learning wxWidgets") );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;bool MyApp::OnInit()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    cout &lt;&lt; "start\n";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    MainWindow *mainFrame = new MainWindow( _T("Hello empty world"),wxPoint(-1,-1),wxSize(-1,-1));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    this-&gt;SetTopWindow( mainFrame);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    //mainFrame-&gt;Show( TRUE);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    return TRUE;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;void MainWindow::MenuClickQuit( wxCommandEvent&amp;amp; event)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    cout &lt;&lt; "Quit\n";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    this-&gt;Close( TRUE );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;void MainWindow::MenuClickAbout( wxCommandEvent&amp;amp; event)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    wxMessageBox( _T("Learning wxWidgets") , _T( "About" ), wxOK | wxCANCEL | wxICON_INFORMATION , this );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;void MainWindow::MenuClickPopup( wxCommandEvent&amp;amp; event)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    FormData *f = new FormData( this , _T("FormData"), wxPoint(-1,-1) , wxSize(-1,-1) );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    f-&gt;Show( TRUE);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;FormData::FormData( wxWindow* Parent,const wxString&amp;amp; Title , const wxPoint&amp;amp; Pos , const wxSize&amp;amp; Size)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;: wxFrame( Parent , -1, Title , Pos, Size)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;IMPLEMENT_APP(MyApp);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;BEGIN_EVENT_TABLE( MainWindow , wxFrame)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    EVT_MENU( ID_QUIT , MainWindow::MenuClickQuit)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    EVT_MENU( ID_ABOUT , MainWindow::MenuClickAbout )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    EVT_MENU( ID_POPUP , MainWindow::MenuClickPopup )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;END_EVENT_TABLE()&lt;/span&gt;&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/7890476220667452667-5239523583572522717?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/McUhQ_jQlZg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/5239523583572522717/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2009/05/adding-menu-and-status-bar.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/5239523583572522717?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/5239523583572522717?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/McUhQ_jQlZg/adding-menu-and-status-bar.html" title="wxWidgets: Adding menu and status bar" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2009/05/adding-menu-and-status-bar.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QFR3oyeyp7ImA9WxJSGU4.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-4536818597398400058</id><published>2009-05-06T10:38:00.000-07:00</published><updated>2009-05-10T00:08:36.493-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-10T00:08:36.493-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="c++" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="wxwidgets" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>wxWidgets:Hello empty world!</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/i15u2DLlepfyGG2TsXj2ImUUfPU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i15u2DLlepfyGG2TsXj2ImUUfPU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/i15u2DLlepfyGG2TsXj2ImUUfPU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i15u2DLlepfyGG2TsXj2ImUUfPU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Basic skeleton learnt:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Have to declare an application class derived from wxApp&lt;/li&gt;&lt;li&gt;Have to override virtual function OnInit of this class&lt;/li&gt;&lt;li&gt;Have to declare a main window class derived from wxFrame (windows is called frame in wxWidgets)&lt;/li&gt;&lt;li&gt;in OnInit of our application class, we should create (define) an instance of the main window class defined in step 3.&lt;br /&gt;Set this frame (window) as the top window with method SetTopWindow&lt;br /&gt;Don't forget to set its visibility to True with show method&lt;br /&gt;&lt;/li&gt;&lt;li&gt;To make the main() entry point, use macro: IMPLEMENT_APP( OurAppClass) which translated to complicated statement but then last with:&lt;br /&gt;&lt;br /&gt;int main( int argc , char ** argv )&lt;br /&gt;{&lt;br /&gt;return ( wxEntry( argc , argv) )&lt;br /&gt;};&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Bulletes which bit me:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The method name should be OnInit() but I wrote onInit() and nothing comes up to the screen. It took 1 hour to figure out what's going wrong. At least I now know wxWidget naming convention is  EveryFirstWordShouldBeCapitalized()&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Compiling:&lt;br /&gt;g++ hello.cpp `wx-config --libs` `wx-config --cxxflags` -o hello&lt;br /&gt;&lt;br /&gt;Source code: hello.cpp&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;#include &amp;lt;wx/wx.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;#include &amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;using namespace std;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;// Create our Application class derived from wxApp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;class MyApp: public wxApp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;public:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    bool OnInit();    // have to override onInit&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;class MainWindow: public wxFrame&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;public:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    MainWindow(const wxString&amp;amp; title , const wxPoint&amp;amp; pos , const wxSize&amp;amp; size );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;MainWindow::MainWindow(const  wxString&amp;amp; title , const wxPoint&amp;amp; pos , const wxSize&amp;amp; size )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;: wxFrame( NULL, -1, title, pos, size)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    this-&gt;Show( TRUE);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;bool MyApp::OnInit()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    cout &lt;&lt; "start\n";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    MainWindow *mainFrame = new MainWindow( _T("Hello empty world"),wxPoint(-1,-1),wxSize(-1,-1));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    this-&gt;SetTopWindow( mainFrame);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    //mainFrame-&gt;Show( TRUE);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    return TRUE;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;IMPLEMENT_APP(MyApp);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;And&lt;/span&gt;&lt;span style="font-size:100%;"&gt; here is the screenshot:&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lx3ybG2Edyw/SgHnI83LD0I/AAAAAAAAAjw/EmscziSgAYY/s1600-h/Screenshot-Hello+empty+world.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 248px; height: 320px;" src="http://2.bp.blogspot.com/_lx3ybG2Edyw/SgHnI83LD0I/AAAAAAAAAjw/EmscziSgAYY/s320/Screenshot-Hello+empty+world.png" alt="" id="BLOGGER_PHOTO_ID_5332797574745886530" 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/7890476220667452667-4536818597398400058?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/sFdMYafbVMg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/4536818597398400058/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2009/05/hello-empty-world.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/4536818597398400058?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/4536818597398400058?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/sFdMYafbVMg/hello-empty-world.html" title="wxWidgets:Hello empty world!" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_lx3ybG2Edyw/SgHnI83LD0I/AAAAAAAAAjw/EmscziSgAYY/s72-c/Screenshot-Hello+empty+world.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2009/05/hello-empty-world.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UBSHY4cSp7ImA9WxJSGU4.&quot;"><id>tag:blogger.com,1999:blog-7890476220667452667.post-3014823623148124887</id><published>2009-05-06T07:39:00.000-07:00</published><updated>2009-05-10T00:07:39.839-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-10T00:07:39.839-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="c++" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="wxwidgets" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Installing on Ubuntu 8.10</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dTIfNeuxEKgfzcR20AkEss04e7s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dTIfNeuxEKgfzcR20AkEss04e7s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dTIfNeuxEKgfzcR20AkEss04e7s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dTIfNeuxEKgfzcR20AkEss04e7s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;WxWidgets is available from ubuntu standard repository, but it often lacks several version. Fortunately, the developer of wxwidget provides ubuntu repository:&lt;br /&gt;&lt;br /&gt;Add this lines to /etc/var/sources.list:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;deb http://apt.wxwidgets.org/ intrepid-wx main&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;deb-src http://apt.wxwidgets.org/ intrepid-wx main&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;(note replace intrepid with your ubuntu distribution)&lt;br /&gt;&lt;br /&gt;and then import security key:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;#curl http://apt.wxwidgets.org/key.asc&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;#curl http://apt.wxwidgets.org/key.asc | sudo apt-key add -&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;if you don't have curl, you can install it first:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;#apt-get install curl&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After that, update the repository:&lt;br /&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;#sudo apt-get update&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And then install wxwidgets from synaptic. Here are the packages I installed:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;wx2.8-il18n&lt;/li&gt;&lt;li&gt;wx2.8-doc&lt;/li&gt;&lt;li&gt;wx2.8-headers&lt;/li&gt;&lt;li&gt;wx2.8-examples&lt;/li&gt;&lt;li&gt;libwxgtk2.8-0&lt;/li&gt;&lt;li&gt;wx-common&lt;/li&gt;&lt;li&gt;libwxgtk2.8-dev&lt;/li&gt;&lt;li&gt;wxformbuilder&lt;/li&gt;&lt;li&gt;libwxbase2.8-0&lt;/li&gt;&lt;li&gt;libwxbase2.8-dev&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;After installing the packages, the documentation is the most important. The html reference is located in:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;/usr/share/doc/wx2.8-doc/wx-manual.html/index.html&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I opened the file in my browser and bookmarked it because it will be my companion.&lt;br /&gt;&lt;br /&gt;Now, I am skimming the manual trying to grab the essence of this framework.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7890476220667452667-3014823623148124887?l=bpranoto.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/BambangPNotes/~4/BBobTvkRzUE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bpranoto.blogspot.com/feeds/3014823623148124887/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://bpranoto.blogspot.com/2009/05/installing-on-ubuntu-810.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/3014823623148124887?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7890476220667452667/posts/default/3014823623148124887?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BambangPNotes/~3/BBobTvkRzUE/installing-on-ubuntu-810.html" title="Installing on Ubuntu 8.10" /><author><name>Bambang Pranoto</name><uri>https://profiles.google.com/115995687324934624546</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-GSgZzw612X0/AAAAAAAAAAI/AAAAAAAAAwU/RHSuLrbvmIQ/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bpranoto.blogspot.com/2009/05/installing-on-ubuntu-810.html</feedburner:origLink></entry></feed>

