分類
數學

微軟工具Microsoft Mathematics

之前有介紹過線上版本的數學解題工具:

  1. Mathway: https://diary.tw/archives/720
  2. Wolframalpha: https://diary.tw/archives/1196

現在來介紹一下微軟的工具, 是下載安裝的應用程式, 於2011年出的 Microsoft Mathematics:
http://www.microsoft.com/zh-tw/download/details.aspx?id=15702

該工具可以直接從上面網址下載安裝, 分為 x86, x64 兩個版本, 可以自行選擇適合版本安裝.

以網友問的一個問題為例:
x * y <=3
x – y >=0

若輸入到上面第二個服務 wolframalpha 解題如下:
http://www.wolframalpha.com/input/?i=x*y%3C%3D3%2C+x-y%3E%3D0

可以看到繪製出來的結果如上圖, 接下來使用 Microsoft Mathematics 來進行解題, 產生結果如下:

結果當然是一樣的, 不過在 windows 下的應用程式來解題, 十分方便好用, 大家可以試看看.

繼續閱讀:
http://steachs.com/archives/2094

分類
系統技術

走Hinet電路問Hinet dns-aws cloudfront無回應

今天早上9點多開始的, 原來要用 run.quikLAB 的服務, 網頁有些問題, 剛好在忙, 沒特別去查.
不過後發現像 dropbox 也有這個狀況(因為 dropbox.com 網頁也用了 cloudfront), 開啟了 firebug 的 network 功能, 檢查一下, 原來是 cloudfront dns 解析失敗.

經交錯測試檢查, 目前查得狀況如下,

  1. 走 hinet 電路問 hinet dns 失敗
  2. 走其他電路問 hinet dns 成功
  3. 走 hinet 電路問其他 dns 成功
  4. 走其他電路問其他 dns 成功

如此一來, 變成 hinet 網內用 hinet dns 的用戶, 會無法正常檢視有使用到 cloudfront 功能的網站, 太奇怪了.

  1. 若是人為刻意設定, 一定有很大的陰謀
  2. 若是不小心設錯, 持續了這麼久, MRTG表應該早就發現了, 還不處理也很妙

所以, 再觀察看看. 這個問題很大.

[12:12]
目前已觀測正常了. 看起來可能是第二個原因吧.

分類
程式技術

雙斜線的使用方式

今天在幫一個網站處理加上 SSL 時, 發現有個使用 jQuery 的效果消失了, 經檢查後, 發現其實是因為該網頁使用了 http://code.jquery.com/jquery-latest.min.js 的 jQuery library.

為了解決這個問題, 當然就是再加上 https 就可以了. 不過有沒有更好的方式呢? 答案是有的, 使用 // 雙斜線來處理.

//code.jquery.com/jquery-latest.min.js

這樣的語法, 是告訴瀏覽器, 使用”繼承”的 protocol, 也就是說, 主 url 上使用是 http, 這裡就用 http, 而原本是走 https , 這裡就用 https.

簡單來說, 一種方式就是 library 就都用 https 的方式, (當然原本的 library 網站要有支援 https, 目前絕大部分的 cdn library 都有), 否則使用這種 double forward slash 也是很不錯的方式, 解決開發環境只用 http, 而 production 環境使用 https 的狀況.

分類
Javascript

[json]如何讀取含有減號的json key

剛在撰寫程式碼時, 發現要取回 aws cloudsearch 中的搜尋使用時間, 其傳回的 json 參數中, 使用了減號, 該鍵值為 time-ms , 其實很直覺地要使用, 但又覺得怪怪的, 一執行馬上就有問題.

因為原來的 jsonObj.time-ms 會被視為 jsonObj.time – ms , 所以必須調整寫法, 正確寫法如下:

jsonObj["time-ms"]

這樣就可以了, 當然, 該回應的 json 中, 該鍵值(key)也必須是使用引號包起來的, 否則該 json 物件也會有問題.

測試程式碼如下:

var a = { 
  "mykey": "value1", 
  "my-key": "value2",
}
alert(a["my-key"]);

會回應 value2 這樣就對了.

參考資料:
http://stackoverflow.com/questions/13869627/unable-to-access-json-property-with-dash

分類
ASP

[ASP]過濾非BIG5編碼字元

這篇文章利用了之前的單字元判斷是否為 BIG5 的 ASP程式進行實作 (link), 由於是一個字一個字判定, 所以效率不會太好, 但可以快速解決有關在 UTF-8轉到 BIG5時, 不在該字元集的文字內容, 以過濾掉這類特殊的問題. 程式碼如下:

Function IsBig5(strChar) 
    ' check A440~C67E 常用字, C940~F9D5 次常用字 
    session.codepage="950"  
    Dim lngAsc  
    lngAsc = Asc(strChar)  
    IsBig5 = (lngAsc >= -23488 And lngAsc <= -14722)  
    If Not IsBig5 Then IsBig5 = (lngAsc >= -14016 And lngAsc <= -1579)  
    session.codepage="65001"  
