星期五, 12月 27, 2013

一年一度的模型板聖誕大亂鬥開箱~

聖誕快樂!

雖然發這篇文章的時候已經過了聖誕節了,不過這份禮物可是這個節日專屬的阿!
如同去年第一次參加的時候一樣的想法。
怎麼會有這麼有趣的活動呢,板主真是太有心啦! 感謝板主大人的用心~
讓我總是有光明正大的藉口可以到模型店去逛個三五天(誤!)
然後挑一個我覺得最酷的反派,(當然價錢也要合格才行)準備寄出。

一定有人要問,為什麼是反派呢? (眾: 沒有沒有~我們不想問! 快開~)
那是因為正派主角機,大家如果喜歡的話一定都已經買了不少了。
而有很多有特色的反派常常會想買,但是預算又不足,所以我就來成全大家的心意吧! 哈哈哈。 (眾: 最後還是把這堆廢話說完了~ 該開箱了吧! )

今年的禮物剛好是聖誕節當天收到唷 ^_^
當天真是令人忍不住要快點下班阿~
一回家就看到桌上一個紅色的聖誕外表的便利箱,好有過節的氣氛!
(哇咧~為什麼我去的郵局都不給我這種美妙的箱子阿!?)
立馬請來了一隻手上拿著光刀的小伙子過來幫忙開個包~

沒錯!就是你~ 背上有叉叉的乞丐批風鋼彈~把你的刀奉獻給我吧!
不免俗的還是要來一張外表,不過我找不到什麼東西可以遮資訊的,只好拿張72集航海王裡的廣告和一捲膠帶來檔檔。看得出來...我的桌子真的有點亂,右上角是1/144的W重武裝素組...的腳。

開包了開包了...等等,我的開包手哪去了? 怎麼一打開就要我迎接三八婦女節? 這個報紙有年代囉~

還好~還知道要用光刀幫我開卡片~ 喔 有露出卡通風格的卡片!

喔~ 是很有特色的台灣景點立體卡片~

很快就來開主包啦~ 叉叉鋼!上阿~ 喔~ 露出了驚人的價錢~ 這跟我送的 歐歐武士道 價錢不相上下阿!

噹啷~ 最終開盒~ 竟然是是MG很威的...暴風鋼彈HG!
卡片上寫著聖誕快樂的祝賀~寄來的板友也說這是他Seed裡最喜歡的鋼彈 希望我還沒有收藏到這隻~ 真是太感人啦! 祝你也收到好禮物阿~ 屏東縣的板友~ 聖誕快樂!!!

話說禮物的重點不在於大小,在於心意阿~ 看來今年過年又有模型可以打發時間了! (謎: 你不是有一堆山積嗎?) 搞不好組完後又想要收Seed五小強了! 真是個過節歡樂又推坑的好活動阿~哈哈 (荷包: 我鼠定了...)
再過幾天就要過年囉,祝各位都能找到陪你跨過 13~14 (一生一世)的好模型阿! (宅)
~新年快樂~

星期二, 11月 26, 2013

Heuristic Algorithm

在畢業面試上,口試委員問了我一句:你這些方法都是heuristic的嗎?
我猶豫了許久...因為我並不知道這個英文字的意思是什麼...
某一個學長幫我回答了,他說...是的,我們的方法都是。
但因為其他的問題更切中我的題目和主題,所以我就把這題給忘了。
雖然我事後有查過字典,它是"啟發式"的意思,但什麼是啟發式演算法...我還是沒去了解。
今天偶然又想起而google了, heuristic algorithm。
我終於在wiki裡面找到,我可以理解的答案了。

"電腦科學的兩大基礎目標,就是發現可證明執行效率良好且可得最佳解或次佳解的演算法。而啟發式演算法則試圖一次提供一個或全部目標。 例如它常能發現很不錯的解,但也沒辦法證明它不會得到較壞的解;它通常可在合理時間解出答案,但也沒辦法知道它是否每次都可以這樣的速度求解。"

雖然底下還有一連串的說明和演算法的式子但是這樣的說明其實就已經蠻夠的了。
另外一個特色是,這種方式的演算,不一定能找到最佳解,而且還有可能找到不存在或是更差的解。這要端看是什麼樣的資料結構和設計。不過再一般的real data上通常可以在合理的時間內找到不錯的解。萬用啟發式演算法 (metaheuristic),通常使用亂數搜尋技巧。他們可以應用在非常廣泛的問題上,但不能保證解的效率。

