Từng bước để trở thành một lập trình viên giỏi

VinaCode

Bài viết được dịch từ blog Simple Programmer

Lời bàn của Vinacode:

Như trong bài viết “Tự học lập trình trong 10 năm” của Giáo sư Norvig thì chúng ta đã biết rằng để trở nên tinh thông bất cứ lĩnh vực gì thì ai cũng phải cần tối thiểu 10,000 giờ tập luyện (tương đương khoảng 10 năm). Nhưng bạn có thể nói rằng điều đó chẳng cần kết quả nghiên cứu của các nhà khoa học thì bạn cũng biết. Vấn đề ở đây là 10 năm là một quãng thời gian rất dài, và với 10 năm đó thì có thể đã “vật đổi sao dời” hay người còn kẻ mất. Điều quan trọng là làm sao duy trì được động lực làm việc và học tập trong một quãng thời gian dài như vậy?

Đúng vậy, để có thể duy trì được động lực trong một…

View original post 5,439 more words

Vì sao người lương thiện cả đời gặp nỗi buồn và trắc trở?

Thanh Niên Tự Do

20140410-005548.jpg

Tôi đã tìm một người thầy thông thái và đạo hạnh xin chỉ bảo:
-Vì sao những người lương thiện như con lại thường xuyên cảm thấy khổ, mà những người ác lại vẫn sống tốt như vậy

Thầy hiền hòa nhìn tôi trả lời:
– Nếu một người trong lòng cảm thấy khổ, điều đó nói lên rằng trong tâm người này có tồn tại một điều ác tương ứng. Nếu một người trong nội tâm không có điều ác nào, như vậy, người này sẽ không có cảm giác thống khổ. Vì thế, căn cứ theo đạo lý này, con thường cảm thấy khổ, nghĩa là nội tâm của con có tồn tại điều ác, con không phải là một người lương thiện thật sự. Mà những người con cho rằng là người ác, lại chưa hẳn là người thật sự ác.

Một người có thể vui vẻ…

View original post 1,360 more words

MySql explain

+----------+------+---------------+------+---------+------+------+------------+
| table | type | possible_keys | key | key_len | ref | rows | Extra |
+----------+------+---------------+------+---------+------+------+------------+
| employee | ALL | NULL | NULL | NULL | NULL | 2 | where used |
+----------+------+---------------+------+---------+------+------+------------+

So what are all these things? http://dev.mysql.com/doc/refman/4.1/en/explain-output.html

-table shows us which table the output is about (for when you join many tables in the query)
-type is an important one - it tells us which type of join is being used. From best to worst the types are: system, const, eq_ref, ref, range, index, all
-possible_keys Shows which possible indexes apply to this table
-key And which one is actually used
-key_len give us the length of the key used. The shorter that better.
-ref Tells us which column, or a constant, is used
-rows Number of rows mysql believes it must examine to get the data
extra Extra info - the bad ones to see here are "using temporary" and "using filesort"

mysql> explain extended select mail from users where uid in (168, 170);
+----+-------------+-------+-------+---------------+---------+---------+------+------+----------+-------------+
| id | select_type | table | type  | possible_keys | key     | key_len | ref  | rows | filtered | Extra       |
+----+-------------+-------+-------+---------------+---------+---------+------+------+----------+-------------+
|  1 | SIMPLE      | users | range | PRIMARY       | PRIMARY | 4       | NULL |    2 |   100.00 | Using where |
+----+-------------+-------+-------+---------------+---------+---------+------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

mysql> show warnings \G
*************************** 1. row ***************************
  Level: Note
   Code: 1003
Message: select `mio1`.`users`.`mail` AS `mail` from `mio1`.`users` where (`mio1`.`users`.`uid` in (168,170))
1 row in set (0.00 sec)

MySQL Select Random Row Fast

<?php

//CODE FROM WWW.GREGGDEV.COM

function random_row($table, $column) {

$max_sql = “SELECT max(” . $column . “)

AS max_id

FROM ” . $table;

$max_row = mysql_fetch_array(mysql_query($max_sql));

$random_number = mt_rand(1, $max_row[‘max_id’]);

$random_sql = “SELECT * FROM ” . $table . ”

WHERE ” . $column . ” >= ” . $random_number . ”

ORDER BY ” . $column . ” ASC

LIMIT 1″;

$random_row = mysql_fetch_row(mysql_query($random_sql));

if (!is_array($random_row)) {

$random_sql = “SELECT * FROM ” . $table . ”

WHERE ” . $column . ” < ” . $random_number . ”

ORDER BY ” . $column . ” DESC

LIMIT 1″;

$random_row = mysql_fetch_row(mysql_query($random_sql));

}

return $random_row;

}

//USAGE

echo ‘<pre>’;

print_r(random_row(‘YOUR_TABLE’, ‘YOUR_COLUMN’));

echo ‘</pre>’;

?>

Downgrade to Firefox 3.6 on Ubuntu 11.04 Natty

We have a requirement in the office to downgrade to Firefox 3.6 on some test machines running Ubuntu Natty (11.04). To do this you can pin the firefox and firefox-branding packages to older packages from the Ubuntu Maverick (10.10) release.

Step 1: Edit your software sources to add Maverick

  1. Open your sources.list file:
    sudo gedit /etc/apt/sources.list
  2. Add the folowing three lines:
    # Maverick, used for firefox and firefox-branding
    deb http://ftp.iinet.net.au/pub/ubuntu/ maverick main
    deb http://ftp.iinet.net.au/pub/ubuntu/ maverick-updates main
  3. Save and close the file

