分類
好用軟體

TableTools2-好用的Firefox網頁表格plugin

在瀏覽網頁時, 有時想針對一些輸出的表格做些進階的分析及處理, 往往會將資料先存出來, 轉到 excel 中進行.

現在有個好用的 plugin 可以供在網頁上應用, 而且直接操作, 不需要離開現有的畫面, 馬上就可以進行表格(TABLE)的排序, 多欄排序, 繪製圖表等功能, 另外像是在 excel 中才有的篩選, 複製欄, 隱藏欄等功能, 也都一應俱全, 實在是非常好用, 值得推薦大家來使用看看.

TableTools2 plugin 下載網址: https://addons.mozilla.org/zh-tw/firefox/addon/tabletools2/

安裝好後, 找個網頁有表格的, 按下右鍵, 就可以玩囉, 快來試看看吧.

裝好之後, 想玩看看, 可以到作者網站提供的表格區來試看看:

  1. 基本表格 http://mingyi.org/TableTools2/demo.html
  2. 進階表格 http://mingyi.org/TableTools2/advanced-demo.html
  3. 繪製圖表用的表格 http://mingyi.org/TableTools2/chart-demo.html
  4. 用來測試效率的表格 http://mingyi.org/TableTools2/large-table.html (可以生出大量資料)

另外這裡是官方 demo 影片, 也可以參考看看: http://mingyi.org/TableTools2/video.html

很不錯的工具.

分類
Database

使用CTE進行遞迴(Recursive)查詢

從 MS SQL 2005 起, 支援了 CTE (Common Table Expression) 語法, 可以參考之前的文章: https://diary.tw/archives/339 .

今天要來介紹的是有關應用在遞迴方面的查詢, 利用這種查詢, 可以很容易地將資料展開, 例如像是組織圖, 或是像分類項含有子分類這樣的樹狀資料, 當然, 簡單一點的像是累加也是一樣的, 先來介紹 CTE 用在累加的語法上.

WITH cte (num, mysum) AS (
  SELECT 1 as num, 1 as mysum
  UNION ALL
  SELECT num + 1, mysum + num + 1 FROM cte a where num <10
)
SELECT * FROM cte

看好, 在括號內的第一個 SELECT 1, 1 的部分, 就是原始值, 而後面的 SELECT .. FROM cte 則是開始自己對自己查詢, 最後的 num < 10 是他的 boundary condition, 也就是只做到 num < 10.

結果如下:
是的, 結果就是那個 1 + 2 + 3 + … + 10 = 55 .

再來看看其他的用法, 像是分類含有子分類的資料, 先來準備一些資料:

CREATE TABLE CATEGORY (CID int primary key, NAME nvarchar(200), PARENTID int)
INSERT INTO CATEGORY values (1, N'交通工具', 0), (2, N'陸上', 1), (3, N'水上', 1)
INSERT INTO CATEGORY values (4, N'機車', 2), (5, N'汽車', 2), (6, N'輪船', 3)
INSERT INTO CATEGORY values (7, N'空中', 1), (8, N'飛機', 7), (9, N'直升機', 7)

來組合吧, 使用CTE:

WITH CTE (CID, NAME, PARENTID, LEVEL) AS (
  SELECT CID, NAME, PARENTID, 0 FROM CATEGORY WHERE PARENTID = 0
  UNION ALL
  SELECT A.CID, A.NAME, A.PARENTID, LEVEL + 1 FROM CATEGORY A INNER JOIN CTE B ON A.PARENTID = B.CID
)
SELECT * FROM CTE

結果如下:

是不是很清楚看出來各分類的位階(LEVEL)狀況? 十分方便好用的語法. 再來看看如何展開成一行資料, 也就是各自分類結構合成一筆結果, 語法如下:

WITH CTE (CID, NAME, PARENTID, LEVEL, ORICID, DATA) AS (
  SELECT CID, NAME, PARENTID, 0, CID, CONVERT(NVARCHAR(MAX), NAME) FROM CATEGORY WHERE PARENTID = 0
  UNION ALL
  SELECT A.CID, A.NAME, A.PARENTID, LEVEL + 1, A.CID, DATA + '-' + A.NAME FROM CATEGORY A INNER JOIN CTE B ON A.PARENTID = B.CID
)
SELECT * FROM CTE