總之,小小的發現又解決了一個問題。其實在電腦演算上,data mining不算是真正的演算法開發,反而比較接近解決真實問題所需要的技術。畢業後到現在,對於所接觸到的不同領域的人對data mining的看法,感覺就像真的是heuristic algorithm。總是不能給出最佳解,問題不一定能解成,倒是產生了更多讓專家們疑惑的假設與規則。
或許當成是一個問題的解對data mining來講太嚴苛,還不如把他當成是一個發掘可能解的好工具會比較貼切點。 ^_^

reference:
WIKI "啟發式搜索"

星期四, 10月 24, 2013

Tomcat+JSP+Connection Pool on MySQL database

【目的】建立Connection Pool,不用每一頁JSP開頭都要建立一次Database的Connection。網頁大量被存取的時候不會因為建立連結而嚴重變慢。

最基本的JSP教學,都會教你怎麼連資料庫。
所以下面這些CODE應該大家都不漠生。
(如果很漠生的話...快點找個JSP教學網惡補一下吧 XD)

Class.forName("org.gjt.mm.mysql.Driver"); //mysql jdbc driver可能不一樣的jdbc package會不太一樣。
//不過.jar可以用zip打開來看,哪一個package都可以看一下driver是在哪個路徑。好~這不是本篇重點 XD
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/[資料庫的名字]?user=[資料庫使用者]&password=[密碼]);

至此就是開好MySQL的Connection了。
不過如果每一頁都這樣開,會讓使用時頁與頁的轉換頻繁的網站在建立Connection所需花費計算負擔很重
所以就要建立一個Connection Pool,先把Connections建好存起來,要用的時候拿出來用。
Tomcat剛好有這個功能,就讓我們實作一下吧。
首先,你要先準備好這幾樣東西:

1. 【MySQL JDBC Driver】 這個可以去MySQL的網站下載。應該裡面會有一個.jar檔,沒錯就是它!
2. 【MySQL Driver Name】 就像我剛剛說的,不知道路徑的話...用ZIP打開第一個.jar檔看看他的Driver.class在哪吧~
3. 【資料庫的名字】 你都會用mysql了,總要知道你要連哪一個資料庫吧。
4. 【資料庫使用者】 至少要有個能從本機端控制資料的帳號
5. 【密碼】 帳號的密碼

好了,準備好了,接下來還有四步就能完成了。
基本上最新版的Tomcat本身就有Connection Pool的設計,所以我們就是要去啟動那個設計。
(你可以看看你的[tomcat目錄]/lib裡面有沒有tomcat-dbcp.jar,有的話就沒問題啦~ dbcp應該是DataBaseConnectionPool的縮寫吧~)
找到了嗎?很好...那就...

STEP 1. 把【MySQL JDBC Driver】丟到[tomcat目錄]/lib裡面
STEP 2. 找[tomcat目錄]/conf 裡面context.xml,並用記事本(notepad)打開它。在<Context></Context>之間加入這段設定:


<Resource name="jdbc/【資料庫的名字】"
auth="Container"
type="javax.sql.DataSource"
username="【資料庫使用者】"
password="【密碼】"
driverClassName="【MySQL Driver Name】"
url="jdbc:mysql://localhost:3306/【資料庫的名字】"
maxActive="15"
maxIdle="3"
maxWait="10000" />


STEP 3. 到你的[tomcat目錄]/webapps裡面去,你的網站應該是放在[tomcat目錄]/webapps/[你的APP的名字],但這名字不重要,哈哈。
你如果都沒有使用任何設定,那目錄下可能只有.jsp檔。不過請建立一個資料夾叫WEB-INF。如果有這個資料夾的話就好說了,請找資料夾裡的web.xml檔(沒有的話,也請自己建立一個空白的檔案),用notepad打開填入這些:

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true" version="2.4">
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/【資料庫的名字】</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth> </resource-ref>
</web-app>


STEP 4. 最後一步就是,到你的JSP去,將你原先connection的部份改成下面這樣:

Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/【資料庫的名字】");
Connection con = ds.getConnection();

忘了說,他要import的東西有這些:

<%@page import="java.sql.*"%>
<%@page import="javax.sql.*"%>
<%@page import="javax.naming.*"%>
<%@page import="javax.servlet.*"%>
<%@page import="javax.servlet.http.*"%>

