Trích dẫn




Only a person who risks is truly free.


Ảnh

Ảnh

Chủ Nhật, 30 tháng 8, 2015

Định lý Dirichlet và bữa cơm tối

Ví dụ bạn chịu trách nhiệm phải dọn cơm tối cho gia đình. Nhiệm vụ của bạn chỉ là lấy đũa cho các thành viên của gia đình. Trời thì lại bị cúp điện, chả nhìn ra cây đũa nào với cây đũa nào. Hôm qua có một buổi tiệc mừng bạn vào đại học, thế là có rất nhiều loại đũa được đưa vào trong kệ bát đĩa mà chưa phân loại (giả sử số đôi đũa mỗi loại đều nhiều hơn số người). Vậy làm thế nào để lấy đủ đũa cho đình mà mỗi chiếc trong đôi ko khác loại. :D yes, Dirichlet theorem. 
Có thể thấy là tùy vào số loại đũa mà bạn cần lấy số đũa cần thiết. Ví dụ gia đình 4 người, có 1 loại đũa thì hẳn là lấy 8 cây, 2 loại đũa thì lấy 9 cây, 3 loại thì lấy 10 cây. 
Một ứng dụng vui vẻ của định lý Dirichlet. 

Thứ Tư, 19 tháng 8, 2015

Google trên command line


Lập trình viên thì nên hạn chế sử dụng chuột :D đang sài cmd mà cứ phải chuyển tab qua trình duyệt để tìm kiếm thì "mệt" quá, nhất là những vẫn đề chỉ cần xem ví dụ là hiểu hoặc chỉ cần liếc sơ qua google là được, thì làm ngay trên cmd là quá tiện. Mình mới viết cái script trên python 2.7 để "google".
Có một số lỗi nhỏ nhưng không ảnh hưởng gì, lần sau có cập nhật thì mình sẽ tìm cách sửa luôn và update thêm tính năng qua trang và truy cập link, cũng đơn giản nhưng đang bận quá :D đồng thời thêm một số option.
Các bạn có thể build thành exe và tạo biến môi trường cho nó, mình thì build thành go.exe, giờ chỉ cần "go Vu Ngoc Minh Hoang" là xong. Rất tiện.
Trên terminal cũng tương tự.
---------------------------
# -*- coding: utf8 -*-

# Dev: Vu Ngoc Minh Hoang  
# Public: 19-08-2015
# Version: 1.0
# Example: go Vu Ngoc Minh Hoang
from urllib2 import urlopen
from urllib2 import HTTPError
import urllib2
import sys
import re
import string
def mergerURL():
url = 'https://www.google.com/search?q='
for i in range(1,len(sys.argv)):
url = url + str(sys.argv[i]) + '+'
return url

if __name__ ==  '__main__':
#fake the mozilla headers
header = {'User-Agent' : 'Mozilla/5.0 (X11; U; Linux i686; en-US)AppleWebKit/533.2(KHTML, like Gecko) Chrome/5.0.342.7 Safari/533.2'}

#merger url
url = mergerURL()

#make request
req = urllib2.Request(url, headers=header)

#creat streamreader
try:
fpage = urlopen(req);
except HTTPError, e:
print "Error: ", e.code, e.reason

print "Read data complete"
#regex
ftitle = re.compile(r'<!--m-->.*?\)">(.*?)</a></h3>.*?<!--n-->')
flink = re.compile(r'<h3 class="r"><a href="(.*?)"')
fcontent = re.compile(r'<span class="st">(.*?)</span><')
###ftitle = re.compile(r'<!--m-->(.*?)<!--n-->')
#fix content
fix = re.compile('(<em>)|(</em>)|(&nbsp)|(</span>)|(<span class="f">)|(<wbr>)')

while True:
lnk = fpage.readline();
#print lnk
if not lnk:
break
else:
rtitle = ftitle.findall(lnk)
rlink = flink.findall(lnk)
rcontent = fcontent.findall(lnk)
if rtitle:
for i in range(len(rtitle)):
print u"[*]", rtitle[i],'\n|', rlink[i], '\n|', fix.sub('',rcontent[i]), '\n'
fpage.close()

#Mình đã update một số option và ngôn ngữ tiếng việt, trên cmd có vẻ như không hiển thị được tiếng việt, tạm thời sử dụng trên powershell nhé :D nhớ chọn font Consolas để hỗ trợ unicode
#Lần update tiếp theo không biết làm gì nhỉ? Truy cập link?
#Mình đã update phần setup cho nó, có vẻ hơi khó chịu khi nó đòi chạy với quyền Admin, nhưng để mình tìm cách fix đã
Chờ feedback của các bạn, các update mới nhất đều có trên github
Link GitHub: https://github.com/RokHoang/Google