搜尋此網誌

2011-01-22

在 PDF 裡寫筆記畫重點 - okular

okular是一款 PDF 閱讀器,不過它比 evince 的功能多一點,那就是寫筆記畫重點。evince 是 Gnome 的預設 PDF 閱讀器,而 okular 則是 KDE 的預設 PDF 閱讀器,所以安裝 okular 後也會一併安裝 KDE 的其他套件。

安裝
sudo apt-get install okular

使用方式
從 tools→review 開啟或直接按 F6。功能有寫筆記、貼上便利貼、用色筆劃線、用螢光筆畫重點、畫底線、做特殊記號,可以說應有盡有。不過這些功能只支援okular,所以用其他閱讀器打開是看不到的。

若要將筆記移轉給別人使用,到 ~/.kde/share/apps/okular/docdata/ 將對應的 xml 檔附上就可以了。也可以用 ubuntu one 同步到雲端,這樣筆記就可以帶著跑了。為啥不用 dropbox 呢?因為 okular 不能指定輸出的資料夾,呵呵。

2011-01-17

Curve fitting in gnuplot

以下的操作在 gnuplot 下,若要從 py3k 操作,需要透過 gnuplot module

這篇輸出了標準連續常態分配跟實際上的分配,現在要用 gnuplot 內建的 function 來做 curve fitting。首先將實際上的分配作成累進分配 (cumulative distribution)。
gnuplot> set table 'cdf.txt'
gnuplot> plot 'temp.txt' u 1:3 s cumul
gnuplot> unset table
設定要做 curve fitting 的函數,這裡是 cumulative normal distribution。
gnuplot> F(x) = (1 + erf((x-mu)/(sigma*sqrt(2))))/2
設定 mu 跟 sigma 的初始值。
gnuplot> mu = 0; sigma = 1;
執行 curve fitting。
gnuplot> fit F(x) 'cdf.txt' u 1:2 via mu, sigma
輸出畫面
Iteration 0
 WSSR        : 0.0544333         delta(WSSR)/WSSR   : 0
 delta(WSSR) : 0                 limit for stopping : 1e-05
 lambda   : 0.0927154

initial set of free parameter values

mu              = 1e-30
sigma           = 1
/

 Iteration 1
 WSSR        : 0.0256412         delta(WSSR)/WSSR   : -1.12288
 delta(WSSR) : -0.028792         limit for stopping : 1e-05
 lambda   : 0.00927154

resultant parameter values

mu              = 1e-30
sigma           = 0.868124
/

 Iteration 2
 WSSR        : 0.0251776         delta(WSSR)/WSSR   : -0.0184151
 delta(WSSR) : -0.000463648      limit for stopping : 1e-05
 lambda   : 0.000927154

resultant parameter values

mu              = 1e-30
sigma           = 0.852472
/

 Iteration 3
 WSSR        : 0.0251665         delta(WSSR)/WSSR   : -0.000439912
 delta(WSSR) : -1.10711e-05      limit for stopping : 1e-05
 lambda   : 9.27154e-05

resultant parameter values

mu              = 1e-30
sigma           = 0.850123
/

 Iteration 4
 WSSR        : 0.0251662         delta(WSSR)/WSSR   : -1.33544e-05
 delta(WSSR) : -3.3608e-07       limit for stopping : 1e-05
 lambda   : 9.27154e-06

resultant parameter values

mu              = 1e-30
sigma           = 0.849758
/

 Iteration 5
 WSSR        : 0.0251662         delta(WSSR)/WSSR   : -7.4803e-07
 delta(WSSR) : -1.8825e-08       limit for stopping : 1e-05
 lambda   : 9.27154e-07

resultant parameter values

mu              = 1e-30
sigma           = 0.849701

After 5 iterations the fit converged.
final sum of squares of residuals : 0.0251662
rel. change during last iteration : -7.4803e-07

degrees of freedom    (FIT_NDF)                        : 80
rms of residuals      (FIT_STDFIT) = sqrt(WSSR/ndf)    : 0.0177363
variance of residuals (reduced chisquare) = WSSR/ndf   : 0.000314577

         Singular matrix in Invert_RtR

2011-01-12

Installing gnuplot 4.5 on ubuntu

reference

