筆記

Pocketsphinx

Pocketsphinx 是來自卡內基美隆大學(Carnegie Mellon University)的語音辨識工具,許多 Linux 發行版的套件庫已經有收納此工具,以 Fedora 19 為例,執行以下 yum 安裝指令就能夠將所需的套件安裝完畢:

  • sudo yum install pocketsphinx pocketsphinx-python

 

分類: 

Google Speech API

這陣子因為工作需求開始研究對聲音檔進行語音辨識的可行方案,第一個想到的便是 Google 的 Speech API。不過時至目前為止 Google 似乎還沒有打算將 Speech API 作為正式的產品發佈,不僅沒有任何官方文件說明其規格與操作方式,取得 API 存取權的方式也頗為迂迴。此外 Speech API 的存取也有不少限制,例如每日的請求次數為 50 次,以及聲音檔的長度限制大約在 10 秒左右。這使得目前的 Speech API 比較像是供開發者預覽用途,而不太適合實務應用。

 

分類: 

Reverse Engineering for Beginners

Reverse Engineering for Beginners(逆向工程初學指南)是一本線上電子書,作者為 Dennis Yurichev。以份量來說,這本書的內容相當豐富,不過由於組合語言對 DR 而言實在是可怕的東西,所以 DR 只有快速的瀏覽了一下,然後挑了一個簡單的習題(1.4)試做看看。

 

習題 1.4 的要求是從執行檔中找出密碼,DR 下載了 Linux 版本的範例執行檔(password1),執行時會顯示「enter password:」,任意輸入字串後則顯示「password is not correct」。接著 DR 使用 hexdump 工具去尋找裡頭的可列印字串:

  • hexdump -C password1 | more

 

分類: 

SDL 的滑鼠按鍵識別

最近 DR 在 Linux 上玩遊戲時,發現有不少遊戲在操控設定上無法識別除了基本三鍵以外的滑鼠按鍵,例如拇指旁的按鍵。但卻又不是每一款遊戲都有這問題,例如《惡靈勢力 2》(Left 4 Dead 2)就能夠識別到額外按鍵。這個狀況引起了 DR 的好奇心,基本上 Linux 遊戲的輸入控制都是利用 SDL 完成的,因此 DR 便想要自己動手做做看,並嘗試找出可能的差異。

 

一開始 DR 用以下的程式碼來識別滑鼠按鍵,但很快就發現了問題:

分類: 

Mozilla Thunderbird 擴充套件開發

前一陣子 DR 因為工作環境的需求,開始嘗試撰寫 Mozilla Thunderbird 的擴充套件,卻發現網路上找不太到適合新手入門的教程。儘管網路上針對 Mozilla Firefox 的教程有比較多一點,可以先用來學習一些基礎概念(因為所有 XUL 應用程式的擴充套件都是採用相同的架構)。然而若想要進一步涉入 Thunderbird 的控制,就會發現幾乎找不到有什麼教程可以讀……

 

或許是因為這個領域缺乏入門資源,有志願者製作了 Add-on SDK 來協助擴充套件的開發。不過很不幸地,這玩意僅支援 Firefox 而不支援 Thunderbird,因此 DR 沒辦法用來做進一步的利用。

分類: 

異常延遲的 GNOME Terminal

最近 DR 常透過 SSH 遠端連線到網際網路上的主機去做密集的指令操作,卻發現輸出入的反應速度相當緩慢,按個按鍵要等上許久才會顯示出所按的按鍵,就連 Tab 鍵自動補齊的反應速度也是慢得可怕。原本認為是網路的問題(畢竟是網際網路而非區域網路),但幾個環節檢查下來,只覺得網路速度應該沒有那麼差才是。

 

直到有一次 DR 在 Windows 下用 PuTTY 登入至相同的主機想要查點資訊,赫然發現反應速度天差地遠,當然沒有像區域網路那麼順暢,但至少回復到可以接受的程度。這才意會到恐怕這並不是什麼網路問題,問題是出在虛擬終端機軟體上。

 

分類: 

再談 Outlook 批次寄信

去年 DR 在 Outlook 批次寄信與 SharpDevelop 這篇文章裡,提到自己因為工作需要寫了一支程式,該程式的功能是可以根據 CSV 格式的名單自動產生信件給 Outlook(或者 Outlook Express 和 Windows Live Mail)寄送。當這支程式完成後,DR 有很長的一段時間沒有再對程式碼做大幅度的更新,僅有針對特定需求略做客製化的修改。

 

直到最近,DR 再度涉及到大量信件寄送的業務,回頭再去操作當初自己寫的程式時,也許是因為操作思維的轉變,發覺這東西真是不太好用,很多地方現在都覺得礙手礙腳的,於是便打算將這支程式整個重寫過。然而事過境遷,不只是操作喜好改變,在程式架構上的評估也產生了一些轉變。

 

分類: 

Python 發送 HiNet 企業簡訊

HiNet 企業簡訊(Socket to Air)是中華電信的線上簡訊發送服務,由於這項服務可讓用戶自行撰寫程式來連結伺服器,因此有提供通訊規格說明和許多程式語言的程式碼範例,包含 C(Unix、Windows)、Java、VB .NET、Perl 以及 PHP 等。不過沒有 Python 的範例,所以 DR 主要參考(更精確的說就是照抄)PHP 版本的範例,寫了一段用 Python 發送的版本。

 

以下程式碼僅單純示範如何登入 HiAir 伺服器,並發送一則文字簡訊給指定的國際號碼:

分類: 

Fedora 19

 

今天 DR 生出空來將使用一年多的 Fedora 17 重新安裝成 Fedora 19,一方面是為了軟體的除舊佈新,另一方面則是鑒於之前的不良經驗,而打算將 /home 目錄分成獨立的分割區。同時這樣的作法也可以使日後重裝系統時,只要保留 /home 不格式化就無須進行大量的資料轉移(今天 DR 在安裝之前,得先將 Linux 系統裡需保留的資料備份到 Windows 的分割區裡,然而 Linux 讀寫 NTFS 檔案系統的效率又很不理想……)。

 

分類: 

extundelete

DR 合理的推測,自己這輩子應該根除不了刪檔案快、狠、卻不太準的惡習……

 

今天動用到了 extundelete 這支針對 ext3/ext4 檔案系統的反刪除工具,雖然最後沒能把檔案救回,但還是在這邊做一點記錄。話說 DR 要在某部伺服器上做一支監控程式,於是就直接 SSH 遠端登入後用 Vim 編輯器來寫。DR 在這支程式裡設計了建立 *.pid 檔的機制,目的是要避免動作的重複執行,而悲劇就發生在當 DR 想要手動 rm 掉 *.pid 時,竟然手誤把 *.py 給 rm 掉了……

 

雖然損失的不是整支程式,因為另一部伺服器上的 Git 系統還有上週五所提交的備份,卻還是損失了今天早上一、兩個小時下來腦力激盪的成果,所以 DR 的第一個反應就是想把檔案救回來。然而在開始思考對策之後才意識到這部伺服器的配置可說是讓資料救援越顯困難,因為:

分類: 

頁面

Subscribe to RSS - 筆記