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

[Visual Studio] 使用Team Service進行系統開發心得整理

前言: 身為C#的Code guy 仆街 當然會有自己私下開發的專案,遇到Versioning Control或者Scrum的時候就比較麻煩。用Github不是不好,不過有些時候專案只是想一個人使用就不行。最近開始試用Microsoft 的Team foundation Service,直接把經驗記錄下來當個筆記。 安裝: 1. 在Team Service建立專案: 首先建立一個Team Service Location ( 還沒申請的話可以按這裡申請 ) 在Team Service頁面(https://xxxxx.visualstudio.com)中「Recent Projects & teams」中選擇「New」,彈出視窗後填寫資料,然後按「Create project」。 生成專案需要一點時間,完了以後會出現以下畫面,按「Navigate to project」 順利產生專案 2. 連接Visual Studio 小弟使用的是Visual Studio 2015。先打開VS,按右邊的「Team Explorer」,在「Manage Connections」中選擇「Connect to Team Project」 按下右邊的「Servers」,選擇「Add」,加入Team Service的https路徑 選擇你剛新增的專案,按「Connect」就完成囉 3. Push/Pull

[ASP.NET MVC] Rich Text Editor 安裝心得 (以TinyMce為例)

前言: 最近小弟幫公司開發的系統內需要撰寫郵件及發送,所以要找一個Rich Text Editor放在系統內。網路上找到TinyMCE口碑不錯,決定使用它。 還蠻夠隨便 TinyMCE官網:https://www.tinymce.com/ 安裝: 先用Visual Studio打開專案,選擇Tools ➜ Nuget Package Manager ➜  Manage NuGet Packages for Solution 在「Browse」中輸入「TinyMCE」按「Search」找到以後在右邊選擇你的Project後按「Install」。 (小弟試過安裝的時候Visual Studio會像當掉一樣持續幾分鐘沒反應,不用最後還是成功 嚇死寶寶了 ) 安裝成功後在「Solution Explorer」中找到「Scripts」資料夾,底下應該會出現一個叫「tinymce」的子資料夾 TinyMCE好處是Model或者ViewModel變化不大。開啟要加入TinyMCE的Model或者VIewModel,把需要變成 TinyMCE的欄位加入  [AllowHtml] 的Data Annotations。 再來找出要加入TinyMCE的View,在Section Scripts中加入相對應Reference。 然後在View加入以下Javascript (如果要客制化Editor的話官網有文件可以查) <script type="text/javascript"> // Initialize your tinyMCE Editor with your preferred options tinyMCE.init({ // General options mode: "textareas", theme: "modern", // Theme options theme_advanced_buttons1: "...

[SQL Server] 解決不斷出現 ASYNC_NETWORK_IO 導致TimeOut的問題

病徵: 公司在VMware上的SQL Server最近不斷出現大量的ASYNC_NETWORK_IO錯誤,而且有時候會出現TimeOut的情況。檢查RAM, CPU, IO皆正常沒有異常的情況。 研究: 拜了一下Google大神,如果硬體自我感覺良好,不外乎也是 幾個原因 [1][2]: 回傳過大的查詢結果。 Database網路卡設定有問題,回傳速度很慢。 Client端跟Database 端的網路連結出現問題。 Linked Server等待遠端資料表的回應。 第一個原因可以在Activity monitor裡面Process這一欄找一下出現Error的Process SQL Statement是什麼。小弟發現出現ASYNC_NETWORK_IO的SQL查詢100%來自一個資料表,這個資料表有60萬筆的數據、沒有Primary Key、而且每次回傳也要做Ordering,使用CPU是Top Ten,不過還沒嚴重到影響資料庫的效能。 發現問題的時候打開了效能檢示器,傳輸的量沒有達到網路卡的最大值。跟infra team討論後VMware的實體網路卡也是正常,暫時排除這個可能。 隨機取樣一些出現這個情況的user打電話問看看,沒有發現網路不正常的情況,暫時排除這個可能。 這個資料表不是Linked Server,所以也排除掉。 暫時得出的結論 直像告訴我好像是第一個原因比較像。 解決方法 由於還不能100%保證病因,所以今天小弟做了兩件事: 跟programmer溝通一下,發現這些查詢是Delphi 內部的 Data engine產生,所以programmer無法刪除這種回傳全部Data還要Ordering的 百痴 沒用查詢,也由於這個資料表是公司內部很多系統的log table,因此I/O很高,也無法減少存取次數。 所以最後我把資料表的資料量盡量壓縮,縮成只儲存一個星期,每天把剩下的自動備份到另一個資料表去。看看情況有沒有改善。 加入Cluster Index,不能改SQL至少也讓它快一些。 暫時還不太清楚是否有效,過一陣子小弟會在這裡再更新。 reference: [1] Troubleshooting ASYNC_NETWORK_IO, NETWORKIO https:...

