發表文章

Mac下玩vala

雖然vala大都在Linux下玩,但手上有Mac,就會想看看是不是也可以在Mac下玩玩。初步試了一下,應該可以! 1. 使用MacPort安裝vala(所以請先安裝MacPort) $ sudo port install vala 2. 安裝pkg-config $ sudo port install pkgconfig 3. 可以試著寫vala程式了 請參看 Vala_Tutorial class Demo.HelloWorld : GLib.Object {     public static int main(string[] args) {         stdout.printf("Hello, World\n");         return 0;     } } 將以上程式存成 hello.vala 然後到Terminal, 下指令: $ valac hello.vala /Users/ops/vala/hello.vala.c:55:2: warning: 'g_type_init' is deprecated [-Wdeprecated-declarations]         g_type_init ();         ^ /opt/local/include/glib-2.0/gobject/gtype.h:669:23: note: 'g_type_init' declared here void                  g_type_init                    (void);                       ^ 1 warning genera...

What I learn about howto cross compile c source code for ARM CPU on an x86 ubuntu machine

圖片
1. Install the gnu c compiler for ARM (from: cross-compiling-static-c ) $ sudo apt-get install gcc-arm-linux-gnueabi And what do 'eabi' mean? EABI is the new Application Binary Interface (ABI) specification for the ARM Architecture. (from: geekwentfreak ) In short, we can link binaries which compiled by any compilers who follow the EABI specification. 2. Write a simple hello.c program and cross compile it $ arm-linux-gnueabi-gcc hello.c -o hello 3. So, we get a binary file 'hello', which can execute on ARM platform. But, how can we run and test it? Of course, we can copy it to an ARM machine, like Raspberry Pi, Pandaboard, BeagleBoard, and more. But more convenient way is using emulator, so We can do all the job on one machine. Let's install QEMU: (from: cnx-software ) $ sudo apt-get install qemu-kvm qemu-kvm-extras $ qemu-system-arm -version QEMU emulator version 1.2.0 (Debian 1.2.0-2012.09-0ubuntu1), Copyright (c) 2003-2008 Fabrice Bellard Open web ...

Macbook Pro 安裝Debian筆記

圖片
為了怕傷到原本的Mac, 我把原本的硬碟拆下來,換了一顆新的上去。然後就放入網站上download的安裝光碟,開機後正常的出現Debian的安裝畫面,我依照其指示,下一步下一步的進行。可是安裝完後,重開機,卻出現一個問題的資料夾。不相信,再重開機,結果畫面黑黑的,無法成功開機。 只好去google一下,發現許多人說要注意Grub, lilo, MBR的設定問題,因為Apple的機器是使用EFI開機的,不是BIOS開機。所以有人說要安裝REFIT工具來開機,也有人說不用,可以用其他方式。但這些作法看起來都很令人頭大,而且好像寫作時間都有些時日了。我一直在想應該有比較簡單的方法才是。 不小心的在重開機的時候,我按了option鍵,卻發現畫面上出現了兩個光碟圖示,一個寫Windows, 另一個寫EFI boot之類的。我兩個都試了一下,發現Windows進入的是我之前第一次安裝的畫面(畫面解析度比較不好),而EFI這個進入後,也是同樣的Dibian安裝畫面,但是畫面解析度比較高,看起來好看得多。我突發奇想,用這個EFI進入的畫面再安裝一次,為了保守起見,這一次我不再手動去改partition的設定,全部使用預設值。結果,安裝完,重開機,就可以正常的進入。太好了,安裝成功了。 這代表,安裝光碟上應是有兩個安裝區,一個給BIOS開機用,一個給EFI開機的機器使用吧 。 另一個問題是無線網卡的安裝,在安裝時就出現找不到無線網卡firmware的提示,所幸機器上還有有線網卡可以正常使用,才能安裝成功。但因為Broadcom沒有公開其firmware,可能為了智財權問題,所以在安裝光碟上,Debian沒有放入其firmware。所以安裝後,必須自己去安裝。安裝方法可見 bcm43xx 摘要如下: 1.在/etc/apt/sources.list檔案中,加入如下內容: # Debian 7.0 "Wheezy" deb http://http.debian.net/debian/ wheezy main contrib non-free 2.在Terminal輸入以下指令: apt-get update apt-get install firmware-b43-installer 此時,再到右上角的網路設定功能表查看,原本出現沒有fi...

Digital audio essential, what I learned these days.

圖片
1. ADC & DAC concept   PCM interface 2. sample rate Fig. 1 Fig. 2 In these figs, we have two tracks of audio. The upper one and downside one are the same music, but with different sample rate. The upper one with 44.1khz and the downside one with 8khz.   It's hard to see the difference between these two tracks from fig. 1, because the waveform is too small. But, when we zoom in many times, you can see the difference between these tracks in Fig. 2. With higher sample rate, more details of the wareform can be preserve; and with lower sample rate, we lose more details of the wareform of music.    Yes, we human have very sensible ears. Try it, you can listen and feels the difference of music with sample rate 8khz and 44.1khz. 3. how to convert music from one sample rate to another   Audacity is a good recording tool and a good audio editing tool. But I didn't find out how to use it to convert music from one sample rate to another. Using google,...

HFP for Linux 無法和智慧手機配對使用?

圖片
HFP for Linux 是一個在Linux上實作藍牙Hands-free profile的程式, 簡單講就是可以電腦變成藍牙耳機。這是一個開源碼的專案, 大約在2008-2009年間熱烈地進行, 之後由於主要程式貢獻者Samr7不見了,整個專案可以說是停了下來了。最後一次程式修改是在2010年四月。 專案活動情形可以由 http://www.ohloh.net/p/nohands 看到。 我在試這支程式時,發現一個現象:較舊的手機可以正常的運作,但是新的智慧手機就不行。其實也不是不行,而是程式一開始會先進行手機的找尋(Inquiry),在此就找不到,因此後續的功能也自然無法使用。其實手機找尋(Inquiry)的動作是很有討論性的,也是令人混淆的。因為作業系統本身就己經做過一次這個動作了, 不管是使用blueman或者是預設的藍牙管理程式,都是必須先和手機做配對。可是nohands這支程式還是要自己做一次:   而且它的找尋(Inquiry)動作相當的快,一般都要約20秒,它只要5秒。 因為由藍牙規格來說,HFP並不會和硬體有太大的相關,所以我想這支程式雖然是幾年前開發的,但HFP 1.5也還是很有相容性才對。其實我手上有一隻Nokia BH-100的藍牙耳機是2007年買的,它就運作的很正常。因此大膽猜測,應該只是nohands在做手機的找尋(Inquiry)時,也許做了什麼事情,因此把新手機排除在外了! 首先使用hcidump程式來觀察是否底層Inquiry時就出問題,還是nohands本身自己其實有Inquiry到,但是自己另外做了篩選動作: $ sudo hcidump HCI sniffer - Bluetooth packet analyzer ver 2.4 device: hci0 snap_len: 1028 filter: 0xffffffff < HCI Command: Inquiry (0x01|0x0001) plen 5     lap 0x9e8b33 len 4 num 0 > HCI Event: Command Status (0x0f) plen 4     Inquiry (0x01|0x0001...

Python Gtk glade開發GUI程式

圖片
最近看到幾個有趣的軟體使用的開發技術很有意思: Python, GTK, Glade Python: 由Google主推的高階直譯語言,強調其容易學習使用。 GTK: 用來建立GUI的底層軟體。 Glade: 設計UI的工具,可以視覺化的以所見即所得方式來作業。 有意思的地方: 1. Python為高階直譯,所以馬上寫馬上可執行,不需編譯 2. 看文件強調為跨平台,所以寫一次可在多個平台跑 3. 為開源碼,意即為自己用不用花錢 4. 開發方式簡單 在MacOSX上,在10.7(Lion)做了以下測試: 1. 先用Macport安裝python 2.7 (因為太久前做的,已忘了確切作法,可以參考以下網址:http://astrofrog.github.io/macports-python/) 2. 再去安裝PyGTK(http://macpkg.sourceforge.net/) 取得PyGTK.pkg後,按兩下後,出現安裝精靈,大致上就是下一步,下一步的做就可以了,最後會告訴你去跑一下/opt/gtk/bin/pygtk-demo, 這其實是一支python程式,內容: #! /usr/bin/env python import sys import os.path pygtklibdir = os.path.join("/opt/gtk/lib", "pygtk", "2.0") sys.path.insert(0, pygtklibdir) execfile(os.path.join(pygtklibdir, "pygtk-demo.py")) 不用學過python程式設計,也大概可以猜到它只是去叫另一支python程式起來而已。執行結果如下: 使用方式為:選取左邊選項,可以在右邊看到該項的說明及程式寫法(要切換頁籤)如果要看到其實際執行情況,就在左邊選項上按兩下就可以了。先簡單的試用後發現,命令列總是會出現 : clip: empty path.以及其他錯誤訊息。有時候還會有程式當掉的情況,但簡單的程式是還可以正常的執行。看來,在MacOSX上,這個開發組合模式,還有一些問題要改善。 3. 找一個簡單的...

.net 連線至遠端firebird資料庫

圖片
看了文件, 說firebird的.Net data provider是不需要依靠firebird client的軟體, 我由 codeproject 下載的程式(由.Net存取firebird資料庫), 也是真的可以不安裝firebird任何軟體, 就可以正常執行。只是這個程式是使用Embedded模式的firebird資料庫。我想要試試連到遠端super server模式的firebird資料庫看看。 直接去修改它的連線字串, 改成指到遠端資料庫看看先。結果, 就是不行。試過幾次後, 我注意到這個程式的幾個問題: 1. 它使用.Net 2.0 2. 它使用的firebird data provider也是for 2.0 所以我決定另開一個專案, 並下載firebird data provider 3.0.2.0(最新)的版本, 並直接用firebird官網的範例程式來試看看。一開始也是連不上, 所以我把專案的target framework由4.0改成 2.0。 一跑, 程式報出firebird data provider所需要的.net framework版本太低, 我再由2.0改成3.0, 結果還是一樣, 改回4.0後, 才不再出現這個錯誤訊息。因此, 我可以推論, 這個firebird data provider是for .net framework 4.0使用的。這時, 再去看看firebird官網的下載網頁, 可以看到同樣一個3.0.2的data provider卻有如此多個不同下載連結, 想來是有不同用途(例如: for .net 2.0一包, for .net 4.0一包, 兩個都有的一包)才會如此! 那不是一開始使用.Net 4.0就是正確的嗎? 為什麼還是連不上呢? 所以才會先去用Flamerobin連連看, 結果是可以正常連的。那就只是連線字串的問題了, 此時想到把範例資料庫檔案移到比較好記的地方(路徑比較簡單g:\data\employee.fdb), 因為原來連線的範例資料庫放在很深的路徑(C:\Program Files\Firebird\Firebird_2_5\examples\empbuild\employee.fdb), 光是確認檔名路徑沒打錯, 就很累了。沒想到這樣一改, 就連上了。 那麼...