分類
Database

FreeBSD上mysql的效能追蹤

最近因為有台主機的 mysql cpu 異常變高許多, 所以要來進行查詢問題所在.

因為 mysql 沒有像 mssql 的 sql profiler 那麼方便的工具, 所以利用 mysql 本身的 log 來進行, 也就是 slow query log 這個功能, 步驟如下:

1. 先將 /etc/my.cnf 中的 [mysqld] 內多加入下面資料:

log-slow-queries = /var/log/slow-query.log #slow query記錄檔的位置
long_query_time = 2 #query執行超過2秒時才記錄

2. 重啟 mysql 服務, 指令如下:

/usr/local/etc/rc.d/mysql-server restart

3. 執行一陣子後, 就可以看看該 log 檔內的 query , 接下來就是針對這些 query 來調整效能

以上是在 FreeBSD 環境下的作法. (其他環境其實也類似)

其實執行時間長不一定是效率不好, 不過若是常常發生的查詢是需要長時間的, 就有改善的必要, 簡單地說, 就是若一個查詢需要 5秒, 但一天跑不到 10次, 那根本不用管他, 不過若一個查詢需要 0.02 秒, 但一天要用到數萬次, 即使從 0.02 改善到 0.015 就會有很明顯的效能改善, 所以要看發生的頻率及所花費執行的時間, 平衡來看.

另外, 若是該 log 沒有產出, 記得權限要給對, 因為是 mysql service account 去執行寫入的動作, 就算沒有任何 log 也會有 mysql 啟動的資訊, 不會沒有任何產出的 log.

參考資料:
http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html
http://blog.lansea-chu.com/index.php/archives/238
http://homeserver.com.tw/mysql/mysql%E7%9A%84%E6%9F%A5%E8%A9%A2%E6%99%82%E9%96%93log-slow-queries/
http://ezkuan.blogspot.com/2010/05/freebsd-mysql.html

分類
好用軟體

WEB版Google地圖街景導航

這個是個蠻好玩的應用, 由於全台的街景服務已經有蠻大的覆蓋率了, 所以用這樣的方式來模擬導航駕駛, 相信會讓不熟地址路況的人更容易上路.

這個算是整合 google maps api 出來的一個應用, 網址在:

http://gmaps-samples.googlecode.com/svn/trunk/streetview/streetview_directions.html

進來之後, 其實也就是簡單地輸入出發地地址, 目的地地址就可以按下 route 產生導航, 並利用 drive 按鈕來模擬駕駛的街景.

例如輸入台北市政府到總統府地址, 台北市市府路1號, 台北市重慶南路一段122號, 按下 route 後, 產生如下畫面:

接下來可以點 driver 或是右下的導航點, 都可以更新上方的街景到所在位置, 也可以直接操作上方的街景, 來進行前後移動(如原來的 street view一樣的操作方式), 這樣就可以模擬了.

嫌開的速度太慢? 可以調整一下 speed 到 fast 會快一點, 不過這個導航是個安全駕駛, 所以即使是 fast 也還是很慢!

分類
好用軟體

線上學習科學的互動活網站PhET

這篇文章要介紹的是一個 PhET 線上教學網站.
以往我們在學習物理, 化學, 地球科學等科學時, 看文字教材遠不如看影片或是互動活教材, 這個網站提供了線上(也有離線版本), 分門別類整理好的互動式活教材, 而且還有繁體中文. 先來看看首頁:

http://phet.colorado.edu/zh_TW/

開始用就直接按下”開始玩教學”, 若是要下載離線版本可以點右下方的”完整執行”後, 即可下載教學離線版本. 由於所有的教材都是使用 flash 及 java 在瀏覽器環境下使用, 所以可以很方便地在各種作業系統及瀏覽器上使用, 方便又好用.

點入開始玩教學後, 左邊看到的是完整的分類, 右邊則是目前分類項目的內容(預設在最新):
而且還有區分年級的方式整理, 讓小朋友也能找到適合的教材, 點下”依年級區分教學主題:
有區分為國小, 國中, 高中, 大學幾個分類, 來點個國小的看看吧, 選了裡面的”繩波”:

