banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix Hướng dẫn lập trình Python  XML
  [Programming]   Hướng dẫn lập trình Python 04/01/2008 04:00:46 (+0700) | #1 | 108082
[Avatar]
onlinehack
Member

[Minus]    0    [Plus]
Joined: 04/12/2007 23:07:12
Messages: 116
Location: Ma maison
Offline
[Profile] [PM]

Python là ngôn ngữ lập trình được quan tâm bởi tính đơn giản và dễ sử dụng. Nó thường được giới thiệu cho những "programming newcomer" như một điểm khởi đầu tốt. Python cũng là chương trình thông dịch các chương trình viết bằng ngôn ngữ này. Có các phiên bản bổ sung khác của Python, như Jython , CLPython, IronPython ... Ở đây, chúng ta chỉ sử dụng Python

Cài đặt Python

Cài đặt Python và chạy là bước đầu tiên. Nó có thể rất dễ dàng. Nếu bạn đang sử dụng Gentoo GNU/Linux, bạn đã có sẵn Python 2.4 được cài đặt. Hệ thông packaging cho Gentoo, Portage, được viết bằng Python smilie .

Nếu bạn đang chạy Debian GNU/Linux, Ubuntu, Kubuntu và MEPIS, hãy chạy lệnh sau :
Code:
sudo apt-get install python


Nếu bạn đang sử dụng các Linux distro khác, có thể Python là các package được chuẩn bị trước cho nó. Sử dụng tài nguyên và công cụ thông thường bạn sử dụng cho các package khác để tìm Python package

Nếu bạn không làm được tất cả các điều trên, bạn cần phải cài đặt bằng tay. Nó không khó, nhưng cần phải chú ý là dễ làm hỏng hệ thống của bạn trừ khi bạn làm theo hướng dẫn đơn giản này : cài đặt Python vào một vị trí độc lập, ví dụ /opt/python/2.4.3 hay gì đó tuỳ phiên bản Python ...

Để thực hiện cài đặt, download Python , unpack và chạy lênh sau :

Code:
./configure --prefix=/opt/python2.4/
make
make install


Cùng bắt đầu

Chúng ta bắt đầu tìm hiểu về phần lập trình, để khởi đầu, ta xây dựng một công cụ blog đơn giản, không có giao diện như Web, nhưng nó là một bài tập tốt.

Python đi kèm với REPL - một phát minh của cộng đồng Lisp. REPL là viết tắt của cụm từ Real Eval Print Loop, và nó có nghĩa là đây là chương trình có thể đọc được các biểu thức và câu lệnh, đánh giá, in kết quả và đợi . Giờ ta chạy REPL ( nhớ điều chỉnh được dẫn của bạn theo vị trí bạn đã cài đặt Python trước đây )

