發表文章

目前顯示的是 3月, 2013的文章

[Python] ServerSocket

最後這篇來講server socket在python上最後一個也是最方便的module Python SocketServer:  http://docs.python.org/2/library/socketserver.html 官網算是有一些範例, 而且網路上也有一隻影片有簡易教學 youtube 英文教學:  http://www.youtube.com/watch?v=OU7AWyw8MfI 基本上SocketServer是大幅簡化了我們要寫Socket Server的module, 他基本支援四種server classes TCPServer, UDPServer, UnixStreamServer, UnixDatagramServer

[Other] About open virus file

由於工作常接觸到很多病毒的文件, 用自己電腦開當然會很危險 雖然工作平台是Linux, 幾乎不太會有問題, 但是也會導致就算有病毒也看不出來 用單一防毒軟體測也是不可靠, 但是防毒軟體百百種, 自己要測試有點困難($$$) 國外有一網站, 可以幫你的單一檔案做相當大量的安全檢查(要小於32mb) 為了要安全一點開文件, 建議大家看到有懷疑的文件的時候, 先丟上這裡檢查, 都過的話至少會安心一點 VirusTotal:  https://www.virustotal.com 甚至熟悉這行的, 因為大多檔案都會做成 sha256, 可以安裝 chrome plugin, 直接右鍵複製搜尋 https://chrome.google.com/webstore/search/virustotal?hl=zh-TW&utm_source=chrome-ntp-launcher

[Python] Threading Socket Server

上一篇介紹了怎麼簡單的建立一個daemon server 這裡開始講述一些比較複雜的運用 thread或許很好用, 但是python也提供了一個threading module來幫助大家更方便使用thread python threading:  http://docs.python.org/2/library/threading.html 因為要做daemon server, 我們必須為每一個thread都建立一套機制流程, 而可能會有怕race condition, 或者是會有不同的client有不同的需求, 需要特別寫很多function來去加強功能需求, threading module可以很容易的讓你達到這件事情

[Python] Simple Socket Server

最近要利用Python來monitor一些東西, 需要做個telnet daemon 特地寫一下如何用 python 做一個 socket server 這個我當初到是真的花了不少時間找尋資料, 發現有兩種方法, 一種是比較傳統的 socket 然而 python 也有做一個 module - SocketServer, 可以簡化不少自己用 socket 做 server 的麻煩 不過 client 端當然還是要用 socket 自己做 官方文件 Socket:  http://docs.python.org/2/howto/sockets.html 網路上有很多教學, 這裡到是有一個不錯的英文教學:  http://www.binarytides.com/python-socket-programming-tutorial/

[Python] *args and **kwargs

這次來紀錄一個我以前剛學python的時候很容易一頭霧水的 - *args and **kwargs 其實python的tutorial網頁都有教學, 只是我都是用到才會去查 不過這次這東西還滿重要的(默.....) Ref:  http://docs.python.org/dev/tutorial/controlflow.html#more-on-defining-functions 來看網頁的範例 def ask_ok(prompt, retries=4, complaint='Yes or no, please!'): while True: ok = input(prompt) if ok in ('y', 'ye', 'yes'): return True if ok in ('n', 'no', 'nop', 'nope'): return False retries = retries - 1 if retries < 0: raise IOError('refusenik user') print(complaint) 這是個很一般的function, 很單純的parameter, 有prompt, retries, complaint, 也有設定預設值, 看起來很美滿

[Python] Python decorator

python decorator, 一個相當方便而且相當重要的工具, 我trace很多python都會用到此功能 官方網站說明:  http://www.python.org/dev/peps/pep-0318/ 有一篇中文教學也很詳盡 http://blog.roodo.com/descriptor/archives/9206319.html 這篇教學跟我看的來源一樣是Bruce Eckel寫的教學, 其實英文好的看他寫的就夠了, 我只是比較囉唆的翻譯 http://www.artima.com/weblogs/viewpost.jsp?thread=240808

[Python] OptionParser [basic] (Python v2.7 已被移除)

Python v2.7 已經移除此功能, 請改用 argparse 另外一個寫程式很常使用的就是手動輸入參數了, python有個很好用的叫做 OptionParser 官方說明 OptionParser:  http://docs.python.org/2/library/optparse.html 宣告很容易, 只要記得import OptionParser就好 from optparser import OptionParser optParser = OptionParser() 再來就是設定, 例如我需要輸入參數"-f", 其type為string, dest為"fp", help為"specitfy file path" optParser.add_option("-f", type = "string", dest = "fp", default = "/home/hh/tmp", help = "specitfy file path [default: /home/hh/tmp]")

[Python] ConfigParser

常常跑個程式, 需要相當多不同的設定實在有夠麻煩, 就用個ini file來幫忙, python就有個ConfigParser可以處理 ConfigParser - Configuration file parser :  http://docs.python.org/2/library/configparser.html 使用上相當簡單, 不過要是看官網, 會發現, 疑, 他有好多個ConfigParser, 在很久之前我用過基本的RawConfigParser, 後來新版本出來後, 基本都是使用SafeConfigParser, 依照官網說法, 為了compatible的問題, 當然還有增加一些額外的方法, 不過這我就沒有真的去測試了

