分類
系統技術

iOS 7.1企業APP安裝問題

在 iOS 7.1 更新後, 原企業APP安裝會發生以下訊息:
(無法安裝應用程式, 因為 xxxx 的憑證無效), 誰看得出來這個訊息是什麼意思, 查了一下, 發生的原因原來是因為原本在網頁上的安裝連結:
itms-services://?action=download-manifest&url=http://xxx.com.tw/xxx.plist

中的後面 url 沒有走 SSL 加密通道, 也就是 https.

如何解決這個問題, 當然, 就是改為 https://xxx.com.tw/xxx.plist 即可, 但若是沒有購買 SSL 加密憑證, 如何解決呢? 可以使用第三方的網站分享連結, 而且支援 https 的, 可以利用 dropbox 的 share link.

做法如下:

1. 將原來的 plist 檔案放在 dropbox 空間, 並生成分享連結(share link), url 會像如下:
https://www.dropbox.com/s/xxxxxxxxx/xxx.plist

2. 若上面網址沒有 https, 就自行改成 https 即可, 並將 www.dropbox.com 改為 dl.dropbox.com, 如下:
https://dl.dropbox.com/s/xxxxxxxxx/xxx.plist

3. 將原來的 itms-services:// 後的 url 改成上面 url 即可, 如下:
itms-services://?action=download-manifest&url=https://dl.dropbox.com/s/xxxxxxxxx/xxx.plist

上線即完成, 不過缺點會是這樣, 在安裝時會出現 dropbox 的安裝通知, 如下:
若不介意 dl.dropboxusercontent.com 的這個訊息, 這就可以進行安裝了, 是用 dropbox 的 https 來解決這個 iOS 7.1 強迫要用 https 下載 plist 的問題.

繼續閱讀:
http://bencollier.net/2014/03/ios-enterprise-app-error-cannot-install-applications-because-the-certificate-is-not-valid/
http://www.cocoachina.com/bbs/read.php?tid=194213&fpage=0&toread=0&page=1

若是還沒有 dropbox 空間的朋友們, 也歡迎多利用這個 referral link 加入, 謝謝: https://db.tt/h1NpPka3

分類
Database

SQL Server資料表使用GUID欄位考量

在資料表中, 使用 GUID做為clustered index時, 很容易因為是隨機產生的值, 而導致資料存放的離散, 可以利用這個函數來改善:

NEWSEQUENTIALID()

該函數是循序地建立 GUID, 也是唯一值, 但可以降低離散的狀況, 進而改善未能有效填滿及離散的問題.

當然, 若是 GUID欄位沒有使用在 cludtered index時, 則比較不需要擔心這個問題.

參考資料:
http://technet.microsoft.com/zh-tw/library/ms189786.aspx

分類
好用軟體

iTools繁體中文版

以前為了要管理 iPad 設備, 不想用肥大又不好用的 iTunes, 轉而使用方便精簡的 iTools, 不過以往都是簡體中文版本, 但是功能強大又方便, 備份資料也很容易, 現在有了繁體中文版本進來了, 代理是國內的公司, 可以參考官方網站:

http://tw.gashplus.com/itools

這次的版本還多了可以管理 Android 的設備(雖然說 Android 不像 iPad/iPhone管理那樣不方便), 不過廠商多增加這樣的設計還真是方便兩種系統都有的用戶們.

這裡有詳實的介紹, 可以參考阿祥的網路筆記本: http://axiang.cc/archives/9283

有需要的朋友們可以試看看.

分類
.net

.net WebBrowser的script error抑制

在 window form中使用 webbrowser 時, 有時會遇到 javscript error 的訊息, 此時會出現需要使用者介入的操作, 程式才能繼續執行下去.

這樣對於一些自動化操作的程式會有停止無法執行的問題, 所以可以利用一個 webbrowser 的屬性 “ScriptErrorsSuppressed” 設為 True 即可抑制這個會出現的人機介面.

不過記得使用這個屬性, 後續的程式也得注意網頁程式的異常後, 如何做良好的控制, 才不會因為這個屬性設定後, 雖然程式可以繼續往下執行, 但 webbrowser 中的程式錯誤而產生非預期結果的狀況, 就不好了.

