Skip to main content

Posts

[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+ 萬一老鼠生氣被咬爛錢包也不太痛 . ...

[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 ...

[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() ...

[Youtube] 在網頁中嵌入重覆播放的youtube影片

我知道很多人發過這篇文章,不過自己整理的心得自己才最看得懂吧 囧rz 如何嵌入? 要把youtube內嵌到你的blog,直到2012年5月份為止( 我這樣說是因為Youtube經常改變內嵌的方式,不過不得不讚的是一次比一次簡單 )的方法如下: 首先進入到你想嵌入的Youtube頁面,往下拉一下影片的下方會有一顆叫分享(Share)的按鈕,按一下。 然後按一下內嵌(Embed) 然後把下圖這段 html 複製起來(滑鼠右鍵->複製 或 Ctrl+c) 轉回你正在寫blog的頁面(以下以blogger為例),跳到HTML模式(其他種類的blog的 HTML模式在那裡 小弟 就不知道了 ˊ_>ˋ  ) 把剛才複製的那段HTML貼在你的CODE的最底下。 你可能會好奇說,這段HTML究竟是啥咪啊?這段Code的意思就是說: "建立一框架(iframe),沒有規定是不是一定要全螢幕(allowfullscreen=""),框架沒有厚度(framework="0"),高315單位(height="315"),寬420單位(width="420"),來自以下這個地方(src="brabrabra") " 所以結果如下,內嵌就完成了。 如何加入其他功能? 如果有另外的需求,例如不停重播或者在那裡開始之類的,就要使用Youtube提供給我們的參數設定了。 這個網站 有列出所有Youtube提供給我們用的參數。以下用autoplay這個參數來當例子。跟據上面這個官方網站的說明,autoplay的描述如下: autoplay   (supported players: AS3, AS2, HTML5) Values:  0  or  1 . Default is  0 . Sets whether or not the initial video will autoplay when the player loads. 意思就是說1的話影片在網頁載入以後就會自動播放,0的話就不會,就這麼簡單! 那我們要怎麼加呢這個參數進去呢? 先回到HTML模式,然後找回剛貼到網頁上的HTML碼, 先找到 src="http://www.youtu...

.net教學筆記整理 [組態檔案驅動設計架構例子]

前言: 公司經常會遇到一些不是給使用者用的程式,例如一些格式轉換程式,一些上傳到某些地方的程式,或者背景服務等等。這些服務具有一共通點: 參數設定很多,如SMTP Server, 資料庫IP。 要經常改變參數設定。 參數寫死在軟體程式裡面,第一個缺點當然是不好修改,而且不斷修改程式碼會引發不必要的錯誤。所以現在很多伺服器都是採用了以 XML組態檔案驅動驅動的設計架構 。意思就是說利用XML定義很多軟體參數,當系統運行的時候才去讀取相關設定,這樣軟體不需要經常重新修改,比較能確保穩定度。這種概念也就是所謂的 執行引擎了( Execute Engine ) 。 以下是小弟最近利上執行引擎的概念幫公司寫的小軟體,希望可以給各位大大分享一下,有錯誤的話請賜教。 目的: 把資料庫的某一資料表(table)轉成XML, 並自動上傳到指定FTP位置。這個小軟體要具有: 1. email功能: 上傳成功或失敗需要發email通知資訊部門某位同事。 2. 紀錄檔(log)功能: 運行時產生相關程序的記錄,包括exception。 3. 上傳到FTP伺服器前要先備份。 4. 產生的XML檔案名稱將來可能會有修改。 設計: 要表達一個系統的設計,至少要表明兩種關係 Class 之間的關係 觸發事件的先後次序 Class 之間的關係 由以上需求可知,如果我們在物件導向分析的類別圖(Class diagram)中開始設計類別,可以以功能區分最初版本的5個類別,分別是: Program.cs: 提供軟體核心作業流程。 xmlManager.cs: 提供轉換成XML的相關功能。 emailManager.cs: 提供傳送電子郵件的功能。 ftpManager.cs: 提供ftp上載的功能。 logManager.cs: 提供記錄檔相關功能。 它們這些物件與物件之間的關係,可以用UML中的 Class diagram 表達: 虛線指的是這一個class可以存取的檔案。 實心菱型在UML中解釋是Composition(組合), 意思相當於has a, 就是說被指向的Class(xmlManager跟logManager)是菱型端的Class(Program.cs)不可缺少的一部分, 當Program.cs被消滅的時候xm...

.net教學筆記整理 [Windows Service篇]

如何建立Windows服務 根據Wiki的解釋, Windows服務(Windows Service) 是在Windows系統架構下長期運行去執行某一特定功能,而且不需要有人機互動的一種背景程式。具有不需使用者登入系統也可以自動開始結束的特性。 現在動手做做看吧! 開啟VS2012, 新增專案, 選擇 "Windows服務" 為專案類型。 在"屬性"頁中找到"ServiceName", 這是服務名稱, 要記得同一台伺服器服務名稱不能重覆喔。其他的參數用預設的就OK了。   開啟專案畫面後沒有Winform或ASP.net的interface Designer(廢話, 服務跟本就沒介面啊TAT), 在畫面點擊兩下跳到後面程式碼(cs檔案頁面), 看到OnStart及OnStop兩種方法。故名思義OnStart就是服務啟動時做的事,OnStop就是當關閉服務時要做的事。記得每次觸發OnStart跟OnStop的時候程式碼只會跑一次。即是說如果今天你要寫monitoring的東西,在OnStart中應該加入像 System.Timers.Timer 類別 ,不然跑一次就進入無限等待的狀態。現在用 把資料庫的數據生成XML 的例子放到這個服務: 要使用Timer類別, msdn很清楚的說明 Timer   元件是伺服器端之計時器,讓您可指定應用程式中引發  Elapsed  事件的週期間隔。所以我們一定要設定好 Elapsed事件 ,還有 計時器的時間間隔 。先新增一個Timer物件 在服務(Service)的OnStart中,設定Timer中Elapsed的ElapsedEventHandler  timer_Elapsed。 在服務(Service)的OnStart中, 設定timer的週期間隔 timer.Interval 為一小時 加用啟動timer程式碼。 timer.Start(); 接下來把存取資料庫轉成XML的程式碼放到 timer_Elapsed方法裡. /*讀取資料庫上的資料放到dataset, 再把讀取的資料存到xml檔案中*/ //先建立connection string connstr...

.net教學筆記整理 [XML篇]

以下例子說明怎樣把SQL Server中的資料轉換成XML. 主要分成讀取資料庫跟輸出兩部分。 讀取資料庫部分 先建立SqlConnection 然後建立SqlDataAdapter把資料庫的資料先抓出來. 再把Adapter中的資料存到DataSet中叫"XXX"的資料表(Table). 轉成XML部分: 第28行,利用DataSet中WriteXml的方法, 標示好XML的生成路徑就行囉! 很簡單不難啦! =皿=

Popular posts from this blog

[軟體] 在Windows7 安裝骨灰級學倉頡軟體--快快樂樂學倉頡

前言: 話說我們這些用電腦宅齡超過十五年以上的挨踢人聚在一起的時候總喜歡提一些當年的技術,Duron鉛筆超頻這種骨灰級方案在圈裡是常識吧XD。 突然有朋友提到"快快樂樂學倉頡"這套DOS 1.0年代用來學打字的軟體,應該是很多港澳挨踢人的集體回憶吧。 有沒有方法在Windows7上回憶一下呢?答案當然是有啦! 方法: 這次我們會用到DOSBox這套軟體。根據官網說法" DOSBox is an emulator that recreates a MS-DOS compatible environment"。顧名思義DOSBOX就是一台MS-DOS的虛擬機器囉。安裝好以後在裡面安裝快快樂樂學倉頡基本上就OK了。 準備工作: 根據貴用戶的要OS, 先到 這裡 下載相對應的DOSBox版本,我裝的是Windows版本。 快快樂樂學倉頡的執行檔。(沒有的話可以私下問我) 步驟: 裝好了以後按下圖示開啟 進入到DOSBox主畫面 由於這裡是MS-DOS的虛擬機器,當然不會有任何其他檔案,接下來我們要把裝住 "快快樂樂學倉頡" 的資料夾掛載(Mount)到虛擬機器去。這裡裝住軟體的資料夾叫 "HPCJ",所以在浮標上輸入 mount C: C:\Users\xxxxx\Documents\Software\HPCJ 這句的意思是mount a disk called "C:", and its location is "C:\Users\xxxxx\Documents\Software\HPCJ",搞定以後按確定。就會出現已經mount好的訊息。 接下來可以直接存取"快快樂樂學倉頡" 資料夾的內容了。先輸入C: 然後按確定跳到剛掛載的C: 直接輸入"快快樂樂學倉頡"的exe名稱按確認。例如我的是Open.exe,按enter。 登登~!!成功了。 打了這麼多年,其實我打字速度也不快就是了。囧rz

[SQL Server]Linked Servers中的login mappings問題

話說前陣子同事打算利用SQL Server 內我已經設定好的Linked Server更新AS400的資料表(table). 出現不能更新的錯誤. 發現原來設漏了東西....囧. 以連接AS400為例子, 如果有大大跟我一樣是用ODBC做連結, 並且在AS400那邊有獨立登入名稱跟密碼的話. 當連結完了以後還要進行user mapping的動作, 否則可能會因為權限不夠更新不到. 在設定之前要先考慮這個Linked Server是否給全部SQL SERVER的使用者使用, 還是只是某些使用者才有權限進行存取. 如果Linked Server打算只開放給某些使用者存取的話: 首先選擇目標的Linked Server, 按右鍵-> "Properties" 轉到 "Security"頁面-> 按一下"Add", 在"Login Login"中選擇一個SQL Server的帳戶, 例如你打算從ABC資料庫存取Linked Server的話, 最好是使用ABC資料庫的使用者帳號. 然後在"Remote User"跟"Remote Password"中輸入AS400那邊的帳號跟密碼按OK. 如果你打算開放Linked Server給所有SQL SERVER的用戶存取的話: 首先還是跟上面一樣進入到Properties的畫面->Security的部分, 往下找到 "For a login not defined in the list above, connections will" 這一欄. 選擇 "Be made using this security context:" 輸入AS400中打算用來登入的名稱跟密碼然後"OK." 那麼所有SQL SERVER的使用者也可以存取AS400的資料庫囉...

[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不是不好, 不過把那幾顆舊硬碟變一顆有很大的風險, ...