<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7034797</id><updated>2012-02-10T00:40:14.831-08:00</updated><category term='Routing'/><category term='Web 2.0'/><title type='text'>Merit Can Be Bought, Passion Can't</title><subtitle type='html'>"Life is too important to be taken seriously"</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>51</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7034797.post-6879507476619357293</id><published>2012-02-10T00:37:00.000-08:00</published><updated>2012-02-10T00:40:14.846-08:00</updated><title type='text'>How to compile libhdfs</title><content type='html'>gcc sample.c -I${HADOOP_HOME}/src/c++/libhdfs -L${HADOOP_HOME}/c++/Linux-amd64-64/lib -lhdfs -o sample&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;at your .bashrc&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;export LD_LIBRARY_PATH=/usr/lib/jvm/java-6-sun/jre/lib/amd64/server:/usr/lib/jvm/java-6-sun/jre/lib/amd64/server/libjvm.so:/usr/local/hadoop/c++/Linux-amd64-64/lib&lt;br /&gt;&lt;br /&gt;export CLASSPATH=/usr/local/hadoop/lib:/usr/local/hadoop&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-6879507476619357293?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/6879507476619357293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=6879507476619357293' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/6879507476619357293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/6879507476619357293'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2012/02/how-to-compile-libhdfs.html' title='How to compile libhdfs'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-1980760884587947666</id><published>2012-02-09T23:55:00.000-08:00</published><updated>2012-02-09T23:56:50.752-08:00</updated><title type='text'>Shared Library</title><content type='html'>&lt;h3 style="font-weight: normal;" class="section"&gt;&lt;span style="font-size:100%;"&gt;To run a program linked with the shared version of the library the operating system must be able to locate the corresponding &lt;samp&gt;&lt;span class="file"&gt;.so&lt;/span&gt;&lt;/samp&gt; file at runtime.  If the library cannot be found, the following error will occur:  &lt;/span&gt;&lt;/h3&gt;  &lt;pre class="example"&gt;     $ ./a.out      ./a.out: error while loading shared libraries:      libgsl.so.0: cannot open shared object file: No such      file or directory &lt;/pre&gt;    &lt;p class="noindent"&gt;To avoid this error, either modify the system dynamic linker configuration&lt;a rel="footnote" href="http://www.gnu.org/software/gsl/manual/html_node/Shared-Libraries.html#fn-1" name="fnd-1"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; or define the shell variable &lt;code&gt;LD_LIBRARY_PATH&lt;/code&gt; to include the directory where the library is installed.     &lt;/p&gt;&lt;p&gt;For example, in the Bourne shell (&lt;code&gt;/bin/sh&lt;/code&gt; or &lt;code&gt;/bin/bash&lt;/code&gt;), the library search path can be set with the following commands:  &lt;/p&gt;&lt;pre class="example"&gt;     $ LD_LIBRARY_PATH=/usr/local/lib      $ export LD_LIBRARY_PATH      $ ./example &lt;/pre&gt;    &lt;p class="noindent"&gt;In the C-shell (&lt;code&gt;/bin/csh&lt;/code&gt; or &lt;code&gt;/bin/tcsh&lt;/code&gt;) the equivalent command is,  &lt;/p&gt;&lt;pre class="example"&gt;     % setenv LD_LIBRARY_PATH /usr/local/lib &lt;/pre&gt;    &lt;p class="noindent"&gt;The standard prompt for the C-shell in the example above is the percent character ‘&lt;samp&gt;&lt;span class="samp"&gt;%&lt;/span&gt;&lt;/samp&gt;’, and should not be typed as part of the command.     &lt;/p&gt;&lt;p&gt;To save retyping these commands each session they can be placed in an individual or system-wide login file.     &lt;/p&gt;&lt;p&gt;To compile a statically linked version of the program, use the &lt;code&gt;-static&lt;/code&gt; flag in &lt;code&gt;gcc&lt;/code&gt;,  &lt;/p&gt;&lt;pre class="example"&gt;     $ gcc -static example.o -lgsl -lgslcblas -lm &lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-1980760884587947666?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/1980760884587947666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=1980760884587947666' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/1980760884587947666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/1980760884587947666'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2012/02/shared-library.html' title='Shared Library'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-2995765643033983151</id><published>2012-02-07T01:37:00.000-08:00</published><updated>2012-02-07T01:40:11.256-08:00</updated><title type='text'>Dell system won't boot after ubuntu maverick server installation</title><content type='html'>The system thrown you out to initramfs,  saying there is something wrong with root delay. What you need to do is to go to recovery mode, and edit grub.cfg (/boot/grub/grub.cfg). ADD rootdelay=90.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;### BEGIN /etc/grub.d/10_linux ### menuentry 'Ubuntu, with Linux 2.6.32-21-generic' --class ubuntu --class gnu-linux --class gnu --class os {     recordfail     insmod ext2     set root='(hd0,1)'     search --no-floppy --fs-uuid --set c00fadde-f7e8-45e7-a4da-0235c605f756     linux   /boot/vmlinuz-2.6.32-21-generic root=UUID=c00fadde-f7e8-45e7-a4da-0235c605f756 ro rootdelay=90&lt;br /&gt;    initrd  /boot/initrd.img-2.6.32-21-generic } &lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-2995765643033983151?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/2995765643033983151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=2995765643033983151' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2995765643033983151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2995765643033983151'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2012/02/dell-system-wont-boot-after-ubuntu.html' title='Dell system won&apos;t boot after ubuntu maverick server installation'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-2490294589732542485</id><published>2012-02-05T21:06:00.000-08:00</published><updated>2012-02-05T21:07:17.646-08:00</updated><title type='text'>Set Up NTP Server and Client</title><content type='html'>&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:officedocumentsettings&gt;   &lt;o:allowpng/&gt;  &lt;/o:OfficeDocumentSettings&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;EN-US&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;ZH-CN&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:enableopentypekerning/&gt;    &lt;w:dontflipmirrorindents/&gt;    &lt;w:overridetablestylehps/&gt;    &lt;w:usefelayout/&gt;   &lt;/w:Compatibility&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="&amp;#45;-"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable  {mso-style-name:"Table Normal";  mso-tstyle-rowband-size:0;  mso-tstyle-colband-size:0;  mso-style-noshow:yes;  mso-style-priority:99;  mso-style-parent:"";  mso-padding-alt:0in 5.4pt 0in 5.4pt;  mso-para-margin-top:0in;  mso-para-margin-right:0in;  mso-para-margin-bottom:10.0pt;  mso-para-margin-left:0in;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Calibri","sans-serif";  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;  mso-bidi-font-family:"Times New Roman";  mso-bidi-theme-font:minor-bidi;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;h1&gt;Setting Up NTP Server&lt;/h1&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt;  &lt;p class="MsoNormal"&gt;Since servers in the data center is not able to synchronize with any external time server, we have to set up our standalone time server.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;192.168.37.183 as Time Server&lt;/p&gt;  &lt;p class="MsoNormal"&gt;a. Make sure ntpd server is installed.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal"&gt;&lt;span style="mso-spacerun:yes"&gt;   &lt;/span&gt;sudo apt-get install ntp&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;b. Since we are not going to synchronize with any external server. Edit /etc/ntp.conf:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal"&gt;# You do need to talk to an NTP server or two (or three).&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal"&gt;server 127.127.1.0&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal"&gt;fudge 127.127.1.0 stratum 10 &lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;c. Permit access for other servers in 192.168.37.0 network to synchronize&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal"&gt;restrict 192.168.37.0 mask 255.255.255.0 nomodify notrap&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal"&gt;broadcast 192.168.37.255&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;d. Star the ntp:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal"&gt;sudo service ntp start&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal"&gt;At Client&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpFirst" style="text-indent:-.25in;mso-list:l0 level1 lfo1"&gt;&lt;span style="mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin; mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin"&gt;&lt;span style="mso-list:Ignore"&gt;a.&lt;span style="font:7.0pt &amp;quot;Times New Roman&amp;quot;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Get ntpd server installed.&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="text-indent:-.25in;mso-list:l0 level1 lfo1"&gt;&lt;span style="mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin; mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin"&gt;&lt;span style="mso-list:Ignore"&gt;b.&lt;span style="font:7.0pt &amp;quot;Times New Roman&amp;quot;"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Synchronize to 192.168.37.183&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle"&gt;#You do need to talk to an NTP server or two (or three).&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle"&gt;server 192.168.37.183 iburst&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="text-indent:-.25in;mso-list:l0 level1 lfo1"&gt;&lt;span style="mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin; mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin"&gt;&lt;span style="mso-list:Ignore"&gt;c.&lt;span style="font:7.0pt &amp;quot;Times New Roman&amp;quot;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Start the ntp:&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle"&gt;sudo service ntp start&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle" style="text-indent:-.25in;mso-list:l0 level1 lfo1"&gt;&lt;span style="mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin; mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin"&gt;&lt;span style="mso-list:Ignore"&gt;d.&lt;span style="font:7.0pt &amp;quot;Times New Roman&amp;quot;"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Command to check the ntp activity:&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle"&gt;tail –f /var/log/syslog&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpMiddle"&gt;ntpq –c lpeer&lt;/p&gt;  &lt;p class="MsoListParagraphCxSpLast"&gt;ntpd –q 192.168.37.183&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-2490294589732542485?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/2490294589732542485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=2490294589732542485' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2490294589732542485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2490294589732542485'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2012/02/set-up-ntp-server-and-client.html' title='Set Up NTP Server and Client'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-9120484031083277368</id><published>2012-02-01T01:30:00.000-08:00</published><updated>2012-02-01T01:31:22.796-08:00</updated><title type='text'>ParaView in Ubuntu</title><content type='html'>Before launching paraview, do this:&lt;br /&gt;&lt;pre class="alt2" dir="ltr" style="   margin: 0px;   padding: 6px;   border: 1px inset;   width: 640px;   height: 50px;   text-align: left;   overflow: auto"&gt;tux@remote:~$ export LIBGL_ALWAYS_INDIRECT=y&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-9120484031083277368?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/9120484031083277368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=9120484031083277368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/9120484031083277368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/9120484031083277368'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2012/02/paraview-in-ubuntu.html' title='ParaView in Ubuntu'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-1442746401612933962</id><published>2012-01-31T22:35:00.000-08:00</published><updated>2012-01-31T22:36:25.784-08:00</updated><title type='text'>JAVA PATH</title><content type='html'>export JAVA_HOME=/usr/lib/jvm/java-6-sun&lt;br /&gt;export PATH=$PATH:/home/ARM/bin:/usr/lib/jvm/java-6-sun/bin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-1442746401612933962?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/1442746401612933962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=1442746401612933962' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/1442746401612933962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/1442746401612933962'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2012/01/java-path.html' title='JAVA PATH'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-1599158689882040405</id><published>2012-01-31T22:14:00.001-08:00</published><updated>2012-01-31T22:14:33.090-08:00</updated><title type='text'>How to know your ubuntu release</title><content type='html'>cat /etc/lsb-release&lt;br /&gt;uname -r&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-1599158689882040405?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/1599158689882040405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=1599158689882040405' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/1599158689882040405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/1599158689882040405'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2012/01/how-to-know-your-ubuntu-release.html' title='How to know your ubuntu release'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-611183448948735490</id><published>2012-01-31T22:11:00.000-08:00</published><updated>2012-01-31T22:13:59.141-08:00</updated><title type='text'>How To Install Sun Java 6 JDK on Ubuntu</title><content type='html'>- sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"&lt;br /&gt;- sudo apt-get update&lt;br /&gt;- sudo apt-get install sun-java6-jdk&lt;br /&gt;- sudo update-java-alternatives -s java-6-sun&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-611183448948735490?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/611183448948735490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=611183448948735490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/611183448948735490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/611183448948735490'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2012/01/how-to-install-sun-java-6-jdk-on-ubuntu.html' title='How To Install Sun Java 6 JDK on Ubuntu'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-9084535630661571313</id><published>2012-01-02T17:17:00.000-08:00</published><updated>2012-01-02T17:20:05.025-08:00</updated><title type='text'>How to syntax highlighting to uncommon file type in VIM</title><content type='html'>In this case, I want to use html syntax highligthing on index.tt, which is actually a file with html format.&lt;br /&gt;&lt;br /&gt;I will just issue:&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;:&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;au BufReadPost *.tt set syntax=html&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-9084535630661571313?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/9084535630661571313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=9084535630661571313' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/9084535630661571313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/9084535630661571313'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2012/01/how-to-syntax-highlighting-to-uncommon.html' title='How to syntax highlighting to uncommon file type in VIM'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-9060639150712650186</id><published>2011-11-27T17:00:00.000-08:00</published><updated>2011-11-27T17:12:49.629-08:00</updated><title type='text'>How to create CA, Server and Client Certificates</title><content type='html'>1. CA&lt;br /&gt;a. openssl req -out CA.pem -new -x509 -days 365&lt;br /&gt;b. openssl pkcs12 -export -out CA.pfx -inkey privkey.pem -in CA.pem&lt;br /&gt;&lt;br /&gt;2. Server&lt;br /&gt;a. openssl genrsa -out server.key 1024&lt;br /&gt;b. openssl req -key server.key -new -out server.req&lt;br /&gt;c. openssl x509 -req -in server.req -CA ../CA/CA.pem -CAkey ../CA/privkey.pem -set_serial 01 -out server.pem&lt;br /&gt;&lt;br /&gt;3. Client&lt;br /&gt;a. openssl genrsa -out client.key 1024&lt;br /&gt;b. openssl req -key client.key -new -out client.req&lt;br /&gt;c. openssl x509 -req -in client.req -CA ../CA/CA.pem -CAkey ../CA/privkey.pem -set_serial 02 -out client.pem&lt;br /&gt;&lt;br /&gt;PS:&lt;br /&gt;a. pay attention to COMMON NAME during configuration. It should match the server name.&lt;br /&gt;b. to skip hostname verification configured by COMMON NAME.&lt;br /&gt;    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-9060639150712650186?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/9060639150712650186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=9060639150712650186' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/9060639150712650186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/9060639150712650186'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/11/how-to-create-ca-server-and-client.html' title='How to create CA, Server and Client Certificates'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-1014420844778335054</id><published>2011-09-26T18:08:00.000-07:00</published><updated>2011-09-26T18:09:22.750-07:00</updated><title type='text'>how to compile libcurl and libyaml</title><content type='html'>gcc -lcurl -lyaml CDMI_Create_Container.c -o CDMI_Create_Container&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-1014420844778335054?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/1014420844778335054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=1014420844778335054' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/1014420844778335054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/1014420844778335054'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/09/how-to-compile-libcurl-and-libyaml.html' title='how to compile libcurl and libyaml'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-1540348176200545109</id><published>2011-09-25T22:38:00.001-07:00</published><updated>2011-09-25T22:39:14.084-07:00</updated><title type='text'>How to compile cJSON</title><content type='html'>gcc -lm cJSON.c yourprogram.c -o yourprogram&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-1540348176200545109?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/1540348176200545109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=1540348176200545109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/1540348176200545109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/1540348176200545109'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/09/how-to-compile-cjson.html' title='How to compile cJSON'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-2739679362738072732</id><published>2011-04-17T06:45:00.000-07:00</published><updated>2011-04-17T06:50:53.780-07:00</updated><title type='text'>Feeling crappy. Where is my coffee?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-YZPUeIqL_z4/TarwEuNKw3I/AAAAAAAAARE/z3GNzL-ziCg/s1600/IMG_0595.JPG"&gt;&lt;img style="cursor: pointer; width: 267px; height: 400px;" src="http://1.bp.blogspot.com/-YZPUeIqL_z4/TarwEuNKw3I/AAAAAAAAARE/z3GNzL-ziCg/s400/IMG_0595.JPG" alt="" id="BLOGGER_PHOTO_ID_5596549450874667890" 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/7034797-2739679362738072732?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/2739679362738072732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=2739679362738072732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2739679362738072732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2739679362738072732'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/04/feeling-crappy-where-is-my-coffee.html' title='Feeling crappy. Where is my coffee?'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-YZPUeIqL_z4/TarwEuNKw3I/AAAAAAAAARE/z3GNzL-ziCg/s72-c/IMG_0595.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-2802016366361806691</id><published>2011-04-17T06:18:00.000-07:00</published><updated>2011-04-17T06:44:18.326-07:00</updated><title type='text'>Sunday Morning</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-ynJ2uwsFIos/TarulfQCT1I/AAAAAAAAAQ8/PUsZdcDoo9M/s1600/IMG_0564.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 267px;" src="http://4.bp.blogspot.com/-ynJ2uwsFIos/TarulfQCT1I/AAAAAAAAAQ8/PUsZdcDoo9M/s400/IMG_0564.JPG" alt="" id="BLOGGER_PHOTO_ID_5596547814772592466" 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/7034797-2802016366361806691?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/2802016366361806691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=2802016366361806691' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2802016366361806691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2802016366361806691'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/04/sunday-morning.html' title='Sunday Morning'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-ynJ2uwsFIos/TarulfQCT1I/AAAAAAAAAQ8/PUsZdcDoo9M/s72-c/IMG_0564.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-6037267330240261023</id><published>2011-03-30T18:55:00.000-07:00</published><updated>2011-03-30T18:59:34.611-07:00</updated><title type='text'>setTimeOut Doesn't Work in IE</title><content type='html'>setTimeOut() is working fine in firefox, but strangely it is not working in IE. the solution is you have to includ Math.random as one of the parameter in your ajax request. or otherwise IE will not refresh the page, because it stupidly thinks the content is the same. function getContainerList(){ new Ajax.Request('/mongo_list_container', {method: 'get', parameters:{ &lt;span style="color:#ff0000;"&gt;sid : Math.random()}, &lt;/span&gt;onSuccess: function(transport){ var response = transport.responseText; var containerlist = response.evalJSON(); var NumberOfContainer = containerlist.container.length; var newHTML=""; for (i = 0; i &amp;lt; NumberOfContainer; i++){ var withSlash = containerlist.container[i]; var withoutSlash = withSlash.split("/"); newHTML = newHTML + "&lt;tr&gt;&lt;td&gt;" + '&lt;button onclick="changeTitle(\'' +  withoutSlash[1]   +'\')"&gt;' + containerlist.container[i]+ "&lt;/button&gt;" + "&lt;/tr&gt;&lt;/td&gt;"; } $("ContainerList").innerHTML = " &lt;br /&gt;&lt;table border="1"&gt;&lt;br /&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Container List&lt;/td&gt;&lt;/tr&gt;" + newHTML + "&lt;/tbody&gt;&lt;/table&gt;"; }, onFailure: function(){ alert('Something went wrong...'); } }); setTimeout("getContainerList()",5000); }&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-6037267330240261023?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/6037267330240261023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=6037267330240261023' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/6037267330240261023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/6037267330240261023'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/03/settimeout-doesnt-work-in-ie.html' title='setTimeOut Doesn&apos;t Work in IE'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-6290548238583111752</id><published>2011-03-27T17:54:00.000-07:00</published><updated>2011-03-27T18:04:16.508-07:00</updated><title type='text'>Perl Dancer Interesting Functions</title><content type='html'>&lt;span style="font-weight:bold;"&gt;To Return Form Parameters&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;my %allparams = params;&lt;br /&gt;foreach (keys %allparams){&lt;br /&gt;       print "key: ", "$_\n";&lt;br /&gt;       print "Hash: ", "$allparams{$_}\n";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;To Return Client Address&lt;/span&gt;&lt;br /&gt;my $address = request-&gt;address();&lt;br /&gt;print "$address\n";&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Send and Download your uploaded file&lt;/span&gt;&lt;br /&gt;my $body = request-&gt;body();&lt;br /&gt;print "$body\n";&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Print Content, Upload to Folder, Filename&lt;/span&gt;&lt;br /&gt;my $allupload = request-&gt;upload('filename');&lt;br /&gt;my $content = $allupload-&gt;content;&lt;br /&gt;print $content; #print content of your uploaded file&lt;br /&gt;$allupload-&gt;copyto('/UPLOAD/test.doc');&lt;br /&gt;my $FILENAME = $allupload-&gt;filename; #uploaded file name&lt;br /&gt;printe $FILENAME;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-6290548238583111752?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/6290548238583111752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=6290548238583111752' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/6290548238583111752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/6290548238583111752'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/03/perl-dancer-interesting-functions.html' title='Perl Dancer Interesting Functions'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-2942413139486959205</id><published>2011-03-25T00:55:00.000-07:00</published><updated>2011-03-25T01:09:15.197-07:00</updated><title type='text'>How to Upload File using Web Form in Perl Dancer</title><content type='html'>First you have to create a form for the user to upload the file. The form will look like this.&lt;br /&gt;&lt;br /&gt;form action="" method="post" enctype="multipart/form-data" action="&lt;% upload_file %&gt;"&lt;br /&gt;input type="hidden" value="0" name="createContainer"&gt;&lt;br /&gt;input type="hidden" value="1" name="createFile"&gt;&lt;br /&gt;table&gt;&lt;br /&gt;tbody&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;File To Upload:&lt;/td&gt;&lt;br /&gt;input type="file" name="filename"&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr colspan="2"&gt;&lt;br /&gt;input type="submit" value="Create"&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;/form&lt;br /&gt;--&gt;&lt;br /&gt;Then at your route, code something like this&lt;br /&gt;&lt;br /&gt;post '/upload_file' =&gt;sub{&lt;br /&gt;session 'logged_in' =&gt; true;&lt;br /&gt;my $allupload = request-&gt;upload('filename');&lt;br /&gt;$allupload-&gt;copy_to('/UPLOAD');&lt;br /&gt;};&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-2942413139486959205?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/2942413139486959205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=2942413139486959205' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2942413139486959205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2942413139486959205'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/03/how-to-upload-file-using-web-form-in.html' title='How to Upload File using Web Form in Perl Dancer'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-2195452862849664855</id><published>2011-03-15T00:04:00.000-07:00</published><updated>2011-03-15T00:09:51.321-07:00</updated><title type='text'>Multi Cloud Storage API</title><content type='html'>Why do you need Multi Cloud Storage API?&lt;br /&gt;a. Importing and exporting data from different clouds.&lt;br /&gt;b. Syncing clouds automatically&lt;br /&gt;c. Having Cloud Fail-over&lt;br /&gt;d. Having a single view&lt;br /&gt;&lt;br /&gt;Choices:&lt;br /&gt;a. Zcloud API (C)&lt;br /&gt;b. JClouds (java)&lt;br /&gt;c. CloudLoop (java)&lt;br /&gt;d. SimpleCloud (PHP)&lt;br /&gt;e. SMEStorage Multi-Cloud API&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-2195452862849664855?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/2195452862849664855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=2195452862849664855' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2195452862849664855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2195452862849664855'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/03/multi-cloud-storage-api.html' title='Multi Cloud Storage API'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-7697877191219597552</id><published>2011-03-13T22:34:00.000-07:00</published><updated>2011-03-13T22:36:03.605-07:00</updated><title type='text'>DBD::mysql installation</title><content type='html'>CPAN complaints cannot find mysql_config file during installation DBD::mysql.&lt;br /&gt;You have to install libmysqlclient-dev package using synaptic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-7697877191219597552?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/7697877191219597552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=7697877191219597552' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/7697877191219597552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/7697877191219597552'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/03/dbdmysql-installation.html' title='DBD::mysql installation'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-5004046979462679825</id><published>2011-03-09T01:38:00.000-08:00</published><updated>2011-03-09T01:41:29.494-08:00</updated><title type='text'>File upload to http server</title><content type='html'>USE LIBCURL!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-5004046979462679825?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/5004046979462679825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=5004046979462679825' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/5004046979462679825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/5004046979462679825'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/03/file-upload-to-http-server.html' title='File upload to http server'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-6757989747462863360</id><published>2011-03-08T22:41:00.001-08:00</published><updated>2011-03-08T22:41:20.637-08:00</updated><title type='text'>create container using curl</title><content type='html'>curl -X PUT -L -H "content-type:application/vnd.org.snia.cdmi.container+json" -H "accept:application/vnd.org.snia.cdmi.container+json" -H "HttpHeader.X-CDMISpecification-Version: 1.0" --user-agent "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.10 (maverick) Firefox/3.6.13" -H "Connection:keep-alive"  --data '{"metadata":{},"exports":{"OCCI/NFS":{}}}' http://localhost:8080/cdmi-server//jungle&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-6757989747462863360?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/6757989747462863360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=6757989747462863360' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/6757989747462863360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/6757989747462863360'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/03/create-container-using-curl.html' title='create container using curl'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-697662933132571380</id><published>2011-03-08T18:45:00.000-08:00</published><updated>2011-03-08T18:46:17.487-08:00</updated><title type='text'>cdmi server access using curl</title><content type='html'>curl  -L -H "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" --user-agent "Mozilla/5.0 (X11; U; Lnux i686; en-US; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.10 (maverick) Firefox/3.6.13" -H "Connection:keep-alive" -H "Keep-Alive: 115" -H "Accept-Language en-us,en;q=0.5" -H "Accept-Encoding: gzip,deflate" -H "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*,q=0.7" http://localhost:8080/cdmi-server&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-697662933132571380?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/697662933132571380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=697662933132571380' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/697662933132571380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/697662933132571380'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/03/cdmi-server-access-using-curl.html' title='cdmi server access using curl'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-9153274193063752932</id><published>2011-03-02T18:12:00.000-08:00</published><updated>2011-03-02T18:29:44.879-08:00</updated><title type='text'>What is Cloud Storage?</title><content type='html'>Cloud storage is, of course, a storage to store your files. Your files may be documents, pictures, photos, spreadsheets or mp3s. Some people call them, objects or unstructured data. In a LAN environment, you can mount an NFS share or SAMBA share to your system. Latency is not a problem. But over the internet, this methods  will not work.&lt;br /&gt;&lt;br /&gt;When you are using a cloud storage provided by let say Amazon S3, you are using its API (Amazon S3 API, s3curl, etc) to store and retrieve your files.  You are not doing the NFS/SAMBA thing over internet. The API is usually based on REST web service. REST does not require sessions between your system and the cloud. Everything you need to complete the request is there in the request itself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-9153274193063752932?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/9153274193063752932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=9153274193063752932' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/9153274193063752932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/9153274193063752932'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/03/what-is-cloud-storage.html' title='What is Cloud Storage?'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-8722804841063719478</id><published>2011-03-01T22:42:00.000-08:00</published><updated>2011-03-01T22:43:42.553-08:00</updated><title type='text'>Using Curl to DELETE (delete entry)</title><content type='html'>curl --request DELETE  -H "Content-Type:text/html" http://localhost:3000/rest/person/6&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-8722804841063719478?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/8722804841063719478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=8722804841063719478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/8722804841063719478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/8722804841063719478'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/03/using-curl-to-delete-delete-entry.html' title='Using Curl to DELETE (delete entry)'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-6886499187150048273</id><published>2011-03-01T22:28:00.001-08:00</published><updated>2011-03-01T22:28:42.002-08:00</updated><title type='text'>Using Curl to POST (create new entry)</title><content type='html'>curl --request POST --data '{"firstname":"despicable","lastname":"me"}' -H "Content-Type:text/html" http://localhost:3000/rest/person/1&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-6886499187150048273?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/6886499187150048273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=6886499187150048273' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/6886499187150048273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/6886499187150048273'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/03/using-curl-to-post-create-new-entry.html' title='Using Curl to POST (create new entry)'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-2839714282200019636</id><published>2011-03-01T21:51:00.000-08:00</published><updated>2011-03-01T21:54:37.843-08:00</updated><title type='text'>Using Curl to PUT Rest Web Service</title><content type='html'>Use the following command:&lt;br /&gt;&lt;br /&gt;curl --request PUT --data '{"firstname":"linus","lastname":"sebastian"}' -H "Content-Type:text/html" http://localhost:3000/rest/person/1&lt;br /&gt;&lt;br /&gt;OR&lt;br /&gt;&lt;br /&gt;curl -X PUT --data '{"firstname":"donald","lastname":"duck"}' -H "Content-Type:text/html" http://localhost:3000/rest/person/1&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-2839714282200019636?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/2839714282200019636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=2839714282200019636' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2839714282200019636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2839714282200019636'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/03/using-curl-to-put-rest-web-service.html' title='Using Curl to PUT Rest Web Service'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-7670686261797086496</id><published>2011-03-01T18:52:00.000-08:00</published><updated>2011-03-01T18:56:35.872-08:00</updated><title type='text'>Using Curl to Access Rest Web Service</title><content type='html'>I have a rest web service the following content type mapping.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;__PACKAGE__-&gt;config('default' =&gt; 'JSON',&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;                      'map' =&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;                           'text/html' =&gt; 'JSON',&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 style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;I can access the web service in shell using the following command:&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;curl &lt;span style="color: rgb(255, 0, 0);"&gt;-H "Content-Type:text/html"&lt;/span&gt;  http://localhost:3000/rest/person/1&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-7670686261797086496?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/7670686261797086496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=7670686261797086496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/7670686261797086496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/7670686261797086496'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/03/using-curl-to-access-rest-web-service.html' title='Using Curl to Access Rest Web Service'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-5254553334871810027</id><published>2011-02-28T05:41:00.000-08:00</published><updated>2011-02-28T05:43:17.697-08:00</updated><title type='text'>How to comment out multiple lines in VIM</title><content type='html'>&lt;ol&gt;&lt;li&gt;Navigate with the cursor to either the first or last line you want to comment out.&lt;/li&gt;&lt;li&gt;Pess &lt;code&gt;Control&lt;/code&gt; and &lt;code&gt;v&lt;/code&gt; to select a new visual block.&lt;/li&gt;&lt;li&gt;Move your cursor down (or up respectively) to the last (or first)  line you want to comment out. You just formed a visual block of your  comment.&lt;/li&gt;&lt;li&gt;Press &lt;code&gt;I&lt;/code&gt; to insert text before all selected lines.&lt;/li&gt;&lt;li&gt;Type your comment code (for example &lt;code&gt;//&lt;/code&gt;&lt;code&gt; or &lt;/code&gt;&lt;code&gt;#&lt;/code&gt; or &lt;code&gt;;&lt;/code&gt;).&lt;/li&gt;&lt;li&gt;Press &lt;code&gt;Escape&lt;/code&gt;. Your comment code will be inserted before every line of the visual block.&lt;/li&gt;&lt;/ol&gt;to uncomment..&lt;br /&gt;In Vim, you can replace a selected portion of text across multiple lines  with a new piece of text using a Visual-block change. As an example,  highlight a portion of text across multiple lines using ctrl-v  (blockwise visual mode), now press the "c" key to delete the selected  text and enter insert mode. Type in some new text and press the Esc key.  The text should be inserted for each row of the selection.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-5254553334871810027?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/5254553334871810027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=5254553334871810027' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/5254553334871810027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/5254553334871810027'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/02/how-to-comment-out-multiple-lines-in.html' title='How to comment out multiple lines in VIM'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-5918438650121335972</id><published>2011-02-27T05:37:00.000-08:00</published><updated>2011-02-28T18:12:28.728-08:00</updated><title type='text'>Perl Catalyst Step By Step</title><content type='html'>1. Create Application&lt;br /&gt;$ catalyst.pl AddressBook&lt;br /&gt;2. Create and Populate Database&lt;br /&gt;3. Link the database to a Catalyst Model.&lt;br /&gt;$ perl script/addressbook_create.pl&lt;br /&gt;   model AddressDB&lt;br /&gt;   DBIC::Schema&lt;br /&gt;   AddressBook::Schema::AddressDB&lt;br /&gt;   create=static&lt;br /&gt;   dbi:SQLite=/temp/addressbook&lt;br /&gt;4. lib/AddressBook/Model/AddressDB.pm --&gt;The actual Model that Catalyst uses.&lt;br /&gt;lib/AddressBook/Schema/AddressDB.pm --&gt; This is the schema that the Model&lt;br /&gt;                                                                        points to.&lt;br /&gt;lib/AddressBook/Schema/AddressDB/Result/People.pm&lt;br /&gt;lib/AddressBook/Schema/AddressDB/Result/Address.pm --&gt; This is where the&lt;br /&gt;                          real schema data is stored.&lt;br /&gt;5. Create relationship between tables in People.pm and Address.pm&lt;br /&gt;6. Configure TTSite&lt;br /&gt;a. Templates are stored in /root/src&lt;br /&gt;b. Configurations are stored in /root/lib&lt;br /&gt;7. Creating Index Page (root/src/index.tt2) and Not Found page (root/src/not_found.tt2)&lt;br /&gt;8.                     Create 'Person' Controller&lt;br /&gt; $perl script/addressbook_create.pl controller Person&lt;br /&gt;9. Add 'Person' Controller 'List' Function&lt;br /&gt; sub list :Local{&lt;br /&gt;        my ($self, $c) = @_&lt;br /&gt;        my $people = $c-&gt;model('AddressDB::People');&lt;br /&gt;        $c-&gt;stash-&gt;{people} = $people;&lt;br /&gt;}&lt;br /&gt;10. The 'Person' Controller 'List' Function will be called using http://localhost:3000/person/list&lt;br /&gt;11. Now we have to create the view for it, named it list.tt2, put it in root/src/person/list.tt2&lt;br /&gt;12. Add 'Person' Controller 'Delete' Function&lt;br /&gt;    sub delete :Local{&lt;br /&gt;            my ($self, $c, $id) = @_;&lt;br /&gt;            my $person = $c-&gt;model('AddressDB::People')-&gt;find({id =&gt; $id});&lt;br /&gt;            $c-&gt;stash-&gt;{person} = $person;&lt;br /&gt;&lt;br /&gt;            if ($person){&lt;br /&gt;                 $c-&gt;stash-&gt;{message} = 'Deleted '. $person-&gt;name;&lt;br /&gt;                 $person-&gt;delete;&lt;br /&gt;           }&lt;br /&gt;           else {&lt;br /&gt;                  $c-&gt;response-&gt;status(404);&lt;br /&gt;                  $c-&gt;stash-&gt;{error} = "No person $id";&lt;br /&gt;           }&lt;br /&gt;           $c-&gt;response-&gt;redirect($c-&gt;uri_for_action('/person/list'));&lt;br /&gt;    }&lt;br /&gt;13. The 'Person' Controller 'Delete' Function will be called using&lt;br /&gt;     http://localhost:3000/delete/1, where 1 is the person's ID number in the&lt;br /&gt;     database.&lt;br /&gt;14. Add Form to add person into the database. We are going to use FORMBUILDER.&lt;br /&gt;    a. Form Definition in /root/forms/person/edit.fb&lt;br /&gt;    b. Template where we can render this form in /root/src/person/edit.tt2&lt;br /&gt;15. Add 'Person' Controller 'Edit' Function&lt;br /&gt;    sub edit :Local  Form {&lt;br /&gt;             my ($self, $c, $id) = @_;&lt;br /&gt;             my $form = $self-&gt;formbuilder;&lt;br /&gt;             my $person = $c-&gt;model('AddressDB::People')-&gt;find_or_new({id=&gt;$id});&lt;br /&gt;             if ($form-&gt;submitted &amp;amp;&amp;amp; $form-&gt;validate){&lt;br /&gt;                      #form was submitted and validated&lt;br /&gt;                      $person-&gt;firstname($form-&gt;field('firstname'));&lt;br /&gt;                      $person-&gt;lastname($form-&gt;field('lastname'));&lt;br /&gt;                      $person-&gt;update_or_insert;&lt;br /&gt;                      $c-&gt;stash-&gt;{message} = ($id &gt; 0 ? 'Updated' : 'Added'). $person-&gt;name;&lt;br /&gt;                       $c-&gt;forward('list');&lt;br /&gt;              }&lt;br /&gt;               else{&lt;br /&gt;                      if(!$id){&lt;br /&gt;                                  $c-&gt;stash-&gt;{message} = "Adding a new person";&lt;br /&gt;                      }&lt;br /&gt;                      $form-&gt;field(name =&gt; 'firstname', value=&gt; $person-&gt;firstname);&lt;br /&gt;                      $form-&gt;field(name =&gt; 'lastname', value=&gt; $person-&gt;lastname);&lt;br /&gt;             }&lt;br /&gt;    }&lt;br /&gt;16. Add 'Person' Controller 'Add' Function&lt;br /&gt;    sub add :Local{&lt;br /&gt;                   my ($self, $c) = @_;&lt;br /&gt;                   $c-&gt;response-&gt;redirect($c-&gt;uri_for_action('/person/edit'));&lt;br /&gt;    }&lt;br /&gt;17.Creating template for address editing and put it in root/src/address/edit.tt2&lt;br /&gt;18.Creating form definition, put it in root/forms/address/edit.fb&lt;br /&gt;19.Creating Address Controller&lt;br /&gt;     perl script/addressbook_create.pl controller Address&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-5918438650121335972?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/5918438650121335972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=5918438650121335972' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/5918438650121335972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/5918438650121335972'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/02/perl-catalyst-step-by-step.html' title='Perl Catalyst Step By Step'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-6699633748845450307</id><published>2011-01-23T16:48:00.000-08:00</published><updated>2011-01-23T19:20:25.245-08:00</updated><title type='text'>Cloud Storage</title><content type='html'>No. It is not related to weather or cloud system. Cloud storage is a storage for your files, data or documents. But it is not your local hard drive, thumbdrive or portable hardrive. Cloud storage is is an off-site storage system maintained by a third party. So, instead of storing information to y our computer's hard drive or other local storage device, you save it remotely, on the off-site storage system through the connection provided by the Internet.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now you don't have to carry around your physical storage with you all the times. As long as you have the Internet access, any where in this planet, you will be able to access your files or documents. You can even provide certain level of access, to allow your friends or colleagues to access your data.&lt;br /&gt;&lt;br /&gt;A prototypical cloud storage system is made up of a number of x86 servers, each with its own storage, most commonly using four to 16 SATA drives. Users and their applications access the system through standard file access protocols like CIFS and NFS or via object storage and retrieval protocols like SOAP and REST.&lt;br /&gt;&lt;br /&gt;The storage nodes in a private cloud are linked together with a layer of smart software, which performs several functions. First, it maintains a global name space that allows all the storage in the cluster to be accessed as a single entity, so that administrators can add storage capacity on the back end without having to tell applications at the front end how to reach it. The software also handles drive failures and keeps data available to applications and end users.&lt;br /&gt;&lt;br /&gt;A private cloud storage infrastructure should also be able to scale from hundreds of terabytes to multiple petabytes. That level of scalability is achieved not with a forklift upgrade, but simply by adding more servers as they're needed.&lt;br /&gt;&lt;br /&gt;This architecture provides two major benefits. First, storage administrators can configure and provision new storage nodes quickly and inexpensively. Second, administrators can add capacity only as demand requires, instead of purchasing additional disk space to meet anticipated future growth and then having that capacity sit idle in the present.&lt;br /&gt;&lt;br /&gt;However, there are also trade-offs. Cloud storage is best suited to unstructured data, such as medical images, engineering drawings, and Office documents. For another, because each x86 server isn't as reliable as a high-end enterprise disk array, a private cloud must store copies of the data on multiple nodes. This requires more raw disk space than an enterprise disk array using a RAID-5 or 6 system. For example, if you set a policy for your private cloud to keep three copies of a 60-GB file for data protection, it would require 180 GB of disk, whereas a 6+2 RAID-6 system would need just 80 GB.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-6699633748845450307?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/6699633748845450307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=6699633748845450307' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/6699633748845450307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/6699633748845450307'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/01/cloud-storage.html' title='Cloud Storage'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-544505176626781518</id><published>2011-01-19T19:14:00.000-08:00</published><updated>2011-01-19T19:15:33.353-08:00</updated><title type='text'>How to Install MongoDB on Ubuntu 8.04</title><content type='html'>&lt;p&gt;Edit your sources.list...&lt;/p&gt; &lt;p&gt;&lt;code&gt;sudo nano /etc/apt/sources.list&lt;/code&gt;&lt;/p&gt; &lt;p&gt;Add this to the bottom...&lt;/p&gt; &lt;p&gt;&lt;code&gt;deb http://downloads.mongodb.org/distros/ubuntu 9.4 10gen&lt;/code&gt;&lt;/p&gt; &lt;p&gt;Then run these commands...&lt;/p&gt; &lt;p&gt;&lt;code&gt;sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10&lt;br /&gt;sudo apt-get update&lt;/code&gt;&lt;/p&gt; &lt;p&gt;Finally install MongoDB...&lt;/p&gt; &lt;p&gt;&lt;code&gt;sudo apt-get install mongodb-stable&lt;/code&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-544505176626781518?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/544505176626781518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=544505176626781518' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/544505176626781518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/544505176626781518'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/01/how-to-install-mongodb-on-ubuntu-804.html' title='How to Install MongoDB on Ubuntu 8.04'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-1826718551466332320</id><published>2011-01-18T01:39:00.000-08:00</published><updated>2011-01-18T01:40:00.114-08:00</updated><title type='text'>Cloud Storage Implementation</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_PZMYZUEkoJI/TTVf4CW862I/AAAAAAAAAOc/nm4dNpG1RgM/s1600/CloudStorage.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5563458330996566882" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 164px" alt="" src="http://4.bp.blogspot.com/_PZMYZUEkoJI/TTVf4CW862I/AAAAAAAAAOc/nm4dNpG1RgM/s400/CloudStorage.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-1826718551466332320?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/1826718551466332320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=1826718551466332320' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/1826718551466332320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/1826718551466332320'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/01/cloud-storage-implementation.html' title='Cloud Storage Implementation'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_PZMYZUEkoJI/TTVf4CW862I/AAAAAAAAAOc/nm4dNpG1RgM/s72-c/CloudStorage.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-1321388605702077539</id><published>2011-01-17T21:15:00.000-08:00</published><updated>2011-01-17T22:32:42.848-08:00</updated><title type='text'>Structured and Unstructured Data, can they be merged?</title><content type='html'>&lt;div align="justify"&gt;So, what is structured data? What is unstructured data?&lt;/div&gt;&lt;div align="justify"&gt;Structured data is the data that resides in your database. They are "structured" with fixed formats. The data may come in table format. Data that you store in your database server is structured data.  &lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;Unstructured data, on the other hand, is "unstructured", of course. It may be in the form of spreadsheet, documents, photos, scanned documents, videos or audio. Unstructured data is "impossible" to be stored and managed in your database server. But, is it right? &lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;strong&gt;Challenges for Storing Unstructured Data&lt;/strong&gt;&lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;The first challenge to be considered, and perhaps the most obvious, is the storage of large volumes of unstructured data. It is desirable to have a system that gives you the flexibility to meet the specific requirements of storing unstructured data, with minimal cost and management overhead. Key issues to be considered in the planning of the storage of unstructured data include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The cost of storing unstructured data, including not only the hardware costs, but also management overhead costs.&lt;/li&gt;&lt;li&gt;Physical storage locations for unstructured data, such as file servers and network attached storage (NAS) devices.&lt;/li&gt;&lt;li&gt;Managing retention and archival policies.&lt;/li&gt;&lt;li&gt;Integrating unstructured data files with associated relational data, and maintaining transaction integrity between structured and unstructured data sources.&lt;/li&gt;&lt;li&gt;Minimizing the management overhead associated with maintaining both relational and unstructured data.&lt;/li&gt;&lt;li&gt;Performance and scability.&lt;/li&gt;&lt;li&gt;Securing unstructured data, and ensuring consistent security with associated relational data.&lt;/li&gt;&lt;li&gt;Availability and recoverability of unstructured data.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Challenges for Using Unstructured Data&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The development challenge in building applications that use structured and unstructured data, including writing code to create, retrieve, update and delete (CRUD) unstructured data, and maintaining transactional consistency between associated relational and unstructured data sources.&lt;/li&gt;&lt;li&gt;Indexing and searching unstructured data.&lt;/li&gt;&lt;li&gt;Extracting explicitly available metadata (for example from form fields or file attributes) and exposing it to users.&lt;/li&gt;&lt;li&gt;Converting document content into format that can be searched and queried (for example, converting audio files into text that can be searched by a database query or full-text engine).&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Storing Unstructured Data in SQL Server 2008&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Applications that rely on relational and non-relational data typically use one of three architectures:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Relational data in the database and non-relational Binary Large Object (BLOP) data in file systems and file servers.&lt;/li&gt;&lt;li&gt;Relational data in database and non-relational data in a dedicated BLOP store.&lt;/li&gt;&lt;li&gt;Relational data and non -relational data in the database.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Each approach has its own benefits and drawbacks. For example, storing unstructured data in file servers or dedicated BLOB stores can reduce costs in terms of dollars per gigabyte, but typically adds complexity for managing and building applications, because the application has to maintain integrity between records in the database and the separate system that contains the BLOBs to which those records are associated. On the other hand, storing BLOBs in the database conveniently centralizes data storage, but typically comes at higher cost and can result in reduced performance.&lt;/p&gt;&lt;p&gt;SQL Server 2008 introduces two new capabilities for storing BLOB data:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;FILESTREAM: An attribute you can set on a varbinary column so that the data is stored on the file system ( and therefore benefits from its fast streaming capabilities and storage capabilities) but is managed and accessed directly within the context of the database.&lt;/li&gt;&lt;li&gt;Remote BLOB Storage: A client-side application programming interface (API) that reduces the complexity of building applications that rely on an external store for BLOBs and a database for relational data.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a name="_Toc204334141"&gt;&lt;/a&gt;&lt;a name="_Toc204333187"&gt;&lt;strong&gt;SQL Server BLOBs&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;SQL Server 2005 introduced the varbinary (max) data type, which enables you to store large binary data values of up to 2,147,483,647 bytes in a SQL Server column or variable. When using the max modifier, you can control how the data is physically stored in the data pages of the table by setting the large value types out of row table option. When this option is set to ON, all values are stored on separate linked pages and a 16-byte root pointer to these ages is stored on the data page for the row. When this option is set to OFF, values of up to 8,000 bytes are stored inline in the data page for the row, and larger values are stored on separate linked pages.&lt;br /&gt;Although the newer FILESTREAM and Remote BLOB capabilities are designed to provide better performance and manageability than standard varbinary BLOB columns, there may be some scenarios in which a varbinary column is appropriate (typically when BLOB sizes average less than 250 KB in size.)&lt;/p&gt;&lt;p&gt;&lt;a name="_Toc204333188"&gt;&lt;strong&gt;The FILESTREAM Attribute&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;In SQL Server 2008, you can apply the FILESTREAM attribute to a varbinary column, and SQL Server then stores the data for that column on the local NTFS file system. Storing the data on the file system brings two key benefits:&lt;br /&gt;·         Performance matches the streaming performance of the file system.&lt;br /&gt;·         BLOB size is limited only by the file system volume size.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;However, the column can be managed just like any other BLOB column in SQL Server, so administrators can use the manageability and security capabilities of SQL Server to integrate BLOB data management with the rest of the data in the relational database—without needing to manage the file system data separately. Defining the data as a FILESTREAM column in SQL Server also ensures data-level consistency between the relational data in the database and the unstructured data that is physically stored on the file system. A FILESTREAM column behaves exactly the same as a BLOB column, which means full integration of maintenance operations such as backup and restore, complete integration with the SQL Server security model, and full-transaction support.&lt;br /&gt;Application developers can work with FILESTREAM data through one of two programming models; they can use Transact-SQL to access and manipulate the data just like standard BLOB columns, or they can use the Win32 streaming APIs with Transact-SQL transactional semantics to ensure consistency, which means that they can use standard Win32 read/write calls to FILESTREAM BLOBs as they would if interacting with files on the file system.&lt;br /&gt;In SQL Server 2008, FILESTREAM columns can only store data on local disk volumes, and some features such as transparent encryption and table-valued parameters are not supported for FILESTREAM columns. Additionally, you cannot use tables that contain FILESTREAM columns in database snapshots or database mirroring sessions, although log shipping is supported.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;a name="_Toc204334143"&gt;&lt;/a&gt;&lt;a name="_Toc204333189"&gt;&lt;strong&gt;The Remote BLOB Store API&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Although the FILESTREAM attribute combines the performance and scalability of the file system with the manageability and data consistency of storing BLOBs in the database, there are often scenarios where it is more efficient or cost-effective to store BLOBs in a system like EMC Centera, Fujitsu Nearline, or any other dedicated BLOB store. The Remote BLOB Store API in SQL Server 2008 makes it easier to integrate dedicated, remote BLOB storage solutions with the relational data in your database by offering a provider-based architecture that enables your applications to use any BLOB store without requiring BLOB store-specific functionality or code.&lt;br /&gt;There are two key components to the architecture:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;·         &lt;strong&gt;The client library:&lt;/strong&gt; A component that enables the use of any provider to work with your BLOB and relational data together. Client applications use the client library and any applicable provider libraries to insert, update, and query data in the BLOB store right alongside data stored in the database.&lt;br /&gt;·         &lt;strong&gt;The provider library:&lt;/strong&gt; A component typically provided by BLOB store vendors (although it could be custom-developed). A provider library implements a common interface and exposes a set of standard services that abstract the details of how to perform Create, Fetch, Enumerate, Delete and Garbage Collect operations for that particular store.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The Remote BLOB Store API is ideal when your database BLOBs need to be stored on a different server from the database and interoperability with other systems is required. There are no restrictions on the BLOB store. Any system that offers a Remote BLOB Store provider, or for which one can be built, is supported. Because the details of interacting with the BLOB store are abstracted by the provider library, you can change the store without requiring changes to applications, which offers substantial benefits and reduced complexity to developers and administrators. Microsoft is working with all storage vendors in the industry to ensure that a proper library of providers is available to use with the Remote BLOB Store API.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Using the Remote BLOB Store API gives you the flexibility to use different systems to manage relational and non-relational data. This is particularly useful for an application that uses multiple stores via the same API. For instance, applications can effectively exploit different store attributes to enable tiered storage or an HSM-like hierarchy. The Remote BLOB Store API maintains integrity between rows in the database and BLOBs in the external store through link-level consistency. For example, if you delete the BLOB reference from the database through a delete statement, the system removes the BLOB from the store. However, the use of the Remote BLOB Store API does not provide you with the full data-level consistency that comes with storing BLOBs directly in the database, as you would by using FILESTREAM or varbinary. [Note: For write-once BLOBs, the consistency is very close to that provided by FILESTREAM].&lt;br /&gt;&lt;a name="_Toc204334144"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a name="_Toc204334145"&gt;&lt;/a&gt;&lt;a name="_Toc204333191"&gt;&lt;strong&gt;Searching Unstructured Data in SQL Server 2008&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;One of the most common requirements for applications that use non-relational data is to enable full-text search over that data.&lt;br /&gt;Prior versions of SQL Server support full-text search in prior versions. However, it has always relied on an external service, the Windows Search Service, for its full-text search engine. Using an external service created of the following two challenges: &lt;/p&gt;&lt;p&gt;·         The reliance on an external service created greater deployment complexity and support difficulty. &lt;br /&gt;·         Queries that combined full-text search predicates with standard SQL predicates suffered in performance because the entire result set from the full-text portion of the search had to be spooled into the engine before the standard SQL predicates could be applied. The query optimizer could not create plans that incorporated the full-text search predicates.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;In SQL Server 2008, full-text search is fully integrated into the database engine. By integrating the full-text engine directly into the SQL core, SQL Server 2008 resolves the challenges that were presented by previous releases, reduces the cost of managing and deploying SQL Server, while improves the performance of searching unstructured data.&lt;br /&gt;&lt;a name="_Toc204334146"&gt;&lt;/a&gt;&lt;a name="_Toc204333193"&gt;Conclusion&lt;/a&gt;&lt;br /&gt;SQL Server 2008 provides a flexible solution for storing and searching unstructured data. FILESTREAM enhances the performance of storing non-relational data like BLOBs in the database alongside relational data, without sacrificing manageability. If you need to use a dedicated BLOB store, then the Remote BLOB Store API helps you to integrate your BLOB data with the relational data in your database and provides a consistent programmatic interface for interacting with this data, independent of the system that is used to store the data. Finally, SQL Server 2008 makes searching non-relational data more efficient and easier to manage when you need to store and use large libraries of documents by using any of the solutions discussed in this whitepaper.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;For more information:&lt;br /&gt;Microsoft SQL Server 2008&lt;a href="http://www.microsoft.com/sqlserver/2008/en/us/default.aspx"&gt;http://www.microsoft.com/sqlserver/2008/en/us/default.aspx&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-1321388605702077539?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/1321388605702077539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=1321388605702077539' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/1321388605702077539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/1321388605702077539'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2011/01/structured-and-unstructured-data-can.html' title='Structured and Unstructured Data, can they be merged?'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-9076155419600023194</id><published>2010-06-13T05:38:00.000-07:00</published><updated>2010-06-13T05:39:02.185-07:00</updated><title type='text'>Working with Feeds</title><content type='html'>&lt;h2&gt;&lt;a name="custom.feeds" id="custom.feeds"&gt;Custom Feeds&lt;/a&gt;&lt;/h2&gt; &lt;div class="level2"&gt;  &lt;p&gt; Ok, you've developed your package, and now you want to use it via make menuconfig, OR you are developing a package and you want to test it in a build before you try to get it included in OpenWRT. &lt;/p&gt;  &lt;p&gt;The solution is a custom feed. You can either create an entirely new feed, or use a modified version of one of the standard ones. &lt;/p&gt;  &lt;/div&gt;  &lt;h3&gt;&lt;a name="creating.the.package.directory" id="creating.the.package.directory"&gt;Creating the package directory&lt;/a&gt;&lt;/h3&gt; &lt;div class="level3"&gt;  &lt;/div&gt;  &lt;h4&gt;&lt;a name="adding.or.package.to.an.existing.feed" id="adding.or.package.to.an.existing.feed"&gt;Adding or package to an existing feed&lt;/a&gt;&lt;/h4&gt; &lt;div class="level4"&gt;  &lt;p&gt;  For this example we assume that your are in &lt;code&gt;/home/user/openwrt&lt;/code&gt; as your base directory.  &lt;/p&gt; &lt;ol&gt;&lt;li class="level1"&gt;&lt;div class="li"&gt; You create your current project dir &lt;code&gt;project&lt;/code&gt;.&lt;/div&gt; &lt;/li&gt;&lt;/ol&gt; &lt;ol&gt;&lt;li class="level1"&gt;&lt;div class="li"&gt; Then while in &lt;code&gt;/home/user/openwrt/project&lt;/code&gt;&lt;/div&gt; &lt;/li&gt;&lt;/ol&gt; &lt;ol&gt;&lt;li class="level1"&gt;&lt;div class="li"&gt; &lt;code&gt;svn co &lt;a href="svn://svn.openwrt.org/openwrt/trunk" class="urlextern" title="svn://svn.openwrt.org/openwrt/trunk" rel="nofollow"&gt;svn://svn.openwrt.org/openwrt/trunk&lt;/a&gt; openwrt&lt;/code&gt; (for the OpenWRT base system)&lt;/div&gt; &lt;/li&gt;&lt;li class="level1"&gt;&lt;div class="li"&gt; &lt;code&gt;svn co &lt;a href="svn://svn.openwrt.org/openwrt/packages" class="urlextern" title="svn://svn.openwrt.org/openwrt/packages" rel="nofollow"&gt;svn://svn.openwrt.org/openwrt/packages&lt;/a&gt; packages&lt;/code&gt; (for the packages feed)&lt;/div&gt; &lt;/li&gt;&lt;/ol&gt; &lt;ol&gt;&lt;li class="level1"&gt;&lt;div class="li"&gt; Add your package in the appropriate subdirectory under &lt;code&gt;/home/user/openwrt/project/packages&lt;/code&gt;&lt;/div&gt; &lt;/li&gt;&lt;/ol&gt;  &lt;/div&gt;  &lt;h4&gt;&lt;a name="creating.your.own.feed" id="creating.your.own.feed"&gt;Creating your own feed&lt;/a&gt;&lt;/h4&gt; &lt;div class="level4"&gt; &lt;ol&gt;&lt;li class="level1"&gt;&lt;div class="li"&gt; Create your project dir and get trunk, as above&lt;/div&gt; &lt;/li&gt;&lt;li class="level1"&gt;&lt;div class="li"&gt; Create your package dir and copy your package into it (e.g. &lt;code&gt;cp packagedir /home/user/openwrt/project/customfeed/&lt;/code&gt;), so that your package is under (in this example) &lt;code&gt;/home/user/openwrt/project/customfeed/packagedir&lt;/code&gt;&lt;/div&gt; &lt;/li&gt;&lt;/ol&gt;  &lt;/div&gt;  &lt;h3&gt;&lt;a name="using.the.feed" id="using.the.feed"&gt;Using the feed&lt;/a&gt;&lt;/h3&gt; &lt;div class="level3"&gt; &lt;ol&gt;&lt;li class="level1"&gt;&lt;div class="li"&gt; Edit your &lt;code&gt;feeds.conf&lt;/code&gt; (e.g. &lt;code&gt;/home/user/openwrt/project/openwrt/feeds.conf&lt;/code&gt;)&lt;/div&gt; &lt;/li&gt;&lt;li class="level1"&gt;&lt;div class="li"&gt; Add a line to access the feed.&lt;/div&gt; &lt;ol&gt;&lt;li class="level2"&gt;&lt;div class="li"&gt; In the case of adding to the packages feed also comment out the normal packages feed.&lt;/div&gt; &lt;/li&gt;&lt;/ol&gt; &lt;/li&gt;&lt;li class="level1"&gt;&lt;div class="li"&gt; e.g. &lt;/div&gt; &lt;/li&gt;&lt;/ol&gt;  &lt;p&gt; &lt;/p&gt;&lt;pre class="file"&gt;#srv-svn packages svn://svn.openwrt.org/openwrt/packages&lt;br /&gt;src-link customfeed /home/user/openwrt/project/packages&lt;br /&gt;&lt;/pre&gt;  or in the case of the second example: &lt;pre class="file"&gt;src-link customfeed /home/user/openwrt/project/customfeed&lt;br /&gt;&lt;/pre&gt;    &lt;ol&gt;&lt;li class="level1"&gt;&lt;div class="li"&gt; Update the feed: from the openwrt dir (e.g. /home/user/openwrt/project/openwrt), do: &lt;code&gt;./scripts/feeds/update customfeed&lt;/code&gt;&lt;/div&gt; &lt;/li&gt;&lt;li class="level1"&gt;&lt;div class="li"&gt; And then install it &lt;code&gt;./scripts/feeds/install -p customfeed&lt;/code&gt;&lt;/div&gt; &lt;/li&gt;&lt;li class="level1"&gt;&lt;div class="li"&gt; Now your package(s) should be available when you do &lt;code&gt;make menuconfig&lt;/code&gt;.&lt;/div&gt; &lt;/li&gt;&lt;/ol&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-9076155419600023194?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/9076155419600023194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=9076155419600023194' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/9076155419600023194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/9076155419600023194'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2010/06/working-with-feeds.html' title='Working with Feeds'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-2436250882046222222</id><published>2010-06-13T02:47:00.000-07:00</published><updated>2010-06-13T02:49:44.303-07:00</updated><title type='text'>Add a new application to openWRT</title><content type='html'>&lt;p&gt;This application note shows how to add a simple package to OpenWrt. With an example, it describes how to integrate a simple application into the OpenWrt build system. The example is a simple application package called &lt;b&gt;simple&lt;/b&gt;. The &lt;b&gt;simple&lt;/b&gt; application prints 1 to 99.  &lt;/p&gt;&lt;script type="text/javascript"&gt;if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle&lt;/script&gt;&lt;a name="Create_a_New_Package" id="Create_a_New_Package"&gt;&lt;/a&gt;&lt;h1&gt; &lt;span class="mw-headline"&gt; Create a New Package  &lt;/span&gt;&lt;/h1&gt; &lt;p&gt;Change to the package directory:  &lt;/p&gt; &lt;pre&gt;$ cd openwrt/package&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;Create a new directory named &lt;b&gt;simple&lt;/b&gt;:  &lt;/p&gt; &lt;pre&gt;$ mkdir simple&lt;br /&gt;$mkdir simple/src&lt;br /&gt;$cd simple/src&lt;br /&gt;&lt;/pre&gt;  &lt;a name="Add_source_files" id="Add_source_files"&gt;&lt;/a&gt;&lt;h2&gt; &lt;span class="mw-headline"&gt; Add source files  &lt;/span&gt;&lt;/h2&gt; &lt;p&gt;Create &lt;b&gt;main.c&lt;/b&gt; in &lt;b&gt;simple/src&lt;/b&gt; directory.  &lt;/p&gt; &lt;pre&gt;#include &lt;stdio.h&gt;&lt;br /&gt;int main(void)&lt;br /&gt;{&lt;br /&gt; int i=0;&lt;br /&gt; while (i &lt; 100) {&lt;br /&gt;  printf(" Hello world %d \n",i);&lt;br /&gt;  i++;&lt;br /&gt; }&lt;br /&gt; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;Create &lt;b&gt;Makefile&lt;/b&gt; as shown below to compile &lt;b&gt;main.c&lt;/b&gt; in &lt;b&gt;simple/src&lt;/b&gt; directory. Note that lines in &lt;b&gt;Makefile&lt;/b&gt; must be indented with tabs.  &lt;/p&gt; &lt;pre&gt;# build executable on typing make&lt;br /&gt;all: simple&lt;br /&gt;&lt;br /&gt;%.o: %.c&lt;br /&gt; $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c -I. -Iinclude -o $@ $^&lt;br /&gt;&lt;br /&gt;simple: main.o&lt;br /&gt; $(CC) -o $@ $^ -L.&lt;br /&gt;&lt;br /&gt;clean:&lt;br /&gt; rm -f *.o simple&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;  &lt;a name="Compile_on_Local_PC" id="Compile_on_Local_PC"&gt;&lt;/a&gt;&lt;h2&gt; &lt;span class="mw-headline"&gt; Compile on Local PC  &lt;/span&gt;&lt;/h2&gt; &lt;p&gt;--- Optional step ---&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The file &lt;b&gt;main.c&lt;/b&gt; can be compiled using a compiler on the host PC to see if there are any errors in the code and if the Makefile is working fine. &lt;/p&gt; &lt;pre&gt;$ make&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;The created application can be run and tested on the host PC to see if it is working fine.  &lt;/p&gt; &lt;pre&gt;./simple&lt;br /&gt;Hello world 0&lt;br /&gt;Hello world 1&lt;br /&gt;...&lt;br /&gt;Hello world 99&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;Please note that we have not cross-compiled for the target system yet. So, the application is built using GLIBC instead of &lt;b&gt;libc&lt;/b&gt; intended for the target. This means that the created application will run only on your host PC but not on the target. Finally run clean to clear the object files and executables created as they are not cross compiled.&lt;br /&gt;&lt;/p&gt; &lt;pre&gt;$make clean&lt;br /&gt;&lt;/pre&gt;  &lt;a name="Integrate_to_OpenWrt_Build_System" id="Integrate_to_OpenWrt_Build_System"&gt;&lt;/a&gt;&lt;h2&gt; &lt;span class="mw-headline"&gt; Integrate to OpenWrt Build System  &lt;/span&gt;&lt;/h2&gt; &lt;p&gt;Create a top level Makefile in &lt;b&gt;package/simple&lt;/b&gt; directory. This Makefile will intergrate the package to the openWRT build system along with the menuconfig.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Change to &lt;b&gt;package/simple&lt;/b&gt; directory:  &lt;/p&gt; &lt;pre&gt;$cd ..&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;Create the following &lt;b&gt;Makefile&lt;/b&gt;:  &lt;/p&gt; &lt;pre&gt;#&lt;br /&gt;# Top level makefile for simple application&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;include $(TOPDIR)/rules.mk&lt;br /&gt;&lt;br /&gt;PKG_NAME:=simple&lt;br /&gt;PKG_VERSION:=1.0.0&lt;br /&gt;PKG_RELEASE:=1&lt;br /&gt;&lt;br /&gt;include $(INCLUDE_DIR)/package.mk&lt;br /&gt;&lt;br /&gt;define Package/simple&lt;br /&gt; SECTION:=utils&lt;br /&gt; CATEGORY:=Utilities&lt;br /&gt; TITLE:=simple -- prints simple 1 to 99&lt;br /&gt;endef&lt;br /&gt;&lt;br /&gt;define Build/Prepare&lt;br /&gt; mkdir -p $(PKG_BUILD_DIR)&lt;br /&gt; $(CP) ./src/* $(PKG_BUILD_DIR)&lt;br /&gt;endef&lt;br /&gt;&lt;br /&gt;define Build/Configure&lt;br /&gt;endef&lt;br /&gt;&lt;br /&gt;TARGET_CFLAGS += $(FPIC)&lt;br /&gt;&lt;br /&gt;define Package/simple/install&lt;br /&gt; $(INSTALL_DIR) $(1)/bin&lt;br /&gt; $(INSTALL_BIN) $(PKG_BUILD_DIR)/simple $(1)/bin/&lt;br /&gt;endef&lt;br /&gt;&lt;br /&gt;$(eval $(call BuildPackage,simple))&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;Some of you might notice that this Makefile has eliminated several items such as downloading sources from Internet, checking md5sum etc because the application sources are present locally. &lt;/p&gt; &lt;a name="Compile" id="Compile"&gt;&lt;/a&gt;&lt;h1&gt; &lt;span class="mw-headline"&gt; Compile  &lt;/span&gt;&lt;/h1&gt; &lt;p&gt;To compile the application, first the application needs to be selected for building. This can be accomplished by running menuconfig at the  top level directory of openWRT.&lt;br /&gt; &lt;/p&gt; &lt;pre&gt;$make menuconfig&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;Select the &lt;b&gt;simple&lt;/b&gt; application under the "Utilites" sub item:  &lt;/p&gt; &lt;pre&gt;OpenWrt Configuration&lt;br /&gt;  Utilities&lt;br /&gt;      &lt;*&gt; simple&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;Compile the distribution by typing the following command at the top level directory:  &lt;/p&gt; &lt;pre&gt;$ make V=99&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;&lt;i&gt;The above V=99 option gives a verbose output. It allows you to get back a more information about the build and see what happened if the compilation fails with an error.&lt;/i&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;Verify if the application is created in the build directory and if relevant files are included in the romfs image. &lt;/p&gt; &lt;a name="Verify" id="Verify"&gt;&lt;/a&gt;&lt;h1&gt; &lt;span class="mw-headline"&gt; Verify  &lt;/span&gt;&lt;/h1&gt; &lt;p&gt;Load the image to the target. The application will be present in the &lt;b&gt;/bin&lt;/b&gt; directory on the target.  &lt;/p&gt; &lt;a name="Common_errors" id="Common_errors"&gt;&lt;/a&gt;&lt;h1&gt; &lt;span class="mw-headline"&gt; Common errors  &lt;/span&gt;&lt;/h1&gt; &lt;p&gt;Some of the common problems are as follows  &lt;/p&gt; &lt;a name="menuconfig_does_not_show_the_new_package" id="menuconfig_does_not_show_the_new_package"&gt;&lt;/a&gt;&lt;h2&gt; &lt;span class="mw-headline"&gt; menuconfig does not show the new package  &lt;/span&gt;&lt;/h2&gt; &lt;p&gt;This problem happens if &lt;b&gt;openwrt/packages/tmp&lt;/b&gt; is already present. Delete &lt;b&gt;tmp&lt;/b&gt; directory and retry &lt;b&gt;make menuconfig&lt;/b&gt;.  &lt;/p&gt; &lt;a name="Applet_not_found" id="Applet_not_found"&gt;&lt;/a&gt;&lt;h2&gt; &lt;span class="mw-headline"&gt; Applet not found  &lt;/span&gt;&lt;/h2&gt; &lt;p&gt;This problem typically happens when the application was built for the host PC instead of the target. One way to verify is to go to the &lt;b&gt;openwrt/build-dir/simple-1.0.0&lt;/b&gt; directory and do the following:  &lt;/p&gt; &lt;pre&gt;ubicom32-elf-objdump -x simple&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;Check the output and verify that the architecture of the created application is ubicom32vX and that the &lt;b&gt;libc&lt;/b&gt; is not the GLIBC of the host PC but that of target. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-2436250882046222222?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/2436250882046222222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=2436250882046222222' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2436250882046222222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2436250882046222222'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2010/06/add-new-application-to-openwrt.html' title='Add a new application to openWRT'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-7115606738000788021</id><published>2009-10-28T00:20:00.000-07:00</published><updated>2009-10-28T00:27:49.079-07:00</updated><title type='text'>Arduino IDE in UBUNTU HARDY</title><content type='html'>I just bought myself an arduino Duemilanove 328. So I download the IDE, install the IDE,&lt;br /&gt;and the compilers of course using apt-get install (gcc-avr, binutils-avr, avr-libc).&lt;br /&gt;And compiled the sample source code (blink led things). And it won't compile.&lt;br /&gt;After googling for a whili, it turned out that my compiler packages from Ubuntu Hardy won't&lt;br /&gt;support Atmega328.  Uninstalled all the three packages above.&lt;br /&gt;Reinstall the followings:&lt;br /&gt;gcc-avr_4.3.2-1_i386.deb&lt;br /&gt;binutils-avr_2.18-4_i386.deb&lt;br /&gt;avr-libc_1.6.2.cvs20080610-2_all.deb&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-7115606738000788021?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/7115606738000788021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=7115606738000788021' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/7115606738000788021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/7115606738000788021'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2009/10/arduino-ide-in-ubuntu-hardy.html' title='Arduino IDE in UBUNTU HARDY'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-8276184022038938165</id><published>2009-05-25T02:38:00.000-07:00</published><updated>2009-05-25T02:50:48.305-07:00</updated><title type='text'>How To Add Default Gateway in Linux</title><content type='html'># route add default gw 192.168.1.254 eth0&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-8276184022038938165?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/8276184022038938165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=8276184022038938165' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/8276184022038938165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/8276184022038938165'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2009/05/how-to-add-default-gateway-in-linux.html' title='How To Add Default Gateway in Linux'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-811494999587081360</id><published>2009-05-10T22:21:00.000-07:00</published><updated>2009-05-10T22:22:44.270-07:00</updated><title type='text'>How to Create RamDisk in Linux</title><content type='html'>mkdir /mnt/ramdisk&lt;br /&gt;mount -t tmpfs none /mnt/ramdisk -o size=256000&lt;br /&gt;chmod 1777 /mnt/ramdisk&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-811494999587081360?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/811494999587081360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=811494999587081360' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/811494999587081360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/811494999587081360'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2009/05/how-to-create-ramdisk-in-linux.html' title='How to Create RamDisk in Linux'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-479096330413007238</id><published>2009-04-17T00:58:00.000-07:00</published><updated>2009-04-17T01:02:25.306-07:00</updated><title type='text'>Linux Multicast Router</title><content type='html'>To enable multicasting in linux router you have to enable (value 1) in&lt;br /&gt;/proc/sys/net/ipv4/conf/all/mc_forwarding.&lt;br /&gt;&lt;br /&gt;echo 1 &gt; /proc/sys/net/ipv4/conf/all/mc_forwarding&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;sysctl -w net.ipv4.conf.all.mc_forwarding = 1&lt;br /&gt;&lt;br /&gt;but chances are you are not able to do it.&lt;br /&gt;&lt;br /&gt;The work around is to install pimd. It solves the problem. From there you can try xorp.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-479096330413007238?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/479096330413007238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=479096330413007238' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/479096330413007238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/479096330413007238'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2009/04/linux-multicast-router.html' title='Linux Multicast Router'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-5969799860111237280</id><published>2009-04-09T02:16:00.000-07:00</published><updated>2009-04-09T02:21:04.122-07:00</updated><title type='text'>about int main (int ac, char* av[]){}</title><content type='html'>program1.c&lt;br /&gt;&lt;br /&gt;int main (int ac, char* av[])&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;after compilation, if you run it by using the following command,&lt;br /&gt;&lt;br /&gt;./program1 test1 test 2&lt;br /&gt;&lt;br /&gt;ac = 3   ./program1 --&gt; ac =1&lt;br /&gt;              test1          --&gt;  ac = 2&lt;br /&gt;              test2          --&gt;  ac = 3&lt;br /&gt;&lt;br /&gt;*(av+0) = *av = ./program1&lt;br /&gt;*(av+1) = test1&lt;br /&gt;*(av+2) = test2&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-5969799860111237280?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/5969799860111237280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=5969799860111237280' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/5969799860111237280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/5969799860111237280'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2009/04/about-int-main-int-ac-char-av.html' title='about int main (int ac, char* av[]){}'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-2524718899733720034</id><published>2009-03-30T00:56:00.000-07:00</published><updated>2009-03-30T01:03:18.871-07:00</updated><title type='text'>Learning to write your own WHO command under linux (UBUNTU hardy)</title><content type='html'>&lt;h3&gt;OK. What is WHO? Who is a command to display information about the users who are currently logged in.&lt;br /&gt;&lt;/h3&gt;First we are going to read the manual of WHO&lt;br /&gt;&lt;br /&gt;&lt;b&gt;$man who&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;who [OPTION]... [ FILE | ARG1 ARG2 ]&lt;br /&gt;If  FILE is not specified, use /var/run/utmp.  /var/log/wtmp as FILE is common. &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;It says WHO will examine /var/run/utmp file to obtain its information.&lt;br /&gt;To find out more about utmp, type&lt;br /&gt;&lt;br /&gt;&lt;b&gt;$man -k utmp    &lt;/b&gt;fyi, (-k --&gt;option for searching)&lt;b&gt;&lt;br /&gt;utmp (5)             - login records&lt;br /&gt;&lt;br /&gt;$man 5 utmp&lt;br /&gt;UTMP(5)                                                         Linux Programmer's Manual                                                         UTMP(5)&lt;br /&gt;&lt;br /&gt;NAME&lt;br /&gt;       utmp, wtmp - login records&lt;br /&gt;&lt;br /&gt;SYNOPSIS&lt;br /&gt;       #include &lt;utmp.h&gt;&lt;br /&gt;&lt;br /&gt;DESCRIPTION&lt;br /&gt;       The  utmp  file  allows  one to discover information about who is currently using the system.  There may be more users currently using the system,&lt;br /&gt;       because not all programs use utmp logging.&lt;br /&gt;&lt;br /&gt;         The  file  is  a  sequence of entries with the following structure declared in the include file (note that this is only one of several definitions&lt;br /&gt;         around; details depend on the version of libc):&lt;br /&gt;&lt;br /&gt;           #define UT_UNKNOWN      0&lt;br /&gt;           #define RUN_LVL         1&lt;br /&gt;           #define BOOT_TIME       2&lt;br /&gt;           #define NEW_TIME        3&lt;br /&gt;           #define OLD_TIME        4&lt;br /&gt;           #define INIT_PROCESS    5&lt;br /&gt;           #define LOGIN_PROCESS   6&lt;br /&gt;           #define USER_PROCESS    7&lt;br /&gt;           #define DEAD_PROCESS    8&lt;br /&gt;           #define ACCOUNTING      9&lt;br /&gt;&lt;br /&gt;           #define UT_LINESIZE     12&lt;br /&gt;           #define UT_NAMESIZE     32&lt;br /&gt;           #define UT_HOSTSIZE     256&lt;br /&gt;&lt;br /&gt;           struct exit_status {&lt;br /&gt;               short int e_termination;    /* process termination status */&lt;br /&gt;               short int e_exit;           /* process exit status */&lt;br /&gt;           };&lt;br /&gt;&lt;br /&gt;           &lt;span style="background-color: rgb(255, 255, 0);"&gt;struct utmp {&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;               short ut_type;              /* type of login */&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;               pid_t ut_pid;               /* PID of login process */&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;               char ut_line[UT_LINESIZE];  /* device name of tty - "/dev/" */&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;               char ut_id[4];              /* init id or abbrev. ttyname */&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;               char ut_user[UT_NAMESIZE];  /* user name */&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;               char ut_host[UT_HOSTSIZE];  /* hostname for remote login */&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;               struct exit_status ut_exit; /* The exit status of a process&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;                                              marked as DEAD_PROCESS */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;            /* The ut_session and ut_tv fields must be the same size when&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;                compiled 32- and 64-bit.  This allows data files and shared&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;                memory to be shared between 32- and 64-bit applications */&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;           #if __WORDSIZE == 64 &amp;amp;&amp;amp; defined __WORDSIZE_COMPAT32&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;               int32_t ut_session;         /* Session ID, used for windowing */&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;               struct {&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;                   int32_t tv_sec;         /* Seconds */&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;                   int32_t tv_usec;        /* Microseconds */&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;               } ut_tv;                    /* Time entry was made */&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;           #else&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;                long int ut_session;       /* Session ID, used for windowing */&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;                struct timeval ut_tv;      /* Time entry was made */&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;           #endif&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;               int32_t ut_addr_v6[4];      /* IP address of remote host */&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;               char __unused[20];          /* Reserved for future use */&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;           };&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;           /* Backwards compatibility hacks.  */&lt;br /&gt;           #define ut_name ut_user&lt;br /&gt;           #ifndef _NO_UT_TIME&lt;br /&gt;           #define ut_time ut_tv.tv_sec&lt;br /&gt;           #endif&lt;br /&gt;           #define ut_xtime ut_tv.tv_sec&lt;br /&gt;           #define ut_addr ut_addr_v6[0]&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;We are closing in quickly on how who works. The manual said &lt;b&gt;&lt;i&gt;utmp&lt;/i&gt;&lt;/b&gt; file is a sequence of &lt;b&gt;&lt;i&gt;utmp entries &lt;/i&gt;&lt;/b&gt;as defined in &lt;b&gt;&lt;i&gt;struct utmp &lt;/i&gt;&lt;/b&gt;in the &lt;i&gt;&lt;b&gt;utmp.h&lt;/b&gt;&lt;/i&gt; file. So, where is utmp.h?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;$locate utmp.h&lt;br /&gt;/usr/include/utmp.h&lt;br /&gt;/usr/include/bits/utmp.h&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;After a careful examination on both files, the&lt;i&gt;&lt;b&gt; struct utmp &lt;/b&gt;&lt;/i&gt;is actually in&lt;b&gt; /usr/include/bits/utmp.h&lt;br /&gt;&lt;/b&gt;Up to this point, we have collected the following facts:&lt;br /&gt;1. WHO gets its information from /var/run/utmp&lt;br /&gt;2. The information in /var/run/utmp should be read using a structure called &lt;b&gt;struct utmp&lt;/b&gt; which is defined in&lt;b&gt; /usr/include/bits/utmp.h&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;Our task is to write WHO. We are going to use system calls open(), read() and close().&lt;br /&gt;&lt;br /&gt;&lt;b&gt;open()&lt;br /&gt;purpose: creates a connection to a file&lt;br /&gt;include: #include &lt;fcntl.h&gt;&lt;br /&gt;usage: int fd = open (char* name, int how)&lt;br /&gt;args: name -&gt; name of file&lt;br /&gt;         how   -&gt; O_RDONLY, O_WRONLY, or O_RDWR&lt;br /&gt;returns: -1 on error&lt;br /&gt;             int on success&lt;br /&gt;&lt;br /&gt;read()&lt;br /&gt;purpose: transfer up to qty bytes from fd to buf&lt;br /&gt;include: #include &lt;unistd.h&gt;&lt;br /&gt;usage: ssize_t numread = read(int fd, void* buf, size_t qty)&lt;br /&gt;args: fd-&gt; source of data&lt;br /&gt;         buf-&gt;destination for data&lt;br /&gt;         qty-&gt;number of bytes to transfer&lt;br /&gt;returns: -1 on error&lt;br /&gt;             numread on success&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;close()&lt;br /&gt;purpose: closes a file&lt;br /&gt;include: #include &lt;unistd.h&gt;&lt;br /&gt;usage: int result = close(int fd)&lt;br /&gt;args: fd file descriptor&lt;br /&gt;returns: -1 on error&lt;br /&gt;              0 on success&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;who version 1&lt;/h5&gt; /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */&lt;br /&gt;/*&lt;br /&gt; * main.c - Auto-generated by Anjuta's Makefile project wizard&lt;br /&gt; *&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include &lt;utmp.h&gt;&lt;br /&gt;#include &lt;fcntl.h&gt;&lt;br /&gt;#include &lt;unistd.h&gt;&lt;br /&gt;#define SHOWHOST&lt;br /&gt;void show_info(struct utmp*);&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;    struct utmp current_record; /*read info into this structure*/&lt;br /&gt;    int utmpfd; /*the file handler*/&lt;br /&gt;    int reclen;&lt;br /&gt;   &lt;br /&gt;    reclen = sizeof(current_record); /*reclen is 384 bytes*/&lt;br /&gt;    utmpfd = open (UTMP_FILE,O_RDONLY); /*UTMP_FILE is define in utmp.h, to be&lt;br /&gt;                                        precise in paths.h*/&lt;br /&gt;    while (read(utmpfd, &amp;amp;current_record,reclen)==reclen)&lt;br /&gt;    show_info(&amp;amp;current_record);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void show_info(struct utmp* utbufp)&lt;br /&gt;{&lt;br /&gt;    printf("%-8.8s", (*utbufp).ut_name);&lt;br /&gt;    printf(" ");&lt;br /&gt;    printf("%-8.8s", (*utbufp).ut_line);&lt;br /&gt;    printf(" ");&lt;br /&gt;    printf("%10li", (*utbufp).ut_tv.tv_sec);&lt;br /&gt;    printf(" ");&lt;br /&gt;#ifdef SHOWHOST&lt;br /&gt;    printf("(%s)",(*utbufp).ut_host);&lt;br /&gt;#endif&lt;br /&gt;    printf("\n");&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Output who version 1&lt;/h5&gt;&lt;br /&gt;reboot   ~                            1238374877 (2.6.24-23-generic)&lt;br /&gt;runlevel ~                            1238374877 (2.6.24-23-generic)&lt;br /&gt;LOGIN    tty4                       1238374877 ()&lt;br /&gt;LOGIN    tty3                       1238374877 ()&lt;br /&gt;LOGIN    tty5                       1238374877 ()&lt;br /&gt;LOGIN    tty2                       1238374877 ()&lt;br /&gt;LOGIN    tty6                       1238374877 ()&lt;br /&gt;LOGIN    tty1                       1238374896 ()&lt;br /&gt;juniarto tty7                         1238374912 (:0)&lt;br /&gt;juniarto pts/0                        1238377168 (:0.0)&lt;br /&gt;juniarto pts/1                        1238377727 (:0.0)&lt;br /&gt;juniarto pts/2                        1238389211 (:0.0)&lt;br /&gt;&lt;br /&gt;The output  seems promising. But there are two issues have to solved:&lt;br /&gt;1. Suppress the blank records&lt;br /&gt;    reboot, runlevel,LOGIN...&lt;br /&gt;2. Get the log-in times correct&lt;br /&gt;&lt;br /&gt;Examining the /usr/include/bits/utmp.h file, we find the following:&lt;br /&gt;&lt;br /&gt;/* Values for the `ut_type' field of a `struct utmp'.  */&lt;br /&gt;#define EMPTY           0       /* No valid user accounting information.  */&lt;br /&gt;&lt;br /&gt;#define RUN_LVL         1       /* The system's runlevel.  */&lt;br /&gt;#define BOOT_TIME       2       /* Time of system boot.  */&lt;br /&gt;#define NEW_TIME        3       /* Time after system clock changed.  */&lt;br /&gt;#define OLD_TIME        4       /* Time when system clock changed.  */&lt;br /&gt;&lt;br /&gt;#define INIT_PROCESS    5       /* Process spawned by the init process.  */&lt;br /&gt;#define LOGIN_PROCESS   6       /* Session leader of a logged in user.  */&lt;br /&gt;#define USER_PROCESS    7       /* Normal process.  */&lt;br /&gt;#define DEAD_PROCESS    8       /* Terminated process.  */&lt;br /&gt;&lt;br /&gt;#define ACCOUNTING      9&lt;br /&gt;&lt;br /&gt;The list looks helpful. Each record has a member called ut_type. Type 7 looks like our lucky number. If we make the following minor change to show_info(), those blank records should vanish:&lt;br /&gt;&lt;br /&gt;void show_info(struct utmp* utbufp)&lt;br /&gt;{&lt;br /&gt;   &lt;b&gt; if ((*utbufp).ut_type != USER_PROCESS)&lt;br /&gt;        return;&lt;/b&gt;&lt;br /&gt;    printf("%-8.8s", (*utbufp).ut_name);&lt;br /&gt;    printf(" ");&lt;br /&gt;    printf("%-8.8s", (*utbufp).ut_line);&lt;br /&gt;    printf(" ");&lt;br /&gt;    printf("%101d", (*utbufp).ut_tv);&lt;br /&gt;    printf(" ");&lt;br /&gt;#ifdef SHOWHOST&lt;br /&gt;    printf("(%s)",(*utbufp).ut_host);&lt;br /&gt;#endif&lt;br /&gt;    printf("\n");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;OK, now the time (ut_tv)&lt;br /&gt;UNIX stores times as the number of seconds since midnight, Jan 1, 1970, GMT. The ut_tv data type is an integer that stores a number of seconds. To convert a  number of seconds since the start of UNIX time into a sensible format is ctime.&lt;br /&gt;&lt;br /&gt;#include &lt;time.h&gt;&lt;br /&gt;char* ctime(const time_t* timep)&lt;br /&gt;The ctime() function converts the calendar time timep into a string of the form&lt;br /&gt;     "Wed Jun 30 21:49:08 1993\n"&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;WHO version 2&lt;/h5&gt;&lt;br /&gt;/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */&lt;br /&gt;/*&lt;br /&gt; * main.c - Auto-generated by Anjuta's Makefile project wizard&lt;br /&gt; *&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include &lt;utmp.h&gt;&lt;br /&gt;#include &lt;fcntl.h&gt;&lt;br /&gt;#include &lt;unistd.h&gt;&lt;br /&gt;#include &lt;time.h&gt;&lt;br /&gt;#define SHOWHOST&lt;br /&gt;&lt;br /&gt;void show_info(struct utmp*);&lt;br /&gt;void show_time(long);&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;    struct utmp current_record; /*read info into this structure*/&lt;br /&gt;    int utmpfd; /*the file handler*/&lt;br /&gt;    int reclen;&lt;br /&gt;   &lt;br /&gt;    reclen = sizeof(current_record); /*reclen is 384 bytes*/&lt;br /&gt;    utmpfd = open (UTMP_FILE,O_RDONLY); /*UTMP_FILE is define in utmp.h, to be&lt;br /&gt;                                        precise in paths.h*/&lt;br /&gt;    while (read(utmpfd, &amp;amp;current_record,reclen)==reclen)&lt;br /&gt;    show_info(&amp;amp;current_record);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void show_info(struct utmp* utbufp)&lt;br /&gt;{&lt;br /&gt;    if ((*utbufp).ut_type != USER_PROCESS)&lt;br /&gt;        return;&lt;br /&gt;    printf("%-8.8s", (*utbufp).ut_name);&lt;br /&gt;    printf(" ");&lt;br /&gt;    printf("%-8.8s", (*utbufp).ut_line);&lt;br /&gt;    printf(" ");&lt;br /&gt;    show_time((*utbufp).ut_tv.tv_sec);&lt;br /&gt;   &lt;br /&gt;#ifdef SHOWHOST&lt;br /&gt;    printf("(%s)",(*utbufp).ut_host);&lt;br /&gt;#endif&lt;br /&gt;    printf("\n");&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void show_time(long timeval)&lt;br /&gt;{&lt;br /&gt;    char* cp; /*to hold address of time in string*/&lt;br /&gt;    cp = ctime(&amp;amp;timeval);&lt;br /&gt;    printf("%12.12s",cp+4);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Output WHO version 2&lt;/h5&gt;&lt;br /&gt;juniarto tty7     Mar 30 09:01(:0)&lt;br /&gt;juniarto pts/0    Mar 30 09:39(:0.0)&lt;br /&gt;juniarto pts/1    Mar 30 09:48(:0.0)&lt;br /&gt;juniarto pts/2    Mar 30 13:00(:0.0)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-2524718899733720034?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/2524718899733720034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=2524718899733720034' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2524718899733720034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2524718899733720034'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2009/03/learning-to-write-your-own-who-command.html' title='Learning to write your own WHO command under linux (UBUNTU hardy)'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-6162394335603055406</id><published>2009-03-26T00:11:00.001-07:00</published><updated>2009-03-26T00:13:25.131-07:00</updated><title type='text'>Linux Socket Programming 2 (UDP Client)</title><content type='html'>&lt;style type="text/css"&gt;     /* default css */  table {   font-size: 1em;   line-height: inherit;   border-collapse: collapse; }   tr {      text-align: left;    }   div, address, ol, ul, li, option, select {   margin-top: 0px;   margin-bottom: 0px; }  p {   margin: 0px; }   pre {   font-family: Courier New;   white-space: pre-wrap;   margin:0; }  body {   margin: 6px;   padding: 0px;   font-family: Verdana, sans-serif;   font-size: 10pt;   background-color: #ffffff; }   img {   -moz-force-broken-image-icon: 1; }  @media screen {   html.pageview {     background-color: #f3f3f3 !important;   }        body {     min-height: 1100px;          counter-reset: __goog_page__;   }   * html body {     height: 1100px;   }   .pageview body {     border-top: 1px solid #ccc;     border-left: 1px solid #ccc;     border-right: 2px solid #bbb;     border-bottom: 2px solid #bbb;     width: 648px !important;     margin: 15px auto 25px;     padding: 40px 50px;   }   /* IE6 */   * html {     overflow-y: scroll;   }   * html.pageview body {     overflow-x: auto;   }   /* Prevent repaint errors when scrolling in Safari. This "Star-7" css hack      targets Safari 3.1, but not WebKit nightlies and presumably Safari 4.      That's OK because this bug is fixed in WebKit nightlies/Safari 4 :-). */   html*#wys_frame::before {     content: '\A0';     position: fixed;     overflow: hidden;     width: 0;     height: 0;     top: 0;     left: 0;   }               .writely-callout-data {       display: none;       *display: inline-block;       *width: 0;       *height: 0;       *overflow: hidden;     }     .writely-footnote-marker {       background-image: url('MISSING');       background-color: transparent;       background-repeat: no-repeat;       width: 7px;       overflow: hidden;       height: 16px;       vertical-align: top;               -moz-user-select: none;     }     .editor .writely-footnote-marker {       cursor: move;     }     .writely-footnote-marker-highlight {       background-position: -15px 0;       -moz-user-select: text;     }     .writely-footnote-hide-selection ::-moz-selection, .writely-footnote-hide-selection::-moz-selection {       background: transparent;     }     .writely-footnote-hide-selection ::selection, .writely-footnote-hide-selection::selection {       background: transparent;     }     .writely-footnote-hide-selection {       cursor: move;     }           .editor .writely-comment-yellow {       background-color: #FF9;       background-position: -240px 0;     }     .editor .writely-comment-yellow-hover {       background-color: #FF0;       background-position: -224px 0;     }     .editor .writely-comment-blue {       background-color: #C0D3FF;       background-position: -16px 0;     }     .editor .writely-comment-blue-hover {       background-color: #6292FE;       background-position: 0 0;     }     .editor .writely-comment-orange {       background-color: #FFDEAD;       background-position: -80px 0;     }     .editor .writely-comment-orange-hover {       background-color: #F90;       background-position: -64px 0;     }     .editor .writely-comment-green {       background-color: #99FBB3;       background-position: -48px 0;     }     .editor .writely-comment-green-hover {       background-color: #00F442;       background-position: -32px 0;     }     .editor .writely-comment-cyan {       background-color: #CFF;       background-position: -208px 0;     }     .editor .writely-comment-cyan-hover {       background-color: #0FF;       background-position: -192px 0;     }     .editor .writely-comment-purple {       background-color: #EBCCFF;       background-position: -144px 0;     }     .editor .writely-comment-purple-hover {       background-color: #90F;       background-position: -128px 0;     }     .editor .writely-comment-magenta {       background-color: #FCF;       background-position: -112px 0;     }     .editor .writely-comment-magenta-hover {       background-color: #F0F;       background-position: -96px 0;     }     .editor .writely-comment-red {       background-color: #FFCACA;       background-position: -176px 0;     }     .editor .writely-comment-red-hover {       background-color: #FF7A7A;       background-position: -160px 0;     }      .editor .writely-comment-marker {       background-image: url('MISSING');       background-color: transparent;       padding-right: 11px;       background-repeat: no-repeat;       width: 16px;       height: 16px;       -moz-user-select: none;     }      .editor .writely-comment-hidden {       padding: 0;       background: none;     }     .editor .writely-comment-marker-hidden {       background: none;       padding: 0;       width: 0;     }     .editor .writely-comment-none {       opacity: .2;       filter:progid:DXImageTransform.Microsoft.Alpha(opacity=20);       -moz-opacity: .2;     }     .editor .writely-comment-none-hover {       opacity: .2;       filter:progid:DXImageTransform.Microsoft.Alpha(opacity=20);       -moz-opacity: .2;     }           .br_fix br:not(:-moz-last-node):not(:-moz-first-node) {          position:relative;          left: -1ex        }      .br_fix br+br {     position: static !important   } }  h6 { font-size: 8pt } h5 { font-size: 8pt } h4 { font-size: 10pt } h3 { font-size: 12pt } h2 { font-size: 14pt } h1 { font-size: 18pt }  blockquote {padding: 10px; border: 1px #DDD dashed }  a img {border: 0}  .pb {   border-width: 0;   page-break-after: always;   /* We don't want this to be resizeable, so enforce a width and height      using !important */   height: 1px !important;   width: 100% !important; }  .editor .pb {   border-top: 1px dashed #C0C0C0;   border-bottom: 1px dashed #C0C0C0; }  div.google_header, div.google_footer {   position: relative;   margin-top: 1em;   margin-bottom: 1em; }   /* Table of contents */ .editor div.writely-toc {   background-color: #f3f3f3;   border: 1px solid #ccc; } .writely-toc &gt; ol {   padding-left: 3em;   font-weight: bold; } ol.writely-toc-subheading {   padding-left: 1em;   font-weight: normal; } /* IE6 only */ * html writely-toc ol {   list-style-position: inside; } .writely-toc-none {   list-style-type: none; } .writely-toc-decimal {   list-style-type: decimal; } .writely-toc-upper-alpha {   list-style-type: upper-alpha; } .writely-toc-lower-alpha {   list-style-type: lower-alpha; } .writely-toc-upper-roman {   list-style-type: upper-roman; } .writely-toc-lower-roman {   list-style-type: lower-roman; } .writely-toc-disc {   list-style-type: disc; }  /* Ordered lists converted to numbered lists can preserve ordered types, and    vice versa. This is confusing, so disallow it */ ul[type="i"], ul[type="I"], ul[type="1"], ul[type="a"], ul[type="A"] {   list-style-type: disc; }  ol[type="disc"], ol[type="circle"], ol[type="square"] {   list-style-type: decimal; }  /* end default css */     /* default print css */      @media print {     body {       padding: 0;       margin: 0;     }      div.google_header, div.google_footer {       display: block;       min-height: 0;       border: none;     }      div.google_header {       flow: static(header);     }      /* used to insert page numbers */     div.google_header::before, div.google_footer::before {       position: absolute;       top: 0;     }      div.google_footer {       flow: static(footer);     }      /* always consider this element at the start of the doc */     div#google_footer {       flow: static(footer, start);     }      span.google_pagenumber {       content: counter(page);     }      span.google_pagecount {       content: counter(pages);     }       callout.google_footnote {              display: prince-footnote;       footnote-style-position: inside;       /* These styles keep the footnote from taking on the style of the text          surrounding the footnote marker. They can be overridden in the          document CSS. */       color: #000;       font-family: Verdana;       font-size: 10.0pt;       font-weight: normal;     }      /* Table of contents */     #WritelyTableOfContents a::after {       content: leader('.') target-counter(attr(href), page);     }      #WritelyTableOfContents a {       text-decoration: none;       color: black;     }   }    @page {     @top {       content: flow(header);     }     @bottom {       content: flow(footer);     }     @footnotes {       border-top: solid black thin;       padding-top: 8pt;     }   }   /* end default print css */   /* custom css */   /* end custom css */  /* ui edited css */  body {   font-family: Verdana;      font-size: 10.0pt;   line-height: normal;   background-color: #ffffff; } /* end ui edited css */   /* editor CSS */ .editor a:visited {color: #551A8B} .editor table.zeroBorder {border: 1px dotted gray} .editor table.zeroBorder td {border: 1px dotted gray} .editor table.zeroBorder th {border: 1px dotted gray}   .editor div.google_header, .editor div.google_footer {   border: 2px #DDDDDD dashed;   position: static;   width: 100%;   min-height: 2em; }  .editor .misspell {background-color: yellow}  .editor .writely-comment {   font-size: 9pt;   line-height: 1.4;   padding: 1px;   border: 1px dashed #C0C0C0 }   /* end editor CSS */  &lt;/style&gt;                          &lt;h3&gt;   &lt;b&gt;&lt;b&gt;Linux Socket Programming 2 (UDP Client)&lt;/b&gt;&lt;/b&gt; &lt;/h3&gt;&lt;br /&gt;The client&lt;br /&gt;&lt;div&gt;   &lt;table class="" id="m:l3" border="1" bordercolor="#000000" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr bgcolor="#9fc5e8"&gt;       &lt;td width="50%"&gt;         Code&lt;br /&gt;      &lt;/td&gt;       &lt;td width="50%"&gt;         Explanation&lt;br /&gt;      &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td width="50%"&gt;         /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */&lt;br /&gt;        /*&lt;br /&gt;         * main.c - Auto-generated by Anjuta's Makefile project wizard&lt;br /&gt;         *&lt;br /&gt;         */&lt;br /&gt;       &lt;br /&gt;       &lt;br /&gt;        #include &lt;sys/types.h&gt;&lt;br /&gt;        #include &lt;sys/socket.h&gt;&lt;br /&gt;        #include &lt;netdb.h&gt;&lt;br /&gt;        #include &lt;string.h&gt;&lt;br /&gt;        #include &lt;stdio.h&gt;&lt;br /&gt;       &lt;br /&gt;       &lt;br /&gt;        #define MAXBUF 1024       &lt;/td&gt;       &lt;td width="50%"&gt;         I am using Anjuta IDE to code. Some header-files need to be included.&lt;br /&gt;        MAXBUF is defined.       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td width="50%"&gt;         int main(int argc, char* argv[])&lt;br /&gt;        {&lt;br /&gt;            int udpSocket;&lt;br /&gt;            int returnStatus;&lt;br /&gt;            int addrlen;&lt;br /&gt;            struct sockaddr_in udpClient, udpServer;&lt;br /&gt;            char buf[MAXBUF];&lt;br /&gt;           &lt;br /&gt;            if (argc &lt;3)&lt;br /&gt;            {&lt;br /&gt;                fprintf(stderr, "Usage: %s &lt;ip&gt; &lt;port&gt;\n", argv[0]);&lt;br /&gt;                exit(1);&lt;br /&gt;            }&lt;br /&gt;          &lt;br /&gt;      &lt;/td&gt;       &lt;td width="50%"&gt;         Usage: ./udpclient &lt;ipaddress&gt; &lt;server&gt;&lt;br /&gt;      &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td width="50%"&gt;         /*create a socket */&lt;br /&gt;            udpSocket = socket(AF_INET, SOCK_DGRAM,0);&lt;br /&gt;           &lt;br /&gt;            if (udpSocket == -1)&lt;br /&gt;            {&lt;br /&gt;                fprintf(stderr, "Could not create a socket!\n");&lt;br /&gt;                exit(1);&lt;br /&gt;            }&lt;br /&gt;            else {&lt;br /&gt;                printf("Socket created.\n");&lt;br /&gt;            }&lt;br /&gt;          &lt;br /&gt;      &lt;/td&gt;       &lt;td width="50%"&gt;         The first step is to create socket.&lt;br /&gt;        &lt;b&gt;The function synopsis for socket function is provided in&lt;br /&gt;        #include &lt;sys/types.h&gt;&lt;br /&gt;        #include &lt;sys/socket.h&gt;&lt;br /&gt;        int socket (int family, int type, int protocol)&lt;br /&gt;       &lt;br /&gt;        family:&lt;/b&gt; you can use AF_INET for TCP/IP, or AF_UNIX for internal. In this case we use AF_INET.&lt;br /&gt;        &lt;b&gt;type: &lt;/b&gt;SOCK_DGRAM (for UDP), SOCK_STREAM(for TCP)&lt;br /&gt;        &lt;b&gt;protocol:&lt;/b&gt; typically a zero (0) to use the default for a given family an type.&lt;br /&gt;          &lt;br /&gt;       &lt;br /&gt;          &lt;br /&gt;      &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td width="50%"&gt;         /*client address */&lt;br /&gt;            /*use INADDR_ANY to use all local addresses*/&lt;br /&gt;            udpClient.sin_family = AF_INET;&lt;br /&gt;            udpClient.sin_addr.s_addr = INADDR_ANY;&lt;br /&gt;            udpClient.sin_port = 0;       &lt;/td&gt;       &lt;td width="50%"&gt;         it is based on address structure&lt;br /&gt;       &lt;br /&gt;        &lt;b&gt;struct sockaddr_in {&lt;br /&gt;              short sin_family;&lt;br /&gt;              u_short sin_port; /*protocol port number */&lt;br /&gt;                                          /*network byte order*/&lt;br /&gt;              u_long sin_addr; /*net address for the remote host*/&lt;br /&gt;                                          /*network byte ordered*/&lt;br /&gt;              char sin_zero[8]; /*unused, set to zero*/&lt;br /&gt;        }&lt;/b&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td width="50%"&gt;         returnStatus = bind(udpSocket, (struct sockaddr_in *)&amp;amp;udpClient,&lt;br /&gt;                                sizeof(udpClient));&lt;br /&gt;           &lt;br /&gt;            if (returnStatus==0){&lt;br /&gt;                fprintf(stderr, "Bind completed!\n");&lt;br /&gt;            }&lt;br /&gt;            else{&lt;br /&gt;                fprintf(stderr, "Could not bind to address!\n");&lt;br /&gt;                close(udpSocket);&lt;br /&gt;                exit(1);&lt;br /&gt;            }&lt;br /&gt;          &lt;br /&gt;      &lt;/td&gt;       &lt;td width="50%"&gt;         We  need to bind the address to our socket.&lt;b&gt;&lt;br /&gt;       &lt;br /&gt;        int bind(int sockfd, (struct sockaddr*) my_addr, socklen_t addrlen);&lt;br /&gt;       &lt;br /&gt;        socfd:socket descriptor. in our case is the socket udpSocket&lt;br /&gt;        (struct sockaddr*) my_addr, written as (struct sockaddr*)&amp;amp;udpServer&lt;br /&gt;        addrlen, the length of of the sockaddr structure, written as sizeof(udpServer)&lt;/b&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td width="50%"&gt;         /*client address */&lt;br /&gt;            /*use INADDR_ANY to use all local addresses*/&lt;br /&gt;            udpClient.sin_family = AF_INET;&lt;br /&gt;            udpClient.sin_addr.s_addr = INADDR_ANY;&lt;br /&gt;            udpClient.sin_port = 0;&lt;br /&gt;          &lt;br /&gt;       &lt;br /&gt;          &lt;br /&gt;      &lt;/td&gt;       &lt;td width="50%"&gt;         it is based on address structure&lt;br /&gt;       &lt;br /&gt;        &lt;b&gt;struct sockaddr_in {&lt;br /&gt;              short sin_family;&lt;br /&gt;              u_short sin_port; /*protocol port number */&lt;br /&gt;                                          /*network byte order*/&lt;br /&gt;              u_long sin_addr; /*net address for the remote host*/&lt;br /&gt;                                          /*network byte ordered*/&lt;br /&gt;              char sin_zero[8]; /*unused, set to zero*/&lt;br /&gt;        }&lt;/b&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td width="50%"&gt;         returnStatus = bind(udpSocket, (struct sockaddr_in *)&amp;amp;udpClient,&lt;br /&gt;                                sizeof(udpClient));&lt;br /&gt;           &lt;br /&gt;            if (returnStatus==0){&lt;br /&gt;                fprintf(stderr, "Bind completed!\n");&lt;br /&gt;            }&lt;br /&gt;            else{&lt;br /&gt;                fprintf(stderr, "Could not bind to address!\n");&lt;br /&gt;                close(udpSocket);&lt;br /&gt;                exit(1);&lt;br /&gt;            }&lt;br /&gt;           &lt;br /&gt;            /*set up the message to be sent to the server */&lt;br /&gt;            strcpy(buf, "For Professionals, By Professionals.\n");       &lt;/td&gt;       &lt;td width="50%"&gt;         We  need to bind the address to our socket.&lt;b&gt;&lt;br /&gt;       &lt;br /&gt;        int bind(int sockfd, (struct sockaddr*) my_addr, socklen_t addrlen);&lt;br /&gt;       &lt;br /&gt;        socfd:socket descriptor. in our case is the socket udpSocket&lt;br /&gt;        (struct sockaddr*) my_addr, written as (struct sockaddr*)&amp;amp;udpClient&lt;br /&gt;        addrlen, the length of of the sockaddr structure, written as sizeof(udpClient)&lt;br /&gt;       &lt;br /&gt;        prepare the message.&lt;br /&gt;        &lt;/b&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td width="50%"&gt;         /*server address */&lt;br /&gt;            /*use the command-line arguments */&lt;br /&gt;            udpServer.sin_family = AF_INET;&lt;br /&gt;            udpServer.sin_addr.s_addr = inet_addr(argv[1]);&lt;br /&gt;            udpServer.sin_port = htons(atoi(argv[2]));       &lt;/td&gt;       &lt;td width="50%"&gt;         address structure for server&lt;br /&gt;      &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td width="50%"&gt;         /*send message to server*/&lt;br /&gt;        returnStatus = sendto(udpSocket, buf, strlen(buf)+1, 0,&lt;br /&gt;                                  (struct sockaddr_in *)&amp;amp;udpServer, sizeof(udpServer));&lt;br /&gt;           &lt;br /&gt;            if (returnStatus == -1){&lt;br /&gt;                fprintf(stderr, "Could not send message!\n");&lt;br /&gt;            }&lt;br /&gt;            else{&lt;br /&gt;                printf("Message sent.\n");       &lt;/td&gt;       &lt;td width="50%"&gt;         &lt;b&gt;int sendto(int s, const void* msg, int len, unsigned flags, const struct sockaddr* to,int tolen);&lt;br /&gt;       &lt;br /&gt;        &lt;i&gt;s:&lt;/i&gt; the socket to send the datagram to&lt;br /&gt;        &lt;i&gt;msg:&lt;/i&gt; a pointer to the buffer holding the datagram message that you wish to send.&lt;br /&gt;        &lt;i&gt;len:&lt;/i&gt; the length, in bytes, of the datagram that starts at the pointer given my msg&lt;br /&gt;        &lt;i&gt;flags:&lt;/i&gt; use 0.&lt;br /&gt;        &lt;i&gt;to:&lt;/i&gt; a pointer to a generic socket address that you have established. This is the address of the recipient of the datagram.&lt;br /&gt;        &lt;i&gt;tolen:&lt;/i&gt; the length of the address argument to.&lt;/b&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td width="50%"&gt;             /*message sent: look for confirmation */&lt;br /&gt;                addrlen = sizeof(udpServer);&lt;br /&gt;                returnStatus = recvfrom(udpSocket, buf, MAXBUF, 0,&lt;br /&gt;                                        (struct sockaddr_in *)&amp;amp;udpServer, &amp;amp;addrlen);&lt;br /&gt;               &lt;br /&gt;                if (returnStatus == -1){&lt;br /&gt;                    fprintf(stderr, "Did not receive confirmation!\n");&lt;br /&gt;                }&lt;br /&gt;                else{&lt;br /&gt;                    buf[returnStatus] = 0;&lt;br /&gt;                    printf("Received: %s\n", buf);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;           &lt;br /&gt;            /* cleanup */&lt;br /&gt;            close(udpSocket);&lt;br /&gt;            return 0;&lt;br /&gt;        }       &lt;/td&gt;       &lt;td width="50%"&gt;         &lt;b&gt;int recvfrom(int s, void* buf, int len, unsigned flags, struct sockaddr* from, int* fromlen);&lt;br /&gt;       &lt;br /&gt;        &lt;i&gt;s:&lt;/i&gt; the socket to receive the datagram from&lt;br /&gt;        &lt;i&gt;buf:&lt;/i&gt; the buffer pointer to start receiving the datagram into&lt;br /&gt;        &lt;i&gt;len:&lt;/i&gt; the maximum length  in bytes of the receiving buffer buf&lt;br /&gt;        &lt;i&gt;flags:&lt;/i&gt; option flag. use 0.&lt;br /&gt;        &lt;i&gt;from:&lt;/i&gt; &amp;amp;udpClient (client address structure)&lt;br /&gt;        &lt;i&gt;fromlen:&lt;/i&gt; maximum length in bytes-&gt;length of udpClient. Note that the integer  that this pointer points to must be initialized to the maximum size of the receiving address structure &lt;i&gt;from&lt;/i&gt;, prior to calling the function.&lt;/b&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-6162394335603055406?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/6162394335603055406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=6162394335603055406' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/6162394335603055406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/6162394335603055406'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2009/03/linux-socket-programming-2-udp-client.html' title='Linux Socket Programming 2 (UDP Client)'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-9110908014481711567</id><published>2009-03-25T23:21:00.000-07:00</published><updated>2009-03-25T23:24:32.487-07:00</updated><title type='text'></title><content type='html'>&lt;style type="text/css"&gt;     /* default css */  table {   font-size: 1em;   line-height: inherit;   border-collapse: collapse; }   tr {      text-align: left;    }   div, address, ol, ul, li, option, select {   margin-top: 0px;   margin-bottom: 0px; }  p {   margin: 0px; }   pre {   font-family: Courier New;   white-space: pre-wrap;   margin:0; }  body {   margin: 6px;   padding: 0px;   font-family: Verdana, sans-serif;   font-size: 10pt;   background-color: #ffffff; }   img {   -moz-force-broken-image-icon: 1; }  @media screen {   html.pageview {     background-color: #f3f3f3 !important;   }        body {     min-height: 1100px;          counter-reset: __goog_page__;   }   * html body {     height: 1100px;   }   .pageview body {     border-top: 1px solid #ccc;     border-left: 1px solid #ccc;     border-right: 2px solid #bbb;     border-bottom: 2px solid #bbb;     width: 648px !important;     margin: 15px auto 25px;     padding: 40px 50px;   }   /* IE6 */   * html {     overflow-y: scroll;   }   * html.pageview body {     overflow-x: auto;   }   /* Prevent repaint errors when scrolling in Safari. This "Star-7" css hack      targets Safari 3.1, but not WebKit nightlies and presumably Safari 4.      That's OK because this bug is fixed in WebKit nightlies/Safari 4 :-). */   html*#wys_frame::before {     content: '\A0';     position: fixed;     overflow: hidden;     width: 0;     height: 0;     top: 0;     left: 0;   }               .writely-callout-data {       display: none;       *display: inline-block;       *width: 0;       *height: 0;       *overflow: hidden;     }     .writely-footnote-marker {       background-image: url('MISSING');       background-color: transparent;       background-repeat: no-repeat;       width: 7px;       overflow: hidden;       height: 16px;       vertical-align: top;               -moz-user-select: none;     }     .editor .writely-footnote-marker {       cursor: move;     }     .writely-footnote-marker-highlight {       background-position: -15px 0;       -moz-user-select: text;     }     .writely-footnote-hide-selection ::-moz-selection, .writely-footnote-hide-selection::-moz-selection {       background: transparent;     }     .writely-footnote-hide-selection ::selection, .writely-footnote-hide-selection::selection {       background: transparent;     }     .writely-footnote-hide-selection {       cursor: move;     }           .editor .writely-comment-yellow {       background-color: #FF9;       background-position: -240px 0;     }     .editor .writely-comment-yellow-hover {       background-color: #FF0;       background-position: -224px 0;     }     .editor .writely-comment-blue {       background-color: #C0D3FF;       background-position: -16px 0;     }     .editor .writely-comment-blue-hover {       background-color: #6292FE;       background-position: 0 0;     }     .editor .writely-comment-orange {       background-color: #FFDEAD;       background-position: -80px 0;     }     .editor .writely-comment-orange-hover {       background-color: #F90;       background-position: -64px 0;     }     .editor .writely-comment-green {       background-color: #99FBB3;       background-position: -48px 0;     }     .editor .writely-comment-green-hover {       background-color: #00F442;       background-position: -32px 0;     }     .editor .writely-comment-cyan {       background-color: #CFF;       background-position: -208px 0;     }     .editor .writely-comment-cyan-hover {       background-color: #0FF;       background-position: -192px 0;     }     .editor .writely-comment-purple {       background-color: #EBCCFF;       background-position: -144px 0;     }     .editor .writely-comment-purple-hover {       background-color: #90F;       background-position: -128px 0;     }     .editor .writely-comment-magenta {       background-color: #FCF;       background-position: -112px 0;     }     .editor .writely-comment-magenta-hover {       background-color: #F0F;       background-position: -96px 0;     }     .editor .writely-comment-red {       background-color: #FFCACA;       background-position: -176px 0;     }     .editor .writely-comment-red-hover {       background-color: #FF7A7A;       background-position: -160px 0;     }      .editor .writely-comment-marker {       background-image: url('MISSING');       background-color: transparent;       padding-right: 11px;       background-repeat: no-repeat;       width: 16px;       height: 16px;       -moz-user-select: none;     }      .editor .writely-comment-hidden {       padding: 0;       background: none;     }     .editor .writely-comment-marker-hidden {       background: none;       padding: 0;       width: 0;     }     .editor .writely-comment-none {       opacity: .2;       filter:progid:DXImageTransform.Microsoft.Alpha(opacity=20);       -moz-opacity: .2;     }     .editor .writely-comment-none-hover {       opacity: .2;       filter:progid:DXImageTransform.Microsoft.Alpha(opacity=20);       -moz-opacity: .2;     }           .br_fix br:not(:-moz-last-node):not(:-moz-first-node) {          position:relative;          left: -1ex        }      .br_fix br+br {     position: static !important   } }  h6 { font-size: 8pt } h5 { font-size: 8pt } h4 { font-size: 10pt } h3 { font-size: 12pt } h2 { font-size: 14pt } h1 { font-size: 18pt }  blockquote {padding: 10px; border: 1px #DDD dashed }  a img {border: 0}  .pb {   border-width: 0;   page-break-after: always;   /* We don't want this to be resizeable, so enforce a width and height      using !important */   height: 1px !important;   width: 100% !important; }  .editor .pb {   border-top: 1px dashed #C0C0C0;   border-bottom: 1px dashed #C0C0C0; }  div.google_header, div.google_footer {   position: relative;   margin-top: 1em;   margin-bottom: 1em; }   /* Table of contents */ .editor div.writely-toc {   background-color: #f3f3f3;   border: 1px solid #ccc; } .writely-toc &gt; ol {   padding-left: 3em;   font-weight: bold; } ol.writely-toc-subheading {   padding-left: 1em;   font-weight: normal; } /* IE6 only */ * html writely-toc ol {   list-style-position: inside; } .writely-toc-none {   list-style-type: none; } .writely-toc-decimal {   list-style-type: decimal; } .writely-toc-upper-alpha {   list-style-type: upper-alpha; } .writely-toc-lower-alpha {   list-style-type: lower-alpha; } .writely-toc-upper-roman {   list-style-type: upper-roman; } .writely-toc-lower-roman {   list-style-type: lower-roman; } .writely-toc-disc {   list-style-type: disc; }  /* Ordered lists converted to numbered lists can preserve ordered types, and    vice versa. This is confusing, so disallow it */ ul[type="i"], ul[type="I"], ul[type="1"], ul[type="a"], ul[type="A"] {   list-style-type: disc; }  ol[type="disc"], ol[type="circle"], ol[type="square"] {   list-style-type: decimal; }  /* end default css */     /* default print css */      @media print {     body {       padding: 0;       margin: 0;     }      div.google_header, div.google_footer {       display: block;       min-height: 0;       border: none;     }      div.google_header {       flow: static(header);     }      /* used to insert page numbers */     div.google_header::before, div.google_footer::before {       position: absolute;       top: 0;     }      div.google_footer {       flow: static(footer);     }      /* always consider this element at the start of the doc */     div#google_footer {       flow: static(footer, start);     }      span.google_pagenumber {       content: counter(page);     }      span.google_pagecount {       content: counter(pages);     }       callout.google_footnote {              display: prince-footnote;       footnote-style-position: inside;       /* These styles keep the footnote from taking on the style of the text          surrounding the footnote marker. They can be overridden in the          document CSS. */       color: #000;       font-family: Verdana;       font-size: 10.0pt;       font-weight: normal;     }      /* Table of contents */     #WritelyTableOfContents a::after {       content: leader('.') target-counter(attr(href), page);     }      #WritelyTableOfContents a {       text-decoration: none;       color: black;     }   }    @page {     @top {       content: flow(header);     }     @bottom {       content: flow(footer);     }     @footnotes {       border-top: solid black thin;       padding-top: 8pt;     }   }   /* end default print css */   /* custom css */   /* end custom css */  /* ui edited css */  body {   font-family: Verdana;      font-size: 10.0pt;   line-height: normal;   background-color: #ffffff; } /* end ui edited css */   /* editor CSS */ .editor a:visited {color: #551A8B} .editor table.zeroBorder {border: 1px dotted gray} .editor table.zeroBorder td {border: 1px dotted gray} .editor table.zeroBorder th {border: 1px dotted gray}   .editor div.google_header, .editor div.google_footer {   border: 2px #DDDDDD dashed;   position: static;   width: 100%;   min-height: 2em; }  .editor .misspell {background-color: yellow}  .editor .writely-comment {   font-size: 9pt;   line-height: 1.4;   padding: 1px;   border: 1px dashed #C0C0C0 }   /* end editor CSS */  &lt;/style&gt;                         &lt;h3&gt;   &lt;b&gt;Linux Socket Programming 1 (UDP Server)&lt;br /&gt; &lt;/b&gt; &lt;/h3&gt;&lt;br /&gt;In this article, we  are going to explore how a server and a client communicate using UDP. The client will send a text to the server,&lt;br /&gt;then the server will print out the text, and send the client a message that it has received the text.&lt;br /&gt;&lt;br /&gt;The server&lt;br /&gt;&lt;div&gt;   &lt;table class="" id="qni:" border="1" bordercolor="#000000" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr bgcolor="#76a5af"&gt;       &lt;td width="50%"&gt;         The Code&lt;br /&gt;     &lt;/td&gt;       &lt;td width="50%"&gt;         Explanation&lt;br /&gt;     &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td width="50%"&gt;         /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */&lt;br /&gt;       /*&lt;br /&gt;        * main.c - Auto-generated by Anjuta's Makefile project wizard&lt;br /&gt;        *&lt;br /&gt;        */&lt;br /&gt;     &lt;br /&gt;       #include &lt;stdio.h&gt;&lt;br /&gt;       #include &lt;sys h=""&gt;&lt;br /&gt;       #include &lt;sys h=""&gt;&lt;br /&gt;       #include &lt;netdb.h&gt;&lt;br /&gt;       #include &lt;string.h&gt;&lt;br /&gt;       #include &lt;stdio.h&gt;&lt;br /&gt;     &lt;br /&gt;       #define MAXBUF 1024       &lt;/stdio.h&gt;&lt;/string.h&gt;&lt;/netdb.h&gt;&lt;/sys&gt;&lt;/sys&gt;&lt;/stdio.h&gt;&lt;/td&gt;       &lt;td width="50%"&gt;         I am using Anjuta IDE to code. Some header-files need to be included.&lt;br /&gt;       MAXBUF is defined.&lt;br /&gt;     &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td width="50%"&gt;         int main(int argc, char* argv[])&lt;br /&gt;       {&lt;br /&gt;           int udpSocket;&lt;br /&gt;           int returnStatus = 0;&lt;br /&gt;           int addrlen = 0;&lt;br /&gt;           struct sockaddr_in udpServer, udpClient;&lt;br /&gt;           char buf[MAXBUF];&lt;br /&gt;     &lt;br /&gt;       /*check for the right number of arguments */&lt;br /&gt;           if (argc &lt;&gt;\n",argv[0]);&lt;br /&gt;               exit(1);&lt;br /&gt;           }&lt;br /&gt;     &lt;br /&gt;     &lt;br /&gt;     &lt;/port&gt;&lt;/td&gt;       &lt;td width="50%"&gt;         The usage of our server is&lt;br /&gt;       ./udpserver 89&lt;br /&gt;       where 89 is the port no to be used for communication.&lt;br /&gt;     &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td width="50%"&gt;         /*create a socket */&lt;br /&gt;           udpSocket = socket(AF_INET, SOCK_DGRAM, 0);&lt;br /&gt;           if (udpSocket == -1)&lt;br /&gt;           {&lt;br /&gt;               fprintf(stderr,"Could not create a socket!\n");&lt;br /&gt;               exit(1);&lt;br /&gt;           }&lt;br /&gt;           else{&lt;br /&gt;               printf("Socket created.\n");&lt;br /&gt;           }&lt;br /&gt;        &lt;br /&gt;     &lt;/td&gt;       &lt;td width="50%"&gt;         The first step is to create socket.&lt;br /&gt;       &lt;b&gt;The function synopsis for socket function is provided in&lt;br /&gt;       #include &lt;sys h=""&gt;&lt;br /&gt;       #include &lt;sys h=""&gt;&lt;br /&gt;       int socket (int family, int type, int protocol)&lt;br /&gt;     &lt;br /&gt;       family:&lt;/sys&gt;&lt;/sys&gt;&lt;/b&gt; you can use AF_INET for TCP/IP, or AF_UNIX for internal. In this case we use AF_INET.&lt;br /&gt;       &lt;b&gt;type: &lt;/b&gt;SOCK_DGRAM (for UDP), SOCK_STREAM(for TCP)&lt;br /&gt;       &lt;b&gt;protocol:&lt;/b&gt; typically a zero (0) to use the default for a given family an type.&lt;br /&gt;     &lt;br /&gt;     &lt;br /&gt;     &lt;br /&gt;     &lt;br /&gt;     &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td width="50%"&gt;             /*set up the server address and port */&lt;br /&gt;           /*use INADDR_ANY to bind to all local addresses */&lt;br /&gt;           udpServer.sin_family = AF_INET;&lt;br /&gt;           udpServer.sin_addr.s_addr = htonl(INADDR_ANY);&lt;br /&gt;         &lt;br /&gt;           /*use the port passed as argument */&lt;br /&gt;           udpServer.sin_port = htons(atoi(argv[1]));       &lt;/td&gt;       &lt;td width="50%"&gt;         it is based on address structure&lt;br /&gt;     &lt;br /&gt;       &lt;b&gt;struct sockaddr_in {&lt;br /&gt;             short sin_family;&lt;br /&gt;             u_short sin_port; /*protocol port number */&lt;br /&gt;                                         /*network byte order*/&lt;br /&gt;             u_long sin_addr; /*net address for the remote host*/&lt;br /&gt;                                         /*network byte ordered*/&lt;br /&gt;             char sin_zero[8]; /*unused, set to zero*/&lt;br /&gt;       }&lt;/b&gt;&lt;br /&gt;     &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td width="50%"&gt;         /*bind to the socket*/&lt;br /&gt;           returnStatus = bind(udpSocket, (struct sockaddr_in *)&amp;amp;udpServer,sizeof(udpServer));&lt;br /&gt;           if (returnStatus == 0) {&lt;br /&gt;               fprintf(stderr, "Bind completed!\n");&lt;br /&gt;           }&lt;br /&gt;           else {&lt;br /&gt;               fprintf(stderr, "Could not bind to address!\n");&lt;br /&gt;               close(udpSocket);&lt;br /&gt;               exit(1);&lt;br /&gt;           }       &lt;/td&gt;       &lt;td width="50%"&gt;         We  need to bind the address to our socket.&lt;b&gt;&lt;br /&gt;     &lt;br /&gt;       int bind(int sockfd, (struct sockaddr*) my_addr, socklen_t addrlen);&lt;br /&gt;     &lt;br /&gt;       socfd:socket descriptor. in our case is the socket udpSocket&lt;br /&gt;       (struct sockaddr*) my_addr, written as (struct sockaddr*)&amp;amp;udpServer&lt;br /&gt;       addrlen, the length of of the sockaddr structure, written as sizeof(udpServer)&lt;br /&gt;       &lt;/b&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td width="50%"&gt;         while (1)&lt;br /&gt;           {&lt;br /&gt;               addrlen = sizeof(udpClient);&lt;br /&gt;               returnStatus=recvfrom(udpSocket, buf, MAXBUF,0,(struct sockaddr_in *)&amp;amp;udpClient,&amp;amp;addrlen);&lt;br /&gt;               if (returnStatus == -1) {&lt;br /&gt;                   fprintf(stderr, "Could not receive message!\n");&lt;br /&gt;               }&lt;br /&gt;               else{&lt;br /&gt;                   printf("Received: %s\n",buf);&lt;br /&gt;                   /*a message was received so send a confirmation */&lt;br /&gt;                   strcpy(buf,"OK");&lt;br /&gt;                   returnStatus = sendto(udpSocket, buf, strlen(buf)+1,0,(struct sockaddr_in*)&amp;amp;udpClient,sizeof(udpClient));&lt;br /&gt;                   if (returnStatus == -1){&lt;br /&gt;                       fprintf(stderr, "Could not send confirmation!\n");&lt;br /&gt;                   }&lt;br /&gt;                   else {&lt;br /&gt;                       printf("Confirmation sent.\n");&lt;br /&gt;                   }&lt;br /&gt;               }&lt;br /&gt;           }&lt;br /&gt;           /*cleanup*/&lt;br /&gt;           close(udpSocket);&lt;br /&gt;           return 0;&lt;br /&gt;       }       &lt;/td&gt;       &lt;td width="50%"&gt;         &lt;b&gt;int recvfrom(int s, void* buf, int len, unsigned flags, struct sockaddr* from, int* fromlen);&lt;br /&gt;     &lt;br /&gt;       &lt;i&gt;s:&lt;/i&gt; the socket to receive the datagram from&lt;br /&gt;       &lt;i&gt;buf:&lt;/i&gt; the buffer pointer to start receiving the datagram into&lt;br /&gt;       &lt;i&gt;len:&lt;/i&gt; the maximum length  in bytes of the receiving buffer buf&lt;br /&gt;       &lt;i&gt;flags:&lt;/i&gt; option flag. use 0.&lt;br /&gt;       &lt;i&gt;from:&lt;/i&gt; &amp;amp;udpClient (client address structure)&lt;br /&gt;       &lt;i&gt;fromlen:&lt;/i&gt; maximum length in bytes-&gt;length of udpClient. Note that the integer  that this pointer points to must be initialized to the maximum size of the receiving address structure &lt;i&gt;from&lt;/i&gt;, prior to calling the function.&lt;br /&gt;     &lt;br /&gt;       int sendto(int s, const void* msg, int len, unsigned flags, const struct sockaddr* to,int tolen);&lt;br /&gt;     &lt;br /&gt;       &lt;i&gt;s:&lt;/i&gt; the socket to send the datagram to&lt;br /&gt;       &lt;i&gt;msg:&lt;/i&gt; a pointer to the buffer holding the datagram message that you wish to send.&lt;br /&gt;       &lt;i&gt;len:&lt;/i&gt; the length, in bytes, of the datagram that starts at the pointer given my msg&lt;br /&gt;       &lt;i&gt;flags:&lt;/i&gt; use 0.&lt;br /&gt;       &lt;i&gt;to:&lt;/i&gt; a pointer to a generic socket address that you have established. This is the address of the recipient of the datagram.&lt;br /&gt;       &lt;i&gt;tolen:&lt;/i&gt; the length of the address argument to.&lt;br /&gt;     &lt;br /&gt;     &lt;br /&gt;       &lt;/b&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-9110908014481711567?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/9110908014481711567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=9110908014481711567' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/9110908014481711567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/9110908014481711567'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2009/03/ol-padding-left-3em-font-weight-bold-ol.html' title=''/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-4835124516775900297</id><published>2009-03-10T22:32:00.000-07:00</published><updated>2009-03-10T22:39:40.490-07:00</updated><title type='text'>TFTPD</title><content type='html'>At last, my tftpd is working. I am using Ubuntu Hardy, and has spent hours to get tftpd working either using inetd.d  or xinetd. &lt;br /&gt;The solution is to forget using xinetd or inetd.d. Comment out tftp in /etc/inetd.conf. Delete tftp in /etc/xinetd.d. So that neither inetd nor xinetd are initiating your tftpd. &lt;br /&gt;&lt;br /&gt;I installed tftpd-hpa. Edit /etc/default/tftpd-hpa&lt;br /&gt;&lt;br /&gt;RUN_DAEMON="yes"&lt;br /&gt;OPTIONS="-l -s /tftpboot"&lt;br /&gt;&lt;br /&gt;start it using sudo /etc/init.d/tftpd-hpa restart&lt;br /&gt;&lt;br /&gt;that's it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-4835124516775900297?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/4835124516775900297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=4835124516775900297' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/4835124516775900297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/4835124516775900297'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2009/03/tftpd.html' title='TFTPD'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-6415270351399644000</id><published>2008-11-04T20:01:00.000-08:00</published><updated>2009-03-10T03:43:43.346-07:00</updated><title type='text'>Can't wait!</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_PZMYZUEkoJI/SREbYbbLDsI/AAAAAAAAAJo/xvAENjXPt7Q/s1600-h/japwan.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5265019545865359042" style="margin: 0px 10px 10px 0px; float: left; width: 300px; height: 255px;" alt="" src="http://4.bp.blogspot.com/_PZMYZUEkoJI/SREbYbbLDsI/AAAAAAAAAJo/xvAENjXPt7Q/s400/japwan.JPG" 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/7034797-6415270351399644000?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/6415270351399644000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=6415270351399644000' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/6415270351399644000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/6415270351399644000'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2008/11/cant-wait-no-more.html' title='Can&apos;t wait!'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_PZMYZUEkoJI/SREbYbbLDsI/AAAAAAAAAJo/xvAENjXPt7Q/s72-c/japwan.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-6614496358102492964</id><published>2008-10-04T22:33:00.000-07:00</published><updated>2009-03-10T03:44:25.322-07:00</updated><title type='text'>Birthday's Blue</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_PZMYZUEkoJI/SOhRzBcC25I/AAAAAAAAAJY/ubHjAA9icJs/s1600-h/P1010148.JPG"&gt;&lt;img src="http://1.bp.blogspot.com/_PZMYZUEkoJI/SOhRzBcC25I/AAAAAAAAAJY/ubHjAA9icJs/s320/P1010148.JPG" alt="" style="margin: 0pt 0pt 10px 10px; clear: both; float: left;" border="0" /&gt;&lt;/a&gt; &lt;div style="clear: both; text-align: right;"&gt;&lt;a href="http://picasa.google.com/blogger/" target="ext"&gt;&lt;img src="http://photos1.blogger.com/pbp.gif" alt="Posted by Picasa" style="border: 0px none ; padding: 0px; background: transparent none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="middle" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-6614496358102492964?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/6614496358102492964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=6614496358102492964' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/6614496358102492964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/6614496358102492964'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2008/10/birthdays-blue_04.html' title='Birthday&apos;s Blue'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_PZMYZUEkoJI/SOhRzBcC25I/AAAAAAAAAJY/ubHjAA9icJs/s72-c/P1010148.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-2260926094794948654</id><published>2008-10-01T01:55:00.000-07:00</published><updated>2008-10-01T02:00:46.042-07:00</updated><title type='text'>Who's laughing</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_PZMYZUEkoJI/SOM8L-eobKI/AAAAAAAAAHk/b3tuBlcliXo/s1600-h/laugh.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_PZMYZUEkoJI/SOM8L-eobKI/AAAAAAAAAHk/b3tuBlcliXo/s400/laugh.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5252107766891834530" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-2260926094794948654?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/2260926094794948654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=2260926094794948654' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2260926094794948654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2260926094794948654'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2008/10/whos-laughing.html' title='Who&apos;s laughing'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_PZMYZUEkoJI/SOM8L-eobKI/AAAAAAAAAHk/b3tuBlcliXo/s72-c/laugh.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-3910200163505583827</id><published>2008-09-07T00:24:00.000-07:00</published><updated>2008-09-07T00:28:40.790-07:00</updated><title type='text'>Internet Explorer Under Linux</title><content type='html'>But why? You may ask. Well, I have an IP webcam (dlink DCS-950G), and its web interface can only be accessed using IE, because it is using dlink active-x. The only way to access it is using IE running on WINE. You can download the packages from the following site. &lt;br /&gt;&lt;br /&gt;http://www.tatanka.com.br/ies4linux/page/Main_Page&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-3910200163505583827?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/3910200163505583827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=3910200163505583827' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/3910200163505583827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/3910200163505583827'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2008/09/internet-explorer-under-linux.html' title='Internet Explorer Under Linux'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-2163471131040797539</id><published>2008-09-02T06:22:00.000-07:00</published><updated>2009-03-10T03:42:47.273-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web 2.0'/><title type='text'>Web 2.0</title><content type='html'>Web 2.0. It's revolution in the way we develop web sites. Web 2.0 involves many things, javascript, AJAX, Toolkits (DOMO, YUI,etc), CSS,XML, SOAP, Web Services, Mashups, to name a few. It's a very confusing. So...let's dig deeper. Start with 'philosophical' approach.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mashups&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object height="280" width="380"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ZRcP2CZ8DS8&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/ZRcP2CZ8DS8&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="280" width="380"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Web Services&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object height="280" width="380"&gt;&lt;param name="movie" value="http://www.youtube.com/v/OqnZjLMWjXM&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/OqnZjLMWjXM&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="280" width="380"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-2163471131040797539?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/2163471131040797539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=2163471131040797539' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2163471131040797539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/2163471131040797539'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2008/09/web-20-what-heck-is-that.html' title='Web 2.0'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-7108224755831070</id><published>2008-08-22T20:52:00.000-07:00</published><updated>2008-08-23T01:36:44.413-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Routing'/><title type='text'>How To Add Permanent Routes in Linux and Windows</title><content type='html'>If your machine comes with multiple network cards, you may have to play around with your routing table.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;For Windows&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;route add -p 101.101.101.0 mask 255.255.255.0 101.101.101.254 metric 3&lt;/span&gt;&lt;br /&gt;The command will route network address of 101.101.101.0 to gateway 101.101.101.254. The integer that comes after 'metric' denotes the level of priority.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;For Linux&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Create a file in /etc/network/if-up.d, named it as static-routes. The file should be executable (chmod 755). The content of the file:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;#!/bin/bash&lt;br /&gt;#set static routes&lt;br /&gt;#&lt;br /&gt;/sbin/route add -net 101.101.101.0 netmask 255.255.255.0 gw 101.101.101.254&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-7108224755831070?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/7108224755831070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=7108224755831070' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/7108224755831070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/7108224755831070'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2008/08/how-to-add-permanent-routes-in-linux.html' title='How To Add Permanent Routes in Linux and Windows'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7034797.post-3395071679890720976</id><published>2008-08-19T21:46:00.000-07:00</published><updated>2008-08-22T09:17:18.827-07:00</updated><title type='text'>Ashokan Farewell</title><content type='html'>My version of Jay Ungar's Ashokan Farewell.&lt;br /&gt; &lt;br /&gt;&lt;object width="380" height="280"&gt;&lt;param name="movie" value="http://www.youtube.com/v/-hq8sasWD4A&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="false"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/-hq8sasWD4A&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="380" height="280"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7034797-3395071679890720976?l=juniarto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juniarto.blogspot.com/feeds/3395071679890720976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7034797&amp;postID=3395071679890720976' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/3395071679890720976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7034797/posts/default/3395071679890720976'/><link rel='alternate' type='text/html' href='http://juniarto.blogspot.com/2008/08/ashokan-farewell.html' title='Ashokan Farewell'/><author><name>Juniarto Halayudha</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_PZMYZUEkoJI/SKgMXUSgreI/AAAAAAAAAEQ/UAqQgiohBvg/S220/jun_small.jpg'/></author><thr:total>0</thr:total></entry></feed>