[Crypto, Python] XOR cryption

XOR編碼大概是數一數二簡單卻也很好用的 假如我有一串文字要加密, 還有一個配合加密的key, 可以透過XOR加密來快速做到, 結果還會是binary的格式 而且xor特別的是, 我做兩次一樣的encrypt, 就可以把加密的結果又重新轉出來,缺點則是容易用Frequency analysis就反解出來 網路上有滿多篇都有介紹, 下面這兩篇算是寫比較清楚的一篇 Wiki:  http://en.wikipedia.org/wiki/XOR_cipher Reference1:  http://www.evanfosmark.com/2008/06/xor-encryption-with-python/ Reference2:  http://stackoverflow.com/questions/2029426/what-is-xor-encryption 以下我也簡單舉個例子使用說明

[Python] izip, cycle使用

覺得這實在很好用, 把他記錄下來一下 python再itertools裡面有兩個很方便的東西, 一個是izip, 另外一個是cycle 首先izip, 他可以將多個list垂直合併起來使用, 這邊熟悉python的人會覺的不是也有一個zip可以使用嗎? 其實這兩個做的結果一樣, 但是過程有點差異 ex: from itertools import izip xl = [1, 5, 10] yl = [5, 10, 15] for x, y in izip(xl, yl): print x, y 上述程式碼就會(1, 5), (5, 10), (10 ,15)的印出來 那下列這行結果也是一樣 for x, y in zip(xl, yl): print x, y 所以以結果來看看不出來差異, 但是在實作上, izip是當存取到那個item, 他才會去合併相對的list item 使用時機是, 假如list已經不小了, 合併會變成超大list, 那可能會造成記憶體吃太多, 而導致out of memory 而其實你只是要存取幾個合併的時候才要的item, 並不用真的完全合併所有list, 那就用izip就好, 可以剩下一些速度跟空間 再來是cycle, 這個東西比較不直觀, 首先使用方式是cycle(iterable), 也就是要傳一個iterable的物件進去 ex: from itertools import cycle yl = [5, 10, 15] for item in cycle(yl): print item 你會發現他停不下來, 拼命印, 一直不停的印出5, 10, 15, 5, 10, 15, 5, 10, 15...etc不停重複 原因很簡單, cycle就是會幫你做出一連串重複的結果 所以通常cycle要配合其他東西使用, 下面兩個for-loop舉例 ex: from itertools import izip, cycle xl = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] yl = [5, 10, 15] print "The foll

[Crypto, Python] Diffie-Hellman (迪菲-赫爾曼) 演算法

圖片
以前大四修過資訊安全的課, 不知道哪根經不對, 還特別做了網站紀錄, 現在由高醫陳以德老師接收管理(他上的課嘛XD) 我古老的Crypto講義:  http://itchen.class.kmu.edu.tw/Crypto/Web/ 廢話說完, 最近我又稍微在看以前的一些加密演算法, 其中正在看Diffie-Hellman key exchange, 順道紀錄整個過程 中文Wiki實在翻譯的不太看得懂阿.....建議要看的要看英文 Wiki:  http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange 其實DH已經是RFC標準了, RFC 2631:  http://tools.ietf.org/html/rfc2631 而且網路上居然還有影片特別介紹這演算法!! (主題在2:40秒之後), 相當清楚 Video:  http://www.youtube.com/watch?v=YEBfamv-_do

[Sqlite3] 多個Sqlite資料庫結合使用

有時候因為常常要作些統計資料, 會需要好幾個Sqlite database, 而常常有時候要的條件比較複雜 可能因為幾個db彼此之間必須要互相對應, 就要開來開去 查了一下其實Sqlite可以做multiple database connection - ATTACH 利用ATTACH把資料先rename成其他名稱, 之後下SQL就可以直接用, 例如rename成d1, 要存取d1的table就下d1.table_name ATTACH "$path/A.sqlite" as d1; ATTACH "$path/B.sqlite" as d2; SELECT people FROM d1.adr And rowid in (SELECT distinct PID FROM d2.history And MethodId IN (10,11,12) And MID IN (SELECT rowid FROM d1.ms And strftime('%Y-%m-%d',RTime) >= '2013-02-14' And strftime('%Y-%m-%d',RTime) <= '2013-02-20')) And Status = 3 ORDER BY RTime desc; 其實原本是四句SQL要I/O四次, 變成可以合體成一句, 這應該是只有I/O兩次 這樣比較好存成.sql檔案, 在linux下也比較方便呼叫跟使用

[Linux] ping or telnet IPv6 local network

