Thursday, December 13, 2012

Running python in 32-bit mode for wxPython


在 Mac OS X 上面寫 wxpython 時,必須打開 32bit mode 不然他不會動 ...

解法:

加入以下環境變數

export VERSIONER_PYTHON_PREFER_32_BIT=yes


參考

http://stackoverflow.com/questions/2088569/how-do-i-force-python-to-be-32-bit-on-snow-leopard-and-other-32-bit-64-bit-quest

http://stackoverflow.com/questions/4665818/running-python-in-32-bit-more-for-wxpython

emacs beginer's notes


http://www.linux.org.tw/CLDP/OLD/Emacs-Beginner-HOWTO-2.html
http://linux.chinaitlab.com/man/newsoft/Emac/book.html



上下左右
C-p previous line
C-n next line
C-f forward
C-b backward



PageUp/Dn
C-v scroll-up

M-v scroll-down


以字移動
M-f forward-word
M-b backward-word



行首行尾

C-a move-beginning-of-line
C-e move-end-of-line



句首句尾

M-a backward-sentence
M-e forward-sentence



檔頭檔尾

M-< beginning-of-buffer
M-> end-of-buffer



search
M-q C-s forward search
M-q C-r backward search


delete
C-d delete-char
M-d kill-word
C-k kill-line
M-k kill-sentence



yank
C-y yank
M-y yank-pop



buffer
C-x C-b list-buffers

C-x b switch-to-buffer
C-x k kill buffer
C-x C-c save-buffers-kill-emacs
M-x rename-buffer



files
C-x C-f open a file

C-x C-s save
C-x C-w save as 

windows
C-x 0 delete-window
C-x 1 delete-other-windows
C-x 2 split window vertically
C-x 3 split window horizontally
C-x o other-window



misc
C-x u undo
C-x l count-lines-page
M-x execute-extended-command
M-x shell 開啟 shell
C-g keyboard-quit
C-u M-x calendar



help
C-h k describe-key

C-h i info  # 神奇說明書
C-h F Emacs FAQ
C-h b shortcut keys enabled in current buffer

Monday, December 10, 2012

geek calendar

http://technet.tw/ 是一個有趣的宅宅農民曆,於是寫出了一個 one liner 去抓他




date "+%F, %A" && w3m -dump "http://technet.tw"  | head -n 26 | sed -e '/^$/d' -e '1,3d'| sed -e '1,4{N; s/\n/ /}'




btw, 背景是君君 >///<

Thursday, December 6, 2012

我們都活在太舒服的年代







跟 jserv 信件往來的一小段節錄... 反思我們對於電腦環境的認識與了解




我們都活在太舒適的年代










jserv:


話說回來,二十年前當我剛開始接觸電腦時,那時沒有太多科技術語,而且人們探討的議題也相當局限,不外乎 BIOS、文書編輯器、繪圖程式 (你想過AutoCAD 跑在受限於 640 KB 的 DOS 環境是怎麼樣呢?)、幕後排版 (比 TeX 陽春許多)、程序導向的程式語言 (還記得 OOP/4GL 慰為風氣的年代嗎?還要再早一點) 等等。


而現在就非常可怕,我想要是把科技術語整理起來,或許都比當年的 BIOS 原始程式碼列表 (可在圖書館找到這樣的專書,全書都是程式碼,在 301 條款生效之前,把有版權保護的程式碼印列出來的盜版行為,在台灣不追究) 還長。









me:


這些更早的年代在我深入接觸電腦早已過去,但是閱讀前輩們的書籍時還是能從中體驗到那種氛圍,那個處處受現的年代,所有資源都要透過整個系統去思考,做最佳、最有效率的利用;反觀現在太多 "外殼" 將計算機內部的行為包裝起來,一般接觸電腦的人也不容易產生興趣、去明白 how it works ,太多商業化 (或是說物質)的包裝混淆了焦點。



但是值得反思的是,就拿機械工業技術來對比吧,工業革命時代下也是許多 "hackers" 想要改進蒸氣機、齒輪和傳動軸等動力機械的發展,而商業化和大量的規模生產後的現代,想要去了解各式機械的運作原理的人們也漸漸變少了。像是我們並不會想去深入探討一輛汽車或是機車如何工作、不必了解引擎運轉的種種原理等,大眾化後的結果是大家享受某項工具的的 "商品",而技術本身可能除了技術人員外就愈來愈少人想要去理解這些。



回到電腦科學的角度不也如此?我認為電腦科學中很大的概念是 abstraction ,透過更上一層的抽象角度來思考整個系統的運作,而不去鑽底層技術的牛角尖,這種學習方式未嘗不好,只是當我們在上層進行抽象、全局的思考模式時,不能因而模糊了焦點。這個時代太多過多的包裝讓電腦系統變得漂漂亮亮的商品,而想去了解他背後工作原理的人很容易被這些外部的包裝所迷惑、混淆,相較之下當年一群 geek 跟 hacker 的時代要接觸底層工作知識的途徑就顯的容易許多。我想,這是現在學生不容易對於系統產生興趣的其中一個原因吧!

Tuesday, December 4, 2012

gnutls_anon_server_credentials is deprecated