結果如下:

最後面的那個欄位就是想要呈現出來的結果, 說穿了, 就是一直累加上去, 只是是字串的累加(DATA), 不是數字的累加, 另外也多了一個欄位用來表現原本自己的CID(ORICID), 這樣看起來也就更清楚完整, 利用這樣的方式來表現分類結構, 非常好用呢!

另外記得字串累加的部分, 使用 NVARCHAR(MAX) 以避免發現 CTE 和累加的欄位不一致的問題, 這是要特別注意的地方.

無法對齊欄位的錯誤訊息為:
Types don’t match between the anchor and the recursive part in column “xx” of recursive query “xx”.
可以參考這篇解答: http://stackoverflow.com/questions/1838276/cte-error-types-dont-match-between-the-anchor-and-the-recursive-part

結論, CTE的遞迴語法, 其實也就是自己再對自己查詢, 只要把握好起始條件, 還有遞迴的終止條件, 就可以很順利的產出你要的結果. 大家可以多加利用這個好用的語法, Let’s CTE!!

分類
好用軟體

各地DNS查詢測試-WhatsMyDns

通常 DNS 設定好了之後, 如果不是新記錄, 是修改 ip 的方式, 一般預設的 TTL 為一天, 也就是 24小時, 所以想要知道更新的狀況, 就得從各個 DNS 上來看, 有個網站服務提供這樣的功能, WhatsMyDns: http://www.whatsmydns.net/.

這個網站提供了以下幾個區域的DNS Server查詢:

Mountain View CA, United States (Google)
Dallas TX, United States (Speakeasy)
Seattle WA, United States (Speakeasy)
New York NY, United States (Speakeasy)
Reston VA, United States (Sprint)
Recife, Brazil (Hotlink Internet)
London, United Kingdom (BT Global)
Lille, France (Nordnet)
Merzig Saarland, Germany (Probe Networks)
Bologna, Italy (INFN)
Ankara, Turkey (TTNET)
St. Petersburg, Russia (Uni of Tech & Design)
Peshawar, Pakistan (PTCL)
New Delhi, India (BSNL)
Bangkok, Thailand (TOT)
Petaling Jaya, Malaysia (Clear-Comm)
Hong Kong, China (PCCW)
Sydney NSW, Australia (Telstra)
Melbourne VIC, Australia (Telstra)
Auckland, New Zealand (Xtra)

DNS查詢的結果, 除了表列出來以外, 也在右邊的 Google Maps 上以綠色打勾, 與紅色打叉的方式來表現, 結果一目瞭然, 就很容易地知道 DNS 更新的狀況了.

繼續閱讀:
http://www.goston.net/2013/07/19/3440/

分類
WebTrend

Yahoo願望清單

看標題看不懂吧! 以為是買東西的清單.

這個是 yahoo 服務推出用來更新用戶想要使用的使用者名稱服務.

Yahoo 將會釋出大量的久未使用的帳號, 並且給這些登記的用戶, 乍看下似乎很棒, 可以讓大家選到自己想要的名稱(帳號), 但實際上, 應該搶不到的還是搶不到, 而且, 也不知道是什麼方式來配送給這些列出願望清單的用戶.

不過, 無論如何, 對於這種 michael0809 這樣的想要改成 michael 還是相當困難吧, 但是, 還是可以登記看看囉, 說不定, 就拿到了.

繁體中文官網: https://wishlist.yahoo.com/?.lang=zh-Hant-TW&.intl=tw

分類
系統技術

Apache與IIS Web Sever URL長度上限

之前有查過 browser 的 url 上限, 可以參考這篇: https://diary.tw/archives/455 , 當時是為了調查 referer 的 url 上限, 進而找出 browser 的 url 上限.

那 web server 上的上限呢? 在 Apache 下有個 LimitRequestLine 的設置, 可以設定 URL 上限, 參考: http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestline

而該值預設為 8190 也就是大約在 8k 左右.

在 IIS 則是利用參數 requestLimits 中的參數, MaxUrl, 預設是 4096, 參考這篇: http://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits

這樣看起來基本上都比 Browser 長得多.