Quantcast
Channel: 小惡魔 – 電腦技術 – 工作筆記 – AppleBOY
Viewing all 325 articles
Browse latest View live

Laravel Homestead 支援 PHP 7

$
0
0
Laravel PHP Framework

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

下載 homestead php-7 分支

要使用 PHP 7.0 請直接到 laravel/homestead repository 內下載 php-7 分支

$ git clone -b php-7 https://github.com/laravel/homestead.git Homestead

修改 Homestead.yaml

完成後,請勿執行 init.sh,因為這樣會直接覆蓋掉您的 Homestead.yaml 設定。修改您的 Homestead.yaml 加入 box 設定

box: laravel/homestead-7

最後在 laravel/homestead 目錄執行 vagrant up,就會開始下載新的 box 檔案並且開機,接著透過 vagrant ssh 登入系統即可。

Screen Shot 2015-10-05 at 2.55.16 PM

疑難排除

問題:原本的 homestead 指令無法開啟新安裝的 PHP 7 系統?

如果原本系統有 homestead 指令,你會發現升級後,無法透過 homestead up 來開機顯示新的 PHP 7.x 系統,這是因為 virtual box 的 name 衝突,要解決此問題,要先把原本的 box 刪掉,刪掉之前,請務必備份原本 box 內修改過的檔案或者是資料庫備份。請先執行底下指令

$ vagrant global-status

會顯示目前 vagrant 存在的 box 狀態

Screen Shot 2015-10-05 at 2.43.13 PM

畫面顯示會有兩個 box,一個是原本 homestead (PHP 5.x) 另一個則是 PHP 5.7 版本,這時候請先透過 vagrant destroy 把上面畫面兩個系統刪除,然後再重新下 homestead up 這樣就會是跑 laravel/homestead-7 新系統了,最後把資料庫 restore 回去,打開 URL 就可以看到原本的網站了。

問題:打開原本網站,結果發現 502 bad gateway?

這原因可以在 Nginx Log 檔案發現底下訊息

2015/10/05 10:05:13 [crit] 2061#0: *12 connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.10.1, server: homestead.app, request: "GET /journals/J0000005585 HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "homestead.app"

可以看到 Nginx 設定的 unix:/var/run/php5-fpm.sock 路徑錯誤,請改成 unix:/var/run/php/php7.0-fpm.sock 才對,完成後請重新啟動 Nginx。


PHP-FIG 新網站

$
0
0
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 才能達到一致性。

Git tips 請不要 commit 已經註解的程式碼

$
0
0
github-logo

上週看到一篇國外作者寫的 Please, don’t commit commented out code,裡面內文真的不得不按讚啊,對於每天都要 review code 的開發者來說,最不喜歡看到的就是類似下面的程式碼

this.test = function(req, res, next) {

  // if (foo) {
  //   return '1';
  // } else if (bar) {
  //   return '2';
  // }

  return 3;
};

上面的程式碼在 git diff 指令會產生如下

Screen Shot 2015-11-05 at 2.23.06 PM

可是正確來說應該是看到底下畫面

Screen Shot 2015-11-05 at 2.32.03 PM

上面這張圖才是對於開發團隊有幫助的,文章內作者提到幾點為什麼不要留下已經註解的程式碼,底下是作者的一些看法,我覺得相當實用啊

造成誤解或誤會

對我而言這點是最大的原因,假設你是剛加入團隊,或者是每天需要 review 別人程式碼的開發者來說,當你看到被註解的程式碼,第一的感覺是什麼,我自己是會停住,並且想想為什麼前一位開發者會將這段程式碼註解呢?也許這段註解對於團隊是非常重要?但是你的思緒已經停住,是不是會想找上一位開發者討論呢?而造成不必要的誤解,也浪費了其他開發者時間。每次找該開發者詢問的的結果都是『喔 忘記砍掉了』

隱藏重要的程式碼

請看原作者提出的範例

// dozens
// of
// lines
// of
// commented
// code
someImportantCode()
// dozens
// of
// more
// lines
// of
// commented
// code

開發者快速看程式碼的同時,是不是很容易忽略掉 someImportantCode 函示?

過時 Out of date

註解的程式碼時間一久,跟目前已經脫離的一段時間,根本就不適合放在專案內了,都已經在使用 git 版本控制了,為什麼不好好利用 Git 的優點,而是透過註解程式碼來記錄過去的程式呢?請注意,在團隊合作時,寫註解是給其他團員看,而不是給自己看。寫程式的同時,也請寫好完整文件。

