Skip to main content

Posts

Showing posts from 2012

[Raspberry pi] 陽台的老鼠偵測器

前言: 話說前陣子爸爸家陽台不斷出現米奇老鼠,立刻清理陽台所有東西,然後又跟市政部門反映問題,可是情況還沒有好轉,米老鼠來完一隻又一隻,我爸陽台在老鼠界應該是網紅打卡聖地(誤),要不然就是米奇老鼠版米奇林三星餐廳(?) 雖然我們抓到了三隻,到上兩個禮拜為止還有至少一隻一直抓不到,每天淩晨還會來吃事後煙留下老鼠屎,真_北。 這隻老鼠對傳統攻擊有抗性,有IT9朋友前陣子用Raspberry pi自製了一台electric mouse trap ,用pi的超聲波雷達放在鞋盒裡,鞋盒裡有一堆食物,底部佈了鐵網,偵測到有老鼠進去以後立即關門通9V電,通個1分鐘再放牠離開,大推我自己也造一台 (Youtube片搜尋一大堆,人類真變態啊,朋友好變態啊)。可是我覺得這樣又好像有點太殘忍,不如先偵測牠們什麼時候來,嚇嚇牠們看看有沒有效果再說吧。 目的: 用Raspberry pi及手上有的感測器弄一隻放陽台用來偵測和嚇嚇老鼠的東西,並把紀錄圖像化到雲端給老爸使用。 邏輯及設計: 當老鼠進入偵測範圍,Motion Sensor偵測到生物活動Raspberry pi 處理來自Motion Sensor的訊號,如果夠強的話開始準備作出回應 Raspberry pi在Angry cats sounds中隨機選出叫聲,再經由Speaker輸出貓叫聲 Raspberry pi指示強光元件發出強光束照射目標 把偵測計數上傳到雲端圖表 材料: Sensor 在網路上看了一些Raspberry pi wild animal camera ,很多也是用Motion Sensor先偵測動物再來,我用的是PIR Motion Sensor被動式紅外線感測器,有低耗電成本便宜的好處。[1],而且可手動調整靈敏度及反應時間。  PIR Motion Sensor就是下面這個 圖片來源: learn.adafruit.com 可手動調整敏感度還有反應時間,這個有點不好調,要試好多遍才找到最佳位置。 可以在Raspbian中輸入pinout查詢GPIO避免插錯 圖片來源: learn.adafruit.com . 一台Raspberry pi 這次使用較舊的Raspberry pi model B+ 萬一老鼠生氣被咬爛錢包也不太痛 . 一張

[SQL Server] 2005 中 Maintenance Tasks的各種功能

不知道從那天開始小弟在公司要兼顧 SQL Server 系統管理員的工作。 在Database管理這個領域只有lv1的我,最近發覺公司的SQL Server沒有任何的Maintenance Plans。所以小弟打算加一些進去以保持良好的效能。不過打開Maintenance Plans Wizard就頭大了,下面這些Tasks究竟是啥咪啊..... 不過不用擔心,拜股溝就是有保佑啊....後來我找到 一篇好的文章 ,詳細描述每個Tasks的功能,並且有怎樣使用Wizard的介紹。看完大致搞弄每個功能的用途了...(握拳)

[AD] Network Service帳號可以存取遠端共享資料夾嗎?

