Author Archives: victor

Plurk.com is hiring

Are you good at Python programming? Are you a Javascript master? As a developer of Plurk.com, here I want to say it loudly – We’re hiring! For more details, please reference to: Help Spark a Social Revolution – Plurk Opens … Continue reading

Posted in English Articles, Python | Tagged , , , , | 2 Comments

Zero-downtime service migration

When I am running my website, now.in, I did encounter a trouble.  That is, when there is a bug in the production server, then I need to restart them.  Sounds fine, right? Just to restart a server.  Yes, for most … Continue reading

Posted in English Articles, Python, Unix-Like, 分享 | Tagged , , , , | 1 Comment

無停機服務遷移

一直以來在營運now.in都有一個令人困擾的問題,就是每當伺服器更新或是出現問題時,就得關掉重開,雖然說大部份的伺服器我在設計上都做成重開也沒有關係,但有少部份一但重啟就會造成使用者斷線,參考下面這張伺服器狀態的圖 圖中被切斷的山峰都是伺服器重啟的時候,無疑的這對使用者來說是不好的體驗,對於一般網頁HTTP這類stateless的伺服器來說重啟是無所謂,但串流伺服器就不一樣,因此最近我在思考如何解決這樣的問題,首先想到的是伺服器重開的原因,不外乎有幾種 部署新版的程式 為了修正BUG 記憶體用量過高 重新讀取執行環境,例如ulimit -n,也就是檔案數量的限制大小 從主機A移到主機B 以Python的伺服器來說,如果只是單單只是為了部署新版的程式,Python有個reload函數可以重讀整個module,因此可以設個管理用的後門用來重載模組,但是這樣做有個問題,就是已經產生的instance還是一樣,其實說穿了等於是重新執行那個module,如果只是簡單的改版還好,但複雜的改版就可能牽扯到太多因素難以透過這樣來更新,而除此之外,很多重開的因素像是記憶體用量過高,或著執行的環境參數改變,這些都無可避免的一定得建新的process,至於從A主機移到B主機,基本上是難以避免的一定得重啟伺服器,除非有某個前端的伺服器保持連線,後端的伺服器進行交移工作才有可能,而主機轉移的狀況其實很少出現,因此這篇文章要探討的是如何辦到同一臺機器內的服務轉移 方法 最大的問題就在於,連線中的socket該如保持住連線,最簡單的想法就是建立新的process,將目前的連線交給新的process,新的process接手完所有的連線開始運作後舊的process就能終止了,當然所謂的連線還包函了服務的狀態,我們在者裡稱之為 CSD (Connection State Descriptor),大致想法如下面圖片所示 首先Process A是正在運行的process,而Manager是負責控制遷移的process 此時Manager啟動了要負責接手的Process B 接著Manager通知A將連線狀態傳送給Process B,B接手後繼續提供服務,並且告知接收完成 在確定B能夠接手服務並且正確執行後,這時Manager就能將A中止,走到這裡服務就算是完整地移交了,中間沒有任何間斷 技術層面問題 – Socket的轉移 這樣的做法理論上看起來確實可行沒錯,但是最主要有技術上的問題得解決,就是如何將socket,或著是file descriptor轉移到另一個process,在我找過相關的資料後知道目前有兩個方法 child process 這個方法主要是因為child process在生成後會繼承parent process的file descriptor,但是缺點就是只限於child process,如果我們想將服務移交給另一個完整的獨立process這個方法就會行不通,因此使用上會有很多限制 sendmsg 另一個方法就是unix domain的socket有提供一個函數叫sendmsg,可以將file descriptor轉移到任何process,這樣一來實用性就比child process高很多,於是我決定採用此方法 簡易的實作 … Continue reading

Posted in Python, 中文文章, 分享 | Tagged , , , , , , , | 7 Comments

Mr.DJ 2.0.3 Mac OS X版發佈

Mr.DJ 2.0.3 Mac OS X版正式發佈 截圖 下載頁面

Posted in Uncategorized, 中文文章 | Tagged , , , , | 3 Comments

無用 – 更改Linux SSH登入歡迎畫面為新世紀福音戰士裡的Nerv的logo

不要問我這有什麼用,只是純好玩,如果你的ssh沒有用utf8編碼的話可能會看到亂碼,以下是看起來的效果 做法 做法很簡單,修改/etc/motd檔即可,如果你想要這個Nerv logo,可以下載這個motd.txt然後解開後覆蓋原本的motd即可 Logo作者 Logo作者為ptt的cfi697,而原始版本因為字型寬度的問題我修正了一下

