Python cho người Việt

Python cho người Việt

Entries in the Category “Tin tức”

Hình ảnh tại Software Freedom Day 2010

written by Nguyễn Thành Nam, on Oct 24, 2011 7:50:31 AM.

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.

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 đó.

img20100918104740.th.jpg img20100918104748.th.jpg img20100918104833.th.jpg

Đ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.

Kết quả cuộc thi Đời

written by vithon, on Oct 21, 2011 5:51:00 PM.

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ả.

Cuộc thi thu hút bốn bài tham dự từ các bạn sau:

Tác giảBài tham dự
Nhâm Xuân Namlife.py
Huỳnh Hải Âubilife.py
Phan Phụng Tiếntreeoflife.py
Vũ Khuêcuocthidoi.py

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 thế một thế hệ trong tương lai.

Ở vòng đầu tiên, ma trận 1x1 được sử dụng.

G:\vithon\life>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 "G:\vithon\life\judge.py", line 120, in <module>
    main()
  File "G:\vithon\life\judge.py", line 96, in main
    if results[module_name]['object'].get_cell(row, col):
  File "G:\vithon\life\treeoflife.py", line 160, in get_cell
    raise ValueError()
ValueError

Vì sinh ra lỗi nên mô-đun treeoflife đã bị loại.

Ở vòng hai, ma trận 2x2 được sử dụng và chỉ tính một thế hệ tương lai.

G:\vithon\life>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

Với lần chạy này, chỉ có mô-đun bilife đưa ra kết quả sai cho trường hợp ô (0, 1). Chương trình chấm so sánh kết quả của mô-đun với kết quả của số đông. Trong trường hợp này, số đông đã đúng.

Sau hai lần chạy, chỉ còn lại hai mô-đun lifecuocthidoi.

Lần chạy thứ ba sử dụng ma trận 2x2 với một thế hệ.

G:\vithon\life>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

Với lần chạy này, life đã bị loại, và chỉ còn cuocthidoi.

Tóm lại, sau ba vòng chạy thì chỉ có mô-đun cuocthidoi đư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ự cuocthidoi.py đã 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ả Vũ Khuê đã vượt qua các đối thủ khác trong cuộc thi.

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!

Cuộc thi Đời

written by vithon, on Sep 15, 2011 1:36:00 PM.

Nhóm PCNV hân hạnh tổ chức một cuộc thi nhỏ với giải thưởng lớn!

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ệ G sẽ tuân theo các luật sau để xác định trạng thái của chúng ở thế hệ G + 1:

  1. 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.
  2. 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.
  3. 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.

Cuộc thi Đời 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:

  1. Bài tham dự gửi về địa chỉ thư admin tại vithon.org.
  2. Bài tham dự chỉ được sử dụng ngôn ngữ Python, và các thư viện chuẩn đi kèm.
  3. 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.
  4. Yếu tố cơ bản để đánh giá là tốc độ chạy của chương trình.
  5. Hạn tham dự là hết ngày 15 tháng 10 năm 2011.
  6. Chỉ có một giải có trị giá tương đương 250 đô la Singapore.
  7. Quyết định của ban tổ chức là cuối cùng, xin không nhận khiếu nại.
class Board(object):
    '''Represents the Game of Life matrix.

    Each cell has at most 8 neighbors. A cell may have less than 8 neighbors.
    For example, a cell at (0, 0) would have only three neightbors (0, 1),
    (1, 0) and (1, 1).

    The cells are addressed in a row-major (row first) manner. The index starts
    from zero.

    '''

    def __init__(self, width=10, height=10):
        '''Initializes this board.

        Args:
            width (int): Number of cells in a row.
            height (int): Number of rows in this board.

        '''

        raise NotImplemented()

    def generation(self, n=1):
        '''Transform this board into next ``n`` generation(s).

        The transformation is in place similar to ``list.sort``.
        No value is returned to the caller.

        Args:
            n (int): Number of generations.

        Raises:
            ValueError: If n is smaller than 1.

        '''

        raise NotImplemented()

    def get_cell(self, row, col):
        '''Returns the state of the cell at row ``row`` and column ``col``.

        Args:
            row (int): The row, zero-indexed.
            col (int): The column, zero-indexed.

        Returns:
            True: If the cell is alive.
            False: If the cell is dead.

        '''

        raise NotImplemented()

    def set_cell(self, row, col, state):
        '''Sets a cell at row ``row`` and column ``col`` to state ``state``.

        Args:
            row (int): The row, zero-indexed.
            col (int): The column, zero-indexed.
            state (bool): Cell's state.

        '''

        raise NotImplemented()

    def get_row(self, row):
        '''Returns the states of all cells in row ``row``.

        Args:
            row (int): The row, zero-indexed.

        Returns:
            A sequence of bools.

        '''

        raise NotImplemented()

Mọi thắc mắc và thảo luận xin vui lòng gửi lên diễn đàn.

Python 3.2.2 ra đời