結論

註解程式碼的缺點遠大於優點,實在看不出來有什麼理由需要將註解程式碼留下,為了避免此,可以透過一些工具,像是 eslint-rules 內的 no-commented-out-code 規則,團隊合作最終極目標就是,團隊專案給其他人 Review 的時候,別人會說這專案是一個人寫的嗎?這樣就成功了 ^__^

Laravel Homestead 支援 MySQL 5.7 和 Node 5.0

$
0
0
Laravel PHP Framework

昨天半夜看到 Laravel News 發佈支援 MySQL 5.7 和 Node 5.0 的消息,作者已經將 Homestead Vagrant box 更新上最新版了,如果你是用 PHP7 版本,請更新到 0.1.1 (laravel/homestead-7 branch),如果非用 PHP 5.7 請更新到 0.3.3 版本,此 Box 更新兩個項目,就是支援 MySQL 5.7 版本,及 NodeJS 5.0 版本,已經非常新的版號,透過底下指令就可以更新 Local 端的 Box Image:

$ vagrant box update

MySQL 5.7 版本支援了 JSON Format 真是太令人振奮了,另外此 Box 也是為了將來要釋出 Laravel 5.2 版本搭配用。最後補上升級後版本截圖

Screen Shot 2015-11-14 at 2.41.31 PM

小皓滿三個月了喔

$
0
0
0AE251E8E8E44D15BA81801046F2C3AE

小皓從出生到現在已經滿三個月了,時間過的好快,底下是上週在家裡,小皓媽媽用嘴巴吹氣讓小皓感覺非常驚恐,小皓的反應真是經典也非常可愛

記錄小皓目前狀態,四小時喝一次奶,大約 160 cc,體重大約快七公斤,最近開始會跟大人一樣看八點檔甘味人生。老婆昨天很高興的說,小皓有雙眼皮,因為剛出生的時候好像一眼單,一眼雙,害她很擔心,昨天看到雙眼皮立馬拍照,會不會之後又消失了 XD

FBF6AA9D88CF48F988AB53F36AB13315

Laravel 50 個小技巧 + Laravel 5.2 新功能

$
0
0
laravel

在學習 Laravel 階段,一定會天天看 Laravel Documentation,但是有很多小技巧是在文件內沒寫出來的,網路上找到這篇 50 Laravel Tricks in 50 Minutes,寫了 50 個 Laravel 小技巧,包含了 IoC Container, Blade, Eloquent, Middleware, Routing, Commands, Queues, Events, Caching 等模組。

當然作者最後不只介紹了 50 個小技巧,另外也展示了 Laravel 5.2 的新功能,像是可以在 Routing 內寫 Modle Binding,所以非常推薦大家看這 Slides。底下列出 Laravel 5.2 新功能

在 Routing 內可以直接 binding Model

Route::get('/api/posts/{post}', function(Post $post) {
    return $post;
});

scheduled tasks 支援 log 連續寫入檔案

$schedule->command('emails:send')
    ->hourly()
    ->appendOutputTo($filePath);

支援 Array 驗證

html 寫法如下

<p>
  <input type="text" name="person[1][id]">
  <input type="text" name="person[1][name]">
</p>
<p>
  <input type="text" name="person[2][id]">
  <input type="text" name="person[2][name]">
</p>

在 Laravel 5.1 要用 loop 方式驗證,但是 5.2 可以改寫如下

$v = Validator::make($request->all(), [
  'person.*.id' => 'exists:users.id',
  'person.*.name' => 'required:string',
]);

Collection 支援 Wildcards 功能

要讀取 posts 底下所有的 Title 可以寫成如下

$posts->pluck('posts.*.title');

Database Session Driver 多支援兩個欄位

資料庫 Session Driver 多支援 user_idip_address,這樣就可以很快速的清除單一帳號的 Session。

MySQL 支援 JSON Type

MySQL 5.7.8 之後支援 JSON Type,現在 Laravel 5.2 也會開始支援 JSON Type。

Docker 救了 Debian SSH terminal

$
0
0
Docker

上週在處理實體機器時,不小心下了底下指令

$ dpkg --purge --force-all zlib1g

造成系統所有相關指令都不能使用,像是 ssh, scp, fetch, wget 等跟網路相關的指令都會出現底下錯誤訊息

curl: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory

本來想說可以透過指令將檔案抓回來,放回去就可以恢復了,但是所有指令幾乎都不能用,連 git 也出現該錯誤訊息,這時候最怕 terminal 斷線,如果斷線了,就要到機房去處理問題了。最後想到用 Docker 來處理,簡單幾個步驟就可以將檔案抓回來了

# 抓 debian images
$ docker pull debian:7
# 進入 docker
$ docker run -t -i debian:7 /bin/bash
# 從 docker 複製檔案到 home 目錄,其中 e1bf3950b16c docker id
$ docker cp e1bf3950b16c:/lib/x86_64-linux-gnu /home/

完成後,在去 x86_64-linux-gnu 找到 libz.so.1 丟到相對應目錄就可以了,結論就是:好險平常有裝 docker 習慣 XD

PHP 7 vs HHVM Benchmark 比較

$
0
0
php-logo

2015-12-03 PHP 終於釋出 7.0 版本kinsta 工程師馬上寫出一篇 PHP7 vs HHVM 效能比較文章,直接先講結論,就是 HHVM 效能還是大於 PHP 7,所以 kinsta 最終還是採用 HHVM 來 Host WordPress 網站,文章內容都是以 CMS 平台做比較,而不是以各大 Framework 來比較,但是看結果來說,HHVM > PHP7 >> PHP 5,所以建議可以升級到 PHP 7 或者是直接上 HHVM 也可以了。底下是 WordPress benchmark 比較圖。

Copy-of-Copy-of-Transactions-per-second

WordPress 效能看起來非常相近,如果是測試 Drupal 8.0.1 效能差距會比較大 (Drupal 每分鐘線上 15 人)

Drupal-8

要升級到 7.0 的開發者,請先看完 PHP Migration Guide


在 Debian 7.8 安裝 Gitlab 筆記

$
0
0
gitlab_logo

之前寫過一篇 GitLab 快速安裝筆記,但是這次在 Debian 7.8 上安裝起來遇到蠻多問題,故寫此篇來記錄安裝遇到的問題,也會寫到如何搭配 Nginx 設定。GitLab 分兩種版本,一種是 Community Edition packages 另一種是 Enterprise Edition packages,本篇是記錄 Community 版本安裝步驟,可以到下載頁面選擇您的作業系統,就可以看到安裝方式

$ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
$ sudo apt-get install gitlab-ce

完成後,請直接透過底下指令重新啟動服務

$ gitlab-ctl reconfigure

下一步驟就是透過帳號 root 及密碼 5iveL! 登入 Gitlab,這時候你會發現為什麼都無法登入,後來找了很久,原來安裝完後,資料庫預設是空的,所以需要搭配底下指令來初始化資料庫

$ gitlab-rake gitlab:setup RAILS_ENV=production

接著打開 /etc/gitlab/gitlab.rb 修改 external_url 設定

## Url on which GitLab will be reachable.
## For more details on configuring external_url see:
## https://gitlab.com/gitlab-org/omnibus-gitlab/blob/629def0a7a26e7c2326566f0758d4a27857b52a3/README.md#configuring-the-external-url-for-gitlab
external_url 'http://localhost:8088'

後面的 8088 port 就是 Gitlab 內建的 Nginx port,可以任意改成其他 port,不要設定為 80 就好,這樣會噴 port 已經被佔用的錯誤。到這邊打開 https://localhost:8088 就可以看到登入畫面了

Screen Shot 2015-12-12 at 2.14.41 PM

安裝過程請多開一個 Terminal 視窗來監控 Log 狀態

$ gitlab-ctl tail

跟 github 整合帳號

請先申請 Github 帳號,點選右上角個人頭像內的 Settings,接著點選左邊 Applications

Screen Shot 2015-12-12 at 2.30.16 PM

把上述資料填寫完成後,按下送出就可以拿到 Client ID 及 Client Secret 接著到 /etc/gitlab/gitlab.rb 把 Github 相關設定檔打開

gitlab_rails['omniauth_enabled'] = true
gitlab_rails['omniauth_allow_single_sign_on'] = false
gitlab_rails['omniauth_block_auto_created_users'] = true
gitlab_rails['omniauth_providers'] = [
    {
      "name" => "github",
      "app_id" => "xxxxxxxx",
      "app_secret" => "xxxxxxxxxxx",
      "url" => "https://github.com/",
      "args" => { "scope" => "user:email" }
    }
]

