2015年3月31日星期二

asyncio

上年寫咗一段code攞Hacker News 主題,跟住試改用requests,簡化如下:

import concurrent.futures
import requests

URL = 'https://hacker-news.firebaseio.com/v0/'

def get_hn_item(item_no):
    r = requests.get('{}item/{}.json'.format(URL, item_no))
    return r.json()

if __name__ == '__main__':
    r = requests.get(URL + 'topstories.json')
    toplist = r.json()[:10]
    with concurrent.futures.ProcessPoolExecutor() as executor:
        for c, i in enumerate(executor.map(get_hn_item, toplist), 1):
            print('{:>3}: {}'.format(c, i['title']))

其實冇乜點簡化到,只係方便過用urllib少少,於是試吓改用Python 3.4內置的asyncio,然後再裝aiohttp,不用開thread或process,再改良一下:

import asyncio
import aiohttp

URL = 'https://hacker-news.firebaseio.com/v0/'

@asyncio.coroutine
def fetch_page(url):
    response = yield from aiohttp.request('GET', url)
    return (yield from response.json())

@asyncio.coroutine
def fetch_item(item_no, seq):
    content = yield from fetch_page('{}item/{}.json'.format(URL, item_no))
    yield from asyncio.sleep(seq)
    print('{:>3}: {}'.format(seq, content['title']))

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    content = loop.run_until_complete(fetch_page(URL + "topstories.json"))
    tasks = [asyncio.async(fetch_item(i, c)) for c, i in enumerate(content[:10], 1)]
    loop.run_until_complete(asyncio.wait(tasks))
    loop.close()

有關asyncio和aiohttp的tutorial不多,較難學習。

2015年3月23日星期一

Google Noether

今天是德國數學家Emmy Noether生日,不google一下也不知道,原來她在Abstract algebra的貢獻是那麼大。

2015年3月6日星期五

Gamma function

Permutation是一個計算排列次序的方法,假設有一個element A,

(A)

它的排列次序只有一種。那麼假如有兩個element A和B,

(A, B)
(B, A)

這裡就有兩個排列次序。那麼三個呢,

(A, B, C)
(A, C, B)
(B, A, C)
(B, C, A)
(C, A, B)
(C, B, A)

總共有六種。如果有n個element,那麼有多少個不同的排列次序呢?

第一個element,有n個選擇,第二個element,有n - 1個選擇,第三個element,有n - 2個選擇,到最後第n個element,只得一個選擇。所以permutation就有n × (n - 1) × (n - 2) × ... × 1。這個數以n!表示,稱為n的factorial。

如果n是0呢,即是

()

這都一個排列方式,所以0! = 1。

2015年2月26日星期四

Visual approach

之前都介紹過條短片講解Fundamental theorem of Algebra,今次介紹呢個proof [PDF]方法好特別,係用color去proof。

2015年2月25日星期三

Nested radical

好耐之前起某本書見過這個Nested radical,想了好一會也不知如何解,書中亦沒有solution。原來解法可以這麼簡潔聰明。

Geometric group theory

Terence Tao個blog呢就冇乜邊一篇文章可以睇得晒,今次揾到呢篇講Geometric group theory算係比較容易明少少。

2015年2月23日星期一

Euler product

Euler將zeta function由個連續加數轉變成乘數,

Zeta function ζ(s) = 1 + 1/2s + 1/3s + 1/4s + ...
ζ(s)/2s = 1/2s + 1/4s + 1/6s + ...
ζ(s) - ζ(s)/2s = 1 + 1/3s + 1/5s + 1/7s + ...
(1 - 1/2s)ζ(s) = 1 + 1/3s + 1/5s + 1/7s + ...

所有2的倍數都消去,重覆以上步驟,3, 5, 7...到所有prime number,
(1 - 1/3s)(1 - 1/2s)ζ(s) = 1 + 1/5s + 1/7s + 1/11s...
(1 - 1/5s)(1 - 1/3s)(1 - 1/2s)ζ(s) = 1 + 1/7s + 1/11s + 1/13s...
(1 - 1/7s)(1 - 1/5s)(1 - 1/3s)(1 - 1/2s)ζ(s) = 1 + 1/11s + 1/13s + 1/17s...