分類
程式技術

YQL for flickr的問題

之前寫了一篇利用 YQL 查詢 setid 取出 flickr 中的照片功能: 利用YQL抓出Flickr相簿中的照片url

不過最近似乎是失效了, 檢查一下, 發現 YQL 只會回傳 flickr 的 api url, 而不主動回傳 photos 的內容, 訪問該 flickr api url:

http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&photoset_id={set_id}&page=1&per_page=10

會回傳:

<rsp stat=”fail”>
<err code=”100″ msg=”Invalid API Key (Key has invalid format)”/>
</rsp>

所以只好來去申請 flickr 的 api key, 才能查詢了. 不過這樣就不用透過 YQL 了, 直接向 flickr api 取出內容即可. 申請的網址在這裡: http://www.flickr.com/services/api/keys/ , (有分兩種, free 及 commercial 的, 請依開發用途申請即可) 申請好了之後, 可以直接從該 api 服務介紹來查找這個由 setid 找出照片服務, 不過已經知道由 YQL 給的 flickr api url 了, 所以再掛上 api key 就可以順利輸出結果了, 如下:

http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&api_key={api_key}&photoset_id={set_id}&format=rest

輸出結果如下:

<?xml version="1.0" encoding="utf-8" ?>
<rsp stat="ok">
  <photoset id="72157600079438372" primary="460118008" owner="owner_id" ownername="owner_name" page="1" per_page="500" perpage="500" pages="1" total="18">
    <photo id="460118008" secret="4d856aaa72" server="239" farm="1" title="DSC_3989" isprimary="1" />
    <photo id="460125135" secret="15a3d24484" server="208" farm="1" title="DSC_3987" isprimary="0" />
    <photo id="460117456" secret="76bdfd928c" server="191" farm="1" title="DSC_3986" isprimary="0" />
    <photo id="460117112" secret="515535f02e" server="253" farm="1" title="DSC_3983" isprimary="0" />
    <photo id="460116928" secret="68286fc46a" server="200" farm="1" title="DSC_3981" isprimary="0" />
    <photo id="460116620" secret="4245ef4c5a" server="183" farm="1" title="DSC_3980" isprimary="0" />
    <photo id="460123637" secret="68351dfe14" server="236" farm="1" title="DSC_3963" isprimary="0" />
    <photo id="460123365" secret="80edceee74" server="243" farm="1" title="DSC_3961" isprimary="0" />
    <photo id="460115832" secret="80b8d482bf" server="246" farm="1" title="DSC_3958" isprimary="0" />
    <photo id="460122569" secret="2ee7c9e00e" server="242" farm="1" title="DSC_3954" isprimary="0" />
    <photo id="460122271" secret="074ba7710c" server="173" farm="1" title="DSC_3952" isprimary="0" />
    <photo id="460121955" secret="88a7b286b8" server="235" farm="1" title="DSC_3950" isprimary="0" />
    <photo id="460121519" secret="a5c2250e09" server="241" farm="1" title="DSC_3948" isprimary="0" />
    <photo id="460114100" secret="7dd0300dd6" server="199" farm="1" title="DSC_4000" isprimary="0" />
    <photo id="460120927" secret="c07c9eab50" server="189" farm="1" title="DSC_3997" isprimary="0" />
    <photo id="460120523" secret="5c00300368" server="191" farm="1" title="DSC_3995" isprimary="0" />
    <photo id="460120281" secret="affb220ee8" server="218" farm="1" title="DSC_3992" isprimary="0" />
    <photo id="460112878" secret="fcff8d8665" server="246" farm="1" title="DSC_3991" isprimary="0" />
  </photoset>
</rsp>

如此一來, 又能順利正常工作啦, 網址不變, 仍在這裡: http://sample.diary.tw/flickrset/

分類
好用軟體

Firefox7來了-更快

這次 Firefox 7來了, 感覺的確有更快, 那之前說的快是怎樣?!

