<?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:blogger='http://schemas.google.com/blogger/2008' 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-21920679</id><updated>2026-07-23T23:01:33.937-07:00</updated><category term="kernel"/><category term="gcc"/><category term="u-boot"/><category term="driver touchscreen"/><category term="linux"/><category term="mutt"/><category term="udev"/><category term="Perl"/><category term="cms"/><category term="email"/><category term="ethernet"/><category term="hack"/><category term="interrupt"/><category term="linker"/><category term="network"/><category term="nginx daemontools"/><category term="perl regex"/><category term="root"/><category term="skbuff"/><category term="ssh tunneling proxy"/><category term="submission"/><category term="suid"/><category term="toolchain"/><category term="toolchain gcc"/><category term="toolchain linker"/><category term="tools perl"/><category term="trick"/><category term="vim"/><category term="website"/><category term="website nginx ec2"/><title type='text'>*nix System and Programming</title><subtitle type='html'>A blog about the system and programming of *nix environment.&#xa;&#xa;It covers:&#xa;* Scripts that I am familiar with include shell scripts, Perl, Python, Tcl/Tk, and PHP.&#xa;&#xa;* Utilities includes sed, grep, awk, cat, tac, ...&#xa;&#xa;* Kernel development and optimization, device driver&#xa;&#xa;* Networking&#xa;&#xa;* Toolchain, build environment</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nixscripts.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>52</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-21920679.post-5317852195115531619</id><published>2011-08-13T12:27:00.000-07:00</published><updated>2011-08-13T12:27:52.007-07:00</updated><title type='text'>SSH Tunnelling + SOCKS Proxy browsing</title><summary type="text">This is the simplest way to access content not available in your country. For example, if you want to access hulu.com from Canada, you may use this method.



First of all, you need a server running Linux in the US. &amp;nbsp;You may either have a dedicated server or virtual dedicated server, or your home computer in the US.



From your client side, you need to issue &#39;ssh -D 9999 user@your_server_ip</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/5317852195115531619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/5317852195115531619'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2011/08/ssh-tunnelling-socks-proxy-browsing.html' title='SSH Tunnelling + SOCKS Proxy browsing'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-5130573678036339104</id><published>2011-07-27T16:40:00.000-07:00</published><updated>2011-07-27T16:40:11.928-07:00</updated><title type='text'>tmux vs. screen</title><summary type="text">I am an experienced GNU screen users for many years.&amp;nbsp; Recently, I learned to use tmux and found it is a great replacement of screen.

Tmux is originally developed in OpenBSD and was ported to many systems.

The configuration is easy with many configurable options. Here is my startup script of tmux.

#!/bin/bash</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/5130573678036339104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/5130573678036339104'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2011/07/tmux-vs-screen.html' title='tmux vs. screen'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-3413803348669280766</id><published>2011-05-09T22:58:00.000-07:00</published><updated>2011-05-09T22:58:28.877-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="nginx daemontools"/><title type='text'>nginx and daemontools</title><summary type="text">To use nginx with daemontools, the following configuration variable has to be set in your nginx.conf.

daemon off;

The following is the simple /service/nginx/run script to use with daemontools.

#!/bin/sh

exec fghack /usr/sbin/nginx

To get your php-cgi working with nginx, you&#39;d use spawn-fcgi, which is a tool spinned-off from lighttpd.

The /service/php-cgi/run script

#!/bin/sh

</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/3413803348669280766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/3413803348669280766'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2011/05/nginx-and-daemontools.html' title='nginx and daemontools'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-4080557363357325758</id><published>2010-12-14T23:13:00.000-08:00</published><updated>2010-12-14T23:13:49.577-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ssh tunneling proxy"/><title type='text'>ssh tunneling is powerful</title><summary type="text">To work from home, we have to use a &quot;svi&quot; service, with dynamic changing password and ssh to a dedicated company server.  It&#39;s a bit inconvenience at the beginning, until I found the power of ssh tunneling.


In short, if you have ssh connection, you may setup localforward and then your ssh server is working like a proxy to access the other network.