最近剛好在處理IPv6問題, 才發現我還真沒試過如何去ping or telnet IPv6 紀錄一下under Linux的使用方式 1. ping6 首先先用ifconfig查到自己IPv6的IP, 然後用ping6 加上相對的網卡 例如eth0然後顯示是fe80::213:d3ff:fef1:e023/64, 就要打 ex: ping6 -I eth1 fe80::213:d3ff:fef1:eth0 其實如果是測local, 也可以測試 ping6 -I eth1 ::1 2. telnet 例如我80 port有設置服務, 類似上述方法, 不過這次eth要加在IPv6後方 ex: telnet fe80::213:d3ff:fef1%eth1 80 這邊問題來了, 那個eth0, eth1, 甚麼情況要選哪個(假設你不只一張網卡) 今天你是A電腦要連B電腦, 如果都是public IP 你要找出A電腦連到public是經過哪張網卡(ex: eth1), 然後找出B電腦IPv6 接著就可以打 telnet fe80::213:d3ff:fef1%eth1 80 也就是百分比後面的是說你電腦要連到IPv6的位置, 要透過哪張網卡連出去 換言之, 你如果把連內網的網卡(ex: eth0), 寫在後方, 那應該就會不通了, 因為出不去, 除非你是連內網的IPv6, 這簡稱scope

[Linux] 在linux下測試硬碟速度

首先要先用df找出你要測試哪一個分割, ex: Filesystem            Size  Used Avail Use% Mounted on /dev/sda3             140G   98G   36G  74% / /dev/sda1              99M   34M   60M  37% /boot tmpfs                 2.0G     0  2.0G   0% /dev/shm 例如是/dev/sda3, 然後就輸入下列指令 hdparm -tT /dev/sda3 等一會應該就會有簡易的結果如下 /dev/sda3: Timing cached reads: 31484 MB in 2.00 seconds = 15781.22 MB/sec Timing buffered disk reads: 310 MB in 3.01 seconds = 102.90 MB/sec

[Linux] 在Linux下如何測試兩台機器之間的傳輸速度?

首先要安裝iperf, apt-get or yum應該都可以安裝成功, 或者是到官網下載安裝: http://iperf.sourceforge.net/ 兩台機器分別為A跟B 首先在A machine, 要先假裝是一個Server, 要由另外一個B端連過來端測試速度: iperf -s 在B machine輸入下列指令, 等個幾秒, 就會有預設結果出來, 或者是可以手動設定 iperf -c A_IP -d iperf –c A_IP -t 60 -w 10M -i 1 就會有每1秒(-i)都會顯示傳輸數據, 總共會傳10M(-w)的測試檔案, 總共測試60秒(-t)

[Latex] Ubuntu安裝Latex

我是個很喜歡用Latex排版跟做投影片的人, 當然有GUI輔助更好 個人偏好使用Texmaker這套不管win or linux都有的軟體 紀錄一下剛換到Ubuntu的時候安裝的流程 在Ubuntu底下, 先透過apt-get安裝texlive, 最少要安裝texlive advanced math typesetting beamer, 安裝texmaker 那因為需要adobe reader, 有很多免費支援的軟體, 不過還是先試試看Adobe原廠的吧 到 http://get.adobe.com/uk/reader/otherversions/ 下載最新版adobe reader 下載tar安裝完之後, 發現pdf的Menu有顯示問題, 都看不到....Orz, 其實我只是要點開或關全螢幕的功能 看解開的tar底下的readme有快速鍵, 快速鍵還是可以正常運作, ctrl + l → 開/關 全螢幕

[Ubuntu 12.10] 使用紀錄

去年就把公司電腦改成用Ubuntu 12.10來工作 其實一直都很想把電腦改成用Linux, 因為我開windows最後的結果都是pietty到Linux去 相當沒效率阿, 而且本來裝的是win Vista..你說有多難用都比你說的難用更難用 另外一點是我做的工作很容易碰到win病毒(防毒程式整天嘰嘰叫), 乾脆換Linux, 至少安靜點 當然我也知道Linux is free if your time is free... 那因為在學校跟公司機器幾乎都是Red Hat系列, Fedora or CentOS, 想說桌機來點不一樣的, 就用Ubuntu 紀錄一下當初剛換的時候碰到的許多狀況 一開始剛裝完, 軟體更新一直失敗, 結果發現網路更新軟體路徑可能會有問題, 要記得去系統設定修改軟體設定(換個server path) 修改了之後, 路徑設定正確, 才有辦法順利開始安裝其他套件 剛裝完預設我習慣的很多東西都沒有包含, 例如curl, g++, vim 都要自己先裝好 bbs要裝pcman(試過其他的都很不滿意最後還是回到這套), browser裝chrome(這通常要先軟體更新成功), 要用免費vm裝vmplayer, 多桌面要裝compizconfig來修改, 設定在一般, 通用那邊 雙螢幕一開始沒有成功就要安裝nvidia-settings(當然要是nvidia的顯卡), 以及相關nvidia套件, 設定完重新login就可順利運作 dropbox安裝完要重開機, 這是我覺的目前裝過最鳥的軟體, 居然要重開機? 軟體更新重開機我比較能接受 msn可以裝kmess來使用, Skype的bug很多, 但是....看來微軟的意思還是必須要裝Skype 用playonlinux來使用win程式比較方便, 比用wine一步一步裝好用, 當然僅限常用的win程式 有一點滿奇怪的, 我發現裝完之後, ssh很慢, google了一下, 發現只要修改/etc/nsswitch.conf "hosts: files mdns4_minimal [NOTFOUND=return] dns mdns 4 mdns" 改成 "hosts: files dns" ssh就