<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Python Cho Người Việt - Tin tức</title><link href="/" rel="alternate"></link><link href="feeds/tin-tuc.atom.xml" rel="self"></link><id>/</id><updated>2016-06-23T13:58:00+07:00</updated><subtitle></subtitle><entry><title>Điều khiển thang máy</title><link href="2016/06/dieu-khien-thang-may.html" rel="alternate"></link><published>2016-06-23T13:58:00+07:00</published><updated>2016-06-23T13:58:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2016-06-23:2016/06/dieu-khien-thang-may.html</id><summary type="html">&lt;p&gt;&lt;strong&gt;Cập nhật:&lt;/strong&gt; Do số lượng bài tham gia vẫn còn ít (dẫn đến cuộc thi đua không còn thú vị nữa) nên ban tổ chức dời lại hạn nộp bài đến &lt;strong&gt;hết ngày 21 tháng 07&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Nhân việc PyCon vừa qua, nhóm PCNV hân hạnh tổ chức cuộc thi &lt;strong&gt;Điều …&lt;/strong&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;Cập nhật:&lt;/strong&gt; Do số lượng bài tham gia vẫn còn ít (dẫn đến cuộc thi đua không còn thú vị nữa) nên ban tổ chức dời lại hạn nộp bài đến &lt;strong&gt;hết ngày 21 tháng 07&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Nhân việc PyCon vừa qua, nhóm PCNV hân hạnh tổ chức cuộc thi &lt;strong&gt;Điều khiển thang máy!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tương tự như cuộc thi &lt;a class="reference external" href="http://www.vithon.org/2010/11/26/tranh-tai-bắn-suồng"&gt;Bắn suồng&lt;/a&gt;, cuộc thi &lt;strong&gt;Điều khiển thang máy&lt;/strong&gt; cũng là một cuộc thi lập trình &lt;strong&gt;Python&lt;/strong&gt; và có một số điều lệ sau:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Trò chơi được giới thiệu tại &lt;a class="reference external" href="http://codelift.org"&gt;http://codelift.org&lt;/a&gt;. Người tham dự có thể thử mã của mình tại trang mạng đó.&lt;/li&gt;
&lt;li&gt;Người tham gia phải nộp mã Python (tập tin &lt;strong&gt;.py&lt;/strong&gt;) tới &lt;strong&gt;admin+codelift&amp;#64;vithon.org&lt;/strong&gt;, và đồng ý với việc nhóm PCNV có toàn quyền sử dụng mã đó cho mọi mục đích.&lt;/li&gt;
&lt;li&gt;Người tham gia cũng phải gửi thêm một bài viết (dưới dạng &lt;strong&gt;.txt&lt;/strong&gt;) giới thiệu trò chơi, và cách giải của mình đến cùng địa chỉ thư trên.&lt;/li&gt;
&lt;li&gt;Hạn nhận bài là &lt;strong&gt;ngày 14 tháng 07 năm 2016.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Bài thi sẽ được đọc qua trước, và sẽ được chạy trên cùng hệ thống codelift.org.&lt;/li&gt;
&lt;li&gt;Bài thi với số điểm trung bình cao nhất trong &lt;strong&gt;3 tòa nhà&lt;/strong&gt; được chọn khi chấm sẽ là bài thắng giải.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ba&lt;/strong&gt; phần thưởng dành cho ba bài thi với số điểm trung bình cao nhất là ba cái áo thun và một số miếng dán mà bạn Nam đã gửi cho nhóm từ PyCon. Người hạng nhất sẽ được quyền chọn mẫu áo trước, rồi đến hạng nhì, và hạng ba. Mẫu áo đã được công bố trong &lt;a class="reference external" href="https://drive.google.com/folderview?id=0B4aYVYJVZM_zT2tzZGdTNTUwQWc&amp;amp;usp=sharing"&gt;thư mục chia sẻ&lt;/a&gt; ở bài trước.&lt;/li&gt;
&lt;li&gt;Quyết định của ban tổ chức là cuối cùng.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Mọi thắc mắc và thảo luận xin hãy dùng &lt;a class="reference external" href="forum.vithon.org"&gt;diễn đàn&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Chúc may mắn và nhiều niềm vui!&lt;/p&gt;
</content><category term="Tin tức"></category><category term="t-shirt"></category><category term="python"></category><category term="codelift"></category></entry><entry><title>PyCon 2016 ở thành phố Portland</title><link href="2016/06/pycon-2016-o-thanh-pho-portland.html" rel="alternate"></link><published>2016-06-12T18:07:00+07:00</published><updated>2016-06-12T18:07:00+07:00</updated><author><name>Nguyễn Thành Nam</name></author><id>tag:None,2016-06-12:2016/06/pycon-2016-o-thanh-pho-portland.html</id><summary type="html">&lt;p&gt;Hai tuần trước mình có tham dự hội thảo PyCon 2016 ở thành phố Portland, tiểu bang Oregon, vùng Tây Bắc nước Mỹ.&lt;/p&gt;
&lt;p&gt;Cũng như mọi năm, PyCon vẫn là hội thảo tuyệt vời nhất từ trước đến nay. Tham dự hội thảo không chỉ có lập trình viên mà …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Hai tuần trước mình có tham dự hội thảo PyCon 2016 ở thành phố Portland, tiểu bang Oregon, vùng Tây Bắc nước Mỹ.&lt;/p&gt;
&lt;p&gt;Cũng như mọi năm, PyCon vẫn là hội thảo tuyệt vời nhất từ trước đến nay. Tham dự hội thảo không chỉ có lập trình viên mà còn có nhiều nhà khoa học, giáo viên, sinh viên, và cả học sinh tiểu học nữa! Mình chưa từng thấy hội thảo khoa học kỹ thuật nào mà có thể quy tập được nhiều đối tượng tham gia như vậy.&lt;/p&gt;
&lt;p&gt;Một điều tuyệt vời nữa là có rất nhiều các bạn nam, các bạn nữ, và cả các bạn chuyển giới tham gia PyCon. Điều này cho thấy Python không chỉ là một ngôn ngữ &amp;quot;có sẵn pin&amp;quot;, mà có còn là một cộng đồng rất &amp;quot;bao gồm&amp;quot;. Ai cũng được hoan nghênh, ai cũng được đối xử một cách tôn trọng, không có sự phân biệt đối xử.&lt;/p&gt;
&lt;p&gt;Sau đây là một số hình ảnh mình ghi lại để chia sẻ cùng các bạn. Hy vọng một dịp nào đó sẽ gặp được các bạn ở trong các kỳ hội thảo trong tương lai:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://drive.google.com/uc?export=download&amp;amp;id=0B4aYVYJVZM_zUU9DNkpxYWt5Smc"&gt;Bảng hiệu PyCon 2016 ở dọc đường đến trung tâm hội nghị Portland.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://drive.google.com/uc?export=download&amp;amp;id=0B4aYVYJVZM_zX3VIeEpKd3FpWWs"&gt;Em bé đứng nhìn tượng Martin Luther King, Jr. ở trước trung tâm hội nghị.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://drive.google.com/uc?export=download&amp;amp;id=0B4aYVYJVZM_zUE13c2xUUk16eUE"&gt;Hội trường chính, nơi diễn ra các bài tham luận chủ chốt.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Các bạn có thể thấy con lắc biểu tượng của trung tâm hội nghị Portland trong hai hình sau:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://drive.google.com/uc?export=download&amp;amp;id=0B4aYVYJVZM_zbnk2VUNOaUlJYm8"&gt;Khu đăng ký (hình 1).&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://drive.google.com/uc?export=download&amp;amp;id=0B4aYVYJVZM_zT1NhYmNRb2VXaDA"&gt;Khu đăng ký (hình 2).&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://drive.google.com/uc?export=download&amp;amp;id=0B4aYVYJVZM_zTVl3Z1lpSTRNUDQ"&gt;Khu vực phòng Oregon (hình 1).&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://drive.google.com/uc?export=download&amp;amp;id=0B4aYVYJVZM_zcE1aVGRnbHAwb1k"&gt;Khu vực phòng Oregon (hình 2).&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://drive.google.com/uc?export=download&amp;amp;id=0B4aYVYJVZM_zam1VeDduZEhidWc"&gt;Khu vực phòng Oregon (hình 3).&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://drive.google.com/uc?export=download&amp;amp;id=0B4aYVYJVZM_zUWRiUXlOamdkV0E"&gt;Khu vực phòng Oregon (hình 4).&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://drive.google.com/uc?export=download&amp;amp;id=0B4aYVYJVZM_zZTZBOUtCenN4cGs"&gt;Khu vực phòng Portland (hình 1).&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://drive.google.com/uc?export=download&amp;amp;id=0B4aYVYJVZM_zbGpDZkpsRUh2bEk"&gt;Khu vực phòng Portland (hình 2).&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://drive.google.com/uc?export=download&amp;amp;id=0B4aYVYJVZM_zemFaTWJYSVg0Z00"&gt;Hình Guido bắt đầu bài tham luận chính.&lt;/a&gt; Guido vẫn mặc chiếc áo bé gái như mọi năm. Không biết cái áo này sẽ còn theo Guido đến PyCon năm nào đây. Điều này cũng cho thấy Guido rất quan tâm đến sự đối xử bình đẳng, tôn trọng giới tính ở hội thảo PyCon.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://drive.google.com/uc?export=download&amp;amp;id=0B4aYVYJVZM_zSGZHeEx1VF9jSTQ"&gt;Bảng đăng ký không gian mở (open spaces) ở hội thảo.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://drive.google.com/uc?export=download&amp;amp;id=0B4aYVYJVZM_zT19tZ0k5dl9kLVE"&gt;Ảnh trưng bày (poster session) (hình 1).&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://drive.google.com/uc?export=download&amp;amp;id=0B4aYVYJVZM_zRUhseUdyVnhRbXM"&gt;Ảnh trưng bày (poster session) (hình 2).&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hai hình ảnh của tác giả bài viết:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://drive.google.com/uc?export=download&amp;amp;id=0B4aYVYJVZM_zVjR0RVZncHoySVU"&gt;Ảnh đẹp nhất hội thảo (hình 1).&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://drive.google.com/uc?export=download&amp;amp;id=0B4aYVYJVZM_zWWxNZlZTMWg3NFU"&gt;Ảnh đẹp nhất hội thảo (hình 2).&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Toàn bộ các hình ảnh có thể được truy cập trong thư mục &lt;a class="reference external" href="https://drive.google.com/folderview?id=0B4aYVYJVZM_zT2tzZGdTNTUwQWc&amp;amp;usp=sharing"&gt;https://drive.google.com/folderview?id=0B4aYVYJVZM_zT2tzZGdTNTUwQWc&amp;amp;usp=sharing&lt;/a&gt;.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="pycon"></category></entry><entry><title>Sách "Python rất là cơ bản"</title><link href="2015/11/sach-python-rat-la-co-ban.html" rel="alternate"></link><published>2015-11-18T17:16:00+07:00</published><updated>2015-11-18T17:16:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2015-11-18:2015/11/sach-python-rat-la-co-ban.html</id><content type="html">&lt;p&gt;Bạn &lt;strong&gt;Võ Duy Tuấn&lt;/strong&gt; có thực hiện một quyển sách về Python với tựa đề &lt;strong&gt;Python rất là cơ bản&lt;/strong&gt;. Nhóm PCNV  xin giới thiệu cùng các bạn.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="http://bloghoctap.com/python/download-sach-python-rat-la-co-ban.html"&gt;http://bloghoctap.com/python/download-sach-python-rat-la-co-ban.html&lt;/a&gt;&lt;/p&gt;
</content><category term="Tin tức"></category></entry><entry><title>Kết quả cuộc thi giải toán lần II</title><link href="2013/04/ket-qua-cuoc-thi-giai-toan-lan-ii.html" rel="alternate"></link><published>2013-04-18T16:29:00+07:00</published><updated>2013-04-18T16:29:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2013-04-18:2013/04/ket-qua-cuoc-thi-giai-toan-lan-ii.html</id><summary type="html">&lt;p&gt;Cảm ơn sự hưởng ứng nhiệt tình của các bạn với cuộc thi giải toán lần II của PCNV.&lt;/p&gt;
&lt;p&gt;Lần này nhóm nhận được sự sự tham gia của năm bạn Phạm Ngọc Quang Nam, Nguyễn Văn Nam, Vũ Khuê, Hoàng Quốc Thịnh, và Đậu Duy Khánh.&lt;/p&gt;
&lt;p&gt;Bài của bạn …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Cảm ơn sự hưởng ứng nhiệt tình của các bạn với cuộc thi giải toán lần II của PCNV.&lt;/p&gt;
&lt;p&gt;Lần này nhóm nhận được sự sự tham gia của năm bạn Phạm Ngọc Quang Nam, Nguyễn Văn Nam, Vũ Khuê, Hoàng Quốc Thịnh, và Đậu Duy Khánh.&lt;/p&gt;
&lt;p&gt;Bài của bạn Thịnh:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
09:03:48 ~/tmp/pell2$ python3.3 thinhhq.py | python timer.py &amp;gt; thinhhq.txt
09:04:22 ~/tmp/pell2$ python checker.py &amp;lt; thinhhq.txt
Max 448985
09:04:30 ~/tmp/pell2$ python3.3 thinhhq.py | python timer.py &amp;gt; thinhhq.txt2
09:05:04 ~/tmp/pell2$ python checker.py &amp;lt; thinhhq.txt2
Max 449905
09:05:08 ~/tmp/pell2$ python3.3 thinhhq.py | python timer.py &amp;gt; thinhhq.txt3
09:05:39 ~/tmp/pell2$ python checker.py &amp;lt; thinhhq.txt3
Max 449421
&lt;/pre&gt;
&lt;p&gt;Bài của bạn Văn Nam:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
09:05:46 ~/tmp/pell2$ python3.3 namnv.py | python timer.py &amp;gt; namnv.txt
09:07:12 ~/tmp/pell2$ python checker.py &amp;lt; namnv.txt
Max 1394855
09:07:28 ~/tmp/pell2$ python3.3 namnv.py | python timer.py &amp;gt; namnv.txt2
09:07:47 ~/tmp/pell2$ python checker.py &amp;lt; namnv.txt2
Max 1394855
09:08:00 ~/tmp/pell2$ python3.3 namnv.py | python timer.py &amp;gt; namnv.txt3
09:08:19 ~/tmp/pell2$ python checker.py &amp;lt; namnv.txt3
Max 1394855
&lt;/pre&gt;
&lt;p&gt;Bài của bạn Khanh:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
09:12:49 ~/tmp/pell2$ python3.3 khanhdd.py | python timer.py &amp;gt; khanhdd.txt
Traceback (most recent call last):
  File &amp;quot;khanhdd.py&amp;quot;, line 13, in &amp;lt;module&amp;gt;
    print (a1,' ',b1)
BrokenPipeError: [Errno 32] Broken pipe
09:13:27 ~/tmp/pell2$ python checker.py &amp;lt; khanhdd.txt
ERROR:root:Format
Traceback (most recent call last):
  File &amp;quot;checker.py&amp;quot;, line 16, in &amp;lt;module&amp;gt;
    n, k = map(long, line.split())
ValueError: too many values to unpack
&lt;/pre&gt;
&lt;p&gt;Bài của bạn Khuê:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
09:14:37 ~/tmp/pell2$ python3.3 khuev.py | python timer.py &amp;gt; khuev.txt
  File &amp;quot;khuev.py&amp;quot;, line 35
    print &amp;quot;n: %d - k: %d&amp;quot; % (-b / 2, k)
                      ^
SyntaxError: invalid syntax
&lt;/pre&gt;
&lt;p&gt;Bài của bạn Quang Nam:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
09:15:19 ~/tmp/pell2$ python3.3 nampnq.py | python timer.py &amp;gt; nampnq.txt
  File &amp;quot;nampnq.py&amp;quot;, line 5
    print &amp;quot;n=%d, k=%d&amp;quot; % (n,k)
                   ^
