Thursday, 29 July 2010

Chia OS để nghịch!

Hiện tại đang dùng ubuntu
Nhưng mà vãn thích nghịc mấy cái distro khác.
Chia mỗi thằng nghịc 1 cái nhé (cài trực tiếp hoặc cài trên virtualbox cũng đc)

Fedora 13
openSUSE 11.3
Debian 5.0.5
Linux Mint 9
Mandriva 2010.1

Có tất cả 5 cái đc chọn ra ở đây. Mỗi thằng vào nhận phần đê ;;)

T chọn Debian :D

Sunday, 25 July 2010

Con gà của ông Chebyshev

Xác suất nào \m/ nhớ thầy Bình quá :">



8.1. Khoảng cách giữa tư bản hút máu và xã hội chủ nghĩa
Tiếp theo bài trước, hãy nói về con gà của bác nông dân. Bác nông dân và địa chủ ăn hết một con gà, nhưng địa chủ ăn sạch cả con, bao gồm xương, lông, cánh, và phao câu. Tí và Tèo cũng ăn hết một con gà. Mỗi đứa làm đúng một nửa. Trung bình mỗi người cũng là nửa con. Hai vec-tơ phân phối thịt gà {(1,0)}{(1/2,1/2)} đều có trị trung bình là {1/2}, nhưng một đằng là tư bản hút máu, một đằng là xã hội chủ nghĩa. Thế thì giá trị trung bình không cung cấp đủ thông tin để phân biệt giữa TBHM và XHCN. Cần thêm thông tin.
Để phân biệt giữa hai thái cực thì ta định nghĩa một hàm khoảng cách. Cặp XHCN (Tí, Tèo) {(1/2, 1/2)} là một điểm trên mặt phẳng. Cặp TBHM (Địa chủ, Nông Dân) {(1, 0)} là điểm khác. Hàm khoảng cách tự nhiên nhất là khoảng cách Euclid. Dễ thấy rằng phân phối thịt gà {(a,b)} có khoảng cách Euclid đến XHCN càng nhỏ thì {a}{b} càng gần bằng nhau, xã hội càng gần công bằng, dân chủ, văn minh, mỗi người ăn càng gần nửa con gà bất kể kích thước bao tử. (Để đo mức độ tư bản hút máu, dĩ nhiên khoảng cách Euclid không phải là chọn lựa duy nhất. Có thể dùng chỉ số GINI hay một trăm tỉ các hệ số khác do bọn tư bản rỗi hơi nghĩ ra.)

Ông Chebyshev bảo rằng, nếu cho ông ấy biết thêm khoảng cách đến XHCN thì ông ấy sẽ cho mình ước lượng tốt hơn số trọc phú, số vô sản, hoặc số trung lưu. Khoảng cách đến CNXH được đo bằng độ lệch chuẩn (standard deviation) {\sigma}, có giá trị bằng căn bậc hai của phương sai (variance) {\sigma^2}. Độ lệch chuẩn trong ví dụ trên là chiều dài (Euclid) của con đường quá độ lên CNXH chia cho căn của tổng dân số. (Sở dĩ ta chia cho căn của tổng dân số là để cho số đo này ít bị ảnh hưởng bởi số dân, chi tiết này không quan trọng lắm trong ngữ cảnh của chúng ta.) Cụ thể hơn, gọi {X} là một biến ngẫu nhiên trên một phân bố bất kỳ (không nhất thiết là phân bố đều) với trị kỳ vọng {\mu = E[X]}, phương sai {\sigma^2 = E[(X - \mu)^2]} thì với mọi {k > 0},
  • Ta có thể chặn trên số trọc phú:
    \displaystyle  \text{Prob}[X - \mu \geq k \sigma] \leq \frac{1}{1+k^2}.
  • Ta có thể chặn trên số vô sản:
    \displaystyle  \text{Prob}[X - \mu \leq - k \sigma] \leq \frac{1}{1+k^2}.
  • Ta có thể chặn trên tổng số vô sản và trọc phú:
    \displaystyle  \text{Prob}[|X - \mu| \geq k \sigma] \leq \frac{1}{k^2}.
    Nói cách khác, ta có thể chặn dưới đám trung lưu bằng:
    \displaystyle  \text{Prob}[|X - \mu| \leq k \sigma] \geq 1- \frac{1}{k^2}.