昨天朋友在開發的Winform系統要存取伺服器端的資料夾,他問我除了自己開一個帳號以外,有沒有一個預設的AD帳號可以有這個功能。 我想了一下應該是.....沒有。因為我記得Network Service的帳號是Local user,照道理不太可能可以給其他Client端的系統使用它。為了確認我的假設,我還是拜了一下股尻(Goole)神。 根據MSDN的官方說明: "The NetworkService account is a predefined local account used by the service control manager."  (  http://msdn.microsoft.com/zh-tw/library/windows/desktop/ms684272(v=vs.85).aspx  ) Network Service的帳只是Local的帳戶,應該真的不能遠端存取。 為了再三確認,所以在IT邦又問了同樣一個問題: http://ithelp.ithome.com.tw/question/10112493 其本上已經確認Network Service不能存取遠端了。/__\

Team foundation server 2012 express 的兩三事

今天幫公司把Visual Studio 2012 跟Visual Studio 2010做個比較決定要不要買,無意中發現Team Foundation Server居然推出免費版本了~!!! 二話不說就利用公司資源 公器私用 把它抓了回來。 Team Foundation Server Express是什麼? 我們看一下微軟官方的解釋: " With Team Foundation Server Express, even the little guys can go big. Up to five developers can access powerful application lifecycle management tools, collaborating and controlling the rise of your application, just like any large organization. " 簡單來說這就是Team Foundation Server的簡單版本。用來控制開發進度以及讓開發者之間能夠更好的進行整合。功能類似免費的TortoiseSVN,不過它跟Visual Studio的整合度更高  廢話大家也是微軟的產品嘛 ,而且還支援開發流程控制,是一件不錯的工具。 安裝 老話一句,很多大大發過專業文章我也不用再寫了,請參考 拉圾場大的文章 。 安裝完成後會看到這個畫面,就搞定囉: 20140509更新: TF400416錯誤 如果今天你安裝繁體中文版的TFS express到一台不是繁中的Windows上的時候, 可能會出現TF400416的錯誤. 這時候可以打開"開啟記錄檔" -> 尋找關鍵字"TFS product", 會找到下面這樣的一句: 你應該會發現 Product Language 跟 Windows Language不一樣, 因此會出現TF400416這個錯誤, 修正方法可以把OS改為跟TFS一致的Language, 或者選一個對的Language重新下載 TFS.  怎樣使用 Team Foundation Server的概念跟IIS有點類似. 都是以AppPool集合的形式把類似的專案集中起來. 另外集合

[Windows Server 2008] 如何設定IIS的自我簽署憑證? (2015/12/30更新)

序: 最近用Microsoft的WebAPI寫了一支程式,因為連結中包含敏感資訊,所以要確保連線要被加密。但是由於程式只供內部系統使用,所以又未至於誇張到使用外部授權單位所發的憑證。看了一堆文章以後,發現IIS中 "自我簽署憑證" 跟OpenSSL兩種方法應該乎合我的需求,所以就開始設定囉。 什麼是 自我簽署憑證? 根據Microsoft的 說法 :" 自我簽署憑證不是由憑證授權單位所發行。這些憑證可確保網站連線會被加密;但是,它們無法確保產生憑證之組織的身分識別。如果加密資料的能力比識別發行組織的能力還重要,則自我簽署憑證非常有用。 "加密資料正正是我想要的東西 XD 怎樣做? IIS中自我簽署憑證:很多大大也發過相同的文章,我也不再次發明輪胎了; 91大有很詳細的說明可以參考 。 2015/12/30補充: 如果要自我簽署一張超過一年期限的憑證,例如10年的要怎麼辦? 1. 首先從微軟網站下載SelfSSL套件 http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=17275 2. 檢查IIS中是否已安裝以下元件,沒有的話要先裝回,不然會出現「Error opening metabase: 0x80040154」的錯誤 3. 用Administrator的權限打開cmd,輸入 selfssl  /n: cn=www.mydomain.com  /v: 3650  /s: 8  /k: 2048 /n: cn=www.mydomain.com - 此SSL是給www.mydomain.com.  cn= (common name) 最好不要不填,不然將來要找這張憑證會很麻煩 /v: 3650 - 憑證有效日,單位為天數,例如憑證有效期為十年的話值為3650。 /s: 8 - IIS中安裝此憑證的Site編號。要查出Site的ID在cmd中可輸入%systemroot%\system32\inetsrv\APPCMD list site <site名稱> /k: 2048 - 金匙長度,單位為bits. 4. 完成後可以打開IIS,在左邊樹狀目錄下點root,也就是伺服器圖示,然後按Serv

[鐵人賽] [IT的奧義]專業型象

轉自自己發的文章  http://ithelp.ithome.com.tw/question/10099146 在資訊業呆久了,發現很多人有意無意的把資訊業人員跟"宅男"劃上等號。 他們覺得資訊工程師就是整天窩在電腦前面,穿上一件舊舊的T-shirt,短褲拖鞋不刮鬍子的從早到晚宅在電腦前面看著一堆有的沒的看不懂的符號。有時候更會聽到長輩說:"你穿那麼正式不像修電腦的耶"。雖然我極力嘗試用心的解釋系統工程師跟重灌電腦有什麼不一樣,不過看來成功光復的機率比中樂透還要少。 我們自信的認為自己是資訊工程師(事實上也是),跟建築工程師,律師,醫師,藥師,老師,斯斯(離題了)理論上應該同樣的是專業人仕,為什麼卻給很多人誤會成我們跟修理汽車的,修理冰箱的,修理電吹風的是同一類?(晚輩絕對沒有看不起這些職業,只是職能不同啦 ) 還有更傻眼的事,我們知道資訊業的工種很多,未必所有的人也會修或重灌電腦。可是當您跟其他人說你是系統分析師所以不會灌電腦(而實際上是會灌也不會刻意的講出來, 除非是流鼻血的正妹 )的時候,他們會用懷疑的眼神看你,臉容就好像暗示說自己跑去買賓士卻不會開車一樣的不可思議。 為什麼?為什麼?為什麼?為什麼我們就不當專業人仕??? 其實理由非常複雜,不過我覺得可能是因為以下幾點: 1. 我們設計的是無型的東西: 建築師可以建出一座很大很高的摩天大樓,大家會覺得很棒;醫師醫治了無數的病人,大家會覺得好棒;老師教了無數成績很好的學生,大家會覺得很棒;那我們呢?我們把非常龐大的系統寫成手機的一個icon,我們自己覺得很棒。 !!!等一下,是我們覺得自己很棒,其他人呢?老實說你拿一個apps去跟人家說很棒,其實未必會很懂....無型的東西很難很容易的令人家信服。 2. 我們賣的是服務: 我們幫我們的顧客寫系統,建網路,安裝軟體,目的就是提供服務支援他們的實際業務。而服務本身就是一種無型的東西,也沒有絕對簡單易懂的標準去測量,當老百姓無法簡單的了解我們做些什麼的時候,當然也不會覺得我們專業了。 3. 還有很多很多的理由.... 最後,我不會提供解決方法,因為以上只是晚輩的一些看法。如果硬要有解決方法(IT人的老毛病 ),以我的方法就是開會見客戶的時候盡量穿整齊一點,還要多跟其他人互動,不要老是只聽

[ASP.NET] 淺談SqlDataSource及Data access Layer

在ASP.NET的世界, 如果介面上的物件要連結到資料庫,大部分的參考書會教你使用SqlDataSource物件進行連結。看起來這個方法非常的不錯,既快速方便又簡單,是實上也是如此。不過......(雷聲) 當你開發的系統越變越複雜的時候,問題就出現了。一個畫面可能會出現幾個到十幾個SqlDataSource物件,而且使用者版面與版面之間由於無法共用SqlDataSource;然後你慢慢會發現越來越多重覆又重覆又重覆的SqlDataSource出現在不同的版面上,使得系統越來越笨重 你也越來越笨 ;而且自己辛辛苦苦寫好的Sql statement團隊中的其他 懶 人卻不能享用你的成果,也沒有一個集中的圖形化介面控制所有存取資料庫的Sql statement. 到最後你更會發現程式碼根本無法維護 然後也開始發求職信。 由於以上的缺點,因此就出現了Data Access Layer(DAL)這樣東西。嚴格來說它是一種概念,並不是ASP.NET提供的新功能。根據Microsoft的說法:" DAL for short, and is typically implemented as a separate Class Library project.   "。就是要解決上面SqlDataSource帶來的各種問題。當你使用Data Access Layer這個概念來存取資料庫的時候,系統不是像Sqldatasource一樣直接存取資料庫,而是使用其中的DataSet,再由DataSet對資料庫進行存取。 老實說這不是有點多餘?那就要看你系統的複雜性。畢竟在資訊產業,系統維護佔了一筆非常大的開支,而且大家心知肚明,對於實在爛透的程式碼,錢有些時候的確未必能夠解決所有問題。所以我是建議如果知道未來系統會變很大,最初的時候多花那一點點時間用DataSet建立Business Layer吧......XD 下篇文章會談一下如何實作。 參考資料 [1] Tutorial 1: Creating a Data Access Layer  http://msdn.microsoft.com/en-us/library/aa581778.aspx ----

[Winform] 兩個ComboBox怎樣連動?

今天同事問了小弟一個很基本又很常用的Winform問題: 如果表單中有兩個ComboBox,第一個ComboBox顯示帳號,第二個ComboBox顯示屬於這個帳號的子帳號,當使用者選擇帳號時子帳號的ComboBox要動態顯示選項,最簡單最不用寫Code的方法是怎樣??? 我自己試了一下幾個方法,感覺下面這個方法應該是最簡單方法中的其中一個: 首先設好DataSet中的DataTale並進行關連, ACCAO為帳號, SUBACCAO為子帳號. 接下來拉下畫面,上面的ComboBox是帳號,下面的ComboBox是子帳號。 把ComboBox對應在DataSet中ACCAO跟SUBACCAO兩個DataTable, 它們分別的設定如下: 最後在帳號的ComboBox中的SelectedIndexChanged事件加入下面一句程式碼: private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { sUBACCAOBindingSource.Filter = "ACCAO_NO = '" + comboBox1.SelectedValue.ToString() + "'" ; } 意思就是說在子帳號ComboBox所對應的BindingSource中加入篩選條件,條件就是依據上面帳號ComboBox中使用者所選擇的帳號號碼。 就那麼一句就搞定了! 我想應該找不到給一句程式碼更簡單的做法吧XD,不過有的話記得跟我說一下,天外有天人外有人,給小弟機會好好學習啊!!!

[Redmine] 在Windows7 及 Ubuntu 安裝配置使用一次搞定筆記

最近在網路上看到 T客邦技術部門法寶、工作流程大公開 這篇文章,裡面介紹了T客邦團隊工作上用到的一些小工具,其中有介紹到叫Redmine的專案管理工具軟體,根據T客邦的解釋: " 有不少程式開發團隊在指派任務的時候,都會用口頭指示。這樣有個很大的缺點,可能前後說法不一,聽到的指示不一定是正確的,容易產生出不少責任、時程控管的問題。T客邦技術部採用的是Redmine專案管理系統,每項工作都會利用開票的方式來說明工作內容,同時會記錄時間、討論內容、進度,而且還可以直接把工作指派給相關的人。這樣在後續執行出問題的時候,可以很容易就知道責任是在誰身上,主管也可以很明確的知道目前的工作進度。 這套系統我們編輯也會用到,像是遇到T客邦有什麼Bugs,或是需要開發新功能的時候。就可以開一張票(有點像開一個討論串),再把票指給XDite,之後身為主管的XDite就會把工作分派給部門的同仁來處理。而開發成員收到票之後,如果有問題就可以利用Skype,或是直接走到同事身邊來討論。 " 還有Bio大的 解釋 , 這正是我的部門熱切渴求的第二神器啊(Orz 第一渴求的不就是 這個 )!!! 安裝給大家玩看看(又是我 T^T)遇到了不少問題,希望可以解決你的問題吧。 在Windows 7中安裝 首先Redmine是Ruby framework下的產物, 當然安裝Ruby跟Rails是跑不掉的,另外PHP跟Apache也要裝一下,再來資料庫就比較隨便,我用的是MySQL. 在Rails中無法安裝 RMagick 插件: RMagick是Redmine跟圖象處理插件ImageMagick之間的連接器. 在安裝的時候經常說找不到 ImageMagick, 但是明明ImageMagick卻安裝得好好的. 要指出ImageMagick的安裝路徑可以加上with-opt-lib 跟with-opt-include兩個參數, 如下 $ gem install rmagick --platform=ruby -- --with-opt-lib=c:/ImageMagick/6.6.4-Q16/lib --with-opt-include=c:/ImageMagick/6.6.4-Q16/include Rails找不到MySQL的位置: 如果Rails出現像找不到libmysql

[PHP]在Windows7中安裝PHP伺服器的問題

某天要在公司架一台Windows Server的PHP伺服器 (不要問我為什麼不在Linux架 T^T) 原本以為應該很簡單, 找個Apache的安裝檔, 找個PHP的安裝檔, 半個小時應該全搞定了吧. 最後弄了老半天(怒). 跟大家分享一下我的經驗, 希望不要再浪費青春了.... 第一個問題是安裝完Apache跟PHP, 在修改完設定以後打算重開Apache, 卻出現 "the request operation has failed. "無法Restart的情況. 要知道那裡出錯可以打開cmd, 進入Apache\bin目錄,輸入 httpd.exe -w -n "<目錄名稱>" -k start, 如httpd.exe -w -n "Apache2.2" -k start 就可以顯示出錯誤像下面的提示了. 像我這次出現的錯誤是沒有找到"php5apache2_2.dll"這個擋案. 補回去再試一下Restart... 還是不行!!!!! 再用上面方法試一下, 出現" PHPINIDir takes one argument, Directory containing the php.ini file " 意思就是說還沒指示PHP伺服器中 php.ini 的路徑(真的很煩~"~). 在Apache\conf中打開httpd.conf檔案, 找到 PHPIniDir 這一段, 把php.ini的目錄補回去(如"C:\Webserver\PHP"), 再重啟Apache看看, 果然就可以了囧. 要測試PHP伺服器是否OK, 可以在Apache目錄下的htdocs資料夾用文字文件新增一個php檔案, 例如test.php, 打開它並輸入 <? phpinfo(); ?> 然後儲存. 意思就是說把php伺服器的資料印出來. 打開browser, 輸入http://localhost/test.php 如果成功應該可以看到很多伺服器的資訊了. 如果還是看不到, 卻又不是404error, 可以看看以下方法: 打開php.ini檔案, 找到 short_open_tag 這一段, 如果是 Off 的話把

[IBM iSeries Client Access] 在Windows 7能跑AS400的用戶端嗎?

AS/400在資訊業中感覺就像不死鳥一樣,經歷30年還有很多公司機關在使用它。畢竟它的可靠性在業界是無人不知的 (至少連我這種菜鳥都知道=皿=)。 最近公司正在測試把AS/400的用戶端轉移到Windows7去。原因不外乎Windows XP已經被巨硬電腦判了死刑。(請參考這篇:  http://windows.microsoft.com/zh-TW/windows/help/end-support ) 我們公司用的是V5R4M0這個版本,經過小弟一天的測試,發現用戶端 iSeries Client Access 轉移到Windows 7沒什麼大問題,很快可以看到那個像BBS一樣的綠黑畫面。不過周邊設定就火大了,光鍵盤設個老半天還是不能在AS/400中輸入任何字,爬文後更發覺就算鍵盤用得到,當您開多於一個Session的時候會有用戶端當掉的問題。 再加上看過以下兩篇文章, IBM I Access to Support Windows 7 on Dec 1 iSeries Access and Win7 及IBM官方的支援 http://www-03.ibm.com/systems/power/software/i/access/windows/os.html 在Windows 7上跑的Client Access版本最好要V6R1M0以上,不然會有很多問題。 所以........... 明天我就再浪費青春乖乖的重新灌一下V6R1M0的用戶端吧.... 20120822更新: 小弟發現直接用iSeries Navigator不要經捷徑就不會發生鍵盤用不到的情況, 至於為什麼我也搞不太懂...

[分享] 系統改善方案企劃書例子

如果今天老闆要你對某系統提出改善方案, 很多工程師包括我也不知道從那裡著手開始寫. 剛好遇到這次機會花掉了我畢生腦  精  力寫好一份SQL Server改善方案, 把小弟的文章部分內容分享一下希望對各位同業有幫助. 部分內容因為公司機密有所刪減, 請見諒 (公司要用英文寫, 抱歉沒中文版本= =") ------ Introduction: This study will focus on how can we improve existing SQL Server to provide more reliable, more secure and improve capacity in order to fulfill future usage. Current Status overview: Operation System: windows Server 2003 SP2 32bits with 3.75 GB ram. SQL Server version: SQL Server 2005 standard edition. numbers of databases: 18. Performance evaluation: We capture the sample data from 23/07/2012 to 27/07/2012. evaluating 8 indicators[1] covering memery, CPU, and harddisk performance. here is the result: Existing issues: Security:  Accounts level: XX% databases using administrator as its login account. That's mean using one account can access several databases. All developers known SQL Server admin username and password. Operating system level: According to Micros

[Web API] ASP.NET Web API簡單範例

在這篇文章中, 以下的小範例說明怎樣利用Web API回傳資料庫中的資料並以XML格式傳送。 事前準備: Visual Studio 2010或以下的請先安裝ASP.NET MVC 4 ( 可到這裡下載 ) 實作: 建立WEB API專案: 在選單中選取"檔案"->新增專案, 選擇framework 為".NET Framework4", 然後選擇 "ASP.NET MVC 4 Web Application", 填寫名稱及選擇位置後按確定. 接下來會轉到New ASP.NET MVC 4 Project, 選擇Web API, View engine為Razor, 按"OK" 沒意外的話系統進入到開發畫面. 建立Model 接下來建立一個Account Model物件, 用來表示Account資料如何組成. 在"方案總管"(Solution Explorer)中找到"Model"資料夾, 然後按右鍵->加入->類別 選擇 "類別", 輸入名稱"Accaoinfo.cs"後按確定. 在Model中輸入模型, 代碼如下 1 2 3 4 5 6 public int accaono { get ; set ; } public string eco { get ; set ; } public DateTime active_dt { get ; set ; } public DateTime inactive_dt { get ; set ; } public DateTime create_dt { get ; set ; } public string description { get ; set ; } 建立Controller 在"方案總管"中打開Controllers資料夾, 把ValuesController.cs更名變成Ac

[Web API] ASP.NET Web API概覽

什麼是ASP.NET Web API [1] ASP.NET Web API是一個可以簡化建立HTTP服務的框架 . 前身為WCF WebAPI, 協助WCF服務支援RESTful介面. RESTful: 簡單來說就是 以 URL 定位資源,根據 HTTP 內容指示操作動作與回應訊息。 一個符合上述實作方式的網路服務,就稱之為 RESTful web service 。 [2] 支援利用HTTP協定. HTTP服務類似Web Service, 可以提供應用程式執行時需要的功能 取回XML格式或JSON格式的結果. JSON ( J ava s cript  O bject  N otation)是一種輕量級的 資料交換語言 ,以文字為基礎,且易於讓人閱讀。 [3] 輕巧的資料交換結構, 佔頻寬比較少. 許多知名的大網站皆支援Web API Model, 如Facebook, Twitter, LinkedIn, Google, etc. 優點: 使同一系統元件能被不同形式的用戶端重覆使用, 如瀏覽器, Windows form, 手機程式/平板(android, IOS, windows phone), 減少重覆開發所浪費的時間. 元件在不同系統之間可共同使用(ex:讀取人事資料) 利用HTTP協定, 使得簡單靈活且無處不在. 基本上現在所有設備已經支援HTTP, 不需要另外安裝套件. 缺點: 資料結構較不嚴謹, 不適合用來實作系統與系統之間的資料交換. 名詞解釋: Model:  官方解釋: A  model  is an object that represents the data in your application. ASP.NET Web API can automatically serialize your model to JSON, XML, or some other format, and then write the serialized data into the body of the HTTP response message. As lon

[MVC] 為什麼開發系統需要MVC Model?

看到這篇關於MVC的文章有感。 MVC設計模式的發展及變遷:  http://www.ithome.com.tw/itadm/article.php?c=74317 MVC的優點除了按功能分工,還直接把系統開發變成是組裝模組的形式。 怎麼說呢,模組之間只要預先談好接口的規則就可以各自獨立開發,開發完之後大家把自己完成的部件拿出來組合起來變成系統,我經常會跟人家說情況就像現在的汽車工業一樣。 這樣的好處有太多,最大的好處是 萬一發現bug,波及到整個系統發生的機率會比較少。 分工容易,可同時開發。 開發期間使用者不斷要求更改介面,這樣的話邏輯部分可以完全獨立出來不被波及。 部件重用些很強,不用又再一次再一次發明輪子。 What Next? 遇到像我這種老鳥多開發技術又比較低的公司,可以將MVC再升華一點點,就是把一些很常用的元件變成公司內部的Web-API( 什麼是Web-API可以點這裡 ),系統開發人員只要用到達HTTP的連結,傳入適當的參數就可以收到想要的結果,而不需要理解中間運算的過程,這可以令技術不高的開發人員很快很安全的拿到想要的東西。 How? 小弟還在測試當中,希望很快可以寫篇新手架Web API實務......XD 參考資料: MVC設計模式的發展及變遷:  http://www.ithome.com.tw/itadm/article.php?c=74317 web api wiki: http://www.youtube.com/watch?v=GfQrAQp5RW8 每天會遇到的事...

.net教學筆記整理[如何傳入外來參數(parameters)到執行檔exe中]

前言: 我想很多大大也試過於Windows跑執行檔的時候可以傳參數, 例如 example.exe resolution=1280*1024,今天有同事問我順便跟各位大大分享一下小弟的寫法: 先開一個專案(exeparameters),類型為Winform,建立後直接在設計畫面點兩下,進到Coding畫面。 打開後打概會看到以下的Code using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace exeparameters { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } } } 在public Form1()這一句我們可以看到這個執行檔並不能接受任何參數。先把Form1改裝變成可接受string[]陣列: public Form1( string[] args ) { InitializeComponent(); } 接下來把外面傳來的變數轉成內部使用變數 string[] myParameters; public Form1(string[] args) { InitializeComponent(); myParameters = args; } 最後打開Program.cs檔案, 把 static void Main()

Popular posts from this blog

[SQL Server] 解決log檔(ldf file)過度膨脹的實戰經驗

背景: 公司最近把一套每天有相對大量交易 (之前公司更大很多很多倍) 的系統轉移到SQL Server去,不到一個月交易檔(ldf)已經貼近數據檔(mdf)的size,真的好可怕啊。 身為SQL Server的DBA當然  要替月行道,警惡懲奸  不能讓這種情況繼續下去。 解決方案選擇: 第一個我想到的方法是把Database的Recovery model設成Simple,簡單來說就是不需要交易記錄,對於Insert Delete Update 很少的系統勉強還說得過去,不過對於交易量大的系統來說就不行了,沒有交易記錄萬一資料庫突然往生,總不能用full backup還原然後要User重新輸入一天的交易吧。 第二個方法是定時進行備份。為什麼log大小跟備份有關係呢? 簡單來說,資料庫的ldf檔就是用來儲存Full Backup後所發生的所有交易。如果你從今天從來沒有為資料庫進行過備份, 理論上ldf檔會無限的膨脹下去 ,而且利用Shrink指令也無法把交易檔壓縮。因為沒備份的話就等於ldf檔裡面的東西統統有用,當然沒辦法壓縮了。所以要保持交易檔案的size就是要持續保持備份,在每次備份完了以後自動把交易檔Truncate成初始大小,這樣可以長期保持相對小的交易檔。 所以,最後我選擇了方案二。 實作流程考慮因素: SQL Server的backup model一定要一份full backup再塔配其他備份檔一起使用( SQL Server的備份model解釋在此 ),要達到控制ldf檔案大小的目的,備份可以每天只是Full Backup,也可以是Full->T-log,也可以是最複雜Full->Diff->T-log,我考慮使用那一種的因素主要有以下: 資料庫本身只是約55GB不是太大; 每天交易量不多,每分鐘約10筆交易; 使用者允許少量的data loss,一天Data loss肯定不行; 資料庫只是辦公時間才會用。 我個人認為Backup Plan越簡單越好,發生狀況的時候已經很緊張,複雜的Backup只會令事情更糟。反正今天硬碟實在是太便宜,天天備份幾次也無所謂,因此在儘量簡化備份流程的前題之下,小弟傾向 每天Full BackUp一次,每小時備份一次T-log ,就是Full->

[Windows7] 跨距磁碟區, 等量磁碟區, 鏡像磁碟區之區別

話說前兩天用來備份的USB硬碟無緣無故去領便當了. 大幸的是我一直有好好備份, 資料至少存在兩顆硬碟上, 所以備份硬碟掛了損失也不大(錢包除外). 所以昨天下班以後趕緊去買一顆seagate的2TB內置硬碟回家(感覺USB硬碟還是不太安全), 裝好以後突然想到一個問題: 現在我桌機總共有5顆硬碟, 首先是剛買回來的2TB, 1顆80G SSD, 1顆640G, 1顆320G, 1顆160G. (真多舊硬碟囧), 關於硬碟的部分Windows 7比XP多了一些選項, 應該選那個才對? 讓我自己先分析一下: 那麼零碎的硬碟應該選擇合拼方案為主 關於合拼的方案Windows7有三大選項, 分別是 跨距磁碟區 ;  等量磁碟區;  鏡像磁碟區三種, 應該怎樣選呢? 說穿了那三種其實就是軟體的RAID方案, 硬要改一些好像很簡單又不簡單的中文字 . 其實: 跨距磁碟區 = JOBD,  就是簡單把幾顆硬碟變成一顆大的邏輯硬碟,  資料的存放機制是由第一顆硬碟開始依序往後存放,即作業系統看到的是一個大硬碟(由許多小硬碟組成的)。但如果硬碟損毀,則該顆硬碟上的所有資料將無法救回。若第一顆硬碟損壞,通常無法作救援(因為大部分檔案系統將磁碟分割表(partition table)‎存在磁碟前端,即第一顆)[1] 等量磁碟區 = RAID 0 把資料分散在幾顆硬碟, 存取的速度比較快, 不過壞一顆又是全部壞掉. 鏡像磁碟區 = RAID 1 顧明思義有兩份data, 超安全, 不過由於write的時候也要write兩份, 所以速度會慢. 更詳細的解釋 這裡 [2] 魚仔大有好好的解釋說明三種功能, 小弟就再不說了. 總結: 那我要怎麼辦? 最後我選擇的是.... 什麼都不做 , 80G的SSD留給OS及程式專用, 640G的用來放照片/動畫/影片/影像檔, 320G的用來放文件還有裝一些不重要的應用程式(遊戲啦,遊戲啦,還有一些遊戲之類的), 160G的用來裝音樂還有.......你懂的. 至於2TB的那顆就是當成上面所有硬碟的mirror, 用sync工具即時備份. 為 什 麼 ? 因為JORB不是不好, 不過把那幾顆舊硬碟變一顆有很大的風險, 因為那幾顆碟使用的時間不同品牌也不同,

[SQL SERVER] 找出LOCK方法懶人包

話說休假回公司才不到兩天SQL SERVER就出狀況 Orz 昨天同事跟我說文件系統不能存取ID, 第一件事當然想到是存放ID的資料表LOCK住了. 要查出LOCK方法其實有很多, 以下是小弟歸納的網路資源, 希望幫到大家 什麼是LOCK? 德瑞克大的解釋很詳細:  http://sharedderrick.blogspot.com/2007/12/blocked-lock-connectoin.html sp_lock: 使你對系統中發生的LOCK有深入的了解。它會從master資料庫中的syslockinfo中截取與LOCK相關的大量訊息[1]. 不過我認為由於這個功能的資訊太多, 而且資料沒有好好的做sorting, 所以在危急關頭未必有閒去慢慢看. 在sp_lock會看到spid、dbid、objid、indid、type、resource、mode和status共八個欄位[2]. spid: 連線ID. 可配塔sp_who找出用那些用戶和該連線(spid)有關連. dbid: 資料庫的唯一編號 Objid: 資料表的唯一編號, 可用 select object_id('<table name>') 找到資料表相關Objid 其他的欄位可以在 這裡 找到相關意思. sp_who2 sp_who的加強版本. sp_who主要提供 Microsoft SQL Server Database Engine 執行個體中有關目前使用者、工作階段和處理序的資訊[3]。而sp_who2比較像是sp_who的view, 把sp_who的資料整理得比較好. 小弟經常用它來找出那台PC的發出的process產生了LOCK.  然後毆飛那個user 列出最初導致一連串其它處理序被鎖住的起始源頭(Blocking locks) 很多時候LOCK住的原因是其他的LOCK引發的, 要找出這種關係可以用下面網址的SQL 列出最初導致一連串其它處理序被鎖住的起始源頭 http://www.dotblogs.com.tw/karen0416/archive/2011/11/18/58623.aspx 或者是德瑞克大寫得好好用的SQL http://sharedderrick.blogspot.com