2011年5月23日 星期一

HTC Desire HD刷機筆記

刷機教學都是參考機器達人的網站 http://gfans.bryan.tw/
我只是把一些操作流程做一些筆記,因為機器達人的文章很多篇,需要整理出一個閱讀的順序。

我這篇文章是針對2.2.1版本的Desire HD。如果是2.2或2.3版本的Desire HD,則不適用以下的刷機筆記。

1. 因為我的Desire HD是已經透過原廠OTA升級到 2.2.1,所以要先降級到2.2,參考此網址的步驟。
http://gfans.bryan.tw/2011/04/11/1791
接著,手機就會安裝好ClockworkMod Recovery,接著把手機關機。
因為此時在手機內的sd卡已經是金卡,這張金卡就留著做紀念。接下來要換另一張sd卡進行以下步驟。
2. 先用讀卡機在SD卡的根目錄下,放置你下載好要刷的rom (zip file)。例如以下網址的Desire HD特調ROM GRI40-2版:
http://gfans.bryan.tw/2011/05/05/1894
3. 接著將手機開機進入ClockworkMod。進入ClockworkMod 的方式參考以下網址: 
http://gfans.bryan.tw/2010/12/10/1431

4. 在刷rom之前,可能要執行「wipe data/factory reset」。不然有些情況下,手機會無法正常開機。但是執行 「wipe data/factory reset」會導致使用者所有資料都清掉,也就是還原成原廠設定,所以執行這個指令前要三思。

5.刷機的方式是選擇「install zip from sdcard」,接著選擇放在sd卡的rom檔。

6. 接下來執行「reboot system now 」 ,第一次開機可能會有點久,這是正常現象。

以上就是刷rom流程。接下來說明,如果要刷其他rom,如何備份目前自己的rom以及資料:
1. 透過ClockworkMod recovery。
備份請參考這篇: http://gfans.bryan.tw/2010/12/15/1436 (請不要參考這個網址進行還原,這個網址沒有提供一口氣還原的方法)
一口氣還原請參考這篇: http://gfans.bryan.tw/2011/04/12/1841
2. 透過Titanium Backup
備份教學請參考 http://gfans.bryan.tw/2011/01/03/1522
值得注意的是, Titanium Backup的免費版,在還原的時候,必須針對一個app就要按一次按鈕,操作並不是很方便。如果有很多app要還原,那就要按很多次按鈕。


以下是一些重要的網址:
1. ClockworkMod Recovery 的網頁
http://forum.xda-developers.com/showthread.php?t=839640
http://www.androidrevolution.nl/ARHD/tinyindex.php?dir=ClockWorkMod%2FEXT4+Versions%2Frecovery-clockwork-3.2.0.0-EXT4-ace%2F

2. 將手機內存改成EXT3或EXT4的格式
http://forum.xda-developers.com/showthread.php?t=868720
http://gfans.bryan.tw/2011/06/08/1947

3. 據說用ROM manager可以更新ClockworkMod Recovery的版本,雖然我沒試過
https://market.android.com/details?id=com.koushikdutta.rommanager

4. 如果刷的rom沒有中文語系,可以選擇使用MoreLocale軟體設定成中文,雖然我沒試過
https://market.android.com/details?id=jp.co.c_lis.ccl.morelocale

以下據說是還原成原廠設定的作法(變成s-on),雖然我沒測試過:
A.先把ClockWorkMod 3.x.x.x版 換成 2.5.1.3版
a.去抓recovery v2.5.1.3.img for DHD專用檔~
b.請辜狗recovery-clockwork-2.5.1.3-ace 就找的到了!
c.解壓縮後把.img檔放入android-sdk-windows\tools資料夾內,進入HBOOT~連接USB~
e.進入WINDOWS命令字元~fastboot flash recovery XXXXXXX.img(XXXXX為所抓下來的檔名)
d.RECOVERY就會重刷~~不管刷哪一版都可以用這樣刷~只要有.img檔就ok嚕!

B.然後...手動4F4W

C.接下來還原原廠備份(含raido)

D.還原後還要把s-off 改成 S-ON
http://gfans.bryan.tw/2010/12/01/1379

E.解安裝VISIONary+時,請一併移除「授權程式」。

這個網址有另一個教學還原成原廠s-on,雖然我也沒試過   http://walker-a.com/archives/958

查SCI EI paper 與impact factor ranking factor, citation

這個網站可以查sci paper
http://admin-apps.isiknowledge.com/JCR/JCR?RQ=HOME  (這個網站只有impact factor)


以下網站可以查到EI paper:
http://www.engineeringvillage2.org/controller/servlet/Controller?CID=quickSearch&database=1  (進入網站後,點選右邊的"Source title",接著進行search)


ranking factor的查詢方法如下:
http://www.lib.cyut.edu.tw/service/teacher/download/jcr%20web.pdf

Ranking factor算法:N/M
N為期刊在所屬研究領域之Impact Factor排序名次;M為該期刊所屬研究領域之總期刊數。

基本上來說,ranking factor就是在某個領域的journal中的impact factor排名的百分比。

還有另一種查詢ranking factor的方法,就是在http://admin-apps.isiknowledge.com/JCR/JCR?RQ=HOME 網站查詢到journal後,在journal Information的頁面,點選Journal Ranking的按鈕 (此按鈕在Journal Rank in Categories文字的旁邊),就可以看到此journal在各種領域的impact factor排名。

查詢論文的citation數量:
http://apps.isiknowledge.com/

rainlendar lite與google calendar 日曆(行事曆)同步

今天花一個早上研究如何同步日曆
主要的步驟如這個網址所寫:
http://plko214.pixnet.net/blog/post/23535572
不過我在gcal-daemon.cfg有一點設定不太一樣:
file.ical.path=C\:/Users/rhliou/.rainlendar2/Default.ics
我在執行 service-install.bat遇到了一個錯誤,錯誤的原因應該是系統權限不足。
如果在win7按右鍵選已系統管理者身分執行,有會遇到另一個錯誤。
我的解決方法事先用系統管理者權限開啟命令提示字元,接著再去執行 service-install.bat
接下來每十五分鐘就會同步一次。不需要手動執行sync-now.bat。也不需要將sync-now.bat放到Windows內的”排定的工作”
另外rainlendar有辦法自動偵測是否有更新的行事曆,請看以下網址:
http://blog.dunclick.com/?p=1120
注 意:經過我的實驗,如果在 rainlendar新增一個會重複的事件,這個事件無法同步到google calendar 。除此之外,這個事件會莫名其妙被刪除。這是gcaldaemon的bug,而且這個bug已經存在好幾年了。好像gcaldaemon的作者都沒去解決 這個bug。如果要增加一個重複的事件,要從google calendar增加,這樣rainlendar 就會自動被同步。

Viewsonic viewpad 10s 設定Android Market

這台機型本身沒有提供flash跟android market,要自己去安裝。

以下是安裝步驟:
1. 裝上microSD卡
2. 點選程式集中的AppDownload -> Android Forum -> 點選第三項App Store http://www.badongo.com/file/24791179 ->下載檔案(是一個zip檔,不用解壓縮)
3. 點選程式集中的設定->軟體工具->軟體更新->移動到/sdcard/download目錄->點選market_update0.zip。接下來會重開機,接著就會安裝好Android Market
4.執行Android Market,如果加入現有帳號或新增帳號遇到錯誤(顯示"無法建立穩定的資料連線通路,伺服器連線失敗"訊息),則執行以下步驟(以下是旁門左道的方法):
5. 下載youtube程式 (http://www.freewarelovers.com/android/app/youtube),並且安裝
6.  如果沒有youtube帳號(ex: xxx@youtube.com)和Google帳號(ex: yyy@gmail.com),要先去申請。
7.  在youtube網頁,將申請的youtube帳號與Google帳號進行連結,也就是將xxx@youtube.com對應到yyy@gmail.com。這個步驟可以讓使用者透過yyy@gmail.com登入youtube。
8. 執行步驟5安裝的youtube程式。接著在程式內使用google帳號登入(yyy@gmail.com)。這個步驟會讓Android系統增加一個 Google使用者,因此可以解決步驟4,無法加入現有帳號的問題。接著執行Android market就不會再要求設定Google帳號。
9. 如果還是無法登入Android market,則執行以下步驟:
10. 下載並安裝Marketenabler http://code.google.com/p/market-enabler/downloads/list
11. 在Marketenabler中,設定目前的電信業者為 us T-mobile 。就可以登入Android Market
12. 如果還是不能登入Android Market,那我也不知道要怎麼辦。我在步驟11就成功了。

Win 7下可用的記憶體小於安裝的記憶體

這有個官方文件:
http://support.microsoft.com/kb/978610/zh-tw

Latex LEd Editor使用上的問題與解法

我之前在windows 7用Led editor配合Miktex 2.8,有遇到一些奇怪的問題,以下是我的筆記。

1. previewer顯示出來為亂碼

這跟字型有關的問題,後來我改用Miktex 2.6,似乎就沒這個問題。我在另一台電腦上用Miktex 2.8,好像又沒遇到這個問題。

2. previewer沒辦法顯示eps圖片(1)改用 gs8.54以前的版本(2)在產生ps file的虛擬印表機(Generic Color PS for Commercial Printing),在"進階選項"的"PostScript輸出選項"要設定成"封裝式PostScript(EPS)"。
3. 自行設定的熱鍵無法存檔

改用Portable version的LEd,不要用installer的版本。



這是我LEd editor可以正常運作的設定:

http://pic.bs2.to/photo.php?id=icq&album=A9A60656&photo=81E1882539.png

設定TexMaker產生中文pdf


編輯器→編輯器字型編碼選 「UTF-8」
 
把pdflatex的指令換成xelatex的指令,再選擇用pdflatex來編譯。 

然後在將「快速編譯」換成「PDFlatex + 瀏覽PDF」,就可以正確編譯中文tex檔了,編譯完也會自動用pdf閱讀軟體開啟

Latex產生中文

今晚研究了老半天,總算找到一個簡單的作法
使用Miktex預設的Texworks就可以支援中文。
編譯時,要選擇XeLaTex,才能產生中文。
可以按Ctrl+T熱鍵來直接執行編譯。
 以下是個範例:
 \documentclass{article}
\usepackage{fontspec}
\usepackage{xeCJK}
\setmainfont{Times New Roman}   %設定英文字型
%\setCJKmainfont{標楷體}%標楷體在TeXworks的pdf previewer會有問題,不過用其他pdf reader打開就沒事。
%\setCJKmainfont{微軟正黑體}
%\setCJKmainfont{新細明體}
\setCJKmainfont{新細明體}
\XeTeXlinebreaklocale "zh"
\XeTeXlinebreakskip = 0pt plus 1pt
\begin{document}
\section{這是title}
這是內文
\end{document}

Lenovo X60 (IBM) 製作還原光碟

可以參考這個說明
http://www-07.ibm.com/lenovoinfo/hk/warranty/downloads/tp/61-20.pdf
可至這裡下載Rescue and Recovery
http://www-307.ibm.com/pc/support/site.wss/MIGR-4Q2QAK.html 
使用還原光碟的教學
http://www-07.ibm.com/lenovoinfo/hk/warranty/downloads/tp/61-18c.pdf

UDP收送broadcast packets (BSD socket)

之前有用到,所以做一些筆記。
發UDP broadcast的寫法如下,最重要的是setsockopt:
    int sockfd;
    struct sockaddr_in their_addr; // connector's address information
    struct hostent *he;
    int numbytes;
    int broadcast = 1;
    //char broadcast = '1'; // if that doesn't work, try this

if ((he=gethostbyname("255.255.255.255")) == NULL) {  // get the host infoif     perror("gethostbyname");        exit(1);
    }

    if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
        perror("socket");
        exit(1);
    }

    // this call is what allows broadcast packets to be sent:
    if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &broadcast,
        sizeof broadcast) == -1) {
        perror("setsockopt (SO_BROADCAST)");
        exit(1);
    }

    their_addr.sin_family = AF_INET;     // host byte order
    their_addr.sin_port = htons(SERVERPORT); // short, network byte order
    their_addr.sin_addr = *((struct in_addr *)he->h_addr);
    memset(their_addr.sin_zero, '', sizeof their_addr.sin_zero);
    if ((numbytes=sendto(sockfd,packet_content, packet_size, 0,
            (struct sockaddr *)&their_addr, sizeof their_addr)) == -1) {
    perror("sendto");
    exit(1);
    }