重新啟動 gitlab-ctl reconfigure,這樣就完成了,更詳細的步驟可以參考 Integrate your server with GitHub,但是這不代表你可以不用註冊帳號,用第三方帳號註冊,GitLab 還是要你先註冊帳號,然後到帳戶設定內,把 Connected Accounts 內的 Github 啟動,這樣才可以用 Github 帳號登入

Screen Shot 2015-12-12 at 2.37.32 PM

GitLab 也支援多個 open source project 平台的匯入功能,像是可以將 Github Project 匯入

Screen Shot 2015-12-12 at 4.25.14 PM

整合 Nginx

Gitlab 內建 Nginx 服務,但是通常都會用自己架設的 Nginx,尤其是我比較喜歡裝 Nginx mainline 的版本,這樣才可以用 Http2。一樣先打開 /etc/gitlab/gitlab.rb,修改底下設定

nginx['enable'] = false
gitlab_workhorse['enable'] = true
gitlab_workhorse['listen_network'] = "tcp"
gitlab_workhorse['listen_addr'] = "localhost:8181"
unicorn['listen'] = '127.0.0.1'
unicorn['port'] = 10080

注意將內建的 Nginx 關閉,在 8.2 版本的時候,官方已經將 gitlab_git_http_server 換成 gitlab_workhorse,所以網路上看到的教學文件記得要過濾,GitLab 必須要開啟 unicorn 及 workhorse 服務,才可以跟 Nginx 串接,底下是 Nginx 完整設定檔

upstream gitlab {
  server 127.0.0.1:10080 fail_timeout=0;
}

upstream gitlab-git-http-server {
  server 127.0.0.1:8181 fail_timeout=0;
}

# let gitlab deal with the redirection
server {
  listen 0.0.0.0:80;
  server_name gitlab.wu-boy.com;
  server_tokens off;
  root /opt/gitlab/embedded/service/gitlab-rails/public;

  # include ssl config
  include ssl/gitlab.conf;

  # Increase this if you want to upload larger attachments
  client_max_body_size      20m;

  # individual nginx logs for this vhost
  access_log                /var/log/nginx/gitlab_access.log;
  error_log                 /var/log/nginx/gitlab_error.log;

  # Increase this if you want to upload larger attachments
  client_max_body_size      20m;

  ## Individual nginx logs for this GitLab vhost
  access_log  /var/log/nginx/gitlab_access.log;
  error_log   /var/log/nginx/gitlab_error.log;

  location / {
    ## Serve static files from defined root folder.
    ## @gitlab is a named location for the upstream fallback, see below.
    try_files $uri $uri/index.html $uri.html @gitlab;
  }
  

  ## We route uploads through GitLab to prevent XSS and enforce access control.
  location /uploads/ {
    ## If you use HTTPS make sure you disable gzip compression
    ## to be safe against BREACH attack.
    gzip off;

    ## https://github.com/gitlabhq/gitlabhq/issues/694
    ## Some requests take more than 30 seconds.
    proxy_read_timeout      300;
    proxy_connect_timeout   300;
    proxy_redirect          off;

    proxy_set_header    Host                $http_host;
    proxy_set_header    X-Real-IP           $remote_addr;
    proxy_set_header    X-Forwarded-Ssl     on;
    proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto   $scheme;
    proxy_set_header    X-Frame-Options     SAMEORIGIN;

    proxy_pass http://gitlab;
  }

  ## If a file, which is not found in the root folder is requested,
  ## then the proxy passes the request to the upsteam (gitlab unicorn).
  location @gitlab {
    ## If you use HTTPS make sure you disable gzip compression
    ## to be safe against BREACH attack.
    gzip off;

    ## https://github.com/gitlabhq/gitlabhq/issues/694
    ## Some requests take more than 30 seconds.
    proxy_read_timeout      300;
    proxy_connect_timeout   300;
    proxy_redirect          off;

    proxy_set_header    Host                $http_host;
    proxy_set_header    X-Real-IP           $remote_addr;
    proxy_set_header    X-Forwarded-Ssl     on;
    proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto   $scheme;
    proxy_set_header    X-Frame-Options     SAMEORIGIN;

    proxy_pass http://gitlab;
  }

  location ~ [-\/\w\.]+\.git\/ {
    ## If you use HTTPS make sure you disable gzip compression
    ## to be safe against BREACH attack.
    gzip off;

    ## https://github.com/gitlabhq/gitlabhq/issues/694
    ## Some requests take more than 30 seconds.
    proxy_read_timeout      300;
    proxy_connect_timeout   300;
    proxy_redirect          off;

    # Do not buffer Git HTTP responses
    proxy_buffering off;

    # The following settings only work with NGINX 1.7.11 or newer
    #
    # # Pass chunked request bodies to gitlab-git-http-server as-is
    # proxy_request_buffering off;
    # proxy_http_version 1.1;

    proxy_set_header    Host                $http_host;
    proxy_set_header    X-Real-IP           $remote_addr;
    proxy_set_header    X-Forwarded-Ssl     on;
    proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto   $scheme;
    proxy_pass http://gitlab-git-http-server;
  }

  ## Enable gzip compression as per rails guide:
  ## http://guides.rubyonrails.org/asset_pipeline.html#gzip-compression
  ## WARNING: If you are using relative urls remove the block below
  ## See config/application.rb under "Relative url support" for the list of
  ## other files that need to be changed for relative url support
  location ~ ^/(assets)/ {
    root /opt/gitlab/embedded/service/gitlab-rails/public;
    gzip_static on; # to serve pre-gzipped version
    expires max;
    add_header Cache-Control public;
  }

  error_page 502 /502.html;
}

