偶爾用一次 太容易忘了 XD
http://www.foobar2000.org/components/index.html
Monkey's Audio decoding support
下載解壓縮至 foobar2000\components 目錄下
偶爾用一次 太容易忘了 XD
http://www.foobar2000.org/components/index.html
Monkey's Audio decoding support
下載解壓縮至 foobar2000\components 目錄下
"顯示數字
set nu
"現在環境的編碼
set encoding=utf-8
"檔案編碼的依序
set fileencodings=big5,utf-8
"檔案存檔時的編碼
set fileencoding=utf-8
"terminal encoding
set termencoding=big-5
"tab預設4格 把 tab 取代為空白
set expandtab
set softtabstop=4
set shiftwidth=4
結果是系統編碼的問題 Orz
真糟糕都快忘光光了 印象中以前灌完 FreeBSD 都會調一下
export LC_ALL=zh_TW.Big5 (相關動作 setenv LC_ALL zh_TW.Big5)
以下參考資料來自 http://freebsd.stu.edu.tw/zh-tut/zh-tut.html
3.15. 什麼是 locale ?
locale 是一組 C 程式語言處理自然語言(文字)的程式介面, 也可以簡單的說,
locale 就是一組 [地區性語言] 的資訊。由國家語言和各地習俗影響所決定的慣例
,或代表一個地理區域的定義所組成,這些慣例包含文字、日期、數字、貨幣格式和
排序等等。這代表著 locale 可讓程式的輸出可以直接反應地方區域性的文化。C 語
言的 locale 定義,分為下列各大類:
* LC_ALL 代表所有的 Locale
* LC_CTYPE 字元定義 (包含字元分類與轉換規則)
* LC_MESSAGES 訊息顯示
* LC_TIME 時間格式
* LC_NUMERIC 數字格式
* LC_MONETARY 貨幣格式
* LC_COLLATE 字母順序與特殊字元比較
其中與一般使用者息息相關的,是字元定義 (LC_CTYPE) 與訊息顯示 (LC_MESSAGES)
。LC_CTYPE 直接關係到某些字元或內碼在目前的 locale 下是否可列印?要如何轉
換字碼?對應到哪一個字?.... 等等。LC_MESSAGES 則關係到軟體的訊息輸出是不
是符合地域性,例如 :我們需要的是中文。而一個真正完整支援 locale 系統,
是當使用者在 shell prompt 下,直接設好環境變數後,則馬上就能切換到那個語言
了。例如:
% setenv LC_CTYPE zh_TW.Big5
locale 命名規則:語言_地區名.字元編碼名稱
設定 Locale 的字元定義為台灣地區的 Big5 繁體中文碼定義, 有了正確的 locale
的定義後,使得任何地區的語文,只要在加入適當的 locale data 之後,C Library
就能正確地處理軟體顯示訊息, 而我們使用的 [中文] 當然也不例外,而目前常用
的中文 locale data 就是 zh_TW.Big5,代表的就是中文語系(zh)台灣地區(TW) 使
用Big5編碼系統(Big5)。
<?
if( empty($_GET['u']) )
return;
class 叮叮噹噹 {
public static function getImageContent( $src_url ){
$host = "叮叮噹噹";
$fp = fsockopen( "叮叮噹噹" , 80, $errno, $errstr, 30);
if( !$fp ){
$mseg = $errst." (".$errno.")";
return ;
}else{
$host = "叮叮噹噹";
$target = strstr( substr( $src_url , strlen("http://") ) , "/" );
$filename = substr( $target , strrpos( $target , "/") );
$filename = substr( $filename , 1 );
$referer = "http://叮叮噹噹/";
$out = "GET ".$target." HTTP/1.1\r\n";
$out .= "Host: ".$host." \r\n";
$out .= "Referer: ".$referer." \r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
$content = "";
$inheader = 1;
while (!feof($fp)) {
$line = fgets($fp,1024);
if ($inheader && ( $line == "\n" || $line == "\r\n" ) ) {
$inheader = 0 ;
}else{
if ($inheader == 0) {
$content.=$line;
}
}
}
fclose($fp);
if( empty($content) )
return;
header("Content-Type: application/octet-stream");
header('Content-Disposition: inline; filename="'.$filename.'"');
echo $content;
}
}
}
叮叮噹噹::getImageContent( $_GET['u'] );
?>
Ctrl + v
接著把 ctrl 不放
但放開 v 改換按 m 就會產生 ^M 啦
同理於 ^@ = Ctrl + v -> Ctrl 繼續按著 但放開 v -> Ctrl + Shift + @
檔案內容:
@
@U:495410000
@ID:
@
@U:495410000
@ID:
@
@U:495410000
@ID:
...
最基本的格式是
@
@U:
@Name:
若想增加欄位成為
@
@U:
@Name:
@Info:
此時透過 vim 下的參數是
:%s/\n@\n/\n@Info:\n@\n/g
以此減少檔案內需要變動的資料數
但轉換後卻會出現擾人的'^@'符號
與 Randy 閒聊後發現 :%s/前面/後面/g 的"後面"中的'\n'會有問題
改成 '\r' 卻可以達到一樣想要的效果!
:%s/\n@\n/\r@Info:\r@\r/g
在此紀錄一下
有時偵測到 Key 時, 不想讓 Key 繼續蔓延下去使用, 即可考慮這個方式處理
function preventDefault(ev) {
if (ev.preventDefault){
ev.preventDefault();
}else if (ev.cancelBubble){
ev.cancelBubble = true;
}else{
ev.returnValue = false;
}
}
document.onkeydown=keyAtPost;
function keyAtPost(e){
var evt = window.event || e ;
var evt_key = evt.which != null ? evt.which : evt.keyCode ;
var GetDefine = 0 ;
if ( evt_key > 47 && evt_key < 58 ){ // 以數字鍵為例
switch( state_control ){
...
case STATE_INIT:
state_control = STATE_GO;
...
GetDefine = 1;
break;
...
}
}
if( GetDefine ) {
preventDefault(evt);
}
}
當 match 到一個自訂的狀態時,不想讓此鑑盤事件繼續蔓延到其他地方,好比如現在正在 textarea 時 把數字鍵當成特殊鍵使用,並且不想在 textarea 顯示數字時 可採用這種方式處理
--
在此感謝 Vexed 學長的教導 :D
夢別人不敢夢的夢,闖別人不敢走的泥濘大道
我們必須教導現在的學生,畢業後投入目前還不存在的工作...
使用根本還沒發明的科技...
解決我們從未想像過的問題。
美國前教育部長Richard Riley認為...
2010年最迫切需要的十種工作,在2004年時根本不存在。
任天堂光是在2002年就投資一億四千萬美金進行研發。
美國聯邦政府花在教育研發上的經費還不到一半。
根據估計,《紐約時報》一週所包含的資訊量...
比十八世紀一個人一生可能接觸到的資訊量還要多。
在中國,智商排名前四分之一的人...
比北美洲的總人口還要多。
對全世界老師的意義:他們的優秀學生,比我們所有的學生還要多。
今年4/16不是校慶補假,而是炸蝦節。
原由是有一位學妹(住竹軒)竟然在 NCTU_TALK 板上公然說要吃炸蝦,標題是「榕榕想吃炸蝦飯」,這就算了,還要別人送她吃,留下了寢電。就這樣,蹦出了一系列的文章,好比如「阿民想吃全家餐」、「大俠愛吃漢堡包」等的文章,至於最後有沒收到炸蝦飯?似乎也不能確定,只能說就蹦出了越來越多的文章。
其中一篇是一位學姐論述這件事,說真的同如我對交大女生的感受,有些人真的會自恃自己身在交大,一堆男生可供吃住!大概是這樣,也衍生出像我這種問題人,就是對女生有點……呵呵。不過,容容也有出來道歉,正所謂亡羊補牢,還算可以接受啦,只是到後來,就有人起哄要把這日當成炸蝦節,網宣都做出來了,還說要把學校的竹湖拿來養蝦,搞釣蝦烤蝦,甚至還說到成立農學院哩!想起來真的頗好笑的!
其中的高潮迭起,可真是令人無法一一道盡。讓我對交大又多了一份戀舊。
對了,下面這個推文也頗有感觸,哈。
2009 新增影音
Step 1 : 去找 FC6 的安裝檔案並燒成光碟吧!
Step 2 : 安裝 FC6, 簡單的步驟
Step 3 : 安裝完, 起動後, 進入設定部份. 防火牆設定; SELinux > Permissive ; 顯示, 音效, etc
Step 4 : 更新系統
使用 yum, 而 yum 預設就有安裝, 以 cmd mode 去編輯 /etc/yum.conf 設定檔
設定更新的來源, 可以提升更新的速度, 而義守大學是官方認可處
@ /etc/yum.conf, 增加下面兩段
[base]
name=Fedora Core $releasever - $basearch - Base
baseurl=http://ftp.isu.edu.tw/pub/Linux/Fedora/linux/core/$releasever/$basearch/os/
gpgcheck=0
[updates-released]
name=Fedora Core $releasever - $basearch - Released Updates
baseurl=http://ftp.isu.edu.tw/pub/Linux/Fedora/linux/core/updates/$releasever/$basearch/
gpgcheck=0
之後, 則可以以 cmd mode 來更新系統.
更新指令: yum update, 亦可使用 yum -y update, 即一堆回答都會答 yes
若使用指令時會出錯, 如:
Existing lock /var/run/yum.pid: another copy is running. Aborting.
即因為系統已有一隻在跑, 因此需要把那隻先停掉:
# chkconfig --level 35 yum-updatesd off
# service yum-updatesd stop
接下來則可以使用 yum -y update 囉
若安裝後的顯示畫面是 800x600, 想修改的話, 請到 [系統] > [管理] > [顯示] > [硬體] > 設定螢幕, 大概就可以解決囉
這種現在大部分是因為機器內有多個時鐘,而 FreeBSD 選錯時鐘囉!
執行 dmesg(8),檢查一下有 Timecounter 字串的那幾行。最後一行是FreeBSD 選用的,通常是 TSC。
# dmesg | grep Timecounter
Timecounter "i8254" frequency 1193182 Hz quality 0
Timecounter "ACPI-safe" frequency 3579545 Hz quality 1000
Timecounter "TSC" frequency 350796127 Hz quality 800
Timecounters tick every 1.000 msec
可以執行 sysctl(3) 看一下 kern.timecounter.hardware 這個值做確認。
# sysctl kern.timecounter.hardware
kern.timecounter.hardware: ACPI-safe
BIOS 可能在一些情形下會更改 TSC 的時脈--有時候是因為在使用電池工作時會更改處理器的速度,另外也有可能是進入了省電模 式,可是 FreeBSD 並不會察覺到這些調整,而會發生時間增加或是減少的情形。
在上面的例子當中,我們看到還有 TSC 這個時鐘可以選擇,執行 sysctl(3) 用手動的方式將這個值寫入 kern.timecounter.hardware 中。
# sysctl -w kern.timecounter.hardware=TSC
kern.timecounter.hardware: ACPI-safe -> TSC
這樣應該就可以保持正確的時間了。
如果要讓這個更改的動作再每次開機時自動執行,在 /etc/sysctl.conf 裏加入下面這行。
kern.timecounter.hardware=TSC
注意注意
* always pkgdb -F before upgrade
* always backup /var/db/pkg (好吧,我承認我每次都沒做)
選項
pkgname_glob pkg_glob(1)
-a 全部安裝的 packages
-A 每次 install 後要跑的指令
-b 把舊的 package 備份到 PKG_TMPDIR or TMPDIR (default /var/tmp)
-B build 前要跑的指令 (如果 fail 的話,那這個 port/package 會被略過)
要更新 gnome* 前先 cvs update
portupgrade -B 'cvs update' 'gnome*'
不知道
portupgrade -B 'ports_glob -M $(pwd) | (cd
../..; xargs cvs up)' slave/port
通通都更新,除了 interactive 的 ports
portupgrade -aB 'test ! `make -V IS_INTERACTIVE`'
-c 在 build 之前 clean (default)
-C 在 install 之後 clean (default)
-D 在 fetch/build 之前 distclean
-f 強迫更新一個要被 downgrade 或相同版本或在 pkgtools.conf 標記為 HOLD_PKGS
的 package
-F 只會把 distfiles 抓下來(如果加 -P 則是抓 packages)
-g 強迫更新 require 的 package 更新失敗的 package
-i interactive 就是會問你要不要的 (implies -v)
-I 把結果丟到 FILE 去
-L 把每一個 port build & install 結果丟到 PREFIX 去
存成::
-m 要 append 給 make(1) 的參數
-M 要 prepend 給 make(1) 的參數
-n 看看會幹些什麼事情 (implies -v, negates -i, -y)
-N 安裝新的 port/package 而且會先更新所有 require 的 packages
可以指定 portorigin glob
-o 指定 ORIGIN
-O 別做完整的 denendency check(如果跑之前有 pkgdb -F 那可以放心的用)
-p 在 install/upgrade 後生出 package,如果有指定到 dependent package
的話(like -r),那些也會生 package
-P 用 package,會去掃 PKG_PATH,找不到就 pkg_fetch 再不然就用 ports
-PP 堅持只用 package,不用 ports
-q 不要讀 $PREFIX/etc/pkgtools.conf
-r 把 depends on given ports 的 packages 也一起更新
比如說 -r png-* 的話,會把需要 png 的 packages 一起更新
-R 把 given ports 需要的 packages 也一起更新
比如說 -R kde3 的話,會把其他 kde3-* 的一起更新
-s 在需要 root 權限的時候執行 sudo
-S 取代 sudo(8) 的指令,例如 su root -c %s ''
-u 不要保留舊的 shared libraries
-v verbose output
-w 不要在 build 之前 clean
-W 不要在 install 之後 clean
-x 排除 match GLOB 的 packages
例如 portupgrade -rx XFree86 XFree86 會更新所有 depends on XFree86 的
packages,卻不更新 XFree86 本身
-y 所有問題通通回答 yes (implies -v, negates -n)
portuprade 流程
1. 沒給 -P 的話,跳到 4。否則 search PKG_PATH 看看有沒有新的 packages,
有找到的話,跳到 5。
2. 用 pkg_fetch(1) 去抓新的 packages 下來,如果是最新的話跳到 5。
如果給 -PP 但抓下來的 packages 比安裝的新(不一定是最新)的話,
也跳到 5。
3. 如果給 -PP 的話,停止作業。
4. build given package 相對應的 port。
5. 修 depends on given package 那些 packages 的 dependency。
6. save given package 的 +REQUIRED_BY。
7. 把 given package 用 pkg_create(1) 備份下來。
8. 把 given package 的 registration 檔案備份下來。
9. 強迫 uninstall given package,並保留 share libraries,
除非有指定 -u。
10. 安裝新的 port or package(看是 cond. 1 or 2 or 3)。
11. 如果安裝失敗,
11.1. 把 7. 備份的檔案還原。
11.2. 把 8. 備份的 registration 檔案還原。
11.3. 把 5. 修過的 dependency 還原。
12. 把 obsoleted 的 dependencies 移除。
13. 把 6. 備份的 +REQUIRED_BY 復原。.
14. 執行 portsclean -L 把重複的 share libraries 砍掉,
並且保留舊的 share libraries,詳情請見 portsclean(1)。
一些例子
o. portupgrade glib
更新 glib
o. portupgrade XFree86 -m '-DWANT_GGI' Mesa
傳 -DWANT_CGI 給 Mesa。
當 portupgrade 用在很多 packages 上面時,他會依照 dependency order 處理。
o. portupgrade -L /var/tmp/log. '*gnome*'
更新所有 GNOME packages,並 log 在 /var/tmp/log.::
o. portupgrade -Rpv sawfish
更新 sawfish 和所有 sawfish 需要的 packages
o. portupgrade -ri glib
更新 glib 和所有需要 glib 的 packages
o. portupgrade -rfx sdl sdl
更新/重安裝所有需要 sdl 的 packages 但不包含 sdl
o. portupgrade -f '<2001-09-20'
更新/重安裝所有在 2001/09/20 前安裝的 packages
o. portupgrade -fr png -x '>=png'
更新/重安裝所有在 png 前安裝且需要 png 的 packages
o. portupgrade -aFR
去 fetch 更新所有 packages 需要用的 distfiles
o. portupgrade -o print/ghostscript-afpl ghostscript-gnu
用 print/ghostscript-afpl 換掉 ghostscript-gnu
o. portupgrade -P glib
用 package 更新 glib
o. env PKG_PATH=/mnt/cdrom/packages/All portupgrade -anPP
用 CDROM 裡面的 packages 來進行大量更新
如果不想讓 portupgrade 去 fetch 不在 CDROM 的 packages 的話,
把 PKG_FETCH 設定為 /bin/false
小技巧
o. 在進行 binary uprage 後,請用 pkgdb -F 修一下 dependencies。
o. 透過網路進行大量更新 portupgrade -aPPR。
o. 如果懷疑 portupgrade 倒底會幹哪些事情的時候,請用 -n 和 -i,
也可以用 pkg_glob(1) 來看 glob patterns 到底會展開成什麼。
o. 為了讓更新更正確、更有效率,請愛有事沒事跑一跑 pkgdb -F,
每次 CVSup 更新完 ports tree 之後,portsdb -Uu,以確保 INDEX 跟 ports
tree 同步。
o. 可以用 portversion(1) 取代 pkg_version(1) 來檢查可以 upgrade 的
packages。portversion(1) 用法跟他一樣,而且比較快。
portversion -c 可以輸出給 portupgrade(1) 更新用的 script。
o. 可以用 pkg_deinstall(1) 取代 pkg_delete(1) 來移除 packages。
這其實是 pkg_delete(1) 的 wrapper,不過有些更好的特性,
比如說 recursive deinstall 或者保留 shared library。
o. 可以用 portsclean(1) 清理不需要的 distfiles、working、
舊的 shared libraries。
o. 可以用 portcvsweb(1) 來看看一個 port 的 change。
環境變數
這邊列出來 default 的值,不多做解釋。
PKG_DBDIR /var/db/pkg
PORTSDIR /usr/ports
PORTS_INDEX $PORTSDIR/INDEX
PORTS_DBDIR $PORTSDIR
PKG_TMPDIR
TMPDIR /var/tmp
PACKAGES $PORTSDIR/packages
PKG_PATH $PACKAGES/All
PKG_SUFX 定義在 bsd.port.mk 或 /etc/make.conf
PKGTOOLS_CONF $PREFIX/etc/pkgtools.conf
PORTUPGRADE 預設 portupgrade 的選項
SEE ALSO
pkg_add(1), pkg_deinstall(1), pkg_delete(1), pkg_glob(1), pkg_info(1),
pkg_sort(1), pkg_update(1), pkgdb(1), portcvsweb(1), ports_glob(1),
portsclean(1), portsdb(1), portversion(1), pkgtools.conf(5), ports(7)
BUGS
SUSP (^Z) 在 build/install 過程中沒有用。
有時候 database 會爛掉導致 pkgtools segmentation fault,這樣子的話,
用 pkgdb -fu 重新 build database 問題就可以解決。
From : BSD 討論版 @ 酷!學園, 2002/07/26 的文章對話
簡單的來說,系統一些硬體裝置大部分都是編進 kernel 的,然而,也有提供需要時再載入的方式,嘿,可以回想讀OS的心情喔!至於後者的使用方式,就稱為動態載入,因此,有些系統軟體安裝就會分成要編 kernel 或是採用動態載入啦,不過要留意的是,有些功能是限定編入 kernel 來使用的,需留意啦。
這篇是以前大三修交大資工計算機系統管理課程中的投影片,從中取出紀錄的過程。當時使用的 FreeBSD 4.10 左右的作業系統,在此當作個筆記記錄回憶啦。比較新的方式可參考:[FreeBSD] 安裝 FreeBSD 與系統更新
我習慣用光碟安裝,所以以 6.1 來說,就是去抓光碟啦
至於安裝的套件就選:
安裝完套件可以調的東西:
抓取更新系統的檔案:
記得寫一下 /etc/make.conf 檔
MASTER_SITE_OVERRIDE?= \
ftp://freebsd.csie.nctu.edu.tw/pub/distfiles/${DIST_SUBDIR}/\
ftp://ftp.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp2.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp3.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp4.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp5.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp7.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp8.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/
WITHOUT_X11=YES
更新步驟:
其他資訊
Note: This method of kernel building requires full source files. If you only installed the kernel source, use the traditional method.
Tip: By default, when you build a custom kernel, all kernel modules will be rebuilt as well. If you want to update a kernel faster or to build only custom modules, you should edit /etc/make.conf before starting to build the kernel:
MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfs
如果有任何錯誤的話:
上述的一些過程可以當作更新系統的方法,但有些部分不適用於已安裝好的系統,即已安裝於系統的軟體並不會得到更新,必需額外使用軟體來進行更新,這是以前的文章(用的是 cvsup ,現在大多改用 csup ):
安裝所需的軟體
cvsup
# cd /usr/ports/net/cvsup-without-gui && make install portupgrade
# cd /usr/ports/sysutils/portupgrade && make install 打這個指令讓才剛裝好的程式立即可以使用:
rehash cvsup 是個工具,她可以幫我們至 FreeBSD 站台更新 Source-Tree 及 Ports-Tree 回來您的主機中。portupgrade 是 FreeBSD 中升級以 PORTS 安裝的軟體的一個套件(必須是您更新 Ports-Tree 之後)。 更新 PORTS-Tree 且升級已安裝的軟體
取回「更新 PORTS-Tree的設定檔」cvsupfile-ports:
fetch ftp://ftp.tw.freebsd.org/pub/CVSup/cvsupfile-ports 依據 cvsupfile-ports 中的定義,至 CVSup 站臺更新 PORTS-Tree
cvsup -g -L 2 cvsupfile-ports 先重建您系統中 PORTS 的 INDEX 資料庫
這個部份恐需時甚久,而且會令你覺得是不是當機了,所以請耐心等候。
portsdb -Uu 再接著是修補程式間的關連性,才能正確並有效率的升級已安裝的軟體
pkgdb -F 為了以防萬一,我們先做個升級的假動作:
portupgrade -ayn 如果剛剛的升級測試都沒有問題,現在就可以正式來一遍了:
portupgrade -ay 你可以寫一個批次檔讓此程式來執行:
#!/bin/sh
cvsup -g -L 2 cvsupfile-ports
portsdb -Uu
pkgdb -F
portupgrade -ayn 更詳細的資訊,您可以
man portupgrade
依照自己的 CPU 的型態去作調整,即在 make.conf 中去編寫CPUTYPE。
取得自己的 CPU Type:
使用 extract 即下載並解壓縮,但不安裝。至於 CPUTYPE 可從 /usr/share/examples/etc/make.conf 找尋,不確定的話就透過上述步驟,去測看看哪個分數高,就是你的CPUTYPE啦,透過這簡單的調整,可以增進效能喔!
$pear_dir = 'lib/PEAR';
if(is_dir($pear_dir))
ini_set("include_path", ini_get("include_path") . PATH_SEPARATOR . $pear_dir);
require_once 'PEAR.php';
之前有認識的會常看股票,通常網路上是去某個很大的入口網站,但由於一次只能看一支股票,所以若同時要看很多股票時,就只能開很多個網頁來看,所以,我就藉機練了一下Javascript的啦,好處:寫好的程式就直接存成HTML檔,一般都可以在自己的電腦上執行就可使用啦!哈哈,不過我印象中有版權的東西若改變其排版似乎有違法的現象?所以,玩玩就好,別人還得靠廣告生活哩。
今天考完清大資工所,總算我的大學考試到了一個段落,至於會不會有學校可念,說真的我不敢期望!昨兒考完交大資工所後,心情很失落,實在是我最想進的學校還是宅宅大學,畢竟論起網路或學習資源來說,交大是首選,只是,似乎老天不怎眷顧?或許更該說,我的努力還不夠吧?反正若有機會備上任何一間學校,我會更加珍惜。 昨天考完後,心情幾番失落,有了很深刻的體悟,在此就稍微列下幾筆:
大四末,深感學校之資源與機會的廣闊,深深體會,原來我大學的小小成就,都是因為環境跟資源所付予的成果,若沒了環境,就沒了我!明瞭此事,開始看重研究所,畢竟在這之前,我對研究所的生活覺得只是像不斷地做專題的行為,隨後有學長稍微點到,還有學習新知識。
大五末,將進入第二十四個夏天,我驚覺自己人生的五分之一竟然是在大學渡過!當研究所考試不順之後,我發覺我的學習可能因此而停頓!或許去年某個人還差我一大截,但現在的他,在研究所少說也混了半年,而我在這年卻沒有進步!最深的體會,是對於硬體課程的學習,「沒有一間企業,會像學校那樣地教導!」最重要的是,有些課程所需的資源,不是一個人、一個普通的家庭可以負擔的!
因此!我打算利用所剩的幾個月的學生生活,好好地地將過去大學課程,覺得有意義但學習混水摸魚的課程,紮實地重新復習!儘管未來我可能從事的不是資訊業,但至少,我會保留對大學學習之路的感謝。
public class SocketServerTest implements java.lang.Runnable{
private int PORT = 52288;
private java.net.ServerSocket server = null;
private boolean shutdown = false;
public void run(){
try{
server = new java.net.ServerSocket(PORT);
try{
while(!shutdown){
java.net.Socket socket = server.accept();
try{
//非 140.113 就關掉
if( (( ((socket.getInetAddress()).getHostAddress()).substring(0,8)).compareTo("140.113.") != 0 ) ){
socket.close();
continue;
}
String datain = null;
java.io.BufferedReader in = new java.io.BufferedReader( new java.io.InputStreamReader( socket.getInputStream(),"UTF-8" ) );
datain = in.readLine();
}catch(java.net.SocketException e){
//socket關掉
}catch(java.lang.NullPointerException e){
//in.readLine()
}finally{
socket.close();
}
}
}catch(java.net.SocketException e){
//socket關掉
}finally{
server.close();
}
}catch(java.net.SocketException e){
//socket關掉
}catch(Exception e){
e.printStackTrace();
}
}
}
class dbMySQL{
final private String dbDriver = "com.mysql.jdbc.Driver";
public String dbAddress = null;
public String dbName = null;
public String dbUrl = null;
public String dbUser = null;
public String dbPasswd = null;
dbMySQL(String db_url,String db_name,String db_user,String db_passwd){
setupDB(db_url,db_name,db_user,db_passwd);
}
public void setupDB(String url,String dbname,String dbuser,String dbpasswd){
dbAddress = url;
setupDBUser(dbuser,dbpasswd);
setupDBName(dbname);
}
private void setupDBName(String dbname){
dbName = dbname;
//dbUrl = "jdbc:mysql://"+dbAddress+":3306/"+dbName+"?useUnicode=true&characterEncoding=Big5";
dbUrl = "jdbc:mysql://"+dbAddress+":3306/"+dbName+"?useUnicode=true&characterEncoding=utf-8";
}
private void setupDBUser(String dbuser,String dbpasswd){
dbUser = dbuser;dbPasswd = dbpasswd;
}
public java.sql.ResultSet SQLquery(String cmd){
try{
Class.forName(dbDriver);
java.sql.Connection con = java.sql.DriverManager.getConnection(dbUrl, dbUser, dbPasswd);
if(!con.isClosed()){
java.sql.PreparedStatement pstmt = con.prepareStatement(cmd);
java.sql.ResultSet rs = pstmt.executeQuery();
con.close();
return rs;
}
}catch(java.lang.ClassNotFoundException e){
e.printStackTrace();//Can't find: "+dbDriver+"
}catch(java.sql.SQLException e){
e.printStackTrace();
}
return null;
}
public String SQLupdate(String cmd){
try{
Class.forName(dbDriver);
java.sql.Connection con = java.sql.DriverManager.getConnection(dbUrl, dbUser, dbPasswd);
if(!con.isClosed()){
java.sql.PreparedStatement pstmt = con.prepareStatement(cmd);
pstmt.executeUpdate();
con.close();
return "OK";
}
}catch(java.lang.ClassNotFoundException e){
e.printStackTrace();
}catch(java.sql.SQLException e){
e.printStackTrace();
}
return "NO";
}
}
/* 使用方式
class Test{
private dbMySQL DB = null;
public Test(String db_url,String db_name,String db_user,String db_passwd){
DB = new dbMySQL(db_url,db_name,db_user,db_passwd);
DB.SQLupdate("DELETE From `MySQL_Table_Name`");
java.sql.ResultSet SQLrs =null;
SQLrs = DB.SQLquery("SELECT * FROM `MySQL_Table_Name`");
if(SQLrs != null){
while(SQLrs.next()){
//因為是用 UTF-8 存的, 所以讀出來要轉成 Big5
String data = new String( SQLrs.getString("欄位名字").getBytes(), "Big5");
}
}
}
}
*/
use DBI;
$dbh = DBI->connect('dbi:mysql:database=DM;host=140.113.55.66','5566','7788');
$sql = "select count(*) from `Games` Where `GameID`='55667788'";
$sth = $dbh->prepare($sql);
$sth->execute || die "Could not execute SQL statement ... maybe invalid? \n\n $sql \n";
#output database results
#while (@row=$sth->fetchrow_array){ print "@row\n" }
@row=$sth->fetchrow_array;
print "@row[1]\n";
# 檔案位置
$wwwshow="/home/user/public_html/test.htm";
# 開檔失敗,則會換成執行後面那段話
open(FD_In,$wwwshow) || die "Can't open file: $!" ;
while( defined($LineIn =) ){
# 若有出現溫度跟F的符號,進行切字的笨手段
if($LineIn =~ /°F/){
# get thermometer F;
@tmp01Line = split($splittoken01_a,$LineIn);
@tmp02Line = split($splittoken01_b,$tmp01Line[1]);
$thermometerF{$location[$i]} = $tmp02Line[0];
$thermometerC{$location[$i]} = ($thermometerF{$location[$i]} - 32) * 5 / 9;
# get thermometer Feel Like F;
@tmp01Line = split($splittoken02_a,$LineIn);
@tmp02Line = split($splittoken02_b,$tmp01Line[1]);
$thermometerFeelLikeF{$location[$i]} = $tmp02Line[0];
$thermometerFeelLikeC{$location[$i]} = ($thermometerFeelLikeF{$location[$i]} - 32) * 5 / 9;
# get weather
@tmp01Line = split($splittoken03_a,$beLine);
@tmp02Line = split($splittoken03_b,$tmp01Line[1]);
$weather{$location[$i]} = $tmp02Line[0];
}elsif($LineIn =~ /$splittoken04/){
@tmp01Line = split($splittoken04_a,$LineIn);
@tmp02Line = split($splittoken04_b,$tmp01Line[1]);
$updatetime{$location[$i]} = $tmp02Line[0];
# last 指的就是 C/C++ 中的 break
last;
}
$beLine = $LineIn;
}
close(FD_In);
# 把檔案刪掉
unlink($wwwshow);
# 開檔準備寫入
open(WEATHER,">$wwwshow") || die "Can't open file: $!" ;
print WEATHER "Weather Information\n";
close(WEATHER);
「限你三十秒內回來!」,一位與大一學弟同宿的女生這般地在走樓間說著!從我身旁疾速奔過的男生,卻面帶著微笑…
『你覺得我們什麼時候會禿頭呢?』,兩位剛從外頭買好宵夜的學弟,在走道上這般的細說…
『這真的是死會活標啊』、「那個人有像飛輪海一樣帥嗎?」、『要怎樣打他?』、「用手打就好啦」、『馬的,那個人竟然讓我同學帶綠帽』、「夠嘴砲,還真是無敵的加濃砲!若他成功我要去拜他為師!」,一群在洗澡間聊著關於其中一人的戀情,似乎遭受到第三者的侵襲!然而其女友卻十分相信第三者的言語…
「那間怎看A片不關門啊?」、『什麼!竟然沒找我…』…
「那個高鐵紀念票,我有買耶,要不要一起去搭啊?」、『我目前只剩南程還沒搭過了說…』…