發表文章

flac格式轉換至mp3

1. sudo apt-get install cuetools shntool flac mac soundconverter 2. ape to flac (according to aidanjm blog):   2.1 break ape to flacs: cuebreakpoints sample.cue | shnsplit -o flac sample.flac   2.2 copy tags: cuetag sample.cue split-track*.flac 3. Use soundconverter to get from flac to mp3

Object Modifiers

圖片
利用object modifiers add modifier->boolean以difference取差集做出房子的窗戶,其他部份,例如屋頂與地板則是利用之前學的技巧,最後組合在一起。

【轉載】Ubuntu 12.04 修改英文界面預設中文字體。

來源出處: http://single9.net/2012/11/ubuntu-12-04-%E4%BF%AE%E6%94%B9%E8%8B%B1%E6%96%87%E7%95%8C%E9%9D%A2%E9%A0%90%E8%A8%AD%E4%B8%AD%E6%96%87%E5%AD%97%E9%AB%94%E3%80%82/ $ sudo ln -s /etc/fonts/conf .avail /69-language-selector-zh-tw .conf /etc/fonts/conf .d/ 然後修改一個設定檔案 $ sudo gedit /etc/fonts/conf .d /65-nonlatin .conf 找到 sans-serif 在<prefer>後加上新的一行 <family>WenQuanYi Micro Hei</family> 再找到 monospace 一樣在<prefer>後加上新的一行 <family>WenQuanYi Micro Hei Mono</family> 最後執行 $ sudo fc-cache - v 清掉快取,到這邊已經大功告成,你可以嘗試把這個瀏覽器關掉,然後在一次打開,你會發現中文果然變得養眼多了。

【轉載】 GRUB_DEFAULT

來源: http://wiki.ubuntu-tw.org/index.php?title=GRUB_2_%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97#.2Fetc.2Fdefault.2Fgrub_2 GRUB_DEFAULT 設定預設選單選項。選項可以是數字或是「saved」。         GRUB_DEFAULT=0 以選單位置來設定預設選單選項。如同 GRUB,在 grub.cfg 中的第一筆「選單選項」為 0,第二筆為 1,餘類推。         GRUB_DEFAULT=saved 設定預設選項為上一次選擇的項目。若開機過程中顯示選單,則上一次選擇的選項將會以高亮度表示。若沒有進行任何動作,此選項將會在逾時時間到達或是選單設為隱藏時用來開機。         grub-set-default 當參數設定為 saved 時將開啟。使用者可以使用此指令快速地改變預設作業系統/核心。         格式為 sudo grub-set-default X,此處的 X 代表選單選項的位置(第一筆由 0 開始)或是確切的選項字串。例如:sudo grub-set-default 3 將使用選單選項位置,或是 sudo grub-set-default "Ubuntu, Linux 2.6.31-14-generic" 表示選單選項字串。         欲取得現存的選單選項選擇數字(由 0 開始)或是選單選項「字串」,執行 grep menuentry /boot/grub/grub.cfg         GRUB_DEFAULT="xxxx" 一個確切的選單選項,包含引號,也可使用。在此例中,選單中的位置並不重要。例如:         GRUB_DEFAULT="Ubuntu, Linux 2.6.31-14-gene...

【轉載】Data structure的對齊(alignment)

來源 變數的宣告,會配置其所需的記憶體。每種變數所需的大小不一樣,比如說char是1 bytes,int 是4 bytes,double則是8 bytes。如果是這樣,那這些大小在記憶體中是如何擺放呢?是直覺的一個接一個放嗎?其實不然。這牽扯到performance / efficiency的問題! 在32 bits的架構上,一次的資料存取也就是32 bits (4 bytes)。而這4 bytes 不是隨便從哪個點抓都可以,而是以4 bytes為單位,不管需要的是其中那個byte,就抓那4個bytes。比如說,抓第0,4,8 ,12....等,而不會是從3,7,9開始抓4個bytes。 這代表什麼呢?這表示了對齊 (alignment)的重要,因為會影響到幾次才抓的完。如果要抓一個4 bytes 的int,而這個int是從6擺到10,那就表示要抓兩次,自然效能較差了。因此,在struct的宣告是存在對齊這件事的。見下例: #include <stdio.h> int main(int argc, char* argv[]) {         struct align_test         {                 char x; //1 byte                 int y;  //4 bytes                 short int z;  //2bytes         };   ...

【轉載】動態空間分配

來源 動態空間分配 所謂動態空間分配指的是,在執行期間由程式向作業系統或程式庫要求後才分配的空間,這塊記憶體區域稱為Heap(堆積)。C語言的動態空間分配主要透過malloc和free兩函數來處理。這兩個函數的宣告如下: void *malloc(size_t size); void free(void *ptr); 透過malloc()所分配出來的空間必須由使用者呼叫free()才能歸還給系統。初學者常犯的錯誤之一,就是忘了用free()歸還空間,這會造成程 式佔用太多記憶體,此現象稱為memory leakage。相反的,如果空間已用free()歸還了,卻還試著去使用那塊記憶體,則會發生Segmentation Fault (core dumped)的錯誤。 Linked Stack typedef struct items { int data; struct items *link; } ITEM; typedef struct stack { ITEM *top; } STACK; void initStack(STACK *s) { s->top = NULL; } void pushStack(STACK *s, int y) { ITEM *x; // x will point to the new ITEM x = (ITEM *) malloc(sizeof(ITEM)); // allocate memory for the new ITEM x->data = y; // store data x->link = s->top; // x->link points to where s->top points s->top = x; // stack's top points to x } int popStack(STACK *s) { ITEM * x = s->top; int d = x->data; s->top = s->top->link; free(x); return d; } int stackIsEmpty(ST...

【轉載】用於struct的運算符號

來源 在如下的結構定義裡,next前面的*不可省略,否則就遞迴定義了,Compiler將無法決定struct list的大小。 struct list { int data; struct list *next; // a pointer to struct list }; struct list listOne, listTwo, listThree; listOne.next = &listTwo; listTwo.next = &listThree; // 以下想要由listOne設定到listThree的data listOne.next.next.data = 0; // 這不合法, 因為.的左邊必須是struct,不可以是pointer (*(*listOne.next).next).data = 0; // 這樣寫才對     你會發現上面的例子中, 如果struct裡面有pointer to struct, 而我們想要用該pointer來存取結構成員時, 就必須很小心的用*和()來表達。由於結構成員包括指向結構的指標(define a pointer to struct in a struct), 是很常見的事情, 這樣的(*(*listOne.next).next).data語法既難寫又難懂, 因此C語言定義了->運算符號。此符號的左邊是一個pointer to struct, 右邊則是該pointer指到的結構成員。->為第一優先權左結合, 因此 (*(*listOne.next).next).data = 0; //這樣寫才對 listOne.next->next->data = 0; // 這樣寫更漂亮