Firefox 7的更新, 似乎又更短的更新週期了, 好快又跳下一個版本, 真是驚人的速度啊, 不過這次升級上來, 好多 extension 又不能用了, 還好 Firebug 有 1.8.3 支援, 沒有問題, 但還有蠻多不能用的, 希望能快點跟上來才好.

話說回來, 這次的更新, 明顯有感覺變快不少, 希望能愈做愈好用, 加油.

分類
程式技術

XPath學習

在解析 xml 資料時, 若只是取出一些固定欄位資料, 除了用 regular expression 或是指令字串比對方式外, 利用 XPath 來操作算是比較正規的作法.

有效利用 XPath 可以快速地選擇到需要查詢出來的資料, 而且更正確更有效地取出資料. 例如想要取出下面資料(bb.xml):

<root>
  <app>
    <name>test1</name>
    <tick>20</tick>
    <pt>12</pt>
  </app>
  <app>
    <tick>test2</tick>
    <value>32</value>
    <pt>15</pt>
  </app>
</root>

若要取出的是 app name=test1 的資料, 並讀出 value 的方式, 可以如下操作(以asp/vbs為例):

Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")

xmlhttp.Open "GET", "http://localhost/bb.xml", False
xmlhttp.Send  

Set root = xmlhttp.responseXML
Set app = root.selectSingleNode("//app[name=""test1""]")
Set tick = app.selectSingleNode("//tick")
Response.Write tick.text

也就是利用 XPath 的 //app[name=”test1″] 來取出 app node 內容有 name 值是 test1 的 node 出來, 之後再利用 //tick 將該 node 下的 tick node 取出, 再用 text 讀出該值為 20.

若只需要取出 value 的值, 而不是要將 app node select 出來使用, 可以一行搞定, 如下:

Response.Write root.selectSingleNode("//app[name=""test1""]//tick").text

這樣操作很快也很有效, 而且可以找對各節點的關連關係. 在操作 xml 時, 得要好好學習的一個工具.

參考資料:
http://www.w3schools.com/xpath/xpath_syntax.asp
http://zvon.org/xxl/XPathTutorial/General/examples.html
http://msdn.microsoft.com/en-us/library/d271ytdx.aspx

[2011/9/16 17:23]
補充若有 xmlns (xml namespace) 的狀況下, 取不出 node(s) 的問題:
http://www.dotblogs.com.tw/rainmaker/archive/2011/09/16/36457.aspx

分類
好用軟體

Firefox6的檢視原始碼功能

快快升級到 Firefox 6 後, 發現檢視原始碼功能不見了, 原本在 “檢視” 選單下的 “頁面原始碼” 消失了, 先來看看在 Firefox 5 的檢視功能表內還在的 “頁面原始碼”:
但在 Firefox 6 下, 這個功能不見了:
雖然有快速鍵 Ctrl+U 可以快速叫出來, 不過還是得來找看看到底跑到哪裡去了, 原來是放到”工具” 下的 “網頁開發者” 下的 “頁面原始碼”, 如下圖:

真是的, 藏在這麼裡面, 真是不太方便啊, 看來之後得用快速鍵 Ctrl+U 來叫出可能會快一些了, 不然藏得如此深的地方, 光要去點到, 都要花一點時間.

不過也可能是讓不是做網頁開發的人少點麻煩, 從檢視中移出來吧.

相關閱讀:
http://por.tw/Website_Design/index.php?load=read&id=67

分類
好用軟體

好快又升級的Firefox6

現在 Firefox 拼了命的升級, 奇怪耶, 又沒有多大的功能改善, 主版本號一直往上跳, 這不是個好現象吧. 雖然說這是一個持續在前進的軟體專案, 不過這樣跳躍式的版本號大躍進, 似乎是想證明我們很積極地在改善及進步.

今天的 Firefox 5 提出了要升級到 Firefox 6 的升級通知, 於是就順手升級上來, 不過又是有一些 plugin 不能用了, 看看有沒有它宣稱的速度變快.

分類
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