compile qemu 遇到

error: ‘gnutls_anon_server_credentials’ is deprecated 解法

基本上就是把 type 換掉即可

ref

好奇這 bug 應該很久以前就解掉了,但是我去 fetch 目前最新的 qemu 1.3 還是在 @@"


Index: qemu-kvm-1.1.rc2/ui/vnc-tls.c
===================================================================
--- qemu-kvm-1.1.rc2.orig/ui/vnc-tls.c
+++ qemu-kvm-1.1.rc2/ui/vnc-tls.c
@@ -99,9 +99,9 @@ static ssize_t vnc_tls_pull(gnutls_trans
 }
 
 
-static gnutls_anon_server_credentials vnc_tls_initialize_anon_cred(void)
+static gnutls_anon_server_credentials_t vnc_tls_initialize_anon_cred(void)
 {
-    gnutls_anon_server_credentials anon_cred;
+    gnutls_anon_server_credentials_t anon_cred;
     int ret;
 
     if ((ret = gnutls_anon_allocate_server_credentials(&anon_cred)) < 0) {
@@ -382,7 +382,7 @@ int vnc_tls_client_setup(struct VncState
             }
 
         } else {
-            gnutls_anon_server_credentials anon_cred = vnc_tls_initialize_anon_cred();
+            gnutls_anon_server_credentials_t anon_cred = vnc_tls_initialize_anon_cred();
             if (!anon_cred) {
                 gnutls_deinit(vs->tls.session);
                 vs->tls.session = NULL;


Wednesday, November 28, 2012

google hangout on Arch linux

install this aur https://aur.archlinux.org/packages.php?ID=40056

sudo yaourt -S google-talkplugin

if there's no video, then add this

sudo echo "O3D_OVERRIDE_RENDER_MODE=2D" >> /opt/google/talkplugin/envvars

Tuesday, November 27, 2012

heapify algorithm

Data Structure 小練習,heapify 算法

關於 heap 更多內容請參考良葛格的精美筆記

感謝強者我同學 Unclehandsome ㄉㄉ指點 <(_ _)>

heap 的性質:

# Max heap
for all nodes in array:
    A[ parent(i) ] >= A[i]


用白文來講就是,

對於 heap 裏面的每一個 node ,他的 value 一定大於他子樹的任一節點的 value

並且他 left-subtree 跟 right-subtree 都要是 heap





簡記一下 make heap 的步驟:

make heap 的作法:想像一個空的 tree, 然後一次 insert 一個在 heap 的尾端


for nodes in array:
    insert node
    
insert:
    1:    append to the end of the heap (the last leaf)
    2:    compare with my parent
    3:    swap if i'm greater than my parent
    4:    goto 2



實作上要注意的地方是 tree 的 array index 從 1 開始 (算 node / 2 時比較好做)


#!/usr/bin/python

import random
import heapq

def mk_heap (arr):
    heap = ['']
    for i in arr:
        heap.append(i)
        l = len(heap) - 1
        while l >= 2 and heap[l] < heap[l//2]:
            heap[l], heap[l//2] = heap[l//2], heap[l]
            l = l // 2

    print heap[1:]


if __name__ == '__main__':
    arr = range (1, 20)
    random.shuffle(arr)
    brr = arr

    print "before heapify"
    print arr

    print "my make heap:"
    mk_heap(arr)

    h = []
    for i in brr:
        heapq.heappush(h, i)
    print "using heapq:"
    print h


Output:


before heapfy
[14, 11, 19, 2, 3, 10, 5, 13, 8, 15, 16, 1, 18, 9, 17, 4, 7, 6, 12]
my make heap:
[1, 3, 2, 4, 11, 5, 9, 7, 6, 15, 16, 19, 18, 10, 17, 14, 8, 13, 12]
using heapq:
[1, 3, 2, 4, 11, 5, 9, 7, 6, 15, 16, 19, 18, 10, 17, 14, 8, 13, 12]

Friday, November 23, 2012

bye bye, mouse!



丟掉滑鼠的方法...



awesome wm - next gerneration framework window manager for X
http://awesome.naquadah.org/

vimium - the hacker's browser
http://vimium.github.com/

w3m text-based browser               # with mobile web pages
http://w3m.sourceforge.net/

turses - twitter client
http://turses.readthedocs.org/en/latest





rxvt-unicode - terminal emulator
http://software.schmorp.de/pkg/rxvt-unicode.html

ranger file manager
http://ranger.nongnu.org/

irssi - the IRC client of the future
http://www.irssi.org/




alsamixer
http://alsa.opensrc.org/Alsamixer

mplayer
http://www.mplayerhq.hu/design7/news.html




emacs - just another operating system(X
http://www.gnu.org/software/emacs/

vim - the ultimate editor
http://www.vim.org/



... lots of command line tools



Good keybord
FILCO ninja majestouch II

Wednesday, November 21, 2012

sha-bang! running scripts on Unix machines

reference: http://en.wikipedia.org/wiki/Shebang_(Unix)

sha-bang 是 Unix 系統上面的特殊慣例,由一個 # (sharp) 和一個 ! (bang) 組成

在 script 中,這個慣例用來表示要用哪個 interpreter 來解釋 / 執行這個 script

一般用絕對路徑來表示,例如 #!/bin/sh 來呼叫外部的 Bourne shell




#!/path/to/the/interpreter [arguments]





常見例子:

#!/bin/sh
#!/bin/sh -x
#!/bin/bash
#!/bin/sed -f
#!/usr/bin/awk -f
#!/usr/bin/perl
#!/usr/bin/python
#!/usr/bin/ruby





當然也可以很空虛的...
#!/bin/cat




另外,有時候為了可攜性,會用 /usr/bin/env python 這種用法來找到該機器的 interpreter 在哪邊

然後不要傻呼呼的吃到 Permission denied. 才在哭說不知道要怎麼跑 lol

chmod +x your_script

Sunday, November 18, 2012

The road not taken


The Road Not Taken       Robert Frost

TWO roads diverged in a yellow wood,
And sorry I could not travel both
And be one traveler, long I stood
And looked down one as far as I could
To where it bent in the undergrowth;

Then took the other, as just as fair,
And having perhaps the better claim,
Because it was grassy and wanted wear;
Though as for that the passing there
Had worn them really about the same,

And both that morning equally lay
In leaves no step had trodden black.
Oh, I kept the first for another day!
Yet knowing how way leads on to way,
I doubted if I should ever come back.

I shall be telling this with a sigh
Somewhere ages and ages hence:
Two roads diverged in a wood, and I—
I took the one less traveled by,
And that has made all the difference.


不知道假若我沒有放棄音樂這條路,應該也會 made it all the difference 吧 

Saturday, November 17, 2012

POPO.tw hacked



看到我朋友被一群腦袋也被 XSS 的 end user 罵的很慘...手癢寫了這個

請注意文中部份內容不盡然是事實的就是XD


====================================================================

Dear all,




我只是單純路過穿拖鞋的阿宅工程師,平常也是跟 POPO 工程師大大們一樣,在老闆壓榨下刻刻網頁、寫寫程式,騙點小錢,對於網路攻擊也不是很懂,但是這次的事件後,在下心裡有些想法學的需要跟大家分享一下 :)



首先,我們何不反過來想想看,白帽子先生到底是為了什麼樣的目的才做這件事情的呢? 我們從頭開始:


1. 白帽子先生透過 "囧 ID" 來提醒大家這邊的平台似乎出了點問題,也許使用者的資料有被竄改的可能,雖然是個無傷大雅的小玩笑,但相信就算是對於網路技術毫無概念,各位冰雪聰明的作家們一定不難推論,咦?好像哪裡怪怪的。而身為服務提供者的站方也應該要意識到,也許自家網站可能某些地方出了點問題,需要修正。


2. 也許過了很久一段時間,白帽子先生再次發現,原本有問題的網站仍然沒有被修好,於是,<刪除線>說破嘴不如跑斷腿,拼資安,做就對了</刪除線> ,他決定用更明顯的方式,來提醒大家,這個平台的資訊安全是有問題的。




3. 這次的行動造成了大家恐懼,引起軒然大波,並擔心自己的帳號安全是否有問題(我自己也嚇了一大跳),站方也馬上著手進行緊急維修。



好,我們總結一下,在 "囧事件" 發生之後,顯然使用者會感受到自己的權益其實是有受到威脅的,而理論上站方應該也知道大概發生了什麼事情,同樣身為阿宅工程師。明眼人看就知道,如果能做到這種直接從外部(留言板)植入惡意程式碼而竄改網頁資料是非常嚴重的漏洞!嚴重程度大概像是我們突然失去了所有遮蔽物而在大街上裸奔一般,相信所有做過網站的朋友們看到這種漏洞都會下出一身冷汗。但是大家秉持著人類的惰性,反正好像沒事就置之不理。對,就是姑息!對於這樣具有危險性甚至可以說是災難性的漏洞姑息!




簡單說明一下,就我的認知,這次的手法其實跟 POPO 網頁語法有關,認至可以說是白帽子完全是透過 POPO 的特色功能 (features) 而進行的,看看這篇吧:


我們可以用一些特殊的 script 語法來替 POPO 網頁引入來自外頭網站提供的額外功能,同樣的,白帽子先生也只是透過這個特色功能,在留言時為自己的留言提供額外的功能!不同的是,這些具有 POPO 特色的額外功能造成大家人心惶惶,也引起站方緊急關站維修一天。最後,如同站方公告所說的:


POPO 原創網在幾經考量與討論的狀況下,我們將修改及暫停部分語法的支援功能,透過停止支援特殊語法來防止類似的漏洞發生。



明白了這個原理,不難相信為什麼在修正掉這個漏洞後,有使用者非常生氣的表示:

祝白帽子走路踩到狗屎跌進水溝 !!!

POPO 改掉了使用語法機制,讓我連貼圖還是放連結都放不上去,這點對我來說真的傷害很大!!!!





順帶一提,就我的了解,POPO 使用的網站技術預設行為本身就會自動過慮掉這些額外的 script (因為不清楚是否會對於網頁造成惡意影響),然而,站方為了方便和提供特色功能,將這個保障網站安全的功能關閉,如此舉動猶如將保障生命的安全網抽離,這樣不尊重使用者權益的網站,各位還敢繼續使用嗎?相信白帽子先生也是想到這點而和我一樣義憤填膺!



最後,希望各位如果有空的話能看一下另外幾位前輩先進的看法 :)




http://littlebmix.blogspot.tw/2012/11/popodarkframemaster.html

https://disp.cc/b/611-4N8c







PS. 我跟這次的事件和白帽子先生沒有任何關係




PSS. 仔細注意可以發現,我並不稱呼這次的事件為攻擊或是入侵,因為如果有心要到真正的入侵行為的話能做的絕對不只這些!只能說 POPO 這是是非常幸運!


====================================================================


在我寫完這邊正思考要不要一時之間腦充血去回這封信時,突然看到底下有人留言,我不想回了,這種站這種使用者還是讓他去吧


這無知、自大的行為會催毀原本還有一點優點的自己
大家都微笑的往前面對自己的生命
只有無知、自大的人還在原地踏步、憤憤不平
覺得可笑~~~也為他感到難過 往前走吧!人生還有更多美好的事值得學習^_^

到底是誰無知呢?





結果發現我柯南電影看到一半 


Thursday, November 15, 2012

web security


前情提要:幾天前的聚會 JC 分享了某網站的 XSS vulnerability ,對於留言框 HTML 幾乎沒過濾,連 script 塞進去都能 run ...




我相信,這個世界應該也還有跟我和我朋友們一樣為著網路安全而在努力著

不斷的學習技術和找尋可能的潛在危險

不過有些網站真的太可怕了...善意提醒卻不知改進 (或是反應遲鈍?)

但假若是我的話應該沒辦法像 JC 那樣做個那麼精緻的"提醒"吧

希望這次的行動可以真正打醒站方,重視使用者安全權益


: )



有人想聽故事嘛?






題外話:

幾天前通知小畢的成大某系系網站也只修好了一部份... 治標不治本 Orz

但另一個據說有領錢的計劃網站有修好,很棒

不過也是發現他褲子沒穿,善意提醒他後放了三個禮拜都沒人動,URP 那天直接幫他穿上我做的褲子後就馬上修好了是哪招 XDrz







事實證明,要通知 admin 你們家有洞最快的方法是幫他改掉密碼 



Monday, November 12, 2012

東方幻想郷/Bad Apple


こんな自分に 未来はあるの? こんな世界に 私はいるの







★流れてく 時の中ででも 気だるさが ほらグルグル廻って
★就算在流逝的時空中仍能發現 你瞧,只在原地打轉不停


私から 離れる心も 見えないわ そう知らない?
我那已失去的心也看不見 你能明白嗎?


自分から 動くこともなく 時の隙間に 流され続けて
就算自己什麼都不做 時光仍漸漸消逝在縫隙中


知らないわ 周りのことなど 私は私 それだけ
週遭的一切我一概不知 「我就是我」 所知的僅此而已



夢見てる? なにも見てない? 語るも無駄な 自分の言葉?
在夢中發現了嗎? 還是什麼都沒發見? 發現自己如何訴說也沒用的真心話?


悲しむなんて 疲れるだけよ 何も感じず 過ごせばいいの
悲傷只會使自己更累 乾脆什麼都別多想 如此度日就好


戸惑う言葉 与えられても 自分の心 ただ上の空
就算聽到令人困惑的話語 我的心早已懸在半空


もし私から 動くのならば すべて変えるのなら 黒にする
若我試著改變這一切的話 這一切就將化為黑暗


こんな自分に 未来はあるの? こんな世界に 私はいるの?
這樣的我能有未來嗎? 這樣的世界能有我嗎?


今切ないの? 今悲しいの? 自分の事も わからないまま
現在我很難過嗎? 現在我很悲傷嗎? 就像這樣連自己的事都不清楚


歩むことさえ 疲れるだけよ 人のことなど 知りもしないわ
就算繼續走下去也只會感到更累 人際關係什麼的 乾脆也別去了解了


こんな私も 変われるもなら もし変われるのなら 白になる?
這樣的我也能改變的話 如果真的改變的話 一切能回歸虛無嗎?



☆流れてく 時に中ででも 気だるさがほら グルグル廻って
☆就算在流逝的時空中仍能發現 你瞧,只在原地打轉不停


私から 離れる心も 見えないわそう 知らない?
我那已失去的心也看不見 你能明白嗎?


自分から 動くことまなく 時の隙間に 流され続けて
就算自己什麼都不做 時光仍漸漸消逝在縫隙中


知らないわ 周りのことなど 私は私 それだけ?
週遭的一切我一概不知 「我就是我」 所知的僅此而已


夢見てる? なにも見てない? 語るも無駄な 自分の言葉?
在夢中發現了嗎? 還是什麼都沒發見? 發現自己如何訴說也沒用的真心話?


悲しむなんて 疲れるだけよ 何も感じず 過ごせばいいの
悲傷只會使自己更累 乾脆什麼都別多想 如此度日就好


戸惑う言葉 与えられても 自分の心 ただ上の空
就算聽到令人困惑的話語 我的心早已懸在半空


もし私から 動くのならば すべて変えるのなら 黒にする
若我試著改變這一切的話 這一切就將化為黑暗


無駄な時間に 未来はあるの? こんな所に 私はいるの?
蹉跎的時光中還能擁有未來嗎? 這種地方還能讓我存在嗎?


私のことを 言いたいならば ことばにするのなら 「ろくでなし」
如果想要描述我這個人的話 以語言表達就是個「沒用的廢人」



こんな所に 私はいるの? こんな時間に 私はいるの?
我在這樣的地方? 這樣的時間能有我嗎?


こんな私も 変われるもなら もし変われるのなら 白になる?
這樣的我也能改變的話 如果真的改變的話 一切能回歸虛無嗎?


今夢見てる? なにも見てない? 語るも無駄な 自分の言葉?
今天在夢中發現了嗎? 還是什麼都沒發見? 發現自己如何訴說也沒用的真心話?


悲しむなんて 疲れるだけよ 何も感じず 過ごせばいいの
悲傷只會使自己更累 乾脆什麼都別多想 如此度日就好


戸惑う言葉 与えられても 自分の心 ただ上の空
就算聽到令人困惑的話語 我的心早已懸在半空


もし私から 動くのならば すべて変えるのなら 黒にする
若我試著改變這一切的話 這一切就將化為黑暗


動くのならば 動くのならば すべて壊すわ すべて壊すわ
想要行動的話 想要改變的話 一切都會毀壞 一切都會崩潰


悲しむならば 悲しむならば 私の心 白く変われる?
如果我感到傷心 如果我感到悲哀 我的心是否就能回歸虛無呢?


貴方の事も 私のことも 全ての事も まだ知らないの
不管是你的一切 或是我的一切 甚至是所有的一切 我還完全不清楚


重い目蓋を 開けたのならば すべて壊すのなら 黒になれ !!!
想張開這沉重的眼睛的話 想毀滅一切的話 就讓黑暗吞噬掉這一切!!

Tuesday, November 6, 2012

disable pulseaudio

pulseaudio 是Linux 下的 Music server

https://wiki.archlinux.org/index.php/PulseAudio

但是常常他把你的聲音送到奇怪的地方,把你的影音功能全部弄的一團遭

像是 youtube 變成靜音、突然變快 2X 速度等很多時候都是這個東西搞爛的

麻煩的是像是 gstreamer 之類的東西又會去 depend 到他 Orz



sudo vim /etc/pulse/client.conf
autospawn = no



直接關掉他,聲音統一交給 alsa  管理

對了,音量管理用 alsamixer 看起來 geek 又專業阿

Saturday, November 3, 2012

麻枝准 My Song / Angle Beats 插入曲




每次聽到這首曲子都會很想哭...這不就是我嗎?

哭泣的你 孤獨的你
才是正確的 才更接近人的原貌
落下的眼淚 這樣宣告
如此的美麗 並非謊言 向真實的我們致謝




「My Song」(第3話)插曲
作詞/作曲:麻枝准 ,編曲:光収容 ,歌:Girls Dead Monster (marina)


苛立ちをどこにぶつけるか探してる間に終わる日
空は灰色をしてその先は何も見えない
常識ぶってる奴が笑ってる 次はどんな嘘を言う?
それで得られたもの 大事に飾っておけるの?
でも明日へと進まなきゃならない
だからこう歌うよ


泣いてる君こそ孤独な君こそ
正しいよ人間らしいよ
落とした涙がこう言うよ
こんなにも美しい嘘じゃない本当の僕らをありがとう


叶えたい夢や届かない夢がある事
それ自体が夢になり希望になり人は生きていけるんだろ
扉はある そこで待っている
だから手を伸ばすよ


挫けた君にはもう一度戦える強さと自信とこの歌を
落とした涙がこう言うよ
こんなにも汚れて醜い世界で出会えた奇跡にありがとう

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=

中文


著急地尋找會在哪裡碰上的時候 一天已經結束
天空灰濛濛的 前方什麼也看不到
假裝正常的傢伙在笑著 接下來又會說什麼謊話?
那樣得到的東西 能小心地裝飾著嗎?
即使如此也不能不向明天前進
所以 如此歌唱著


哭泣的你 孤獨的你
才是正確的 才更接近人的原貌
落下的眼淚 這樣宣告
如此的美麗 並非謊言 向真實的我們致謝


知曉有想要實現的願望和無法傳達的願望
這件事本身便成為夢想 成為希望 人們便能活下去吧
有一扇門 站在門前等待著
所以向它伸出手


對於受了挫折的你 給予能夠再一次戰鬥的堅強與自信與這首歌
落下的眼淚 如此宣告
向著這污穢不堪的 醜陋不堪的世界中 所相遇的奇蹟致謝

compress and decompress

tar options

-c, --create         create a new archive  
-t, --list           list the contents of an archive
-u, --update         only append files newer than copy in archive
-x, --extract        extract files from an archive
-a, --auto-compress  use archive suffix to determine the compression program
-f, --file ARCHIVE   use archive file or device ARCHIVE
-v, --verbose        verbosely list files processed  

compress options
-j, --bzip2
-z, --gzip, --gunzip --ungzip
-J, --xz
--lzma 
-Z, --compress, --uncompress


簡言之,常用的格式

create    [zj]cvf Dir.xxx Dir
extract   [zj]xvf Dir.xxx

懶的想的話 a 選項可以打天下 acf or axf 萬用


================================================


tar
$ tar cvf FileName.tar DirName
$ tar xvf FileName.tar


gz
$ gzip FileName
$ gunzip FileName.gz      # or gzip -d

tar.gz
$ tar zcvf FileName.tar.gz DirName
$ tar zxvf FileName.tar.gz


bz2
$ bzip2 FileName          # or bzip2 -z
$ bunzip2 FileName.bz2    # or bzip2 -d

tar.bz2
$ tar jcvf FileName.tar.bz2 DirName
$ tar jxvf FileName.tar.bz2


tgz (其實就是 gzip)
$ tar zcvf FileName.tgz DirName
$ tar zxvf FileName.tgz

tar.tgz
$ tar zcvf FileName.tar.tgz FileName
$ tar zxvf FileName.tar.tgz



.7z   
Arch pacman:  extra/p7zip
$ 7zr a FileName
$ 7zr x FileName.7z


xz
xz FileName
xz -d FileName


lzma   # XZ 的一種 format
lzma FileName
lzma -z



lha    # 這個很少見,比較有梗的大概是他的 man page 的 BUS 吧(?)

$ lha a FileName.lha FileName
$ lha x FileName.lha




Z (compress)

這個超級古老了,應該不會遇到 (大多已被 gzip 取代)
compress 原本是 UNIX 下的商業軟體,其 POSIX 實現是 ncompress
$ compress FileName
$ uncompress FileName.Z

tar.Z

$ tar Zcvf FileName.tar.Z DirName
$ tar Zxvf FileName.tar.Z






.zip   # we love gzip!
$ zip FileName.zip DirName
$ unzip FileName.zip



.rar
$ rar a FileName.rar DirName
$ rar x FileName.rar
$ unrar x FileName.rar



Friday, October 26, 2012

md5 cracking

md5 是很常遇到的 hash ... 用來加密一般的明文密碼

不過處理起來不算是很棘手(對於簡單的密碼字串)

以下幾個簡單的方法

1. 直接丟 google

2. 讓別人幫你丟

http://www.md5crack.com/crackmd5.php

https://github.com/juuso/BozoCrack

3. 從別人算好的 rainbow table 挖

site:http://www.md5this.com/ 912ec803b2ce49e4a541068d495ab570


4.在線解密,不過有的不給看就是 =..=

http://www.cmd5.org/

http://www.xmd5.org/


5. 自己算

身為一個 hacker ,寫出一個猜 md5 的 brute force cracking 應該不是問題

hashcat 是一款優良的工具,不過他的 manual  不好懂...

http://hashcat.net/oclhashcat-plus/

6. 請示ㄉㄉ

http://www.infosec.sdu.edu.cn/person_wangxiaoyun.htm

http://zh.wikipedia.org/wiki/%E7%8E%8B%E5%B0%8F%E9%9B%B2

http://baike.baidu.com/view/350813.htm

中國山東的王小雲博士提出過 md5 的碰撞猜解方法,可以去研究他的論文XD

Tuesday, October 23, 2012

Archlinux install package via AUR

https://wiki.archlinux.org/index.php/Arch_User_Repository

AUR (Arch User Repository) 類似於 Ubuntu 底下的 PPA,由用戶自行開發的程式會放在這邊

如果經由 Archers 投票票數夠高的話有機會進去官方 repo


到 https://aur.archlinux.org/ 抓想要的 tarball 和 PKGBUILD


$ cd ~/builds 
$ tar xvzf foo.tar.gz
$ cd foo 
$ vim PKGBUILD          # check if there's any evil things in the scripts
$ vim foo.install
$ makepkg -s            #  call sudo to solve the dependency
# pacman -U foo-0.1-1-i686.pkg.tar.xz

Monday, October 22, 2012

Friday, October 19, 2012

some rsync options

筆記一下常用的 rsync options,備份東西用

rsync -avzPe ssh src des

# a: archive mode,  -rlptgoD (no -H,-A,-X)
# v: verbose
# z: compressed
# P: --partial --progress
# e ssh: over ssh

Tuesday, October 16, 2012

Parallel Programming in Perl using Parallel::ForkManager

最簡單的  Perl 平行處理

使用 Parallel::ForkManager 這個 CPAN module

https://metacpan.org/module/Parallel::ForkManager


use Parallel::ForkManager;
 
$pm = new Parallel::ForkManager($MAX_PROCESSES);
 
foreach $data (@all_data) {
  # Forks and returns the pid for the child:
  my $pid = $pm->start and next;
 
   # do some work with $data in the child process ...
 
  $pm->finish; # Terminates the child process
}


寫了一個 Parallel 的 MD5 Bruteforce Cracker

#!/usr/bin/perl

use 5.012;
use warnings;

# MD5 Hash Bruteforce Kit
# original version by Iman Karim (iman.karim@smail.inf.fh-bonn-rhein-sieg.de)
# http://home.inf.fh-rhein-sieg.de/~ikarim2s/

# modified by xatier (xatierlike @gmail.com)
# Date : 10/15 2012
# This Cracker is by far not the fastest! only used to find "lost" passwords ;)
# run on my ubuntu server :P

my $ver = "02";

use Digest::MD5 qw(md5_hex);
use Time::HiRes qw(gettimeofday);
use Parallel::ForkManager;

# for parallel cracking
our $MAX_PROCESS_NUMBER = 25;

# charset
my $alpha = "";
$alpha .= "abcdefghijklmnopqrstuvwxyz" if ($ARGV[0] =~ "a");
$alpha .= "ABCDEFGHIJKLMNOPQRSTUVWXYZ" if ($ARGV[0] =~ "A");
$alpha .= "1234567890"                 if ($ARGV[0]=~"d");
$alpha .= "~!@#\$%^&*()_+`-=[]\\{}|;':\",./<>?"  if ($ARGV[0]=~"x");


usage() if ($alpha eq "" or $ARGV[3] eq "");

if (length($ARGV[3]) != 32) {
    die "Sorry but it seems that the MD5 is not valid!\n";
};

say "Selected charset for attack =>  '$alpha'";
say "Going to Crack '$ARGV[3]'";
say "length from $ARGV[1] to $ARGV[2]...";
say "Press Enter to continue...";
my $key = <>;
system("mv key.txt key.txt.old");

# go!
for (my $t = $ARGV[1]; $t <= $ARGV[2]; $t++) {
    crack ($t);
}

sub usage {
    say<<EOF;   
    Charset can be: [aAdx]
    a = {'a','b','c',...}
    A = {'A','B','C',...}
    d = {'1','2','3',...}
    x = {'!','\"',' ',...}

    EXAMPLES:
       ./md5crack.pl ad 1 3 900150983cd24fb0d6963f7d28e17f72
            all lowercase Alphas and all digits
            length from 1 and 3 characters.
        ------------------------------
       ./md5crack.pl aA 3 3 900150983cd24fb0d6963f7d28e17f7;
            all lowercase Alphas and all uppercase Alphas;
            exactly 3 characters.
        ------------------------------
       ./md5crack.pl aAdx 1 10 900150983cd24fb0d6963f7d28e17f7;
            nearly every characte;
            length from 1 to 10 character;
EOF
    die "Quitting...\n";
}

sub crack {
    my $CharSet = shift;
    my @RawString = ();
    my @testdata = ();
    my @realbuf = ();
    my $BUFSIZ = $MAX_PROCESS_NUMBER;
    my $data_BUFSIZ = 100;
    my $data_count = 0;
    my $real_count = 0;
    push @RawString, 0 for (0 .. $CharSet - 1);

    do {
        for (my $i = 0; $i < $CharSet; $i++) {
            if ($RawString[$i] > length($alpha)-1) {
                if ($i == $CharSet-1) {
                    crack_parallel([@realbuf]);
                    say "Bruteforcing done with $CharSet Chars. No Results.";
                    return;
                }
                $RawString[$i+1]++;
                $RawString[$i] = 0;
            }
        }

        my $ret = "";
        $ret .= substr($alpha,$RawString[$_], 1) for (0 ..$CharSet-1);

        if ($data_count < $data_BUFSIZ) {
            push @testdata, $ret;
            $data_count++;
        }

        if ($data_count == $data_BUFSIZ) {
            push @realbuf, [@testdata];
            @testdata = ();
            $data_count = 0;
            $real_count++;
        }

        if ($real_count == $BUFSIZ) {
            crack_parallel([@realbuf]);
            @realbuf = ();
            $real_count = 0;
        }

        $RawString[0]++;

    } while ($RawString[$CharSet-1] < length($alpha));
}


sub crack_parallel {
    my $realbuf_ref = shift;

    my $pm = new Parallel::ForkManager($MAX_PROCESS_NUMBER);

    $pm->run_on_finish (
        sub {
            my ($pid, $exit_code, $ident, $exit_signal, $core_dump, $ref) = @_;
            if (defined $ref) {
                say "$ref->[0] ==> $ref->[1]";
                open F, ">", "key.txt";
                say F "$ref->[0] ==> $ref->[1]";
                close F;
                $@ = "";   # shut up, error message!
                die "\n**** Password Cracked! ";
            }
        }
    );

    for my $r (@$realbuf_ref) {
        # paralleize the cracking md5s
        $pm->start and next;
        for my $text (@$r) {
            my $hash = md5_hex($text);
            say "$ARGV[3] != $hash ($text)";
            if ($ARGV[3] eq $hash) {
                $pm->finish(0, [$text, $hash]);
            }
        }
        $pm->finish(0);
    }
    $pm->wait_all_children;
}

Monday, October 15, 2012

cpanp and cpanm note

CPAN

$ sudo cpanp

s reconfigure

7 Select mirrors

No

Mirror => Asia => Taiwan


Quit

Save and exit




# req

s conf prereqs 1
s save




# skip test
s conf skiptest 1
s save




s selfupdate all

i Bundle::CPAN




CPANM


https://github.com/miyagawa/cpanminus/

$ wget http://xrl.us/cpanm

$ chmod +x cpanm

$ mv ./cpanm /usr/bin

$ cpanm --self-upgrade --sudo

$ sudo cpanm Parallel::ForkManager


ReText - a live text editor for Markdown and rST


http://sourceforge.net/p/retext/home/ReText/

powered by Python & Qt

gslin 學長 blog 上看到的介紹文 在 Ubuntu 下即時編輯 Markdown 語法:ReText



基本上是個不錯用的 tool

試用心得是他 live editor 的地方還是做的不夠好,只要有更改到,live 視窗會自動捲到最上面,這點來講使用很不便


不過大抵來講拿來當作是一個 markup language 的預覽程式很好用啦XD (小弟初學者)

Friday, October 12, 2012

R.I.P. dmr

dmr 大師逝世一週年

Brian Kernighan : 牛頓說他是站在巨人的肩膀上,而我們是站在 Dennis 的肩膀上

感謝您,Dennis ,帶給了我們如此美好的資訊世界。 : )



#include<stdio.h>

int main (void) {
    printf("Goodbye, world");
    return 0;
}


Dennis Ritchie,

    father of the C programming language and the Unix operating system


"Tribute Dennis Ritchie at Bell Labs" youtube 上面有一系列的紀念演講...熱淚瀅框




恐龍本作者給 dmr 的紀念


http://en.wikipedia.org/wiki/Dennis_Ritchie
http://www.cs.bell-labs.com/who/dmr/index.html



大家都說 Steve Jobs 的蘋果改變了全世界

但倘若這個世界沒有 C programming language 和 UNIX

Steve Jobs 要拿什麼來能種出又大又甜的蘋果呢?

10/5 全世界都為改變世界的 Steve Jobs R.I.P.

誰來為改變 computer science 世界的 dmr 大師哀悼呢?




                                                                             
brainyquote.com 摘下幾句 dmr 的名言

以此致哀


At least for the people who send me mail about a new language that they're
designing, the general advice is: do it to learn about how to write a compiler.


At the same time, much of it seems to have to do with recreating things we or
others had already done; it seems rather derivative intellectually; is there a
dearth of really new ideas?


C is peculiar in a lot of ways, but it, like many other successful things, has
a certain unity of approach that stems from development in a small group.


C was already implemented on several quite different machines and OSs, Unix was already being distributed on the PDP-11, but the portability of the whole
system was new.
                                                                         

C++ and Java, say, are presumably growing faster than plain C, but I bet C will
still be around.


For infrastructure technology, C will be hard to displace.


I can't recall any difficulty in making the C language definition completely
open - any discussion on the matter tended to mention languages whose inventors
tried to keep tight control, and consequent ill fate.


I'm just an observer of Java, and where Microsoft wants to go with C# is too
early to tell.


I'm not a person who particularly had heros when growing up.


I've done a reasonable amount of travelling, which I enjoyed, but not for too

long at a time.


Obviously, the person who had most influence on my career was Ken Thompson.


Over the past several years, I've been more in a managerial role.


The kind of programming that C provides will probably remain similar absolutely
or slowly decline in usage, but relatively, JavaScript or its variants, or XML,
will continue to become more central.


UNIX is basically a simple operating system, but you have to be a genius to
understand the simplicity.
Dennis Ritchie


When I read commentary about suggestions for where C should go, I often think
back and give thanks that it wasn't developed under the advice of a worldwide
crowd.



家書


約一年前母親寫給我的





等到真正置身雲間. 才發現不過如在霧裡.


人生的一切追求也都是如此. 遙遠而不可及的事物才會令人渴望. 一旦成為每天要面對的現
實. 也就不過爾爾. 等日後回首望向來時路. 你又會看到當初夢想的風景.

change Terminal title

剛剛睡醒看到這影片...笑翻




改桌布, pstree, 和 ping 大家都會就不說了

要比較炫的 pstree 還可以裝一下 htop XD



改標題也有很 g33k 的作法:


echo -ne "\033]2;hack\007"


好了,我看起來像個駭客了,對吧

Tuesday, October 9, 2012

update bash version on Mac

用到今天我才發現原來 Mac 上面 default 的 bash 竟然是骨灰級的版本

$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin12)
Copyright (C) 2007 Free Software Foundation, Inc.


更新步驟

$ brew install bash

$ /usr/local/bin/bash --version
GNU bash, version 4.2.37(2)-release (i386-apple-darwin12.2.0)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.


# 在最後加上裝好的 bash 新版
sudo vim /private/etc/shells
/usr/local/bin/bash

# 換過來
chsh -s /usr/local/bin/bash

$ echo $SHELL
/usr/local/bin/bash

$ echo $BASH_VERSION
4.2.37(2)-release


done.

Monday, October 8, 2012

Catalan Number

http://en.wikipedia.org/wiki/Catalan_number

組合數學上很重要的數列

1, 1, 2, 5, 14, 42, 132, 429 ...

這個特殊的遞迴式很好用





#!/usr/bin/python

c = [1, 1, 1]
for _ in range (3, 10+1):
    # f(n+1) = f(n) * (4n-6 / n)
    c.append(c[_-1] * (4*(_-1) - 6) / (_-1))

print c[2:]

# [1, 1, 2, 5, 14, 42, 132, 429, 1430]