2013年12月19日 星期四

win7安裝XAMPP免安裝版心得

目的:把程式放到雲端資料夾上,使得重灌電腦或換電腦時程式還會在,且不用另外設定httpd.conf、資料庫(只需要設hosts)

http://www.apachefriends.org/zh_tw/xampp-windows.html
下載 XAMPP portable lite 1.8.3 PHP 5.5
解壓縮後直接執行xampp_start.exe或使用xampp-control.exe 開啟控制面板

啟動apache時出現以下錯誤:
16:50:25  [Apache]  Status change detected: running
16:50:26  [Apache]  Status change detected: stopped
16:50:26  [Apache]  Error: Apache shutdown unexpectedly.
16:50:26  [Apache]  This may be due to a blocked port, missing dependencies,
16:50:26  [Apache]  improper privileges, a crash, or a shutdown by another method.
16:50:26  [Apache]  Press the Logs button to view error logs and check
16:50:26  [Apache]  the Windows Event Viewer for more clues
16:50:26  [Apache]  If you need more help, copy and post this
16:50:26  [Apache]  entire log window on the forums

http://stackoverflow.com/questions/18300377/xampp-apache-error-apache-shutdown-unexpectedly
httpd.conf和httpd-ssl.conf 基本上已經和上面回答的一樣,設定為80和443 port了
如果之前有開啟過ASP.NET的IIS服務的話
去 "開始" -> "控制台" -> "程式和功能" -> "開啟或關閉Windows功能" -> 將"Internet Information Services"取消

Skype要把 80和443 替代port關掉

不能把他放在"Google 雲端硬碟",因為會有路徑的錯誤
C:\Users\user\Google 雲端硬碟\xampp\apache\bin>httpd.exe
httpd.exe: Syntax error on line 37 of C:/Users/user/Google \xe9\x9b\xb2\xe7\xab\
xaf\xe7\xa1\xac\xe7\xa2\x9f/xampp/apache/conf/httpd.conf: ServerRoot must be a v
alid directory

解法:放Dropbox

在控制面板中點右邊的Shell ,可以開啟XAMPP專屬的Windows console,在這邊可以用perl和mysql指令

http://www.mysitetestyes.altervista.org/work-with-xampp-on-dropbox/
Install xampp in a directory in a primary level (ex. c:\xampp). Be careful not to install xampp with the installer but copy the files from the zipped archive.
因為在c槽下還需要放置xampp,所以還是使用appserv的方案做,用vhost指到雲端硬碟的程式,並手動備份httpd.conf, vhost.conf, hosts, MySQL資料

Apache 2 如何排除 client denied by server configuration 問題 ? ( 由error_log看 )
http://www.arthurtoday.com/2011/07/apache-2-client-denied-by-server.html#.UsPiitIW214
<VirtualHost *:80>
    DocumentRoot "c:/arthurtoday"
    ...
    ...
    <Directory "c:/arthurtoday">
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

vhost的 ServerName 請勿設 xx.localhost ,否則內網公司其他人連你的 xx.localhost 會連不上: Err_Connection_Refused (即便打開port和防火牆,只有192.168.1.xx連得上,但vhost連不上)。可以設成 bo.example.com 。這邊與打開skype無關,因為8.36.0.52 的skype已經沒有advanced options了

2013年12月16日 星期一

HTML 常見問題

避免&ltb;  &rtb; &#91;  &#93;  &lt;  &gt;
在瀏覽器中自動被轉成特定符號

解法1:
寫在js函數註解裡面
var getHtml = function(){
 /* >>>{{$value}}<<<*/
}

alert( getHtml.toString().match(/>>>([\s\S]+)<<</)[1] )
缺點:
{{$value}}內容含有 */ 時,js會出錯

解法2:
寫在html註解裡面
<div id="textarea_value">
  <!--{{$value}}-->
</div>
$("#textarea").val($("#textarea_value").html().match(/<!--([\s\S]+)-->/)[1]);
因為該頁面後端有檔<和>的符號,所以暫時無{{$value}}內容含有HTML註解的問題



2013年12月12日 星期四

區網設定

Router:D-Link DI-604 和
無線AP:ASUS RT-N10E