8.2. Ứng dụng trong một bài toán lấy mẫu
Một vấn đề cơ bản ta gặp thường xuyên trong thiết kế các thuật toán cho dòng dữ liệu là: ta phải ước lượng trị kỳ vọng {\mu = E[X]} của một biến ngẫu nhiên {X}. Luật số lớn đại khái cho ta biết rằng nếu ta lấy {n} mẫu và dùng trị trung bình {\bar \mu} của các mẫu để ước lượng {\mu} thì {\lim_{n \rightarrow \infty} \bar \mu = \mu.} Nghĩa là lấy càng nhiều mẫu (độc lập) thì ước lượng càng chính xác.
Bài toán lấy mẫu: cho trước {(\epsilon, \delta)}, cần lấy ít nhất bao nhiêu mẫu để cho
{\text{Prob}[|\bar \mu-\mu| \leq \epsilon \mu] \geq 1- \delta}
Trong đó {\epsilon} gọi là độ sai lệch, và {\delta} là độ tin cậy.
Nếu ta biết (hoặc chặn trên được) phương sai của {X} thì có thể trả lời tương đối tốt câu hỏi trên. Giả sử ta lấy {n} mẫu độc lập {X_1, \dots, X_n}, và gọi {Y} là tổng của {n} mẫu này. Do {E[X_i] = \mu}, {\text{Var}[X_i] = \sigma^2} và các biến này độc lập, dễ thấy rằng {E[Y] = n\mu}{\text{Var}[Y] = n\sigma^2}. Từ đó, bất đẳng thức Chebyshev dẫn đến:
\displaystyle  \text{Prob}[|\bar \mu-\mu| > \epsilon \mu] = \text{Prob}[|Y - n\mu| > n\epsilon \mu] \leq \frac{\sigma^2}{n\mu^2\epsilon^2}.
Do đó, chọn {n \geq \frac{\sigma^2}{\delta\mu^2\epsilon^2}} mẫu là đủ.
Ta có thể làm tốt hơn thế dùng cái mẹo gọi là mẹo trung vị (median trick). Để mô tả nó thì ta cần dùng các đồng xu của ông Chernoff để mua con gà của ông Chebyshev. Xem hồi sau sẽ rõ.

http://www.procul.org/blog/2010/07/09/gt-8-con-ga-c%E1%BB%A7a-ong-chebyshev/

[TUT] Intall Transmission 2.0 in Ubuntu

  Transmission is one of the P2P torrent client for Linux and Mac. The interface is quite intuitive and user friendly. Following are some of the features of Transmission 2.0.

* “Local Peer Discovery” for finding peers on the local network
* Optimize download requests for the bandwidth available
* Smarter heuristics when deciding the order to connect to peers
* Faster verification of local data
* Faster startup
* Support more blocklist file formats
* Use IEC standard units (KiB, MiB, GiB) instead of (KB, MB, GB)
* Better handling of 404 tracker errors

  In order to install transmission 2.0 torrent client type the following commands in a terminal window:

1. sudo add-apt-repository ppa:transmissionbt/ppa
2. sudo apt-get update
3. sudo apt-get install transmission

Once installed you can find it under Applications / Internet / Transmission


Friday, 23 July 2010

Để desktop Linux hiệu quả hơn