收UDPbroadcast的寫法如下(註:有時候收不到broadcast,是因為防火牆檔掉的關係):
 另外,如果是bind再某個特定interface下,也會有收不到broadcast packet的問題。
所以要bind再某一個interface,又要收broadcast的寫法如下:
     int broadcast = 1;
    /* Create the UDP socket */
    if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) {
        Die("Failed to create socket");
    }
    if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &broadcast,sizeof broadcast) == -1) {
        perror("setsockopt (SO_BROADCAST)");
        exit(1);
    }
    if(setsockopt(sock,SOL_SOCKET,SO_BINDTODEVICE,"eth0",4)==-1)
    {
        perror("setsockopt (SO_BINDTODEVICE)");
        exit(1);

    }
    /* Construct the server sockaddr_in structure */
    memset(&echoserver, 0, sizeof(echoserver));       /* Clear struct */
    echoserver.sin_family = AF_INET;                  /* Internet/IP */
    //echoserver.sin_addr.s_addr = inet_addr(DHCP_SERVER_IP);
    echoserver.sin_addr.s_addr = htonl(INADDR_ANY);
    echoserver.sin_port = htons(DHCP_PORT);       /* server port */

    /* Bind the socket */
    serverlen = sizeof(echoserver);
    if (bind(sock, (struct sockaddr *) &echoserver, serverlen) < 0) {
        Die("Failed to bind server socket");
    }

        if ((received = recvfrom(sock, buffer, BUFFSIZE, 0,
                        (struct sockaddr *) &echoclient,
                        &clientlen)) < 0) {
            Die("Failed to receive message");
        }

ubuntu筆記

最近在用ubuntu,發現與fedora似乎有些地方不同。因此做一些筆記。
1. 設定開機選單(grub)
安裝startup-manager
2. 設定開機執行的process
安裝bootup-manager
3. 切換成root
sudo su
4. 換掉很難用的vi
安裝vim即可,無需其他動作
5. http server 根目錄
/var/www/  (與fedora不同)
6. phpmyadmin的位置
/etc/phpmyadmin and /usr/share/phpmyadmin
7. ssh很慢的問題
google到的說法是编辑 /etc/ssh/ssh_config將GSSAPIAuthentication 設定成no。但是我這樣做,還是很慢。
我的作法是/etc/ssh/sshd_config加上UseDNS no。在重新啟動ssh server。就會很快。
8. 設定vim一些參數(/ect/vim/vimrc 或是在home目錄的.vimrc)
1)设置(软)制表符宽度为4:
set tabstop=4
set softtabstop=4
2)设置缩进的空格数为4
set shiftwidth=4
3)设置自动缩进:即每行的缩进值与上一行相等;使用noautoindent取消设置:
set autoindent
4)设置使用C/C 语言的自动缩进方式:
set cindent

解決"無法啟動這個應用程式,因為應用程式的設定不正確"的問題

當我用visual studio 2005編譯好的程式,複製到別台電腦後,執行,就會遇到這個問題。
 解決方式是在專案設定把 Use of MFC(這個選項在一開始的General那邊) 改成 Use MFC in a static Library(使用MFC的靜態程式庫)
 詳情請參考:
http://www.wretch.cc/blog/starlife672/29060484

用maple算Gamma distribution的CDF

雖然我不知道以後還有沒有需要用到,總之先做個記錄。

prob := stats[statevalf, cdf, gamma[1, 1]](.25)
這是算CDF(0.25)的解。

在Command line下執行php程式碼

在php檔的一開頭先加上:
#!/usr/bin/php

很類似寫shell script的感覺。

一些參考資料:
實用技巧:將PHP作為Shell腳本語言使用
http://ericbbs.blogspot.com/2007/11/phpshell.html
用 PHP 寫 Command-Line Script(CLI)
http://plog.longwin.com.tw/programming/2006/12/27/php_command_line_script_2006
PHP也可以當成Shell Script 
http://www.php5.idv.tw/modules.php?mod=books&act=show&shid=918

用PHP發HTTP request