As we have proxy server to access company </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/4080557363357325758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/4080557363357325758'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2010/12/ssh-tunneling-is-powerful.html' title='ssh tunneling is powerful'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-364425861997126564</id><published>2010-12-12T22:51:00.000-08:00</published><updated>2010-12-12T22:51:55.459-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="website nginx ec2"/><title type='text'>web hosting with nginx and Amazon EC2</title><summary type="text">I am doing some test recently on using Amazon&#39;s EC2 for website hosting.  The EC2 is a cloud service offered by Amazon.  You have total control, ie, root access to the virtual server hosted by Amazon.  Their current promotion can give you free use for the first year.  That&#39;s why I decided to do a trial. Even after the 1st year, if you buy reserved instance from Amazon, it is not expensive </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/364425861997126564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/364425861997126564'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2010/12/web-hosting-with-nginx-and-amazon-ec2.html' title='web hosting with nginx and Amazon EC2'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-2198463676030695007</id><published>2010-11-09T16:36:00.000-08:00</published><updated>2010-11-09T16:36:42.167-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="tools perl"/><title type='text'>procmail, Catalyst, and DBIx</title><summary type="text">Stuff I am working on recently.

Procmail

Learned to use procmail to filter my emails. I used procmail and wrote some rules. My recent activity was to create a perl script to do special action once an email is received.  This can be greatly helpful to create trigger system for our infrastructure.

A great glue for various tools.

Catalyst

I am learning Catalyst, the MVC based Perl framework for</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/2198463676030695007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/2198463676030695007'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2010/11/procmail-catalyst-and-dbix.html' title='procmail, Catalyst, and DBIx'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-8550442568043951924</id><published>2010-10-22T21:31:00.000-07:00</published><updated>2010-10-22T21:31:44.349-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="perl regex"/><title type='text'>regex</title><summary type="text">I had an interesting regular expression problem this week.

The problem we are trying to solve is simple: to find out the root directory for a software repository.

The assumption of the problem is that all the repository contains a directory like &quot;foo&quot; or &quot;bbb&quot;. So, given a full path, we need to find out the parent directory of &quot;foo&quot;, or &quot;bbb&quot;.  For example, the given directory is &quot;/home/myhome/</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/8550442568043951924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/8550442568043951924'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2010/10/regex.html' title='regex'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-1890150358148814085</id><published>2010-09-22T14:50:00.000-07:00</published><updated>2010-09-22T14:50:57.969-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="kernel"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="submission"/><title type='text'>Linux Kernel Submission</title><summary type="text">I think it is time to summarize my experience in the submission of bcmring architecture into the linux kernel.

You may find my contribution to the kernel 2.6.32 in the following page. Noted Broadcom ranked No. 4 by lines of changes. Mostly by me. :-)
Linux Kernel Development Statistics

1) subscribe to the arm-linux-kernel mailing list
2) send out your first email asking about other people&#39;s </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/1890150358148814085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/1890150358148814085'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2010/09/linux-kernel-submission.html' title='Linux Kernel Submission'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-5994743047422376066</id><published>2010-09-02T11:35:00.000-07:00</published><updated>2010-09-02T11:35:14.044-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gcc"/><title type='text'>badly punctuated parameter list</title><summary type="text">I&#39;ve encountered some strange problem like

&quot;badly punctuated parameter list&quot; in macro definition for C when I was compiling perl modules on Solaris platform.  After my research, I found that it is due to ancient gcc, like 2.81 can&#39;t process the following macro definition.

#define my_snprintf(buffer, len, ...) snprintf(buffer, len, __VA_ARGS__)