Quản trị mạng – Có nhiều cách có thể tạo một desktop Linux hiệu quả, tuy nhiên trong bài này chúng tôi sẽ thu hẹp danh sách này xuống thành 5 mẹo. Thậm chí nếu bạn chỉ sử dụng một số kỹ thuật này, trải nghiệm desktop của bạn sẽ trở nên hiệu quả hơn rất nhiều.
1. Với pager
Có thể nói một số người sử dụng chưa đúng Linux pager. Luôn loanh quanh và sử dụng nó với cùng một chức năng – mặc dù vậy nó cung cấp cho người dùng nhiều desktop để làm cho các desktop được tổ chức tốt hơn. Tốt hơn hết các bạn nên sử dụng chúng như sau: cho ví dụ với bốn không gian làm việc, bạn có thể sử dụng mỗi một nơi cho một nhiệm vụ sử dụng khác nhau. Sự bố trí sẽ như sau:
  • Desktop 1 dành cho các công cụ kết mối mạng
  • Desktop 2 dành cho các công cụ soạn thảo văn bản/ văn phòng
  • Desktop 3 dành cho đồ họa và video
  • Desktop 4 dành cho các mục linh tinh
Sự bố trí này sẽ bao trùm được các vấn đề với một người dùng nào đó. Để phù hợp riêng với bạn, bạn có thể thực hiện điều chỉnh chút ít về cách bố trí này sao cho phù hợp.
2. Quản lý cửa sổ
Một desktop có thể có nhiều cửa sổ. Bạn có thể thu nhỏ các cửa sổ đang mở, tuy nhiên sau đó bạn sẽ thấy hoảng sợ với một danh sách đầy các cửa sổ - đôi khi tìm ra cửa sổ mà bạn muốn tìm là một điều khó. Hãy sử dụng những khả năng ưu việt của tính năng Shade trong bộ quản lý các cửa sổ. Tất cả những gì bạn cần thực hiện là kích đúp vào thanh tiêu đề của bộ quản lý này và cửa sổ sẽ xuất hiện giống như một cửa sổ mờ trong thanh tiêu đề. Bằng cách này bạn luôn có thể biết được cửa sổ nào là gì và có thể tổ chức tốt hơn các cửa sổ đó để làm việc dễ dàng hơn.
3. Các phím tắt
Nếu chưa tận dụng được các phím tắt trong Linux, chăc chắn bạn đã không biết những gì mình đang thiếu. Cả hai môi trường desktop chủ đạo (GNOME và KDE) đều cung cấp khá nhiều các phím tắt bàn phím được cấu hình trước, thêm vào đó bạn còn có thể tạo các phím tắt của riêng mình. Chắc chắn một điều mà hầu như ai cũng phải công nhận đó là: càng để lại ngón tay trên bàn phím, công việc của bạn sẽ càng hiệu quả hơn.
4. Bộ vẽ
Một trong những tính năng thú vị của panel GNOME là bạn có thể bổ sung thêm các bộ vẽ. Các bộ vẽ này là các menu trượt ra, nơi bạn có thể đặt vào các biểu tượng hoặc applet cần thiết. Thực hiện điều này thay vì làm  cho desktop tràn ngập biểu tượng, và sẽ không tốn thời gian quá nhiều vào việc tìm kiếm. Bạn có thể nâng mức lên cao nữa và tạo các bộ vẽ khác cho các kiểu ứng dụng khác nhau. Có thể dùng một bộ vẽ cho hầu hết các ứng dụng được sử dụng cho văn phòng, bộ vẽ cho hầu hết các ứng dụng xã hội,... Đây là cách làm hiệu quả hơn với việc phải truy cập qua một kiến trúc menu.
5. Quản lý thư mục
Có một thứ luôn ở xa người dùng. Các phân phối Linux hiện đại cho một cảm giác logic và hoàn hảo đối với thư mục HOME (~/). Bạn sẽ tìm:
  • Desktop
  • Documents
  • Downloads
  • Pictures
  • Music
  • Public
  • Templates
  • Videos