End Function

Function TrimNonBig5(strUTF8)
    For i=1 to Len(strUTF8)  
        charTemp = Mid(strUTF8,i,1)  
        If IsBig5(charTemp) Then
            TrimNonBig5 = TrimNonBig5 + charTemp
        End If
    Next  
End Function

str1 = "桃之雫果凍"
response.write TrimNonBig5(str1)
' output 桃之果凍

str2 = "洋風和菓子零食"
response.write TrimNonBig5(str2)
' output 洋風和子零食

str3 = "游錫堃王建煊"
response.write TrimNonBig5(str3)
' output 游錫王建

以上的程式可以有效地將非在 Big5 字元集中的文字過濾, 避免與傳統編碼程式溝通時的問題.

[2014/11/10 11:12]
若是有需要再補上 ASCII 字元集區段的部分, 可以使用 ASC 於 32~126 的 ASCII Printable 即可(參考資料: http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart), 記得是在轉 code page前測試 ASCII, 程式碼如下:

Function IsBig5Asc(strChar)
    ' check A440~C67E 常用字, C940~F9D5 次常用字, asc printable 32~126
    Dim lngAsc
    lngAsc = Asc(strChar)
    IsBig5Asc = (lngAsc >= 32 And lngAsc <= 126)
    session.codepage="950"
    lngAsc = Asc(strChar)
    If Not IsBig5Asc Then IsBig5Asc = (lngAsc >= -23488 And lngAsc <= -14722)
    If Not IsBig5Asc Then IsBig5Asc = (lngAsc >= -14016 And lngAsc <= -1579)  
    session.codepage="65001"  
End Function

Function TrimNonBig5Asc(strUTF8)
    For i=1 to Len(strUTF8)  
        charTemp = Mid(strUTF8,i,1)  
        If IsBig5Asc(charTemp) Then
            TrimNonBig5Asc = TrimNonBig5Asc + charTemp
        End If
    Next  
End Function

str1 = "桃之雫果凍1200G(1.2公斤)"
response.write TrimNonBig5Asc(str1)
' output 桃之果凍1200G(1.2公斤)
分類
Javascript

身份證字號產生器/檢查器

身份證字號檢查可以參考這裡:
http://zh.wikipedia.org/wiki/%E4%B8%AD%E8%8F%AF%E6%B0%91%E5%9C%8B%E5%9C%8B%E6%B0%91%E8%BA%AB%E5%88%86%E8%AD%89#.E9.A9.97.E8.AD.89.E8.A6.8F.E5.89.87

主要是依照第一碼英文的代碼, 加上後面的個別數字運算而來, 其中第一碼是申報登記戶籍的地點, 共有26個英文字, 第二碼則是性別, 之後則是流水號.

驗證方式如上面連結的說明, 利用該說明, 進行程式實作後, 可以參考這個範例:
http://sample.diary.tw/pid/

上面網址使用純 javascript 撰寫, 並也製作了產生器, 配合 html download blob 語法, 可以下載內容, 十分方便, 可以參考看看.

html download blob 語法可以參考:
http://thiscouldbebetter.wordpress.com/2012/12/18/loading-editing-and-saving-a-text-file-in-html5-using-javascrip/

較複雜的下載方式, 可以參考這個 FileSaver.js 工具:
https://github.com/eligrey/FileSaver.js

分類
Javascript

在nodejs中發起json post的字元長度問題

在 nodejs 專案中, 若是需要對外發起使用 application/json 的 http post , 若有中文字, 需要注意計算字串長度的問題. 一般發起的程式碼請參考:

http://tech.pro/tutorial/1091/posting-json-data-with-nodejs

不過該範例是使用英文字, 所以沒有問題, 若是要發起中文字的 json http post, 需要調整計算 Content-Length 的方式, 使用 new Buffer(str).length, 如下:

var obj_json = { name: "王大頭", age: 25 };
var json_string = JSON.stringify(obj_json);

var req = http.request({
        host: 'host.example.com',
        port: 80,
        path: '/upload',
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Content-Length': new Buffer(json_string).length
        }
    }, function(res) {
    res.setEncoding('utf-8');
    var responseString = '';
    res.on('data', function(data) {
        responseString += data;
    });
    res.on('end', function() {        
        console.log(responseString);
    });
});

req.on('error', function(e) {
  // http post error
});    

req.write(json_string);
req.end();

參考資料: http://cnodejs.org/topic/50616f5301d0b801482695cf

分類
WebTrend

Google QRCode Chart API

使用 Google Chart API 來產生 QRCode 很方便, 可以參考這裡的資料:
https://developers.google.com/chart/infographics/docs/qr_codes

一般來說會用到的參數共有以下:

  1. cht=qr
  2. chs=[width]x[height] (產生的長寬)
  3. chl=[data] (要產生的內容, 可以放文字或網址等資訊)