透過PHP cURL就可以做到( http://tw.php.net/curl )

這邊有個自動發plurk的範例程式碼:
http://gist.github.com/53380

<?php
define('NICKNAME', 'abc');
define('PASSWORD', 'iamabc');
define('USER_ID', '123456');
 
$message = 'Hello World!';
 
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
 
// login
curl_setopt($ch, CURLOPT_URL, 'http://www.plurk.com/Users/login');
curl_setopt($ch, CURLOPT_POSTFIELDS, 'nick_name='.NICKNAME.'&password='.PASSWORD);
curl_exec($ch);
 
// post
curl_setopt($ch, CURLOPT_URL, 'http://www.plurk.com/TimeLine/addPlurk');
curl_setopt($ch, CURLOPT_POSTFIELDS, 'qualifier=says&content='.urlencode($message).'&lang=tr_ch&no_comments=0&uid='.USER_ID);
curl_exec($ch);
 
curl_close($ch);
?>

在powerpoint編輯latex公式

IguanaTex可以在powerpoint內編輯latex公式,並轉乘圖檔。
http://www.technion.ac.il/~zvikabh/software/iguanatex/

安裝成功後,還必須自己手動設定powerpoint,才可以成功載入此外掛。

Linux架設CVS與SVN server

CVS可以看這篇:
http://blog.yam.com/gavint/article/2590383
SVN可以看這篇:
http://blog.ssh.tw/?p=372

不過我覺得SVN那篇文章,沒有寫的很清楚。
可能還需要與CVS 那一篇相互對照。像我之前想要用其他使用者加入一些目錄,會遇到權限不足的問題。
在SVN想要讓使用者輸入密碼才能使用的話,SVN網址如下:
svn+ssh://[SVN server IP]/[SVN的根目錄]

另外,使用TortoiseSVN連線到SVN server,會需要常常輸入帳號密碼。
有個辦法可以不用輸入密碼:
1. 在 Explorer 右键菜单中:TortoiseSVN -> Settings.
2. 在弹出对话框的左侧面板中选择 Network,在右边界面下方的 SSH Client 中填写:

    [TortoiseSVN Install Path]\bin\TortoisePlink.exe -pw [Your Password]


例如,你的 TortoiseSVN 安装在默认目录 C:\Program Files\TortoiseSVN 下,密码为 abc123,那么以上的内容就应该为:

    C:\Program Files\TortoiseSVN\bin\TortoisePlink.exe -pw abc123


3. 点击 OK.


還有要打開防火牆的port。
CVS與SVN server所聽的port不同。

The value of ESP was not properly saved across a function call的問題

這是在使用在呼叫dll的function時,會遇到的問題。
原因是當初宣告function pointer時,宣告錯誤。
我在這個blog 找到解法:
http://hi.baidu.com/robinwjbgui/blog/item/9eefa358ef90cbd89d820425.html
由于DLL是用C写的,那么调用约定应该是__cdecl,而不是C++默认的__stdcall。
#define WINAPI      __stdcall
#define WINAPIV     __cdecl

對檔案轉換編碼方式

例如某個檔案原本是存成big5編碼,現在想轉換成UTF8編碼
可以使用以下指令:
iconv -f big5 -t utf8 src.txt > dest.txt

16個經典面試問題回答思路

來自ptt share版的MISSEGG分享。
面試過程中,面試官會向應聘者發問,而應聘者的回答將成為面試官考慮是否接受他的重
要依據。對應聘者而言,瞭解這些問題背後的「貓膩」至關重要。本文對面試中經常出現
的一些典型問題進行了整理,並給出相應的回答思路和參考答案。讀者無需過分關注分析
的細節,關鍵是要從這些分析中「悟」出面試的規律及回答問題的思維方式,達到「活學
活用」。


問題一:「請你自我介紹一下」
思路:


這是面試的必考題目。


介紹內容要與個人簡歷相一致。


表述方式上盡量口語化。


要切中要害,不談無關、無用的內容。


條理要清晰,層次要分明。


事先最好以文字的形式寫好背熟。
 

問題二:「談談你的家庭情況」
思路:


況對於瞭解應聘者的性格、觀念、心態等有一定的作用,這是招聘單位問該問題的主要原
因。


簡單地羅列家庭人口。


宜強調溫馨和睦的家庭氛圍。


宜強調父母對自己教育的重視。


宜強調各位家庭成員的良好狀況。


宜強調家庭成員對自己工作的支持。


宜強調自己對家庭的責任感。


問題三:「你有什麼業餘愛好?」
思路:


業餘愛好能在一定程度上反映應聘者的性格、觀念、心態,這是招聘單位問該問題的主要
原因。


最好不要說自己沒有業餘愛好。


不要說自己有那些庸俗的、令人感覺不好的愛好。


最好不要說自己僅限於讀書、聽音樂、上網,否則可能令面試官懷疑應聘者性格孤僻。


最好能有一些戶外的業餘愛好來「點綴」你的形象。


問題四:「你最崇拜誰?」
思路:


最崇拜的人能在一定程度上反映應聘者的性格、觀念、心態,這是面試官問該問題的主要
原因。


不宜說自己誰都不崇拜。


不宜說崇拜自己。


不宜說崇拜一個虛幻的、或是不知名的人。


不宜說崇拜一個明顯具有負面形象的人。


所崇拜的人人最好與自己所應聘的工作能「搭」上關係。


最好說出自己所崇拜的人的哪些品質、哪些思想感染著自己、鼓舞著自己。

問題五:「你的座右銘是什麼?」
思路:


座右銘能在一定程度上反映應聘者的性格、觀念、心態,這是面試官問這個問題的主要原
因。


不宜說那些易引起不好聯想的座右銘。


不宜說那些太抽像的座右銘。


不宜說太長的座右銘。


座右銘最好能反映出自己某種優秀品質。


參考答案——「只為成功找方法,不為失敗找借口」


問題六:「談談你的缺點」
思路:


不宜說自己沒缺點。


不宜把那些明顯的優點說成缺點。


不宜說出嚴重影響所應聘工作的缺點。


不宜說出令人不放心、不舒服的缺點。


可以說出一些對於所應聘工作「無關緊要」的缺點,甚至是一些表面上看是缺點,從工作
的角度看卻是優點的缺點。


問題七:「談一談你的一次失敗經歷」
思路:


不宜說自己沒有失敗的經歷。


不宜把那些明顯的成功說成是失敗。


不宜說出嚴重影響所應聘工作的失敗經歷,


所談經歷的結果應是失敗的。


宜說明失敗之前自己曾信心白倍、盡心盡力。


說明僅僅是由於外在客觀原因導致失敗。


失敗後自己很快振作起來,以更加飽滿的熱情面對以後的工作。


問題八:「你為什麼選擇我們公司?」
思路:


面試官試圖從中瞭解你求職的動機、願望以及對此項工作的態度。


建議從行業、企業和崗位這三個角度來回答。


參考答案——「我十分看好貴公司所在的行業,我認為貴公司十分重視人才,而且這項工
作很適合我,相信自己一定能做好。」


問題九:「對這項工作,你有哪些可預見的困難?」
思路:


不宜直接說出具體的困難,否則可能令對方懷疑應聘者不行。


可以嘗試迂迴戰術,說出應聘者對困難所持有的態度——「工作中出現一些困難是正常的
,也是難免的,但是只要有堅忍不拔的毅力、良好的合作精神以及事前周密而充分的準備
,任何困難都是可以克服的。」


問題十:「如果我錄用你,你將怎樣開展工作」
思路:

如果應聘者對於應聘的職位缺乏足夠的瞭解,最好不要直接說出自己開展工作的具體辦法
。


可以嘗試採用迂迴戰術來回答,如「首先聽取領導的指示和要求,然後就有關情況進行瞭
解和熟悉,接下來制定一份近期的工作計劃並報領導批准,最後根據計劃開展工作。」


問題十一:「與上級意見不一是,你將怎麼辦?」
思路:


一般可以這樣回答「我會給上級以必要的解釋和提醒,在這種情況下,我會服從上級的意
見。」


如果面試你的是總經理,而你所應聘的職位另有一位經理,且這位經理當時不在場,可以
這樣回答:「對於非原則性問題,我會服從上級的意見,對於涉及公司利益的重大問題,
我希望能向更高層領導反映。」


問題十二:「我們為什麼要錄用你?」
思路:


應聘者最好站在招聘單位的角度來回答。


招聘單位一般會錄用這樣的應聘者:基本符合條件、對這份共組感興趣、有足夠的信心。


如「我符合貴公司的招聘條件,憑我目前掌握的技能、高度的責任感和良好的餓適應能力
及學習能力 ,完全能勝任這份工作。我十分希望能為貴 公司服務,如果貴公司給我這個
機會,我一定能成為貴公司的棟樑!」


問題十三:「你能為我們做什麼?」
思路:


基本原則上「投其所好」。


回答這個問題前應聘者最好能「先發制人」,瞭解招聘單位期待這個職位所能發揮的作用
。


應聘者可以根據自己的瞭解,結合自己在專業領域的優勢來回答這個問題。


問題十四:「你是應屆畢業生,缺乏經驗,如何能勝任這項工作?」
思路:



如果招聘單位對應屆畢業生的應聘者提出這個問題,說明招聘單位並不真正在乎「經驗」
,關鍵看應聘者怎樣回答。


對這個問題的回答最好要體現出應聘者的誠懇、機智、果敢及敬業。


如「作為應屆畢業生,在工作經驗方面的確會有所欠缺,因此在讀書期間我一直利用各種
機會在這個行業裡做兼職。我也發現,實際工作遠比書本知識豐富、複雜。但我有較強的
責任心、適應能力和學習能力,而且比較勤奮,所以在兼職中均能圓滿完成各項工作,從
中獲取的經驗也令我受益非淺。請貴公司放心,學校所學及兼職的工作經驗使我一定能勝
任這個職位。」 

問題十五:「你希望與什麼樣的上級共事?」
思路:


通過應聘者對上級的「希望」可以判斷出應聘者對自我要求的意識,這既上一個陷阱,又
上一次機會。


最好迴避對上級具體的希望,多談對自己的要求。


如「做為剛步入社會新人,我應該多要求自己盡快熟悉環境、適應環境,而不應該對環境
提出什麼要求,只要能發揮我的專長就可以了。」


問題十六:「您在前一家公司的離職原因是什麼?」
思路:


最重要的是:應聘者要使找招聘單位相信,應聘者在過往的單位的「離職原因」在此家招
聘單位裡不存在。


避免把「離職原因」說得太詳細、太具體。


不能摻雜主觀的負面感受,如「太幸苦」、「人際關係複雜」、「管理太混亂」、「公司
不重視人才」、「公司排斥我們某某的員工」等。


但也不能躲閃、迴避,如「想換換環境」、「個人原因」等。


不能涉及自己負面的人格特徵,如不誠實、懶惰、缺乏責任感、不隨和等。


盡量使解釋的理由為應聘者個人形象添彩。


如「我離職是因為這家公司倒閉。我在公司工作了三年多,有較深的感情。從去年始,由
於市場形勢突變,公司的局面急轉直下。到眼下這一步我覺得很遺憾,但還要面對顯示,
重新尋找能發揮我能力的舞台。」 同一個面試問題並非只有一個答案,而同一個答案並
不是在任何面試場合都有效,關鍵在於應聘者掌握了規律後,對面試的具體情況進行把握
,有意識地揣摩面試官提出問題的心理背景,然後投其所好。

【責任編輯 李昌傑】

Latex 論文研究工具集

這是CCY0927發表於ptt的PHD版。
Latex 論文研究工具集 (Ver.20081023)

這篇文章大略匯集了一些平常撰寫研究論文常用的 latex 工具,絕大部分是免費的 (
個人習慣使用免費軟體)。也因為我平常常用的作業系統包含 Windows 與 Mac OS X,
裡面有些軟體會包含 mac 版本。


※※※

:: 撰寫論文 (Paper) ::

   * Texlive 2007/2008

     @ 2007, ftp://tug.org/historic/systems/texlive/2007/
     @ 2008, http://ctan.cdpa.nsysu.edu.tw/systems/texlive/Images/

   * MacTex (蘋果電腦上面使用)

     @ http://www.tug.org/mactex/

   * 編輯器

     @ Texmaker
       http://www.xm1math.net/texmaker/

       這個編輯器的好處是支援 utf8 編碼與內容中文輸入。若是有需要撰寫中文
       文件的話,我個人會選擇這個來使用。

     @ LaTeX Editor (LEd)
       http://www.latexeditor.org/

       一般來說,我們的英文程度都沒有哪麼好,三不五時拼錯字是相當正常的一
       件事情。這個編輯器最大的好處就是有 check as you type (隨打即檢查)
       的功能,不過缺點就是內容不能輸入中文,通常我都是撰寫英文論文的時候
       會用這個編輯器。

     @ TeXShop (蘋果電腦上使用)
       http://www.uoregon.edu/~koch/texshop/

       這個編輯器算是集大成了,既有拼字檢查,也支援中文輸入與 utf8 編碼。
       只可惜是蘋果電腦上的軟體,windows 作業系統的使用者沒辦法使用。

   * 文獻管理

     @ JabRef
       http://jabref.sourceforge.net/

   * PDF 工具

     @ BullzipPDFPrinter
       http://www.bullzip.com/products/pdf/info.php

       大部分的 pdf 轉檔程式,其實底層還是去呼叫 ghostscript 這個程式,可
       以把它們想成 gs 的 GUI 程式,我個人習慣用這個免費PDF轉檔軟體。

     @ Free PDF Tools
       http://www.pdfill.com/pdf_tools_free.html

       免費的PDF工具集,論文要加上浮水印或是合併什麼授權頁面之類的,靠它
       就對了。

     @ pstoedit
       http://www.pstoedit.net/pstoedit

       免費PDF/PS/EPS 轉 WMF/EMF的軟體。

       pstoedit -f wmf file.eps(pdf) file.wmf
       pstoedit -f wmf file.pdf file%d.wmf

     @ pdf 轉圖片

       這部份我都是透過 gs 來進行轉檔,因為可以開啟 anti-alias 選項,出來的
       圖片比較精美。

       Ghostscript, http://pages.cs.wisc.edu/~ghost/

       把下面這儲存成為 bat 檔案。原則上只要對 -ddNumRenderingThreads 跟
       -r300 進行修改就好。前者是表示你想要開啟幾個 thread 來進行繪製動作,
       後者是表示轉出來的圖片解析度想要多少 dpi。

@echo off
FOR /F "delims=." %%k IN ('dir /b .\*.pdf') DO (
"gswin32c.exe" -dNumRenderingThreads=5 -dNOPAUSE -dBATCH -dTextAlphaBits=4 -sDEVICE=png16m -sOutputFile=%%k-%%05d.png -r300 -f %%k.pdf
)

     @ 更改 pdf 資訊

       通常我們很少在管 pdf 的這部份,不過若是想要加入 pdf 資訊的話,我都是
       用 ExifTool 來辦到。
       http://www.sno.phy.queensu.ca/~phil/exiftool/

       由於 Windows 作業系統的編碼方式我們多半都是選擇 big5,若直接在命令
       提示字元下打上上面的命令,其結果似乎會是亂碼。

       折衷方案是另外撰寫一個參數檔 (e.g. exiftool.arg),內容如下,格式為
       utf-8。

        -author=作者
        -subject=主題
        -title=中文題目 有空格也行
        -keywords=關鍵字

       之後使用:

        exiftool -@ exiftool.arg your.pdf

       這樣就可以成功輸入中文字串了。


   * Latex equation + Microsoft Word

     @ TeXsword
       http://sourceforge.net/projects/texsword

       這個免費工具可以讓你在 word 當中插入 latex 公式。還有另一個商業軟體
       是 Aurora,要價大概台幣千元出頭,我沒用過,不知道功能是否強大很多。

       Aurora, http://elevatorlady.ca/


※※※

:: 圖表 (Figure/Table) ::

   * 畫圖工具

     撰寫論文的時候,若想要讓圖形看起來比較好看,很重要的一點,就是記住要
     使用「向量圖」。凡舉流程圖之類的說明,記得最後要儲存成為這種類型的檔
     案。最好的格式當然是 pdf 檔案,不過若是想給 office 軟體使用,可以把圖
     片弄成 emf 格式。

     一般來說,我畫圖都是用 Powerpoint 來畫,有些需要說明的圖案,我會去線
     上藝廊抓取。最後我會輸出成為 pdf 檔案,再用 pdfcrop 裁邊。

     Office Clip Art, http://office.microsoft.com/clipart/

   * 表格工具

     @ Latable, http://www.ctan.org/tex-archive/nonfree/support/latable/

       Latex 當中,想要輸入表格,其實相當不容易,在這邊有一個輔助工具可以
       協助輸入表格,不過其他表格樣式設定,還是要自己來就是了。

   * 剪裁工具

     @ pdf cropper
       http://blog.rubypdf.com/downloads/

       畫出來的圖片輸出成為 pdf 的時候,有時候難免留白,到時候 latex 引用
       的時候,會很難排版。利用這工具,可以輕易的把白邊切除掉。

       pdfcropper old.pdf new.pdf

       teTeX 3.x 以上的版本有內建 pdfcrop,效果跟這個一樣。

   * 製作論文縮圖

     有些人把自己的論文弄成網頁的話,會附上論文縮圖。這部份我習慣使用
     ImageMagick 來製作。

     ImageMagick, http://www.imagemagick.org/

     安裝好之後,輸入下列指令,就可以製作縮圖了 (前提當然是你先把 pdf 轉成
     png 之類的圖檔)。其中參數改變一下,大概就會知道有何效果了。

@echo off
montage -bordercolor black -border 1x1 -geometry 120x160+2+2 -tile 4x2 *.png A2047_thumb.jpg

     以上這是最基本的,當然你還可以自行變化,像是弄成這樣
     http://tinyurl.com/6zjvzh

     或是這樣 http://tinyurl.com/5o9s47


※※※

:: 報告 (Presentation) ::

   * Latex equation + Microsoft Powerpoint

     這邊收集一些想要在微軟 Powerpoint 上面輸入 latex 公式的程式套件,我
     個人剛開始是習慣使用 TexPoint,不過自從他要收費之後,我就投向
     IguanaTex 的懷抱了。

     @ TexPoint
       http://texpoint.necula.org/

       最元老的工具程式。2.0.3 之前的版本(約 2006 年初)是免費的,至於為
       什麼現在變成要收錢,據說是因為作者度爛當初他 open source,卻沒有人
       要去維護,只知道要寫信給他,叫他做 bug-fixed。

       2.0.3 下載, http://www.box.net/shared/9useb2ah39

     @ IguanaTex
       http://www.technion.ac.il/~zvikabh/software/iguanatex/

       跟 TexPoint 功能其實沒差多少,而且可以使用 latex 的 color 套件(在
       TexPoint 2.0.3 上面似乎有 bug)。缺點是它沒辦法像 TexPoint 那樣,自
       訂一個常用的 equation template(解決方案是,我先手動新增第一個,之
       後的數學式子,我都是複製貼上第一個去做編輯)。安裝完畢之後,照著資
       料夾裡面的說明安裝就可以了。要特別注意的是,裡面換行要用
       shift + enter。

     @ MyTexPoint
       http://thd.pnpi.spb.ru/~gromov/mytexpoint.html

       這個程式我一直都跑不起來,我猜測的原因是他把一開始程式偵測的路徑寫死
       了,網頁當中有提到,需要 MiKTex 和 GS,我本身 latex 系統使用的是
       texlive,路徑不大一樣。

     @ TeX4PPT
       http://users.ecs.soton.ac.uk/srg/softwaretools/presentation/TeX4PPT/

       據說這程式會有字型嵌入的問題,不過我沒用過就是了。

     @ Latex2PPT
       http://www.cse.yorku.ca/~jeff/notes/latex2ppt/

     @ LaTeXiT (蘋果電腦上使用)
       http://ktd.club.fr/programmation/latexit_en.php

   * KeyJnote
     http://mirror.optus.net/sourceforge/k/ke/keyjnote/

     千辛萬苦弄好投影片之後,若是你想要幫 pdf 投影片增加效果,可以透過這個
     程式來幫忙。

      keyjnote.exe yourslide.pdf

     下一頁:滑鼠左鍵/Page Down/空白鍵
     上一頁:滑鼠右鍵/Page Up/Backspace
     離開:Esc/q

     重點標示:按下 enter 來做切換。此時投影片會變暗,滑鼠所在位置會有個光
               圈,光圈大小可以透過 ± 來控制。

     另一種標記方式是用滑鼠左鍵來畫上重點,取消則是在標記重點上按下右鍵。

     按下 z 鍵則是會放大滑鼠所在區域影像。

     Q & A 時間的時候,若是想要快速跳到某張投影片,可以按下 Tab,會有縮圖
     圖示產生。第一次當然會花一些時間,不過之後就會被快取住了。


※※※

:: 其他 (Miscellaneous) ::

   * 論文範本

     這邊我根據我的研究領域所收集到的常用 latex 範本,通常著名的國外出版社,
     一定都會提供 latex template 來讓作者套用。

     @ 元智大學論文格式的 LaTeX 格式檔
       http://g5dual.eed.yzu.edu.tw/~lab/latex/latex_note.html

     @ zhreport
       http://www.box.net/shared/6gnytqzta6

       這是我以前自己弄的簡單範本,最主要的部份是把章節目錄通通用中文字去
       表示。不過因為是我閒暇之餘亂弄的,裡面資訊亂七八糟,若不嫌棄的話,
       大家可以拿去用,依照自己需要改一下就好。

     @ CVGIP
       http://cvgip2008.ntou.edu.tw/user/submission.php

       CVGIP 是國內電腦視覺、影像處理等相關研究的大型研討會,今年開始終於
       提供 latex 範本了。

       Mirror, http://www.box.net/shared/0l8uv1rzdo

     @ IEEE
       http://www.ieee.org/web/publications/authors/transjnl/

     @ Elsevier
       http://www.elsevier.com/latex

     @ LNCS
       http://www.springer.com/computer/lncs?SGWID=0-164-7-72376-0

   * 影片製作

     有些人的研究會特別製作一個展示影片來做說明,當然,對於這種影片我個人
     還是會覺得使用商業軟體製作是比較好的,至少在操作介面上不用搞得很複雜
     。不過有些時候我們沒有那麼多錢,因此,免費的工具還是要稍微知道一些些。

     @ AviSynth
       http://avisynth.org/mediawiki/Main_Page

       組合研究影片的工具。投稿好一點的期刊論文,或是研討會,都會有個
       supplement 可讓你上傳,多半都是上傳「比較結果影片」之類的東西。我的
       結果影片都是用這個合成出來的,這邊有個很實用的教學網站
       AviSynth Codebook 可參考。

       AviSynth Codebook, http://www.fauskes.net/nb/avisynth/



       [1;30m本文採 CC-by-SA 授權。白話意思就是可以直接轉走,但是要附出處與作者。 [m

刪除微軟新倉頡

之前刪除了之後
後來安裝office,又莫名其妙跑出來了。
怎麼刪都刪不掉。
後來發現可以用IMETOOL。
詳情請看:
http://www.jikker.net/2008/04/blog-post_24.html

co2鋼瓶知識

http://tw.myblog.yahoo.com/jw!ZEKDNVuCGB7fPwmBHFN.Qlk.nkQ-/article?mid=1632

補充說明一下:
CO2的臨界溫度是31.04℃,臨界壓力是72.85標準大氣壓(atm)或其它單位壓力(如75 kg/㎝2、1073 psi、73.8 bar、4.97 Mpa等)。(出自翠湖文章)
一般鋼瓶上面的TP與FP是指耐壓試驗壓力與最高灌裝壓力,單位都是kg/cm2。
所以鋼瓶最好這兩項的值都在75以上,以免會有爆炸危險。
附帶一提,(出自水族教科書的冽霜醉雨)據說鋼瓶爆炸會噴射出大量的破片,鋁瓶的破片少很多...但是破片很大片。
一般在使用上,鋼瓶都使用在壓力較高的填充氣體上,因為鋁的最大耐壓不如鋼瓶,而且鋁瓶比較容易受到高/低溫影響而產生損害(輕則漏氣、裂瓶;重則瓶炸、爆口)
所以鋁瓶多是小罐裝、低壓力,例如BB槍、漆彈槍....

用C++在windows mobile (PDA)連上手機網路(3G)

當PDA的3G sim卡有插入時,執行PDA上的IE程式,會自動連上3G網路。
但是自己寫的網路程式,卻不會自己連上3G網路。
解決方法如下:

HANDLE hConnection;
int Connect3G(DWORD&  pdwStatus)
{
     CONNMGR_CONNECTIONINFO connInfo;
     connInfo.cbSize = sizeof(connInfo);
     connInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
     connInfo.dwFlags = 0;
     connInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE;
     connInfo.bExclusive = true;
     connInfo.bDisabled = false;
     connInfo.guidDestNet = IID_DestNetInternet;
     connInfo.hWnd = NULL;
     //connInfo.uMsg = WM_APP_CONNMGR;
     connInfo.lParam = (LPARAM)0;
     // Make the connection
     // ConnMgrEstablishConnection(&connInfo , &hConnection);
     //     DWORD pdwStatus ;   
     ConnMgrEstablishConnectionSync(&connInfo , &hConnection,60000,&pdwStatus);
     return 0;
}
void Disconnect3G()
{
     ConnMgrReleaseConnection(hConnection,0);
}

C++設定windows timer resolution(計時器的經準度)

不知道各位有沒有經驗
在使用sleep之類的函數時,想要暫停幾個ms(千分之一秒),但是暫停的時間總是過長。
例如想要暫停3ms,卻發現暫停了20ms。
其實這是windows timer內部設定的問題。 
可以透過以下方法解決:

TIMECAPS tc;
UINT     wTimerRes;

if (timeGetDevCaps(&tc, sizeof(TIMECAPS)) != TIMERR_NOERROR)
{
    wxMessageBox(wxT("Error; application can't continue"));
}
wTimerRes = min(max(tc.wPeriodMin, TARGET_RESOLUTION), tc.wPeriodMax);
MMRESULT result= timeBeginPeriod(wTimerRes);
if(result==TIMERR_NOERROR )
    wxMessageBox(wxString::Format(wxT("success:%d"),wTimerRes));
else if(result==TIMERR_NOCANDO)
    wxMessageBox(wxT("set timer resoluion fail"));
else
    wxMessageBox(wxT("set timer resoluion other"));

C#呼叫C++ dll (unmanaged)

這個方法不記下來,我怕我又會忘記。
在C++部份,先產生一個win32dll專案。接著把你想要的程式碼加入檔案中。
例如:
 #include<stdlib.h>
int string_length(char* str)
{
    int size = strlen(str);
    TCHAR unicode_string[50];
    mbstowcs(unicode_string, str, size+1);
    OutputDebugString(unicode_string);
    return strlen(str);
}
接下來在C#部份如下:
using System.Runtime.InteropServices;

namespace c_sharp_call_dll
{
    public partial class Form1 : Form
    {
        [DllImport("sample_cpp_dll.dll")]
        static extern int string_length(string str);

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int i = 15;
            MessageBox.Show(string_length(textBox1.Text).ToString());
        }
    }
}

新酷音輸入法選字出現框框(亂碼)的問題

新酷音很好用,只可惜有這個小問題。
我在這篇文章找到了解法:
http://wotupset.blogspot.com/2008/05/freeware-chewing_1713.html

摘要一下:

問題原因:
新酷音輸入法選字時,因為新細明體中對應的中文字不足的關係
下載檔案名稱為:"PMingLiU Update Pack.msi"
完之後安裝後重新開機就可以

下載連結:
http://www.csie.ntu.edu.tw/~piaip/fonts/PMingLiU%20Update%20Pack.msi

http://mingliu.myweb.hinet.net/MingLiu/PMingLiU%20Update%20Pack.msi

http://ftp.scu.edu.tw/scu/chinese/PMingLiU%20Update%20Pack.msi

http://cai.mingdao.edu.tw/media/modules/wfdownloads/singlefile.php?cid=2&lid=85

C#控制滑鼠移動

在C++中,可以使用SetCursorPos以及mouse_event來操作滑鼠移動。
在C#中使用這兩個函式,需要一些小修改。

首先宣告:
[DllImport("user32.dll")]
static extern bool SetCursorPos(int X, int Y);

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

private const int MOUSEEVENTF_LEFTDOWN = 0x02;
private const int MOUSEEVENTF_LEFTUP = 0x04;
private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
private const int MOUSEEVENTF_RIGHTUP = 0x10;
使用的時候如下:
按一下左鍵(我不知道為什麼要呼叫四次mouse_event)
mouse_event(MOUSEEVENTF_LEFTDOWN, X, Y , 0,0);
mouse_event(MOUSEEVENTF_LEFTUP, X, Y , 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, X, Y , 0,0);
mouse_event(MOUSEEVENTF_LEFTUP, X, Y , 0, 0);
將滑鼠移動到某個點:
SetCursorPos(X, Y);

戊二醛相關資訊

戊二醛是個好用的東西,可以提供水草co2及殺藻的功能。
不過有些資訊,在使用前不得不知:

戊二醛(Glutaraldehyde)之探討(1):戊二醛的殺菌作用(戊二醛主要是用在
醫學界殺菌,殺藻與提供co2是副作用)
http://blog.sina.com.tw/paludarium/article.php?pbgid=40898&entryid=458313

戊二醛(glutaraldehyde)之探討(2):戊二醛為何能提供水草碳元素並且殺藻?
http://blog.sina.com.tw/paludarium/article.php?pbgid=40898&entryid=458317

戊二醛(Glutaraldehyde)之探討(7):戊二醛對人體的影響。這篇非常重要!
我使用的那一罐濃度是2.5%,除了要帶手套操作之外,
其實沒有什麼太嚴重的影響。將戊二醛滴入魚缸後,要整理魚缸也要帶手套操作。
http://blog.sina.com.tw/paludarium/article.php?pbgid=40898&entryid=573239

戊二醛(Glutaraldehyde)之探討(10):戊二醛的保存與分解
http://blog.sina.com.tw/paludarium/article.php?pbgid=40898&entryid=579096

順道一提,戊二醛分解出co2的反應式是C5H8O2 + 6O2 = 5CO2 + 4H2O。
從化學式可以看到,戊二醛可以完全分解成水及co2,不會有其他有害物質,
但是加太多戊二醛,魚缸會缺氧。
使用戊二醛會傷害的水草種類
http://aqua.andy.tw/viewtopic.php?f=3&t=143014&start=0&st=0&sk=t&sd=a&hilit=%E6%88%8A%E4%BA%8C%E9%86%9B

作者有提到會影響的都是使用「局部法」的水草。

另外,鹿角苔聽說也會受到影響。 
 
一倍用量是200 公升使用 5 ml 2.5% 的  戊二醛

幫助水草生長的二氧化碳供應器(酸鹼+負回饋)

以下文章是pipichar發表於Aquarium版。
我沒實驗過,我對於檸檬酸溶液會自動流入小蘇打瓶感到存疑,因為風管管徑很小。

一 材料

   小蘇打粉 1KG
   citrate(檸檬酸)  1KG
   調節閥*2
   風管連接器*2
   汽水瓶兩個(含蓋)
   細化器
   計泡器
   風管數呎

二 方法

 1.先把A蓋子打一個洞 塞入連接器,用膠黏住
 2.把B蓋子打兩個洞,一個塞入連接器,另一個塞入調節閥,一樣用膠黏住
 3.把A瓶加入Citrate約20克 並加水約可達1/3瓶 ,B瓶則裝入約30克的小蘇打
 4.A到B瓶用風管連接於連接器,B的調節閥則連到計泡器+細化器
 5.蓋子蓋好,B的調節閥也關起來後,倒立A瓶使Citrate流入B瓶中
 6.此時產生大量CO2會回衝回A瓶,待平衡時再擠壓A瓶使Citrate流入B瓶中。
 7.重複5.和6. 使A和B的瓶身都很硬後即可開始供應CO2。
 8.A瓶是倒立並高於B瓶才可使Citrate流入B瓶中。
PS:打氣加壓時(步驟7.)小心不要太硬使得瓶子爆炸

http://www.wretch.cc/album/show.php?i=pipichar&b=14&f=1511645193&p=0
圖形教學,我不太會畫畫,所以加減看...

此法是不用PUMP打氣,因此不需耗電。但是CO2供應時大概要花幾分鐘使供氣量

穩定。

而為何我會想出這個方法呢? 因為我本身也是對生物有相當的熱情

(我是嘉大微免系XD) 因為本身敗不起CO2鋼瓶,因此致力於開發DIY CO2供應系統

DIY 就是怕爆瓶...因此想出此法藉此與大家分享...

希望大家多多指教...

而看完上面一定會有人有疑問...多了一個調節閥沒用到?

這個調節閥可以接於A和B瓶之間,用CO2時一定要打開,而他作用是什麼呢?

當你Citrate溶液太多時,小蘇打已用完,此時只要關起來,即可卸除B瓶的壓力,
此時A瓶壓力還是很大,而可以補充小蘇打,填裝完後再打開即可。

如此一來就省下一些CO2增加壓力了。

水草造景相關資訊

ADA水草造景電子書:
http://www.adana.hk/userfiles/2008011009574260645.pdf
水草栽培新世界(師法自然的水族造景基礎):
http://blog.sina.com.tw/paludarium/category.php?pbgid=40898&categoryid=99216
Creative Aquascape Union(一群香港ADA的高手):
http://www.cau-aqua.net/

IPv6看destination的mac address

在IPv4中,使用arp -a指令就可以看到destination的mac addrss。
不過在 IPv6中,則是要換一個作法。
在windows中,使用:
netsh interface ipv6 show neighbors
在linux中,使用:
ip -6 neigh show
 詳情可以參考:
http://www.linux.org.tw/CLDP/OLD/Linux-IPv6-HOWTO-8.html
http://technet2.microsoft.com/windowsserver/zh-cht/library/61427fbd-de1f-4c8a-b613-321f7a3cca6a1028.mspx?mfr=true 

安裝 Generic Color PS for Commercial Printing 印表機驅動程式

請參考微軟的教學:
http://office.microsoft.com/zh-tw/publisher/HP010464291028.aspx
注意,如果沒有安裝微軟office內的publisher,可能會無法安裝這個虛擬印表機。
當安裝成功後,就可以透過此印表機產生*.ps檔。
產 生的作法是先開啟一份文件,接著透過列印,選擇Generic Color PS for Commercial Printing這台印表機,然後記得勾選「列印至檔案」這個選項,然後按下列印,就會跳出一個對話框,此對話框會問你儲存檔案的名稱,這樣就可以產生 ps檔了。

ps檔還可以透過GSview程式來轉換成eps檔,並且切除不必要的空白。最後eps檔就可以拿來給latex使用。

有時候latex轉出來的pdf檔看得到圖片。
但是轉出來的.dvi或.ps檔卻不行。
解決方法是,在列印視窗,對該印表機,按下"屬性"按鈕,接著按"進階"按鈕,在進階選項視窗下的"文件選項"的"PostScript選項"的"PostScript輸出選項",改成"壓縮式PostScript(EPS)"。

在windows 8會找不到 MSCOL11.INF檔。這個時候就不要選擇從"從磁片安裝",而是在製造商選"Generic",印表機選"MS Publisher Color Printer"。

LaTeX 可以接受的圖形格式與畫圖

在以下網址看到的這一句話,難怪我之前latex都不吃eps檔。原來是設定錯誤。
http://lists.nchc.org.tw/pipermail/articles/2004-January/001168.html
若你是透過 dvips 來將 dvi 檔轉成 PostScript 輸出格式,那麼你只能使用eps 檔。 如果你是透過 dvipdfm 轉成 PDF, 則你可以使用 pdf 檔案格式。


補充一下latex使用圖片的技巧。
在\begin{figure}[xxx]中,xxx可以用htbp來表示,htbp的意思如下:
將圖放在圖案宣告的位置(h),該頁或次一頁的頂端(t),該頁或次一頁的底端(b)或是單獨一頁(p)。我們尚可配合 \clearpage, \newpage 命令協助我們更精確地安置圖的位置。
更多資訊請參考:
http://phi.sinica.edu.tw/aspac/reports/94/94001/chap5.html

latex中畫圖,可以透過\setsolid來畫實線,\setdashes畫虛線,\setdots來打點。
用\stack{A,B}可以在X軸或Y軸的label強制換行。

可以在setdashes設定虛線的長短:  \setdashes<.0325in>
以下是一個畫圖範例

\documentclass{article}
\usepackage{pictex}
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{amssymb}
\parindent=0pt
\begin{document}
\pagestyle{empty}
\unitlength=1mm
\begin{center}
\beginpicture
\setcoordinatesystem units <100pt,2000pt> point at 0 0
\setplotarea x from -1 to 1, y from 0 to 0.1
\axis top /
\axis right /
\axis left label {X-label}
ticks withvalues
$0$ $0.002$ $0.004$ $0.006$ $0.008$ $0.01$
/ at 0 0.02 0.04 0.06 0.08 0.1 / /
\axis bottom label { Y-label }
ticks withvalues
$10^{-1}$ $10^{0}$ $10^{1}$
/ at -1 0 1 /
unlabeled short at
-1
0 -0.699 -0.523 -0.4 -0.3 -0.22 -0.15 -0.097 -0.045
0.301030 0.477121 0.602060 0.698970 0.778151 0.845098 0.903090 0.954243
1
/ /
\put {$\bullet$: $\lambda=10\mu$} [l] at 0 0.08
\put {$\triangleleft$: $\lambda=\mu$} [l] at 0 0.07
\plot
-1 0.0994522
-0.69897 0.0994028
-0.522879 0.0993535
-0.39794 0.0993042
-0.30103 0.099255
-0.221849 0.0992058
-0.154902 0.0991567
-0.09691 0.0991077
-0.0457575 0.0990588
0 0.0990099
0.30103 0.0985246
0.477121 0.0980455
0.60206 0.0975726
0.69897 0.0971058
0.778151 0.0966448
0.845098 0.0961896
0.90309 0.09574
0.954243 0.095296
1 0.0948574
/
\multiput {$\bullet$} at
-1 0.0994522
0 0.0990099
1 0.0948574
/
\plot
-1 0.0249657
-0.69897 0.0249625
-0.522879 0.0249594
-0.39794 0.0249563
-0.30103 0.0249532
-0.221849 0.0249501
-0.154902 0.024947
-0.09691 0.0249439
-0.0457575 0.0249408
0 0.0249377
0.30103 0.0249066
0.477121 0.0248757
0.60206 0.0248449
0.69897 0.0248142
0.778151 0.0247836
0.845098 0.0247531
0.90309 0.0247227
0.954243 0.0246924
1 0.0246622
/
\multiput {$\triangleleft$} at
-1 0.0249657
0 0.0249377
1 0.0246622
/
\endpicture
\end{center}
\end{document}

第一次使用亂數就上手

原作者是:latinboy
發表於ptt的C_and_CPP看板
就當作是增廣見聞吧!


亂數是程式語言學習上的一個重點,學校的程式課程多半會教、出練習題,

因此也是新手常遇到的問題。

在此列出一點C語言中亂數使用上的心得以及常犯錯誤
==

[1] 入門用法

srand( time(NULL) );
for( i = 0; i < 10; i++ )
    printf( "Random number #%d: %d\n", i, rand() );

呼叫 srand()函式將亂數初始化,可以 time(NULL) 作為初始種子(seed),
或自行設定任意數。不先呼叫本函數、或種子值固定,都會造成新手常見
的「每次執行產生的亂數結果都相同」問題。
==

[2] 產生固定範圍的亂數

# 0 ~ n-1

一般常見的寫法有:

1. rand() % n;
2. (int)( n * ( rand() / (float)(RAND_MAX+1) ) );

兩種寫法n的上限皆不能大於RAND_MAX,否則某些範圍內的數字永遠不會出現。(Why?)
一般C語言的RAND_MAX只有32767,於使用上需特別注意。

第1種寫法在n有點大時( RAND_MAX/k < n <=RAND_MAX, say k < 5 )可能會出現
亂數分佈不均。因此以第2種為佳。

# a ~ b

將上面的寫法改一下,變成 a + ( 0 ~ (b-a+1) - 1 )即可。
也就是上面的 n 變成 b-a+1。

==

[3] 產生更大範圍的整數亂數

使用系統內建的rand()上限一般只到 32767,使用上不方便,會有前述的問題。
改善方法有很多,這邊列出一種 RAND_MAX = 32767 時的簡單改寫法:

int rand31() {
    // RAND31_MAX = 2147483647
    return ( (rand() << 16) + (rand() << 1) + (rand() & 1) );
}

unsigned int rand32() {
    // RAND32_MAX = 4294967295
    return ( (rand() << 17) + (rand() << 2) + (rand() & 3) );
}

分別可產生32位元的有號及無號正整數亂數。
==

[4] 產生 0 到 小於1 的浮點數

上面的例子用到的 rand() / (float)(RAND_MAX+1)

即可產生0~小於1的浮點數,但是如上所述,應用範圍只能到RAND_MAX。

RAND_MAX=32767簡單的改寫法如下,應用範圍提高到 16777215,是32位元浮點數極限:

float rand24() {
    // RAND24_MAX = 16777215
    return ( (rand() << 9) + (rand() >> 6) ) / (float)0x01000000;
}


[例] 產生在選定範圍均勻分佈的浮點亂數

# 產生 0 ~ 7777777的整數亂數: n = (int)( 7777778 * rand24() )
# 產生 -2.5 ~ 2.5 的浮點亂數: x = ( rand24() - 1 ) * 5
# 產生   a  ~  b  的浮點亂數: x = rand24() * ( b - a ) + a
==

[5] 產生特殊分佈的亂數

這邊我們以 frand()函數 表示 範圍為0~小於1的浮點數 uniform random number
frand() 可以是上例的rand24() 或其他方式得到的亂數

# 高斯分佈(常態分佈)亂數 http://en.wikipedia.org/wiki/Normal_distribution

  *產生平均值μ=0 標準差平方σ^2=1 的分佈

     Gaussian0_rand = sqrt( -2 * log( frand() ) ) * sin( PI * frand() )

     使用2次frand()亂數產生高斯亂數。需要注意的是當第1個 frand() = 0 時,
     會出現log(0)的數學錯誤,因此在使用上需做修正。可以用if來判斷,或是
     將 log( frand() ) 改寫成 log( frand() + min_float )
     min_float 是指 32bits 或 64bits 浮點數中最小的正浮點數。

  *產生平均值μ 標準差σ的分佈

     Gaussian_rand = Gaussian0_rand * σ + μ
==
# 其他分佈

如果要做出特殊形狀分佈的亂數,只要那個形狀你有辦法積分,「大概」就可以
「簡單」的從 uniform rand# 轉成該函數的形狀

│f(x)                       p                     b
│         ◢◣            ∫ f(x)dx = frand() * ∫ f(x)dx
│   ◢◣◢██◣            a                     a
│ ◢██████◣
├──────────>        解方程式得到 p = g( frand() )
   a       p      b

p就是新的亂數,其分佈應該是如你所願。

[例] f(x) = C , 從a積到b。 解: p = frand() * (b-a) + a  (是否似曾相識!!)

[例] f(x) = x , 從a積到b。 解: p = sqrt( frand() * (b^2 - a^2) + a^2 )
==
以上的簡單介紹相信在一般作業上的使用已經足夠。

由於內建的亂數是偽亂數,可預測性高,

萬萬別使用在對於安全性或隨機性要求很高的商業行為或是學術研究

有需求的人再自行去研究吧

http://en.wikipedia.org/wiki/Random_number_generation

另外,RAND_MAX的值隨著編譯器的種類會有很大差別,使用上述擴大亂數範圍

的簡單函數時記得先確認自己RAND_MAX的值再加以改寫,以免出現不明錯誤....

重新設定Visual Studio 2005預設開發設定

安裝玩VS 2005後,第一次啟動會問你要用C#、c++等等哪一種語言的開發設定。

如果未來想要改變之前的設定的話,可以透過「工具」->「匯入和匯出設定」-> 「重設所有設定」 來調整。

StarDict 免費的字典軟體

官方網站:
http://stardict.sourceforge.net/
發音功能:
http://prdownloads.sourceforge.net/stardict/WyabdcRealPeopleTTS.tar.bz2?download
用解壓縮軟體把它解壓縮到 C:\Program files\StarDict\ 底下。
繁體中文字典檔:
http://stardict.sourceforge.net/Dictionaries_zh_TW.php

visio檔(*.vsd)轉成pdf,切除不必要的空白

切除pdf中不必要的空白,adobe acrobat可以做得到。
不過只要修改visio中的設定,這個功能也做得到。
MS Visio -> 檔案 -> 頁面設定 -> 紙張大小 -> 請選擇「大小符合繪圖內容」
這樣就可以去除多餘的空白了。
更多詳情請參考:
http://jenming.info/blog/2008/03/07/latex-visio-to-eps/

在dll(Dynamic Link Library)中進行debug

可以使用OutputDebugString函式:
詳細用法請參考網址:http://msdn2.microsoft.com/en-us/library/aa363362(VS.85).aspx
事實上我平常很少寫dll程式,所以也不常用此作法。
 OutputDebugString輸出的字串可以透過DebugView 程式來擷取(如果我沒記錯的話)

Linux Kernel Compile Note

make menuconfig
make clean
make bzImage
make modules
make modules_install
cp /usr/src/linux-2.6.14.2/System.map /boot/System.map-2.6.14-2
/sbin/mkinitrd </boot/initrd-版本> <版本>   //鳥哥少說這一步
cp 移動新核心到 /boot 裡面去
vi /boot/grub/menu.lst  //加入新的開機選項
reboot

檸檬酸與小蘇打產生二氧化碳的計算

首先,這個計算我不敢保證正確性,因為我距離高中化學已經好幾年了。
順道一提,據說汽水瓶可以承受7大氣壓的壓力。
保守起見,我是計算4大氣壓的式子。

小蘇打NaHCO3 分子量:84
檸檬酸CH2(COOH)COH(COOH)CH2(COOH) 分子量:192
小蘇打產生二氧化碳公式:H++HCO3- -> H2O+CO2
因為檸檬酸是三質子酸,所以檸檬酸所需的莫耳數為小蘇打的1/3

接著計算在2L汽水瓶中,產生4 atm的大氣壓,需要多少CO227C)。
設加入200g的水,所以只剩下1.8L的空間。
PV=NRT
4×1.8=N×0.0821×300
N=0.292326431 mole
所以需要0.292326431 mole的小蘇打 24.5554202
以及0.292326431/3=0.0974421437 mole的檸檬酸  18.7088916

Linux Kernel Module

做一下筆記:

The Linux Kernel Module Programming Guide
http://www.tldp.org/LDP/lkmpg/2.6/html/
Linux Loadable Kernel Module HOWTO
http://www.tldp.org/HOWTO/Module-HOWTO/

Linux下常用壓縮格式的壓縮與解壓方法

文章出處:
http://www.21ds.net/article/31/369
.tar
解包: tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(註:tar是打包,不是壓縮!)
---------------------------------------------
.gz
解壓1:gunzip FileName.gz
解壓2:gzip -d FileName.gz
壓縮:gzip FileName
.tar.gz
解壓:tar zxvf FileName.tar.gz
壓縮:tar zcvf FileName.tar.gz DirName
---------------------------------------------
.bz2
解壓1:bzip2 -d FileName.bz2
解壓2:bunzip2 FileName.bz2
壓縮: bzip2 -z FileName
.tar.bz2
解壓:tar jxvf FileName.tar.bz2
壓縮:tar jcvf FileName.tar.bz2 DirName
---------------------------------------------
.bz
解壓1:bzip2 -d FileName.bz
解壓2:bunzip2 FileName.bz
壓縮:未知
.tar.bz
解壓:tar jxvf FileName.tar.bz
壓縮:未知
---------------------------------------------
.Z
解壓:uncompress FileName.Z
壓縮:compress FileName
.tar.Z
解壓:tar Zxvf FileName.tar.Z
壓縮:tar Zcvf FileName.tar.Z DirName
---------------------------------------------
.tgz
解壓:tar zxvf FileName.tgz
壓縮:未知
.tar.tgz
解壓:tar zxvf FileName.tar.tgz
壓縮:tar zcvf FileName.tar.tgz FileName
---------------------------------------------
.zip
解壓:unzip FileName.zip
壓縮:zip FileName.zip DirName
---------------------------------------------
.rar
解壓:rar a FileName.rar
壓縮:r ar e FileName.rar


rar請到:http://www.rarsoft.com/download.htm 下載!
解壓後請將rar_static拷貝到/usr/bin目錄(其他由$PATH環境變量指定的目錄也可以):
[root@www2 tmp]# cp rar_static /usr/bin/rar
---------------------------------------------
.lha
解壓:lha -e FileName.lha
壓縮:lha -a FileName.lha FileName

lha請到:http://www.infor.kanazawa-it.ac.jp/.../lhaunix/下載!
>解壓後請將lha拷貝到/usr/bin目錄(其他由$PATH環境變量指定的目錄也可以):
[root@www2 tmp]# cp lha /usr/bin/
---------------------------------------------
.rpm
解包:rpm2cpio FileName.rpm | cpio -div
---------------------------------------------
.tar .tgz .tar.gz .tar.Z .tar.bz .tar.bz2 .zip .cpio .rpm .deb .slp .arj .rar .ace .lha .lzh
.lzx .lzs .arc .sda .sfx .lnx .zoo .cab .kar .cpt .pit .sit .sea
解壓:sEx x FileName.*
壓縮:sEx a FileName.* FileName

sEx只是調用相關程序,本身並無壓縮、解壓功能,請注意!
sEx請到: http://sourceforge.net/projects/sex下載!
解壓後請將sEx拷貝到/usr/bin目錄(其他由$PATH環境變量指定的目錄也可以):
[root@www2 tmp]# cp sEx /usr/bin/


參考文獻:Linux 文件壓縮工具指南
(其實看幫助是最好的方法,一般各個命令都可以用「--help」參數得到常用使用方法!)
發佈人:會游泳的魚 來自:LinuxByte

設定IPv6 router advertisement

這是我在Fedora core 7上的設定流程。

設定過程如下:

要用root權限!!

1. 打開「/etc/sysconfig/network」檔案,加入新的一行「IPV6FORWARDING=yes」

2. 重開機

3. 在命令列打入「yum install radvd 」來安裝radvd

4. 在命令列打入「ifconfig eth0 inet6 add 2002:610:1e28:1::1」來設定網卡
的IPv6 位址

5. 打開「/etc/radvd.conf」檔案,加入如下的設定檔:
interface eth0
{
AdvLinkMTU 1480;
AdvSendAdvert on;
prefix 2002:610:1e28:1::1/64
{
};
};

6. 使用「/usr/sbin/radvd」指令來啟動radvd
使用「killall radvd」指令來關閉radvd

error while loading shared libraries的解決方法

執行程式時,如此遇到像下列這種錯誤: 

./tests: error while loading shared libraries: xxx.so.0:cannot open shared object file: No such file or directory

那就表示系統不知道xxx.so 放在哪個目錄下。

這個時候就要在/etc/ld.so.conf中加入xxx.so所在的目錄。
 一般而言,有很多so檔會在/usr/local/lib這個目錄下,所以在/etc/ld.so.conf中加入/usr/local/lib這一行,可以解決此問題。

將 /etc/ld.so.conf存檔後,還要執行「/sbin/ldconfig –v」來更新一下才會生效。

新竹水族館

文章出處:
http://www.guppytaiwan.com/viewthread.php?tid=116315&extra=&page=1

整體評價不錯的----七彩(名雅水族,已經倒了)

優點:飼料、燈具、水族器具平均便宜。

心得:燈具價位與網路價位差不多,小型燈具推薦,老闆定的價位屬於比較厚道合理。


網路評價不佳的---旭海

優點:魚缸便宜、店面大

心得:旭海因為魚品不佳、耗材漁具價位偏高(有些超黑),但是魚缸的價位的確無話可
說,一些基本缸的價位比平均店家還低。

#有看到大約80快的水草夾(不鏽鋼),可以看看
#最近旭海有特惠活動,某些商品打折下來還算可以(大約網路價加上高一點的運費),可以參考看看。
#之前淡水龍蝦的價位大約同等於網路價(比較大隻的)

評價優良的---冰藍色

優點:魚品優良

心得:冰藍色的魚屬於較高價位,但是管理與品質的的確不錯,不過飼料實在,價位合理。(狗狗很好玩XD)
不花錢去那邊看魚摸狗也不錯。


評價普通的---極深

優點:燈光充足....

心得:整體價位不算便宜,但是魚隻品質比旭海好,無品系孔雀魚分類清楚,鬥魚有PK,
此外極深有賣"翻車魚"....(某次看到某位爸爸指著球魚對小孩說:這就是翻車魚啦...笑)


評價一般的---名將

優點:水草便宜

心得:由於位於旭海與聖亞附近,水草(平價水草)的價位的確比聖亞和黑店旭海便宜,此
外會有可愛的小孩幫你拿水草、抓魚,還不錯啦XD。


評價待商榷---聖亞

優點:重新開幕、魚可自撈

心得:由於之前的"火燒魚"(火災)事件使得聖亞重新開幕,店的感覺比之前明亮寬敞,
由於旁邊就是旭海,可以兩家比較看看。


評價OK的---美奇

優點:老闆會教養魚新手,不會急著賺錢。

心得:以魚隻品質來說還算OK,鬥魚有時可以挖到寶,但是讓我覺得不錯的是,老闆遇到
養魚的新手會教養水,飼料不要餵太多,換水的方法,還有等水養好以後再買魚,雖
然是偶然看到,不過讓我給他評價加分很多,其次那邊有水草的光線需求CO2需求
酸鹼需求的簡介,這點也很不錯。


很好吃的---HI-Q

優點:冰品蠻好吃的

心得:位置約民權路上(風城和曙光女中的中間... ),那家主打免換水系統藥劑之類的,感覺
賣魚是其次,不過去了幾次,魚隻狀態還算不錯。



評價超優的---大樹賣場

優點:便宜囉XD

心得:位置大約是,中山路與四維路交叉口附近,全國加油站旁,不過裡面的水族用具也不便
宜就是了,目前有知道的是60元的茶葉夾(當水草夾用)、25寬口醬菜罐、20傳
統醬菜罐(大潤發楠亞店那邊有一家10圓商店的是15塊)。
(冰藍色大大:中山路四維路口...快到北大路了...台塑石油隔壁)

魚客隆~未考察
藍海~考察不祥
店名忘記~有空去過在放上來


先寫到這裡囉,下次再繼續補充。

給想養魚又不想花太多錢的建議

整理:
魚缸---旭海18*15*13=49元(或是79、99的魚缸)
燈具---七彩130特價小夾燈(沒記錯的話)
外掛---一分錢還是一分貨,可能推薦聖亞120的外掛

如此依來套缸基本就已經出來了,300~350元以內,比起外面賣的套缸還算是便宜的。

我來補充一下,以下是我個人逛過的感覺:
經國路旭海:
水草不怎樣,魚也不怎樣,器材有點貴。不過造景用的石頭,這家好像比較多,不過貴不貴我不清楚。另外,這家有正妹店員 XD。
中華路極深:
水草不怎樣,魚況ok,這家有賣海水魚,雖然我沒有在玩海水缸。器材也是有點貴。
中華路奇美:
魚況、水草都有點糟糕,去過一次就不會想去了。這家有賣很多的龍魚。
學府路美奇:
我不知道為什麼有家叫"奇美"、有家叫"美奇"。
不過,這是我逛過的水族館中,水草顧的最好的一家,魚況也ok,我常跟這家店買魚,沒出過什麼問題。但是這家的器材也是比較貴了些。
學府路上揚:
以前名雅的水族館,不過名雅換老闆後,該水族館也跟著換名字。我覺得這家老闆人不錯,不像是純粹的商人,他會有一些良心的推薦。可惜的是,老闆娘很愛推銷 東西,這是一點小缺點。前一陣子去的時候,他的器材有打折,很便宜,最近有沒有打折我就不清楚了。另外可惜的是,這家店面很小,一下就逛完了。

對水

 文章出處:
http://www.guppytaiwan.com/viewthread.php?tid=197768&highlight=%E5%B0%8D%E6%B0%B4


下魚必須注意的重點 :
魚要下缸前.把魚袋打開.找個大一點容器.把魚倒進去
找2條風管一條接打氣.一條接上調節閥.以每秒2~3滴的方式對水(抽的就是.魚要下的缸子內的水).對滿一倍的量
把水倒出一半的量(留下約原本還沒對水的量)
再把調節閥開大一點點.用流的速度對水(比滴流稍大一點).對滿一倍後.
再倒一半掉(此時水已經跟缸裡很相近了)
再加大對水量一次.一倍滿以後
連同容器的水跟魚.就可一起下缸了(倒下去就好了)
這樣雖然有點麻煩..但是魚這樣很容易適應水.及有效對溫
比較不容易中白點.也比較快有體色.至於魚缸被抽出的水.也同樣以滴流的方式補足就可以
我不太用水穩及硝化菌這些東西...................喜歡天然的
但是這些東西可以應急.如果真的認為需要添加.就加吧
個人的經驗:這些東西不會傷魚.我只要有加.其實都一定是超量
提供你們參考看看一旦水穩.魚穩.魚要倒都很難
切記:新魚下缸.在水還不是百分百穩的狀況下.魚少量餵食即可
       約下魚後一星期再正常餵食.其間也不要換水.這樣應該就魚爽.人看也爽啦
       再來要換水.就看個人啦.每天.2天.一星期...........................你高興就好
換水把握一個原則:滴流就好啦
參考看看~~~祝養魚愉快

我的作法與此作法稍微有一點不同
在對水完畢後,我會將魚撈起來,放入魚缸內。
我並不會將水族館的水加入原魚缸中,避免不必要的傳染病。

新手設水草缸時間序懶人包

這篇文章是yarus發表於ptt的 Aquarium版   
 
這是突發奇想!!

想說按照設缸步驟寫下每個時間點該做的事,應該會有最直接的幫助
也歡迎大家補完


物品清單    必備--缸 45 or 60cm
                  過濾器(圓桶為佳 小圓桶亦可 濾材可自行替換)
                  燈  1L水配0.6W光  白光就OK了
                  基肥 底沙 (嫌貴可以考慮天然水草缸)
                  水草夾&剪
                  水草
                  溫度計

            選配--定時器 (自動開關燈好方便)
                  風扇 (降溫用)
                  加溫控溫器具(天冷預防氣溫劇烈變化用 請先試車)
                  各式沉木 造景石 裝飾物


前制作業    規畫造景
            魚缸清洗&裝滿水3天不會漏水
            沉木吐色造景石各式造景物清洗完畢
            全新過濾器清洗&試車除去塑膠味
            徹底清洗底沙(黑土除外)
            各式器材確定可運行

第一天      放沉木 造景石 基肥&底沙(5cm即可)
            植栽植物(棉花一定要去除 螺 老葉看的見也去除 可先放些水方便植栽)
            放水(墊個塑膠袋防止衝亂底沙)
            架各式器材&運行

第二天      定時開燈2hr(開燈時間自行視水草條件調配 只能少不能多)

第三天      換1/3水

第五天      定時開燈4hr(開燈時間自行視水草條件調配)

第六天      換1/3水

第八天      定時開燈6hr(開燈時間自行視水草條件調配)

第九天      換1/3水

第十天      水質是否白濁? 是 繼續等
            否 可放些除藻&工具魚蝦  量只能極少
            (只建議 小隻大和沼蝦&女王燈 蝦45cm標準缸 1-2隻就夠了
             女王燈除油墨 45cm標準缸 2隻應該差不多)

第十一天    定時開燈8hr(開燈時間自行視水草條件調配)

第十七天    吸底&滴流換水1/4(7天一週期 視情況需要順便刷壁藻)

第十八天    開始少量進魚(只能進有口碑水族館的魚)
            2日之後餵食  之後每次餵食20秒內吃完  每天最多3次
            每次進魚日期隔7天
            切記不能高密度養殖

附註:所有的水須經過曝氣

      新手魚缸size至少45cm,不過60cm較佳,在大下去也不好整理

      開燈方式可考慮cccssszzz版友推文,大抵上原則是初期開燈時間少,之後慢慢增加
      這沒有一定

      新手剛入門東西不需用太好 等到實力與經驗累積之後再自行視有無需要替換即可

自配水草 NPK 主肥

詳情看這個網站吧!
http://blog.sina.com.tw/paludarium/article.php?pbgid=40898&entryid=449843
我化學都忘光光了 = =a

C#呼叫外部程式

在C/C++中,我常用system()來呼叫外部程式。
 C#也有類似的作法,可以參考System.Diagnostics.Process類別說明。
 http://msdn2.microsoft.com/zh-tw/library/system.diagnostics.process(VS.80).aspx

網址上的範例已經寫得很清楚了,所以我不用再寫範例了。 
 
其實在C++中,還可以呼叫Win32 API
ShellExec 來啟動外部程式。
不過這個函數我沒有用過。
 

2011年5月22日 星期日

Lenovo Thinkpad X201i 在休眠會嚴重消耗電池電力的解法

因為thinkpad預設有啟動wake on lan的功能,所以網路卡在休眠的情況下,並沒有關閉,還是持續在監聽網路封包。

要解決這個耗電問題,要進行以下三個步驟:

1. 進入bios把wake on lan功能關閉


2. 在lenovo power manager中的電源計畫 裡面有個"允許喚醒計時器"也停用。還有無線配階卡以及PCI express改成高度省電

3. 在cmd下輸入 powercfg -devicequery wake_armed 會發現網路卡、滑鼠、modem都被
允許可以喚醒電腦,所以要去裝置管理員中 把這三個裝置的喚醒電腦功能取消掉

附帶一提,網路上有查到,有些thinkpad機型會耗電的問題是bios的bug,要更新到最新的bios,說不定也可以解決耗電問題。

2011年5月21日 星期六

藻類總整理

這邊有圖 :
http://www.uwants.com/viewthread.php?tid=3917048&extra=page%3D1
內文有更詳盡的說明。

綠水
症狀: 整個水都是綠色的
發因: 換水水中有胞子加上無機氮濃度太高
好發: 下雨期後/時換水或新缸
治療:
1. 殺菌燈(速效)
2. 換水,減光(需約1周,但易復發)
3. 等待周期結束(約1個月,但易復發)

綠塵藻
症狀: 壁上一層綠的,但很好刮(手指輕摸就掉), 回復速度快(刮完一天又滿了)
發因: 換水有胞子/水中營養過高(不確定是哪一種)
好發: 下雨期後/時換水,或新缸使用舊黑土(新黑土則多綠水)
治療:
1. 刮除後開殺菌燈(約2~4天)
2. 包報紙封缸(約5~7天,但易復發)
3. 等待周期結束(約1.5~2個月,但易復發)

藍綠藻
症狀: 覆蓋一層薄膜狀藍綠色的物質,有很濃的土臭味
發因: 無機氮濃度過低, 有機物過多
好發: 新缸延用舊黑土設缸, 胞子多由換水/魚/草帶入
治療:
1. 增加NO3的供應,換水後添加(試過有效!!)
2. 吸除+換水(不大有效,需要1~2周)
3. 紅黴素(速效但傷過濾系統)
4. TBS黑毛剋星(不大有效)
P.S. 用舊黑土一定要搭配原來的就有的活的濾材. 因為設新缸用舊黑土
但又換全新的濾材都會出現很多有的沒的藻類

黑毛藻
症狀: 像刷子或水彩筆一樣短而放射狀的毛藻,有綠色,褐色,灰色,黑色都有
發因: CO2濃度太低 + CO2濃度變化太大
好發: 非黑土新缸, 光照/CO2改變(CO2拿去灌時還繼續開燈)
治療:
1. 手動刮除
2. Excel 局部治療(1~2天)
3. Excel overdose治療(7~14天)
4. 避光+TBS黑毛殺手(7~14天,同歸于禁...orz)
5. 飛狐(沒啥用)
預防:
1. 避免過度光照(不要用太強的光照相對小的缸)
2. 沒事多打CO2, 採用溶解率好的溶解設備
P.S 黑毛一但長起來就死不了,除非自己刮掉.所以要預防重於治療

褐藻
症狀: 褐色的薄膜/斑點藻
發因: 光太弱, 矽酸過高?(以我的經驗只要光弱,不管什麼水的魚缸都會長,矽酸這個
      條件對台灣水族界來說已經不是限制因子)
好發: 純養魚缸/弱光小缸
治療: ㄋㄐ一隻.......(就吃素的鯰科鼠魚,如小精靈)
P.S, 和黑毛相反,這種藻好來好去,我都不大鳥就是了....
不過要注意時間久了褐藻會硬到要動用刮刀才能去掉

綠毛藻
症狀: 分散的短毛狀藻, 常在缸壁或水草上
發因: 有機分解不完全(無特定引發之物質)
好發: 換洗過濾器後, 或是擾動淺層底沙後(如拔迷你矮), 很久不換水
治療: 吸底沙+換水
P.S這種藻類不是很常見,見到也沒有速成法,就是換水+吸底沙就沒了,換越多死越快

綠絲藻
症狀: 長絲狀的藻類, 常纏在水草上(尤其是莫思)
發因: 水流過弱(主因), 水中營養太多(無特定引發物質)
好發: 水流弱的缸子
治療: 目前無有效的方法
P.S. 絲藻有兩種,一種是有點像翡翠一樣翠綠色,放在手上搓可以輕易弄斷搓爛的
這種就很好清,只要水流夠,就不大容易有, 即使有了大和米蝦/黑殼蝦也吃的乾淨
另一種像水棉一樣很軔的,這種誰都不會吃,飛狐小精靈蝦子鉛筆都不鳥
有可能紅脊蝦會吃,不過機會不大. 遇到第二種我不是整包莫絲丟掉,就是翻缸.
不過總之水流夠的話這兩種都很難出現,除非新進的草已經有付著好的絲藻存在了

綠斑藻
症狀: 圓點狀綠色的藻類,很硬,要用到信用卡類的硬物才能刮除
發因: 磷酸鹽過低
好發: 不常下肥的缸子(如陰性草缸)
治療: 增加NPK肥料的量
P.S. 綠斑藻和絲狀藻一樣,是和水草營養需求很類似的高等藻類
比較幸運的是,綠斑藻加重液肥就會消失

鹿角藻
症狀: 分枝狀黑色的藻,長的有點像石花菜或小的海帶芽,多附在水草老葉
發因: 無機氮濃度過高+CO2濃度過低
好發: 舊黑土缸/底抽缸/NPK缸
治療: 換水+吸底沙(約1~2周)
P.S. 這種藻類比較少見,通常換水+吸底沙就能移掉
等到系統穩定後就不大容易看到了

毛氈藻
症狀: 分枝狀綠色線藻,但是比絲藻硬,整根有分枝不彎曲(有點像莫思)
發因: 水中營養過低
好發: 不常下肥的缸子, 貧養的缸子
P.S 這種藻類也不大常見. 這也是和水草需求類似的缸子. 若是魚養的少
或是不常下肥的缸子比較容易出現. 通常肥料恢復正常後就不在出現

藻類防治重點總合:
1. 水源: 水塔,自來水水質報告, 天候都要考量. 若可以用個活性碳和PP做初步的濾
         水是更好
2. CO2: 在對調整pH, 水草營養, 無機自營菌的營養而言, CO2是很重要的.
        反正很便宜,只要魚不浮頭, 就多打一些
3. 過濾系統(包含底沙): 盡量換水吸走底沙中的有機渣渣,並改以無機營養來養育水草
   圓桶則能不動就不動,大約1~2年用原缸水漂洗一次濾材. 若是換水頻繁的
   (3~7天換一次水並吸底沙),則要改為8~12個月洗一次圓桶
 
綠斑藻更詳細的說明:
可考慮使用 K2HPO4 或 KH2PO4 來增加水中的磷酸濃度,
瑞典的 Dusko Bojic 認為將磷酸控制在 0.3~0.5 ppm 能有效的抑制綠斑藻,
但根據我自己使用德國 sera 磷酸測試工具的紀錄來看,
當水族缸的磷酸超過 1 ppm 以上,綠斑藻就不再出現了。
相信這個差距應是水質測試工具誤差所致。
無論如何,
我們可以將綠斑藻視為水中磷酸濃度的「指標生物」。
如果水中磷酸濃度調高以後綠斑藻依舊不斷出現,
那麼 CO2 也得注意一下才是。
 
 
http://i39.photobucket.com/albums/e176/paludarium/Nutriteints/algae.jpg
這裡有一張很清楚的圖表。
 

幫助水草生長的二氧化碳供應器(酸鹼反應)

文章出自
http://blog.yam.com/flyindeath/article/7790359

這個感覺更有趣 XD

幫助水草生長的二氧化碳供應器(發酵法)

這篇文章的出處:
http://www.wretch.cc/blog/elusiveboy&article_id=1766425

看起來很炫

我改天就來試試看 XD

魚缸大小與所能養的魚類數量

以下資訊來自---熱帶魚飼養法與繁殖,渡邊哲夫著-綜合出版社出版


魚缸尺寸(CM) 容量(L)                建議飼養魚的數量(隻)

                             小型魚(3~4cm)  中型魚(6~8cm)   大型魚(10cm前後)

30*20*26        13          10~15          2~4              ******

39*20*30        20          15~20          4~6              ******

45*24*30        25          20~25          4~6              ******

45*30*30        35          20~30          4~6              ******

60*30*30        45          30~40          5~10               3~4

60*30*36        55          30~40          5~10               3~4

60*30*40        60          30~40          5~10               3~4

75*30*45        80         100~150        10~20              8~10

75*40*45       110         100~150        10~20              8~10

75*45*45       120         150~200        20~30             10~15
 75*30*45        80         100~150        10~20              8~10

75*40*45       110         100~150        10~20              8~10

75*45*45       120         150~200        20~30             10~15

90*30*45       100         200~250        20~30             10~15

90*40*45       135         200~250        20~30             15~20

90*45*45       150         200~300        30~40             15~20

PHP許蓋功問題

這是一個很古老的問題
在產生SQL query之前,要先以addslashes函示處理。
 然後從資料庫取出資料時,要先以stripslashes函示來處理。

順道一提,php有提供iconv函示,可以轉換字串的編碼型態。
 像是這樣用:
echo iconv("big5", "UTF-8", "This is a test.");

Fedora 系統微調

這是我找到解決一些小問題的方法(針對fedora core 7)
1. 用ssh登入會遇到中文亂碼的問題:
Sol: 在/etc/sysconfig/i18n 中,將zh_TW.UTF8改成zh_TW.Big5

2. 用vsftpd架站。在ftp client登入時,會遇到「500 OOPS: cannot change directory ...」。
Sol:只要打入「 /usr/sbin/setsebool -P ftp_home_dir 1」就可以解決,這似乎是SELINUX的問題。
 值得注意的是vsftpd會預設讓匿名使用者登入,記得關閉此選項。

3.  sshd預設允許root登入。
Sol: 在/etc/ssh/sshd_config中,將PermitRootLogin改成no,並將註解移除。

4. 簡單防駭設定:
Sol:在/etc/hosts.allow加入「sshd: 140.113.0.0/255.255.0.0: Allow」
在/etc/hosts.deny加入「sshd: ALL: Deny」
就可以限制非交大的IP來try密碼。

5. root權限下,使用vi會沒有顏色
Sol:打開/etc/profile.d/vim.sh
把「[ `//usr/bin/id -u` -le 100 ] && return」 註解掉,並且登出後登入。

6. 網路開機Wake on Lan,還要改BIOS
$ ethtool eth0
Settings for eth0:
Supports Wake-on: g
Wake-on: d
Link detected: yes

主要要看 Wake-on 這一項,要設成 g:

$ ethtool -s eth0 wol g

Visual C++的.NET Socket

怕忘記還是記一下吧。
// 這是使用應用程式精靈所產生之 VC++ 應用程式專案的主專案檔。

#include "stdafx.h"
#include<iostream>
using namespace std;
#using <mscorlib.dll>

using namespace System;
using namespace System::IO;
using namespace System::Net;
using namespace System::Net::Sockets;
using namespace System::Collections;
int _tmain()
{
    try
    {
        Socket *clientSocket;
        Socket* serverSocket = new Socket(AddressFamily::InterNetwork,SocketType::Stream, ProtocolType::Tcp) ;
      
        IPAddress *serverIP = IPAddress::Parse("140.113.131.47") ;//指定local ip

        String* Port = "1234" ;//聆聽的port
      
        IPEndPoint* serverhost = new IPEndPoint(serverIP, Int32::Parse(Port)) ;

        serverSocket->Bind(serverhost) ;

        serverSocket->Listen(50) ;

        unsigned char recvbytes __gc[]=new unsigned char __gc[1024];
        unsigned char sendbytes __gc[]=new unsigned char __gc[1024];

        while (true)
        {
            clientSocket = serverSocket->Accept() ;

            int len = clientSocket->Receive(recvbytes) ;//從client接收字串
            char buffer[1024];
            for(int i=0;i<len;i++)
                buffer[i]=recvbytes[i];//轉換成char型態後,比較好處理

            cout<<"Server收到:"<<buffer<<endl;

            //收到php的回應後,想做什麼都可以,接著送出回應

            char* reply="科科";

            for(int i=0;i<strlen(reply);i++)//要傳送資料前,必須將char轉換成unsigned char __gc的形式
                sendbytes[i]=reply[i];
          
            clientSocket->Send(sendbytes,strlen(reply),SocketFlags::None);//傳送資料就呼叫此函數,記得第二個參數是傳送的長度,一定要填對!

            clientSocket->Close();//關閉socket
        }

    }
    catch (Exception *ex)
    {
        Console::WriteLine(ex->ToString()) ;
    }
    return 0;
}

C++ char*、TCHAR*、wxString三種字串轉換

char*->TCHAR*
        char *ansii_string = "some text";
        int size = strlen(ansii_string);
        TCHAR unicode_string[30];
        mbstowcs(unicode_string, ansii_string, size+1);

TCHAR*->char*
        TCHAR* unicode_string=_T("unicode string");
        int size= wcslen(unicode_string);
        char ansi_string[30];
        wcstombs(ansi_string, unicode_string, size+1);

wxString->char*
        wxString wx_string=_T("wx string");
        char ansi_string[30];
        strcpy(ansi_string,wx_string.mb_str());

char*->wxString
        char *ansii_string = "some text";
        wxString wx_string(ansii_string,wxConvUTF8);

wxString->TCHAR*
        wxString wx_string=_T("wx string");
        TCHAR wchar_string[30];
        wcscpy(wchar_string,wx_string.wc_str());

TCHAR*->wxString
        TCHAR *tchar_string = _T("some text");
        wxString wx_string(tchar_string,wxConvUTF8);

C++測量時間

有windows及linux兩種作法:
windows:
#include <windows.h>
#include <iostream>
using namespace std;

void main(){
    LARGE_INTEGER m_liPerfFreq={0};
    QueryPerformanceFrequency(&m_liPerfFreq);
    
    LARGE_INTEGER m_liPerfStart={0};
    QueryPerformanceCounter(&m_liPerfStart);

    for(int i=0; i< 100; i++)
              cout << i << endl;

    LARGE_INTEGER liPerfNow={0};
    QueryPerformanceCounter(&liPerfNow);

    int time=( ((liPerfNow.QuadPart - m_liPerfStart.QuadPart) * 1000)/m_liPerfFreq.QuadPart);

    cout<<"執行時間:"<<time<<" ms"<<endl;
}
linux:
timeval tim;
           gettimeofday(&tim, NULL);
             double t1=tim.tv_sec+(tim.tv_usec/1000000.0);
             do_something_long();
             gettimeofday(&tim, NULL);
             double t2=tim.tv_sec+(tim.tv_usec/1000000.0);
             printf("%.6lf seconds elapsed\n", t2-t1);

C#產生Word檔

先加入這幾行
using Microsoft.Office.Interop.Word;
using System.Reflection;
using Word = Microsoft.Office.Interop.Word;
using Office = Microsoft.Office.Core;
using System.Diagnostics;

然後先這樣:
           Word.ApplicationClass oWord = new Word.ApplicationClass();
            oWord.Visible = true;
            Word.Documents oDocs = oWord.Documents;
            object oFile = "c:\\doc1.doc";

            object oMissing = System.Reflection.Missing.Value;
            Word._Document oDoc = oDocs.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);

 處理完之後再這樣:
             oDoc.SaveAs(ref oFile, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing,ref oMissing,ref oMissing,
ref oMissing,ref oMissing,ref oMissing,ref oMissing,ref oMissing,
ref oMissing);
            // Quit Word and clean up.
            oDoc.Close(ref oMissing, ref oMissing, ref oMissing);
            System.Runtime.InteropServices.Marshal.ReleaseComObject (oDoc);
            oDoc = null;
            System.Runtime.InteropServices.Marshal.ReleaseComObject (oDocs);
            oDocs = null;
            oWord.Quit(ref oMissing, ref oMissing, ref oMissing);
            System.Runtime.InteropServices.Marshal.ReleaseComObject (oWord);
            oWord = null;