Nếu bạn duy trì được kiến trúc này và để các file vào đúng địa điểm của nó, chắc chắn bạn sẽ tốt ít thời gian hơn so với việc dựa vào các công cụ tìm kiếm. Một hệ thống thư mục/file được tổ chức nghèo nàn sẽ làm cho người dùng phải tốn nhiều thời gian hơn những gì họ hình dung. Thậm chí các bạn cũng nên bổ sung thêm các thư mục con vào kiến trúc này, điều đó sẽ giúp cho bạn tổ chức được hệ thống ở mức tốt nhất có thể. Sự chuẩn hóa trên desktop Linux này đã xuất hiện từ lâu và đó chính là lý do nó được sinh ra.
Với các mẹo trên, bạn có thể sẽ ngạc nhiên về cách phải thực hiện để làm cho trải nghiệm desktop Linux của mình hiệu quả. Có thể nói 5 mẹo làm cho desktop Linux của bạn trở nên hiệu quả và có tính tổ chức cao này là hoàn toàn mang tính cá nhân. Nếu bạn có ý kiến gì khác, hay có các mẹo nào của riêng mình, hãy chia sẻ cho chúng tôi và các độc giả khác cùng biết!
Văn Linh (Theo Techrepublic)

Friday, 16 July 2010

Python - Bài 2.2 - While, Note

2.2.1 Chú thích trong Python
Trong python, ta đặt các dòng chú thích sau dấu #.
Trình dịch sẽ bỏ qua chúng.

Note: #!/usr/bin/env python cũng là 1 chú thích! nhưng phải có vì nó giúp terminal biết rằng đây là 1 chương trình python để terminal gọi trình biên dịch python (đóan thế =)) )
2.2.2 Sử dụng nháy đơn và nháy kép
Sử dụng “abc” và ‘abc’
Có thể sử dụng nháy đơn hay nháy kép đều được. Tùy chọn dùng cái này khi cái kia xuất hiện một cách linh họat. Ví dụ
[code]
print 'I am a Huster'
print "I'm a Hutster"
print 'She said "Don\'t kiss me"'
[/code]
dấu \ đã sử dụng ở vd 3
\n : xuống dòng
\t : tab

dùng 1 dấu = để gán giá trị cho biến, dùng 2 dấu = "==" để so sánh 2 biến hoặc 2 giá trị , hoặc biến với giá trị.

if x==y:
elif:
........
else:
...........

sau dấu : (colon), câu lệnh phải lùi thụt vào (tab or 4 spaces)


Lệnh While

Thực hiện vòng lặp khi điều kiện được thỏa mãn:
[code]
#!/usr/bin/env python
loop=1
while loop == 1:
x = raw_input("Enter something or 'quit' to end ==> ")
if x== 'quit':
print 'quitting'
loop = 0
else:
print 'you typed %s' % x
[/code]

trong ví dụ, điều kiện biến loop == 1 đã thoả mãn nên vòng lặp được thực hiện.

VD:
Dùng list, các vòng lặp và những gì đã học để viết 1 chương trình đăng nhập. Người dùng nhập User và password. Chương trình kiểm tra và thông báo.

Bài làm:
[code]
#!/usr/bin/env python
usr=['FAMIHUG','hvnbbz','HVN']
pwd=['123456','123','321']

user = raw_input("Nhap username: ")
pas = raw_input("Nhap password: ")
x=0
for count in range(0,2):
x=x+1
if user==usr[x]:
k=x
if pas==pwd[k]:
print "Chao mung "+usr[x]+" da dang nhap tro lai"
else:
print "Ban da nhap sai username hoac password"
relogin = raw_input("Ban co muon dang nhap lai? (c/k)")
if relogin == 'k':
print "quitting...."
else:
print "het tien...."
else:
print 'Tai khoan nay khong co trong danh sach thanh vien FAMILUG'
[/code]
Ai có bài làm hay hơn thì post nhé :D Trong số FC28 có sử dụng module có sẵn nên không phải dùng vòng lặp để kiểm tra.

