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