Python cho người Việt

Python cho người Việt

Entries tagged “python”

Giới thiệu phần mềm Vithon Forum

written by vithon, on Jul 1, 2010 6:49:39 PM.

Nhóm Python Cho Người Việt (PCNV) hân hạnh công bố phần mềm Vithon Forum đến với cộng đồng.

Giới thiệu

Phần mềm Vithon Forum (gọi tắt là VF) là một phần mềm tự do, mã mở, miễn phí với chức năng chính là một diễn đàn thảo luận tương tự như các gói phần mềm phpBB, punBB, pyForum.

VF là một ứng dụng web được viết bằng ngôn ngữ Python theo mô hình WSGI. VF có thể được triển khai với các máy chủ hỗ trợ WSGI hay CGI ví dụ như Apache. VF có thể sử dụng nhiều hệ cơ sở dữ liệu quan hệ như SQLite, MySQL, Oracle.

Tính năng

VF có các tính năng nổi trội sau:

Đơn giản
VF chỉ thực hiện một công việc chính đó là lưu trữ và hiển thị các thảo luận của người dùng một cách tiện lợi nhất. VF không mong muốn trở thành một công cụ tích hợp thư điện tử, lịch cá nhân, danh sách công việc, nhắn tin, tán gẫu, v.v…
Nhỏ gọn
Vì chỉ phục vụ một số ít tác vụ cơ bản của một diễn đàn, toàn bộ chương trình VF (trừ các thư viện ngoài) chỉ chiếm khoảng 100 kilobyte dung lượng dĩa.
An toàn
VF được phát triển với các tính năng an ninh được đặt lên hàng đầu. Vì sự đơn giản và tính nhỏ gọn của VF nên chương trình được thiết kế ưu tiên sự an toàn hơn tính năng, và việc kiểm tra mã nguồn được thực hiện thường xuyên nhằm đảm bảo sự ưu tiên đó.
Thuận tiện
VF đề cao việc sử dụng các chuẩn mở như OpenID để việc sử dụng VF trở nên dễ dàng hơn cho người dùng. Bên canh đó, các tính năng thông thường mà người dùng đã quen thuộc ở các gói phần mềm khác cũng có mặt trong VF như BBCode. Tất cả chỉ nhằm một mục đích tạo ra môi trường thảo luận thuận tiện.

Yêu cầu hệ thống

Để triển khai VF, hệ thống sẽ cần một số ứng dụng và mô-đun sau:

  • Python v2.5 trở lên.
  • Mô-đun mako
  • Mô-đun werkzeug
  • Mô-đun sqlalchemy
  • Mô-đun routes
  • Mô-đun repoze.who.plugins.openid
  • Mô-đun repoze.what.plugins.xml
  • Mô-đun postmarkup
  • Mô-đun unidecode
  • Mô-đun zope.interface

Các mô-đun này có thể được cài đặt bằng setuptools (easy_install) hoặc pip.

Cài đặt

Mã nguồn của VF có thể được tải về từ địa chỉ http://bitbucket.org/vithon/vithon-forum.

Giải nén mã nguồn vào một thư mục nào đấy, giả sử như /opt/vithon-forum.

Dựa vào nội dung của tập tin config.py để tạo tập tin siteconfig.py mới, với các dòng lệnh gán giá trị phù hợp cho biến toàn cục. Các biến quan trọng cần thay đổi là COOKIE_SECRET, DATABASE_URL, STATIC_CONTENT_PATH, SESSION_STORAGE_PATH.

Tập tin siteconfig.py có thể có dạng sau:

BOARD_NAME = 'Acme Hideout'
COOKIE_SECRET = 'y@h0O'
DATABASE_URL = 'sqlite:////opt/vithon-forum/db.db'
STATIC_CONTENT_PATH = '/opt/vithon-forum/static'
SESSION_STORAGE_PATH = '/tmp/session'
SESSION_COOKIE_NAME = 'sid'
ENTRIES_PER_PAGE = 10
ORGANIZATION = 'Acme Corp'

Sau đó, chúng ta cần phải khởi tạo cơ sở dữ liệu bằng lệnh initdb.

$ cd /opt/vithon-forum
$ python forum.py initdb

Việc cài đặt đã hoàn tất.

Vận hành

Mặc dù cơ sở dữ liệu đã được khởi tạo khi cài đặt nhưng chúng ta chưa có dữ liệu nào trong cơ sở dữ liệu cả. Do đó, trước khi chạy VF, chúng ta sẽ cần phải tạo một số diễn đàn. Chúng ta sẽ sử dụng lệnh shell để thực hiện việc này.

$ cd /opt/vithon-forum
$ python forum.py shell

Lệnh shell sẽ mở một phiên làm việc tương tác cho phép chúng ta sử dụng Python để tác động đến chương trình VF. Chúng ta sẽ nhập vào đoạn mã Python như sau.

from model import *
f1 = Forum(u'Forum 1', u'Dien giai cho Forum 1')
f11 = Forum(u'Forum 1.1', u'Dien giai cho Forum 1.1', f1)
f12 = Forum(u'Forum 1.2', u'Dien giai cho Forum 1.2', f1)
f2 = Forum(u'Forum 2', u'Dien giai cho Forum 2')
f21 = Forum(u'Forum 2.1', u'Dien giai cho Forum 2.1', f2)
f22 = Forum(u'Forum 2.2', u'Dien giai cho Forum 2.2', f2)
session.add(f1)
session.add(f2)
session.commit()

Các câu lệnh trên tạo ra cấu trúc diễn đàn như sau:

Forum 1
  |
  +-- Forum 1.1
  |
  +-- Forum 1.2

Forum 2
  |
  +-- Forum 2.1
  |
  +-- Forum 2.2

Vì VF không có các tính năng quản lý qua web nên lệnh shell cũng chính là môi trường quản lý chính.

Cuối cùng, để chạy VF, chúng ta sẽ dùng lệnh runserver tương tự như sau:

$ cd /opt/vithon-forum
$ python forum.py runserver -h 127.0.0.1 -p 8080

Khi này, nếu ta mở trình duyệt lên và đi đến trang http://127.0.0.1:8080 thì chúng ta sẽ thấy diễn đàn đã hoạt động.

Triển khai theo mô hình CGI

Chúng ta cũng có thể triển khai VF theo mô hình CGI.

Đầu tiên chúng ta cần chép tập tin forum.cgi vào thư mục chứa các tập tin CGI (ví dụ như /var/www/cgi-bin).

Tiếp đến chúng ta cần sửa các lệnh thiết lập đường dẫn trong tập tin này cho phù hợp.

# Set the path to store python package cache
os.environ['PYTHON_EGG_CACHE'] = '/tmp/.egg'
# Set the path to vithon forum here
sys.path.insert(0, '/opt/vithon-forum')

Nếu như tập tin siteconfig.py nằm ở thư mục khác (ví dụ như trong thư mục /var/www/cgi-bin), thì chúng ta cũng sẽ cần thêm vào các dòng bên dưới. Nếu siteconfig.py nằm chung chỗ với các tập tin khác của VF thì chúng ta không cần các dòng lệnh này.

# Set the path to siteconfig.py here
sys.path.insert(0, '/var/www/cgi-bin')

Và cuối cùng chúng ta chỉ cần cấu hình máy chủ web để sử dụng tập tin forum.cgi như là một ứng dụng CGI. Thông tin về vấn đề này được nói rõ hơn trong tài liệu đi kèm với máy chủ web.

Phát động cuộc thi Giải Toán Bằng Python

written by Phan Đắc Anh Huy, on May 24, 2010 2:32:00 PM.

Sau thành công của 2 lần thi trước, nhóm PCNV tiếp tục phát động cuộc thi Giải Toán Bằng Python để chào mừng ngày quốc tề thiếu nhi đang đến rất gần. Đề thi rất đơn giản:

Hãy dùng ngôn ngữ lập trình Python để tính toán và xuất ra các cặp số n và k thỏa mãn:
1 + 2 + … + n = n + 1 + n + 2 + … + n + k


Input : Không có.
Output : Standard Output.
Output Format : In trên nhiều dòng, mỗi dòng là một cặp số n, k cách nhau bằng một hoặc nhiều khoảng trắng.

Yêu cầu :
- Chỉ được dùng các module built-in.
- Không được in ra các giá trị n, k đã tính toán sẵn trước khi chương trình thực thi dưới bất kỳ hình thức nào.
- Chương trình sẽ được người chấm thực thi trong vòng 30 giây. Hết thời gian này, chương trình sẽ bị ngắt.
- Chương trình nào in ra được nhiều cặp số n,k nhất sẽ chiến thắng.
- Chương trình sẽ bị loại nếu in ra bất cứ cặp số n,k nào không chính xác.
Thời hạn dự thi: Từ ngày hôm nay (24/05/2010) đến hết ngày 31/05/2010.


Bài dự thi xin gửi về địa chỉ email admin+frontpage@vithon.org (xin vui lòng bỏ +frontpage trước khi gửi), bạn có thể gửi nhiều lần trong trường hợp cải thiện được kết quả của mình. Chương trình được gửi cuối cùng sẽ được nhóm PCNV sử dụng để chấm điểm chung cuộc.

