2017年8月31日 星期四

C# 使用微軟翻譯API ( Microsoft Translator )


[C#.NET] 利用 Microsoft Translator 翻

https://dotblogs.com.tw/yc421206/archive/2012/01/23/66926.aspx



C# 使用微軟翻譯API ( Microsoft Translator )


http://blog.xuite.net/riway62/blog/301024268-C%23+%E4%BD%BF%E7%94%A8%E5%BE%AE%E8%BB%9F%E7%BF%BB%E8%AD%AFAPI+(+Microsoft+Translator+)+


2017年8月30日 星期三

.net使用SQLite

.net使用SQLite支援64元位/32位元

https://blog.yslifes.com/archives/1543

Csharp使用ADO.NET操作SQLite

https://blog.yslifes.com/archives/972

http://www.sqlite.org/download.html

http://www.itjsxx.com/sqlite/System_Data_Sqlite.html

http://vincecc.blogspot.tw/2013/11/c-sqlite-sqlite-tutorial.html

how to get the browser history in program using c#

how to get the browser history in program using c#


https://social.msdn.microsoft.com/Forums/en-US/3e9f3588-ad0b-49af-b269-2abfda0b9abc/how-to-get-the-browser-history-in-program-using-c?forum=csharpgeneral

https://www.youtube.com/watch?v=S4fz7-KQSFY

https://www.youtube.com/watch?v=uRKeZSCwlyE#t=158.723996

http://hardcodedblog.blogspot.tw/2012/01/get-web-browser-history-in-c-google.html


Satish MadugunduJune 22, 2012 at 3:59 PM
Hi
I tried this code to capture the google chrome browser history but I am getting this error as "The database file is locked
database is locked"
could you please suggest me how to fix this issue.
I have installed sqlite also

Reply
Replies

ChrisJune 27, 2012 at 5:09 PM
Make sure you are not running chrome.


Joel MathiasNovember 22, 2012 at 7:09 AM
Yes, this code cannot run when Chrome is running at the same time

2017年8月29日 星期二

C# 系统应用之通过注册表获取USB使用记录(一)

C# 系统应用之通过注册表获取USB使用记录(一)


http://www.voidcn.com/article/p-hwnbyqaj-po.html

2017年8月18日 星期五

學會8種簡報版型

靠這套SOP準備簡報,他成功說服蘋果CEO,省下六千萬成本!

https://www.managertoday.com.tw/articles/view/51532

https://www.managertoday.com.tw/articles/view/53999

頂尖企業都在用的「無雜訊」簡報製作法!學會8種簡報版型,別人更容易認同你



你在台上講得口沫橫飛,觀眾在下面卻是一頭霧水,這樣的情景是否似曾相識?其實,簡報的形式必須對應論述的邏輯:而邏輯的展開,必定有最適合的簡報形式。也就是說,如果簡報架構不明確,或是過於複雜,聽眾是很難理解的。
曾任職於波士頓咨詢公司(BCG)的森秀明,以看過10萬頁以上的投影片經驗,發現好的投影片能清楚顯示製作者的邏輯,讓觀眾可以直接看懂結論和資料之間的對應關係。舉例來說,如果採用一對一論法,聽眾的習慣是從上往下看投影片,這樣就會先看到「結論」,再往下看到「證據」(事實、案例、數據),如此就能輕鬆理解你的推理過程。同時,好的投影片花樣不多,《做好文獻探討》將主要版型分為8種,只要掌握好這8種,就能讓觀眾清楚看出你的資料脈絡。




1. 一對一論法:單一證據就可以傳達一個事實

所有論法中最基本的,根據一個有說服力的事實、案例或數據,推論出一個結論。像右圖的目的是為了傳達芬蘭在6個國家中森林覆蓋率第一,所以簡報者的「主張」就是芬蘭在這些國家中森林覆蓋率是最高的,再以長條圖列出6個國家森林覆蓋率的數據,其中芬蘭的森林覆蓋率為72%,位居第一,由此「證明」主張是正確的來說服聽眾。


經理人147期

2. 並列論法:列出多個同質性事實支持論點,增加說服力

藉由多個事實一起證明,來強調論點的正確性。像是「蘇格拉底死了、柏拉圖死了、亞里斯多德也死了,因為這些事實而得出「人都會死」的結論。這就是並列論法的特色。再以右圖為例,寶僑(P&G)和美國設計顧問公司IDEO都有針對腦力激盪制定會議規則,顯見要讓腦力激盪發揮效果,制定適合開會的規則是關鍵。


經理人147期

3. 結合論法:藉由同時存在的現象,支持結論

「結合論法」跟「並列論法」不同的是,需要多個事實同時存在,才能證明主張。像下圖的「結論」:美國1973年後經濟衰退1%是不尋常的,就必須在「戰後經濟成長率4%並不特別(1870年後皆高於3.4%)」與「經濟成長率從未如此緩慢(嬰兒潮開始進入市場,經濟成長率卻卻依然是1870年來新低)」同時存在,才能證明。


經理人147期

4. 連鎖論法:描述人事時地物的因果關係

天氣看起來陰陰的,推論可能會下雨,再推論出門需要帶把傘。因為A得B、B再得C,即為連鎖論法。像下圖就是一本雜誌的出版流程,從撰文、美編到印刷,最後才有你手上這本熱騰騰的雜誌。


經理人147期

5. 麥肯錫論法:融合連鎖與結合論法

麥肯錫的顧問都喜歡畫流程圖,他們會融合連鎖與結合論法,就是隨著時間的經過,依據記錄工作的流程,例如拓展事業的進行步驟。像右圖分析,從進貨到販賣的過程中存在的資訊管理問題,就是藉由列出不同時間段可能發生的資訊問題,來找出各自的解決方案,最終解決資訊管理問題。


經理人147期

6. 對立論法:從正反意見中得出結論

針對同一個問題,先敘述某個見解,再提出相反的觀點,藉由比較兩者不同的看法得出主張。像下圖針對創始人、主義、研究內容、影響,分別以泰勒主義(Taylorism)和梅奧主義(Mayo Theory)進行比較,最後得出結論:定位理論源自泰勒主義,能力主義源自梅奧主義。


經理人147期

7. 比較論法:找出不同方案的共通點與差異點

與對立論法不同的是,比較論法適用於兩個見解存在共通點與差異點,而非完全不同。像下圖,定位論和能力論的相似點,就是都可反覆實驗。定位論有鐵鍬實驗;能力論有霍桑實驗。但兩者在實驗方法上存在差異,定位論重視量化分析;能力論重視質化分析。


經理人147期

8. BCG論法:融合對立與比較論法

BCG的顧問擅長以2X2的矩陣為事物做分類,像是產品組合管理法(一般稱BCG矩陣)。從右圖可看出左下角的漸進型改良商品和右上角的創新型開發商品,無論商品或客戶都沒有共通點,彼此是對立的;左下角的漸進型改良商品和右下角的進化型適應產品,皆是針對既有客群,只不過是新、舊產品的比較。


經理人147期


處理"無法啟動IIS Express Web伺服器"問題

https://dotblogs.com.tw/sapphire/2017/03/10/20170310

最近在學習ASP.NET MVC,去上課的時候會有老師的範例,打開來之後往往會跳出一個視窗,顯示"無法啟動IIS Express Web伺服器",如下圖:
找了網路上的解法,都無法解決,最後還是請問助教,才可以開啟。
解法如下:
1. 在方案總管選擇專案按右鍵,選屬性
2. 左邊選單選擇Web,然後將專案URL裡的port改掉,按儲存檔案。
3. 到此專案下的.vs\config資料夾下,將applicationhost.config檔案移除,並重開此專案,即可執行。

2017年8月17日 星期四

C#,利用Mutex實現應用程式的單實例運行

C#,利用Mutex實現應用程式的單實例運行
C#,利用Mutex實現應用程式的單實例運行

System.Threading.Mutex :同步基元,它只向一個執行緒授予對共用資源的獨佔訪問權。[MSDN]
實現原理: 在程式啟動時,請求一個互斥體,如果能獲取對指定互斥的訪問權,就繼續運行程式,否則就退出程式。
測試代碼: 
class Test
     {
         /// <summary>
         /// 應用程式的主入口點。
         /// </summary>
          [STAThread]
         static void Main(string[] args)
         {
              bool flag=false;
              System.Threading.Mutex mutex=new System.Threading.Mutex(true,"Test",out flag);
              //第一個參數:true--給調用執行緒賦予互斥體的初始所屬權
              //第一個參數:互斥體的名稱
              //第三個參數:返回值,如果調用執行緒已被授予互斥體的初始所屬權,則返回true

//isAppRunning = false表示已執行,沒有拿到權仗,若拿到權杖則為true

              if(flag)
              {
                   Console.Write("Running");
              }
              else
              {
                   Console.Write("Another is Running");
                   System.Threading.Thread.Sleep(5000);//執行緒掛起5秒鐘
           //請勿使用this.close(); 會有錯誤發生
                   Environment.Exit(1);//退出程式
              }
              Console.ReadLine();
         }

運行結果:
第一次運行,輸出"Running"。
不關閉第一次運行的程式, 進行第二次運行,輸出"Another is Running",五秒鐘後,程式自動退出。

[C#]使用Mutex實現單一程式執行個體的注意事項
[C#]使用Mutex實現單一程式執行個體的注意事項
相信大家都知道在.NET程式中若要實現單一程式執行個體,一般來說有幾種方法,像是去判斷是否已經有開啟的Process是相同的程式、用Mutex與Semaphore之類的技術來判斷是否程式正在開啟。但是很多網路上的文章都忽略了在用Mutex實現單一程式執行個體時,其實會有些必須要注意的地方,導致於在實際運用上沒有發揮到該有的效果。

以一個簡單的例子來看,一般我們在網路上常看到的使用方式大概就像下面的程式碼片段類似,建構Mutex時就會回傳該Mutex是否已經存在,利用該回傳值來決定程式應該繼續開啟還是關閉。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication10
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

Boolean bCreatedNew;

//Create a new mutex using specific mutex name
Mutex m = new Mutex(false, "myUniqueName", out bCreatedNew);

if (bCreatedNew)
Application.Run(new Form1());
}
}
}

這樣的程式到底有什麼樣的問題呢?有興趣的可以試著建置Release的程式看看,其實這樣的程式在某些情況下會在Release模式下失效,Debug的運作卻是正常的,若試不出來的可以再加上個GC.Collect試試,會更容易重現。
...
Boolean bCreatedNew;

//Create a new mutex using specific mutex name
Mutex m = new Mutex(false, "myUniqueName", out bCreatedNew);

GC.Collect();

if (bCreatedNew)
Application.Run(new Form1());
...

之所以會有這樣的問題,是因為Mutex在Release模式下被GC給回收了,而Debug模式下因為便於開發人員除錯,據說有將GC的周期給拉長,所以不容易重現。那這樣的問題要怎麼樣解決呢?這邊筆者有整理了幾種方法。

一個方法就是把Mutex給拉出來成為類別成員。
...
static Mutex m;

/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

Boolean bCreatedNew;

//Create a new mutex using specific mutex name
m = new Mutex(false, "myUniqueName", out bCreatedNew);
GC.Collect();

if (bCreatedNew)
Application.Run(new Form1());
}
...

另一個方法就是讓Mutex不要被GC回收掉,像是在程式最後明確呼叫Dispose,讓GC知道該Mutex仍在使用。
...
Boolean bCreatedNew;

//Create a new mutex using specific mutex name
Mutex m = new Mutex(false, "myUniqueName", out bCreatedNew);

GC.Collect();

if (bCreatedNew)
Application.Run(new Form1());

m.Dispose();
...

也可以用using或是try...finally之類的語法將Mutex給hold住。
...
Boolean bCreatedNew;

//Create a new mutex using specific mutex name
using (Mutex m = new Mutex(false, "myUniqueName", out bCreatedNew))
{
GC.Collect();

if (bCreatedNew)
Application.Run(new Form1());
}
...

或是把Mutex的用法寫的比較正規一點,加上WaitOne與ReleaseMutex去明確控制Mutex的作用範圍。
...
Boolean bCreatedNew;

//Create a new mutex using specific mutex name
Mutex m = new Mutex(false, "myUniqueName", out bCreatedNew);

m.WaitOne();
GC.Collect();

if (bCreatedNew)
Application.Run(new Form1());

m.ReleaseMutex();
...