前言: 話說前陣子爸爸家陽台不斷出現米奇老鼠,立刻清理陽台所有東西,然後又跟市政部門反映問題,可是情況還沒有好轉,米老鼠來完一隻又一隻,我爸陽台在老鼠界應該是網紅打卡聖地(誤),要不然就是米奇老鼠版米奇林三星餐廳(?) 雖然我們抓到了三隻,到上兩個禮拜為止還有至少一隻一直抓不到,每天淩晨還會來吃事後煙留下老鼠屎,真_北。 這隻老鼠對傳統攻擊有抗性,有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+ 萬一老鼠生氣被咬爛錢包也不太痛 . 一張
筆記動機:
公司要開發一堆給客戶用的網路服務,由於IT部門預算很緊那有一天不緊的,
一向負責寫RESTFUL後端商業流程的小弟終於還是要面對程序猿最害怕的使用者界面部分。
初步想法是把後端Restful API處理完的資料變成Json,再透過Viewbag把資料顯示在View上,所以最後變成以下塔配:
公司要開發一堆給客戶用的網路服務,由於IT部門預算很緊
一向負責寫RESTFUL後端商業流程的小弟終於還是要面對程序猿最害怕的使用者界面部分。
初步想法是把後端Restful API處理完的資料變成Json,再透過Viewbag把資料顯示在View上,所以最後變成以下塔配:
- 後端商業邏輯:Restful API
- 網站: ASP.NET MVC、Newton.Json
- 前端: jquery + json資料
內容:
- 如何把data變成Json?
可以利用System.Web.Sript.Serialization的JavaSceiptSerializer() 或者Newtonsoft的JsonConvert.SerializaObject() View收到Json的ViewBag後怎樣可以讓jquery存取? 利用@Html.Raw(@ViewBag) 先將ViewBag轉回Json,例如我要把回傳回來的user profile轉回成JSON
- 回傳回來的Json raw data 怎樣轉成人看的資料?
- 先在打算顯示資料的地方寫一個具有Id的 <div>,例如
<div id="appendUserProfile"></div>
- 然後在<script> 中加入.each迴圈把json每個item取出來
var data = @Html.Raw(ViewBag.userprofile); $(document).ready( function () { $.each(data, function (key, value) { $('#appendUserProfile').append('<tr><th>'+key+'</th><th>'+value+'</th></tr>'); }) } );
- 完成
- jquery 2.1.4 關於 CheckBox的問題
- 問題:今天又遇到了怪事。在View中使用Checkboxfor產生checkbox,當使用jquery作 Required Validation認證時出現相反了的情況,就是明明Check了卻出現Validation error,不Check返而過了,找了兩天也找不出問題。
- 研究:
- 最初以為是ViewModel的關係,試過把bool轉回string,又把Data annotation拿掉,試過修改ViewModel不同部分還是不行。
- 為了確認跟ViewModel無關,先把jquery拿掉,傳回Controller的checkBox值正確,所以確定是jquery的問題。
- 在網上爬文找到這篇ASP.NET MVC - Required Checkbox with Data Annotations, 在回文中發現小弟相同的情況,作者最後使用extend把checkbox的值override,決定當隻copycat試看看,居然成功了。
- 實作:
- ViewModel
[Range(typeof(bool), "true", "true", ErrorMessage = "必須勾選")] [Display(Name = "本人聲明以上屬實")] public bool Istrue { get; set; }
View
<div> @Html.LabelFor(model => model.IsTrue) @Html.EditorFor(model => model.IsTrue) @Html.ValidationMessageFor(model => model.IsTrue, "", new { @class = "text-danger" }) </div>
- 最後,在View中加入CheckBox extend的Javascript (來源)
// extend range validator method to treat checkboxes differently var defaultRangeValidator = $.validator.methods.range; $.validator.methods.range = function(value, element, param) { if(element.type === 'checkbox') { // if it's a checkbox return true if it is checked return element.checked; } else { // otherwise run the default validation function return defaultRangeValidator.call(this, value, element, param); } }
return new JavaScriptSerializer().Serialize(data);
var data = @Html.Raw(ViewBag.userprofile);
Comments
Post a Comment