發表文章

Git 開發流程

圖片
Git 實際開發流程 真實開發的時候,除了有 Gitlab 上面的  主要 repo 、 自己的 repo 以外,還會有一份在本機開發的 本地 repo , 這份 本地 repo 是從 自己的 repo Clone 回來的。 注意 :底下步驟 1 除了從主線 pull 最新版本的程式回來,也可以直接從主線切一條分支出來做開發(推薦後者) 推薦後者(直切從主線切出一條分支出來做 issue)的原因是: 實務上開發的過程中,一個工程師可能會同時掛多個 issue。假設突然出現一個緊急的 issue 時,你可以從主線再切一條新分支,用來處理緊急的 issue。把緊急的 issue 處理完成後,在切回原本開發的 issue 分支繼續原來的工作!這是前者辦不到的。 以下是 Git 實際開發的流程: 一般要開始做 issue 前,就會先從主線拉(pull)一份最新版本的程式(code base)回來做開發, 開發的過程可能會有多個檔案被異動,也可能經歷多次 commit。 開發完成後,為了避免與別人 push 回主線的程式碼發生衝突,一定會先做一次 Pull, 注意: 做 Pull 時 Git 會自動幫你 Merge,這時會有以下幾種情況發生 : Git 自動 Merge 成功,不發生衝突。 Git 自動 Merge 失敗,發生衝突,需要你手動處理衝突。 不管有沒有發生衝突,Merge 完後都會有一次合併程式的 Commit((合併程式也算異動))。 做完 Pull & Merge 後,就可以把最新的 commit 推(push)回主線,完成本次 issue 的提交。 ​

Git Commit Message 這樣寫會更好,替專案引入規範與範例

圖片
Commit Message 跟寫程式註解還蠻像的, 最好可以寫下「為什麼」你要作這樣的異動, 而不是單單只記錄下你做了「什麼」異動。 Commit Message 最好兼俱 Why 及 What,讓日後進行維護人員更快進入狀況。 Commit Message 這樣寫會更好: 做 issue 的時候,不應該一次 Commit 所有異動!應該獨立 Commit 每個不同意義的異動,這樣 commit 訊息才會跟異動的程式碼有關聯。 每次 Commit 都是針對異動的檔案做說明:Why & What。這樣的 Commit Message 能讓日後的維護人員更快進入狀況 每次 Commit 都加上 issue 編號,方便追蹤相關的程式異動原因。 若 Commit Message 寫得妥當,在閱讀追蹤程式碼的意圖會相當容易。如果只把 Git 當作版本控制,隨意撰寫 Commit Message 就太可惜了! 不能只把 Git 當作程式碼的 FTP,要把 Git 當作歷史查閱的工具才拿發揮 Git 的功能。 好與不好的真實案例 用一個小插曲證實 Commit 訊息的重要性 上面 PPT 是我在工作中遇到的兩個案例,範例中包含「好的 Commit Message」與「不良的 Commit Message」。 在範例中可見: 良好的 Commit Message: 如何在「一年後」讓維護人員進入狀況 不良的 Commit Message: 如何在「一個月內」讓維護人員找不出程式異動的原因 。 Commit Message 之規範 在撰寫 Git 與 SVN 等版本控制軟體 Commit Message 時,可以參照國外 AngularJS 團隊的規範: AngularJS Git Commit Message Conventions 以下為這套訊息規範的展示與說明: Commit Message 規範範例: Commit Message 規範範例解析: Commit Message 規範組成: Header: < type > ( < scope > ): < subject > - type: 代表 commit 的類別:feat, fix, docs, sty

自學工具&方法

