PHP-FIG 新網站

Screen Shot 2015-10-29 at 9.46.27 AM

PHP-FIG 終於通出新網站了,介面比上一版本還要清楚許多,首頁直接清楚列出三大標準參考 AUTOLOADING, INTERFACES, CODING STYLES,網站的 Souce Code 可以在 Github 上面找到,目前 FIG 只有釋出 PSR-0, PSR-1, PSR-2, PSR-3, PSR-4, PSR-7,其他有很多部分目前都在 Review 中,詳情可以參考 PHP Standards Recommendations,Coding Style 部分,我建議可以裝 PHP-CS-Fixer 搭配 SublimText 編輯器就可以自動幫你校正所有 PHP Source Code。新人建議可以先把 PSR-2 看完,這樣團隊 Coding Style 才能達到一致性。

Laravel Homestead 支援 PHP 7

Laravel PHP Framework

很高興看到 LaravelHomestead 推出 PHP 7 的版本,假如您還在使用 PHP 5.x 的 homestead box,請參考本篇教學,或者是參考線上文件來升級。底下是這次升級的兩個步驟,第一個就是重新下載新的 PHP-7 box 檔案,第二步驟修改 Homestead.yaml設定檔,請參考如下:

[Read More]

Pingdom 升級支援亞洲區服務

74c50c2938accf866de4cf41fefd3b9c_400x400

Pingdom 是一套偵測伺服器是否存在的工具,網站如果出問題掛點,Pingdom 會用 Email 及手機簡訊通知管理者。強大的地方不只這裡,還可以偵測 TCP, DNS, SMTP 只要是網路的 protocol 幾乎都有支援,個人買的是標準方案 (Standard),之前一直讓我很困擾的是,Pingdom 只有支援美國及歐洲伺服器,所以如果要偵測亞洲區像是新加坡等地方,ping 的 latency 幾乎都飆到 1000 ms 以上,所以變成只能讓客戶看 up time。但是昨天收到 Pingdom 升級全部方案的資訊,令人振奮的是 Pingdom 開始有亞洲區服務,底下是 Standard 升級過後的方案:

  • 支援選擇 Test 所在地 (原本 Standard 並無此服務)
  • 支援亞洲區機房 (墨爾本, 雪梨, 香港, 新加坡, or 漢城.)
  • 可以透過 IPv6 來偵測網站
  • 提供新版後台服務
[Read More]

該如何寫好 git commit message

github-logo

Git 已經是每天必用的工具,也是團隊間互相合作的重要角色。要寫好 Git commit message,讓團隊成員可以知道每一個 Commit 代表什麼意思,這是非常重要的。網路上看到一篇教您如何寫好 Git commit message,好的 Commit Log 可以讓其他同事快速知道這個 Pull Request 包含了哪些異動,該作者寫了七點,分別如下

  1. 將標題與內容中間多一行空白
  2. 標題限制 50 字元
  3. 標題第一個字必須為大寫
  4. 標題最後不要帶上句號
  5. 標題內容可以使用強烈的語氣
  6. 內容請用 72 字元來斷行
  7. 內容可以解釋 what and why vs. how

要強制大家有共通的 commit format 其實很難,所以團隊內會使用 issue track 系統,大家把 issue 或 feature 都開好,在標題列裡面就要強制將 issue number 寫入,然後在 issue 那邊把內容及作法詳細寫清楚,方便追蹤,這樣也是可以的。

PS. 該是強迫自己把 commit log 寫好會比較好,通常在追問題,也時候也會發現自己寫的 Log 不是很清楚。

git 

JavaScript in 2015

Screen Shot 2015-09-09 at 2.03.34 PM

在這幾年的趨勢看來,JavaScript 已經環繞在各領域了,不管在 Web 前端或後端,上層或下層,都充滿了 JavaScript,其實都是托 Node.js 的福,網路上看到這篇 JavaScript in 2015,裡面講到 JavaScript 所有的工具,不管前端到後端,每一年都有新的工具跟新的 Framework,從以前寫 BackboneAngular.js 到現在 React.js 改變了整個 JavaScript View 的生態,工具流程整合從 Grunt.jsGulp.js 的出現,整個生態又轉換了,大家陸續將工具全都轉到 Gulp,最後又出來一套 Webpack,Webpack 出現基本上不會影響 gulp 發展,因為 Webpack 還是有很多限制,在前端或後端在上 Production 前的一些流程像是 copy 檔案等,這些是 webpack 無法整合的,看到這些工具一一出現,也不知道明年或現在會不會又跑出一套新的玩具,讓整個 JavaScript 生態整個改變。寫上層的同時,看到同事在寫底層,同事就會跑過來拍拍我肩膀說:『好險我是搞 Kernel,搞上層就要跟你們一樣天天追新技術,永遠沒有停止的一天』。看一下全世界 Job Trends

