發表文章

家庭|生活|小四|學唱歌

Old MacDonald had a farm     https://youtu.be/5oYKonYBujg Old MacDonald had a farm, E I E I O, And on that farm he had some ducks, E I E I O. With a quack quack here and a quack quack there, Here a quack, there a quack, ev'rywhere a quack quack. Old MacDonald had a farm, E I E I O. Old MacDonald had a farm, E I E I O. And on that farm he had some dogs, E I E I O! With a woof-woof here, And a woof-woof-woof there Here a woof, there a woof, Everywhere a woof-woof Old MacDonald had a farm, E I E I O Old MacDonald had a farm, E I E I O. And on his farm he had some cats, E I E I O. With a meow meow here and a meow meow there, Here a meow, there a meow, ev'rywhere a meow meow Old MacDonald had a farm, E I E I O. Old MacDonald had a farm, E I E I O, Old MacDonald had a farm, E I E I O! And on that farm he had some cows, E I E I O! With a moo-moo here, And a moo-moo there Here a moo, there a moo, Everywhere a moo...

軟體開發日記

Day'1    #現做再說而無事先計畫。專案離失敗也就不會太遠。 Day'2    #專案團隊一定要有共通語言,講同一國話。 Day'3    #沒有架構的軟體,就像沒有樑的房子。 Day'4    #軟體專案不是人多就好辦事 Day'5    #專案沒管好所造成的延遲,加班還是沒解。 Day'6    #寧錯不能慢的趕進度,最後只會更慘。 Day'7    #醜媳婦終究還是得見公婆。 https://youtu.be/SzSFkKyCqnM

IT|軟體|應用|SSMTP 與 GMail 配合指令或程式自動寄信

圖片
簡介 SSMTP 是一個專門用於送信的系統小工具,它的角色類似 sendmail,可透過標準輸入接收郵件資料,並且同步將郵件傳送至指定 MTA,進行電子郵件的遞送動作,而在結合 GMail 這類正式的 MTA 之後,就可以輕鬆讓 mail 這類 Linux 標準的 MUA 具備發信的能力。 對於樹莓派的物聯網應用來說,通常會需要透過電子郵件發送資料,但是鮮少有收信的需求,所以使用 SSMTP 這樣輕量級的發信系統配合外部的 MTA 會是一得很好的選擇,以下是在樹莓派上設定 SSMTP 與 GMail MTA 的步驟教學。 安裝與設定 SSMTP 使用 apt 安裝 ssmtp 與 mailutils 套件: sudo apt-get install ssmtp mailutils 接著要設定 SSMTP 的設定檔,更改之前先將預設的 SSMTP 設定檔備份起來: sudo cp /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.default 編輯 SSMTP 設定檔 /etc/ssmtp/ssmtp.conf: # 接收系統郵件的 Email root=ntausr4@gmail.com # 使用 GMail 的 MTA 送信 mailhub= smtp.gmail.com:587 # 設定 hostname hostname=raspberrypi # 允許使用者設定 Email 的 From 欄位 FromLineOverride=YES # Google 帳號與密碼 # 啟用安全加密連線 UseSTARTTLS=YES UseTLS=YES # 輸出除錯資訊 Debug=YES 設定完成後,就可以立即使用了,下面這行指令是使用 ssmtp 送信的範例: echo "This is a test" | ssmtp recipient@your.domain.com Google 兩步驟驗證 如果您的 Google 帳戶有啟用兩步驟驗證登入,那麼在使用一般...

IoT|硬體|樹莓派|實作|感測器|自製智慧型監視器