Step 2: Pin the packages firefox and firefox-branding

  1. Create the pin file for firefox:
    sudo gedit /etc/apt/preferences.d/firefox
  2. Add the following:
    Package: firefox
    Pin: release n=natty
    Pin-Priority: -10
    
    Package: firefox
    Pin: release n=maverick
    Pin-Priority: 900
  3. Save and close the file.
  4. Create the pin file for firefox-branding:
    sudo gedit /etc/apt/preferences.d/firefox-branding
  5. Add the following:
    Package: firefox-branding
    Pin: release n=natty
    Pin-Priority: -10
    
    Package: firefox-branding
    Pin: release n=maverick
    Pin-Priority: 900
  6. Save and close the file.

Step 3: Check your apt policy to make sure it worked

  1. Update your apt cache:
    sudo apt-get update
  2. Show the apt policy for firefox:
    sudo apt-cache policy firefox

    Sample output:

    sudo apt-cache policy firefox
    firefox:
      Installed: 5.0+build1+nobinonly-0ubuntu0.11.04.2
      Candidate: 3.6.18+build2+nobinonly-0ubuntu0.10.10.1
      Package pin: 3.6.18+build2+nobinonly-0ubuntu0.10.10.1
      Version table:
     *** 5.0+build1+nobinonly-0ubuntu0.11.04.2 900
            500 http://ftp.iinet.net.au/pub/ubuntu/ natty-updates/main i386 Packages
            500 http://ftp.iinet.net.au/pub/ubuntu/ natty-security/main i386 Packages
            100 /var/lib/dpkg/status
         4.0+nobinonly-0ubuntu3 900
            500 http://ftp.iinet.net.au/pub/ubuntu/ natty/main i386 Packages
         3.6.18+build2+nobinonly-0ubuntu0.10.10.1 900
            500 http://ftp.iinet.net.au/pub/ubuntu/ maverick-updates/main i386 Packages
         3.6.10+build1+nobinonly-0ubuntu3 900
            500 http://ftp.iinet.net.au/pub/ubuntu/ maverick/main i386 Packages

    The line you are most interested in is “Candidate”.
    This indicates the package that apt ranks as the installation candidate.

  3. Repeat this check for firefox-branding
    sudo apt-cache policy firefox-branding

Step 4: Install firefox 3.6

  1. Remove firefox 5.x:
    sudo apt-get remove firefox
  2. Install firefox 3.6:
    sudo apt-get install firefox

And you’re done. Enjoy your outdated version of Firefox!

Install syslog-ng 3.3 on CentOS 5.5

Download from Balabit: syslog-ng_3.3.0bet1.tar.gz and unpack.
go to base dir, and ./configure

There may be prereqs on your system. I had to do the following:

Install eventlog.

Download these rpms and install. :

rpm -Uvh kernel-headers-2.6.18-238.el5.i386.rpm
rpm -Uvh glibc-headers-2.5-58.i386.rpm
rpm -Uvh glibc-devel-2.5-58.i386.rpm
rpm -Uvh gcc-4.1.2-50.el5.i386.rpm
rpm -Uvh zlib-1.2.3-4.el5.i386.rpm
rpm -ivh zlib-devel-1.2.3-4.el5.i386.rpm
rpm -Uvh libffi-3.0.5-1.el5.kb.i386.rpm
rpm -Uvh libffi-devel-3.0.5-1.el5.kb.i386.rpm

Then install glib
wget ftp://ftp.gtk.org/pub/glib/2.29/glib-2.29.4.tar.bz2
tar jxvf glib-2.29.4.tar.bz2
cd glib-2.29.4
./configure
make
make install
done with installing glib prerequisite

Before install syslog-ng 3.3 beta, do
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
and yum install openssl-devel
or

rpm -Uvh e2fsprogs-devel-1.39-23.el5_5.1.i386.rpm
rpm -Uvh keyutils-libs-devel-1.2-1.el5.i386.rpm
rpm -Uvh libselinux-devel-1.33.4-5.7.el5.i386.rpm
rpm -Uvh libsepol-devel-1.15.2-3.el5.i386.rpm
rpm -Uvh libselinux-devel-1.33.4-5.7.el5.i386.rpm
rpm -Uvh krb5-devel-1.6.1-55.el5.i386.rpm
rpm -Uvh openssl-devel-0.9.8e-12.el5_5.7.i386.rpm

also:
cd eventlog-0.2.12/
./configure
make
make install
then enter syslog-ng dir and ./configure, then make, make install
Note: To install with PCRE enabled, must first yum install pcre-devel
then use ./configure –enable-pcre
After that, some more setup:
mkdir /usr/local/var
cd /root/syslog-ng/syslog-ng-3.3.0beta1/contrib/
mkdir /etc/syslog-ng/
cp rhel-packaging/syslog-ng.init /etc/init.d/syslog-ng
cp rhel-packaging/syslog-ng.conf /etc/syslog-ng
cp rhel-packaging/syslog-ng.logrotate /etc/logrotate.d/syslog-ng
chmod 755 /etc/init.d/syslog-ng
vi /etc/init.d/syslog-ng
Then change the binary to “/usr/local/sbin/syslog-ng”
Then start the service:
chkconfig syslog off

chkconfig syslog-ng on

service syslog stop

service syslog-ng start

Then edit /usr/local/etc/syslog-ng.conf
add options { threaded(yes); }; to the top, and any other configs.

service syslog-ng restart