分類
好用軟體

Firefox 8.0來了

Firefox 7.0 才更新到 7.0.1, 現在來 8.0 了啊. 介面又有些調整了, 速度感覺有心理上的作用那麼快一點, 跑一下 Acid3 Test (http://acid3.acidtests.org/)是 100, 而且速度還蠻快的.

新功能參考如下: (引用自: http://moztw.org/firefox/releases/8.0/ )

  • 現在將預設停用第三方所安裝的附加元件。
  • 增加一個一次性的選擇附加元件對話框來管理先前安裝的附加元件。
  • 在搜尋列加入 Twitter 搜尋。
  • 增加需要時才載入分頁的選項,縮短啟動時的視窗還原時間。
  • 改善分頁移動、重排、分離的動畫。
  • 增進 <audio> 和 <video> 元素的效能與記憶體管理。
  • 支援 CORS 以允許 WebGL 的 cross-domain textures 處理。
  • 支援 HTML5 選單(context menu)。
  • 支援 insertAdjacentHTML。
  • 增進多種語言的 CSS hyphen 支援。
  • 增進 WebSocket 支援。
  • 解決數個穩定性問題。

在用 firefox 的朋友們, 快來更新囉!

google analytic即時報表

前一陣子已經有不少人開始使用 google analytics 的即時報表了, 這個還在 Beta 階段的即時網站資訊統計報表功能, 真的很強大.

簡單地說, 原本大約是半天到1天時間差的報表統計資訊, 往往需要等上一陣子才會有報表, 但現在這個即時報表, 可以將現在當下的網站流量狀況即時呈現, 讓人在第一時間就取得目前網站的即時資訊, 真的很好用.

不過這種即時報表, 在以往是許多付費統計網站功能, 不過 Google 提供了免費的即時報表功能, 相信會打到不少原本在靠這個賺錢的網站.

不論流量大小的網站, 若要經營, 這樣的即時報表對於有活動在進行的狀況下, 是非常重要的情報, 而且可以快速地反應及操作活動的調整, 以期能有更好的效果.

有在用 Google analytics 的朋友們, 可以快去試看看!

分類
Javascript

時間差計算機-web版

這個時間差計算機是因為最近在查圖表中的流量計算使用, 由於 cacti 圖表可以自行放大想看的區間, 若是要將頻寬換成流量, 要把圖表的起迄時間算出來, 利用平均頻寬再乘上時間差, 就可以算出流量, 例如:


這張圖來看, 是剛好一天的流量, 在未放大時, 很好計算, 一天的流量 outbound 是 328.66kbps * 86400 seconds = 27Mbits = 3.385MBytes

這張圖則是放大後來看, 時間是 2011/10/18 00:07:38~2011/10/18 07:45:19 , 利用這個時間差計算機來算: http://sample.diary.tw/timediff/ 可得 27461 秒, outbound 流量則為 894.40kbps * 27461 seconds = 23.42Mbits = 2.928MBytes

可以看得出來, 主要的 outbound 流量集中的下面放大的這個時間區段.

有時候要計算這個小時間差, 雖然紙筆很方便, 但是數量一多就不好算了, 所以寫個小程式用來計算使用, 這個程式利用了 jQuery, jQuery UI, 和 Timepicker to jQuery UI – http://trentrichardson.com/examples/timepicker/ 來達成, 計算的方式是使用 javascript 來計算, 所以是利用 Date 的 parse() 來將日期時間轉為 milliseconds, 再來計算兩個時間差, 就可以得到計算的結果, 如下:

若實用或方便的話, 請多多利用. 網址: http://sample.diary.tw/timediff/

分類
Database

MySQL的on duplicate key update語法

很有意思的一個語法, 不過可要小心使用, 在 mysql 5.0 版起, 可以在 insert 時, 指定若重覆 unique key 時, 則使用 update 語法, 這個有點像是在新增資料時, 若不存在則新增, 存在則 update 的方式.

來個例子:

CREATE TABLE `t3` (
`sid` INT NOT NULL ,
`v1` INT NOT NULL ,
`v2` INT NOT NULL ,
`v3` INT NOT NULL ,
PRIMARY KEY ( `sid` )
) 
insert into t3 values (1,1,1,1)
insert into t3 values (2,2,2,2)
insert into t3 values (2,2,2,2) on duplicate key update v1=v1+1

這時候, 會有一筆, 1,1,1,1 和 2,3,2,2 的資料產生, 如此一來, 可以在重覆 unique key 時, 用來做為更新的條件, 由於 unique key 只會出現一次在對應 table 上, 所以可以用來做為更新的條件值, 而 primary key 也是 unique key, 所以發生在 primary key 時是一樣的狀況.

不過若是新增的資料, 發生多筆 unique key 重覆時(指不同欄位), 該 update 會只更新一筆, 這是在程式上要避免發生的, 以免有資料更新錯誤的問題. 詳情可以參考官方網站資料: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

這種有趣的語法, 其實用的機會不是太多, 不過多學習了解很有意思.

分類
好用軟體

中西曆轉換

這個是用來對中西曆轉換對照用的, 可以方便看西方何時, 對照東方的何時, 不過特別有意思的是中國的年號, 在位皇帝, 年號等資訊也可以可從這裡看見.

網址在這裡: http://sinocal.sinica.edu.tw/

這是中央研究院的兩千年中西曆轉換的網頁工具.

例如以東漢光武帝建武元年, 對應到西元的時間是西元25年, 可以利用下面的方式輸入:
按下上面的中曆轉西曆後, 就會產生如下畫面:

得到: 東漢光武帝建武年間 西元25年7月15日(星期日) ~ 56年5月3日(星期一)

如此一來就可以很方便地將中國朝代在位皇帝及年號等資訊查找出來, 也是一個很實用的工具.
再來試看看比較近代的清朝看看, 如清光緒帝:
清德宗光緒年間 西元1875年2月6日(星期六) ~ 1909年1月21日(星期四)

唐太宗呢? 來看看:
唐太宗貞觀年間 西元627年1月23日(星期五) ~ 650年2月6日(星期六)

真的還蠻實用的呢!

再來看看他的程式中記錄這些朝代, 皇帝, 年號等的資訊是在這支程式裡有記載: http://sinocal.sinica.edu.tw/empreigns.js
這樣就有一份整理很清楚的資料, 而且已經整理程式化了.

[2011/10/11 18:56]
從上面的資料來看, 年號最多的皇帝是唐武后, 也就是武則天, 共用了18個年號, 真的太厲害了, 常在改年號耶: 光宅,垂拱,永昌,載初,天授,如意,長壽,延載,證聖,天冊萬歲,萬歲登封,萬歲通天,神功,聖曆,久視,大足,長安,神龍.

分類
程式技術

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 不能用了, 看看有沒有它宣稱的速度變快.