You have to change it to a more compatible form </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/5994743047422376066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/5994743047422376066'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2010/09/badly-punctuated-parameter-list.html' title='badly punctuated parameter list'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-9008352515365531094</id><published>2010-07-16T10:45:00.001-07:00</published><updated>2010-07-16T10:45:43.050-07:00</updated><title type='text'>hidden arguments, easter egg, or what?</title><summary type="text">I just learned today that there is a hidden argument of &amp;#39;date&amp;#39; command under Linux.It is &amp;#39;date --iso=seconds&amp;#39;, which is equivalent to &amp;#39;date +%FT%T%z&amp;#39; command.The &amp;#39;--iso=seconds&amp;#39; argument is not recorded in the manual nor usage help.   However, it is not supported in Solaris. So, I fixed a script problem today by replacing the non-standard --iso=seconds argument </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/9008352515365531094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/9008352515365531094'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2010/07/hidden-arguments-easter-egg-or-what.html' title='hidden arguments, easter egg, or what?'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-2689171818734785665</id><published>2010-06-25T10:46:00.001-07:00</published><updated>2010-06-25T10:46:43.549-07:00</updated><title type='text'>coverity</title><summary type="text">I am recently working on the Coverity Prevent product, which is a static source code analysis tool to identify possible bugs in the source code.  The tool is pretty cool, originally developed in Stanford University. It&amp;#39;s gaining a lot of momentum recently with mature products and backed by VC.  Looks like many big companies are jumping onto the board of Coverity.  It&amp;#39;s a promising tool.  </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/2689171818734785665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/2689171818734785665'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2010/06/coverity.html' title='coverity'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-4554177895981282943</id><published>2010-06-18T00:26:00.000-07:00</published><updated>2010-07-06T14:37:17.428-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hack"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="root"/><category scheme="http://www.blogger.com/atom/ns#" term="suid"/><title type='text'>How to hack the Linux box to get root permission</title><summary type="text">You have a Linux box with you, but you have only a normal user account.&amp;nbsp; You want to hack this box and get root permission.&amp;nbsp; Now, you have a solution.

Note. the following procedure works only when you use Grub boot loader. Never tested with Lilo.

1. reboot your machine
2. before boot to Linux, press some key to bring up your boot loader interface
3. press &quot;e&quot; to edit your boot loader </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/4554177895981282943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/4554177895981282943'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2010/06/how-to-hack-linux-box-to-get-root.html' title='How to hack the Linux box to get root permission'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-1588816303021471484</id><published>2010-05-19T21:27:00.000-07:00</published><updated>2010-05-19T21:27:37.669-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="email"/><category scheme="http://www.blogger.com/atom/ns#" term="mutt"/><title type='text'>mutt, fetchmail, procmail, and mini_sendmail</title><summary type="text">In recent days, I&#39;ve managed to setup mutt, together with fetchmail, procmail, and mini_sendmail in my working environment.

Mutt is my favorite MUA, mail user agent, due to it&#39;s simplicity, speed and powerful configuration.
Fetchmail is used to grab mails from pop/imap server and deliver the mails to local directory.
Procmail is used to classify the mails received, based on very flexible regex </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/1588816303021471484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/1588816303021471484'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2010/05/mutt-fetchmail-procmail-and.html' title='mutt, fetchmail, procmail, and mini_sendmail'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-77732088280234709</id><published>2010-04-24T18:34:00.000-07:00</published><updated>2010-04-24T18:34:15.117-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cms"/><category scheme="http://www.blogger.com/atom/ns#" term="website"/><title type='text'>Wordpress vs. Drupal</title><summary type="text">I recently installed wordpress and drupal on my two websites.
Wordpress on http://alrishachen.com
Drupal on http://alrisha.ca

I&#39;d compare those two popular CMS based on my own experience.