[開箱] Dell P2415Q 4K螢幕開箱

背景: 小弟的 22吋IPS 螢幕 已經用了六年,右下角出現一團暗暗的不夠光的情況,平常使用還可以,PS的話就很明顯了,剛好我的顯卡是R9 270X有DisplayPort可以支援4K,剛好想換台看文字比較舒服的,又剛好發了薪水交完房貸父母家用上繳女皇後驚見還剩下一點點, 好吧說穿了根本就是一堆有的沒的藉口 ,就打算買一台4K螢幕。 小弟房間跟預算有點小,放不下也不夠錢買27吋的4K螢幕。 小弟的經驗對DELL筆電的耐用程度有點保留,不過就PC螢幕來說,每台Dell螢幕至少能撐6年,所以這次還是選擇 Hell  Dell。 在網站爬文,跟Sales討論,最後用3300HKD價格買了 P2415Q 。 優點: 小。小弟家貧,在寸金尺土的港澳地區容不下27吋的螢幕。 相對便宜。 擴充性不錯,1隻HDMI,1 in 1 out DisplayPort,還有N個USB & 1個SS USB。 漏光不嚴重。 缺點: 不是LED背版而是LED側光技術,對色彩有嚴格要求的advance used可能有點失望,不過普通老百姓例如我自己不是很感覺到出來。 外觀不是跟同期的Dell一樣使用薄邊框,比較老土。 支架還是未能乎合一米八幾身高的人的人體工學需求。 研究: 被研究者 被研究者的內觀 有附送一條DP線,不過要注意的是小mini DP 腳架部分使用標準規格,無論是我用了六年的舊螢幕,女皇前年的Full HD螢幕,還是現在的4K,腳架統統可以交換來使用。 面板是防眩光設計,對於我們這種每天寫Code的人是必需的,外觀沒有薄邊框的設計 換了螢幕女皇也不容易發現實在是藏於民居攻擊力大的好武器啊 面板本身不是主打最薄,所以不要希望像電視一樣只有一張紙的厚度,不過也大概只有一點幾個厘米,可以接受啦。 擴充性不錯,可以把我的無線滑鼠USB speaker藍牙鍵盤XBox搖桿 不是神秘的搖桿驅動程式 統統接上去。 完成品。 同場加映 (Dell掛螢幕喇叭) 音質當然比不上衛星喇叭,不過由於空間太小小弟又有點高經常打到腳下的重低音Case,又由於自己對音效沒太大要求 好像對什麼東西也沒要求 ,所以不小心手殘用HKD180買了它回來。 大小聲旋鈕有小高級的質感 用USB取電,音質比想像...

[SQL Server] 在AG下如何更快匯入資料和Rebuild Index? (使用Import/Export Wizard)

