Hướng dẫn cài đặt Sun Java trên Debian 6 Squeeze

Khi cài Aptana Studio 3 trên Debian 6, tôi có gặp một số lỗi.
Nguyên nhân là: ở chế độ mặc định, Debian chỉ cài Java 1.5. Sau khi googling tôi tìm được hướng dẫn cài đặt Sun Java 6.
1, Đăng nhập với acc root, thêm dòng sau vào file /etc/apt/source.list
deb http://ftp.us.debian.org/debian/ squeeze main non-free
2, Cập nhật
#apt-get update
3, Cài đặt
#apt-get install sun-java6-jdk

4, Sau khi cài đặt xong, kiểm tra phiên bản Java
#java -version
Nếu vẫn là 1.5. Bạn cần chạy thêm câu lệnh sau:
#update-alternatives –config
chọn java-6-sun

Advertisements

Các lệnh để kiểm tra RAM trong Solaris 10

1, Kiểm tra tổng số RAM được cài trong máy:

#prtconf | grep “Memory”

2, Kiểm tra các ứng dụng đang chạy chiếm bao nhiêu RAM:

#prstat -Z

Goodluck

JBoss – JasperException in JSP using generics and ‘for each’

JBoss 4.0.4 throws the following exception while using generics in JSP even if java version is 1.5 or greater

Syntax error, parameterized types are only available if source level is 5.0
Syntax error, ‘for each’ statements are only available if source level is 5.0

The workaround for this issue is to add the following XML configuration to
${jboss.home}/server/default/deploy/jbossweb-tomcat55.sar/conf/web.xml

Add

compilerSourceVM
1.5

compilerTargetVM
1.5

inside tag with jsp inside it.
(Note that there are many servlet tags in this web.xml, so be careful)

Hướng dẫn copy một bảng từ CSDL này sang CSDL khác

Trong khi lập trình, đôi khi bạn muốn copy cả cấu trúc bảng và dữ liệu từ database này sang database khác trong MSSQL. Ví dụ: từ db1 sang db2, cú pháp như sau:
INSERT INTO db2.tblABC( *fieldlist* )
SELECT *fieldlist* FROM db1.tblABC
Nếu bạn chỉ muốn copy cấu trúc bảng, mà không muốn copy dữ liệu, bạn thêm dòng sau vào:
WHERE 1=0

Ngôn ngữ lập trình là gì?

Sửa lỗi Nginx: 24: Too Many Open Files Error

Tuần vừa rồi, Khi máy chủ chạy Ngix bị lỗi do máy chủ của tôi hosting quá nhiều website( vài trăm site).

Nginx bị lỗi, các website không truy cập được. Khi vào xem log thì thấy thông báo sau:

2010/04/16 13:24:16 [crit] 21974#0: *3188937 open() “/usr/local/nginx/html/50x.html” failed (24: Too many open files), client: 88.x.y.z, server: example.com, request: “GET /file/images/background.jpg HTTP/1.1”, upstream: “http://10.8.4.227:81//file/images/background.jpg”, host: “example.com”

Nguyên nhân là do Ngix mở quá nhiều file khi chạy.

Trong Linxux, cần phải tăng số file giới hạn được mở cho hệ điều hành.

Bạn có thể làm như  sau:

su – nginx

Để xem số softfile và hard file hệ điều hành cho phép mở, bạn gõ lệnh sau:
ulimit -Hn
ulimit -Sn

Có 2 cách sau để chỉnh sửa lỗi:
Cách 1 Tăng số file giới hạn ở mức hệ điều hành

Your operating system set limits on how many files can be opened by nginx server. You can easily fix this problem by setting or increasing system open file limits under Linux. Edit file /etc/sysctl.conf, enter:

Hệ điều hành thường thiết đặt số file được mở bởi nginx. Bạn có thể tăng con số này lên bằng cách:
# vi /etc/sysctl.conf
Thêm vào dòng sau:
fs.file-max = 70000
Lưu file lại.  Sửa  file /etc/security/limits.conf:
# vi /etc/security/limits.conf

Đặt lại soft và hard limt cho người dùng chạy nginx server:

nginx soft nofile 10000
nginx hard nofile 30000

Lưu file. Sau đó chạy lệnh sau để thay đổi:
# sysctl -p

Cách 2 Thay đổi tham số trong Nginx config