圖片
自學工具&方法 一、Markdown:好寫好讀的排版語法,速寫筆記好幫手! Markdown 是一個 好寫好讀 的網路排版語法,很容易幫助你把筆記或重點,並整理成文章。 Markdown 做筆記的優點: 易寫的特性,不用五分鐘就能整理出 好閱讀 的重點。 寫一份 Markdown,可以匯出成 HTML 、 PowerPoint 簡報 、 書本模式 寫文章、報告、書籍不成問題! 網站逐漸支持 Markdown,將你的 Markdown 發佈到部落格吧! Markdown 用簡潔的語法代替排版,不像文字處理軟體 Office Word 有大量的排版、字體設置,非常容易上手。 開始使用 Markdwon 後,每次 學到新觀念,都會趕快用 Markdown 做重點筆記 。 對我來說, Markdwon 提供一個 有系統的筆記方式 ,效果比寫在書面上還好。 整理好的筆記,也能發佈到部落格或自己的知識管理庫。 這對未來的職場面試相當加分 ! 一句話總結,它實際上是個非常簡單、非常容易學習的 排版語法 。 推薦閱讀連結: Markdown 官方說明 Markdown 線上編輯器 hackmd.io Markdown 語法速查表 二、Kanbanflow:待辦事項視覺化工具 用 KanbanFlow 做時間管理,督促自己工作 三、讀書與練習 ​

在 CI 測試環境中使用 SQLite

