2017年11月24日 星期五

Visual Studio 使用InstallShield 建置找不到Prerequest資源

Visual Studio 使用InstallShield 建置找不到Prerequest資源


最近開啟舊專案進行維護,
使用InstallShield重新建置安裝檔時報錯...

例如:

-1007: Cannot copy source 'C:\Program Files (x86)\InstallShield\2015LE\SetupPrerequisites\Windows Installer\3.1\x86\WindowsInstaller-KB893803-v2-x86.exe' to ..

因為舊專案之前是在另一台電腦開發的,
現在換新電腦,所以Prerequest的資源必須重新下載,
操作方式如下:





參考資料:
https://stackoverflow.com/a/13473130

2017年11月16日 星期四

Chrome Dev tools 小技巧(1)

Chrome Dev tools 小技巧(1)

在Chrome Dev Tools開啟的狀態下在 重新載入頁面 的按鈕鼠左鍵長按後會出現以下選項:


(1)正常重新載入( Normal Reload):
     這和按 F5 重新整理頁面是相同的功能
     會使用Cache的頁面,僅可能不去下載已經Cache的資料( Javascript, image...等)

(2)強制重新載入(Hard Reload):
     不使用該頁的Cache資料,強迫重新重新下載所有資料

(3)清除快取並強制重新載入(Empty Cache and Hard Reload):
     會清空所有cache資料,
     例如有的網頁會透過script去下載其他的資源,這裡也會一併都清除。

2017年11月7日 星期二

節奏練習--Nubia

節奏練習--Nubia


Nubia 是位於埃及南部與蘇丹北部之間沿著尼羅河沿岸的地區。

這是該地區使用的節奏型態,有興趣的可以練習看看~


1-+-2-+-3-+-4-+-5-+-6-+-7-+-8-+-| 拍子
D---K---t-k-D---t-k-K---K---t-k-| 基本句型

D-t-K-t-t-k-D-t-t-k-K-t-K-t-t-k-| A 句
r-l-r-l-r-l-r-l-r-l-r-l-r-l-r-l-| 手法

D-t-S-| B 句
r-r-l-| 手法

D-t-K-| C 句
r-r-r-| 手法

D-tkK-| D 句
r-rlr-| 手法

練習方法:
(1)口唱 基本句型,一直循環
(2)每3次循環後換另一句
(3)句子的順序為:A --> B --> A --> C --> A --> D

2017年11月3日 星期五

Blogger文章嵌入存在Google雲端的PDF文件的方式


在Google雲端硬碟中選取要分享的PDF-->滑鼠右鍵-->共用








共用選項選擇 知道連結的人均可以檢視,然後有二種方式:
(1)人性化方法:
     點選視窗右上角的三個點點處 >  在新視窗中開啟
     

         在新開啟的視窗中點選視窗右上角的三個點點處 > 嵌入項目

      複製HTML語法


(2)土法煉鋼方法:把連結複製起來


                            複製的連結長這樣:
 https://drive.google.com/file/d/0B3NYw2d0wSRQUEhneS1NY0JoUjA/view?usp=sharing
把view?usp=sharing 改為 preview

https://drive.google.com/file/d/0B3NYw2d0wSRQUEhneS1NY0JoUjA/preview



最後一步

嵌入語法如下 --寬(width)、高(height)請再依需求調整:

<iframe src="https://drive.google.com/file/d/0B3NYw2d0wSRQUEhneS1NY0JoUjA/preview" width="100%" height="600px" ></iframe>

 在文章編輯頁面的HTML編輯區塊中把這段語法放上去就可以囉!

[免費鼓譜]秦王破陣樂--打擊分部譜

秦王破陣樂--打擊樂分部譜整理

最近國樂團要練 秦王破陣樂 顧冠仁作曲 打擊有六個聲部,拿到的譜是三個聲部集結為一份總譜, 一份譜十幾頁…這樣合奏時會來不及翻譜...
所以使用 MuseScore 整理了一下。 變成六個聲部一份總譜方便看打擊部的全貌。 另外也把六個聲部分譜獨立出來, 這樣各自負責的聲部只要2~3頁,方便多了!
整理後的PDF檔如下,分享給有須要的人:

2017年11月2日 星期四

以C#實作Google Authenticator 產生一次性驗證碼

以C#實作Google Authenticator 產生一次性驗證碼

之前寫了自動登入到合作夥伴公司的B2B平台網站抓取每日報表,
該平台原本是透過圖形驗證碼的方式來阻擋爬蟲,但其選擇圖形其實是很單純,
難易度太低,有心人要解開其實是很簡單的,
後來該平台應該有意識到這個問題,最近更新為使用Google Authenticator的一次性密碼驗證碼TOPT ( Time-based One-time Password ) 進行二階段驗證

1.先下載Google Authenticator app:Android, iOS

2.使用該 app 掃瞄讀取B2B平台所提供的QRCode後便會新增一個自動產生一次性驗證碼的項目,驗證碼每30秒就會變動一次



不得不說這的確是增強了網站登入的防護,要給予掌聲鼓勵!

但這種方式對良善之心要運用自動登入的老百姓該怎麼辦?
難道要回到原始時代人工作業嗎?

想來想去,心有不甘!
走~!想解決方案去!!!

解決方案一:

即然我們可以看到這個驗證碼,那只要在VM 虛擬機器上掛個Android系統
再安裝Google Authenticator 來產生驗登碼,
寫個程式自動擷取該視窗驗證碼的畫面後進行OCR辦識,這樣就解決了。
這是我一開始的想法,後來也實作出來了(擷取視窗驗證碼的方式之後再寫另一篇)。

這樣的缺點是:
1.擷取畫面時如果該視窗突然被其他視窗蓋到就會失敗
2.須安裝VM,而且要一直開著…有點浪費系統資源

有沒有方式可以解決浪費資源這點呢?後來想說會不會Chrome有相關外掛呢?
這樣就能在要執行時再開啟Browser進行截取就好了
google了一下還真有耶!

但這個網站外掛並不是google所開發的,為什麼他產生的也可以適用?
這代表演算法一定是有公開
(Google Authenticator 也是程式碼開源的,有興趣可以到GitHub Google Authenticator參考 )
所以接下來就生出了更好的解決方案了:

解決方案二:

直接實作演算法(我是參考Tin Isles的javascript實作改用c#東抄西抄來實現而已...
只要有了金鑰,透過演算法就可以得出一次性碼囉~
那金鑰哪來?其實上面所說的QRCode只是一個紀錄私密金鑰的載體而已:



程式碼參考如下:

參考資料: