Recent Posts

熟悉的味道 CakePHP

熟悉的味道 CakePHP

最近真的是忙翻了,要做點什麼之前似乎都要先來個毀滅性的衝擊? 誤打誤撞接了睽違四年的PHP 

[linux] fork() 基本概念 和他的變數相關。

[linux] fork() 基本概念 和他的變數相關。

常常看到fork一詞,在OS裡面算是相當重要的基本概念。 一直沒時間去深究一下,就剛好藉此 

[linux] 解壓縮指令 備忘 tar.gz / tar.bz2 / tar / tbz2

[linux] 解壓縮指令 備忘 tar.gz / tar.bz2 / tar / tbz2

這如果不是天天用我真的記不太住………..

//////////////////解壓縮

.tar.gz
tar -zxvf filename.tar.gz

.tar.bz2
tar -jxvf filename.tar.bz2

.tar
tar -xvf filename.tar

//////////////////壓縮

.tar
tar -cvf filename.tar /folder

.tar.gz
tar -zcvf filename.tar.gz /folder

.tar.bz2
tar -jcvf filename.tar.bz2 /folder

然後為什麼要這麼蝦的有兩百多萬個壓縮打包方式我也不懂-__-
先打包再壓縮,先壓縮再打包,這跟中和有中和路永和有中和路中和有永和路一樣讓我感到很困惑XD
怎麼不統一一下!!!!
XD

[C] strtok 使用心得

[C] strtok 使用心得

這傢伙實在有點酷,用一般的常理去推測是不行的XD 當然有可能是我太憨,但是這個好用的東西是 

[C] fget 的換行小眉角

[C] fget 的換行小眉角

fget 其實很方便,但是如果真的用他來讀取一個檔案, 要小心他會在結尾處自己加上一個換行 

[C] const 和 pointer 使用的大亂鬥

[C] const 和 pointer 使用的大亂鬥

最近在看C的書,發現幾個問題很有趣,網路上文章眾說紛紜,
最後還是自己寫一個程式來測試最準確囉~

果真有很 “意外” 的收穫 🙂

const 這個修飾詞沒有很明確的定義,就像網路上的文章大多也不敢對他定義。
因為他的用法有點詭譎,只能是一種象徵的意味…

用我的理解他就像是一個限制器,
當你把他加在你的變數前面以後,這個變數就不能再更改了。
用const把一個變數定義為一個”常數” “不能更改的數值”

然後有趣拉,面試最愛考的pointer 和 const完美結合,
變成複雜到不行的大亂鬥。

有這三個情況…實在很難用言語形容他們,只好寫程式實驗驗證一下…
1.const int *ptr
這代表 ptr 是一個const int型態的指標,所以他的型態是cosnt int,代表這個指標指到的東西不能改了。
你不能(*ptr)++,也不能*ptr = 10;

2.int *const ptr
這整個指標是一個const ptr,我試著把他理解成int *(const ptr) 所以就像是這個指標不能改=這指標不能移動,
你不能ptr++ 也不能ptr = ?

3.int const *ptr
這最怪了,我以為他跟2應該是一樣的,結果他竟然是跟1一樣!!!
所以這也是代表指標指到的東西不能改,
不能(*ptr)++,也不能*ptr = 10;

#include <stdio.h>

int main(void){	
	int var = 10;
	//int * const ptr = &var; 
	//int const * ptr = &var;
	const int *ptr = &var;
	printf("wellytest begin var = %d\n", var);
	printf("wellytest begin var = %d\n", *ptr);
	//*ptr = 12; //改裡面的值
	//(*ptr)++; //改裡面的值
	ptr++; //改整個ptr的address
	printf("wellytest begin var = %d\n", var);
	printf("wellytest begin var = %d\n", *ptr);
	return 0;
}

為了追求更準確的答案,只用GCC來build
gcc -o testreult wellytest.c

這真的是很難…Orzzzz 不知道幾天後大概就又忘了吧-___-“

Gmail 和 iphone(ipad) 聯絡人 雙向同步

Gmail 和 iphone(ipad) 聯絡人 雙向同步

之前有一種舊的方式可以同步Gmail聯絡人跟iphone 但是好像只是單向的,也就是說只能 

[Linux : Ubuntu] 修改network interface的識別名稱(eth0, eth1,….. etc)

[Linux : Ubuntu] 修改network interface的識別名稱(eth0, eth1,….. etc)

有時候Linux很聰明又很不聰明。 他似乎很努力想要讓你輕鬆的使用,所以自動幫你把driv 

[JavaScript] 使用Regular Expression 過濾 空白/特殊字元 的字串

[JavaScript] 使用Regular Expression 過濾 空白/特殊字元 的字串

常常在網頁上要對字串做一些過濾處理,
比較困難的可能會牽扯到一些特殊字元!@#$%^^&*()這些類似的討厭東西,
大部分都是使用 .replace這個function來達成

function Trim(InputString)
{
  //去除字串左右兩邊的空白
  return InputString.replace(/^\s+|\s+$/g, "");

  //使用方式為replace(要被換掉的字串,要取代的字串)
  //這裡面我們搭配使用了Regular Expression的方式 /搜尋的字串/g 來搜尋"要被換掉的字串"
}

Regular Expression的部分 : /^\s+|\s+$/g
所以這邊我們要搜尋字串的條件為 ^,\s,+,|,\s,+,$
我們拆開來看
1.^
寫在 pattern 第一個位置時 : 表示其後一符號必須出現在字串開頭的位置。
寫在 pattern 中間位置時 : 則為否定之意,表示字串中不可有 ^ 之後一符號的內容

2.\s 則代表空白的意思(space)

3.+
表示字串中  1 到無數個其前一符號的內容。
在這邊意思則為字串中有一個或以上的 “空白” 符號就是符合敘述了,因為前一符號為\s代表空白。

4.|
這就和我們一般的理解比較像一點,是指符合在此符號左邊或右邊的敘述都算是符合。”或”的意思。
在這邊代表符合前面條件 ^\s+ 或者是 後面條件 \s+$ 都算是符合整個敘述。

5.$
寫在 pattern 最後一個位置時,表示其 前一符號必須出現在字串尾端的位置。寫在 pattern 中時無特別意義。
\s+和前面都相同
差異點是 $ 符號,代表這次我們要搜尋的條件是接在字串尾端的空白字元。

所以合起來看就是: 符合 開頭的一個或N個空白字元的字串在尾端的一個或N個含有空白字元 的字串找出來取代成replace後面的 “”

/g意思我沒有查得很清楚,大概就是一個Global replacement的意思。 固定用法。

所以以下還有幾個範例

  InputString.replace(/^\s+/g,"").replace(/\s$+/g,"");
  //代表去除左邊以及右邊的空白,和我們的應用相同,我們用"|"來搜尋同時符合這兩個條件的字串
  //這樣代表先把其中一個取代掉,在取代另外一個。
  InputString.replace(/^\s+/g,"");
  //分開來看就是這樣 刪除開頭空白
  InputString.replace(/\s$+/g,"");
  //刪除結尾空白

這超容易忘記的
還有好多規則,以上資料由下面這兩個網站整理而來
http://my.oschina.net/liuhui1990/blog/51912
http://blog.roodo.com/rocksaying/archives/2670695.html
尤其是第二個的詳細常用reg exp解釋 很受用:)

Appserv 如何回復 wordpress + mySQL + host name 設定

Appserv 如何回復 wordpress + mySQL + host name 設定

前陣子家裡電腦怪怪的,索性就把他重灌了。 … …. …