如果沒設定 gitlab-git-http-server,這樣 Client 端使用 git clone http://xxx 時就會跳出底下訊息。如果要設定 https 可以參考 gitlab.conf

Fetching changes...
Checking out dbed0c03 as master...
fatal: reference is not a tree: <ssha hash>

Gitlab multiple runner

Gitlab 可以建立 Project 專屬的 CI Runner,請到 Project 內的左邊選單,點選 Settings 接著會看到左邊選單有 Runner 進去後可以看到底下畫面

Screen Shot 2015-12-12 at 4.43.49 PM

中間有 Token 是要讓你建立 Runner 的時候使用,接著在機器內裝 gitlab multiple runner 套件

$ aptitude install gitlab-ci-multi-runner

最後執行 gitlab-ci-multi-runner register

Screen Shot 2015-12-12 at 4.50.11 PM

可以發現 gitlab 支援 Docker build 及基本的 shell command。完成後,請在專案底下建立 .gitlab-ci.yml 檔案,寫入測試步驟即可

before_script:
  - nvm install 4

stages:
  - build
  - test

build:
  stage: build
  script:
    - npm install

test:
  stage: test
  script:
    - npm test

Screen Shot 2015-12-12 at 5.20.54 PM

結論

我建議如果要串 CI Server,還是推薦使用 Jenkins,功能實在差太多了,Gitlab + Jenkins 還是比較妥當,由於 Gitlab CI 現在已經是內建的了,如果是一些單純的流程,還是可以用 Gitlab CI 喔。如果有在用 Docker 請直接參考這篇 使用 Docker 建置 Gitlab CE 的 Source Control 及 CI 環境

Ref:

小皓學習翻身 (3月20天)

$
0
0
CIMG6925

上週末呢,把客廳桌子搬到電視櫃前面,鋪上瑜珈墊,想說可以開始訓練小皓翻身的動作,一開始讓小皓先趴著,接著會開始向游泳一樣一直踢腳,然後大人拿著照相機猛拍,小皓的眼睛也跟著鏡頭一直轉,就像下圖一樣

CIMG6928

最後不知道是不是頭太重,還是重心不穩,就往旁邊倒了,但是好笑的地方就在這裡,為什麼小皓倒了之後,姿勢還是跟趴著一樣呢?完全不動,真的快笑死了 XDD

CIMG6924

CIMG6920

這姿勢維持了好久,大人們才幫小皓把姿勢轉換,看到可口的大腿肉,口水都流出來了 XD

CIMG6935

小皓倒地定格影片

最後附上小皓學習趴著的影片 XD

Letsencrypt 開放申請免費 SSL 憑證

$
0
0
Letsencrypt

很高興在今年 12/03 Letsencrypt 宣布進入 public beta 階段,開放免費 SSL 提供給開發者或正式網站使用,在這之前屬於封測階段,必須透過申請的方式才可以拿到 SSL 憑證。在知道 Letsencrypt 之前,我都是使用免費的 StartSSL,這家申請的分式比較複雜,你可以在網路上找到許多申請教學,但是就是按部就班操作,就可以拿到一年份的 SSL 憑證,也就是一年申請一次啦,但是 Letsencrypt 申請的方式可以直接透過 command line 快速產生相對應的憑證,支援的 Pluging 也非常多 (像是 Apache, Nginx),詳細的操作方式可以參考線上文件。這邊就不多說了,只要安裝好 Letsencrypt 指令,就可以無痛拿到各網站憑證,在 Github 上面你可以找到許多別人寫好的 Plugin,隨便挑一個來使用吧。