背景: 公司的測試環境需要匯入Production資料庫的所有資料,然後必須Rebuild Index。資料庫規模約150GB; 匯入測試環境要求在兩個小時內完成。 測試環境使用SQL Server 2012技術,Primary跟Secondary硬體效能上有明顯落差( Secondary差很多 )。 之前經驗在測試環境的Primary中使用Import/Export wizard 匯入大量資料發現很慢。 測試環境Primary跟Secondary之間使用Sync Commit Mode。 估計匯入資料很慢可能的原因: 發現每次進行資料匯入時,Secondary的I/O出現破表的情況。Rebuild Index時也同樣出現此情況。最大原因是因為選攞了Sync Commit Mode,由於兩台硬體速度上的差異,出現大量HADR_SYNC_COMMIT 拖慢進度。 小弟之解決方案: 先把需要匯入資料的測試環境資料庫從AG中移除。 在Primary中使用Import/Export Wizard匯入資料,會明顯發現速度快了接近200%。 匯入完畢以後, 在Primary中Rebuild Index。 在Primary中進行full backup。 把資料庫重新加進AG。 總結: 利用先把資料庫從AG中移除再加回去這種方式匯入資料會比之前速度快了一倍多,對於缺乏預算硬體又不好的測試環境效果比較明顯,後來小弟在Production用同樣方法,由於Production Primary跟Secondary兩台機器也是開外掛的級數,加上Fiber加持所以匯入速度沒有很充分的理據需要這樣弄,畢竟年關將近,Production的設定還是少碰為妙....

[SQL Server] 在Availability Group中同步兩台Replicas中的SQL Logins,Linked Servers

問題: 公司的SQL Server導入了AlwaysOn 技術,當failover發生的時候出現無法登入SQL Server的情況。 研究: 跟Microsoft了解以後AlwaysOn技術Primary跟Secondary兩台伺服器的Database Objects是完全獨立而且不相通的,那就是說無論Logins、 Linked Server、 Agent Jobs也要在兩台伺服器分別建兩份。 解決方法: Logins: 使用Domain account: 可直接解決問題。不過歷史的問題小弟不能選擇這個方案(灑花) 使用Contained Database: 原理就是把Database的所有相關東西打包變成一個Object,就不會發生Data同步,Database Object不同步的問題,可是很SAD,我也不能用這個方法。 手動同步兩台伺服器的Logins: 由於每一個 Login 有一組獨一無二的SID,所以就算在Secondary建一個使用者名稱跟密碼也一模一樣的Login,當failover發生時也會出現無法登入的情況。要手動同步兩邊的Login可以看 Microsoft的官方教學 。重點是同步兩台伺服器的Login SID,UserMapping部分不需要手動同步。 不過萬一Primary的Login更改了密碼,就無能為力需要利用以上方法再同步一次了。(哀) Linked Server: 很抱歉,你需要手動在Primary那邊的Linked Server一個一個的產生SQL,然後放回Secondary,而且每次增加Linked Server也要這樣做。 結論: 顯然AlwaysOn技術集中關注資料的部分,Server Object,包括SQL Logins對於Primary跟Secondary兩台伺服器來說是完全獨立的東西需要分開來建立跟維護,想導入AlwaysOn技術的大大需要注意,不過可分開獨立Storage存放兩份data是小弟選擇它的原因之一。 同場加映: 如何找出已經失效或者沒有連結任何資料庫的使用者帳號? 參考這條SQL

[SQL Server] 解決SQL Server進行HA後遠端使用Management Studio登入出現「Cannot generate SSPI context」錯誤之問題

新年快樂,先祝大家伺服器健康(無誤)!剛剛的週末在公司為一台SQL Server安裝Availability Group遇到一些問題,筆記了起來希望對大家有用。 Case: 已安裝Availability group 的SQL Server 無法利用PC Client上的SQL Server Management Studio使用Virtual Host name進行登入(AD帳號),並出現「Cannot generate SSPI context」(無法產生 SSPI 內容) 。 原因: 根據 Microsoft的說明 : 「 Security Support Provider Interface (SSPI) is a set of Windows APIs that allows for delegation and mutual authentication over any generic data transport layer, such as TCP/IP sockets. Therefore, SSPI allows for a computer that is running a Windows operating system to securely delegate a user security token from one computer to another over any transport layer that can transmit raw bytes of data.  The "Cannot generate SSPI context" error is generated when SSPI uses Kerberos authentication to delegate over TCP/IP and Kerberos authentication cannot complete the necessary operations to successfully delegate the user security token to the destination computer that is running SQL Server. 」 總括來說, 就是無法把Client端的...

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

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

[軟體] 在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