Trong quá trình làm bài, nếu có nhu cầu trao đổi, đặt câu hỏi, hay chỉ đơn giản là muốn trò chuyện với những người bạn rất dễ thương trong nhóm PCNV, các bạn có thể tham gia phòng tán gẫu #vithon ở máy chủ irc.freenode.net
Đã là cuộc thi thì không thể thiếu giải thưởng, phần thưởng cho người thắng cuộc là 100.000 VND và một buổi trò chuyện thân mật với admin nhóm PCNV.

Giới thiệu Python

written by vithon, on Nov 25, 2009 9:16:00 PM.

Python là một ngôn ngữ lập trình năng động với nhiều tính năng được sử dụng trong một loạt các ứng dụng. Python thường được so sánh với Tcl, Perl, Ruby, Scheme, hoặc Java. Một vài tính năng đặc trưng của nó gồm:

  • cú pháp rất trong sáng, dễ đọc
  • các khả năng tự xét (introspection) mạnh mẽ
  • hướng đối tượng trực giác
  • cách thể hiện tự nhiên mã thủ tục (procedural code)
  • hoàn toàn mô-đun hóa, hỗ trợ các gói theo cấp bậc
  • xử lý lỗi dựa theo ngoại lệ (exception)
  • kiểu dữ liệu động ở mức rất cao
  • các thư viện chuẩn và các mô-đun ngoài bao quát hầu như mọi việc
  • phần mở rộng và mô-đun dễ dàng viết trong C, C++ (hoặc Java cho Jython, hoặc các ngôn ngữ .NET cho IronPython)
  • có thể nhúng trong ứng dụng như một giao diện kịch (scripting interface)

Python mạnh… và nhanh

Những người hâm mộ Python dùng câu “kèm theo pin” để nói đến bộ thư viện chuẩn, trong đó chứa mọi thứ từ việc xử lý không đồng bộ cho tới các tập tin ZIP. Bản thân ngôn ngữ là một nhà máy linh động có thể giải quyết hầu hết mọi vấn đề. Viết máy chủ web cho riêng bạn với ba dòng mã. Viết mã theo hướng dữ liệu với khả năng tự xét mạnh mẽ và khả chuyển và những tính năng như siêu lớp (meta-classes), kiểu vịt (duck typing)trang hoàng (decorators) của Python.

Python giúp bạn viết mã bạn cần, thật nhanh. Và, nhờ vào trình biên dịch đã được tối ưu hóa, và những thư viện hỗ trợ, mã Python chạy nhanh hơn đa số các ứng dụng cần.

Python hòa hợp tốt với các thứ khác

Python có thể kết nối với các đối tượng COM, .NET, và CORBA.

Với những thư viện Java, sử dụng Jython, một cài đặt của Python cho máy ảo Java.

Với .NET, thử IronPython, cài đặt Python mới của Microsoft cho .NET, hoặc Python for .NET.

Python cũng được hỗ trợ bởi Internet Communications Engine (ICE) và nhiều công nghệ kết nối khác.

Nếu bạn nhận ra một vài điều Python không thể làm, hoặc nếu bạn cần sự thực thi nhanh của mã mức thấp, bạn có thể viết mô-đun mở rộng trong C hoặc C++, hoặc gói mã đang có bằng SWIG hoặc Boost.Python. Các mô-đun đã gói được sử dụng y như những mô-đun Python. Người ta gọi là kết nối ngôn ngữ đã giản đơn. Bạn cũng có thể đi đường ngược lại và nhúng Python vào ứng dụng của bạn, đem lại cho người dùng ngôn ngữ mà họ sẽ say mê.

Python chạy khắp nơi

Python có cho mọi hệ điều hành: Windows, Linux/Unix, OS/2, Mac, Amiga, và những hệ khác. Thậm chí có cả những phiên bản chạy trên .NET, máy ảo Java, và điện thoại di động Nokia Series 60. Bạn sẽ rất hài lòng khi biết rằng cùng một mã nguồn sẽ chạy không khác nhau trên mọi cài đặt.

Hệ thống của bạn không có trong danh sách ở đây? Không sao, nó vẫn có thể chạy Python được nếu có một trình biên dịch C trên hệ thống. Hỏi ở news:comp.lang.python - hoặc cứ thử tự biên dịch Python lại.

Python gần gũi… và dễ học