參考資料: http://stackoverflow.com/questions/8009575/c-sharp-webbrowser-how-to-get-rid-of-javascript-error-prompt

分類
懶得分類

國道收費試算

2013/12/30 起實施國道里程收費, 整理一下收費試算資料:
https://docs.google.com/spreadsheet/pub?key=0AvQRaqbi5E6EdGpzU1Z2dGZTSGZmaXRyTU13a0I2T0E&output=html

其中試算方式依照國道電子收費標準:
http://www.freeway.gov.tw/Publish.aspx?cnid=1880&p=3862

  1. 小型車每日每車優惠里程20公里,標準費率1.20元/公里(20公里<行駛里程≦200公里),長途折扣費率0.90元/公里(行駛里程>200公里)
  2. 大型車每日每車優惠里程20公里,標準費率1.50元/公里(20公里<行駛里程≦200公里),長途折扣費率1.12元/公里(行駛里程>200公里)
  3. 聯結車每日每車優惠里程20公里,標準費率1.80元/公里(20公里<行駛里程≦200公里),長途折扣費率1.35元/公里(行駛里程>200公里)

費率型式

費率型式 費率金額(元/公里)
小型車(小客車、小貨車) 大型車(大客車、大貨車) 聯結車
每日行駛里程≦20公里 0 0 0
標準費率(20公里<每日行駛里程≦200公里) 1.2 1.5 1.8
長途折扣費率(每日行駛里程>200公里) 0.9 1.12 1.35

另外有關收費優惠, 2014春節費率統一為 0.9元/公里, 所以在超過 80公里起, 才會比較優惠, 這個部分可以參考試算表內容.

遠通電收的部分也有提供線上試算功能, 給各位使用:
http://fare.fetc.net.tw/Default.aspx

原本想說寫個試算小程式, 看起來也就不需要了.

分類
Database

SQL Join語法圖示

這篇主要目的是介紹集合, 使用 SQL Join 指令時的語法與集合的關係, 資料可以參考這篇: http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

(以上圖片引用自: http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins )

在資料庫查詢時, 使用 Join 語法是用來查詢多個資料表間的相關資料狀況用的, 區分為 inner join 及 outer join 兩種, 不指定時預設為 inner join, 也就是在兩邊都存在的資料, 使用 inner join 查詢, 例如 select a.sid from table_a a inner join table_b b on a.sid=b.sid 時, 會出現同時在 a 與 b 的 sid 都存在的資料.

例如 table_a 存在 1, 2, 3, 5, 6, 7, 10, 11 共八筆資料, 而 table_b 存在 2, 3, 4, 5, 6, 7, 8 共七筆資料時, 使用 inner join 則取出 2, 3, 5, 6, 7 共五筆資料.

而 left join (也就是 left outer join), 則是取出以左邊為主, 不管右邊是否存在的資料, (不存在的資料會用 null 值補齊欄位), 如:

select a.sid from table_a a left join table_b b on a.sid=b.sid

則會取出 1, 2, 3, 4, 5, 7, 10 , 11 共八筆資料,

而 right join (也就是 right outer join), 則是取出以右邊為主, 不管左邊是否存在的資料, 如:

select a.sid from table_a a right join table_b b on a.sid=b.sid

則會取出 2, 3, 4, 5, 6, 7, 8 共七筆資料.

另外還有 full join (也就是 full outer join)則是兩邊都取出來, 如:

select a.sid, b.sid from table_a a full join table_b b on a.sid=b.sid

則會取出兩個表全部的內容, 1, 2, 3, 5, 6, 7, 10, 11, 4, 8 共十筆資料,

其他若是需要做其他的集合, 只需要再加上 where 中的 is null 就可以產生差集這樣的方式.

繼續閱讀:
http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins
http://blog.wu-boy.com/2009/01/mysqlleft-right-inner-outer-join-%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95/

分類
懶得分類

影片壓縮Bitrate參考

在壓縮影片時, 往往想要好一點的品質而提高Bitrate(碼率), 但是過高的 Bitrate 其實不見得會提升更好的畫質, 如何選擇較適合的Bitrate, 可以參考 Youtube 的建議資料:

https://support.google.com/youtube/answer/1722171

標準品質上傳內容

類型 視訊位元速率 單聲道音訊位元速率 立體聲道音訊位元速率 5.1 聲道音訊位元速率
1080p 8,000 kbps 128 kbps 384 kbps 512 kbps
720p 5,000 kbps 128 kbps 384 kbps 512 kbps
480p 2,500 kbps 64 kbps 128 kbps 196 kbps
360p 1,000 kbps 64 kbps 128 kbps 196 kbps

高品質上傳內容,適用於具備企業級網際網路連線品質的創作者

類型 視訊位元速率 單聲道音訊位元速率 立體聲道音訊位元速率 5.1 聲道音訊位元速率
1080p 50,000 kbps 128 kbps 384 kbps 512 kbps
720p 30,000 kbps 128 kbps 384 kbps 512 kbps
480p 15,000 kbps 128 kbps 384 kbps 512 kbps
360p 5,000 kbps 128 kbps 384 kbps 512 kbps

原則上以上的數值已是高標準的Bitrate, 若設定的更高其實意義不大, 大家可以參考看看.

分類
好用軟體

AzCopy好用Windows Azure Storage指令工具

使用 Windows Azure Storage 來進行遠端(雲端、異地)備份是很不錯的方式, 不過工具需要找一下, 當然也可以自行下載 SDK 寫程式的方式也不錯, 只是有更好的選擇.

這次要介紹的工具是 AzCopy, 官方下載連結: http://www.microsoft.com/en-us/download/details.aspx?id=39708 , 目前的版本是 2.1

這個工具使用指令的方式進行操作, 目前的版本已經可以支援跨 account 進行複製傳輸檔案, 而且操作方式十分簡單, 指定來源及目的就可以進行檔案的複製操作了.

例如下載:

AzCopy.exe http://<account name>.blob.core.windows.net/<container> c:\temp /sourcekey:<storage key> *.jpg

將 Windows Azure Storage 上的指定 container 中的 jpg 檔下載到本地的 c:\temp 目錄.

例如上傳:

AzCopy.exe c:\temp http://<account name>.blog.core.windows.net/<container> /destkey:<storage key> *.log

將本地 c:\temp 下的所有 log 檔上傳到指定的 container 中.

也可以將來源和目前指向都是 windows azure storage 的方式來進行雲端上的複製, 例如:

AzCopy.exe http://<account name-1>.blob.core.windows.net/<container-1>
http://<account name-2>.blob.core.windows.net/<container-2> /sourcekey:<storage key-1> /destkey:<storage key-2> *.txt

就是將 <account name-1> 的資料複製到 <account name-2> 來, 這樣就是雲端對雲端的複製了.

使用這個小工具, 可以很方便地將資料檔案複製到雲端, 上傳或下傳檔案, 十分好用.

參考資料:
http://blogs.msdn.com/b/windowsazurestorage/archive/2012/12/03/azcopy-uploading-downloading-files-for-windows-azure-blobs.aspx
http://blogs.msdn.com/b/windowsazurestorage/archive/2013/04/01/azcopy-using-cross-account-copy-blob.aspx

[2013/12/13 17:19]補充資料, 在SQL Server 2005後也有套件可供直接備份到 windows azure 的 storage 功能: http://msdn.microsoft.com/zh-tw/library/dn535724.aspx

分類
好用軟體

升級IE11

今天將工作的桌機升級到IE11.

升級完後, 發現還蠻令人驚豔的, 主要是在 rendering 的效果有很顯著的提升.

一直以來, 用 Firefox 習慣了, IE則是在開發時, 會使用的工具之一, 不過不是主要的瀏覽器, 從 8, 9, 10 以來都覺得不是那麼快, 不過到了 11版本, 看起來真的快很多, 感覺還蠻不錯的, 之後會使用 IE11 的機會應該會增加不少吧, 很棒, 看到 IE也很努力強化中, 加油!

下載連結: http://windows.microsoft.com/zh-tw/internet-explorer/ie-11-worldwide-languages

分類
程式技術

使用Facebook FQL查詢留言資料