簡單的C++ HTTP library

http://www.codeproject.com/internet/amhttputils.asp

簡單使用如下

    CAmHttpSocket http;
    char* s = http.GetPage(_T("http://www.google.com.tw"));
    cout<<s<<endl;

C# 產生Excel檔

更多資訊可以參考:
http://www.codeproject.com/office/fasterexcelaccesstoc.asp
以及:
http://www.microsoft.com/downloads/details.aspx?familyid=3C9A983A-AC14-4125-8BA0-D36D67E0F4AD&displaylang=en

 這似乎是讀檔:
 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Office.Interop.Excel;
//using Excel;
namespace cs_using_excel
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
string Path = @"c:\test.xls";
// initialize the Excel Application class
Microsoft.Office.Interop.Excel.ApplicationClass app = new ApplicationClass();
// create the workbook object by opening the excel file.

Microsoft.Office.Interop.Excel.Workbook workBook = app.Workbooks.Open(Path,
0,
true,
5,
"",
"",
true,
Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,
"\t",
false,
false,
0,
true,
1,
0);
// get the active worksheet using sheet name or active sheet
Microsoft.Office.Interop.Excel.Worksheet workSheet = (Microsoft.Office.Interop.Excel.Worksheet)workBook.ActiveSheet;
int index = 0;
// This row,column index should be changed as per your need.
// i.e. which cell in the excel you are interesting to read.
object rowIndex = 2;
object colIndex1 = 1;
object colIndex2 = 2;
try
{
while (((Microsoft.Office.Interop.Excel.Range)workSheet.Cells[rowIndex, colIndex1]).Value2 != null)
{
rowIndex = 2 + index;
string firstName = ((Microsoft.Office.Interop.Excel.Range)workSheet.Cells[rowIndex, colIndex1]).Value2.ToString();
string lastName = ((Microsoft.Office.Interop.Excel.Range)workSheet.Cells[rowIndex, colIndex2]).Value2.ToString();
Console.WriteLine("Name : {0},{1} ", firstName, lastName);
index++;
}
}
catch (Exception ex)
{
app.Quit();
Console.WriteLine(ex.Message);
}
}
}
}
這似乎是寫檔:
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
using System.Collections;
using Microsoft.Office.Interop.Excel;
using System.Reflection;