使用 Letsencrypt 指令時,需要注意的是如果你要測試指令是否可以成功,你可以針對 Letsencrypt Staging Server 發送請求,也就是透過讀取設定檔 --config cli.ini 方式來測試,因為 Letsencrypt 正式申請憑證伺服器有底下限制,所以指令不要隨便亂下。Letsencrypt 目前有兩種限制 Registrations/IP address 及 Certificates/Domain。

Registrations/IP 限制就是每個 IP 只能在 3 小時內發送 10 次請求,如果超過 10 次就會被阻擋,所以申請成功的 Domain,不要隨便砍掉 /etc/letsencrypt/accounts 目錄,否則你就不能重複申請了。

Certificates/Domain 限制就是在七天內你的主 Domain 跟 sub Domain 夾起來只能申請五個,所以當你申請五個 domain 時,Letsencrypt 就會阻擋你申請下一個 domain 了,最後要注意的是,Letsencrypt 申請憑證使用期限是 90 天,官方建議如果使用在正式網站,請 60 天重新 renew 一次。

由於現在還是 public beta 階段,就請大家好好保護這免費的 Letsencrypt 網站,說到這裡,這樣還有人要去買憑證嗎?XD不過話說回來,如果有一天突然要收費,不知道會是多少錢?

將 wordpress 強制使用 SSL 連線

$
0
0
Letsencrypt

繼上篇介紹 Letsencrypt 開放申請免費 SSL 憑證,就把我的 Blog 強制使用 https 連線,Wordpress 強制使用 SSL 連線有幾個步驟需要注意,底下會是搭配 Nginx 相關設定,建議如果有裝任何 Plugin,都先進去後台暫時關閉。Nginx 1.9.5 之後有把 http2 模組加入,所以本篇會是以設定 http2 為主,當然跟 spdy 設定一樣,只是換個名字而已。

資料庫相關設定

這邊可以從 WordPress 後台修改,或者是從資料庫內的 wp_options 直接改 siteurlhome 這兩個 value。

WordPress 設定檔

請打開 wp-config.php 加入底下設定

define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

設定 Nginx

將原本 80 port 設定 301 轉到 https

server {
  # don't forget to tell on which port this server listens
  listen 80;

  # listen on the www host
  server_name blog.wu-boy.com;

  # and redirect to the non-www host (declared below)
  return 301 https://blog.wu-boy.com$request_uri;
}

server {
  listen 0.0.0.0:443 ssl http2;

  # include ssl config
  include ssl/blog.conf; 

  ....
}

比較注意的是,如果 Nginx 有設定 fastcgi_param HTTPS off;,請務必移除,否則你的 WordPress 網站會產生 Loop。最後附上在 SSllabs 驗證的截圖

Screen Shot 2015-12-18 at 1.25.30 PM

新竹中正路美食無菜單料理 – 誠食館 螃蟹大餐

$
0
0
DSC06949

這個月聚餐跑到新竹一家無菜單料理,無菜單的意思就是老闆隨機出料理啦,只要跟老闆說一人的預算大概多少,幾個人,這樣老闆就可以開始準備料理了,當天我們吃到的就是螃蟹大餐,大家可以看到上面這張圖,我本人抓的這隻是由日本空運過來的喔,想必祂的心情就像是我第一次出國的心情一樣,既興奮又緊張,等一下老闆就會把祂料理成晚上的大餐,可以好幾吃呢。底下來看每一道菜的圖片,我完全不記得菜色名字了,所以大家看看圖欣賞,別留太多口水 ^__^

P_20151209_193955_HDR.jpg DSC06955 DSC06954

第一道菜生魚片,如果不敢吃的,老闆會給干貝,也很好吃

DSC06956

第二道菜就是無敵炒飯,因為大家都很餓了,所以老闆只好端出終極炒飯

DSC06960

第三道菜,豬肋排嗎?有點忘記了,但是好吃啊

DSC06967 P_20151209_194338_HDR.jpg

忘記什麼魚,但是好大一條,不是一般家庭可以炸出這麼好吃的魚

P_20151209_195300_HDR.jpg DSC06973