Nhóm tin Python được biết đến như là một trong những nhóm thân thiện nhất. Cộng đồng nhà phát triển và người dùng mở một wiki, chủ trì các hội thảo quốc tế và địa phương, đứng lớp dạy phát triển, và đóng góp vào kho lưu trữ mã trực tuyến.

Python cũng có kho tài liệu đầy đủ, vừa tồn tại trong bản thân ngôn ngữ lẫn trên mạng. Những tài liệu trên mạng nhắm vào cả lập trình viên chuyên nghiệp lẫn người mới. Tất cả đều được thiết kế nhằm giúp bạn sản xuất nhanh hơn. Và sự có mặt của những quyển sách làm quá trình học tập đầy đủ hơn.

Python mở

Cài đặt Python dùng giấy phép nguồn mở nên được sử dụng và phân tối tự do, ngay cả trong việc thương mại. Giấy phép Python được quán xuyến bởi Python Software Foundation.

Hãy xem qua các lĩnh vực ứng dụng mà Python được dùng, hoặc tự dùng thử bản mới nhất.

Python và PHP

written by vithon, on Jan 30, 2009 10:01:00 AM.

Bài viết này được tổng hợp từ nhiều nguồn khác nhau (bằng tiếng anh) cộng với kinh nghiệm viết PHP và Python của tôi.

I. Giống nhau

  • Là ngôn ngữ cao cấp, thông dịch và định kiểu động
  • Mã nguồn mở
  • Cộng đồng lập trình viên rộng lớn
  • Dễ học (so với Java, C hay Perl)
  • Dễ mở rộng (so với Java, C++)
  • Rất khả chuyển, chạy được trên nhiều nền tảng mà không phải biên dịch lại (tất nhiên rồi) hay sửa code

II. Khác nhau

1. PHP hơn

  • PHP kế thừa các curly braces để đánh dấu code block của C và dấu $ của Perl
  • Các câu lệnh switch và vòng lặp do/while
  • Toán tử gán, increment và decrement (++--)
  • Toán tử ternary operator/statement (… ? … : …)
    • Trong Python 2.5 có câu lệnh if/else có tác dụng tương tự (X if C else Y)
  • Array rất mạnh ,đùng cho cả list và dict
  • Tham chiếu ($a =& $b tức là khi biến $b thay đổi, thì biến $a cũng thay đổi)
  • Có cả private, protected và public access modifiers cho cả phương thức và thuộc tính
  • Dùng cả abstract và final modifiers cho cả classes và methods
  • Có interfaces
  • $this là đối tượng mặc định, và không cần truyền ngược self để định nghĩa method như Python (với Python, để định nghĩa test là method của một lớp cần định nghĩa: def test(self))

2. Python hơn

  • Ngôn ngữ sử dụng với các mục đích chung (Python có thể dùng để lập trình hầu hết mọi thứ, trong khi PHP chỉ dùng để lập trình web hay console. Tất nhiên có thể làm được việc khác nhưng không đáng kể)
  • Sử dụng indentation (thụt vào đầu dòng, và dòng mới) thay thế cho các dấu curly braces để đánh dấu các code block. Tất nhiên là trông đẹp hơn, nhưng không thân thiện với HTML template cho Web)
  • Có namespaces và modules (PHP 5.3 mới có namespaces)
  • Truyền biến cho hàm hiệu quả hơn PHP nhờ cặp key=value pair, hỗ trợ tốt hơn cho giá trị mặc định của biến truyền vào hàm
  • Cho phép đa thừa kế (không rõ là hay hay là dở nữa)
  • Introspection tốt hơn PHP Reflection
  • Mọi thứ từ biến tới đối tượng đều có kiểu tham chiếu
  • Có Threading
  • Document tốt hơn PHP (nhưng chắc chắn là ít tài liệu trên mạng hơn PHP)
  • Có thể lập trình GUI (Tất nhiên là PHP cũng có thể nhưng không thể bằng)
  • Có thể chạy trên .Net với IronPython hay nền Java với Jython (PHP cũng có thể chạy trên Java thậm chí trong cả các Application Server)
  • Có web server, application server riêng, 100% viết bằng Python.
  • Có lambda và các hàm hỗ trợ để xây dựng hàm (PHP có create_function và closure)
  • Cached byte-code (PHP cũng có nhưng không tốt bằng)
  • Unicode được hỗ trợ tốt hơn
  • Kiểm soát lỗi ngoại lệ tốt hơn
  • Chạy nhanh hơn PHP (nhanh hơn nhưng tốn CPU và RAM)

Hãy học Python cho đời còn lại của bạn nhé!

(Bài viết được chuyển từ diễn đàn do bạn kaka đóng góp)