Posted in 中文文章, 無用 | Tagged , , , | 3 Comments

嘴砲談雲端 – 介紹用雲端除錯網頁的雲端技術: Browserling

有試著想開發支援所有主流瀏覽器的朋有們肯定都會遇過像我在 How hateful it is to develop a web application which runs correctly with different browsers? 所提到的情況,為了確定網頁在各種版本的瀏覽器,特別是那該死的IE系列都能正常顯示和執行,這樣的畫面出現是很平常的事 在這張圖中我分别用了兩個VirtualBox給IE7和IE6,如果連IE5要加進來右是另一個,只是IE5太古老雖然還是可能有人在用,但我已經懶得測了。 當然,安裝所有的瀏覽器是一個解決方法,包括使用VirtualBox之類的虛擬化技術來安裝萬惡的IE系列,但畢竟還是很麻煩,來自拉脫維亞 (老實說我也不知道這是什麼樣的地方 XD) 的Peteris Krumins,有趣的是Peteris他唸的是物理系,他和來自美國的James Halliday創作了一個基於雲端的解決方案,叫Browserling,裡面用的技術是之前我在 Open the browser, and here comes the computing power 所提到的,他們共同開發的技術,這個技術最有趣的地方是可以透過網頁來遠端操作電腦,雖然這不是什麼很創新的技術,但結合虛擬化的技術,將運算能力變成像流水一樣,網頁一開服務即到的型式,這就是它的潛力。 扯到雲端 在台灣一個很有趣的現像就是,當某種新東西很新奇、在未來會有不錯的應用,總會有一堆門外漢跟著朗朗上口地四處吹噓這些名詞,說穿了不過就只是趕流行,前陣子流行的是奈米,什麼都要冠上奈米,這樣做價格似乎就可以翻幾成,也有Web2.0之類的,甚至台灣還有人搶著推出Web3.0,說是要把網頁變成P2P的型式,當然是以失敗收場,而現在只不過是把流行的口號改成雲端而已,什麼都要冠上雲端,打開電視偶爾也會看見一些名嘴吹噓著雲端巴啦巴啦…,其實當發現一堆門外漢也在跟著人云亦云時就說明了這已經是在炒作了,哪天在路邊看見”雲端雞排”也請不要意外 XD 何謂雲端 每個人對雲端都有一套解釋,對我來說,雲端不外乎就只是將計算資源、資料儲存等等能力變成像自來水那樣,接上名為網際網路的大水管,打開電腦即可存取,這樣的概念其實早就有了,更早之前甚至有人提出更激進的想法,要將使用者這端完全只剩下客戶端的能力就夠了,剩的東西都由雲端的能力提供,但是也是沒有成功,或許是環境不夠成熟,而我個人認為使用者端的能力也是需要的,網路頻寬再怎麼進展,要即時所有東西都由遠端提供還是有困難的 台灣的現況 … Continue reading

Posted in 中文文章, 作品, 嘴砲 | Tagged , , , , | 1 Comment

Logy – a central logging system for Python

I’m glad to announce my new open source project:Logy. Logy is a simple lightweight central logging system for Python. When do you need a central logging system?  Well, when you have many servers online, and they are running different python … Continue reading

Posted in English Articles, 分享 | Tagged , , | 1 Comment

數學筆記: Euler’s theorem 練習前置證明