一人一隻明蝦?好吃好吃

DSC06978

這是剛剛那隻大螃蟹的精華,不是每個人都有喔,很補的,接下來都是螃蟹相關料理,太多了

DSC06988 DSC06989

毛蟹湯鍋

DSC06993

蟹肉蒸蛋

DSC06998

蟹肉xx

DSC07005 P_20151209_201238_HDR.jpg P_20151209_201243_HDR.jpg

超多蟹腳肉,這不是一般的多,這可以 10 個人以上吃都還吃不完,超爽的,吃超飽的,餐廳的位址跟店面,可以參考這篇 新竹中正路美食。誠食館善食堂無菜單創意料理,老闆人不錯,還會跟你聊天,講講料理的經過,以及使用的食材,吃到超飽超爽的 ^___^

小皓滿四個月了喔

$
0
0
1450886275857

小皓在 12/22 號滿四個月了,時間過好快啊,老師傳了一些小皓在學校上課的情形,上面那張是昨天 12/23 在學校非常開心笑,笑得好燦爛啊,問了老師,老師說原本小皓都只跟隔壁那位小女生笑喔,是老師叫了他,他才轉過來對著老師笑,看到這笑容,什麼事情都不重要了。另外老師還有給其他圖片如下:

1450886268363 1450886259931

超級可愛的龍貓裝喔,這是媽媽買給小皓的衣服呢。

1450886272722

小皓在學校硬是要黏在老師身上才肯好好休息,看他的模樣真是可愛。再來幾張小皓在家裡抬頭的可愛照片

1450714252450 1450714239277 1450714237633 1450714224660

本週媽媽買了腳踢琴給小皓呢,小皓每天晚上玩得不亦樂乎,底下是小皓在玩腳踢琴的影片

最近小皓也開始會陸續發出很大的聲音,可以參考底下影片 XD

小皓自己吃手手的影片

最後補一個小皓跟媽媽玩的影片

買了 Apple Magic Trackpad 第一代

$
0
0

P_20151226_113441_HDR.jpg

由於 MacBook Pro 只有支援兩個 USB 插槽,所以在公司接了一個滑鼠,另一邊接了 ASUS WL-330NUL Router,就沒有多餘的插槽可以外接 USB 鍵盤,後來跟學長 @far 討論結果,學長推薦我買 Apple Magic Trackpad 第一代,目前 Apple 是推出了第二代,但是價錢是第一代的兩倍,還是買不起,所以網路上找到一位賣家,價錢還不錯 $1599 元,比 PCHOME 還要便宜,就立馬下單,經過五天終於到貨了,使用起來爽度真的有差,再加上學長寄來給我的 Logitech K811 無線鍵盤,整個爽大大幅上升,產能也大幅提高 XD

P_20151226_113507_HDR.jpg

全新的看起來就很爽

P_20151226_113632_HDR.jpg

P_20151226_113728_HDR.jpg

實體樣子,非常的小,攜帶非常方便

Screen Shot 2015-12-26 at 11.38.48 AM

用 Bluetooth Pair 後的畫面

P_20151226_113947_HDR.jpg

Logitech K811 無線鍵盤

P_20151226_120243_HDR.jpg

兩個放在一起剛剛好呢。

總結

強烈建議大家買 Apple Magic Trackpad ^___^


Alpine Linux 挑戰最小 docker image OS

$
0
0

Screen Shot 2015-12-27 at 9.17.22 AM

Alpine Linux 是一套極小安全又簡單的作業系統,在現今 Docker Images 裡面,最主要推崇的就是 Ubuntu 作業系統,但是令人詬病的是 Ubuntu 還是不夠小,今天看到 Alpine 在 docker 內的大小大約是 5 MB,看到這 size 大小,相信是令人很震撼,之前要是看到這 size 大概只有 OpenWRT 編譯 BusyBox 才有可能的大小,但是 OpenWRT 最主要還是缺乏很多目前 popular 的套件,所以 Alpine 幫你解決這問題,提供大量的 Packages 讓開發者使用。底下就可以看出 Alpine 擊敗目前盛行的 docker images 大小比較圖。

Screen Shot 2015-12-27 at 9.04.43 AM

使用方式

我們來看看傳統 Ubuntu 的方式,安裝 Redis 工具

FROM ubuntu-debootstrap:14.04
RUN apt-get update -q \
  && DEBIAN_FRONTEND=noninteractive apt-get install -qy redis \
  && apt-get clean \
  && rm -rf /var/lib/apt