* installation. Both are easy to install/deploy on your hosting server.&amp;nbsp; You just need to untar the tarball and setup database, usually MySQL based on the document.&amp;nbsp; Then, you run the install page </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/77732088280234709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/77732088280234709'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2010/04/wordpress-vs-drupal.html' title='Wordpress vs. Drupal'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-897066206329360609</id><published>2010-03-16T22:37:00.000-07:00</published><updated>2010-03-16T22:37:51.546-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linker"/><title type='text'>linking with multiple definition of functions</title><summary type="text">I had fixed a linking problem today.  The problem was caused by multiple definitions of the same function name.  The linker complains about the multiple definitions of the same function.  The solution is to add &quot;-z muldefs&quot; to the LDFLAGS, so that the linker will accept multiple definitions and just link the function it encountered first into the final ELF file.  This maybe dangerous, as your </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/897066206329360609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/897066206329360609'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2010/03/linking-with-multiple-definition-of.html' title='linking with multiple definition of functions'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-9148214659222929386</id><published>2010-03-07T22:35:00.000-08:00</published><updated>2010-03-07T22:35:28.664-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="u-boot"/><title type='text'>u-boot works now</title><summary type="text">I finally get u-boot working on our bcmring platform on Friday.  I had the hunch on Thursday that the ATAG parameters were not set properly that kernel can&#39;t boot.  I used JTAG to examine the memory where the ATAG paramters stored.  By comparing the memory content set by the working boot2 loader and the u-boot, I found that the command line for kernel wasn&#39;t set at all in u-boot.  It turns out to</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/9148214659222929386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/9148214659222929386'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2010/03/u-boot-works-now.html' title='u-boot works now'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-4888817684555931166</id><published>2010-03-04T23:18:00.000-08:00</published><updated>2010-03-04T23:18:06.569-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="kernel"/><category scheme="http://www.blogger.com/atom/ns#" term="u-boot"/><title type='text'>u-boot again</title><summary type="text">I am still working the u-boot project.  After I got the ARM realview ice debugger, my life is easier, but still tough.  I traced the assembly code of Linux kernel and compare the execution of the same kernel booted by both boot2 and u-boot.  As the boot2 can successfully boot the kernel image, I just need to make sure u-boot can get to the same state that u-boot created for the kernel.

I figured</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/4888817684555931166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/4888817684555931166'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2010/03/u-boot-again.html' title='u-boot again'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-6015262144844910330</id><published>2010-02-24T21:38:00.000-08:00</published><updated>2010-02-24T21:38:28.541-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="u-boot"/><title type='text'>u-boot</title><summary type="text">I have been working on u-boot since last week. I need to port u-boot to our bcmring platform.

We have some example from another team of Broadcom to support u-boot on the 2153 platform, which has a similar ARM core with our bcmring platform.

I got the u-boot to build last week. Since this week, I learned to use JTAG to load the u-boot elf file into the memory of the platform after ddr </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/6015262144844910330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/6015262144844910330'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2010/02/u-boot.html' title='u-boot'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-1248743491471700830</id><published>2010-01-13T23:49:00.001-08:00</published><updated>2010-01-13T23:49:04.533-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="udev"/><title type='text'>udev 150</title><summary type="text">I&#39;ve successfully updated udev for our target from 142 to 150 versions.  I&#39;ve added three patches to fix the compile errors.  Those patches are introduced because the kernel header used in our toolchain is older than the latest version, like the inotify_init1 system call is not available in our version of toolchain.  I have to use the inotify_init system call instead.

Anyway, it works in my </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/1248743491471700830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/1248743491471700830'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2010/01/udev-150.html' title='udev 150'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-4210221478201081257</id><published>2010-01-12T22:11:00.001-08:00</published><updated>2010-01-12T22:11:29.168-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="udev"/><title type='text'>udev</title><summary type="text">I&#39;ve got udev working on our platform. It&#39;s initially ported by an intern, but it seemed not working before he left.  The problem was due to the kernel configuration.  Once I sorted out the proper kernel configuration, udevd started properly and it works.  The ota also worked with the udev.  The previous port of udev was udev 142 version, which is rather old.  I am porting the 150 version to our </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/4210221478201081257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/4210221478201081257'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2010/01/udev.html' title='udev'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-3052492142106784528</id><published>2009-12-27T22:44:00.000-08:00</published><updated>2009-12-27T23:11:05.526-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gcc"/><category scheme="http://www.blogger.com/atom/ns#" term="toolchain"/><title type='text'>Toolchain study digest</title><summary type="text">Some information I learned recently about GNU GCC toolchain and related topic from the book &quot;Professional Linux Programming&quot;.  Although I am familiar with most of the content, I&#39;d just record here for a better memory.