如果區網孔直接接電腦的網路要設固定ip,則router接上去的router也要設ip
重新載入
裝router ,router ip 192.168.0.1
帳號admin,密碼空的或admin
用迴紋針搓小孔reset
點管理頁面左邊的DHCP讓他變成"靜態 DHCP 用戶列表" => 以後就固定了
重新刷頁讓router 自動去抓然後設ip
抓不到用寫網卡卡號進去和ip進去直接設定

Dell的網卡: 00-14-22-5A-2A-DD

ASUS-F81se
打開無線網路功能
http://vip.asus.com/forum/view.aspx?board_id=3&model=F81Se&id=20090831103558031&page=1&SLanguage=zh-tw
在筆電的前面(SD卡插槽旁邊), 有一個無線網路及藍牙的開關. 要確定將這個開關放在 ON 的位置. 按 Fn+F2 就可以打開或關閉無線網路及藍牙.

因為要裝vpn所以敗了RT-N12HP
http://benjr.tw/11765 (從Windows Client開始做)
安裝:
下載 OpenVPN GUI 軟體,OpenVPN 的網站可以下載到 http://openvpn.se/files/install_packages/ 目前最新的是 openvpn-2.0.9-gui-1.0.3-install.exe .
連阿山的vpn
將xxx.tar.gz解壓縮到 C:\Program Files\OpenVPN\config\nuface_client1
xxx.ovpn改名  nuface_client1.ovpn
內容要改的地方:
cert xxx.crt
key xxx.key
proto tcp => proto udp
最後加入這兩行 ( http://mugurel.sumanariu.ro/windows/vista-and-win-7-openvpn-route-problem/ ,錯誤訊息: ROUTE: route addition failed using CreateIpForwardEntry: 有一些引數不正確。  )
route-method exe
route-delay 2
最後點右下角圖示connect
檢查有無成功:去 http://www.whatismyip.com.tw/ 看ip是不是175.182.64.xx
測速:
去 http://www.speedtest.net/ ,我家hinet adsl 8m 測出來是http://www.speedtest.net/my-result/3311260878

2013年12月9日 星期一

perl的debugger模式

湯姆大叔:The service I ran was in perl -d and I traced through some of the requests to see where they were blowing up.

$ man perldebug
( also see $ man perldebtut )

$ perl -d xxx.pl
進入  DB<1>
n =>執行下一行
p print "test"; =>執行一行程式,亦可在此改變變數
h => 指令說明書
R =>重頭開始

Max: 可以看變數執行的過程變化跟設定中斷點跟測試等等
Max: 不過 perl -d 也只適合單機的程式
Max: 網頁的話要加工
Max: 不實用

Harry的debugger模式重點:
List/search source lines:               Control script execution:
  l [ln|sub]  List source code            T           Stack trace
  - or .      List previous/current line  s [expr]    Single step [in expr]
  v [line]    View around line            n [expr]    Next, steps over subs
  f filename  View source in file         <CR/Enter>  Repeat last n or s
  /pattern/ ?patt?   Search forw/backw    r           Return from subroutine
  M           Show module versions        c [ln|sub]  Continue until position
Debugger controls:                        L           List break/watch/actions
  o [...]     Set debugger options        t [expr]    Toggle trace [trace expr]
  <[<]|{[{]|>[>] [cmd] Do pre/post-prompt b [ln|event|sub] [cnd] Set breakpoint
  ! [N|pat]   Redo a previous command     B ln|*      Delete a/all breakpoints
  H [-num]    Display last num commands   a [ln] cmd  Do cmd before line
  = [a val]   Define/list an alias        A ln|*      Delete a/all actions
  h [db_cmd]  Get help on command         w expr      Add a watch expression
  h h         Complete help page          W expr|*    Delete a/all watch exprs
  |[|]db_cmd  Send output to pager        ![!] syscmd Run cmd in a subprocess
  q or ^D     Quit                        R           Attempt a restart
Data Examination:     expr     Execute perl code, also see: s,n,t expr
  x|m expr       Evals expr in list context, dumps the result or lists methods.
  p expr         Print expression (uses script's current package).
  S [[!]pat]     List subroutine names [not] matching pattern
  V [Pk [Vars]]  List Variables in Package.  Vars can be ~pattern or !pattern.
  X [Vars]       Same as "V current_package [Vars]".  i class inheritance tree.
  y [n [Vars]]   List lexicals in higher scope <n>.  Vars same as V.
  e     Display thread id     E Display all thread ids.
For more help, type h cmd_letter, or run man perldebug for all docs.






2013年12月6日 星期五

apache 與 nginx

http://ithelp.ithome.com.tw/question/10122157?tag=ithome.nq

Rellik: 之前跟你談到 nginx ..
Rellik: 大概要從 apache1 介紹起才會比較清楚..
Rellik: 傳統的 apache 1.x 是走的是 multi process 模型
Rellik: 意思是一個連線,就 fork 一個獨立的 proces 處理 ..
Rellik: 這樣的模型程式寫起來沒啥問題,也不容易出錯, 但可想而知效率不好
Rellik: 因為 fork 一個 process , fork 需要成本, process 也需要記憶體
Rellik: 雖然 linux 核心後來大幅優化 fork 的成本,使其和 thread 差不多,但有人實測,還是有差 ...
Rellik: 而且他無法面對海量的連線,比如同時 10000 個連線 <---- 要 10000 個 process
Rellik: 所以後來演變成 multi thread . . .
Rellik: thread 和 fork 最大的差別在於 thread 其實是同一個 process,但是每個 thread 可以用不同的 CPU 資源,因此 multi thread 優勢在於比較省記憶體
Rellik: 但 multi thread 由於會共用資源... 所以程式一但大起來很很頭痛,程式設計師必須處理多個 thread 同時存取同一份資源的問題
Rellik: 然後一樣, thread 有其數量限制,所以他依然不能處理 10000 這種海量同時連線 ...
Rellik: 所以後來就出現 event based 的 function ... 也就是 select / poll / epoll
Rellik: 前兩者算是 POSIX 標準,特別是 select 連 windows 都可以用 ...
Rellik: 但是前兩者各有限制,也是吃不了海量資料 = =
Rellik: 所以後來各種 os 乾脆自己在 kernel space 做自己的 event based function
Rellik: 像是 freebsd 有 kqueue , linux 有 epoll, windows 有 iocp
Rellik: 但程式寫起來不好寫,因為他是 event based ..
Rellik: nginx 和 light 就是基於 kernel event base 下開發的 http server
Rellik: apache 在 2 版開始也開始支援 event base
Rellik: 但是..效果不太好
Rellik: 面對 100k 海量連線的話可能就會死翹翹

2013年12月3日 星期二

linux C心得

linux版本 centos 6
如何開始?
http://linux.vbird.org/linux_basic/0520source_code_and_tarball.php#simple_ex_hello

正在試:
http://www.cyberciti.biz/tips/linux-unix-connect-mysql-c-api-program.html
http://www.cyberciti.biz/files/mysql-c-api.c.txt
要改寫成 #include <mysql/mysql.h>

執行a.out, 出現錯誤:
mytable.c:6:19: 錯誤:mysql.h:沒有此一檔案或目錄
mytable.c: In function 「main」:
mytable.c:10: 錯誤:「MYSQL」 未宣告 (在此函式內第一次使用)
mytable.c:10: 錯誤:(即使在一個函式內多次出現,每個未宣告的識別碼在其
mytable.c:10: 錯誤:所在的函式內只報告一次。)
mytable.c:10: 錯誤:「conn」 未宣告 (在此函式內第一次使用)
mytable.c:11: 錯誤:「MYSQL_RES」 未宣告 (在此函式內第一次使用)
mytable.c:11: 錯誤:「res」 未宣告 (在此函式內第一次使用)
mytable.c:12: 錯誤:「MYSQL_ROW」 未宣告 (在此函式內第一次使用)
mytable.c:12: 錯誤:expected 「;」 before 「row」
mytable.c:25: 警告:隱含宣告與內建函式 「exit」 不相容
mytable.c:31: 警告:隱含宣告與內建函式 「exit」 不相容
mytable.c:38: 錯誤:「row」 未宣告 (在此函式內第一次使用)


http://stackoverflow.com/questions/14604228/mysql-h-file-cant-be-found
The mysql.h file from the libmysqlclient-dev Ubuntu package is located at /usr/include/mysql/mysql.h.

在centos安裝libmysqlclient-dev方法
https://www.centos.org/forums/viewtopic.php?t=29620
# yum list \*mysql\* | grep dev

# yum install mysql-devel.i686
安裝成功 -
# sudo yum install mysql-server mysql mysql-dev
...
Setting up Install Process
Package mysql-server-5.1.71-1.el6.i686 already installed and latest version
Package mysql-5.1.71-1.el6.i686 already installed and latest version
Package mysql-devel-5.1.71-1.el6.i686 already installed and latest version
Nothing to do
( 有裝成功有這隻檔案 /usr/include/mysql/mysql.h )

錯誤:
# gcc mytable.c
/tmp/ccaOFT1h.o: In function `main':
mytable.c:(.text+0x3d): undefined reference to `mysql_init'
mytable.c:(.text+0x91): undefined reference to `mysql_real_connect'
mytable.c:(.text+0xa1): undefined reference to `mysql_error'
mytable.c:(.text+0xe8): undefined reference to `mysql_query'
mytable.c:(.text+0xf8): undefined reference to `mysql_error'
mytable.c:(.text+0x137): undefined reference to `mysql_use_result'
mytable.c:(.text+0x16c): undefined reference to `mysql_fetch_row'
mytable.c:(.text+0x183): undefined reference to `mysql_free_result'
mytable.c:(.text+0x18f): undefined reference to `mysql_close'
collect2: ld 回傳 1
http://lyxxiang.blog.163.com/blog/static/22846192011615105821150/
解法:
# gcc -o mytable $(mysql_config --cflags) mytable.c $(mysql_config --libs)

錯誤:
mytable.c:27: 警告:隱含宣告與內建函式 「exit」 不相容
解法:
加入 #include <stdlib.h>

要怎麼傳入參數? ( # mytable note add "message" )
http://www.gnu.org/savannah-checkouts/gnu/libc/manual/html_node/Example-of-Getopt.html#Example-of-Getopt
或用for
http://stackoverflow.com/questions/498320/pass-arguments-into-c-program-from-command-line
int main(int argc, char *argv[])
{
    int i = 0;
    for (i = 0; i < argc; i++) {
        printf("argv[%d] = %s\n", i, argv[i]);
    }
    return 0;
}

美化縮排:
使用vim  gg=G

字串連結
http://stackoverflow.com/questions/308695/c-string-concatenation
char * sql = "INSERT INTO `mytable`.`note` (\
`message` ,\
)\
VALUES (\
'%s'
);";
char sql_buf[256];
snprintf(sql_buf, sizeof sql_buf, sql, message);
printf("sql_buf:%s\n", sql_buf);

字串比較:
http://www.programmingsimplified.com/c-program-compare-two-strings
if( strcmp(a,b) == 0 )
   printf("Entered strings are equal.\n");
else
   printf("Entered strings are not equal.\n");

寫Makefile:
http://kevincrazy.pixnet.net/blog/post/29780477-makefile%E7%B0%A1%E6%98%93%E6%95%99%E5%AD%B8...
# it is a test
all:hello.c
gcc hello.c -o hello
clean:
rm -f hello

錯誤:
Makefile:4: *** missing separator.  Stop.
http://www.wretch.cc/blog/awaysu/24890447
解法: 縮排使用tab而非空白

Makefile裡面錯誤再現
# make
gcc -o mytable  mytable.c
/tmp/ccxINA1O.o: In function `main':
mytable.c:(.text+0x85): undefined reference to `mysql_init'
原因:裡面看不懂 $(mysql_config --cflags) 和 $(mysql_config --libs)
解法:
在命令列中輸入mysql_config --cflags 和 mysql_config --libs 把值印出來
直接寫死在Makefile裡面

讀取conf檔
http://jax-work-archive.blogspot.tw/2011/03/c_28.html
錯誤:
test_config.c:13: 錯誤:expected 「=」, 「,」, 「;」, 「asm」 or 「__attribute__」 before 「readConfig」
解法:
http://stackoverflow.com/questions/13274230/how-to-work-with-boolean-function-in-c
新增 #include <stdbool.h>
bool readConfig()要寫在main()前面

將char * 轉化為數字
http://stackoverflow.com/questions/9610895/how-do-you-cast-a-char-to-an-int-or-a-double-in-c
int i = atoi(c);
/* int    note_id = atoi(argv[3]); */

C語言物件寫法
http://www.bolthole.com/OO-C-programming.html
錯誤:
FooOBJ.c: In function 「newFooOBJ」:
FooOBJ.c:20:21: 警告: 隱含宣告與內建函式 「malloc」 不相容 [enabled by default]
FooOBJ.c:21:2: 警告: 隱含宣告與內建函式 「bzero」 不相容 [enabled by default]
FooOBJ.c: In function 「deleteFooOBJ」:
FooOBJ.c:53:2: 警告: 隱含宣告與內建函式 「free」 不相容 [enabled by default]
解法:
bzero => 新增 #include <string.h>
malloc、free => 新增 #include <malloc.h>
編譯:
$ gcc test.c FooOBJ.c
執行:
$ ./a.out

透過malloc()所分配出來的空間必須由使用者呼叫free()才能歸還給系統。初學者常犯的錯誤之一,就是忘了用free()歸還空間,這會造成程式佔用太多記憶體,此現象稱為memory leakage。相反的,如果空間已用free()歸還了,卻還試著去使用那塊記憶體,則會發生Segmentation Fault (core dumped)的錯誤。

如果將mysql的操作移到FooOBJ.c後,$(mysql_config --libs)要移到FooOBJ.c後面
gcc -o mytable $(mysql_config --cflags) mytable.c FooOBJ.c $(mysql_config --libs)

把struct當參數傳入function (類似以物件方式傳入函數中)
http://stackoverflow.com/questions/10370047/passing-struct-to-function
void addStudent(struct student person) {

}
struct相關用法:
http://programming.im.ncnu.edu.tw/Chapter13.htm
http://openhome.cc/Gossip/CGossip/StructABC.html

getopt
http://people.cs.nctu.edu.tw/~yslin/library/linuxc/main.htm
http://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html#Example-of-Getopt
傳入多個字串的參數
http://stackoverflow.com/questions/1973742/how-to-get-a-value-from-optarg
c = getopt(argc, argv, "i:p:") //一個參數後面就接一個冒號(:)

在ubuntu上安裝ansi c 的函數手冊(man)
http://superuser.com/questions/40609/how-to-install-man-pages-for-c-standard-library-functions-in-ubuntu
$ apt-get install manpages-dev manpages-posix-dev
問題:
$ man getopt
結果出現的是User Commands的文件
變成要使用 $ man --all getopt 一頁一頁看後面這兩種文件
Linux Programmer's Manual => getopt(3)
POSIX Programmer's Manual => getopt(3posix)
有方法直接看Linux Programmer's Manual裡面的getopt man page嗎?
答:
$ man 3 getopt
加-w可以找到該 manpage 的路徑
加-f列出清單

ubunut搜尋有哪些套件可以裝
http://www.techiecorner.com/320/how-to-use-apt-to-list-available-packages/
# this will list all packages available thru apt-get
$ apt-cache pkgnames

# this will only return you the relevant result
$ apt-cache search 'your search term here'

使用getopt_long 讀取參數
http://www.gnu.org/software/libc/manual/html_node/Getopt-Long-Option-Example.html

留言板參考:
http://yiyingloveart.blogspot.tw/2012/01/php.html


2013年12月2日 星期一

重灌心得

使用HD tune 測了舊硬碟發現有壞軌, 立碼買了SSD
使用SSD安裝win7出現錯誤=> 可能是記憶體有問題, 將兩條記憶體任意拆下來安裝 => 通過
來使用burnIn測試是哪一條記憶體有問題, 結果都沒問題
再使用兩條記憶體重裝一次 => 通過 ( 可當初SSD沒插好 )
將SSD放入原本筆電硬碟的外盒中->有避震功能
除了驅動,不用安裝華碩的應用軟體(ATK key除外)
裝好後安裝防毒, 小紅傘or 微軟免費防毒
安裝軟體:
chrome
LINE
新酷音(GOOGLE拼音)
google雲端硬碟桌機版
dropbox桌機板
把免安裝軟體放雲端上, 以減少下次重灌時安裝的軟體數

選用:
Daemon Tools Lite => 虛擬光碟掛載軟體(iso)

匯出 PuTTY 設定備份
http://www.phpini.com/linux/export-putty-setting-backup
每次重新安裝 Windows 後,其中一個必裝的軟件是 PuTTY,但每次也要將自己每一台主機加上去實在很麻煩,以下是匯出 PuTTY 設定備份的方法:
1. 按 "開始" -> "執行",然後輸入 "RegEdt32" 並按確定。
2. 移到 HKEY_CURRENT_USER -> Software -> SimonTatham (新電腦會沒這個目錄)
3. 選擇 SimonTatham 後按 "檔案" -> "匯出"。
4. 儲存好匯出的登錄檔。
5. 將登錄檔放到需要匯入設定的電腦上,雙擊後即匯入。

備份MTPuTTY 設定
http://ttyplus.com/multi-tabbed-putty/faq.html
Does the program save the configuration in the system registry?
No, it saves the configuration in mtputty.xml file.
MTPuTTY不將設定存在系統登陸檔中,存在mtputty.xml
Where mtputty.xml resides?
The default location is %User Profile%\Application Data\TTYPlus\mtputty.xml
If MTPuTTY runs in portable mode, mtputty.xml should be located in the program folder.
mtputty.xml 位置在 C:\Users\user\AppData\Roaming\TTYPlus

Windows右下角時間改成24小時制
http://www.shijyuhaowu.com/2010/03/windows7clocksetting20100323.html
控制台 => 時鐘、語言和區域 => 更變日期、時間或數字格式 => 
簡短時間 改成 HH:mm
完整時間 改成 HH::mm::ss
如圖

備份sublime(含Package、Snippet)
直接將 C:\Program Files (x86)\Sublime Text 3 和 C:\Users\Administrator\AppData\Local\Sublime Text 3 和 C:\Users\Administrator\AppData\Roaming\Sublime Text 3 複製到新電腦相對應的位置
然後新電腦打開Sublime => Project => Open recent => Clear Items
否則在新電腦抓不到對應的 xxx.sublime-project 會lag很久
用這個方法備份的sublime可以執行、更新和安裝package

免安裝版的sublime/Data 下放了 Cache、Index、Installed Packages、Lib、Local、Packages(
內含:
Packages/User/Preferences.sublime-settings(設置)、Packages/User/Default (Windows).sublime-keymap(熱鍵)、Packages/User/Xdebug.sublime-settings(Xdebug設置)
 )
而安裝版本則將 Installed Packages、Lib、Local、Packages 放在 C:\Users\user\AppData\Roaming\Sublime Text 3
Cache、Index 放在C:\Users\user\AppData\Local\Sublime Text 3
推薦一律使用installer安裝sublime,使用一種方法備份,避免免安裝版本sublime升級不了問題

斷網開發
只能使用面安裝版本(portable)的sublime + git版本控制
新下載packages時先commit再下載,看sublime資料夾因為下載packages多了哪些東西
然後再手動複製多的檔案回內網開發機,以安裝Laravel Blade Highlighter為例需複製的檔案是:
Data/Packages/User/Package Control.sublime-settings  // 沒複製會不能用
Data/Installed Packages/Laravel Blade Highlighter.sublime-package


嘗試解除安裝"xxx"時發生錯誤,它可能已經被解除安裝了 不能移除安裝
控制台 => 程式和功能( 解除安裝程式 ) =>出現 嘗試解除安裝"xxx"時發生錯誤,它可能已經被解除安裝了 不能移除安裝
而且 Lync 2016(商務用Skype)會閃退
解法:
Windows Update 把重要的更新裝一裝,重開

chrome備份OneTab頁籤
XMAPP 的httpd.conf, vhost.conf, php.ini(若XAMPP安裝在D槽,重灌免重裝XAMPP)
備份hosts


註:更多重灌記錄寫在evernote上(提醒我自己)