圖片
這裡介紹如何使用樹莓派與網路攝影機,自己打造一個物聯網監視器,發現異常狀況時自動以 Email 通報。 使用樹莓派打造具有物聯網功能的監視器的方法與之前介紹過的自製縮時攝影設備類似,主要的技術就是應用 motion 這個工具來處理網路攝影機的畫面,偵測畫面中變動的物體,再配合自己撰寫的通報指令稿,組合成完整的物聯網監視系統。 事前準備 [材料] Raspberry Pi 3 Model B 開發板 羅技 Logitech  C270 網路攝影機 作業系統是使用樹莓派官方的 Raspbian [檢查] 確認硬體設備型號:Logitech  C270: lsusb 再看看 /dev/ 下是否有video0裝置 ls /dev/video0 安裝 fswebcam sudo apt-get update sudo apt-get upgrade sudo apt-get install fswebcam 測試 fswebcam fswebcam -d /dev/video0 ~/ test.jpg 建立基本監視系統 motion 是最主要的核心工具,使用 apt 即可安裝。安專之前新更新系統套件資訊: sudo apt-get update 安裝 motion 套件: sudo apt-get install motion motion 在安裝完成之後,預設是不會自動啟動的,要讓它能夠開機自動啟動,就要修改  /etc/default/motion  設定檔,啟用 motion 的 daemon: start_motion_daemon=yes 接著修改 /etc/motion/motion.conf 設定檔,調整各種 motion 的參數,這裡的參數非常多,這裡只是列出一些我個人感覺比較需要調整的部份。 sudo nano /etc/motion/motion.conf 內容如下: ...

IT|資料庫|Key-Value|Redis 在 Spring Boot 實現緩存操作

圖片
緩存的應用場景 [什麼是緩存?] 在互聯網場景下,尤其 2C 端 產品 ( 比如社交類的微信,手機類的小米. 這類產品的開發 )在大流量場景下,需要將一些經常展現和不會頻繁變更的數據,存放在存取速率更快的地方。 緩存就是一個存儲器,在技術選型中,常用 Redis 作為緩存資料庫。緩存主要是在獲取資源方便性能優化的關鍵方面。 Redis 是一個高性能的 key-value 資料 庫。 [緩存的應用場景有哪些呢?] 比如常見的電商場景,根據商品 ID 獲取商品信息時,店鋪信息和商品詳情信息就可以緩存在 Redis ,直接從 Redis 獲取。減少了去數據庫查詢的次數。但會出現新的問題,就是如何對緩存進行更新? 大致流程如下: 獲取商品詳情舉例 a. 從商品 Cache 中獲取商品詳情,如果存在,則返回獲取 Cache 資料返回。 b. 如果不存在,則從商品 DB 中獲取。獲取成功後,將資料存到 Cache 中。則下次獲取商品詳情,就可以從 Cache 就可以得到商品詳情資料。 c. 從商品 DB 中更新或者刪除商品詳情成功後,則從緩存中刪除對應商品的詳情緩存 更新缓存的策略    2017-06-12 Mon 參考 《緩存更新的套路》 ,緩存更新的模式有四種: 1、Cache aside 2、Read through 3、Write through 4、Write behind caching 這裡使用的是 「Cache Aside」 策略,此策略可從三個維度來說明: 失效:應用程序先從cache取數據,沒有得到,則從數據庫中取數據,成功後,放到緩存中。 命中:應用程序從cache中取數據,取到後返回。 更新:先把數據存到數據庫中,成功後,再讓緩存失效 實作 [執行環境] Mac OS 10.12.x JDK 8 + Redis 3.2.8 Spring Boot 1.5.1.RELEASE 程式碼下載(github): https://github.com/ntausr4/Test-Tech-SpringBoot-mybatis-Redis 程式相關說明: ...

IT|軟體|開發|Lombok @Data

圖片
Lombok  簡介 ombok包提供了簡單的標注來幫助我們簡化消除一些必須有但是臃腫的java 代碼,比如getter、setter和構造函數等,這些函數一般我們通過IDE自動生成,有了lombok三兩個標注就輕鬆搞定。 為了讓 Eclipse 識別 lombok ,除了引入 lombok JAR 包之外,你需要安裝 lombok ,這樣 Eclipse 才不會報警告(否則即使你標注了 @Data ,如果你不寫 setter 和 getter 代碼的話, Eclipse 會有警告)。安裝非常簡單,只需要到 lombok 網站中下載,然後雙擊 Jar 包運行即可。 安裝說明     2017-04-10 Mon     [安裝] 安裝步驟: #下載 lombok.jar ( lombok官網 ) #安裝 lombok #重啓 eclipse 檢查: You can check if your eclipse installation is lombok-enabled in eclipse's about dialog. The lombok version will be listed at the end of the copyright text Eclipse 啟動後如果還在錯誤訊息,則點擊在  eclipse 的 Project  選項的  clean [使用] Maven <dependencies>      <dependency>           <groupId>org.projectlombok</groupId>           <artifactId>lombok<...