written by vithon, on Sep 5, 2011 2:03:00 PM.

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.

Python 3.2.2 về cơ bản là phiên bản sửa lỗi, đặc biệt là lỗi trong mô-đun urllib.request xảy ra trong 3.2.1.

Phiên bản 3.2.2 có thể được tải về từ địa chỉ http://www.python.org/download/releases/3.2.2/.

Python Tools cho Visual Studio

written by vithon, on Aug 31, 2011 4:37:43 PM.

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ở Python Tools dành cho Visual Studio.

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.

Công cụ Python Tools cho Visual Studio cần phiên bản Visual Studio Shell 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.

Vithon nâng cấp sử dụng Gevent

written by vithon, on Aug 1, 2011 8:25:00 AM.

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.

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ể.

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.

Thomas Heller ra đi

written by vithon, on Mar 21, 2011 10:28:26 AM.

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.

Thomas Heller là tác giả gói ctypes, đượ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.

Thomas ra đi vì không còn nhiều thời gian để cập nhật ctypes 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.

Hội thảo PyCon Châu Á Thái Bình Dương 2011

written by vithon, on Feb 14, 2011 6:07:58 PM.

http://pycon.sit.rp.sg/logo.png

Hội thảo PyCon APAC 2011 đã mở cửa kêu gọi bài đăng ký.

Để 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 http://apac.pycon.org/.

PCNV là một trong các nhóm hỗ trợ hội thảo.

Kết quả 100 phát 100 trúng

written by Nguyễn Thành Nam, on Dec 21, 2010 11:38:00 AM.

Để 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 http://www.vithon.org/2010/06/03/kết-quả-cuộc-thi-giải-toan-bằng-python).

Sau đây là bài fire_in_the_hole.py của Nhâm Xuân Nam:

'''
Created on Dec 15, 2010

@author: namnx
'''
import entity
import random
import inspect


class HolePlayer(entity.Player):
	def name_ship(self, ship):
		n = repr(ship.__class__)
		return n[n.index('.') + 1 : -2]

	def on_hit(self, x, y):
		# dont care
		pass

	def orient_ship(self, ship):
		return entity.HORIZONTAL

	def place_ship(self, ship):
		while True:
			x = random.randint(0, self.ocean.width - 1)
			y = random.randint(0, self.ocean.height - 1)
			if not self.t_ocean:
				self.t_ocean = entity.Ocean(self.ocean.width, self.ocean.height)
			try:
				ship.place(self.t_ocean, x, y)
				return (x, y)
			except ValueError:
				pass

	def lock_missile(self, ship):
		opponent_ships = self.get_opponent_ships()
		if self.step < 4:
			if ship.__class__ == entity.Destroyer:
				for s in opponent_ships:
					if (s.__class__ == ship.__class__) and (s.orientation == ship.orientation):
						break
				self.step += 1
				return (s.x, s.y)
			
			for s in opponent_ships:
				if s.__class__ == ship.__class__:
					break;
			self.step += 1
			return (s.x, s.y)
		else:
			for s in opponent_ships:
				if s.__class__ == entity.MissileCruiser:
					break
			if ship.__class__ == entity.MissileCruiser:
				if s.orientation == entity.HORIZONTAL:
					return (s.x-2, s.y)
				else:
					return (s.x, s.y-2)
			else:
				if s.orientation == entity.HORIZONTAL:
					return (s.x+2, s.y)
				else:
					return (s.x, s.y+2)
			

	def get_opponent_ships(self):
		frames = inspect.stack()
		for frame in frames:
			if frame[3] == '__turn':
				break;

		gameObj = frame[0].f_locals['self']
		for i in range(len(gameObj.players)):
			if gameObj.players[i].__class__ != self.__class__:
				break
		return gameObj.ships[i]


def entry(name):
	p = HolePlayer(name)
	p.t_ocean = None
	p.step = 0
	return p

Xin chúc mừng bạn Xuân Nam.

Giải phụ bách phát bách trúng

written by Nguyễn Thành Nam, on Dec 13, 2010 3:08:00 PM.

Cuộc tranh tài Bắn Suồng tuy đã kết thúc (http://www.vithon.org/2010/12/13/kết-quả-bắn-suồng) 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.

Vì vậy, mình xin đề nghị một giải phụ của Bắn Suồng với thể lệ như sau:

  1. Nếu bạn tạo được một suồng “bách phát bách trúng”, 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.
  2. “Bách phát bách trúng” được hiểu theo nghĩa một phát bắn phải trúng ít nhất một tàu.
  3. Bạn có thể sử dụng mọi kỹ thuật (mũ đen hay trắng) để làm việc này.
  4. Thời hạn nhận bài là hết ngày 19 tháng 12 năm 2010.
  5. 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.
  6. Bài tham gia gửi về cho admin+thư+rác@vithon.org (nhớ bỏ phần chống spam phía sau nhé).
  7. Mình xin giữ toàn quyền quyết định kết quả.

Chúc may mắn.