[Read More]

Laravel Presenter 在 Controller 的使用

Laravel PHP Framework

Laravel Auto Presenter 是一套用在 view 裡的 decorates objects,搭配資料庫時,如果有需要組合或整合欄位來顯示相關資訊,這套就非常適合使用在 Laravel View 裡,如果不是透過 Laravel Auto Presenter,開發者也可以利用 Laravel Accessors & Mutators 來實現這方法,只是這要寫在 Model 層,寫法如下,此做法寫起來蠻亂的,而且也並不是每個地方都需要擴充這些欄位。

/**
 * The accessors to append to the model's array form.
 *
 * @var array
 */
protected $appends = [
    'is_twitter',
];

/**

  • Get the user’s is_twitter flag.
  • @param string $value
  • @return string */ public function getIsTwitterAttribute() { return (bool) ($this->attributes[‘options’] & self::$OPTIONS[‘is_twitter’]); }
[Read More]

Facebook React Jest 搭配 Webpack 測試

logo_og

Facebook React 就是要搭配 Webpack,Webpack 已經是前端開發的必備工具,要測試 React Component 就是要用 Facebook 開發的 Jest 框架,使用 Webpack 也許會搭配 Less or Sass Loader 讓每個 component 都可以獨立有 CSS 檔案。要在 JS 內直接引入 CSS 檔案寫法如下

import '!style!css!less!./Schedule.less';
import React, { Component } from 'react';
[Read More]

Laravel Homestead 2.1.5 版本將不再刪除舊有資料庫

Laravel PHP Framework

Laravel Homestead 提供一套虛擬機器,讓開發者可以快速將 Laravel 環境架設起來。在 2.1.5 版本以前,要新增新的 Site 都會透過修改 yaml 設定檔後,直接下 homestead provision 來重新啟動 VM,問題就來了,此指令會將現有的 Database 全部刪除,重先建立一次,這樣開發者就要重新跑 DB Migration 才有資料。此問題作者聽到了,所以在 2.1.5 版本作者拿掉 Drop Database 指令,而是透過 CREATE DATABASE IF NOT EXISTS 來取代原有指令 (下面程式碼),這樣開發者就不用擔心資料會被刪除。當然作者也很貼心,如果開發者想要清除整個資料庫,一樣可以透過指令 homestead destroy 來將整個 VM 刪除即可。

// 取代原有 mysql -uhomestead -psecret -e "DROP DATABASE IF EXISTS \`$DB\`";
mysql -uhomestead -psecret -e "CREATE DATABASE IF NOT EXISTS \`$DB\` DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci";

詳細的資訊可以參考 official documentation,或參考最近修改的 commit 內容

git tips 找尋遺失的 commit 紀錄

github-logo

個人每天常用的常用的三大 Git 指令分別是 git reset, git pull, git rebase,但是呢有時候手殘,常常把 git reset --soft 打成 git reset --hard 造成不可預期的錯誤,朋友圈內也有人常常問我該如何救不見的 commit,其實很容易,git 對於每隔操作後產生的 commit 都會存放在 Local 端,所以基本上不用擔心 commit 記錄會不見,有一種狀況會永遠消失,那就是假設尚未 commit 目前修正過的檔案,然後下 git reset --hard HEAD,這樣的話我想誰都無法幫忙把已修正過的檔案找回來了,原因是連 git 都不知道你改了什麼啊。所以為了避免這情況方生,個人建議開發者,只要開發到一定的階段,務必要下一個 commit 當作記錄,但是你會說,這樣功能開發完後,就會有很多個 commit 非常不好看,這時候可以嘗試 git rebase 將整個功能合併成一個 commit,這樣其他開發者 review 時就會非常清楚。

現在的問題是如果開發者不小心下了 git reset --hard HEAD^,上一個 commit 就會消失了,這時候該如何救回來呢?答案可以使用 git reflog 指令然觀看開發者全部 git 的操作記錄,裡面詳細記載你曾經下過的 git 指令

1
2
3
4
5
6
7
8
$ git reflog
794be8b HEAD@{0}: reset: moving to HEAD^
5e2be6f HEAD@{1}: commit (amend): update
bfa593c HEAD@{2}: cherry-pick: update
794be8b HEAD@{3}: reset: moving to 649c658
794be8b HEAD@{4}: reset: moving to HEAD^
649c658 HEAD@{5}: commit: update
794be8b HEAD@{6}: commit (initial): addd

上面可以看到之前 commit 的記錄,接著可以透過 git reset --hard xxxxx,或者是用 git cherry-pick xxxxx 將上一個 commit ID 記錄抓回來即可。