* -fPIC (position independent code), used to generate code can be executed anywhere in the kernel, usually used to generate shared library.

* -shared -o libfoo.so, generate shared</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/3052492142106784528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/3052492142106784528'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2009/12/toolchain-study-digest.html' title='Toolchain study digest'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-2895571163131828842</id><published>2009-11-30T10:30:00.000-08:00</published><updated>2009-11-30T10:39:05.130-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mutt"/><title type='text'>Useful Mutt documents and tips</title><summary type="text">I have started to use mutt as my main email client for a couple of months.  It is powerful and convenient, especially for me as I am a lover of terminal programs. 

I&#39;d collect mutt relevant document here.

Training your mutt. http://www.linux.com/archive/articles/58760</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/2895571163131828842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/2895571163131828842'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2009/11/useful-mutt-documents-and-tips.html' title='Useful Mutt documents and tips'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-8767348714105818091</id><published>2009-11-28T20:42:00.000-08:00</published><updated>2009-11-28T20:42:05.489-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="trick"/><category scheme="http://www.blogger.com/atom/ns#" term="vim"/><title type='text'>Vim tricks</title><summary type="text">I&#39;ve read another blog today about Efficient Editing with Vim.  I learned some new tricks as the follows.

   * g + h,j,k,l, to move screen line instead of real line. This can be real useful when you are editing an email with long lines.
   * fx, Fx, go forward/backword to the next occurrence of x.
   * (, ), move to the next sentence or the previous sentence
   * xG, goto the xth line, the same </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/8767348714105818091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/8767348714105818091'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2009/11/vim-tricks.html' title='Vim tricks'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-5504875655049317089</id><published>2008-11-19T00:07:00.000-08:00</published><updated>2008-11-19T00:38:23.725-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="kernel"/><title type='text'>kernel upgrade to 2.6.27 for mips/arm platform</title><summary type="text">I have encountered other interesting issue when I was upgrading the kernel from 2.6.23 to 2.6.27 for our MIPS32 platform.1. the timer, as in 2.6.24 or later, the default MIPS timer has been separated from the old timer code.  For our architecture used the default cp0 comparison based timer, we need to enable the r4k timer to get the timer working.  I spend couple of days to understand this change</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/5504875655049317089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/5504875655049317089'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2008/11/kernel-upgrade-to-2627-for-mipsarm.html' title='kernel upgrade to 2.6.27 for mips/arm platform'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-21920679.post-381158796929358126</id><published>2008-11-18T23:44:00.000-08:00</published><updated>2008-11-19T00:00:43.662-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="driver touchscreen"/><category scheme="http://www.blogger.com/atom/ns#" term="ethernet"/><category scheme="http://www.blogger.com/atom/ns#" term="kernel"/><title type='text'>kernel upgrade to 2.6.27</title><summary type="text">I had just fixed a network driver bug when I upgrade the kernel from 2.6.23 to 2.6.27 for our MIPS platform. It takes couple of weeks.  The original problem appears when the NAPI was used in network driver and I changed the net_poll function accordingly.  Then, I got kernel panic with memory access failure.  After long time debugging, I found that there is some problem when the driver tries to </summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/381158796929358126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21920679/posts/default/381158796929358126'/><link rel='alternate' type='text/html' href='http://nixscripts.blogspot.com/2008/11/kernel-upgrade-to-2627.html' title='kernel upgrade to 2.6.27'/><author><name>Leo Chen</name><uri>http://www.blogger.com/profile/04022076992281022573</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBVoQmYu97qr8ExtxIEztU95pon_VpSgVJqgVSpvNUeQ-rHK_P-h8I22t-ydXNJ_IRhJ3ed0kMPVe5p7LPhF-TbUY5MnQD8S8VSxSWLMGshUSxYlsnQA-PuWf9vTzixo/s220/leo_head.png'/></author></entry></feed>