ENTRYPOINT ["redis-cli"]

用 Alpine 則是

FROM gliderlabs/alpine:3.3
RUN apk --update add redis
ENTRYPOINT ["redis-cli"]

後者執行的時間 (含裝系統) 總共需要 14 秒 大小為 6.535 MB 前者 Ubuntu 大小為 88.09 MB 差距還蠻大的。可能找時間把開發環境轉成 Alpine Docker 試試看,更多資料請參考:Alpine Linux Docker image. Win at minimalism!

Docker 下載 Images 遇到 Network timed out

$
0
0

Docker 最近在弄 Docker 忽然發現不管怎麼樣都不能 Pull Images 下來,會噴出底下錯誤訊息

Unable to find image ‘corbinu/docker-phpmyadmin:latest’ locally Pulling repository docker.io/corbinu/docker-phpmyadmin Network timed out while trying to connect to https://index.docker.io/v1/repositories/corbinu/docker-phpmyadmin/images. You may want to check your internet connection or if you are behind a proxy.

這也不知道是踩到 Docker 哪邊的雷,解決方式也很簡單,就是將 Docker Machine 重新開機就可以了

$ docker-machine restart default      # Restart the environment
$ eval $(docker-machine env default)  # Refresh your environment settings

另外在 Mac 環境要連 Docker 的開放 port 你必須先找到 Docker Machine 真正 IP 才可以,不要用 localhost 來連,因為根本沒有在本機端開啟這樣的 port,請用 docker-machine 指令來列出目前正在執行的 VM

$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376
$ docker-machine ip default
192.168.99.100

記錄下來免得之後又遇到,常常發現找問題搜尋到自己的部落格 XD

TJ 的新作品 frontend boilerplate 前端工具整合

$
0
0

github-logo

今天突然看到 TJ 開了一個新 Repo 是 frontend boilerplate 嚇到我了,自從 TJ 去年發表要轉向 Go 之後,就把他自己很多的 Node.js Project 轉給其他人維護,也漸漸沒在 Github 上面活動,但是今天又看到她整理了一份 frontend boilerplate,內容含了現代流行的前端開發工具,大家可以參考看看,是個不錯的 Template:

期待 TJ 能有其他新作品啊。

免費幫您申請 Letsencrypt 憑證網站

$
0
0

Letsencrypt

自從 2015/12 Letsencrypt 開放免費申請 SSL 憑證的消息,馬上有人開發出網站,讓不會使用 Letsencrypt 指令的網站管理者免費申請憑證,此網站透過開發者提過 FTP 帳號密碼或下載檔案放到 Web 根目錄就可以執行認證成功,完成後會給你 SSL Certificate,這邊有些問題,就是 Private key 也一起給你了,所以用這網站請務必小心,雖然該作者說明,網站不會存下任何憑證資料,但是你相信他嗎?Letsencrypt 討論區有一篇討論關於此網站的做法,引起很大的爭議。底下是該網站提供兩種認證方式

Screen Shot 2016-01-01 at 12.53.57 PM

如果不信任此網站,官網上面有提供超多語言的工具及 library,開發者只要有一點點 Linux 基礎,就可以申請完成,其實真的不建議透過上面網站來申請,如果是自己網站就算了,營運網站的話就不要使用了啦。

快樂學習 Linux 指令懶人包

$
0
0

github-logo

以前在推廣 Linux 的時候,大家最不喜歡 Commnad Line 介面,都是被 Windows 慣壞了,相信剛接觸 Linux 最痛苦的就是學習指令,新人學習指令遇到困難,上網發問,一定會看到有人回答說,怎麼不看 man page,但是每個指令的 man page 都非常的長,連我自己看到都直接關掉,何況是剛入門 Linux 的新人。現在 Github 上面有看到這專案 tldr,這專案把每個指令文件簡單化,讓剛學習 Linux 的新人可以快速上手,像是底下 find 指令

Screen Shot 2016-01-01 at 3.51.28 PM

官網提供各式語言的安裝方式,底下透過 Node.js 安裝方法。

$ npm install -g tldr

看了一下文件,好多人貢獻,好多小技巧可以學習,像是用 cp 指令備份並且改副檔名

$ cp README.{md,backup}

或直接改副檔名

$ cp README.md{,.backup}

在沒看到這文件之前,都是使用最傳統的方式

$ cp README.md README.backup
Viewing all 325 articles
Browse latest View live