繩波的連結: http://phet.colorado.edu/sims/wave-on-a-string/wave-on-a-string_zh_TW.html

用互動的方式來呈現的教學, 相信最容易也記憶最深, 大家可以好好利用, 趁暑假, 可以讓自己或小朋友多學一些科學觀念.

繼續閱讀:
http://blog.soft.idv.tw/?p=989

分類
好用軟體

Firefox5來了

是的, Firefox 5 來了, 記得沒多久前才 Firefox 4, 而且也就才 4.0.1 而已, Firefox 5 已經於之前更新的 Firefox 4.0.1 上提出新的版本更新提示, 於是又再更新到 Firefox 5, 目前的版本是 5.0

不知道為什麼更新的這麼快, 而且這次更新的主要功能似乎不多, 或許是希望能藉由更新版本數字來活絡一下這個社群持續的求新求快求變的特質吧.

但是這次更新, 有一些 plugin (或稱 extension) 又不能用了, 像是 google 的 toolbar 就是個列子, 不過這些小問題應該很快會獲得解決.

隨著瀏覽器版本的更新, developer 們與 designer 也就必須快速地來適應這個相容性的考驗, 不過也正因為如此, 也讓標準能更標準, 大家能依循著標準來開發及設計, 這樣也是件好事!

你應該開始在網路上說謊嗎?

你應該開始在網路上說謊嗎?
原文在這裡: http://pccillin.pixnet.net/blog/post/31750516

其實應該換個方式說更容易理解一點, 你是否在網路上洩露太多隱私呢?

如同文章內容提到的, 你不太會和朋友提到自己的薪水, 但為什麼要在網路的資料上揭露呢? 其實這件事的本質回歸到一件事, 隱私的重要.

有時候, 或許會覺得這些資料不是太敏感或太重要, 或是少部分少部分的沒什麼影響, 但是有心人士(像是詐騙集團, 或是賣個人資料的公司), 因為有供給有需求的狀況下, 是很值得去挖出來賣的, 所以很可能拼拼湊湊得出來一定的資料.

說到這裡, 在原文內容也提到, 像是寵物名字叫多吉, 這些資料在網路上看得到, 但若落入有心人士眼裡, 是可以藉由這樣的方式來把帳號密碼重設而取得, 無論是要獲取個資, 或是取得該用戶的內容(文中提及的是裸照), 對用戶來說, 都是很大的損失.

適度的保護自己, 把不必要的個人資料保留不填, 在網路上也要謹言慎行, 這些事不是都在實體社會上一樣的嗎? 別把網路想得好像是另一個世界, 更可怕的是網路的資料是存放及保持時間更久呢.

也請參考之前的舊文章: https://diary.tw/archives/724

分類
Javascript

Javascript已強大到可以執行linux

這篇是在 zdnet 看到的:

http://www.zdnet.com.tw/news/software/0,2000085678,20149826,00.htm

利用 javascript 模擬 pc 執行 linux , 因為 javascript 的處理能力已經相對強大了, 可以跑模擬 pc 後執行 linux, 網址在這裡:

http://bellard.org/jslinux/

這樣看起來, 一般 develper 使用的 javascript 還真是用不了他的功能的 1/10 吧, 看來, 愈來愈強大的 javascript engine 可以做更多更多的事了!

分類
.net

C# Operator ??

今天看到這個 operator ?? , 雖然可以了解前後文他的功能, 不過還真是第一次看到.

於是查了一下, 在 msdn 上的說明:

http://msdn.microsoft.com/en-us/library/ms173224.aspx

這個運算子的應用情境如下:

string mytest = "";
if(Request.QueryString["test"]==null){
  mytest = "";
}else{
  mytest = Request.QueryString["test"];
}

若在取得變數時, 會有 null 的狀況, 又要給定預設值時, 可以利用上面程式碼, 不過是不是又臭又長呢? 可以利用這個運算子 ?? 來簡化, 如下:

string mytest = Request.QueryString["test"] ?? "";

當然, 和三元運算子的寫法同義, 只是上面的 ?? 更精簡一些:

string mytest = Request.QueryString["test"] == null ? "" :  Request.QueryString["test"];

相關閱讀:
http://demo.tc/Post/414