PS: copy về paste không chạy được vì có đoạn code chưa thụt vào sau dấu 2 chấm (colon)

Tuesday, 13 July 2010

Python - Bài 2.1 - Danh sách và thay thế biến.

Bài 2 này gồm 2 phần. Tớ tách thành 2.1 trước học cho nhẹ.

2.1.1 List (danh sách, mảng)

Các ngôn ngữ khác gọi là array, Tiếng Việt gọi là mảng hay danh sách. Trong python gọi là List

Ví dụ
[code]
membs = ['FamiHug','YoYoCiCi','KazeCu','EuroCuong','KeTuKy','TuanTuTu','SonNhaQue']
[/code]
các phần tử của danh sách nằm trong ngoặc vuông '[‘và’]' - (Square Brackets), mỗi phần tử nằm trong dấu nháy đơn và phân cách với nhau bằng dấu phẩy.
print membs[0] sẽ cho phần tử 'FamiHug'
print membs[1] sẽ cho phần tử 'YoYoCiCi'
Chú ý rằng phần tử trong danh sách luôn 'đánh số' bắt đầu từ 0.

Để tìm số phần tử (độ dài) của list. Ta dùng
print len(membs) và kết quả trả về là 7. (len viết ngắn của Length)

2.1.2 Thay thế biến.

Khi muốn hiển thị đoạn text mà nội dung của đoạn text là một biến. Ta sử dụng Variable Substitution (thay thế biến). Nếu muốn thay thế cho 1 string ta sử dụng '%s' rồi sau đó thông báo với chương trình đoạn muốn thay thế.
(với integer (số nguyên) ta dùng '%d') ---> khá là giống C

ví dụ:
[code]
print 'Ten thanh vien: %s' % membs[0]
[/code]

Sau đây là ví dụ cho phần này:
Đề bài: dùng list, viết chương trình liệt kê các thành viên của FAMILUG, đếm số thành viên ấy. Viết bảng thành tích gái gú =))
[code]
#!/usr/bin/env python

membs = ['FamiHug','YoYoCiCi','KazeCu','EuroCuong','KeTuKy','TuanTuTu','SonNhaQue']
lover =['3','3','5','7','n (voi n = so tuoi cua KeTuKy)','5','0 =))']
print 'So thanh vien cua FAMILUG la:'
print len(membs)
print 'Cac thanh vien la:'
for counter in range(0,7):
print membs[counter]
print '~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
print 'Bang thanh tich yeu duong'
for counter in range(0,7):
print '%s da qua tay %s em.' %(membs[counter],lover[counter])
[/code]

đề nghị các thành viên nghĩ ra bài tập và đưa lên nhóe. Tuần này học 2 bài thôi, Cho nó ngấm. Hehe

Monday, 12 July 2010

Python - Bài 1: Làm quen với Python (Print,For)

Bài viết này là bản rút gọn từ bài viết trong Full Circle Magazine số 27.
NOTE:
Nội dung đoạn mã (code) sẽ bắt đầu sau [code] kết thúc trước [/code]
nội dung đoạn lệnh trong terminal bắt đầu sau [cmd] kết thúc trước [/cmd]

1. Làm quen với Python. Lệnh Print

Ví dụ:
Mở gedit ra (Accessories > Gedit)

Gõ vào đoạn code sau:
[code]
#!/usr/bin/env python
print 'Xin chao thanh vien cua FAMILUG'
name=raw_input("Ban ten la gi? ")
print "Chao, " +name+ " hoc dot!"
[/code]

sau đó save vào Famihug(hoặc tên User khác)/Pythoneg/
với tên hello.py

Sau đó mở Terminal (bấm Ctrl Alt T)

[cmd]
cd Pythoneg