Nginx có tham số là worker_rlimit_nofile cho phép tự thay đổi số file cần mở trong ở mức tiến trình. Để cấu hình số lượng file tối đa được mở. Biên tập file nginx.conf:

# vi /usr/local/nginx/conf/nginx.conf
Thêm dòng sau:

# set open fd limit to 30000
worker_rlimit_nofile 30000;

Lưu file, reload lại nginx webserver
# /usr/local/nginx/sbin/nginx -t && /usr/local/nginx/sbin/nginx -s reload
# su – nginx

Kiểm tra các thông số
$ ulimit -Hn
$ ulimit -Sn

:

30000
10000

 

Nếu các cách trên vẫn không được. Bạn vào file khởi động: /etc/init.d/nginx

thêm vào các dòng sau:

ulimit -Hn 30000

ulimit -Sn 10000

Chúc may mắn.

Zen of Python

Also known as PEP 20, the guiding principles for Python’s design.

>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

For some examples of good Python style, see this Stack Overflow question or these slides from a Python user group.

Giới thiệu cơ bản về Decorator trong Python (Phần 1)

Trong ngôn ngữ Python, lập trình viên có thể làm được những thứ rất hay ho với “Functions”. Thực tế, “functions” là first-class objects, có nghĩa là bạn có thể làm gì với kiểu strings, integers, … thì bạn có thể làm được như vậy với Functions. Ví dụ, bạn có thể gán một Functions với một biến:
>>> def square(n):
... return n * n
>>> square(4)
16
>>> alias = square
>>> alias(4)
16

Sức mạnh thực sự của Functions đến từ việc Function được coi như first-class object. Như vậy một Functions có thể chập nhận một function khác làm biến đầu vào, và trả ra một function. Ví dụ, một hàm có sẵn trong Python là hàm map, bạn có thể truyền vào một list
và trả ra một list mới bằng cách gọi một hàm khác tương tác với từng phần tử trong list:
>>> numbers = [1, 2, 3, 4, 5]
>>> map(square, numbers)
[1, 4, 9, 16, 25]

Khi một function được truyền vào và gọi đến một function khác được gọi là Higher-order_function.
Ta có thể dùng Higher-order_function để thay đổi hành vi của Function khác.

“Decorators” được áp dụng từ Python 2.4 dùng để đóng gói Function (Higher-order-function). Cách thông thường để áp dụng Higher-order-function trước khi sử dụng Decorators như sau:
>>> class WhatFor(object):
... def it(cls):
... print 'work with %s' % cls
... it = classmethod(it)
... def uncommon():
... print 'I could be a global function'
... uncommon = staticmethod(uncommon)
...

Cú pháp như trên sẽ trở nên khó đọc khi mã nguồn phức tạp. Vì vậy, Decorators được sử dụng giúp cú pháp trong sáng hơn:
>>> class WhatFor(object):
... @classmethod
... def it(cls):
... print 'work with %s' % cls
... @staticmethod
... def uncommon():
... print 'I could be a global function'
...

>>> this_is = WhatFor()
>>> this_is.it()
work with
>>> this_is.uncommon()
I could be a global function

(Tôi sẽ trình bày tiếp trong phần sau …)

Tham khảo:
1, PythonDecoratorLibrary
2,Understanding Python decorators
3, Class decorators vs function decorators

Cách giảm kích thước của file LDF trong MSSQL 2008

Tôi gặp file LDF trong MSSQL 2008 kích cỡ tăng lên quá lớn. Tôi muốn giảm kích thước nó đi. Sau khi google, tôi đã tìm được bằng cách chuyển mode của database từ FULL sang SIMPLE, như sau:
ALTER DATABASE myDatabase SET RECOVERY SIMPLE
DBCC SHRINKDATABASE (myDatabase , 5)

Hướng dẫn cài đặt Mysql Workbench 5.2.22 trên Debian Squeeze 6

Các bước thực hiện như sau:
1, Download từ ftp://ftp.gwdg.de/pub/misc/mysql/Downloads/MySQLGUITools/mysql-workbench-oss-5.2.22.tar.gz
2, Giải nén
3, Chạy autogen
4, make
5, make install

Tuy nhiên, trong quá trình cài đặt, tôi gặp khá nhiều lỗi. Lên google tìm được bài viết khá đầy đủ, tuy có một số phần không đúng với phiên bản 5.2.22. Tôi dịch lại và bổ xung thêm cho đầy đủ.