分類
Database

MySQL的Log

在 MySQL 運行時, 若想要了解執行時期, 對資料庫下達指令的狀況, 可以利用 my.ini 中的參數來達成, 在 [mysqld] 中多加一行 log=路徑/檔名, 再重起服務即可.

這個目的對於在追蹤應用程式執行指令很有幫助, 不過若是繁忙系統下, 很可能會有大量的資料, 而難以閱讀, 建議使用在開發環境, 再執行對應的 application 記錄下來的 log 就會單純許多, 以方便追蹤.

在 MSSQL 中可以利用 SQL Profiler 來達成, 不過 MySQL 無法過濾那麼多資訊, 只能整個記錄下來. 記得這些操作對於系統效能都會有一定的衝擊, 開起來之後, 記得要關掉, 否則將會影響效能.

另外還有一個好用的參數, 就是一樣在 [mysqld] 中, 加一行 log_slow_queries=路徑/檔名, 這個將會讓系統記錄執行時間較長的 query, 也方便做效能調校及追蹤使用, 預設是執行時間超過 10秒的會被記錄下來, 參數是 long_query_time 可以參考:

http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_long_query_time

這兩種方式分別做完整記錄及長時查詢記錄, 對於想要了解資料庫執行時期的問題及效能調校, 都可以提供不少幫忙.

相關閱讀:
http://blog.wabow.com/archives/54

分類
Javascript

表單上傳檔案取得檔名問題

在前端網頁上, 若要上傳檔案, 是利用一個 <input type=file>的標籤來進行的, 這個 UI 看起來的長像在不同瀏覽器會有不同的結果, 也因為這樣, WEB DESIGNER 常常需要做一些設計來美化及一致化這個長相.

這篇文章不是在討論這個上傳檔案的長相, 而是要探討在前端程式碼取出上傳檔案的名稱, 這個也在不同的瀏覽器有不同的結果, 尤其新的瀏覽器又增加了一些特異功能. (如隱藏路徑)

這樣一來, 若是要對上傳檔案名稱欄位取出做一些判斷的話, 可要注意這些狀況的差異, 這裡寫了個小程式, 取出 <input type=file>的值, 在不同瀏覽器下可以測出不同的結果, 連結在這裡:

http://sample.diary.tw/25

我們以上傳 C:\test\1.txt 為例, 在不同瀏覽器下的結果如下:

IE9:
Firefox 4.01
Google Chrome 5:
Safari 5:
從上面畫面的結果來看, 發現 IE9 及 Google Chrome 會有含路徑的檔名, 但會隱藏路徑, 而 Firefox 4.01及 Safari 5則只會出現檔名而已, 不會有路徑, 而 IE6, IE7, IE8 的狀況則是 IE8 會像 IE9 一樣, 但 IE7, IE6 則是真實的檔案路徑, 如下:

IE6:
IE7:
IE8:
這樣就清楚啦!

分類
好用軟體

Firefox更新到4.01

今天工作的電腦上的 Firefox 3.6.17 提出要更新到 4.01 的版本, 於是就更新下去了, 原本是打算 3.6 和 4.0 並存, 先不更新, 再另外裝一個 4.0, 不過既然 Firefox 已將 4.0 放到 3.6.17 版本的更新之後, 所以就乾脆升級了.

還好常用的 Addons 都相容或有更新相容於 4.0 的版本, 包含一個 theme 是 classic compact 也都相容 (classic compact 資訊可以參考: https://diary.tw/archives/698), 這樣更新下來還蠻愉快的.

之所以更新, 是因為在更新宣傳上的比 3.6 版本速度快 6倍, 如下圖:

不用錢這件事應該大家都同意, 不過快 6倍的速度更讓人興奮啊, 因為現在的網頁對於瀏覽器的需求愈來愈高, 都是一堆 css 和 javascript 及 jQuery, 瀏覽器更需要的是速度. 不過對於全新外觀我可是敬謝不敏, 因為也都是抄 google chrome 的, 而且把分頁放在上頭還真是不習慣, 不過都可以調整回原來的長相, 所以就沒問題了!

接下來就要好好體驗他的快 6倍的效能, 來試試看囉!