最近因為要讀密碼學相關的論文,會用到不少數論的東西,而我的個性是沒真正推導過的東西用起來總很不放心,而且我很笨,沒有平鋪直述的思路推導就很難理解,我討厭那種神來一筆,我記得以前在PTT上問過一個微積分的問題,我看到一個有三角函樹的式子被上下同乘某個三角函數得到另一個式子,我一直覺得很納悶,書上只這樣寫,我想知道的不是結果,而是思路,結果有個的同學就回答了”阿不就上下同乘X函數”,我差點沒暈倒,老兄,你不說我看書也知道是上下同乘那函數,結果對我來說只是一個點,但思路是一條路徑,沒有思路的話,數學式子對我來說也不過是幾個文字而已 雖然有些東西以前可能有想過是怎樣推導出來,但因為太少用所以很容易忘記,每次都重新想起,所以我決定將整個思路寫下來,這樣以後忘記時就不用重新看,所以主要只是給自己看的筆記,寫在紙上時間久了一樣會不見,所以想一想寫到部落格裡好了,順便練習用LaTeX編數學公式,可能會對某些人有幫助,但我突然腦殘想錯的機會不小,所以讀者請自重囉 今天要證的是,若m為質數,w為任一與m互質之整數,則 主要證明是參考 數論在密碼上的應用 (第 2 頁) 這雖然不是Euler定理,但我覺得對之後證明很有用,太少接觸所以先從簡單的開始 一開始由該網頁所提到的方式,拆開成多項式來看 接著就得先從多項式定理複習起 其實可以被視為是 如果把每一個垂直列開來,就會發現其實 我們可以把這樣展開的式子,視為從上到下每行挑一個的連乘,因為要從2個選擇中挑n次,這樣所有的組合可能為 但是我們比較在意的是某些組合出現的次數,我們可能會想知道n個a出現幾次,也就是它的系數,而這要算出不同可能情況的系數又扯到了排列組合,複習一下排列組合的思路,如果我們有ABC三個東西要排列 最直觀的想法就是,先關注在ABC三個東西所佔的地方,直接先把它們當成位置來看 先從最左邊的位置開始,此時我們手裡有ABC三種選擇,接著來到第二個位置,前面已經挑走了一個選擇,所以我們只剩兩個,接著最後一格,挑剩下的就只有一種選擇,所以可能的選擇有 種,也就是 接著來考慮重覆的部份,先一樣當成都不同來看,可能性展開有這麼多6種 在此時,我們被告知B和C其實是同一種 把B和C都替換成X來看 我們會發現其實原本的可能性數量其實重覆了一次,所以應該除以二,而二這個數字其實就是B和C排列的可能性,由此我們可以知道,當N個東西任意排列,其可能情況是 而當我們被告知,這裡面其實有a個東西是一樣的,那麼我們就將重覆的情況除掉 當我們又被告知,裡面有b個東西是一樣的,此時我們又可以去掉重覆的,得到的結果就是 但是,理所當然的,裡面不一樣的東西數量加起來不可能會大於N,有了基本的排列公式複習,我們回到二項式定理 利用我們剛才排列的公式,我們知道個個系數其實是 以 來解釋的話,因為有k-2個相同的a和2個相同的b,所以k!要除掉相同的部份,有了這個部份我們可以回到先前把w拆成1來看的部份 在這裡,我們把每個1都當做不一樣的數來看待,套用多項式公式我們會發現裡面有w項的 每項都是1,加總起來是w,而剩下的部份,形式像這樣 這些數全都因為包含m為因數可以被m整除,在此有個疑點就是,那為什麼分子就不可能把m給除掉,剩下的不會是m-1之類的嗎? 原因很簡單,因為m是質數記得嗎? 以這一項來看 m!的很多項都會被消掉,像這個會被消成 下面的2!會是(m-1)或m的因數,但是因為m是質數,除了它自己以外只有1是因數,因此不管下面放些什麼,m總會是這些項目的系數中的一部份,得到這結論後,我們就能將之前的式子兩邊同除m,這樣除了w以外的項目都會被整除,得到 這時離我們目標不遠了,兩邊同除w 就證出來了,最後有個疑問,就是w為什麼得和m互質,因為在倒數第二個式子,如果它們不互質,w一除m就會被變成其它的數 to read Haitian … Continue reading

Posted in 中文文章, 數學筆記 | Tagged , | 3 Comments

Po translate – automatic translation tool for .PO files

It is kinda hateful to translate .PO files from Traditional-Chinese to Simplified-Chinese, most of the meanings are identical but different in simplified word or traditional word.  It is not a very difficult to translate.  But however, it is still an … Continue reading

Posted in English Articles, Python, 分享 | Tagged , , , , , , | 1 Comment

Po translate 自動化翻譯工具

之前有寫一個 PO檔自動繁簡轉換程式,但是因為沒有把它傳到PyPi上,所以要到處copy貼上很麻煩,為了方便使用,我把它打包並且傳到了PyPi,以MIT License開放源始碼,不過只是一個很簡單的程式而已,我想應該沒有多少人會想改些什麼,但是當然有人有興趣的話,歡迎修改 這個程式主要是用來解決繁體中文的.PO檔和簡體之間的互換問題,因為翻譯完繁體中文,基本上和簡體沒有太大差別,用Google translate轉成簡體就可以,但是手工作起來很煩,這種事情當然是交給程式執行 安裝方法很簡單 easy_install po_translate 使用也很簡單 po_translate input.po output.po zh-TW zh-CN 像這樣就能輕鬆的透過Google translate把繁中的.PO檔轉成簡中的 相關連結 PyPi的連結 Bitbucket的Repo

Posted in Python, 中文文章, 分享 | Tagged , , , , , , , , , , , , | 1 Comment