IT|軟體|測試|JMeter 自動生成測試報告

圖片
Jmeter 簡介 JMeter 是 Apache 組織下一套百分之百由 Java 來開發的 open source 軟體,主要設計用來測試軟體行為在負載較重的情況下是否能夠正常運作且不出錯,以及測量軟體在給定負載量(or給定壓力)下的效能表現。 官方網站: http://jmeter.apache.org/ Jmeter   自動化測試 Jmeter  可根據設定好的測試計畫(jmx)來執行測試。執行測試後,產生  Jmeter  測試結果(jtl)。最後根據  Jmeter  測試結果(jtl),來產生測試報告(網頁)。 自動生成測試報告,可分為兩種: 全新產生:jmeter 測試結果(xx.jtl) 以及測試報告路徑(xx\resultReport\)不可存在,否則  Jmeter 會執行失敗。 結合先前的  Jmeter  測試結果(jtl),產生這次的測試報告 # 全新產生本 次測試報告 jmeter -n -t test.jmx -l result.jtl -e -o /tmp/ResultReport 說明: -n: 非GUI模式執行 JMeter -t: 執行測試檔所在的位置 -l: 指定生成測試結果的保存檔,jtl 檔案格式 -e: 測試結束後,生成測試報告 -o: 指定測試報告的存放位置 注意:-l -o 指定的檔及資料夾,必須不存在,否則執行會失敗 寫好的 bat 內容: set _jmeter_root=C:\lab\400\apache-jmeter-3.1 For /f "tokens=1-4 delims=- " %%a in ('date /t') do (set _thisdate=%%a%%b%%c) For /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set _thisTime=%%a%%b) set _jmeter_resultReport_root=%_jmeter_root%\bin\tmp\ResultReport_%_thisdate%_%_thisTim...

IT|軟體|程式語言|Java String 效能

String 的其他最佳實踐      2016-12-27 Tue #用 equals 時總是把能確定不為空的變量寫在左邊,如使用"".equals(str) 判斷空串,避免空指針異常 #第二點是用來排擠第一點的.. 使用 str != null && str.length() != 0來判斷空串,效率比第一點高。 #在需要把其他對象轉換為字符串對象時,使用 String.valueOf(obj) 而不是直接調用 obj.toString()方法,因為前者已經對空值進行檢測了,不會拋出空指針異常。 #使用 String.format()方法對字符串進行格式化輸出。 #在 JDK 7及以上版本,可以在 switch 結構中使用字符串了,所以對於較多的比較,使用 switch 代替 if-else。 參考資料: [1] Java 字符串拼接效率分析及最佳實踐

IT|資訊安全|Java 中常用的加密方法

SHA     21 November 2016  是一種數據加密演算法,該演算法經過加密專家多年來的發展和改進已日益完善,現在已成為公認的最安全的散列演算法之一,並被廣泛使用。 該演算法的思想是接收一段明文,然後以一種 不可逆的方式將它轉換成一段(通常更小)密文 ,也可以簡單的理解為取一串輸入碼(稱為預映射或信息),並把它們轉化為長度較短、位數固定的輸出序列即散列值(也稱為信 息摘要或信息認證代碼 )的過程。 散列函數值可以說時對明文的一種"指紋"或是"摘要"所以對散列值的數字簽名就可以視為對此明文的數字簽名。 SHA 與 MD5 比較     21 November 2016  因為二者均由  MD4  導出, SHA-1  和  MD5  彼此很相似。相應的,他們的強度和其他特性也是相似,但還有以下幾點不同: 對強行攻擊的安全性:最顯著和最重要的區別是  SHA-1  摘要比 MD5 摘要長 32 位。使用強行技術,產生任何一個報文使其摘要等於給定報摘要的難度對  MD5  是 2^128 數量級的操作,而對  SHA-1  則是 2^160 數量級的操作。這樣, SHA-1  對強行攻擊有更大的強度。 對密碼分析的安全性:由於  MD5  的設計,易受密碼分析的攻擊, SHA-1  顯得不易受這樣的攻擊。 速度:在相同的硬件上, SHA-1  的運行速度比  MD5  慢。 BASE64     21 November 2016  按照 RFC2045 的定義,Base64 被定義為:Base64 內容傳送編碼被設計用來把任意序列的8位字節描述為一種不易被人直接識別的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a f...