Why SQLite?In Memory 模式 SQLite 可開啟 In Memory 模式 在記憶體中操作資料庫 ,程式關閉後,記憶體內的 SQLite 資料庫也會清空,相當適合測試環境使用(無副作用)。 建置步驟: 產生假資料,先匯出 MySQL 備份檔 將 MySQL 的備份檔轉換成 SQLite 格式的備份檔。 最後再將 SQLite 備份檔配置到 CodeIgniter 的 database.php 設定檔中。 config/database.php if (ENVIRONMENT == "testing" ) { $db [ 'main' ] = [ 'dsn' => ':memory:' , // 啟動 In Memory 模式 'hostname' => '' , // 不需填寫 'username' => '' , // 不需填寫 'password' => '' , // 不需填寫 'database' => APPPATH . 'database/sqlite/sqlite.db' , // SQLite 備份檔案,絕對路徑。 'dbdriver' => 'sqlite3' , // 使用 SQLite 'dbprefix' => '' , 'pconnect

PHP 錯誤:Unable to load dynamic library

圖片
Unable to load dynamic library 錯誤訊息 Failed loading /usr/local/php5/lib/php/extensions/no-debug-non-zts-20160303/opcache.so: dlopen(/usr/local/php5/lib/php/extensions/no-debug-non-zts-20160303/opcache.so, 9): Symbol not found: _pcre_globals Referenced from: /usr/local/php5/lib/php/extensions/no-debug-non-zts-20160303/opcache.so Expected in: flat namespace in /usr/local/php5/lib/php/extensions/no-debug-non-zts-20160303/opcache.so ... 省略 遭遇過程: 最近將 PHP 從 PHP5.6 更新至 PHP7.1。使用 PHPStorm 要進行單元測試時,報錯了: 從錯誤訊息可看見有幾個 PHP 插件沒辦法被載入,導致我的 PHPUnit 沒辦法順利執行,並且得到一個提示訊息為: Expected in: flat namespace 發生原因: 一番查證後,原來 Expected in: flat namespace 是 C++ 層級的錯誤例外訊息。 這段訊息會在「程式環境沒有辦法編譯插件」的時候跳出!(程式環境指的是 PHP5、PHP7、Python 等正在運行的程式。) PHP 沒辦法順利編譯插件?但這些插件明明在啟動 Apache 時都被順利載入了,到底發生什麼事呢? 在一般情況下 PHP7.1 確實可以正常編譯這些套件,但在 PHP-CLI 模式下進行 PHPUnit 時卻又編譯失敗?這些跡象已經指出, 一定是 PHP-CLI 的編譯器指錯版本了 ! 打開 PHPStorm > Preferences > Language & Framework > PHP,檢查 PHP-CLI 版本是否有問題: PHP7.1 與 PHP

在 Mac 上切換 PHP 版本

圖片
在 Mac 上切換 PHP 版本 如果你是使用 Liip PHP 替你的 Mac 安裝 PHP 的話,那麼恭喜你,切換 PHP 版本會變得非常簡單。 安裝任何 Liip PHP 之前,做好備份! 雖然切換版本很簡單,但也有應注意事項!!! 安裝 Liip PHP 後,會覆蓋原本在 /ect/apache2 目錄底下的設定檔案 ,所以在安裝任何 Liip PHP 之前, 記得先做好備份 ,以便將設定復原。 更好的做法是,把自己客製化的設定,額外拉出一個設定檔案。等安裝完成後再 Include 即可。 一但做好備份後,就可以開始進行安裝囉! 如何切換 PHP 版本 當您同時安裝多個版本的 Liip PHP 時,可以在 /usr/local 目錄下看見所有版本的 PHP : 根據 Liip PHP 的設定,不論您安裝任何版本, Liip PHP 一律會從 /usr/local/php5 這個路徑執行 PHP 。 然而 /usr/local/php5 只是一個捷徑,並且指向這個目錄下其中一個版本的 PHP: 由此可知,如果 想要切換 PHP 版本,只需要替換 php5 這個捷徑即可 。 切換捷徑即可替換 PHP 版本 cd /usr/local rm php5 ln -s php5-7.3.0alpha3-20180705-141106 php5 快速切換 PHP 版本: 如果每次切換版本都要手動砍捷徑太麻煩了,也可以寫一個 Base Shell 指令稿來替你切換版本。 首先新增一個 switch_php.sh 檔案: #!/bin/bash # 使用方法: # ./switch_php.sh <version> # ./switch_php.sh php5 # ./switch_php.sh php7 # activate php56 if [ "$1" == "php5" ]; then sudo rm /usr/local/php5 sudo ln -s /usr/local/php5-5.6.14-20151002-085853 /usr/local/php5 echo "activated p

針對「檔案」自動校正中文文案排版工具

圖片
自動校正中文文案排版(For 檔案) 資料來源: WadeHuang1993/github 此工具針對「檔案」校正中文文案的排版,統一中文文案與排版格式皆參考 中文文案排版指北 。 此工具是基於 NauxLiu/auto-correct 做出來的「自動中文排版工具」。 此工具只在 Command-Line 模式中運行 安裝要求: PHP 5.6+ 安裝: 將 AutoCorrectChineseTypesetting Clone 下來即可。 使用說明: AutoCorrectChineseTypesetting 必須在 PHP-CLI 模式下進行: 將要進行排版的檔案放到 AutoCorrectChineseTypesetting 目錄下。 使用 PHP-CLI 執行 AutoCorrect.php 校正中文文案排版。 AutoCorrect.php 會自動將校正完成的檔案輸出至 Outputs 目錄內。 步驟: 在 Command-Line 模式中: cd path/to/AutoCorrectChineseTypesetting php AutoCorrect.php -i InputFile -o OutputFile 若 OutputFile 沒定義的話,預設輸出的檔案名稱會與輸入檔案名稱相同。 可用參數: -i 要做排版的檔案名稱。 -o 輸出的檔案名稱(可選)。 -a 新增校正辭彙庫(可選,可多次新增)。 -h 查看使用說明。 新增辭彙庫 -a 參數提供了新增辭彙庫的功能: 將您要新增的辭彙庫(xxx.php)放置於 dictionary 目錄下。 執行 AutoCorrect.php 並使用 -a 參數加載辭彙庫。 可多次使用 -a 參數,加載多個辭彙庫。 辭彙庫必須為 *.php 檔案,其內容為: <?php return [ # '校正前的字詞' => '校正後的字詞', /** * ...將您的新詞彙加入於此。 */ 'docker' => 'Docker' , '