Skip to main content

Posts

Showing posts from April, 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+ 萬一老鼠生氣被咬爛錢包也不太痛 . 一張

.net教學筆記整理 [Visual Studio篇]

介面部分 Solution Explorer部分 Solutions, Projects, Items的關係 Solution是相關的Project的集合,是給 Visual Studio 看的, 和Namespace無關。 Project預設會對應到Namespace,  Project中所有的類別都屬於同一個Namespace, 不管類別是否有放在Folder中, 不過您可以自己宣告新的Namespace, 並將類別定義在新的Namespace中 。 下列圖示表述Solution跟Project之間的關係 各自有不同的Configuration Solution檔案名稱為.suo或.sln, Project References資料夾中包含所有可用的Library。 在Solution Explorer中, Properties資料夾, References資料夾的作用 Properties 資料夾 AssemblyInfo.cs : 是描述組件資訊的原始程式檔案。 Resources.resx :  are designed to provide information contained in a tierce parts those belong to the external logical application environment such as bitmaps images, text files, icons and so forth.  Properties關係如下圖所示: References 資料夾 包含所有Project中用到的Class. 可匯入其他不同的Class, 稱為Reference, 檔案格式為.DLL Program.cs的作用 由於Main方法在program.cs中,所以Program.cs是程式的入口點。 參考資料 1.  http://help.openspan.com/52/Using_OpenSpan_Studio/Solution_Manager.htm  Openspan 2.  http://msdn.microsoft.com/en-us/library/ee817674.aspx  Structing

.net教學筆記整理 [C# 基本篇]

如何建立Class(類別) 基本概念 如果想要多說明那些東西請留言給我^_^一齊研究研究~!! Class 什麼是Class? 我想習慣寫OO(物件導向, Object Oriented)的人都非常清楚Class的用途。 Public, Private, protected的區別 如果 class 裡宣告 public , 表示外部程式呼叫時, 可以呼叫它(可以呼叫 name); 如果 class 裡宣告 private ,外部程式就無法呼叫它(無法呼叫 addr), 只能在 Member class 裡呼叫, 有時您會需要在 class 裡寫一些 function 供 class 使用, 此時就可以考慮宣告成 private 。 如果 class 裡宣告 protected,  介於Public and Private之間,不同在於它除了可以在同一個Class存取外,還可以給被繼承的子類別存取。 例如下面的例子,Class3就可以使用Class1的Protected: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 namespace A { class Class1 { protected string A ( ) { ... } } class Class2 { ... } } 1 2 3 4 5 6 7 namespace B { class Class3 : Class1 { } } Namespace 的宣告 類別(Class) 的外殼 建構子(Constructor) 功能:通常用來初始化物件, 如 Array a = new Array[3]; 名稱一定和類別名稱相同。 方法 (Method) 包含一系列陳述式的程式碼區塊。在 C# 中, 每個執行的指令是完成於方法的內容中。 若沒有傳回型別,則要寫  void。 Destructor (選擇性存在) 下面是一個Class的例子 test.cs Form1.cs Class不只存在於 Class檔案內, 也存在於程式中任何一部分

.net教學筆記整理 [概念篇]

最近老闆要我幫忙把新(新?)技術帶進公司, 以乎合未來的發展, 先用.net為試點. 第一次授課難免有點小緊張, 所以每天先把筆記先弄一弄, 覺得有用歡迎轉載(記得註明出處喔), 為資訊業盡點綿力 XD. [以下資料整理以公司環境為出發, 有些觀念可能會先被忽略.] 什麼是.NET框架? .NET Framework  是由 微軟 開發 的軟體開發 平臺 。 具 平臺獨立性 一種採用系統虛擬機運行的編程平臺,以 通用語言運行庫 (Common Language Runtime)為基礎,支援多種語言( C# 、 VB.NET 、 C++ 、 Python 等)的開發。 CLR類似虛擬機器的概念, 有自己的記憶體控制, 資料型態及函式庫,  由於CLR被設計成作業系統無關性, 因此底層作業系統可任意抽換, 令程式可以跑在Microsoft產品中任一作業系統上. 使得 程式設計員可以同時進行 Windows 應用軟體 和 網路 應用軟體 以及 元件 和服務( web服務 )的開發。 Oracle 公司的 Java程式語言 和 Java平臺企業版 技術是.NET平臺的競爭對手之一,它們有很多概念也是互通的。 .NET版本 到2012年4月底共推出1.0, 1.1, 2.0, 3.0, 3.5, 4.0 共6個版本.  每一個新的 .NET Framework 版本都會保留舊版的功能並增加新的功能。 .NET Framework 版本 CLR 版本 Visual Studio 版本 描述 1.0 1.0 VS.NET 包含第一個版本的 CLR 以及第一個版本的基底類別庫。 1.1 1.1 VS.NET 2003 包含 ASP.NET 和 ADO.NET 的更新。   這個版本之後隨著 Service Pack 1 (SP1) 和 SP2 更新了兩次。   這個版本也引入了並存執行,此功能可讓單一電腦上的應用程式針對多個 CLR 版本執行。 2.0 2.0 VS 2005 隨著基底類別庫的新增引入了新的 CLR 版本,包括 ASP.NET 的泛型、泛型集合和重大新增。   這個版本之後已隨著 SP1 和 SP2 更新。 3.0 2.0 VS 2005 這個版

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