chmod +x hello.py ## đoạn này mình config cho file hello.py có thể chạy được
./hello.py
[/cmd]
Sẽ thấy trong terminal hiện ra:
[cmd]
hvn@hvn-desktop:~/Pythoneg$ chmod +x hello.py
hvn@hvn-desktop:~/Pythoneg$ ./hello.py
Xin chao thanh vien cua FAMILUG
Ban ten la gi? FamiHug
Chao, FamiHug hoc dot!
hvn@hvn-desktop:~/Pythoneg$
[/cmd]

Giải thích đoạn code:
#!/usr/bin/env python
thông báo với hệ thống rằng đây là 1 chương trình python, sử dụng trình biên dịch mặc định để chạy chương trình.
print 'Xin chao thanh vien cua FAMILUG'
làm hiện ra màn string "Xin chao thanh vien cua FAMILUG", chú ý ở đây sử dụng dấu nháy đơn.
name=raw_input("Ban ten la gi? ")
raw_input(....) làm hiện lên trên terminal "Ban ten la gi?" và sau đó đợi user gõ vào một đoạn ký tự kết thúc bằng phím Enter.
name là biến chứa đoạn ký tự mà bạn vừa nhập.
print "Chao, " +name+ " hoc dot!"
hiện lên terminal "Chao, - nội dung biến name - hoc dot!"

còn gì thắc mắc không???

NOTE: Lệnh Print mặc định sau khi in xong sẽ xuống dòng.
Để không xuống dòng ta thêm dấu phẩy sau lệnh Print

VD:
print "Yoyo",
print "Love"

được kết quả
Yoyo Love

2. Vòng lặp For đơn giản.

Mở gedit. Gõ đoạn code
[code]
#!/usr/bin/env python
for hehe in range(5,10):
print hehe
[/code]
Cấu trúc lệnh:
[code]
for TÊNBIẾN in range(int1,int2):
lệnh.....
[/code]
NOTE: sau range() phải có dấu ":"
nội dung trong vòng lặp không đặt trong dấu () hay {} như các ngôn ngữ khác mà được phân biệt bằng cách dùng dấu tab đẩy dòng lệnh vào trong hoặc sử dụng 4 dấu "space".
range(int1,int2) - bắt đầu đếm từ giá trị 0 , sau mỗi vòng lặp, cộng thêm 1 vào, đến khi gặp gía trị int1 thì gán int1 cho biến, kết thúc khi lặp đủ int2 lần. (theo tớ hiểu là như thế)
Như trong ví dụ sẽ có kết quả là
[cmd]
hvn@hvn-desktop:~/Pythoneg$ ./loop.py
5
6
7
8
9
[/cmd]


Ở đây đếm từ 0 đến khi đạt gía trị bằng 5 [đã đếm 6 lần: 0,1,2,3,4,5] thì gán 5 cho biến hehe, sau đó print ra giá trị của hehe (tức là 5). Rồi lặp, cộng 1 vào gía trị hehe -> 6, lại print ra. Cứ tiếp tục như thế khi đếm đủ 10 lần (0,1,2,3,4,5,6,7,8,9) thì dừng lại.


Nếu có gì thắc mắc thì Comment nhé.
Mỗi người hãy gửi lên 1 bài tập nâng cao 1 chút cho phần này.


Sau đây là 1 bài tập nhỏ:
Bài tóan tính tổng 2 số tự nhiên
[code]
#!/usr/bin/env python
print 'Chuong trinh tinh tong 2 so tu nhien'
print 'Written by FAMIHUG'
m1 = raw_input("Nhap so thu nhat :")
print "So thu nhat la: " +m1+"."

m2 = raw_input("Nhap so thu hai :")
print "So thu hai la: "+m2+"."

print "Tong hai so la:"
print int(m1)+int(m2)
[/code]

câu hỏi: làm thée nào để tổng của hai số không bị xuống dòng? so với đoạn chữ "Tong hai so la: "


