JAVA搞不清楚系列 - Clean Code 讀書心得
進到公司後被要求的第一件事就是看這本書雖然在看的時候一直有種為什麼我在這?我在幹嘛?之類的感覺但是沒想到這些東西會一直在之後做專案的時候冒出來就連我自己都覺得很神奇很推薦大家有空的話也可以看看他雖然短期之內不會有立竿見影的效果但我覺得書中的觀念會在不知不覺中影響著自己
Chapter 1 - 無瑕的程式碼
集中:不要在一段程式裡面想做一堆事
獨立:盡量減少依賴關係,以便於維護
可讀:讓人看得懂,設計成便於測試的
優化:盡可能的優化他,以免引得別人想來做優化而誤導致一堆混亂
命名應該名副其實,他會告訴你為什麼要存在、做什麼事、該怎麼用,如果你需要註解來補充就不算名符其實。
Chapter 2 - 有意義的命名
讓名稱代表意圖—使其名副其實
代碼的簡潔度很重要,但是如果簡潔變成了模糊則沒有意義
避免誤導:拼寫與意圖相似的字詞
產生有意義的區別:如Data & Info幾乎沒差就選一個用就好
使用能唸出來的名稱:不要亂縮寫
使用可被搜尋的名字:命名的長度與其scope的大小相應
不要裝可愛:HolyHandGrenade ⇒ DeleteItem
每個概念使用 ...
CICD工具 - Jenkins入門
因為實習的關係需要做一些Survey
所以也把自己做的這些學習過程紀錄一下
Jenkins介紹Jenkins是一個持續整合(Continuous Integration, CI)的Web-base伺服器。
自動化工具將個模組的程式碼從版本控制伺服器上下載下來,若程式碼有所變動便進行程式碼編譯並測試
Jenkins由Java開發,需要Java Runtime Environment (JRE)才能執行(JDK也可),可以利用GUI或是CLI安裝。另外因為是一開始學習所用,還沒辦法做到CD的部分
Jenkins架構圖
實踐步驟安裝JenkinsJDK: https://www.java.com/zh-TW/download/Jenkins直接至官網下載安裝即可:https://www.jenkins.io/zh/
Jenkins安裝完成後會需要安裝Plugin,選Suggested的就好另外會需要輸入初始密碼(Jenkins會告訴我們初始密碼的位置),以及創建初始管理者。
打開瀏覽器進入http://localhost:8080
Free-Style 類型的專案提供了非常大的彈性讓使用者來 ...
深度學習筆記系列 臉部辨識基本理論(II)
延續上一篇,這篇的主要內容是在談Viola-Jones的訓練部分以及教材中後面的Adaboost、Cascading。
Training 訓練
(1) 在訓練的部分,我們首先會將圖片縮至 24x24 pixel當訓練用圖過大時,要去對應Harr-like Feature的組合可能性就會太多(不同的長寬高等等),因此訓練時我們會將訓練圖片縮小;要偵測時會將特徵放大。
(2) 準備訓練用的圖片-標籤(Label)為「Face」的圖片:因為有時候電腦無法判斷什麼樣叫做「人臉的特徵」,因此我們需要提供大量符合規則的臉(24x24 pixel、角度正確、光線正常…等)給電腦去找到各個人臉中、共通的特徵。如大家都會有一個鼻子並且符合Harr-like Feature中的Edge Feature等。
有趣的是,在我們人類的認知中,左邊的眼睛會與右邊的眼睛對稱、並呈鏡面反射的型態(mirror),儘管這對我們人類來說再正常不過,但對於電腦來說、這是一個全新的概念。
(3) 準備訓練用的圖片-標籤(Label)為「Non-Face」的圖片:作為「Face」的相對面,在訓練時我們也必須告訴演算法何 ...
深度學習筆記系列 臉部辨識基本理論(I)
放寒假了,好不容易完成了論文前三章跟得出了初步實驗結果但是被老師打槍「需要討論」之後產生了自己很廢的想法所以想念一些書來讓自己充實一點剛好前陣子在Udemy上買了課程因此記錄了一下課程的內容Deep Learning and Computer Vision A-Z™: OpenCV, SSD & GANs有興趣的人也可以買課程聽聽看(畢竟30天內退款真是個好東西)裡面的老師目前聽下來覺得講得還不錯(聽得懂)但實在是因為英文不太行,所以需要做一些筆記幫助吸收文章中的圖片都是該課程中用到的圖片,僅幫助記憶、沒有其他目的
Viola-Jones Algorithm是Opencv library的原理,發展至今不只用於人臉圖像的偵測,也可用於實時(real-time)的影像偵測。分為兩個階段:Training和Detection但我們必須從Detection開始講起,這樣更有助於之後了解Training的過程。
Detection 偵測在Viola-Jones的演算法中,會先將圖片轉為灰階(Gray Scale),接著由圖片的左上角開始逐格(Pixels)偵測指定範圍(Box)內是否 ...
課堂筆記 資訊安全(III)
最後提到RSA以及DH另外還有數學的另一個難題-橢圓曲線
RSA加密步驟:
找兩個夠大的質數,p & q -> 用質數檢定法
計算 $n=p \times q$ -> 單向函數(one-way function)的簡單部分
計算 $\phi(n)=(p-1) \times (q-1)$
決定公開金鑰(加密):where $1找一個數字跟phi(n)互值
決定私密金鑰(解密):$ed=1 \mod \phi(n)$ and $0 \le d \le n$ -> e, d互為mod phi(n)的乘法反元素
公開金鑰:$PU={ e,n }$
私密金鑰:$PR={ d,n }$
質數的重要性:如果p是質數,a i == a j (mod p)則具有消去律,i == j (mod p)
Diffie-Hellman Key Exchange 迪菲-赫爾曼密鑰交換可以讓通訊雙方在不安全的環境下傳遞密鑰(Key Exchange)CC BY-SA 4.0
圖中的a與b是由 ...
課堂筆記 資訊安全(II)
許多加密法的安全性其實都是建立在數學的難解問題上比如RSA的安全性就是建立在大數問題與離散對數的難解上因此基礎數論是作為後面學習各種加密法的奠基
數論維基百科:Prime Number Theorem
Fermat’s Theorem 費馬定理費馬大定理$x^n + y^n= z^n$當n>2時,找不到一個整數解(x,y,z)
費馬小定理用來確認某數是不是質數?
$a^p \equiv a (\bmod p)$
若a不是p的倍數,也可寫成$a^{p-1} \equiv 1 (\bmod p)$
12345> p=7> [i**(p-1) for i in range(1,p)][1, 64, 729, 4096, 15625, 46656]> [i**(p-1) % p for i in range(1,p)][1, 1, 1, 1, 1, 1]
或者使用Python內建的pow()函數
12345> p=7> [pow(i,p-1,p) for i in range(1,p)][1, 1, 1, 1, 1, 1]> [pow( ...
課堂筆記 資訊安全(I)
這學期修了資訊安全,因為覺得這些東西花了很多時間學習不希望這學期過了之後就忘記了,實在很可惜所以把一些整理與消化過後的筆記記錄下來
Security Service(x.800)
Authentication(認證性):確認溝通雙方的身分
Access Control(存取控制權):預防未經驗證的存取
Avalibility(可用性):確保資料可用
Data Ingrity(資料完整性):確認資料是由經認證的sender送出
Data Confidentiality(資料機密):對未經驗證的公開資料進行加密
Non-Repudiation(不可否認性)
加密的手段
Substitution 替代
Transposition 換位
替代(Substitution)常見的替代(Substitution)加密法:
Caesar Cipher:字母由向右三個字母替代
Affine Cipher:字母由向左或向右n個字母替代
Monoalphabetic Ciphers:單表加密(只對一個字母做加密)
Playfair Cipher:(1) 加密:將Key準備成一個5X5的表格(去掉 ...
Django系列 自動化測試
其實自動化測試的程式我覺得比其他東西都難寫很多我們系上很多人畢業前出去做了QA的實習(包括我)但是所謂的QA卻只是無聊的做著人工檢測直到現在我仍然不是很明白自動化測試到底該怎麼實作到實際的大型專案中尤其是當系統很大時,牽一髮而動全身。
自動化測試
使用Shell發現BUG(未來時間發布的問題應該回傳FALSE,結果仍需由人工判斷)
使用自動測試->在test.py裡將在Shell中進行的測試寫成class
接著在cmd中執行test,Django會替我們建置資料庫去測試回傳值是否正確可以看到回傳的是AssertionError(判斷錯誤)
既然已經發現BUG,我們就去修改models.py中的was_published_recently()函數
接著再重新測試一次
為測試再加上兩個測試函數(old & recent)
也為IndexView和DetailView建立測試函數
在test.py加上測試
12345678910111213141516171819202122232425262728293031323334353637383940414243444 ...
Django系列 客製化
這篇文章中會提到一些簡單的客製化內容比如我們在後台管理介面中,想看到什麼或是不想看到什麼。
這一篇應該是Django教學筆記的最後一篇除非我突然去把一年前的作業翻出來再看一次不然我研討會的程式還沒寫完已經要開天窗了
客製化設計修改css
在polls底下建立一個名為static的資料夾,在static下再建一個polls的資料夾,接著創建style.css
index.html中引入css
效果
修改admin介面的外觀與顯示內容
修改admin.py之前
修改之後
原本的Choice選項若需要增加需要透過FK-Question來與問題連結方可新增
修改之後在Question裡面同時可新增Choice(inlines)
但是如果Choice有很多欄位的話會使得易讀性下降,因此我們只需修改ChoiceInline就可以讓畫面變成下圖那樣
預設Django的List頁面只顯示出了question_text
在admin.py裡用list_display列出想要顯示出來的欄位
Django admin內建的排序無法對布林值排序,因此我們在model.py裡對Question ...
Django系列 資料庫(二)
這篇文章中會提到使用API Shell的指令對資料庫進行操作這邊的API是Django提供的一種介面讓使用者能夠直接對資料庫進行修改而不會去動到程式碼
使用API(這邊操作都是在Shell中,實際還是需要寫到models裡)
開啟API Shell
$ python manage.py shell
在API Shell裡面進行操作
因為Query回傳的資料不具有可讀性,因此在polls/models.py裡重新定義如何回傳資料
SHELL的指令下錯怎麼辦?重新migratepython manage.py makemigrationspython manage.py migrate
繼續為資料庫新增、修改資料
使用Django的Admin介面
123$ python manage.py createsuperuserUser:admin Password:123456789
接著Runserver,登入後會看到下面的畫面
$ python manage.py runserverer
但是我們的Question、Choice都沒有出現在資料庫裡,所以我們要讓他 ...