好用JSON Editor

程式技術/Javascript 2011/12/30 12:22
views: 22720 times
在開發網頁程式, 用到解析和產生 JSON 是經常發生的事, 不過如何快速的解析或是產生 JSON , 又或是用來除錯這些 JSON 的資料, 不像 XML 可以利用瀏覽器來幫忙, JSON 可以利用這個作者 Thomas - http://www.thomasfrank.se/about.html 開發的工具來進行 JSON 的線上測試.

說明在這裡: http://www.thomasfrank.se/json_editor.html
他有線上使用版, 和下載版, 若是進行除錯, 可以直接使用線上版: http://www.thomasfrank.se/downloadableJS/JSONeditor_example.html

以之前文章 http://diary.tw/tim/22 的資料為例:

{ 'obj1': {
  'child1':'value1',
  'child2':'value2'
  },
  'array1': [1, 2, 3, 4, 5]
};

將內容貼到 JSON Editor 裡, 按下 save 鍵, 就會產生出該 JSON 的樹狀結構在該 editor 左側(記得要自己按下 + 號展開, 如下圖:
用戶插入圖片
這樣可以很容易的理解及看出該 JSON 資料的內容. 若是要取得某一節點, 可以點在該節點上, 並看 editor 上的 label及下面的 value 就可以利用程式取出該 JSON 資料結構的資料點, 以上面的 array1 中的 1 為例, 圖示如下:
用戶插入圖片

這樣是不是十分方便, 對於在使用 JSON 的開發上, 有十足的加速作用呢!


top

找出SQL Server中的identity欄位值

程式技術/Database 2011/11/29 14:57
views: 46203 times
一般在 SQL Server 中, 若要找某 table 中的 identity 最後值(最大值或目前值), 可以使用以下指令:

dbcc checkident('table_name', NORESEED)

可以參考之前的這篇文章: SQL Server的Identity欄位使用/複製/重設 - http://diary.tw/tim/65

不過, 若是 table 很多, 又想一次性的將各 table 中的 identity 欄位最後值找出, 可以利用系統資料表: sys.identity_columns (2005, 2008, 2008R2都有) 來查找, 配合 sys.objects 表, 可以一次將 table, column, 最後值(last_value) 查找出來, 如下:

select b.name, a.name, a.last_value from sys.identity_columns a inner join sys.objects b on a.object_id=b.object_id

這樣可以利用一個指令就將該資料庫中的所有資料表含有 identity 欄位的最後值, 若是只需要使用者自行定義的 table (不要含系統表), 可以多加上 b.type='U' 來進行過濾.

參考資料:
http://technet.microsoft.com/zh-tw/library/ms176057.aspx
http://msdn.microsoft.com/en-us/library/ms187334.aspx
top

正則表式法表示ip區間

程式技術 2011/11/17 16:22
views: 38910 times
使用正則表示法來表示一個 ip 區間, 例如: 1.2.3.1~64 這樣的表示方式為:

^1\.2\.3\.([1-9]|[1-5][0-9]|6[1-4])$

另外也會有這樣的寫法: (下面是"流量的秘密"這本書中的第246頁寫的, 不過比較有效率的寫法應為上面, 實際上使用最後的 google analytics 的說明幫助頁上產生的亦同上)
^1\.2\.3\.([1-9]|[1-5][0-9]|[1-6][1-4])$

這是因為在 google-analytics中, 若需要新增設定檔用來排除某 ip, 或某區段 ip 時會用到, 如下畫面:
用戶插入圖片


這樣可以很方便的進行某區段的 ip 篩選, 其實 google analytics 的說明幫助頁也有這個功能, 很方便, 自動可以產生某區段 ip 的正則表示法(或稱規則運算式): https://www.google.com/support/googleanalytics/bin/answer.py?answer=55572&hl=zh_TW&utm_id=ad

若需要試看看對不對, 可以利用線上工具來測試: http://www.regexplanet.com/simple/index.html.
top

時間差計算機-web版

程式技術/Javascript 2011/10/18 17:16
views: 43928 times
這個時間差計算機是因為最近在查圖表中的流量計算使用, 由於 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/




top

MySQL的on duplicate key update語法

程式技術/Database 2011/10/13 17:08
views: 37510 times
很有意思的一個語法, 不過可要小心使用, 在 mysql 5.0 版起, 可以在 insert 時, 指定若重覆 unique key 時, 則使用 update 語法, 這個有點像是在新增資料時, 若不存在則新增, 存在則 update 的方式.

來個例子:


這時候, 會有一筆, 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

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

YQL for flickr的問題

程式技術 2011/10/04 18:13
views: 31225 times
之前寫了一篇利用 YQL 查詢 setid 取出 flickr 中的照片功能: http://diary.tw/tim/898

不過最近似乎是失效了, 檢查一下, 發現 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

輸出結果如下:

如此一來, 又能順利正常工作啦, 網址不變, 仍在這裡: http://sample.diary.tw/flickrset/ 請多加利用!!
top
TAG api, flickr, YQL

XPath學習

程式技術 2011/09/10 14:18
views: 25115 times
在解析 xml 資料時, 若只是取出一些固定欄位資料, 除了用 regular expression 或是指令字串比對方式外, 利用 XPath 來操作算是比較正規的作法.

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



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


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

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


這樣操作很快也很有效, 而且可以找對各節點的關連關係. 在操作 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
top
TAG XML, XPath

FreeBSD上mysql的效能追蹤

程式技術/Database 2011/08/08 16:02
views: 38098 times
最近因為有台主機的 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
top

Javascript已強大到可以執行linux

程式技術/Javascript 2011/05/20 14:29
views: 62784 times
這篇是在 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 可以做更多更多的事了!
top

C# Operator ??

程式技術/.NET 2011/05/20 12:50
views: 41738 times
今天看到這個 operator ?? , 雖然可以了解前後文他的功能, 不過還真是第一次看到.

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

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

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


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


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


相關閱讀:
http://demo.tc/Post/414
top
TAG ??, c#, operator

PREV : [1] : [2] : [3] : [4] : [5] : ... [13] : NEXT







【預購】林志玲2012年桌曆 SAPIDO傻多  N速Gigabit 多網型無線寬頻分享器 (GR-1733) SanDisk 16GB Mobile Ultra microSDHC 附轉卡(平輸) (繁中版)Panasonic GF3+14mm F2.5+14-42mm 雙鏡組 人因 Ergotech Tablet  多媒體娛樂機 ★FujiXerox DocuPrint P205b S-LED雷射印表機(粉紅機) (繁中版)Panasonic GF3+14mm F2.5+14-42mm 雙鏡組 飛利浦免油健康氣炸鍋(HD9220) 華擎平台【龍神傳說】四核SSD獨顯電玩機 美國VIZIO 47吋Full HD液晶顯示器+視訊盒 E470VL-TW(M) JSmax Android MID-1023 10.1吋平板電腦(全新升級版) lenovo ideapad G575雙核心15吋筆電【含微軟Windows 7】315301 Lenovo ideapad G570 59-309037 新雙核B950 15.6吋筆電 美國西屋42吋FHD液晶顯示器+視訊盒(LC-42E300A) 【快】Toshiba 新禾公司貨 V5 1TB 黑靚潮行動硬碟 OCZ Solid 3 120GB 2.5吋 SATA3 固態硬碟 SanDisk 16GB microSDHC (Class 4) 記憶卡 HP LaserJet Pro CP1025nw 無線迷你彩色雷射印表機 D-Link DHP-501AV 500Mbps電力線網路橋接器(雙包裝) IBT-1073VOD 雲端劇院 Brinno Garden Watch Cam 生活記錄器 SAPIDO N速 3.5G易享機 支援BT (GR-1222) 35合1掌上型麻將機2代 三洋 SANYO 日本原廠 18650 全新高效能高容 2600mAh 鋰電池充電組 華擎H61平台【迷你戰將】雙核19型效能液晶電腦


 Waiting...