Code:
$ python
Python 2.4.3 (#1, Sep  1 2006, 18:35:05)
[GCC 4.1.1 (Gentoo 4.1.1)] on linux2
Type "help", "copyright", "credits" or "license" for
more information.
>>>


3 dấu lớn hơn ( >>> ) là dấu nhắc của Python, bạn sẽ viết các câu lệnh và biểu thức vào đây. Để thoát khỏi chương trình, nhấn Ctrl-D

Thử một vài biểu thức đơn giản:
Code:
>>> 5
5

Giá trị của 5, tất nhiên = 5.

Code:
>>> 10 + 4
14

Thú vị hơn không nào?

Có các kiểu biểu thức khác, như là một chuỗi:

>>> "Xin chao"
'Xin chao'

Dấu nháy được sử dụng để tạo chuỗi. Dấu nháy đơn hay kép đều như nhau. Trong thực tế, bạn có thể thấy ta đã sử dụng nháy kép, nhưng Python trả lại là nháy đơn.

Giờ ta thử một danh sách

Code:
>>> [1,3,2]
[1, 3, 2]


Dấu ngoặc vuông được sử dụng để tạo các danh sách, mỗi item được phân cách bởi một dấu phẩy. Và như có thể cộng các số, ta có thể cộng ( hay ghép) các danh sách :

Code:
>>> [1,3,2] + [11,3,2]
[1, 3, 2, 11, 3, 2]


Giờ, chúng ta chuyển sang một thứ thú vị hơn , blog. Blog là một chuỗi các bài viết, và danh sách Python là một cách tốt để tái hiện một blog, với bài viết và chuỗi. Trong REPL, chúng ta có thể làm một blog đơn giản thế này :

Code:
>>> ["Entry thu nhat", "Python that tuyet"]
['Entry thu nhat', 'Python that tuyet']
>>>


Đó là một danh sách các chuỗi. Bạn có thể tạo một danh sách bất cứ cái gì bạn muốn, bao gồm cả danh sách của danh sách. Hạn chế là tất cả các biểu thức sẽ được đánh giá, trình bày và biến mất. Chúng ta không có cách nào để gọi blog lại và thêm cho chúng các item khác hay xem lại chúng.Do đó, ta thực hiện phép gán :
Code:
>>> blog = ["Entry thu nhat", "Python that tuyet"]
>>>

Giờ blog là một biến chứa danh sách. Không giống các ví dụ trước, không có gì được in ra tại thời điểm này, vì nó chỉ là một phép gán. Phép gán là một câu lệnh, và câu lệnh không trả lại giá trị. Đơn giản đánh giá biến cho chúng ta thấy nội dung :

Code:
>>> blog
['Entry thu nhat', 'Python that tuyet']


Truy cập blog của bạn thật dễ dàng. Chúng ta nhận biết mỗi bài viết bằng 1 số :

Code:
>>> blog[0]
'Entry thu nhat'
>>> blog[1]
'Python that tuyet'


Chú ý rằng Python bắt đầu đếm từ 0 .

còn tiếp...
[Up] [Print Copy]
  [Question]   Re: Hướng dẫn lập trình Python 04/01/2008 12:43:39 (+0700) | #2 | 108219
[Avatar]
onlinehack
Member

[Minus]    0    [Plus]
Joined: 04/12/2007 23:07:12
Messages: 116
Location: Ma maison
Offline
[Profile] [PM]
Tóm lược cách hoạt động

Một blog sẽ không phải là một blog nếu bạn không thể thêm bài viết mới, do đó, bạn làm thế này:

Code:
>>> blog = blog + ["Entry moi"]
>>> blog
['Entry dau tien', 'Python that tuyet', 'Entry moi']

Ở đây ta thêm cho blog một giá trị mới, là blog cũ , và một entry mới. Chúng ta có thể rút gọn trong một hàm :

Code:
>>> def add_entry(blog, new_entry):
...     return blog + [new_entry]
...
>>>


def là từ khóa được sử dụng để định nghĩa một hàm hoặc một phương thức mới ( chúng ta sẽ nói nhiều hơn về các hàm trong lập trình có cấu trúc và phương thức trong lập trình hướng đội tượng trong chủ đề này ) , tiếp theo là tên hàm. Trong dấu ngoặc đơn, chúng ta có các tham số chính thức.Sau dấu hai chấm, dấu nhắc đã chuyển từ >>> sang ... để cho thấy ta đang ở trong 1 hàm. Một hàm được bao gồm tất cả các dòng được lùi vào (theo bậc) so với dòng def.

Khi các ngôn ngữ lập trình khác sử dụng các dấu ngoặc hoặc từ khoá begin/end, Python sử dụng sự lùi vào ở đầu dòng. Ý tưởng ở đây là nếu bạn là lập trình viên giỏi, bạn sẽ tự làm việc đó.Đây là một vấn đề gây tranh luận; có thể bạn không thích nó lúc ban đầu, nhưng bạn phải học để làm việc đó

Khi làm việc với REPL, bạn có thể an toàn nhấn Tab để tạo một bậc lùi vào, và cho dù phím Tab có thể làm việc đó, sử dụng 4 lần space là một cách giới thiệu nhiều hơn. Nhiều text editor biết cách đặt 4 lần space khi bạn nhấn Tab khi chỉnh sửa file Python. Nhưng bạn đừng bao giờ kết hợp giữa Tab và space.Trong các ngôn ngữ lập trình khác, nó có thể làm cộng đồng không thích bạn, nhưng trong Python, nó có thể làm chương trình gặp những thông báo lỗi khó hiểu

Để luyện tập, chúng ta cùng tiếp tục làm, nhập header của lớp def add_entry(blog, new_entry):, nhấn Enter, nhấn Tab, nhập return blog + [new_entry] , nhấn Enter, nhấn Enter lần nữa.Chúng ta sẽ thấy :

Code:
>>> blog = add_entry(blog, "Entry thu 4")
>>> blog
['Entry dau tien', 'Python that tuyet', 'Entry moi', 
'Entry thu 4']
>>>



add_entry sử dụng 2 tham số. Đầu tiên là chính blog, và nó được gán vào blog. Đó là một mánh khoé. Cái blog bên trong hàm không giống với blog bên ngoài hàm. Chúng ở các phạm vi khác nhau. Do đó

Code:
>>> def add_entry(blog, new_entry):
...     blog = blog + [new_entry]


không làm việc, blog chỉ được chỉnh sửa bên trong hàm.
Blog của chúng ta lớn dần lên, và trước đây bài viết chỉ là những chuỗi đơn giản, giờ chúng ta muốn nó có cả tiêu đề và thân. Chúng ta có thể làm thế này :

Code:
>>> blog = []
>>> blog = add_entry(blog, ("Blog moi", "Entry dau tien"))
>>> blog = add_entry(blog, ("Tuyet ", "Python that tuyet"))
>>> blog
[('Blog moi', 'Entry dau tien'), 
('Tuyet', 'Python that tuyet')]
>>>


Ở dòng thứ nhất, ta reset blog thành một danh sách trống. Sau đó, thêm 2 bài viết.
Danh sách các bài viết được tạo ra bởi các dấu ngoặc, và các thành phần được phân cách bởi các dấu phẩy. Nó tương tự với một danh sách, nhưng chúng khác nhau. Nó được gọi là tuple. Bạn có thể cập nhật thành phần của một tuple. Các tuple được sử dụng để xây dựng một vài kiểu cấu trúc với các thành phần cố định. Lấy ví dụ

Code:
>>> (1,2,3)
(1, 2, 3)


Truy cập từng phần của bài viết cũng tương tự truy cập từng phần của blog

>>> blog[0][0]
'Blog moi'
>>> blog[0][1]
'Entry dau tien'

Đây có thể là một giải pháp tốt nếu bạn muốn lưu giữ chỉ tiêu đề và nội dung bài viết. Nhưng , khi ta muốn thêm vào ngày và thời gian, trích dẫn, tag hay tin nhắn ? Bạn có thể bắt đầu nghĩ bạn cần treo một tờ giấy lên tường, để nhớ mục lục của từng trường, như thế này :




Thật không dễ chịu chút nào . Để giải quyết vấn đề này. Python đưa đến cho chúng ta lập trình hướng đối tượng ..

Còn tiếp...

Tham khảo LinuxJournal
[Up] [Print Copy]
  [Question]   Re: Hướng dẫn lập trình Python 05/01/2008 06:59:18 (+0700) | #3 | 108364
RonRoyII
Member

[Minus]    0    [Plus]
Joined: 15/11/2007 14:41:12
Messages: 4
Offline
[Profile] [PM]
Bác có thể cho tôi ebook để tự hoc có phải là tốt hơn ko bác hướng dẫn như vay khó hoc lém phiền bác cho ebool đi!
[Up] [Print Copy]
  [Question]   Re: Hướng dẫn lập trình Python 05/01/2008 08:23:57 (+0700) | #4 | 108372
[Avatar]
onlinehack
Member

[Minus]    0    [Plus]
Joined: 04/12/2007 23:07:12
Messages: 116
Location: Ma maison
Offline
[Profile] [PM]

RonRoyII wrote:
Bác có thể cho tôi ebook để tự hoc có phải là tốt hơn ko bác hướng dẫn như vay khó hoc lém phiền bác cho ebool đi!
 

bồ nghĩ tớ ngồi copy / paste từ quyển ebook nào đó ra đây chắc smilie
Nếu bồ muốn đọc dần, thì nhấn vào nút bản in bên dưới bài viết rồi in ra, hoặc tự góp lại thành ebook.
[Up] [Print Copy]
  [Question]   Re: Hướng dẫn lập trình Python 05/01/2008 10:31:24 (+0700) | #5 | 108405
[Avatar]
oak
Member

[Minus]    0    [Plus]
Joined: 18/04/2006 09:54:00
Messages: 85
Location: Somewhere
Offline
[Profile] [PM] [Email] [Yahoo!]
Có ai nói là bạn copy /paste đâu nhỉ.Bạn ấy chỉ hỏi xin cái e-book thôi mà.Dù sao bài vết cũng khá hay cố gắng viết đều dều nghen onlinehack.
@RonRoyII: /hvaonline/posts/list/15055.html bạn vào đây tải cái sổ tay lập trình 2.0 nó cũng có dạy về python.(Nên tìm kỹ trước khi hỏi - câu quen thuộc nhưng vẫn phải nhắc lại)
[Up] [Print Copy]
  [Question]   Re: Hướng dẫn lập trình Python 07/01/2008 06:25:12 (+0700) | #6 | 108795
RonRoyII
Member

[Minus]    0    [Plus]
Joined: 15/11/2007 14:41:12
Messages: 4
Offline
[Profile] [PM]

oak wrote:
Có ai nói là bạn copy /paste đâu nhỉ.Bạn ấy chỉ hỏi xin cái e-book thôi mà.Dù sao bài vết cũng khá hay cố gắng viết đều dều nghen onlinehack.
@RonRoyII: /hvaonline/posts/list/15055.html bạn vào đây tải cái sổ tay lập trình 2.0 nó cũng có dạy về python.(Nên tìm kỹ trước khi hỏi - câu quen thuộc nhưng vẫn phải nhắc lại) 

Tui có biết là có ebook chỉ học python nhưng ma ko tương tân cho người mới học như bác nói.
[Up] [Print Copy]
  [Question]   Re: Hướng dẫn lập trình Python 18/01/2008 09:17:23 (+0700) | #7 | 110883
[Avatar]
hack_love86
Member

[Minus]    0    [Plus]
Joined: 30/12/2007 23:25:20
Messages: 3
Offline
[Profile] [PM] [WWW] [Yahoo!]
Bạn RonRoyII đòi ebook người ta đã chỉ cho rồi còn đòi gì nữa, bạn có thể vào trang này đọc tut của python http://www.vithon.org/tutorial/2.5/tut.html. Bạn đọc mấy cái này trước để có căn bản trước, cảm bài viết của bạn onlinehack.
Cho mình hỏi python có thể nhúng vào web như php không? nếu được thì bạn hướng dẫn cho mình và mọi người nhé.
Thân!
[Up] [Print Copy]
  [Question]   Re: Hướng dẫn lập trình Python 18/01/2008 09:32:55 (+0700) | #8 | 110885
[Avatar]
meomeo_bebong
Locked

[Minus]    0    [Plus]
Joined: 27/06/2006 23:07:44
Messages: 700
Location: vô gia cư
Offline
[Profile] [PM] [WWW] [Yahoo!] [MSN] [ICQ]
Thôi , cãi nhau chi cho mệt . Chịu khó đọc tiếng Anh trên http://python.org đi . oak nói đúng đó
[Up] [Print Copy]
  [Programming]   Hướng dẫn lập trình Python 06/12/2009 20:29:03 (+0700) | #9 | 199930
[Avatar]
brucelee.star
Member

[Minus]    0    [Plus]
Joined: 13/11/2009 14:21:50
Messages: 20
Offline
[Profile] [PM]
tại sao python của mình lại bị lỗi này nhỉ?
các bạn giải thích giùm với...
>>> blog[0]
sau đó ấn enter thì nó báo lỗi:
Traceback (most recent call last):
File "<pyshe11#0>", line 1, in <module>
blog[0]
NameError:name 'blog' is not defined

(python 3.0)
MAGICIAN
[Up] [Print Copy]
  [Programming]   Hướng dẫn lập trình Python 06/12/2009 21:25:09 (+0700) | #10 | 199936
mR.Bi
Member

[Minus]    0    [Plus]
Joined: 22/03/2006 13:17:49
Messages: 812
Offline
[Profile] [PM] [WWW]

brucelee.star wrote:
tại sao python của mình lại bị lỗi này nhỉ?
các bạn giải thích giùm với...
>>> blog[0]
sau đó ấn enter thì nó báo lỗi:
Traceback (most recent call last):
File "<pyshe11#0>", line 1, in <module>
blog[0]
NameError:name 'blog' is not defined

(python 3.0) 

Python báo lỗi not defined kìa bạn, bạn tìm tài liệu nào đó về đọc đi, hay ngay chính topic này của onlinehack cũng đã chỉ rồi.
VN mình có vithon.org với nguyên bộ python tutorial được dịch công phu, bạn vào đó mà đọc.
Code:
>>> blog = [ 'new', 'old' ]
>>> blog[0]
'new'


All of my life I have lived by a code and the code is simple: "honour your parent, love your woman and defend your children"
[Up] [Print Copy]
  [Programming]   Hướng dẫn lập trình Python 07/12/2009 08:38:48 (+0700) | #11 | 199958
[Avatar]
brucelee.star
Member

[Minus]    0    [Plus]
Joined: 13/11/2009 14:21:50
Messages: 20
Offline
[Profile] [PM]
cám ơn bạn nha! mình sẽ cố gắng học nó
MAGICIAN
[Up] [Print Copy]
  [Programming]   Hướng dẫn lập trình Python 26/01/2010 09:38:09 (+0700) | #12 | 203895
ca_meo
Member

[Minus]    0    [Plus]
Joined: 28/05/2009 21:48:24
Messages: 9
Offline
[Profile] [PM]
bạn nào có em dế Windows Mobile thì có thể dùng soft PythonCE để học Python mọi lúc mọi nơi smilie Rất hay và tiện
m.digest()
b")\xfa\xaf\x0f\x9e\xc9\x1d\x8a\xe9\x87\xb9'\r\ xdf \x08\xdd"
** ArTech **
\m/ Underground In Fog \m/
[Up] [Print Copy]
  [Programming]   Hướng dẫn lập trình Python 07/03/2010 15:55:29 (+0700) | #13 | 206375
zjm_zjm
Member

[Minus]    0    [Plus]
Joined: 26/07/2009 01:53:09
Messages: 159
Location: hhhhhh
Offline
[Profile] [PM] [WWW] [Yahoo!] [MSN] [ICQ]
Bạn nào có biết những trang wed hay diễn đàn nào nói về python không. có ít diễn đàn về cái này quá
[Up] [Print Copy]
  [Programming]   Hướng dẫn lập trình Python 31/05/2010 22:28:54 (+0700) | #14 | 212008
ca_meo
Member

[Minus]    0    [Plus]
Joined: 28/05/2009 21:48:24
Messages: 9
Offline
[Profile] [PM]
python.org smilie
m.digest()
b")\xfa\xaf\x0f\x9e\xc9\x1d\x8a\xe9\x87\xb9'\r\ xdf \x08\xdd"
** ArTech **
\m/ Underground In Fog \m/
[Up] [Print Copy]
  [Programming]   Hướng dẫn lập trình Python 04/06/2010 00:43:37 (+0700) | #15 | 212291
cr4zyb0y
Member

[Minus]    0    [Plus]
Joined: 27/05/2010 11:50:30
Messages: 51
Offline
[Profile] [PM]

zjm_zjm wrote:
Bạn nào có biết những trang wed hay diễn đàn nào nói về python không. có ít diễn đàn về cái này quá  


http://vithon.org đó bạn .
[Up] [Print Copy]
  [Programming]   Hướng dẫn lập trình Python 01/02/2012 19:58:49 (+0700) | #16 | 253022
[Avatar]
bolzano_1989
Journalist

[Minus]    0    [Plus]
Joined: 30/01/2007 12:49:15
Messages: 1406
Offline
[Profile] [PM]

brucelee.star wrote:
tại sao python của mình lại bị lỗi này nhỉ?
các bạn giải thích giùm với...
>>> blog[0]
sau đó ấn enter thì nó báo lỗi:
Traceback (most recent call last):
File "<pyshe11#0>", line 1, in <module>
blog[0]
NameError:name 'blog' is not defined

(python 3.0) 


Do bồ chưa gõ dòng lệnh sau đã có trong bài viết smilie :
Code:
blog = ["Entry thu nhat", "Python that tuyet"]
Kiểm tra các file bạn nghi ngờ có virus:
http://goo.gl/m3Fb6C
http://goo.gl/EqaZt
http://goo.gl/gEF8e
Nhận mẫu virus qua FB: http://goo.gl/70Xo23
HVA Malware Response Team: kiemtravirus@gmail.com
Trợ giúp diệt virus: http://goo.gl/2bqxY
[Up] [Print Copy]
  [Programming]   Hướng dẫn lập trình Python 22/12/2012 20:16:03 (+0700) | #17 | 272037
dannylee93
Member

[Minus]    0    [Plus]
Joined: 19/12/2012 10:29:02
Messages: 1
Offline
[Profile] [PM]
mình đang dùng python 3.2,cái phần mềm chạy code python như dos trong win đó.ai biết lệnh xoá màn hình ko.như trong pascal là clrscr ấy smilie.ths
[Up] [Print Copy]
  [Programming]   Hướng dẫn lập trình Python 23/12/2012 07:55:26 (+0700) | #18 | 272046
[Avatar]
flyl9134
Member

[Minus]    0    [Plus]
Joined: 05/09/2012 01:19:04
Messages: 17
Location: The mirror....
Offline
[Profile] [PM]

dannylee93 wrote:
mình đang dùng python 3.2,cái phần mềm chạy code python như dos trong win đó.ai biết lệnh xoá màn hình ko.như trong pascal là clrscr ấy smilie.ths 


Sao bạn lại không thử tìm kiếm trước khi đặt câu hỏi nhỉ? Nhưng dù sao cũng cảm ơn bạn, trước tôi cũng không biết cái này, nhờ câu hỏi của bạn mà tôi tìm hiểu và thêm được một kiến thức mới.

Các OS đều có command clear screen cho riêng mình, mình đang lập trình Python nhưng ai cấm mình "lợi dụng" mấy cái command này nhỉ?

Code:
import os

os.system('cls') #Windows

os.system('clear') #Linux

The quieter you become, the more you are able to hear.
[Up] [Print Copy]
  [Question]   Hướng dẫn lập trình Python 10/04/2014 17:54:57 (+0700) | #19 | 280275
tdungsi1
Member

[Minus]    0    [Plus]
Joined: 04/01/2012 04:49:10
Messages: 6
Offline
[Profile] [PM]
Cho mình hỏi, cùng một câu lệnh nhưng khi soạn thảo trên website python.org thì nó bình thường, và lúc dùng nó trong phần mềm soạn thảo ở máy tính cá nhân thì nó báo lỗi như trong hình. Bạn giúp mình sửa lỗi này với nhé.
Nếu được thì bạn có thể gửi cách sửa lỗi vào GMail này cho mình luôn nhé.
GMAIL : ngoquangtri2504@gmail.com

http://s28.postimg.org/t6sv8ijz1/Python01.png
[Up] [Print Copy]
  [Programming]   Hướng dẫn lập trình Python 12/04/2014 11:23:11 (+0700) | #20 | 280308
whisky9x
Member

[Minus]    0    [Plus]
Joined: 07/07/2013 10:29:09
Messages: 6
Offline
[Profile] [PM]

tdungsi1 wrote:
Cho mình hỏi, cùng một câu lệnh nhưng khi soạn thảo trên website python.org thì nó bình thường, và lúc dùng nó trong phần mềm soạn thảo ở máy tính cá nhân thì nó báo lỗi như trong hình. Bạn giúp mình sửa lỗi này với nhé.
Nếu được thì bạn có thể gửi cách sửa lỗi vào GMail này cho mình luôn nhé.
GMAIL : ngoquangtri2504@gmail.com

http://s28.postimg.org/t6sv8ijz1/Python01.png 


Dòng return bạn phải lùi vào 4 khoảng trắng.

Code:
>>> def nfunc(blog, newen):
...     return blog + [newen]
[Up] [Print Copy]
  [Programming]   Hướng dẫn lập trình Python 15/04/2014 10:33:38 (+0700) | #21 | 280335
tuanhung2609
Member

[Minus]    0    [Plus]
Joined: 23/06/2013 20:37:38
Messages: 3
Offline
[Profile] [PM]
Cảm ơn bạn vì tinh thần chia sẻ, chờ bài tiếp của bạn
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|