STEP 5... 哈哈,我都說只有四步而以,所以已經完成啦。快點重開Tomcat,確定資料庫是可以連的。然後試試你的JSP會不會動吧。
這只是最基本的設定和介紹,如果要更進階的,網路上有很多資料可以找找。

超簡單教學,咱們下次見~ ^_^ ~

星期日, 9月 15, 2013

想法與觀念

雖然知道不可能每一個人的想法和觀念都會一樣,
但也不至於完全把對方的講法理解成反面的意思。 

成長的過程一路走來,覺得自己還不算是個難相處的人。
縱使講話有時候會讓人覺得發笑、無厘頭、無聊、不耐煩,
但總不至於讓人覺得生氣、無法溝通或是憎惡...吧!? 

可是進入愛情的世界就很麻煩了,所有的小事都會被放大。
並不一定要到男女朋友的等級,只要對方放太多期待在你身上。
所有的小事,無論是好事還是壞事...都會被無限放大。
這樣的情況總是能讓人有理說不清,百口莫辯。
到時並不是要講理講到贏,而是要想辦法把對方哄得開開心心事情才會落幕。
要是真的哄下去...絕對會像限入泥沼一般難以脫身
這大概就是傳說中的~愛丟咖慘系吧~
太...有難度了...身為高傲的阿宅...我真的不行阿~ 

當我朋友和家人應該會比較幸福吧~ 至少友情和親情我比較有信心。
 愛情...我真的不擅長 XD

ps. 真的不是故意不如家人的意,不交女友啦~是我真的沒有能力和女生好好溝通阿~ 至少暫時不行,不過...我還是會努力的啦 囧

星期三, 6月 19, 2013

TOMCAT聽兩個PORT與增加執行用記憶體

【聽兩個PORT】
在這邊我的基本作用是,將兩個PORT都視為可以連線的PORT。
因為TOMCAT預設的PORT是8080,但如果你是單純以TOMCAT為主的架站方式。
你就要強迫使用者,記下有8080的URL。
而一般瀏灠器不打PORT的情況下就是預設的80
所以最簡單的做法,就是打該TOMCAT目錄下conf/server.xml
並找到8080那段設定,會有點像這樣。
< Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
於是乎就再給他加一段
< Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
這樣就好啦,下次你的網址忘記打8080,也是一樣會連到一樣的地方囉。

【增加TOMCAT記憶體】
TOMCAT畢竟也是跑在JVM上的,打開目錄底下bin/catalina.bat (linux的話就是.sh)
找到JAVA_OPTS,然後在設定最後加上
set JAVA_OPTS=%JAVA_OPTS% -Xms512m -Xmx512m
加在哪呢?
大概就是最後一次出現JAVA_OPTS之後吧,至少表示到那邊該設定的都設定完了

以上就是簡單的設定,雖然guid line裡面都有,但是還是寫出來備查一下。

星期五, 3月 29, 2013

Cross validation and evolutionary learning

今天要寫兩個可以讓,比用猜的好一點點的分類器可以創造出更好的分類機制。
很簡單就是...多創造幾個這種爛爛的分類器。
讓他們可以每一個分類器都只專心的專注在某一個小解空間的學習就好。
以下講bagging和boosting,這兩種的功夫都下在training data的sampling上面。
所以簡單的講就是跟據參考空間(也就是training data/也就是已知的資料)
去創造出很多不一樣的小分類器。
達到只靠一個分類器所產生不出來的"好/勘用"的分類結果。
(以下我用machine learning的觀點來寫,我寫training data就是指已知的部份)

Bagging aggregating (bootstrap)
bootstrap是bagging的一種,一次丟掉training data裡面的一筆資料。
bagging則是比較大器一點,一次圈選training data裡面的一群資料當成training data
創造一個子分類器。利用多個子分類器的投票。票多者是結果,用來分類一個未知資料。

boosting
這個比較有趣一點,先假設N筆training data每一個的權重都是1/N。然後製造一個分類器。
做內部測試(inner testing)得到錯誤的case。再下一輪則是將這些錯誤的case權重提高。
再做一個新的分類器。依此類推。這樣就可以得到很多分類器。然後再給與這些分類器權重,分類方式則是各分類器的結果乘上權重後一起考慮結果。