所以以本站網址為例, QRCode 為:
http://chart.apis.google.com/chart?cht=qr&chs=200×200&chl=http%3A//diary.tw/tim

以圖片顯示為:

Google Chart API 產生 QR Code還真的蠻方便的.

[2014/8/27]
補充, 若是需要大量產生, 可以利用這個網站服務, 一次可以免費批次產生100個QRCode, 也十分方便好用.
http://www.qrexplore.com/generate/

另外也有個線上辨識Barcode、QRCode的服務, 可以用圖片網址或是傳送圖片的方式進行, 方便大家在產生QRCode的驗證.
http://zxing.org/w/decode.jspx

分類
Javascript

lable標籤包住的問題

在現在使用手機瀏覽網頁愈來愈普遍的時候, 著重對手機網頁的效果也愈來愈重要.

最近測試到一個問題, 被 label 包起來的多個 input box 時, 會發生即時點到後第二或第三個 input box 也會 focus 到第一個 input box 的問題. 如下面的 html

<label>
  <input type=text size="3">-
  <input type=text size="3">-
  <input type=text size="3">
</label>

其實這個問題的原因很單純, 因為 label 是用來強化使用者輸入便利性的標籤, 拿來包多個 input 會發生只會指向第一個 input 是因為原始的設計導致, 目前測試在桌機的 firefox 、android 原生瀏覽器、android chrome瀏覽器、iphone/ipad safari瀏覽器, 都會有這樣的現象, 但桌機的chrome, 桌機的IE11則不會, 原因可能和取得物件焦點的順序有關.

無論如何, 包多個 input 在一個 label 不是一個正確的作法, 要避免這個狀況, 就是不在把多個 input 放在一個 label 中即可.

測試網頁 http://sample.diary.tw/35/label.htm

html label標籤的用法, 可以參考這裡: http://www.w3schools.com/tags/tag_label.asp

分類
好用軟體

iperf測試網路傳輸品質及頻寬工具

在點對點間要測試傳輸品質及頻寬狀況, 有個好用的工具, iperf, 官方網址為:
http://iperf.fr/

這個工具不僅是可以測試一般 TCP的傳輸, 也可以測試 UDP的傳輸, 使用方式很簡單, 下載解開後, 執行檔就是 iperf.exe 同時可以擔任 client 及 server 兩個角色, 找兩台電腦(當然一台也可以), 以測試 udp 為例, 在擔任 server 的主機上下指令:

iperf -s -u

其中參數 -s 為啟動 server mode, -u 為使用 udp 傳輸.
成功起動 server 會出現以下訊息(預設為 port 5001):
————————————————————
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size: 64.0 KByte (default)
————————————————————

然後在擔任 client 角色的機器上執行以下指令:

iperf -c [server_ip] -u -i 1

其中參數 [server_ip]為擔任 server 的 ip, 而 -i 1 是指每一秒鐘出現一個 log, 以下為結果:
————————————————————
Client connecting to localhost, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 64.0 KByte (default)
————————————————————
[ 3] local 127.0.0.1 port 52778 connected with 127.0.0.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 1.0 sec 129 KBytes 1.06 Mbits/sec
[ 3] 1.0- 2.0 sec 128 KBytes 1.05 Mbits/sec
[ 3] 2.0- 3.0 sec 128 KBytes 1.05 Mbits/sec
[ 3] 3.0- 4.0 sec 128 KBytes 1.05 Mbits/sec
[ 3] 4.0- 5.0 sec 128 KBytes 1.05 Mbits/sec
[ 3] 5.0- 6.0 sec 128 KBytes 1.05 Mbits/sec
[ 3] 6.0- 7.0 sec 129 KBytes 1.06 Mbits/sec
[ 3] 7.0- 8.0 sec 128 KBytes 1.05 Mbits/sec
[ 3] 8.0- 9.0 sec 128 KBytes 1.05 Mbits/sec
[ 3] 9.0-10.0 sec 128 KBytes 1.05 Mbits/sec
[ 3] 0.0-10.0 sec 1.25 MBytes 1.05 Mbits/sec
[ 3] Sent 893 datagrams
[ 3] Server Report:
[ 3] 0.0-10.0 sec 1.25 MBytes 1.05 Mbits/sec 0.000 ms 0/ 893 (0%)

就可以看到傳輸測試的結果了, 預設是使用 1mpbs的頻寬, 可以利用 -b 參數下達指定頻寬, 例如 100k, 10m 都可以. 當然, 在 server 上也可以下 -i 1 的指令, 可以看到較為即時的訊息. 若是要持續性測試, 可以在 client 內下 -t [seconds]代表指定秒數即可.

在測試點與點間的網路品質及頻寬可以使用這個簡單工具來進行測試, 很方便好用.

目前最新版本(2011)下載連結: http://iperf.fr/download/iperf_2.0.5/iperf-2.0.5-2-win32.zip

[2022/2/20 14:13]

也請參閱: https://walker-a.com/archives/5857