namespace test_cs_console
{
    class Program
    {
        public static void Main(string[] args)
        {

            #region Uncomment the code in this region to run the TimedAccess class
            // TimedAccess timedAccess = new TimedAccess();
            // timedAccess.Read();
            // return;
            #endregion

            ApplicationClass app = new ApplicationClass();
            Workbook book = null;
            Worksheet sheet = null;
            Range range = null;

            try
            {
                app.Visible = false;
                app.ScreenUpdating = false;
                app.DisplayAlerts = false;

                string execPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);

                //book = app.Workbooks.Open(execPath + @"\..\..\Book1.xls", Missing.Value, Missing.Value, Missing.Value
                //                                  , Missing.Value, Missing.Value, Missing.Value, Missing.Value
                //                                 , Missing.Value, Missing.Value, Missing.Value, Missing.Value
                //                                , Missing.Value, Missing.Value, Missing.Value);
                book = app.Workbooks.Add(Missing.Value);
                sheet = (Worksheet)book.Worksheets[1];

                sheet.get_Range("A1", "A1").Value2="啦啦";

                book.SaveAs(execPath + @"\..\..\test.xls", Missing.Value, Missing.Value, Missing.Value
                                                  , Missing.Value, Missing.Value, XlSaveAsAccessMode.xlNoChange, Missing.Value
                                                 , Missing.Value, Missing.Value, Missing.Value, Missing.Value);

            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            finally
            {
                range = null;
                sheet = null;
                if (book != null)
                    book.Close(false, Missing.Value, Missing.Value);
                book = null;
                if (app != null)
                    app.Quit();
                app = null;
            }

        }
    }
}