Compiling with lua terminal is buggy, so I give it up.
sudo apt-get install automake checkinstall libwxgtk2.8-dev libpango1.0-dev libx11-dev libxt-dev texinfo libgd2-xpm-dev libreadline6-dev
cvs -d:pserver:anonymous@gnuplot.cvs.sourceforge.net:/cvsroot/gnuplot login
cvs -z3 -d:pserver:anonymous@gnuplot.cvs.sourceforge.net:/cvsroot/gnuplot co -P gnuplot
./prepare
./configure
make
make check
sudo make install
How to execute? (After installation, ubuntu keeps the version 4.2.6)
/usr/local/bin/gnuplot

2011-01-10

用 py3k 跟 gnuplot 畫真實股價的機率分配

pdf of standard normal distribution
$$\phi(x)=\frac{1}{\sqrt{2\pi }}e^{\frac{-x^{2}}{2}}$$
cdf of standard normal distribution
$$\Phi(x) =\frac{1}{\sqrt{2\pi}}\int_{-\infty }^{x}e^{\frac{-t^{2}}{2}}dt$$

程式碼
import yfq
from volaty import *
from collections import defaultdict
from bisect import bisect_left
gsl.gsl_cdf_ugaussian_P.restype = c_double

def count_intervals(sequence, intervals):
    count = defaultdict(int)
    intervals.sort()
    for item in sequence:
        pos = bisect_left(intervals, item)
        if pos == len(intervals):
            count[None] += 1
        else:
            count[intervals[pos]] += 1
    return count

def distribution(data, std_numbers):
    temp, std_list1, std_list2, pdf1, pdf2, x_axis = [], [], [], [], [], []
    for i in range(len(data) - 1):
        temp.append((data[i] - data[i+1]) / data[i+1])
    len_temp = len(temp)
    data_std = gsl.gsl_stats_sd(to_array(temp), c_int(1), c_int(len_temp))
    for i in range(20 * std_numbers + 1):
        std_list1.append(round(-std_numbers + 0.1 * i, 1))
        std_list2.append(round(-std_numbers + 0.1 * i, 1) * data_std)
        x_axis.append(round(-std_numbers - 0.05 + 0.1 * i, 2))
    x_axis.append(x_axis[-1] + 0.1)
    counting = count_intervals(temp, std_list2)
    for i in range(len(std_list1)):
        pdf2.append(counting[std_list2[i]] / len_temp)
        if i == 0:
            pdf1.append(gsl.gsl_cdf_ugaussian_P(c_double(std_list1[i])))
        else:
            pdf1.append(gsl.gsl_cdf_ugaussian_P(c_double(std_list1[i])) - gsl.gsl_cdf_ugaussian_P(c_double(std_list1[i-1])))
    pdf1.append(1 - gsl.gsl_cdf_ugaussian_P(c_double(std_list1[-1])))
    pdf2.append(counting[None] / len_temp)
    return [x_axis, pdf1, pdf2]
取出台股指數 Jan-01-2000 到 Dec-31-2010 的還原收盤價,處理後存成 temp.txt,最後用 gnuplot 畫圖並存成 py3k01.png
>>> from py3k01 import *
>>> a1 = yfq.get_historical_prices('^twii', '20000101', '20101231')
>>> a2 = [eval(r[6]) for r in a1[1:]]
>>> b1 = distribution(a2,4)
>>> f = open('temp.txt', 'w')
>>> for i in range(len(b1[0])):
...     f.write(str(b1[0][i]) + ' ' +  str(b1[1][i]) +' ' + str(b1[2][i]) +'\n' )
...
>>> f.close()
>>> from gnuplot import *
>>> g = gnuplot()
opening new gnuplot session...
>>> g.send("set terminal png")
>>> g.send("set output 'py3k01.png'")
>>> g.send("plot [-5:5] 'temp.txt' u 1:2 w lp, '' u 1:3 w lp")
>>> del g
closing gnuplot session...

2011-01-04

I Just Ran Two Million Regressions

原文

我只聯想到灌籃高手中的流川楓,一隻眼睛受傷還可以投球,因為練習過兩百萬顆球。

李開復︰「我從來不以為學歷有什麼重要,天才都不是科班。但,不是科班,連龍套都跑不了。

2011-01-02

clean eMule server list

由於種種原因,官方的 eMule server list 一直出現假 servers,就是搜尋時會找到很多假檔,對資深的使用者來說當然可以分辨,但是總是比較麻煩。這邊有一個服務器列表會不定期更新,其中中國的 servers 海外常連不到,所以直接跳過就可以了。

其實裝好後可以把裡面的 server 名單全砍掉,只要主站 eDonkeyServer No2 與幾個一般站 eMule Security No1,eMule Security No2 就夠了。

2012.07.30 update:
重新更新部份安全名單。