SyntaxError: invalid syntax
&lt;/pre&gt;
&lt;p&gt;Mã nguồn và bản lưu kết quả của cuộc thi có thể được tải về từ  &lt;a class="reference external" href="https://docs.google.com/file/d/0B5X03CmpgiFeMkNubXlGNFlCMjQ/edit?usp=sharing"&gt;https://docs.google.com/file/d/0B5X03CmpgiFeMkNubXlGNFlCMjQ/edit?usp=sharing&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Như vậy, bạn Văn Nam đã thắng giải kỳ này. Xin chúc mừng bạn Văn Nam.&lt;/p&gt;
&lt;p&gt;Bạn Văn Nam gửi thư cho admin&amp;#64; cho biết mẫu áo bạn chọn, và thông tin bưu điện để nhóm PCNV có thể gửi áo cho bạn.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="python"></category><category term="optimize"></category><category term="contest"></category></entry><entry><title>Cuộc thi giải toán bằng Python</title><link href="2013/03/cuoc-thi-giai-toan-bang-python.html" rel="alternate"></link><published>2013-03-31T02:18:00+07:00</published><updated>2013-03-31T02:18:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2013-03-31:2013/03/cuoc-thi-giai-toan-bang-python.html</id><summary type="html">&lt;p&gt;Trong lần thi trước (&lt;a class="reference external" href="http://www.vithon.org/2010/05/24/phat-d%E1%BB%99ng-cu%E1%BB%99c-thi-gi%E1%BA%A3i-toan-b%E1%BA%B1ng-python"&gt;http://www.vithon.org/2010/05/24/phat-d%E1%BB%99ng-cu%E1%BB%99c-thi-gi%E1%BA%A3i-toan-b%E1%BA%B1ng-python&lt;/a&gt;), chúng ta đánh giá chương trình dựa trên số lượng cặp N, K tìm được.&lt;/p&gt;
&lt;p&gt;Tiêu chí của lần thi này là in ra cặp số …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Trong lần thi trước (&lt;a class="reference external" href="http://www.vithon.org/2010/05/24/phat-d%E1%BB%99ng-cu%E1%BB%99c-thi-gi%E1%BA%A3i-toan-b%E1%BA%B1ng-python"&gt;http://www.vithon.org/2010/05/24/phat-d%E1%BB%99ng-cu%E1%BB%99c-thi-gi%E1%BA%A3i-toan-b%E1%BA%B1ng-python&lt;/a&gt;), chúng ta đánh giá chương trình dựa trên số lượng cặp N, K tìm được.&lt;/p&gt;
&lt;p&gt;Tiêu chí của lần thi này là in ra cặp số N, K &lt;strong&gt;lớn nhất&lt;/strong&gt; có thể tìm được trong 30 giây. Cặp số cuối cùng được in ra trong 30 giây sẽ được xem là cặp số lớn nhất và dùng để đánh giá các chương trình với nhau.&lt;/p&gt;
&lt;p&gt;Giải thưởng của kỳ thi lần này sẽ là một áo thun do bạn Nguyễn Thành Nam đã tặng nhóm PCNV trong lần đi PyCon vừa qua. Các bạn có thể xem qua các áo giải thưởng (trừ EdX cỡ L, các áo khác cỡ M, chỉ được chọn 1) ở URL sau:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://drive.google.com/folderview?id=0B5X03CmpgiFeNzNJN09qZnd2Sk0&amp;amp;usp=sharing"&gt;https://drive.google.com/folderview?id=0B5X03CmpgiFeNzNJN09qZnd2Sk0&amp;amp;usp=sharing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Các bài tham dự gửi bằng thư điện tử về cho admin&amp;#64; hạn chót trong &lt;strong&gt;ngày 14 tháng 04 năm 2013&lt;/strong&gt;. Nhằm khuyến khích việc sử dụng Python 3, các bài tham gia kỳ thi này sẽ được &lt;strong&gt;chấm trên Python 3.3&lt;/strong&gt;. Mòng các bạn chú ý yêu cầu này.&lt;/p&gt;
&lt;p&gt;Quyết định của người chấm là cuối cùng. Xin miễn nhận khiếu nại.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="maths"></category><category term="python"></category><category term="contest"></category></entry><entry><title>Ghi nhớ về PyCon 2013</title><link href="2013/03/ghi-nho-ve-pycon-2013.html" rel="alternate"></link><published>2013-03-18T06:01:00+07:00</published><updated>2013-03-18T06:01:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2013-03-18:2013/03/ghi-nho-ve-pycon-2013.html</id><summary type="html">&lt;p&gt;Hội thảo PyCon 2013 vừa kết thúc vào Chủ Nhật, ngày 18 tháng 03 năm 2013 vừa rồi tại Trung tâm Hội nghị Santa Clara, bang California, Mỹ.&lt;/p&gt;
&lt;p&gt;Hội thảo lần này diễn ra vào các ngày thứ sáu, thứ bảy, và Chủ Nhật với khoảng 100 bài tham luận …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Hội thảo PyCon 2013 vừa kết thúc vào Chủ Nhật, ngày 18 tháng 03 năm 2013 vừa rồi tại Trung tâm Hội nghị Santa Clara, bang California, Mỹ.&lt;/p&gt;
&lt;p&gt;Hội thảo lần này diễn ra vào các ngày thứ sáu, thứ bảy, và Chủ Nhật với khoảng 100 bài tham luận và 2500 người tham dự đến từ tất cả các châu lục trên trái đất. Trong đó, khoảng 20% là nữ giới!&lt;/p&gt;
&lt;p&gt;Nhóm PCNV có một thành viên tham gia hội thảo lần này, và họ có một số nhận xét chính như sau:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Hội thảo có nhiều chuyên mục phù hợp với mọi lứa tuổi, mọi ngành nghề, mọi giới tính. Có cả những em thiếu niên khoảng 10 đến 12 tuổi tham gia hội thảo. Một số các em đã biết Python còn đứng lớp chỉ dạy Python cho các em khác. Thậm chí có một số em đã trình bày sản phẩm của chính mình trong phân mục tự giới thiệu (poster session), cùng với gần trăm sản phẩm khác từ các công ty lớn cũng như các chuyên gia trong ngành. Nữ giới chiếm gần 20% người tham gia hội thảo. Một số cá nhân trên 60 tuổi cũng thấy xuất hiện tại hội thảo. Thậm chí cả người chuyển đổi giới tính cũng có mặt! Có thể khẳng định chắc chắn rằng Python thu hút được sự quan tâm của tất cả mọi người.&lt;/li&gt;
&lt;li&gt;Hội thảo năm nay có sự xuất hiện của nhiều nhóm nữ giới như CodeChix, WomanWhoCode, PyLadies, LadyCoders. Đây là một tín hiệu đáng mừng. So với các ngôn ngữ lập trình đa dụng khác, có lẽ Python là ngôn ngữ thu hút nữ giới nhiều nhất!&lt;/li&gt;
&lt;li&gt;Hội thảo năm nay có một sự ngạc nhiên thú vị. Mỗi cá nhân tham dự hội thảo được tặng một thiết bị Rasberry Pi miễn phí! Điều này cho thấy Python có một vị trí quan trọng trong thị trường phần cứng nghiệp dư, kinh tế. Trong hội thảo cũng thiết lập một &amp;quot;Phòng nghiên cứu Rasberry Pi&amp;quot; để hướng dẫn cách cài đặt và sử dụng thiết bị đó.&lt;/li&gt;
&lt;li&gt;Các bài tham luận chớp nhoáng (lightning talks) cho thấy Python có khả năng ứng dụng rộng rãi và đáng ngạc nhiên. Một số ví dụ điển hình như sử dụng Python để điều khiển hệ thống đèn LED nhấp nháy, sử dụng Python trên các hệ máy Atari, sử dụng Python để thông dịch và gỡ rối mã Lisp/Scheme.&lt;/li&gt;
&lt;li&gt;Lập trình viên Python có khả năng Rap không thua kém các ca sĩ chuyên nghiệp! Đoạn phim bên dưới quay lại cảnh Larry Hastings, thành viên nòng cốt trong nhóm phát triển Python, hát bài rap tự chế trước phiên tham luận chớp nhoáng.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a class="reference external" href="http://youtu.be/rKiySLUrYQ8"&gt;http://youtu.be/rKiySLUrYQ8&lt;/a&gt;&lt;/p&gt;
&lt;ol class="arabic simple" start="6"&gt;
&lt;li&gt;Bạn Nguyễn Thành Nam có mặt tại hội thảo đã chụp tấm hình tự sướng này.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a class="reference external" href="https://docs.google.com/file/d/0B5X03CmpgiFeb3pfMTlIVlBCQ3M/edit?usp=sharing"&gt;https://docs.google.com/file/d/0B5X03CmpgiFeb3pfMTlIVlBCQ3M/edit?usp=sharing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Bạn Nam cũng đã ủng hộ một số món quà nhỏ cho nhóm PCNV dùng để khuyến khích các bạn đã có bài viết đóng góp cho nhóm. Nhóm PCNV sẽ gửi trực tiếp cho các bạn.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="pycon"></category></entry><entry><title>Cảnh báo: Cẩn thận khi sử dụng pip trong mạng</title><link href="2013/02/canh-bao-can-than-khi-su-dung-pip-trong-mang.html" rel="alternate"></link><published>2013-02-03T19:37:00+07:00</published><updated>2013-02-03T19:37:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2013-02-03:2013/02/canh-bao-can-than-khi-su-dung-pip-trong-mang.html</id><summary type="html">&lt;p&gt;Pip (&lt;a class="reference external" href="http://pypi.python.org/pypi/pip"&gt;http://pypi.python.org/pypi/pip&lt;/a&gt;), cũng như một số các công cụ sử dụng mô-đun có sẵn &lt;tt class="docutils literal"&gt;urllib&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;urllib2&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;httplib&lt;/tt&gt;, có thể bị tấn công kẻ ở giữa (man-in-the-middle) và làm thay đổi nội dung của gói tin nhận được.&lt;/p&gt;
&lt;p&gt;Lý do là khi truy cập vào một …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Pip (&lt;a class="reference external" href="http://pypi.python.org/pypi/pip"&gt;http://pypi.python.org/pypi/pip&lt;/a&gt;), cũng như một số các công cụ sử dụng mô-đun có sẵn &lt;tt class="docutils literal"&gt;urllib&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;urllib2&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;httplib&lt;/tt&gt;, có thể bị tấn công kẻ ở giữa (man-in-the-middle) và làm thay đổi nội dung của gói tin nhận được.&lt;/p&gt;
&lt;p&gt;Lý do là khi truy cập vào một địa chỉ HTTPS hoặc các giao thức SSL/TLS, các mô-đun có sẵn này không kiểm tra chứng từ (certificate) của máy chủ để xác nhận máy chủ đó đúng là máy chủ chương trình cần truy cập. Điều này cho phép một kẻ thứ ba giả dạng máy chủ và thay đổi nội dung gói tin yêu cầu cũng như trả lời.&lt;/p&gt;
&lt;p&gt;Do đó, người sử dụng cần cẩn trọng khi sử dụng các công cụ như &lt;tt class="docutils literal"&gt;pip&lt;/tt&gt; trong một mạng không an toàn.&lt;/p&gt;
&lt;p&gt;Thông tin thêm có thể được tham khảo tại:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="http://www.reddit.com/r/Python/comments/17rfh7/warning_dont_use_pip_in_an_untrusted_network_a/"&gt;http://www.reddit.com/r/Python/comments/17rfh7/warning_dont_use_pip_in_an_untrusted_network_a/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Kể từ Python 3.2, các mô-đun có sẵn liên quan đến SSL/TLS đã có thêm chức năng kiểm tra chứng từ nhưng chức năng này phải được tự kích hoạt.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="pip"></category><category term="ssl"></category><category term="security"></category><category term="certificate"></category></entry><entry><title>Chương trình PyCon US 2013</title><link href="2013/01/chuong-trinh-pycon-us-2013.html" rel="alternate"></link><published>2013-01-18T16:04:00+07:00</published><updated>2013-01-18T16:04:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2013-01-18:2013/01/chuong-trinh-pycon-us-2013.html</id><summary type="html">&lt;p&gt;Chương trình hội thảo PyCon năm nay đã được công bố vào bốn ngày trước.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://us.pycon.org/2013/schedule/"&gt;https://us.pycon.org/2013/schedule/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Sau nhiều tuần đánh giá các bài tham luận, chương trình của hội thảo cuối cùng đã được thống nhất. Năm nay số lượng người tham dự tăng đột …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Chương trình hội thảo PyCon năm nay đã được công bố vào bốn ngày trước.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://us.pycon.org/2013/schedule/"&gt;https://us.pycon.org/2013/schedule/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Sau nhiều tuần đánh giá các bài tham luận, chương trình của hội thảo cuối cùng đã được thống nhất. Năm nay số lượng người tham dự tăng đột ngột và 1000 vé bán trước (early bird) đã không còn nữa. Tổng lượng vé bán ra được giới hạn ở mức 2500 vé. Nếu bạn muốn tham dự hội thảo, bạn cần phải &lt;a class="reference external" href="https://us.pycon.org/2013/registration/"&gt;mua vé&lt;/a&gt; &lt;strong&gt;ngay bây giờ&lt;/strong&gt;. Hội thảo bắt đầu &lt;strong&gt;từ ngày 13 đến ngày 21 tháng 03&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;So với năm ngoái, hội thảo năm nay có thêm một chuyên mục thứ sáu, nâng tổng số bài tham luận lên 114 bài. Các bài điểm của hội thảo sẽ được trình bày bởi những nhân vật tên tuổi như Eben Upton, Jessica McKellar, Raymond Hettinger, và Guido van Rossum.&lt;/p&gt;
&lt;p&gt;PS: Nếu không có điều kiện tham dự hội thảo, các bạn cũng có thể xem phim quay lại tại &lt;a class="reference external" href="http://pyvideo.org"&gt;http://pyvideo.org&lt;/a&gt;.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="pycon"></category></entry><entry><title>wiki.python.org bị tấn công</title><link href="2013/01/wikipythonorg-bi-tan-cong.html" rel="alternate"></link><published>2013-01-08T17:54:00+07:00</published><updated>2013-01-08T17:54:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2013-01-08:2013/01/wikipythonorg-bi-tan-cong.html</id><summary type="html">&lt;p&gt;Brian Curtin vừa gửi thông báo trên hộp thư chung &lt;strong&gt;python-dev&lt;/strong&gt; với nội dung như sau:&lt;/p&gt;
&lt;blockquote&gt;
Vào ngày 28 tháng 12, một cá nhân chưa xác định được đã sử dụng một lỗi chưa công bố để tấn công &lt;a class="reference external" href="http://wiki.python.org"&gt;http://wiki.python.org&lt;/a&gt;. Cá nhân này đã lấy được quyền …&lt;/blockquote&gt;</summary><content type="html">&lt;p&gt;Brian Curtin vừa gửi thông báo trên hộp thư chung &lt;strong&gt;python-dev&lt;/strong&gt; với nội dung như sau:&lt;/p&gt;
&lt;blockquote&gt;
Vào ngày 28 tháng 12, một cá nhân chưa xác định được đã sử dụng một lỗi chưa công bố để tấn công &lt;a class="reference external" href="http://wiki.python.org"&gt;http://wiki.python.org&lt;/a&gt;. Cá nhân này đã lấy được quyền truy cập như người dùng &lt;strong&gt;moin&lt;/strong&gt; trên máy chủ, nhưng các dịch vụ khác vẫn chưa bị ảnh hưởng.&lt;/blockquote&gt;
&lt;p&gt;Mọi dữ liệu cá nhân cũng như mật khẩu tại &lt;a class="reference external" href="http://wiki.python.org"&gt;http://wiki.python.org&lt;/a&gt; xem như đã nằm trong tay kẻ xấu. Nếu bạn có truy cập và tạo tài khoản trên trang &lt;a class="reference external" href="http://wiki.python.org"&gt;http://wiki.python.org&lt;/a&gt; và sử dụng cùng mật khẩu ở các trang mạng khác thì hãy đổi ngay mật khẩu ở các trang mạng khác đó.&lt;/p&gt;
&lt;p&gt;Thông tin cập nhật sẽ được Brian Curtin gửi trên &lt;strong&gt;python-dev&lt;/strong&gt;.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="moin"></category><category term="security"></category></entry><entry><title>Python - Ngôn Ngữ Lập Trình Tốt Nhất</title><link href="2011/12/python-ngon-ngu-lap-trinh-tot-nhat.html" rel="alternate"></link><published>2011-12-09T19:13:00+07:00</published><updated>2011-12-09T19:13:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2011-12-09:2011/12/python-ngon-ngu-lap-trinh-tot-nhat.html</id><summary type="html">&lt;p&gt;Tạp chí Linux Journal đã công bố kết quả khảo sát người đọc hàng năm của mình vào ngày 01 tháng 12 vừa qua. Theo đánh giá này, Python lại một lần nữa trong suốt ba năm liên tục được người đọc đánh giá là &lt;strong&gt;ngôn ngữ lập trình tốt …&lt;/strong&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;Tạp chí Linux Journal đã công bố kết quả khảo sát người đọc hàng năm của mình vào ngày 01 tháng 12 vừa qua. Theo đánh giá này, Python lại một lần nữa trong suốt ba năm liên tục được người đọc đánh giá là &lt;strong&gt;ngôn ngữ lập trình tốt nhất&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Thông tin chi tiết có thể được xem thêm từ nguồn &lt;a class="reference external" href="http://www.linuxjournal.com/slideshow/readers-choice-2011?page=27"&gt;Linux Journal&lt;/a&gt;.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="python"></category></entry><entry><title>Câu chuyện tối ưu hóa đoạn mã Python</title><link href="2011/10/cau-chuyen-toi-uu-hoa-doan-ma-python.html" rel="alternate"></link><published>2011-10-26T02:21:00+07:00</published><updated>2011-10-26T02:21:00+07:00</updated><author><name>Nguyễn Thành Nam</name></author><id>tag:None,2011-10-26:2011/10/cau-chuyen-toi-uu-hoa-doan-ma-python.html</id><summary type="html">&lt;p&gt;Trên trang blog của Dropbox ngày hôm qua có chia sẻ kinh nghiệm của họ trong việc tối ưu hóa một đoạn mã Python ngắn.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="http://tech.dropbox.com/?p=89"&gt;http://tech.dropbox.com/?p=89&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Kết luận của họ là:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Các kỹ thuật căn bản như &lt;strong&gt;inline hàm&lt;/strong&gt; (inline function), &lt;strong&gt;tự lặp&lt;/strong&gt; (implicit loop …&lt;/li&gt;&lt;/ol&gt;</summary><content type="html">&lt;p&gt;Trên trang blog của Dropbox ngày hôm qua có chia sẻ kinh nghiệm của họ trong việc tối ưu hóa một đoạn mã Python ngắn.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="http://tech.dropbox.com/?p=89"&gt;http://tech.dropbox.com/?p=89&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Kết luận của họ là:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Các kỹ thuật căn bản như &lt;strong&gt;inline hàm&lt;/strong&gt; (inline function), &lt;strong&gt;tự lặp&lt;/strong&gt; (implicit loop), &lt;strong&gt;tận dụng mã C&lt;/strong&gt; đều đúng.&lt;/li&gt;
&lt;li&gt;Cấu trúc &lt;strong&gt;set&lt;/strong&gt; và &lt;strong&gt;dict&lt;/strong&gt; trong Python rất nhanh.&lt;/li&gt;
&lt;li&gt;Việc sử dụng biến &lt;strong&gt;nội bộ thay cho toàn cục&lt;/strong&gt; mặc dù có ích, nhưng không nhiều.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ghép chuỗi&lt;/strong&gt; (string concatenation) nhanh hơn nhiều so với &lt;strong&gt;định dạng chuỗi&lt;/strong&gt; (string interpolation).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Đây là một bài chia sẻ rất hay.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="optimize"></category></entry><entry><title>Hình ảnh tại Software Freedom Day 2010</title><link href="2011/10/hinh-anh-tai-software-freedom-day-2010.html" rel="alternate"></link><published>2011-10-24T00:50:00+07:00</published><updated>2011-10-24T00:50:00+07:00</updated><author><name>Nguyễn Thành Nam</name></author><id>tag:None,2011-10-24:2011/10/hinh-anh-tai-software-freedom-day-2010.html</id><summary type="html">&lt;p&gt;Hôm nay tự nhiên thấy trên máy có mấy tấm hình cũ ở Ngày Phần Mềm Tự Do 2010 vẫn chưa được đăng.&lt;/p&gt;
&lt;p&gt;Năm 2010, thành viên Phan Đắc Anh Huy đã trình bày về phần mềm Vithon Forum (chính là phần mềm được sử dụng để làm Diễn đàn …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Hôm nay tự nhiên thấy trên máy có mấy tấm hình cũ ở Ngày Phần Mềm Tự Do 2010 vẫn chưa được đăng.&lt;/p&gt;
&lt;p&gt;Năm 2010, thành viên Phan Đắc Anh Huy đã trình bày về phần mềm Vithon Forum (chính là phần mềm được sử dụng để làm Diễn đàn của nhóm PCNV). Sau đây là các tấm hình chụp hôm đó.&lt;/p&gt;
&lt;div class="figure"&gt;
&lt;img alt="" src="http://img36.imageshack.us/img36/1311/img20100918104740.th.jpg" /&gt;
&lt;p class="caption"&gt;&lt;a class="reference external" href="http://img36.imageshack.us/i/img20100918104740.jpg/"&gt;http://img36.imageshack.us/i/img20100918104740.jpg/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="figure"&gt;
&lt;img alt="" src="http://img37.imageshack.us/img37/9138/img20100918104748.th.jpg" /&gt;
&lt;p class="caption"&gt;&lt;a class="reference external" href="http://img37.imageshack.us/i/img20100918104748.jpg/"&gt;http://img37.imageshack.us/i/img20100918104748.jpg/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="figure"&gt;
&lt;img alt="" src="http://img97.imageshack.us/img97/2699/img20100918104833.th.jpg" /&gt;
&lt;p class="caption"&gt;&lt;a class="reference external" href="http://img97.imageshack.us/i/img20100918104833.jpg/"&gt;http://img97.imageshack.us/i/img20100918104833.jpg/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Điều kiện ánh sáng tuy không được tốt nhưng cũng phần nào thể hiện được cái đầu du côn và thân hình phì lũ của Huy.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="member"></category><category term="forum"></category></entry><entry><title>Kết quả cuộc thi Đời</title><link href="2011/10/ket-qua-cuoc-thi-doi.html" rel="alternate"></link><published>2011-10-21T10:51:00+07:00</published><updated>2011-10-21T10:51:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2011-10-21:2011/10/ket-qua-cuoc-thi-doi.html</id><summary type="html">&lt;p&gt;Cuộc thi Đời kết thúc vào tuần trước nhưng vì không có điều kiện truy cập Internet nên đến bây giờ ban tổ chức mới có thể công bố kết quả.&lt;/p&gt;
&lt;p&gt;Cuộc thi thu hút &lt;strong&gt;bốn&lt;/strong&gt; bài tham dự từ các bạn sau:&lt;/p&gt;
&lt;table border="1" class="docutils"&gt;
&lt;colgroup&gt;
&lt;col width="53%" /&gt;
&lt;col width="47%" /&gt;
&lt;/colgroup&gt;
&lt;thead valign="bottom"&gt;
&lt;tr&gt;&lt;th class="head"&gt;&lt;strong&gt;Tác giả&lt;/strong&gt;&lt;/th&gt;
&lt;th class="head"&gt;&lt;strong&gt;Bài tham dự&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td&gt;Nhâm Xuân …&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</summary><content type="html">&lt;p&gt;Cuộc thi Đời kết thúc vào tuần trước nhưng vì không có điều kiện truy cập Internet nên đến bây giờ ban tổ chức mới có thể công bố kết quả.&lt;/p&gt;
&lt;p&gt;Cuộc thi thu hút &lt;strong&gt;bốn&lt;/strong&gt; bài tham dự từ các bạn sau:&lt;/p&gt;
&lt;table border="1" class="docutils"&gt;
&lt;colgroup&gt;
&lt;col width="53%" /&gt;
&lt;col width="47%" /&gt;
&lt;/colgroup&gt;
&lt;thead valign="bottom"&gt;
&lt;tr&gt;&lt;th class="head"&gt;&lt;strong&gt;Tác giả&lt;/strong&gt;&lt;/th&gt;
&lt;th class="head"&gt;&lt;strong&gt;Bài tham dự&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td&gt;Nhâm Xuân Nam&lt;/td&gt;
&lt;td&gt;life.py&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Huỳnh Hải Âu&lt;/td&gt;
&lt;td&gt;bilife.py&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Phan Phụng Tiến&lt;/td&gt;
&lt;td&gt;treeoflife.py&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Vũ Khuê&lt;/td&gt;
&lt;td&gt;cuocthidoi.py&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Nhóm PCNV đã sử dụng một chương trình chấm giải đơn giản khác để đánh giá các bài này. Chương trình này chỉ đơn giản là tạo một ma trận MxN phần tử và yêu cầu các bài tham gia tính giá trị của các ô ngẫu nhiên tại một thế hệ trong tương lai.&lt;/p&gt;
&lt;p&gt;Ở vòng đầu tiên, ma trận &lt;strong&gt;1x1&lt;/strong&gt; được sử dụng:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
G:\vithon\life&amp;gt;judge.py -c 1 -r 1 -n 10000 bilife.Board life.MainBoard treeoflife.Board cuocthidoi.Board
Generating random test case
Width = 1
Height = 1

0

Executing bilife.Board
Executing life.MainBoard
Executing treeoflife.Board
Executing cuocthidoi.Board

Checking for cell (0, 0)
Traceback (most recent call last):
  File &amp;quot;G:\vithon\life\judge.py&amp;quot;, line 120, in &amp;lt;module&amp;gt;
    main()
  File &amp;quot;G:\vithon\life\judge.py&amp;quot;, line 96, in main
    if results[module_name]['object'].get_cell(row, col):
  File &amp;quot;G:\vithon\life\treeoflife.py&amp;quot;, line 160, in get_cell
    raise ValueError()
ValueError
&lt;/pre&gt;
&lt;p&gt;Vì sinh ra lỗi nên mô-đun &lt;strong&gt;treeoflife&lt;/strong&gt; đã bị loại.&lt;/p&gt;
&lt;p&gt;Ở vòng hai, ma trận &lt;strong&gt;2x2&lt;/strong&gt; được sử dụng và chỉ tính một thế hệ tương lai:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
G:\vithon\life&amp;gt;judge.py -c 2 -r 2 -n 1 bilife.Board life.MainBoard cuocthidoi.Board
Generating random test case
Width = 2
Height = 2

1 1
0 1

Executing bilife.Board
Executing life.MainBoard
Executing cuocthidoi.Board

Checking for cell (0, 1)
*** alive count = 2, dead_count = 1
bilife is eliminated

Checking for cell (1, 0)
*** alive count = 3, dead_count = 0

Checking for cell (0, 0)
*** alive count = 2, dead_count = 1
bilife is eliminated

Checking for cell (1, 1)
*** alive count = 2, dead_count = 1
bilife is eliminated

RESULT:
[+] cuocthidoi : 0.000000 seconds
[+] life : 0.000000 seconds
[-] bilife : 0.000000 seconds
&lt;/pre&gt;
&lt;p&gt;Với lần chạy này, chỉ có mô-đun &lt;strong&gt;bilife&lt;/strong&gt; đưa ra kết quả sai cho trường hợp ô &lt;strong&gt;(0, 1)&lt;/strong&gt;. Chương trình chấm so sánh kết quả của mô-đun với kết quả của &lt;strong&gt;số đông&lt;/strong&gt;. Trong trường hợp này, số đông đã đúng.&lt;/p&gt;
&lt;p&gt;Sau hai lần chạy, chỉ còn lại hai mô-đun &lt;strong&gt;life&lt;/strong&gt; và &lt;strong&gt;cuocthidoi&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Lần chạy thứ ba sử dụng ma trận &lt;strong&gt;2x2&lt;/strong&gt; với một thế hệ:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
G:\vithon\life&amp;gt;judge.py -c 2 -r 2 -n 1 life.MainBoard cuocthidoi.Board
Generating random test case
Width = 2
Height = 2

1 0
0 0

Executing life.MainBoard
Executing cuocthidoi.Board

Checking for cell (0, 0)
*** alive count = 1, dead_count = 1
life is eliminated

Checking for cell (1, 1)
*** alive count = 0, dead_count = 2

Checking for cell (1, 0)
*** alive count = 0, dead_count = 2

Checking for cell (1, 0)
*** alive count = 0, dead_count = 2

RESULT:
[-] life : 0.000000 seconds
[+] cuocthidoi : 0.000000 seconds
&lt;/pre&gt;
&lt;p&gt;Với lần chạy này, &lt;strong&gt;life&lt;/strong&gt; đã bị loại, và chỉ còn &lt;strong&gt;cuocthidoi&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Tóm lại, sau ba vòng chạy thì chỉ có mô-đun &lt;strong&gt;cuocthidoi&lt;/strong&gt; đưa ra đáp án đúng. Tuy nhiên, giải này không có người chiến thắng vì mục tiêu của giải là thi về tốc độ thực thi. Khi chỉ có một đối thủ trong cuộc thi thì giải trở nên vô nghĩa. Hơn nữa, bài tham dự &lt;strong&gt;cuocthidoi.py&lt;/strong&gt; đã không thực hiện đúng quy chế thứ 3 trong thể lệ tham gia nên cũng bị loại. Mặc dù không có người chiến thắng nhưng nhóm PCNV xin chúc mừng tác giả &lt;strong&gt;Vũ Khuê&lt;/strong&gt; đã vượt qua các đối thủ khác trong cuộc thi.&lt;/p&gt;
&lt;p&gt;Nói tóm lại, giải đã không đạt được mục tiêu đề ra ban đầu. Xin hẹn gặp các bạn ở các giải sau!&lt;/p&gt;
</content><category term="Tin tức"></category><category term="python"></category><category term="contest"></category></entry><entry><title>Cuộc thi Đời</title><link href="2011/09/cuoc-thi-doi.html" rel="alternate"></link><published>2011-09-15T06:36:00+07:00</published><updated>2011-09-15T06:36:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2011-09-15:2011/09/cuoc-thi-doi.html</id><summary type="html">&lt;p&gt;Nhóm PCNV hân hạnh tổ chức một cuộc thi nhỏ với giải thưởng lớn!&lt;/p&gt;
&lt;p&gt;Game of Life, tạm dịch Trò chơi Đời, là một mô phỏng trạng thái các điểm trên một ma trận MxN đơn giản. Các điểm trên ma trận có trạng thái hoặc là sống, hoặc là …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Nhóm PCNV hân hạnh tổ chức một cuộc thi nhỏ với giải thưởng lớn!&lt;/p&gt;
&lt;p&gt;Game of Life, tạm dịch Trò chơi Đời, là một mô phỏng trạng thái các điểm trên một ma trận MxN đơn giản. Các điểm trên ma trận có trạng thái hoặc là sống, hoặc là chết. Trạng thái của một ma trận được gọi là một thế hệ. Các điểm trên ma trận ở thế hệ &lt;strong&gt;G&lt;/strong&gt; sẽ tuân theo các luật sau để xác định trạng thái của chúng ở thế hệ &lt;strong&gt;G + 1&lt;/strong&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Nếu số lượng các điểm sống chung quanh điểm hiện tại là 3, thì điểm hiện tại sẽ sống.&lt;/li&gt;
&lt;li&gt;Nếu số lượng các điểm sống chung quanh điểm hiện tại là 2, thì điểm hiện tại sẽ tiếp tục giữ trạng thái hiện tại.&lt;/li&gt;
&lt;li&gt;Nếu số lượng các điểm sống chung quanh điểm hiện tại nhỏ hơn 2, hoặc lớn hơn 3, điểm hiện tại sẽ chết.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Cuộc thi Đời&lt;/strong&gt; là sự tranh đua của các mã nguồn Python thực hiện việc tối ưu hóa cách thể hiện mô phỏng trên. Thể lệ của cuộc thi bao gồm:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Bài tham dự gửi về địa chỉ thư admin tại vithon.org.&lt;/li&gt;
&lt;li&gt;Bài tham dự chỉ được sử dụng ngôn ngữ Python, và các thư viện chuẩn đi kèm.&lt;/li&gt;
&lt;li&gt;Bài tham dự chỉ cần hiện thực hóa lớp mẫu bên dưới bằng cách kế thừa nó và cài đặt các phương thức cần thiết.&lt;/li&gt;
&lt;li&gt;Yếu tố cơ bản để đánh giá là tốc độ chạy của chương trình.&lt;/li&gt;
&lt;li&gt;Hạn tham dự là hết ngày 15 tháng 10 năm 2011.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chỉ có một&lt;/strong&gt; giải có trị giá &lt;strong&gt;tương đương 250 đô la Singapore&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Quyết định của ban tổ chức là cuối cùng, xin không nhận khiếu nại.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Board&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;object&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="sd"&gt;&amp;#39;&amp;#39;&amp;#39;Represents the Game of Life matrix.&lt;/span&gt;

&lt;span class="sd"&gt;  Each cell has at most 8 neighbors. A cell may have less than 8 neighbors.&lt;/span&gt;
&lt;span class="sd"&gt;  For example, a cell at (0, 0) would have only three neightbors (0, 1),&lt;/span&gt;
&lt;span class="sd"&gt;  (1, 0) and (1, 1).&lt;/span&gt;

&lt;span class="sd"&gt;  The cells are addressed in a row-major (row first) manner. The index starts&lt;/span&gt;
&lt;span class="sd"&gt;  from zero.&lt;/span&gt;

&lt;span class="sd"&gt;  &amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
      &lt;span class="sd"&gt;&amp;#39;&amp;#39;&amp;#39;Initializes this board.&lt;/span&gt;

&lt;span class="sd"&gt;      Args:&lt;/span&gt;
&lt;span class="sd"&gt;          width (int): Number of cells in a row.&lt;/span&gt;
&lt;span class="sd"&gt;          height (int): Number of rows in this board.&lt;/span&gt;

&lt;span class="sd"&gt;      &amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;

      &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="bp"&gt;NotImplemented&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
      &lt;span class="sd"&gt;&amp;#39;&amp;#39;&amp;#39;Transform this board into next ``n`` generation(s).&lt;/span&gt;

&lt;span class="sd"&gt;      The transformation is in place similar to ``list.sort``.&lt;/span&gt;
&lt;span class="sd"&gt;      No value is returned to the caller.&lt;/span&gt;

&lt;span class="sd"&gt;      Args:&lt;/span&gt;
&lt;span class="sd"&gt;          n (int): Number of generations.&lt;/span&gt;

&lt;span class="sd"&gt;      Raises:&lt;/span&gt;
&lt;span class="sd"&gt;          ValueError: If n is smaller than 1.&lt;/span&gt;

&lt;span class="sd"&gt;      &amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;

      &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="bp"&gt;NotImplemented&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_cell&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;col&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
      &lt;span class="sd"&gt;&amp;#39;&amp;#39;&amp;#39;Returns the state of the cell at row ``row`` and column ``col``.&lt;/span&gt;

&lt;span class="sd"&gt;      Args:&lt;/span&gt;
&lt;span class="sd"&gt;          row (int): The row, zero-indexed.&lt;/span&gt;
&lt;span class="sd"&gt;          col (int): The column, zero-indexed.&lt;/span&gt;

&lt;span class="sd"&gt;      Returns:&lt;/span&gt;
&lt;span class="sd"&gt;          True: If the cell is alive.&lt;/span&gt;
&lt;span class="sd"&gt;          False: If the cell is dead.&lt;/span&gt;

&lt;span class="sd"&gt;      &amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;

      &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="bp"&gt;NotImplemented&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;set_cell&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;col&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
      &lt;span class="sd"&gt;&amp;#39;&amp;#39;&amp;#39;Sets a cell at row ``row`` and column ``col`` to state ``state``.&lt;/span&gt;

&lt;span class="sd"&gt;      Args:&lt;/span&gt;
&lt;span class="sd"&gt;          row (int): The row, zero-indexed.&lt;/span&gt;
&lt;span class="sd"&gt;          col (int): The column, zero-indexed.&lt;/span&gt;
&lt;span class="sd"&gt;          state (bool): Cell&amp;#39;s state.&lt;/span&gt;

&lt;span class="sd"&gt;      &amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;

      &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="bp"&gt;NotImplemented&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_row&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
      &lt;span class="sd"&gt;&amp;#39;&amp;#39;&amp;#39;Returns the states of all cells in row ``row``.&lt;/span&gt;

&lt;span class="sd"&gt;      Args:&lt;/span&gt;
&lt;span class="sd"&gt;          row (int): The row, zero-indexed.&lt;/span&gt;

&lt;span class="sd"&gt;      Returns:&lt;/span&gt;
&lt;span class="sd"&gt;          A sequence of bools.&lt;/span&gt;

&lt;span class="sd"&gt;      &amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;

      &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="bp"&gt;NotImplemented&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Mọi thắc mắc và thảo luận xin vui lòng gửi lên &lt;a class="reference external" href="forum.vithon.org"&gt;diễn đàn&lt;/a&gt;.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="python"></category><category term="game"></category><category term="contest"></category></entry><entry><title>Python 3.2.2 ra đời</title><link href="2011/09/python-322-ra-doi.html" rel="alternate"></link><published>2011-09-05T07:03:00+07:00</published><updated>2011-09-05T07:03:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2011-09-05:2011/09/python-322-ra-doi.html</id><summary type="html">&lt;p&gt;Khoảng 10 tiếng trước, Georg Brandl đã gửi một bức thư điện tử lên hộp thư chung python-dev để công bố sự ra đời của phiên bản Python 3.2.2.&lt;/p&gt;
&lt;p&gt;Python 3.2.2 về cơ bản là phiên bản sửa lỗi, đặc biệt là lỗi &lt;a class="reference external" href="http://bugs.python.org/12576"&gt;trong mô-đun urllib …&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;Khoảng 10 tiếng trước, Georg Brandl đã gửi một bức thư điện tử lên hộp thư chung python-dev để công bố sự ra đời của phiên bản Python 3.2.2.&lt;/p&gt;
&lt;p&gt;Python 3.2.2 về cơ bản là phiên bản sửa lỗi, đặc biệt là lỗi &lt;a class="reference external" href="http://bugs.python.org/12576"&gt;trong mô-đun urllib.request&lt;/a&gt; xảy ra trong 3.2.1.&lt;/p&gt;
&lt;p&gt;Phiên bản 3.2.2 có thể được tải về từ địa chỉ &lt;a class="reference external" href="http://www.python.org/download/releases/3.2.2/"&gt;http://www.python.org/download/releases/3.2.2/&lt;/a&gt;.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="python"></category><category term="release"></category></entry><entry><title>Python Tools cho Visual Studio</title><link href="2011/08/python-tools-cho-visual-studio.html" rel="alternate"></link><published>2011-08-31T09:37:00+07:00</published><updated>2011-08-31T09:37:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2011-08-31:2011/08/python-tools-cho-visual-studio.html</id><summary type="html">&lt;p&gt;Ngày 29 tháng 08 vừa qua, Microsoft đã tung ra phiên bản đầu tiên của phần mềm miễn phí, nguồn mở &lt;a class="reference external" href="http://pytools.codeplex.com/"&gt;Python Tools&lt;/a&gt; dành cho Visual Studio.&lt;/p&gt;
&lt;p&gt;Với công cụ này, người dùng sẽ sử dụng giao diện quen thuộc của Visual Studio để viết mã theo ngôn ngữ Python …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ngày 29 tháng 08 vừa qua, Microsoft đã tung ra phiên bản đầu tiên của phần mềm miễn phí, nguồn mở &lt;a class="reference external" href="http://pytools.codeplex.com/"&gt;Python Tools&lt;/a&gt; dành cho Visual Studio.&lt;/p&gt;
&lt;p&gt;Với công cụ này, người dùng sẽ sử dụng giao diện quen thuộc của Visual Studio để viết mã theo ngôn ngữ Python. Một số tính năng chính bao gồm trình soạn thảo, quản lý dự án, trình gỡ rối, hỗ trợ Intellisense và Refactoring, hỗ trợ IronPython lẫn CPython. Ngoài ra, nếu sử dụng Visual Studio phiên bản Ultimate, người dùng sẽ có thêm cả trình Profiler.&lt;/p&gt;
&lt;p&gt;Công cụ Python Tools cho Visual Studio cần phiên bản &lt;a class="reference external" href="http://www.microsoft.com/downloads/en/details.aspx?familyid=8E5AA7B6-8436-43F0-B778-00C3BCA733D3&amp;amp;displaylang=en"&gt;Visual Studio Shell&lt;/a&gt; miễn phí, hoặc Visual Studio phiên bản Pro trở lên. Công cụ này không sử dụng chung với Visual Studio Express được.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="ide"></category></entry><entry><title>Vithon nâng cấp sử dụng Gevent</title><link href="2011/08/vithon-nang-cap-su-dung-gevent.html" rel="alternate"></link><published>2011-08-01T01:25:00+07:00</published><updated>2011-08-01T01:25:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2011-08-01:2011/08/vithon-nang-cap-su-dung-gevent.html</id><summary type="html">&lt;p&gt;Suốt thời gian qua, nhóm PCNV đã sử dụng chế độ CGI để chạy các ứng dụng web và vẫn đảm bảo được việc truy cập của các bạn quan tâm đến ngôn ngữ Python.&lt;/p&gt;
&lt;p&gt;Tuy nhiên, để tránh các vấn đề kỹ thuật có thể phát sinh khi số …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Suốt thời gian qua, nhóm PCNV đã sử dụng chế độ CGI để chạy các ứng dụng web và vẫn đảm bảo được việc truy cập của các bạn quan tâm đến ngôn ngữ Python.&lt;/p&gt;
&lt;p&gt;Tuy nhiên, để tránh các vấn đề kỹ thuật có thể phát sinh khi số lượng thành viên tăng lên, cũng như do đòi hỏi của một số tính năng trên diễn đàn, nhóm PCNV đã chuyển hai ứng dụng web là Zine và Vithon Forum qua chạy cùng Gevent, tận dụng chế độ trao đổi không đồng bộ. Việc chuyển đổi này hy vọng sẽ khiến tốc độ truy cập được cải tiến đáng kể.&lt;/p&gt;
&lt;p&gt;Nếu các bạn gặp trục trặc trong việc truy cập vào trang PCNV và diễn đàn, thì các bạn hãy thông báo cho chúng tôi theo thông tin liên lạc ở đầu trang.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="cgi"></category><category term="wsgi"></category><category term="gevent"></category><category term="vithon"></category></entry><entry><title>Thomas Heller ra đi</title><link href="2011/03/thomas-heller-ra-di.html" rel="alternate"></link><published>2011-03-21T03:28:00+07:00</published><updated>2011-03-21T03:28:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2011-03-21:2011/03/thomas-heller-ra-di.html</id><summary type="html">&lt;p&gt;Ngày 19 tháng 03, Thomas Heller đã tự đề nghị nhóm phát triển Python tước quyền cập nhật của ông.&lt;/p&gt;
&lt;p&gt;Thomas Heller là tác giả gói &lt;strong&gt;ctypes&lt;/strong&gt;, được sử dụng rất nhiều trong việc kết nối Python với các thư viện ngoài.&lt;/p&gt;
&lt;p&gt;Thomas ra đi vì không còn nhiều thời …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ngày 19 tháng 03, Thomas Heller đã tự đề nghị nhóm phát triển Python tước quyền cập nhật của ông.&lt;/p&gt;
&lt;p&gt;Thomas Heller là tác giả gói &lt;strong&gt;ctypes&lt;/strong&gt;, được sử dụng rất nhiều trong việc kết nối Python với các thư viện ngoài.&lt;/p&gt;
&lt;p&gt;Thomas ra đi vì không còn nhiều thời gian để cập nhật &lt;strong&gt;ctypes&lt;/strong&gt; nữa. Và điều đó để lại một lỗ hổng to trong việc duy trì, sửa lỗi mô-đun quan trọng này.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="quit"></category><category term="ctypes"></category><category term="thomas heller"></category></entry><entry><title>Hội thảo PyCon Châu Á Thái Bình Dương 2011</title><link href="2011/02/hoi-thao-pycon-chau-a-thai-binh-duong-2011.html" rel="alternate"></link><published>2011-02-14T11:07:00+07:00</published><updated>2011-02-14T11:07:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2011-02-14:2011/02/hoi-thao-pycon-chau-a-thai-binh-duong-2011.html</id><content type="html">&lt;img alt="" src="http://pycon.sit.rp.sg/logo.png" /&gt;
&lt;p&gt;Hội thảo PyCon APAC 2011 đã mở cửa kêu gọi bài đăng ký.&lt;/p&gt;
&lt;p&gt;Để biết thêm chi tiết và gửi bài tham gia, hoặc đăng ký dự, các bạn hãy vào trang &lt;a class="reference external" href="http://apac.pycon.org/"&gt;http://apac.pycon.org/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;PCNV là một trong các nhóm hỗ trợ hội thảo.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="2011"></category><category term="pycon"></category><category term="apac"></category></entry><entry><title>Kết quả 100 phát 100 trúng</title><link href="2010/12/ket-qua-100-phat-100-trung.html" rel="alternate"></link><published>2010-12-21T04:38:00+07:00</published><updated>2010-12-21T04:38:00+07:00</updated><author><name>Nguyễn Thành Nam</name></author><id>tag:None,2010-12-21:2010/12/ket-qua-100-phat-100-trung.html</id><summary type="html">&lt;p&gt;Để tóm gọn và đỡ tốn thời gian, giải thưởng thuộc về Nhâm Xuân Nam (cũng là người thắng giải &lt;a class="reference external" href="http://www.vithon.org/2010/06/03"&gt;http://www.vithon.org/2010/06/03&lt;/a&gt;/kết-quả-cuộc-thi-giải-toan-bằng-python).&lt;/p&gt;
&lt;p&gt;Sau đây là bài &lt;strong&gt;fire_in_the_hole.py&lt;/strong&gt; của Nhâm Xuân Nam:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="sd"&gt;&amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class="sd"&gt;Created on Dec 15, 2010&lt;/span&gt;

&lt;span class="sd"&gt;@author: namnx&lt;/span&gt;
&lt;span class="sd"&gt;&amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;entity&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;random&lt;/span&gt;
&lt;span class="kn"&gt;import …&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;Để tóm gọn và đỡ tốn thời gian, giải thưởng thuộc về Nhâm Xuân Nam (cũng là người thắng giải &lt;a class="reference external" href="http://www.vithon.org/2010/06/03"&gt;http://www.vithon.org/2010/06/03&lt;/a&gt;/kết-quả-cuộc-thi-giải-toan-bằng-python).&lt;/p&gt;
&lt;p&gt;Sau đây là bài &lt;strong&gt;fire_in_the_hole.py&lt;/strong&gt; của Nhâm Xuân Nam:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="sd"&gt;&amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class="sd"&gt;Created on Dec 15, 2010&lt;/span&gt;

&lt;span class="sd"&gt;@author: namnx&lt;/span&gt;
&lt;span class="sd"&gt;&amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;entity&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;random&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;inspect&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HolePlayer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Player&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;name_ship&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ship&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;repr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ship&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="vm"&gt;__class__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;on_hit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                &lt;span class="c1"&gt;# dont care&lt;/span&gt;
                &lt;span class="k"&gt;pass&lt;/span&gt;

        &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;orient_ship&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ship&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;entity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HORIZONTAL&lt;/span&gt;

        &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;place_ship&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ship&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                        &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;randint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ocean&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                        &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;randint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ocean&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;t_ocean&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                                &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;t_ocean&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;entity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Ocean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ocean&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ocean&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                                &lt;span class="n"&gt;ship&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;place&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;t_ocean&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                                &lt;span class="k"&gt;pass&lt;/span&gt;

        &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;lock_missile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ship&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                &lt;span class="n"&gt;opponent_ships&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_opponent_ships&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;step&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;ship&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="vm"&gt;__class__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;entity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Destroyer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                                &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;opponent_ships&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                                        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="vm"&gt;__class__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;ship&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="vm"&gt;__class__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;orientation&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;ship&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;orientation&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                                                &lt;span class="k"&gt;break&lt;/span&gt;
                                &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;step&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
                                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

                        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;opponent_ships&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="vm"&gt;__class__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;ship&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="vm"&gt;__class__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                                        &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;step&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
                        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;opponent_ships&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="vm"&gt;__class__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;entity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MissileCruiser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                                        &lt;span class="k"&gt;break&lt;/span&gt;
                        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;ship&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="vm"&gt;__class__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;entity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MissileCruiser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;orientation&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;entity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HORIZONTAL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                                        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                                &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                                        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;orientation&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;entity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HORIZONTAL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                                        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                                &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                                        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


        &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_opponent_ships&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                &lt;span class="n"&gt;frames&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;inspect&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
                &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;frame&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;frames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;__turn&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                                &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

                &lt;span class="n"&gt;gameObj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;f_locals&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;self&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gameObj&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;players&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
                        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;gameObj&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;players&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="vm"&gt;__class__&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="vm"&gt;__class__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                                &lt;span class="k"&gt;break&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;gameObj&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ships&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HolePlayer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;t_ocean&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;
        &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;step&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Xin chúc mừng bạn Xuân Nam.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="battleship"></category><category term="bach phat bach trung"></category></entry><entry><title>Giải phụ bách phát bách trúng</title><link href="2010/12/giai-phu-bach-phat-bach-trung.html" rel="alternate"></link><published>2010-12-13T08:08:00+07:00</published><updated>2010-12-13T08:08:00+07:00</updated><author><name>Nguyễn Thành Nam</name></author><id>tag:None,2010-12-13:2010/12/giai-phu-bach-phat-bach-trung.html</id><summary type="html">&lt;p&gt;Cuộc tranh tài &lt;a class="reference external" href="http://www.vithon.org/2010/12/13/kết-quả-bắn-suồng"&gt;Bắn Suồng&lt;/a&gt; tuy đã kết thúc nhưng dư âm (và cả bao nỗi niềm ấm ức, tức tưởi) của nó vẫn còn vấn vương trong tâm trí các bạn tham gia.&lt;/p&gt;
&lt;p&gt;Vì vậy, mình xin đề nghị một giải phụ của Bắn Suồng với thể lệ như …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Cuộc tranh tài &lt;a class="reference external" href="http://www.vithon.org/2010/12/13/kết-quả-bắn-suồng"&gt;Bắn Suồng&lt;/a&gt; tuy đã kết thúc nhưng dư âm (và cả bao nỗi niềm ấm ức, tức tưởi) của nó vẫn còn vấn vương trong tâm trí các bạn tham gia.&lt;/p&gt;
&lt;p&gt;Vì vậy, mình xin đề nghị một giải phụ của Bắn Suồng với thể lệ như sau:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Nếu bạn tạo được một suồng &amp;quot;bách phát bách trúng&amp;quot;, mình sẽ tặng áo với chữ ký của người sáng lập nhóm PCNV. Điều này cũng có nghĩa là có thể có nhiều hơn một bài thắng giải.&lt;/li&gt;
&lt;li&gt;&amp;quot;Bách phát bách trúng&amp;quot; được hiểu theo nghĩa một phát bắn phải trúng ít nhất một tàu.&lt;/li&gt;
&lt;li&gt;Bạn có thể sử dụng mọi kỹ thuật (mũ đen hay trắng) để làm việc này.&lt;/li&gt;
&lt;li&gt;Thời hạn nhận bài là hết ngày 19 tháng 12 năm 2010.&lt;/li&gt;
&lt;li&gt;Bài tham gia phải sử dụng ngôn ngữ Python làm ngôn ngữ chính, và nộp mã nguồn.&lt;/li&gt;
&lt;li&gt;Bài tham gia gửi về cho admin+thư+rác&amp;#64;vithon.org (nhớ bỏ phần chống spam phía sau nhé).&lt;/li&gt;
&lt;li&gt;Mình xin giữ toàn quyền quyết định kết quả.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Chúc may mắn.&lt;/p&gt;
</content><category term="Tin tức"></category></entry><entry><title>Kết quả Bắn Suồng</title><link href="2010/12/ket-qua-ban-suong.html" rel="alternate"></link><published>2010-12-13T07:54:00+07:00</published><updated>2010-12-13T07:54:00+07:00</updated><author><name>Nguyễn Thành Nam</name></author><id>tag:None,2010-12-13:2010/12/ket-qua-ban-suong.html</id><summary type="html">&lt;p&gt;Ngày hôm qua tại Đại học RMIT, nhóm PCNV đã tổ chức thi Bắn Suồng trực tiếp (cùng với việc truyền hình trực tiếp) cuộc tranh tài Bắn Suồng.&lt;/p&gt;
&lt;p&gt;Kỳ thi này nhận được bốn bài tham dự: &lt;strong&gt;fire_sheep&lt;/strong&gt;, &lt;strong&gt;checker&lt;/strong&gt;, &lt;strong&gt;randome&lt;/strong&gt;, và &lt;strong&gt;bibo&lt;/strong&gt;. Tuy nhiên, bài &lt;strong&gt;bibo&lt;/strong&gt; vì gửi vào …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ngày hôm qua tại Đại học RMIT, nhóm PCNV đã tổ chức thi Bắn Suồng trực tiếp (cùng với việc truyền hình trực tiếp) cuộc tranh tài Bắn Suồng.&lt;/p&gt;
&lt;p&gt;Kỳ thi này nhận được bốn bài tham dự: &lt;strong&gt;fire_sheep&lt;/strong&gt;, &lt;strong&gt;checker&lt;/strong&gt;, &lt;strong&gt;randome&lt;/strong&gt;, và &lt;strong&gt;bibo&lt;/strong&gt;. Tuy nhiên, bài &lt;strong&gt;bibo&lt;/strong&gt; vì gửi vào 0152 sáng 12/12 nên đã bị loại.&lt;/p&gt;
&lt;p&gt;Kết quả trận tranh tài căng thẳng, và đầy hồi hộp (lẫn may mắn) là:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;strong&gt;fire_sheep&lt;/strong&gt; thắng &lt;strong&gt;checker&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fire_sheep&lt;/strong&gt; thua &lt;strong&gt;randome&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;checker&lt;/strong&gt; thua &lt;strong&gt;randome&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Như vậy, &amp;quot;suồng&amp;quot; randome đã đăng quang vô địch kỳ thi lần này. Tác giả của &lt;strong&gt;randome&lt;/strong&gt;, không ai khác, chính là tác giả của tin này :-D.&lt;/p&gt;
&lt;p&gt;Hẹn gặp các bạn vào những kỳ thi thú vị tới.&lt;/p&gt;
&lt;p&gt;Tái bút: Mã nguồn của Bắn Suồng và các bài tranh tài có thể được tải về tại &lt;a class="reference external" href="http://www.vithon.org/static/ban-suong.zip"&gt;http://www.vithon.org/static/ban-suong.zip&lt;/a&gt;.&lt;/p&gt;
</content><category term="Tin tức"></category></entry><entry><title>Tranh tài Bắn Suồng</title><link href="2010/11/tranh-tai-ban-suong.html" rel="alternate"></link><published>2010-11-26T03:23:00+07:00</published><updated>2010-11-26T03:23:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2010-11-26:2010/11/tranh-tai-ban-suong.html</id><summary type="html">&lt;p&gt;Cập nhật: Phiên bản &lt;tt class="docutils literal"&gt;battleship.zip&lt;/tt&gt; cũ có lỗi. Các bạn tải về bản mới hoặc sửa dòng &lt;tt class="docutils literal"&gt;player2_mod = __import__(opts.player_1)&lt;/tt&gt; thành &lt;tt class="docutils literal"&gt;player2_mod = __import__(opts.player_2)&lt;/tt&gt;. Xin cáo lỗi vì sự phiền toái này.&lt;/p&gt;
&lt;p&gt;Nhóm PCNV hân hạnh tổ chức một cuộc thi mới: &lt;strong&gt;Tranh tài Bắn Suồng!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bắn …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Cập nhật: Phiên bản &lt;tt class="docutils literal"&gt;battleship.zip&lt;/tt&gt; cũ có lỗi. Các bạn tải về bản mới hoặc sửa dòng &lt;tt class="docutils literal"&gt;player2_mod = __import__(opts.player_1)&lt;/tt&gt; thành &lt;tt class="docutils literal"&gt;player2_mod = __import__(opts.player_2)&lt;/tt&gt;. Xin cáo lỗi vì sự phiền toái này.&lt;/p&gt;
&lt;p&gt;Nhóm PCNV hân hạnh tổ chức một cuộc thi mới: &lt;strong&gt;Tranh tài Bắn Suồng!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bắn Suồng (xin lỗi vì sai chính tả, nhưng để giữ chữ viết tắt BS nên tôi đành phải đặt tên trò chơi là vậy) không phải là một trò chơi thông thường. Để chơi trò chơi này, các bạn phải viết mã bằng ngôn ngữ... (cho xin 500 đồng trống và kèn cho hào hứng tí nào) Python để điều khiển các đối tượng trong trò chơi.&lt;/p&gt;
&lt;p&gt;Các bạn có thể tải trò chơi về tại địa chỉ &lt;a class="reference external" href="http://www.vithon.org/static/battleship.zip"&gt;http://www.vithon.org/static/battleship.zip&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Cuộc thi Bắn Suồng được tổ chức với thể lệ như sau:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Mô-đun (các tập tin &lt;strong&gt;.py&lt;/strong&gt;) tham gia phải gửi về cho admin+thư-rác&amp;#64;vithon.org (bỏ phần + thư rác) trước ngày 12 tháng 12 năm 2010.&lt;/li&gt;
&lt;li&gt;Các bài thi này sẽ được kiểm tra trước khi được chấp nhận cho thi.&lt;/li&gt;
&lt;li&gt;Các bài tham dự sẽ đấu vòng tròn tính điểm. Thắng sẽ được 3 điểm, hòa được 1, và thua được 0 điểm.&lt;/li&gt;
&lt;li&gt;Các trận đấu sẽ được truyền hình (qua web) trực tiếp vào ngày 12 tháng 12.&lt;/li&gt;
&lt;li&gt;Vùng biển sẽ có kích thước ngẫu nhiên với độ rộng và dài tối thiểu là 10, và tối đa là 15.&lt;/li&gt;
&lt;li&gt;Một giải nhất sẽ nhận được 01 chiếc áo Vithon miễn phí, và có thể mua thêm 01 chiếc áo khác với giá ưu đãi &lt;strong&gt;100.000&lt;/strong&gt;!&lt;/li&gt;
&lt;li&gt;Quyết định của ban tổ chức là cuối cùng. Xin được phép không nhận khiếu nại.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Để trao đổi về cuộc thi này, cũng như các vấn đề liên quan đến lập trình Python, các bạn có thể sử dụng &lt;a class="reference external" href="forum.vithon.org"&gt;diễn đàn&lt;/a&gt; của nhóm hoặc liên hệ qua IRC.&lt;/p&gt;
&lt;p&gt;Nhóm PCNV rất mong nhận được sự tham gia nhiệt tình của các bạn.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="battleship"></category><category term="game"></category><category term="contest"></category></entry><entry><title>Áo Vithon thành phẩm</title><link href="2010/11/ao-vithon-thanh-pham.html" rel="alternate"></link><published>2010-11-24T05:26:00+07:00</published><updated>2010-11-24T05:26:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2010-11-24:2010/11/ao-vithon-thanh-pham.html</id><summary type="html">&lt;p&gt;Sau một số trục trặc không lường trước, nhóm PCNV cũng đã nhận được áo Vithon thành phẩm từ nhà in. Nhóm xin được hân hạnh giới thiệu với các bạn một số ảnh chụp áo thật sau:&lt;/p&gt;
&lt;div class="figure"&gt;
&lt;img alt="" src="http://va8.upanh.com/thumbpic/16.734.21073133.eds0/img20101124110821.700x0.jpg" /&gt;
&lt;p class="caption"&gt;&lt;a class="reference external" href="http://ca8.upanh.com/16.734.21073133.eds0/img20101124110821.jpg"&gt;Mặt trước&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="figure"&gt;
&lt;img alt="" src="http://va9.upanh.com/thumbpic/16.734.21073134.MGr0/img20101124110836.700x0.jpg" /&gt;
&lt;p class="caption"&gt;&lt;a class="reference external" href="http://ca9.upanh.com/16.734.21073134.MGr0/img20101124110836.jpg"&gt;Mặt sau&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Nhóm PCNV xin cảm ơn nhóm mẫu Mập …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Sau một số trục trặc không lường trước, nhóm PCNV cũng đã nhận được áo Vithon thành phẩm từ nhà in. Nhóm xin được hân hạnh giới thiệu với các bạn một số ảnh chụp áo thật sau:&lt;/p&gt;
&lt;div class="figure"&gt;
&lt;img alt="" src="http://va8.upanh.com/thumbpic/16.734.21073133.eds0/img20101124110821.700x0.jpg" /&gt;
&lt;p class="caption"&gt;&lt;a class="reference external" href="http://ca8.upanh.com/16.734.21073133.eds0/img20101124110821.jpg"&gt;Mặt trước&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="figure"&gt;
&lt;img alt="" src="http://va9.upanh.com/thumbpic/16.734.21073134.MGr0/img20101124110836.700x0.jpg" /&gt;
&lt;p class="caption"&gt;&lt;a class="reference external" href="http://ca9.upanh.com/16.734.21073134.MGr0/img20101124110836.jpg"&gt;Mặt sau&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Nhóm PCNV xin cảm ơn nhóm mẫu Mập Ốm đã mua ủng hộ hai chiếc áo cỡ L và S để tạo ra được hai bức hình đẹp &amp;quot;rạng ngời&amp;quot; này. Một số người đã mặc áo đa số đều có chung nhận định áo mặc &lt;strong&gt;thoải mái lắm&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Áo sẽ được bán với giá &lt;strong&gt;185.000 đồng&lt;/strong&gt; cho những người đang đi làm, và &lt;strong&gt;150.000 đồng&lt;/strong&gt; cho các bạn học sinh, sinh viên đại học trở xuống. Tại TPHCM, mong các bạn ghé địa chỉ 224 Nguyễn Thái Bình, phường 12, quận Tân Bình, trong giờ làm việc từ thứ hai đến thứ sáu mỗi tuần. Các bạn ở tỉnh khác xin vui lòng liên lạc với nhóm PCNV.&lt;/p&gt;
&lt;p&gt;Áo Vithon cũng sẽ được sử dụng làm &lt;strong&gt;giải thưởng&lt;/strong&gt; cho những kỳ thi sắp tới của nhóm PCNV. Mong các bạn hăng hái tham gia giựt giải.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="t-shirt"></category><category term="vithon"></category></entry><entry><title>Giới thiệu áo của nhóm PCNV</title><link href="2010/09/gioi-thieu-ao-cua-nhom-pcnv.html" rel="alternate"></link><published>2010-09-10T04:17:00+07:00</published><updated>2010-09-10T04:17:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2010-09-10:2010/09/gioi-thieu-ao-cua-nhom-pcnv.html</id><summary type="html">&lt;p&gt;Trong mấy tuần vừa qua, nhóm PCNV đã huy động toàn bộ sức lực để hoàn thành mẫu thiết kế áo thun chính thức của nhóm. Xin hân hạnh giới thiệu cùng các bạn thiết kế đầy ấn tượng này.&lt;/p&gt;
&lt;div class="figure"&gt;
&lt;img alt="" src="/static/ao_vithon_truoc_thumb.png" /&gt;
&lt;p class="caption"&gt;&lt;a class="reference external" href="/static/ao_vithon_truoc.png"&gt;Mặt trước&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="figure"&gt;
&lt;img alt="" src="/static/ao_vithon_sau_thumb.png" /&gt;
&lt;p class="caption"&gt;&lt;a class="reference external" href="/static/ao_vithon_sau.png"&gt;Mặt sau&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Hiện áo đang được đưa đi …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Trong mấy tuần vừa qua, nhóm PCNV đã huy động toàn bộ sức lực để hoàn thành mẫu thiết kế áo thun chính thức của nhóm. Xin hân hạnh giới thiệu cùng các bạn thiết kế đầy ấn tượng này.&lt;/p&gt;
&lt;div class="figure"&gt;
&lt;img alt="" src="/static/ao_vithon_truoc_thumb.png" /&gt;
&lt;p class="caption"&gt;&lt;a class="reference external" href="/static/ao_vithon_truoc.png"&gt;Mặt trước&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="figure"&gt;
&lt;img alt="" src="/static/ao_vithon_sau_thumb.png" /&gt;
&lt;p class="caption"&gt;&lt;a class="reference external" href="/static/ao_vithon_sau.png"&gt;Mặt sau&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Hiện áo đang được đưa đi in với số lượng &lt;strong&gt;50&lt;/strong&gt; chiếc. Nếu bạn có nhu cầu muốn đặt mua áo thì vui lòng liên lạc với nhóm PCNV trong &lt;a class="reference external" href="forum.vithon.org"&gt;diễn đàn&lt;/a&gt;, hoặc qua kênh IRC &lt;strong&gt;#vithon&lt;/strong&gt; ở máy chủ &lt;strong&gt;irc.freenode.net&lt;/strong&gt; (&lt;a class="reference external" href="http://webchat.freenode.net"&gt;http://webchat.freenode.net&lt;/a&gt;). Giá dự tính của mỗi chiếc áo sẽ ít hơn &lt;strong&gt;một trăm năm mươi nghìn đồng&lt;/strong&gt;. Do số lượng có hạn nên áo sẽ được phân phát theo phương thức &lt;em&gt;nhanh tay thì còn&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nhóm PCNV không chịu trách nhiệm nếu người mặc áo bị các lập trình viên khác gây chuyện!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Nhóm PCNV trân trọng cảm ơn công sức thâu đêm suốt sáng nhiều tuần liền của các thành viên năng nổ sau:&lt;/p&gt;
&lt;dl class="docutils"&gt;
&lt;dt&gt;Kịch bản&lt;/dt&gt;
&lt;dd&gt;Hoàng Quốc Thịnh&lt;/dd&gt;
&lt;dt&gt;Đạo diễn&lt;/dt&gt;
&lt;dd&gt;Nguyễn Thành Nam&lt;/dd&gt;
&lt;dt&gt;Hiệu ứng&lt;/dt&gt;
&lt;dd&gt;Lê Ngọc Hiếu&lt;/dd&gt;
&lt;dt&gt;Sản xuất&lt;/dt&gt;
&lt;dd&gt;Phan Đắc Anh Huy&lt;/dd&gt;
&lt;dt&gt;Chỉ đạo nghệ thuật&lt;/dt&gt;
&lt;dd&gt;Tập thể diễn viên hài PCNV&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Chúc các bạn vui vẻ!&lt;/p&gt;
</content><category term="Tin tức"></category><category term="t-shirt"></category></entry><entry><title>Cuộc thi viết chương trình theo dõi mã máy</title><link href="2010/07/cuoc-thi-viet-chuong-trinh-theo-doi-ma-may.html" rel="alternate"></link><published>2010-07-22T05:13:00+07:00</published><updated>2010-07-22T05:13:00+07:00</updated><author><name>Nguyễn Thành Nam</name></author><id>tag:None,2010-07-22:2010/07/cuoc-thi-viet-chuong-trinh-theo-doi-ma-may.html</id><summary type="html">&lt;p&gt;Một người bạn của chúng ta đã có nhã ý tài trợ cho một cuộc thi nhỏ.&lt;/p&gt;
&lt;p&gt;Mục tiêu: Viết một công cụ bằng ngôn ngữ Python để thực hiện việc lưu lại những lệnh gọi hàm ở mức hợp ngữ trong khi thực thi của một chương trình thông …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Một người bạn của chúng ta đã có nhã ý tài trợ cho một cuộc thi nhỏ.&lt;/p&gt;
&lt;p&gt;Mục tiêu: Viết một công cụ bằng ngôn ngữ Python để thực hiện việc lưu lại những lệnh gọi hàm ở mức hợp ngữ trong khi thực thi của một chương trình thông thường khác.&lt;/p&gt;
&lt;p&gt;Ví dụ: Với đoạn mã tương tự như sau:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x08048552&lt;/span&gt; &lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;main&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;110&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;        &lt;span class="no"&gt;mov&lt;/span&gt;    &lt;span class="no"&gt;DWORD&lt;/span&gt; &lt;span class="no"&gt;PTR&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;esp&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x08048555&lt;/span&gt; &lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;main&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;113&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;        &lt;span class="no"&gt;call&lt;/span&gt;   &lt;span class="mh"&gt;0x80483d8&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;printf@plt&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x0804855a&lt;/span&gt; &lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;main&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;118&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;        &lt;span class="no"&gt;mov&lt;/span&gt;    &lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0x0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x0804855f&lt;/span&gt; &lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;main&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;        &lt;span class="no"&gt;leave&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x08048560&lt;/span&gt; &lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;main&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;124&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;        &lt;span class="no"&gt;ret&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;thì chương trình sẽ in ra thông tin tương tự (có thể tùy ý chỉnh sửa cho đầy đủ hơn) như sau:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="err"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;Before&lt;/span&gt; &lt;span class="no"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="err"&gt;--------------------------------------------------------------------------[&lt;/span&gt;&lt;span class="nf"&gt;regs&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="nl"&gt;EAX:&lt;/span&gt; &lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x08048646&lt;/span&gt;  &lt;span class="no"&gt;EBX&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0x002B2FF4&lt;/span&gt;  &lt;span class="no"&gt;ECX&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0x00000003&lt;/span&gt;  &lt;span class="no"&gt;EDX&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0xBFFFEF9C&lt;/span&gt;
  &lt;span class="nl"&gt;ESI:&lt;/span&gt; &lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x00000000&lt;/span&gt;  &lt;span class="no"&gt;EDI&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0x00000000&lt;/span&gt;  &lt;span class="no"&gt;EBP&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0xBFFFF0A8&lt;/span&gt;  &lt;span class="no"&gt;ESP&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0xBFFFEF80&lt;/span&gt;

&lt;span class="err"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;After&lt;/span&gt; &lt;span class="no"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="err"&gt;--------------------------------------------------------------------------[&lt;/span&gt;&lt;span class="nf"&gt;regs&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="nl"&gt;EAX:&lt;/span&gt; &lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x0000000A&lt;/span&gt;  &lt;span class="no"&gt;EBX&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0x002B2FF4&lt;/span&gt;  &lt;span class="no"&gt;ECX&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0xBFFFEF68&lt;/span&gt;  &lt;span class="no"&gt;EDX&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0x002B4320&lt;/span&gt;
  &lt;span class="nl"&gt;ESI:&lt;/span&gt; &lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x00000000&lt;/span&gt;  &lt;span class="no"&gt;EDI&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0x00000000&lt;/span&gt;  &lt;span class="no"&gt;EBP&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0xBFFFF0A8&lt;/span&gt;  &lt;span class="no"&gt;ESP&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0xBFFFEF80&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Yêu cầu: Bắt buộc phải sử dụng ngôn ngữ Python cho chương trình chính. Có thể sử dụng thêm các công cụ phụ hoặc thư viện hỗ trợ như GDB, ptrace.&lt;/p&gt;
&lt;p&gt;Hạn nộp bài: Ngày 26 tháng 07 năm 2010&lt;/p&gt;
&lt;p&gt;Nộp bài (mã nguồn) về cho &lt;a class="reference external" href="mailto:admin+frontpage&amp;#64;vithon.org"&gt;admin+frontpage&amp;#64;vithon.org&lt;/a&gt; (xin vui lòng bỏ +frontpage).&lt;/p&gt;
&lt;p&gt;Giải thưởng: Một giải thưởng duy nhất bao gồm 100.000 đồng tiền mặt và một món quà từ Las Vegas.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="gdb"></category><category term="contest"></category><category term="tracer"></category><category term="ptrace"></category></entry><entry><title>Giới thiệu phần mềm Vithon Forum</title><link href="2010/07/gioi-thieu-phan-mem-vithon-forum.html" rel="alternate"></link><published>2010-07-01T11:49:00+07:00</published><updated>2010-07-01T11:49:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2010-07-01:2010/07/gioi-thieu-phan-mem-vithon-forum.html</id><summary type="html">&lt;p&gt;Nhóm Python Cho Người Việt (PCNV) hân hạnh công bố phần mềm &lt;strong&gt;Vithon Forum&lt;/strong&gt; đến với cộng đồng.&lt;/p&gt;
&lt;div class="section" id="gioi-thieu"&gt;
&lt;h2&gt;Giới thiệu&lt;/h2&gt;
&lt;p&gt;Phần mềm Vithon Forum (gọi tắt là &lt;strong&gt;VF&lt;/strong&gt;) 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ự …&lt;/p&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;Nhóm Python Cho Người Việt (PCNV) hân hạnh công bố phần mềm &lt;strong&gt;Vithon Forum&lt;/strong&gt; đến với cộng đồng.&lt;/p&gt;
&lt;div class="section" id="gioi-thieu"&gt;
&lt;h2&gt;Giới thiệu&lt;/h2&gt;
&lt;p&gt;Phần mềm Vithon Forum (gọi tắt là &lt;strong&gt;VF&lt;/strong&gt;) 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="tinh-nang"&gt;
&lt;h2&gt;Tính năng&lt;/h2&gt;
&lt;p&gt;VF có các tính năng nổi trội sau:&lt;/p&gt;
&lt;dl class="docutils"&gt;
&lt;dt&gt;Đơn giản&lt;/dt&gt;
&lt;dd&gt;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...&lt;/dd&gt;
&lt;dt&gt;Nhỏ gọn&lt;/dt&gt;
&lt;dd&gt;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.&lt;/dd&gt;
&lt;dt&gt;An toàn&lt;/dt&gt;
&lt;dd&gt;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 đó.&lt;/dd&gt;
&lt;dt&gt;Thuận tiện&lt;/dt&gt;
&lt;dd&gt;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.&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;div class="section" id="yeu-cau-he-thong"&gt;
&lt;h2&gt;Yêu cầu hệ thống&lt;/h2&gt;
&lt;p&gt;Để triển khai VF, hệ thống sẽ cần một số ứng dụng và mô-đun sau:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Python v2.5 trở lên.&lt;/li&gt;
&lt;li&gt;Mô-đun mako&lt;/li&gt;
&lt;li&gt;Mô-đun werkzeug&lt;/li&gt;
&lt;li&gt;Mô-đun sqlalchemy&lt;/li&gt;
&lt;li&gt;Mô-đun routes&lt;/li&gt;
&lt;li&gt;Mô-đun repoze.who.plugins.openid&lt;/li&gt;
&lt;li&gt;Mô-đun repoze.what.plugins.xml&lt;/li&gt;
&lt;li&gt;Mô-đun postmarkup&lt;/li&gt;
&lt;li&gt;Mô-đun unidecode&lt;/li&gt;
&lt;li&gt;Mô-đun zope.interface&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Các mô-đun này có thể được cài đặt bằng &lt;strong&gt;setuptools&lt;/strong&gt; (&lt;strong&gt;easy_install&lt;/strong&gt;) hoặc &lt;strong&gt;pip&lt;/strong&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="cai-dat"&gt;
&lt;h2&gt;Cài đặt&lt;/h2&gt;
&lt;p&gt;Mã nguồn của VF có thể được tải về từ địa chỉ &lt;a class="reference external" href="http://bitbucket.org/vithon/vithon-forum"&gt;http://bitbucket.org/vithon/vithon-forum&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Giải nén mã nguồn vào một thư mục nào đấy, giả sử như &lt;strong&gt;/opt/vithon-forum&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Dựa vào nội dung của tập tin &lt;strong&gt;config.py&lt;/strong&gt; để tạo tập tin &lt;strong&gt;siteconfig.py&lt;/strong&gt; 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à &lt;strong&gt;COOKIE_SECRET&lt;/strong&gt;, &lt;strong&gt;DATABASE_URL&lt;/strong&gt;, &lt;strong&gt;STATIC_CONTENT_PATH&lt;/strong&gt;, &lt;strong&gt;SESSION_STORAGE_PATH&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Tập tin &lt;strong&gt;siteconfig.py&lt;/strong&gt; có thể có dạng sau:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;BOARD_NAME&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Acme Hideout&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;COOKIE_SECRET&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;y@h0O&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;DATABASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;sqlite:////opt/vithon-forum/db.db&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;STATIC_CONTENT_PATH&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/opt/vithon-forum/static&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;SESSION_STORAGE_PATH&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/tmp/session&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;SESSION_COOKIE_NAME&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;sid&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;ENTRIES_PER_PAGE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="n"&gt;ORGANIZATION&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Acme Corp&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Sau đó, chúng ta cần phải khởi tạo cơ sở dữ liệu bằng lệnh &lt;strong&gt;initdb&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ &lt;span class="nb"&gt;cd&lt;/span&gt; /opt/vithon-forum
$ python forum.py initdb
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Việc cài đặt đã hoàn tất.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="van-hanh"&gt;
&lt;h2&gt;Vận hành&lt;/h2&gt;
&lt;p&gt;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 &lt;strong&gt;shell&lt;/strong&gt; để thực hiện việc này.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ &lt;span class="nb"&gt;cd&lt;/span&gt; /opt/vithon-forum
$ python forum.py shell
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Lệnh &lt;strong&gt;shell&lt;/strong&gt; 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.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;model&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="n"&gt;f1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Forum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;u&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Forum 1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;u&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Dien giai cho Forum 1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;f11&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Forum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;u&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Forum 1.1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;u&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Dien giai cho Forum 1.1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;f12&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Forum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;u&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Forum 1.2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;u&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Dien giai cho Forum 1.2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;f2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Forum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;u&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Forum 2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;u&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Dien giai cho Forum 2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;f21&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Forum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;u&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Forum 2.1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;u&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Dien giai cho Forum 2.1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;f22&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Forum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;u&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Forum 2.2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;u&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Dien giai cho Forum 2.2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;commit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Các câu lệnh trên tạo ra cấu trúc diễn đàn như sau:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
Forum 1
  |
  +-- Forum 1.1
  |
  +-- Forum 1.2

Forum 2
  |
  +-- Forum 2.1
  |
  +-- Forum 2.2
&lt;/pre&gt;
&lt;p&gt;Vì VF không có các tính năng quản lý qua web nên lệnh &lt;strong&gt;shell&lt;/strong&gt; cũng chính là môi trường quản lý chính.&lt;/p&gt;
&lt;p&gt;Cuối cùng, để chạy VF, chúng ta sẽ dùng lệnh &lt;strong&gt;runserver&lt;/strong&gt; tương tự như sau:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ &lt;span class="nb"&gt;cd&lt;/span&gt; /opt/vithon-forum
$ python forum.py runserver -h &lt;span class="m"&gt;127&lt;/span&gt;.0.0.1 -p &lt;span class="m"&gt;8080&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Khi này, nếu ta mở trình duyệt lên và đi đến trang &lt;a class="reference external" href="http://127.0.0.1:8080"&gt;http://127.0.0.1:8080&lt;/a&gt; thì chúng ta sẽ thấy diễn đàn đã hoạt động.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="trien-khai-theo-mo-hinh-cgi"&gt;
&lt;h2&gt;Triển khai theo mô hình CGI&lt;/h2&gt;
&lt;p&gt;Chúng ta cũng có thể triển khai VF theo mô hình CGI.&lt;/p&gt;
&lt;p&gt;Đầu tiên chúng ta cần chép tập tin &lt;strong&gt;forum.cgi&lt;/strong&gt; vào thư mục chứa các tập tin CGI (ví dụ như &lt;strong&gt;/var/www/cgi-bin&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Set the path to store python package cache&lt;/span&gt;
&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;PYTHON_EGG_CACHE&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/tmp/.egg&amp;#39;&lt;/span&gt;
&lt;span class="c1"&gt;# Set the path to vithon forum here&lt;/span&gt;
&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/opt/vithon-forum&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Nếu như tập tin &lt;strong&gt;siteconfig.py&lt;/strong&gt; nằm ở thư mục khác (ví dụ như trong thư mục &lt;strong&gt;/var/www/cgi-bin&lt;/strong&gt;), thì chúng ta cũng sẽ cần thêm vào các dòng bên dưới. Nếu &lt;strong&gt;siteconfig.py&lt;/strong&gt; 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.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Set the path to siteconfig.py here&lt;/span&gt;
&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/var/www/cgi-bin&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;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 &lt;strong&gt;forum.cgi&lt;/strong&gt; 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.&lt;/p&gt;
&lt;/div&gt;
</content><category term="Tin tức"></category><category term="python"></category><category term="wsgi"></category><category term="vithon"></category><category term="forum"></category><category term="bulletin board"></category></entry><entry><title>Diễn đàn vithon hoạt động trở lại</title><link href="2010/06/dien-dan-vithon-hoat-dong-tro-lai.html" rel="alternate"></link><published>2010-06-08T10:21:00+07:00</published><updated>2010-06-08T10:21:00+07:00</updated><author><name>Phan Đắc Anh Huy</name></author><id>tag:None,2010-06-08:2010/06/dien-dan-vithon-hoat-dong-tro-lai.html</id><summary type="html">&lt;p&gt;Chào mọi người, sau một thời gian gián đoạn, diễn đàn Vithon đã hoạt động trở lại tại địa chỉ &lt;a class="reference external" href="http://vithon.org/forum"&gt;http://vithon.org/forum&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Phiên bản mới của diễn đàn do chính các thành viên của nhóm PCNV phát triển, được viết hoàn toàn bằng ngôn ngữ Python.&lt;/p&gt;
&lt;p&gt;Mã nguồn …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Chào mọi người, sau một thời gian gián đoạn, diễn đàn Vithon đã hoạt động trở lại tại địa chỉ &lt;a class="reference external" href="http://vithon.org/forum"&gt;http://vithon.org/forum&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Phiên bản mới của diễn đàn do chính các thành viên của nhóm PCNV phát triển, được viết hoàn toàn bằng ngôn ngữ Python.&lt;/p&gt;
&lt;p&gt;Mã nguồn của diễn đàn được host tại &lt;a class="reference external" href="http://bitbucket.org/vithon/vithon-forum"&gt;BitBuket&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Hiện nay nhóm vẫn đang tiếp tục hoàn thiện các tính năng cơ bản và mở rộng cho diễn đàn. Chúng tôi chào đón mọi ý kiến đóng góp về tính năng sử dụng cũng như tham gia viết mã của tất cả các bạn.&lt;/p&gt;
</content><category term="Tin tức"></category></entry><entry><title>Kết quả cuộc thi Giải Toán Bằng Python</title><link href="2010/06/ket-qua-cuoc-thi-giai-toan-bang-python.html" rel="alternate"></link><published>2010-06-03T04:04:00+07:00</published><updated>2010-06-03T04:04:00+07:00</updated><author><name>Phan Đắc Anh Huy</name></author><id>tag:None,2010-06-03:2010/06/ket-qua-cuoc-thi-giai-toan-bang-python.html</id><summary type="html">&lt;p&gt;Sau một tuần tranh tài sôi nổi, cuộc thi Giải Toán Bằng Python mừng ngày Quốc Tế Thiếu Nhi đã kết thúc tốt đẹp.&lt;/p&gt;
&lt;p&gt;Ngày 1/6, với sự tham dự của hầu hết các thí sinh và cổ động viên, anh Nguyễn Thành Nam - trưởng nhóm Python cho người …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Sau một tuần tranh tài sôi nổi, cuộc thi Giải Toán Bằng Python mừng ngày Quốc Tế Thiếu Nhi đã kết thúc tốt đẹp.&lt;/p&gt;
&lt;p&gt;Ngày 1/6, với sự tham dự của hầu hết các thí sinh và cổ động viên, anh Nguyễn Thành Nam - trưởng nhóm Python cho người Việt - đã tiến hành chấm bài. Đúng như dự đoán trong thời gian diễn ra kỳ thi của anh, mặc cho sự cạnh tranh rất quyết liệt giữa các thí sinh, vẫn có một bài thi tỏ ra vượt trội và giành chiến thắng một cách thuyết phục. Đó là bài dự thi của bạn Nhâm Xuân Nam, với nickname namnx.&lt;/p&gt;
&lt;p&gt;Với nội dung thi gần gũi, dễ tiếp cận nhưng cũng không kém phần hấp dẫn, cuộc thi đã thu hút sự tham gia đông đảo hơn rất nhiều so với hai cuộc thi trước. Chất lượng cuộc thi rất cao khi hầu hết các thí sinh đều tìm ra được công thức cho phép tính nhanh các cặp số, một số kỹ thuật về multi-processing cũng được các thí sinh tìm hiểu và tận dụng rất hiệu quả. Bài của bạn Nhâm Xuân Nam đã đạt được kết quả cách biệt với số &lt;tt class="docutils literal"&gt;n&lt;/tt&gt; lớn nhất dài hơn 2100 chữ số!&lt;/p&gt;
&lt;p&gt;Nói về bài thi đoạt giải nhất, bạn Hoàng Quốc Thịnh - người đạt giải nhất cuộc thi đầu tiên - và anh Nguyễn Thành Nam đều chung một nhận định:&lt;/p&gt;
&lt;blockquote&gt;
Một bài thi chuẩn mực, không có gì phải phàn nàn cả!&lt;/blockquote&gt;
&lt;p&gt;Mã nguồn của các bài dự thi cùng với chương trình chấm có thể được tải về tại &lt;a class="reference external" href="http://www.vithon.org/static/pell.zip"&gt;đây&lt;/a&gt;. Hình sau là ảnh của lễ trao giải. Bạn Lê Ngọc Hiếu đại diện cho nhóm PCNV bên phải, trao tặng giải thưởng cho người chiến thắng bên trái.&lt;/p&gt;
&lt;img alt="" src="/static/pell.contest.png" /&gt;
&lt;p&gt;Một lần nữa xin chúc mừng bạn Nhâm Xuân Nam!&lt;/p&gt;
</content><category term="Tin tức"></category></entry><entry><title>Phát động cuộc thi Giải Toán Bằng Python</title><link href="2010/05/phat-dong-cuoc-thi-giai-toan-bang-python.html" rel="alternate"></link><published>2010-05-24T07:32:00+07:00</published><updated>2010-05-24T07:32:00+07:00</updated><author><name>Phan Đắc Anh Huy</name></author><id>tag:None,2010-05-24:2010/05/phat-dong-cuoc-thi-giai-toan-bang-python.html</id><summary type="html">&lt;p&gt;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:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hãy dùng ngôn ngữ lập trình Python để tính toán và xuất ra …&lt;/p&gt;&lt;/blockquote&gt;</summary><content type="html">&lt;p&gt;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:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
1 + 2 + ... + n = n + 1 + n + 2 + ... + n + k
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;dl class="docutils"&gt;
&lt;dt&gt;Input:&lt;/dt&gt;
&lt;dd&gt;Không có.&lt;/dd&gt;
&lt;dt&gt;Output:&lt;/dt&gt;
&lt;dd&gt;Standard Output.&lt;/dd&gt;
&lt;dt&gt;Output Format:&lt;/dt&gt;
&lt;dd&gt;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.&lt;/dd&gt;
&lt;dt&gt;Yêu cầu:&lt;/dt&gt;
&lt;dd&gt;&lt;ul class="first last simple"&gt;
&lt;li&gt;Chỉ được dùng các module built-in.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;Chương trình nào in ra được nhiều cặp số n, k nhất sẽ chiến thắng.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Thời hạn dự thi: Từ ngày hôm nay (24/05/2010) đến hết ngày &lt;strong&gt;31/05/2010&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Bài dự thi xin gửi về địa chỉ email &lt;strong&gt;admin+frontpage&amp;#64;vithon.org&lt;/strong&gt; (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.&lt;/p&gt;
&lt;p&gt;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 &lt;tt class="docutils literal"&gt;#vithon&lt;/tt&gt; ở máy chủ &lt;tt class="docutils literal"&gt;irc.freenode.net&lt;/tt&gt;.&lt;/p&gt;
&lt;p&gt;Đã 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.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="maths"></category><category term="python"></category><category term="contest"></category></entry><entry><title>Trao giải cuộc thi viết webshell bằng Python</title><link href="2010/05/trao-giai-cuoc-thi-viet-webshell-bang-python.html" rel="alternate"></link><published>2010-05-17T05:17:00+07:00</published><updated>2010-05-17T05:17:00+07:00</updated><author><name>Lê Ngọc Hiếu</name></author><id>tag:None,2010-05-17:2010/05/trao-giai-cuoc-thi-viet-webshell-bang-python.html</id><summary type="html">&lt;p&gt;Ngày 16/05/2010 tại quán cafe K&amp;amp;K đã diễn ra buổi lễ trao giải cho cuộc thi viết webshell bằng python. Tại buổi lễ, anh Nguyễn Thành Nam là trưởng nhóm Python cho người Việt đã trao giải nhất của cuộc thi cho bạn Phan Đắc Anh Huy …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ngày 16/05/2010 tại quán cafe K&amp;amp;K đã diễn ra buổi lễ trao giải cho cuộc thi viết webshell bằng python. Tại buổi lễ, anh Nguyễn Thành Nam là trưởng nhóm Python cho người Việt đã trao giải nhất của cuộc thi cho bạn Phan Đắc Anh Huy với phần thưởng là 100.000 đồng.&lt;/p&gt;
&lt;div class="figure"&gt;
&lt;img alt="" src="/static/webshell_programming_contest.jpg" /&gt;
&lt;p class="caption"&gt;Hình: anh Nguyễn Thành Nam trao giải cho bạn Phan Đắc Anh Huy&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Cuộc thi lần này đã thu hút sự tham gia của nhiều bạn trẻ hơn so với cuộc thi viết game bằng Python lần trước. Theo anh Nam, chất lượng cuộc thi lần này đã khá hơn hẳn lần trước. Điều đó chứng tỏ trình độ lập trình bằng Python và cộng đồng sử dụng Python đã và đang lớn mạnh hơn. Đây cũng chính là mục đích của trang mạng Python cho người Việt được lập ra.&lt;/p&gt;
&lt;p&gt;Sau lễ trao giải, nhóm cũng đã có buổi thảo luận sôi nổi về việc sẽ thúc đẩy sinh hoạt gặp mặt trực tiếp nhằm nâng cao hơn nữa tay nghề. Hy vọng đây sẽ là một hoạt động bổ ích và thiết thực cho các bạn trẻ ham học hỏi. Bạn Hoàng Quốc Thịnh - người đã đoạt giải nhất trong cuộc thi lần trước - chia sẻ:&lt;/p&gt;
&lt;blockquote&gt;
Mình nghĩ không nên lạm dụng việc sinh hoạt trực tuyến nhiều quá, sinh hoạt trực tiếp gặp mặt có điểm lợi hơn đó là việc cái 'lửa' sẽ được tận mắt nhìn thấy và truyền cho nhau. Điều này, sinh hoạt trực tuyến không có được.&lt;/blockquote&gt;
&lt;p&gt;Anh Nam cũng có cùng nhận định như trên và đang chuẩn bị cho những hoạt động đẩy mạnh trong thời gian sắp tới.&lt;/p&gt;
&lt;p&gt;K&amp;amp;K, 15:03 16/05/2010&lt;/p&gt;
</content><category term="Tin tức"></category></entry><entry><title>Python 2.7 beta 1 ra mắt</title><link href="2010/04/python-27-beta-1-ra-mat.html" rel="alternate"></link><published>2010-04-18T11:00:00+07:00</published><updated>2010-04-18T11:00:00+07:00</updated><author><name>Võ Đức Phương</name></author><id>tag:None,2010-04-18:2010/04/python-27-beta-1-ra-mat.html</id><summary type="html">&lt;p&gt;Python 2.7 là phiên bản cuối cùng của Python 2 trước khi chuyển sang chế độ chỉ sửa lỗi, không thêm tính năng vào họ phiên bản này nữa. Tương tự như 2.6, phiên bản này sẽ chú trọng vào việc thêm vào những tính năng của Python …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Python 2.7 là phiên bản cuối cùng của Python 2 trước khi chuyển sang chế độ chỉ sửa lỗi, không thêm tính năng vào họ phiên bản này nữa. Tương tự như 2.6, phiên bản này sẽ chú trọng vào việc thêm vào những tính năng của Python 3 (chính xác là Python 3.1). Những cải tiến của phiên bản này bao gồm:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Thêm loại từ điển có sắp xếp&lt;/li&gt;
&lt;li&gt;Thêm một số tính năng cho unittest như bỏ qua kiểm tra hay các phương pháp kiểm định mới.&lt;/li&gt;
&lt;li&gt;Mô đun &lt;tt class="docutils literal"&gt;io&lt;/tt&gt; mới cho tốc độ nhanh hơn&lt;/li&gt;
&lt;li&gt;Tự đánh số các trường với phương pháp &lt;tt class="docutils literal"&gt;str.format()&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;Mô đun &lt;tt class="docutils literal"&gt;sysconfig&lt;/tt&gt; mới.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;... cùng nhiều thay đổi khác nữa. Thông tin chi tiết về phiên bản này có thể được xem tại:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="http://docs.python.org/dev/whatsnew/2.7.html"&gt;Có những gì mới trong Python 2.7&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="http://svn.python.org/projects/python/tags/r27b1/Misc/NEWS"&gt;Danh sách các thay đổi của Python 2.7&lt;/a&gt;&lt;/p&gt;
</content><category term="Tin tức"></category></entry><entry><title>Trao giải cuộc thi lập trình game bằng Python</title><link href="2010/02/trao-giai-cuoc-thi-lap-trinh-game-bang-python.html" rel="alternate"></link><published>2010-02-05T03:56:00+07:00</published><updated>2010-02-05T03:56:00+07:00</updated><author><name>Nguyễn Thành Nam</name></author><id>tag:None,2010-02-05:2010/02/trao-giai-cuoc-thi-lap-trinh-game-bang-python.html</id><summary type="html">&lt;p&gt;Ngày 04 tháng 02 năm 2009, nhóm PCNV đã trao giải cuộc thi lập trình game với ngôn ngữ Python cho bạn &lt;strong&gt;Hoàng Quốc Thịnh&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Cuộc thi lập trình game với ngôn ngữ Python là một trong những hoạt động của nhóm PCNV nhằm lôi cuốn sự tham gia tìm …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ngày 04 tháng 02 năm 2009, nhóm PCNV đã trao giải cuộc thi lập trình game với ngôn ngữ Python cho bạn &lt;strong&gt;Hoàng Quốc Thịnh&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Cuộc thi lập trình game với ngôn ngữ Python là một trong những hoạt động của nhóm PCNV nhằm lôi cuốn sự tham gia tìm hiểu và khuyến khích sáng tạo trong việc sử dụng ngôn ngữ Python.&lt;/p&gt;
&lt;p&gt;Ngôn ngữ Python là một ngôn ngữ mạnh, đơn giản, và tổng quát. Ngoài việc được sử dụng trong các tổ chức lớn như Google, và NASA, Python còn được dùng để viết nên những trò chơi như EVE-Online với cả triệu người chơi, hay &lt;strong&gt;Ruồi Yêu Cứt&lt;/strong&gt; với giải thưởng lập trình game bằng Python đầu tiên.&lt;/p&gt;
&lt;p&gt;Xin chúc mừng bạn Hoàng Quốc Thịnh.&lt;/p&gt;
&lt;p&gt;Hình bên dưới là bạn Nguyễn Thành Nam đại diện nhóm PCNV đang trao giải cho bạn Hoàng Quốc Thịnh trong bữa ăn thân mật. Hình chụp bởi nhiếp ảnh gia Thành Nguyễn (Malaysia) và sửa đôi chút bởi nhiếp ảnh gia Nguyễn Duy Thọ.&lt;/p&gt;
&lt;img alt="" src="/static/game_programming_contest_prize.png" /&gt;
</content><category term="Tin tức"></category><category term="game"></category><category term="prize"></category><category term="contest"></category></entry><entry><title>Pygments 1.2 với kiểu Monokai</title><link href="2010/01/pygments-12-voi-kieu-monokai.html" rel="alternate"></link><published>2010-01-05T10:36:00+07:00</published><updated>2010-01-05T10:36:00+07:00</updated><author><name>Nguyễn Thành Nam</name></author><id>tag:None,2010-01-05:2010/01/pygments-12-voi-kieu-monokai.html</id><summary type="html">&lt;p&gt;Ngày 01 tháng 01 năm 2010 (ngày đầu năm mới 2010), Georg Brandl đã công bố &lt;a class="reference external" href="http://mail.python.org/pipermail/python-announce-list/2010-January/008034.html"&gt;phiên bản 1.2, tên gọi Neujahr&lt;/a&gt; của gói Pygments.&lt;/p&gt;
&lt;p&gt;Pygments là thư viện làm sáng cú pháp (syntax highlighter) tổng quát, và được sử dụng để tô điểm cho các phần mã nguồn …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ngày 01 tháng 01 năm 2010 (ngày đầu năm mới 2010), Georg Brandl đã công bố &lt;a class="reference external" href="http://mail.python.org/pipermail/python-announce-list/2010-January/008034.html"&gt;phiên bản 1.2, tên gọi Neujahr&lt;/a&gt; của gói Pygments.&lt;/p&gt;
&lt;p&gt;Pygments là thư viện làm sáng cú pháp (syntax highlighter) tổng quát, và được sử dụng để tô điểm cho các phần mã nguồn ở chính trang PCNV này.&lt;/p&gt;
&lt;p&gt;Người dùng có thể tải Pygments từ &lt;a class="reference external" href="http://pypi.python.org/pypi/Pygments"&gt;http://pypi.python.org/pypi/Pygments&lt;/a&gt;, hoặc xem qua một số ví dụ tại &lt;a class="reference external" href="http://pygments.org/demo"&gt;http://pygments.org/demo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Phiên bản 1.2 không còn tương thích với Python 2.3, có hỗ trợ thêm một số cú pháp mới, và đặc biệt là thêm vào &lt;a class="reference external" href="http://www.monokai.nl/blog/2006/07/15/textmate-color-theme/"&gt;kiểu màu Monokai&lt;/a&gt; như các bạn có thể thấy tại trang PCNV.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="monokai"></category><category term="pygments"></category></entry><entry><title>Python 2.7 alpha</title><link href="2009/12/python-27-alpha.html" rel="alternate"></link><published>2009-12-08T03:38:00+07:00</published><updated>2009-12-08T03:38:00+07:00</updated><author><name>Võ Đức Phương</name></author><id>tag:None,2009-12-08:2009/12/python-27-alpha.html</id><summary type="html">&lt;p&gt;Phiên bản thử nghiệm alpha của Python 2.7 đã được phát hành, phiên bản này không có thêm chức năng gì mới mà chủ yếu là sửa chữa lỗi cộng với việc backport các tính năng của python 3000 về lại, đây cũng sẽ là phiên bản cuối cùng …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Phiên bản thử nghiệm alpha của Python 2.7 đã được phát hành, phiên bản này không có thêm chức năng gì mới mà chủ yếu là sửa chữa lỗi cộng với việc backport các tính năng của python 3000 về lại, đây cũng sẽ là phiên bản cuối cùng của dòng Python 2.&lt;/p&gt;
&lt;p&gt;Theo đề xuất mới đây của Guido Van Rossum thì ngôn ngữ Python (cú pháp, thư viện tích hợp v.v...) sẽ tạm dừng phát triển trong vòng ít nhất 2 năm để cho các cài đặt khác của python như PyPy, Jython có thời gian để đuổi kịp nhánh cài đặt chính là CPython. Chính vì vậy mà 2 phiên bản 2.7 và 3.2 sẽ không có thay đổi gì quan trọng mà chỉ chủ yếu để sửa lỗi hay các nâng cấp nhỏ.&lt;/p&gt;
&lt;p&gt;Thông tin chi tiết về phiên bản Python 2.7 có tại: &lt;a class="reference external" href="http://www.python.org/download/releases/2.7/"&gt;http://www.python.org/download/releases/2.7/&lt;/a&gt;&lt;/p&gt;
</content><category term="Tin tức"></category><category term="release"></category><category term="2.7"></category></entry><entry><title>Vithon hoạt động trở lại</title><link href="2009/11/vithon-hoat-dong-tro-lai.html" rel="alternate"></link><published>2009-11-25T07:52:00+07:00</published><updated>2009-11-25T07:52:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2009-11-25:2009/11/vithon-hoat-dong-tro-lai.html</id><summary type="html">&lt;p&gt;Trong vài ngày qua, vì máy chủ cần được nâng cấp nên trang mạng vithon.org đã tạm ngừng hoạt động. Trong khi chờ đợi máy chủ nâng cấp hoàn thành, trang vithon.org đã được di dời qua một máy chủ mới.&lt;/p&gt;
&lt;p&gt;Các bài viết và thảo luận diễn …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Trong vài ngày qua, vì máy chủ cần được nâng cấp nên trang mạng vithon.org đã tạm ngừng hoạt động. Trong khi chờ đợi máy chủ nâng cấp hoàn thành, trang vithon.org đã được di dời qua một máy chủ mới.&lt;/p&gt;
&lt;p&gt;Các bài viết và thảo luận diễn đàn đã được sao lưu đầy đủ. Nhóm Python cho người Việt sẽ tải dần tất cả những bài viết và thảo luận diễn đàn lên trang mạng trong các ngày tới.&lt;/p&gt;
&lt;p&gt;Các bạn thành viên cũ có quyền cập nhật trang mạng xin vui lòng liên lạc quản trị để cấp lại tài khoản trên hệ thống Zine này.&lt;/p&gt;
&lt;p&gt;Chân thành cáo lỗi cùng các bạn vì sự bất tiện này.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="vithon"></category></entry><entry><title>Hội thảo PyCon khu vực Châu Á - Thái Bình Dương 2010</title><link href="2009/10/hoi-thao-pycon-khu-vuc-chau-a-thai-binh-duong-2010.html" rel="alternate"></link><published>2009-10-27T20:15:00+07:00</published><updated>2009-10-27T20:15:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2009-10-27:2009/10/hoi-thao-pycon-khu-vuc-chau-a-thai-binh-duong-2010.html</id><summary type="html">&lt;img alt="" src="/static/pycon.apac.2010.jpg" /&gt;
&lt;div class="section" id="pycon-apac-2010"&gt;
&lt;h2&gt;PyCon APAC 2010&lt;/h2&gt;
&lt;p&gt;Hội thảo &lt;a class="reference external" href="http://apac.pycon.org/"&gt;PyCon Asia Pacific&lt;/a&gt; sẽ được tổ chức tại Singapore vào ngày 09 đến 11 tháng 06 năm 2010. Ngày 09 sẽ dành cho các bài hướng dẫn và ngày 10, 11 sẽ dành cho các bài thảo luận.&lt;/p&gt;
&lt;p&gt;Ban tổ chức kêu gọi sự tham …&lt;/p&gt;&lt;/div&gt;</summary><content type="html">&lt;img alt="" src="/static/pycon.apac.2010.jpg" /&gt;
&lt;div class="section" id="pycon-apac-2010"&gt;
&lt;h2&gt;PyCon APAC 2010&lt;/h2&gt;
&lt;p&gt;Hội thảo &lt;a class="reference external" href="http://apac.pycon.org/"&gt;PyCon Asia Pacific&lt;/a&gt; sẽ được tổ chức tại Singapore vào ngày 09 đến 11 tháng 06 năm 2010. Ngày 09 sẽ dành cho các bài hướng dẫn và ngày 10, 11 sẽ dành cho các bài thảo luận.&lt;/p&gt;
&lt;p&gt;Ban tổ chức kêu gọi sự tham gia của các cá nhân, tập thể trong các bài hướng dẫn lẫn các bài tham luận hội thảo về tất cả các khía cạnh của Python -- từ lập trình không chuyên đến lập trình chuyên nghiệp, về các ứng dụng hoặc khung phần mềm, và bạn sử dụng Python như thế nào trong công việc.&lt;/p&gt;
&lt;p&gt;Các diễn giả lần đầu, đặc biệt là những diễn giả từ khu vực châu Á, được khuyến khích gửi bài cho ban tổ chức.&lt;/p&gt;
&lt;p&gt;Thông tin thêm về hội thảo PyCon Châu Á - Thái Bình Dương có thể được tìm thấy tại &lt;a class="reference external" href="http://apac.pycon.org/"&gt;http://apac.pycon.org/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
</content><category term="Tin tức"></category><category term="pycon"></category><category term="apac"></category><category term="community"></category></entry><entry><title>Cộng đồng PCNV hỗ trợ GNOME.Asia</title><link href="2009/10/cong-dong-pcnv-ho-tro-gnomeasia.html" rel="alternate"></link><published>2009-10-27T20:13:00+07:00</published><updated>2009-10-27T20:13:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2009-10-27:2009/10/cong-dong-pcnv-ho-tro-gnomeasia.html</id><summary type="html">&lt;p&gt;&lt;a class="reference external" href="http://gnome.asia"&gt;&lt;img alt="GnomeAsia" src="/static/gnome.asia.2009.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;PCNV là một trong những nhóm hỗ trợ cộng đồng tại hội thảo GNOME Asia 2009 tổ chức tại Công viên Phần mềm Quang Trung, thành phố Hồ Chí Minh.&lt;/p&gt;
&lt;p&gt;GNOME.Asia Summit diễn ra từ ngày 20 đến 22 tháng 11 năm 2009 tại Công viên phần mềm Quang …&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;a class="reference external" href="http://gnome.asia"&gt;&lt;img alt="GnomeAsia" src="/static/gnome.asia.2009.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;PCNV là một trong những nhóm hỗ trợ cộng đồng tại hội thảo GNOME Asia 2009 tổ chức tại Công viên Phần mềm Quang Trung, thành phố Hồ Chí Minh.&lt;/p&gt;
&lt;p&gt;GNOME.Asia Summit diễn ra từ ngày 20 đến 22 tháng 11 năm 2009 tại Công viên phần mềm Quang Trung, thành phố Hồ Chí Minh, là một trong những sự kiện công nghệ nguồn mở hàng đầu trong khu vực, sẽ được đăng tải trên 20 tờ báo, đài truyền hình, và các diễn đàn trong và ngoài nước. Với mục đích khám phá tương lai của cộng đồng mã nguồn mở ở châu Á, và mở rộng cơ hội hợp tác Á-Âu, Gnome.Asia Summit dự kiến sẽ có sự tham gia của hơn 500 khách mời từ 10 quốc gia trên thế giới. Ban tổ chức trân trọng mời các cá nhân, đoàn thể có quan tâm cùng tham gia sự kiện này.&lt;/p&gt;
&lt;p&gt;Ngoài việc kêu gọi cộng đồng người sử dụng Python tham gia vào hội thảo GNOME Asia, nhóm PCNV của chúng ta cũng sẽ tham gia hội thảo với bài trình bày &lt;em&gt;Python cho phần đời còn lại&lt;/em&gt;. Đây cũng là một cơ hội để chúng ta cùng gặp mặt trực tiếp ngoài đời thường.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="community"></category><category term="gnome"></category><category term="asia"></category></entry><entry><title>Phát hành Bài chỉ dẫn Python 2.5</title><link href="2007/09/phat-hanh-bai-chi-dan-python-25.html" rel="alternate"></link><published>2007-09-25T21:50:00+07:00</published><updated>2007-09-25T21:50:00+07:00</updated><author><name>Nhóm PCNV</name></author><id>tag:None,2007-09-25:2007/09/phat-hanh-bai-chi-dan-python-25.html</id><summary type="html">&lt;p&gt;&lt;em&gt;Bài chỉ dẫn Python&lt;/em&gt; 2.5 tiếng Việt đã được nhóm Python cho người Việt phát hành vào ngày 26 tháng 09 năm 2007.&lt;/p&gt;
&lt;p&gt;Ngày 26 tháng 09 năm 2007, theo đúng như dự định, nhóm Python cho người Việt đã chính thức phát hành bản dịch của tài liệu …&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;Bài chỉ dẫn Python&lt;/em&gt; 2.5 tiếng Việt đã được nhóm Python cho người Việt phát hành vào ngày 26 tháng 09 năm 2007.&lt;/p&gt;
&lt;p&gt;Ngày 26 tháng 09 năm 2007, theo đúng như dự định, nhóm Python cho người Việt đã chính thức phát hành bản dịch của tài liệu &lt;em&gt;Python Tutorial&lt;/em&gt; với tên &lt;strong&gt;Bài chỉ dẫn Python&lt;/strong&gt;. Tài liệu này giới thiệu người đọc những khái niệm nhập môn cơ bản của ngôn ngữ Python và các thư viện có sẵn của nó. Người mới học, cũng như các chuyên gia trong ngành Công Nghệ Thông Tin có thể tìm được nhiều thông tin bổ ích từ tài liệu.&lt;/p&gt;
&lt;p&gt;Phát biểu về sự kiện này, anh Nguyễn Thành Nam (một trong các dịch giả và là thành viên của nhóm Python cho người Việt) nhận xét:&lt;/p&gt;
&lt;blockquote&gt;
Việc có mặt một tài liệu Python tiếng Việt hoàn toàn miễn phí là một dấu mốc quan trọng trong việc đưa ngôn ngữ Python đến gần hơn với người dùng Việt Nam.&lt;/blockquote&gt;
&lt;p&gt;Anh cũng cho biết thêm rằng bản dịch này là sự hợp tác của nhiều dịch giả từ khắp nơi trên thế giới có cùng niềm đam mê với ngôn ngữ Python và mong muốn giới thiệu và phát triển nó rộng rãi ở Việt Nam.&lt;/p&gt;
&lt;p&gt;Tài liệu có thể được truy cập tại địa chỉ &lt;a class="reference external" href="http://www.vithon.org/tutorial/2.5/tut.html"&gt;http://www.vithon.org/tutorial/2.5/tut.html&lt;/a&gt;.&lt;/p&gt;
</content><category term="Tin tức"></category><category term="tutorial"></category></entry></feed>