Tham khảo thêm trong Full circle magazine số 27.
Goodluck! học nhanh còn sang bài 2.


Updated!
06-08-2010: Print in the same line: print ra cùng dòng

[Tut]Cài đặt ứng dụng trong Ubuntu

Có 3 cách để cài 1 ứng dụng vào máy của bạn:

Cách 1: sử dụng Ubuntu Software Center hoặc synaptic


Gõ tên phần mềm trong ô Search rồi bấm Install. Gõ pass rồi chờ cài xong. Chú ý là chỉ cài đặt phần mềm khi đang không cài cái gì khác (các gói deb, đang dùng synaptic, update.... )

Synaptic: System -> Admin -> Synaptic Package Manager

Cách 2: sử dụng các gói .deb, .rpm
Gói .deb (debian):

một số phần mềm không tìm thấy trong software center bạn có thể down file .deb trên các trang chủ của phần mềm đó. Chỉ việc mở file .deb và bấm install, gõ pass là xong

Gói .rpm
Trường hợp không thể tìm được gói(file/package) .deb, thay vào đó bạn có thể thử gói .rmp. Chúng là những package thường dùng cho các distro khác như Fedora hay Mandriva. Thế nhưng có 1 ứng dụng tên là "alien" (bạn có thể sủ dụng Synaptic để cài nó) cho phép bạn convert file .rpm sang .deb (đa số là được)

Cách 3: Compile từ source code.

Down về file .tar.gz
Đây là 1 kiểu file nén tương tự .rar .zip. Nó có chứa các file binary hoặc source code. Bạn có thể dùng để compile các ứng dụng từ source code của nó. (sẽ viết bài hướng dẫn cụ thể cho phần này sau)

Thursday, 8 July 2010

Python và FAMILUG

Python là một ngôn ngữ lập trình đơn giản nhưng rất hiệu quả.

  • So với Unix shell, Python hỗ trợ các chương trình lớn hơn và cung cấp nhiều cấu trúc hơn.
  • So với C, Python cung cấp nhiều cơ chế kiểm tra lỗi hơn. Nó cũng có sẵn nhiều kiểu dữ liệu cấp cao, ví dụ như các mảng (array) linh hoạt và từ điển (dictionary) mà ta sẽ phải mất nhiều thời gian nếu viết bằng C.

Python là một ngôn ngữ lập trình cấp cao có thể đáp ứng phần lớn yêu cầu của lập trình viên:

Thế nên học Python từ bây giờ luôn nhé. Sang năm nếu phải viết cái j thì viết bằng Python luôn cho dễ. Đồng nhất cả team luôn. Vì dễ học dễ dùng nên sẽ học rất nhanh thôi. Lập trình trên Ubuntu luôn.

Down bài học đầu tiên ở đây:

http://fullcirclemagazine.org/issue-27/

Ngay và luôn nhé. Cho tất cả 2 tuần tính từ hôm nay trước khi làm bài tập lớn ;)
Gudluck!

Monday, 5 July 2010

Tỉnh dậy nào, các chàng trai học dốt! :))

Tỉnh dậy đi hỡi những người đàn ông đã quá 20 tuổi.
Tỉnh dậy từ giấc ngủ say...
Bằng tuổi các cậu, người ta đã kiếm được tiền nuôi sống bản thân
Bằng tuổi các cậu, người ta đã là 1 người trưởng thành
Bằng tuổi các cậu, người ta đã dựng  được một phần của sự nghiệp....
!
Bằng tuổi người ta, các cậu biết ăn biết ngủ
Bằng tuổi người ta, các cậu học đi thi lại vài lần
Bằng tuổi người ta, các cậu không kiếm đủ tiền uống trà đá...
Bằng tuổi người ta, các cậu chưa là cái gì cả.

Đồ học dốt, ngủ ít thôi, dậy đê! :))