用 Facebook 的網頁/網站很多, 應該是已經過了大流行的階段, 但是使用 Facebook 的地方還是很多, 如何利用程式將公開性的 Facebook 資料找查出來, 有方便好用的工具可供應用, 就是使用 FQL 查詢. 這裡介紹一般常用在網頁上留言的資料, Comment Plugin, 查找留言資訊.

先來看這篇: https://developers.facebook.com/docs/reference/fql/comment

這篇介紹 FQL 的 comment 資料查找方式, 我們以這個網頁作為例子:
http://sample.diary.tw/18/maps.htm

這裡裝了 Facebook 的 comment plugin, 那我們要查找該頁中 comment 的資料要怎麼查找呢? 首先要先找到該 comment 的 object_id, 該 id 可以利用這頁來找:
https://developers.facebook.com/tools/debug

將上面的 http://sample.diary.tw/18/maps.htm 輸入後, 按下[除錯]鈕, 在最下面的網址可以得到該 comment 的 object_id 為: 10150561101545602, 這個就是在 FQL 中, 查詢 comment 的 object_id. (在 Facebook 中, 會給定的各 object id)

再來就要下 FQL 查找資料了, 語法如下:

SELECT id, text, time, fromid FROM comment WHERE object_id='10150561101545602'

問題是從哪裡下呢? 從這裡 Graph API Explorer:
https://developers.facebook.com/tools/explorer
(若無法使用, 會引導登入 Facebook, 使用 Graph API Explorer需要登入 Facebook)

再將中間原來預設為 Graph API 的功能切到 FQL Query, 接下來把上面的查詢指令輸入, 就會得到目前的留言資料, 以 json 的方式來顯示.
接下來的使用, 相信大家就應該容易多了, 就是解析 json 把資料取出來即可.

那如何使用呢? 在程式中如何呼叫這個查詢, 而不是用 Graph API Explorer, 有沒有看到瀏覽器上方的 url 已經變了, 如下:
https://developers.facebook.com/tools/explorer?fql=SELECT%20id%2C%20text%2C%20time%2C%20fromid%20FROM%20comment%20WHERE%20object_id%3D%2710150561101545602%27
也就是說, 其實就是把查詢放到 url 中的 q 參數即可, 但使用上, 前面的 Graph API Explorer 得改成如下:
https://graph.facebook.com/fql?q=SELECT%20id%2C%20text%2C%20time%2C%20fromid%20FROM%20comment%20WHERE%20object_id%3D%2710150561101545602%27
使用 Graph FQL 查詢即可, 這是不用登入就可以使用的, 也就是說, 在程式中只需要透過 webget 等方法, 就可以取得到內容.

應該會有人問, 這個查詢結果, 其中的 text 是留言沒錯, 但沒有人名, 大頭圖, 那怎麼辦, 很簡單啊, 就再回 FQL 查詢就可以了, 不過若是有 100篇留言就要查 100次耶, 或是 smart 一點, 100篇留言, 共 30 個人在留, 那也需要做 30次的 user 查詢, 怎麼想都很難處理, 所以接下來要介紹的是多重查詢.

多重查詢, 有點像是 SQL 中的子查詢, 在面對這種 FQL 查詢時, 可以利用的技巧, 我們將查詢改一下, 改為如下:

{
"comments": "SELECT id, text, time, fromid FROM comment WHERE object_id='10150561101545602'",
"commenters": "SELECT uid, name, pic_square FROM user WHERE uid IN (SELECT fromid FROM #comments)"
}

對, 正如你看到的, 使用一個 #comments 代替前一個查詢結果, 並代入下一個查詢, 利用 json 格式, 將多重查詢放到 FQL 中, 就可以一次查詢把留言和人帶回來, 忘了說, user FQL 參考資料在這裡:
https://developers.facebook.com/docs/reference/fql/user

第二個查詢中的 uid, name, pic_square 就是常用的使用者代碼, 名稱, 大頭圖資訊.
查詢回傳結果就會有兩個 fql_resulte_set, 分別就是 comments, commenters, 如下:

中間略…
就把留言和留言者一次查回來了.

再來, 如何利用程式 parse json 的回傳結果, 就不用多說了吧, 應該就簡單多了, 快去實做看看吧.