PHP Composer異常地慢


新手如我,喺初初用composer嘅時候成日都會覺得佢郁得好慢。composer install或者composer create-project都還好,但一用到composer update就好似成個網絡爆炸咗咁,次次都起碼等一分鐘以上;如果你整緊嘅嘢已經require咗一堆packages就更加耐啦。

[71.3MB/1500.77s] Downloading https://packagist.org/p/provider-2017-07%24adda4f38383325b5cc891e193f119392d14f6d2d7fe9ecd3636ec8be07f7f7d5.json


  [Composer\Downloader\TransportException]
  The "https://packagist.org/p/provider-2017-07%24adda4f38383325b5cc891e193f119392d14f6d2d7fe9ecd3636ec8be07f7f7d5.json" file could not be downloaded (HTTP/1.1 404 Not Found)
尋日我面對嘅狀況...當然呢個係因為composer嗰邊出咗問題所以先咁,但實際上每次更新都等咗我分幾鐘。

結果尋晚出咗問題後,我喺Laravel台灣嘅群組度發問,有人就介紹咗個package俾我。


簡單黎講就係composer嘅平衡下載/安裝用插件。如果本身無網絡問題嘅話,呢個plugin真係幫到唔少忙架。

異常嘅文章瀏覽量


喺資料庫入面,我有加入到一欄係用黎記錄返每篇文章嘅點擊率或者瀏覽量。今日我重設咗呢嚿嘢返去0,由頭數過。

點解我要咁做呢?原因係其實喺1.1版本嘅時候已經發現文章個count數異常地大。當時我以為係因為自己無將increment個數定返做1,所以就將increment()嘅第二項變數set做1。當然其實心知肚明嘅係,佢個2nd argument預設就係1,又點會無啦啦變咗其他嘢?

於是close咗issue後直到準備上1.2嘅時候,走返入去資料庫睇返發現啲數依然都係異常地大...嘛,自己都有自知之明係不人氣(?)嘅時候就自然會試吓點解啦,於是就發現即使自己將increment()嘅第二項變數set做1,佢都係會自動變成+3。上網睇吓有無解決方案,發現有可能係有啲嘢multi-request咗所以行多咗兩次。咁我就走入去access.log度睇吓。

[IP_ADDRESS] - - [26/Apr/2018:15:06:46 +0800] "GET /images/upload/20180125022347-5a68cf3363088.png HTTP/1.1" 200 745476 "https://www.littpi.net/blog/post/12" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
[IP_ADDRESS] - - [26/Apr/2018:15:06:49 +0800] "GET /blog/post/12 HTTP/1.1" 206 9800 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)"
[IP_ADDRESS] - - [26/Apr/2018:15:06:49 +0800] "GET /blog/post/12 HTTP/1.1" 206 9799 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)"

嗯?facebookexternalhit/1.1?仲有條link?咩黎架?

閣下找到本頁,可能是因為有 Facebook 用戶曾將閣下的網站連結發送給其他 Facebook 用戶。

簡單黎講就應該係Facebook要將你嘅網站內容cache出黎,等share俾其他FB用戶嗰陣就會即刻拎到啲資料咁。問題係,因為呢嚿嘢嘅關係我無厘頭地多咗兩個view數?嘛,仲未計其他唔同搜尋引擎嘅bots同crawlers,諸如TwitterBot、MJ12Bot等等...無錯,呢堆bot有助我喺搜尋引擎度更易被搜尋到,但係另一方面佢哋擾亂咗我個實際數字。

於是我就更新咗當入去篇文章嘅連結嗰陣要做嘅嘢。流程如下:
1. 檢查佢係咪bot/crawler
2. 如果係bot/crawler就唔會更新view counter
(Bold咗嘅位係新加...)

// This is used to check if it is a robot or web crawler.
// It will be kept updated since the name is different.
$robot = false;
if (empty(request()->server('HTTP_USER_AGENT')) || preg_match('/(facebookexternalhit.*)|(.*bot.*)|(.*crawl.*)/i', request()->server('HTTP_USER_AGENT')) !== 0) {
    $robot = true;
}

if ($robot === false) {
    // Do the increment job if it is not a bot or crawler.
    ...
}

其實個regexp應該要加埋spider...不過可以遲下先再搞。希望跟住落黎呢個問題可以正式解決。

Gitlab CI/CD設置


It is done... and I am done.

今次唔講Vue住,因為我呢兩日都喺度玩緊呢嚿嘢...

GitLab係一個以網頁作為基底嘅Git Repository Manager,唔識咩叫Git嘅請自行Google,真係懶嘅話...


而家成個網站我都係用自己整嘅GitLab Server黎維護,畢竟係private project而且大部份嘢自己控制到就當然最好啦。關於GitLab嘅教學可以自行上佢官方網站度參詳下。今日想講少少關於佢嘅CI/CD功能。

CI/CD嘅意思係持續整合(Continuous Integration)及持續交付(Continuous Delivery)。你寫咗一啲新嘅功能,可能喺local嘅環境下測試成功,但基於local同staging甚至production嘅環境唔同(OS、Apache/Nginx、MySQL/Oracle等)而導致有誤差,擺咗上去先發現有問題。目前我都會恃住自己網站流量低,而且無乜人睇我個網誌直接丟上production睇吓有無問題再進行修改,不過長遠黎講呢個唔係一個好嘅方法。於是我就嘗試吓用GitLab提供嘅CI/CD功能。

要做呢樣嘢首先你要有一個或以上可以行你啲代碼嘅runner。我最後選擇咗喺自己部電腦度裝VirtualBox再裝Ubuntu 16.04黎模擬返production environment,然後為咗方便起見我喺個VM度裝咗LAMP stack、Node.js同埋docker。請記住嘅係其實GitLab Runner係可以喺windows上運行,只係因為我需要docker但係Win 10 Home裝唔到所以先淪落到我而家呢個地步......

詳細嘅GitLab Runner設定教學可以去官網文件 https://docs.gitlab.com/runner/ 度睇返架。

然後就要幫project加一個叫做.gitlab-ci.yml嘅檔案。呢個檔案係用黎設定你成個CI/CD嘅流程。

.gitlab-ci.yml設定檔。

我喺個設定檔入面指定咗會加載edbizarro/gitlab-ci-pipeline-php嘅PHP 7.2 Docker image,因為佢已經包含晒所有Laravel需要用到嘅嘢,包括Composer、Node.js等。亦都係因為呢個原因我先需要整個VM出黎裝docker...

然後就大功告成啦。不過一開始整出黎嘅Jobs報告未必會出現到coverage rate,因為你仲要去GitLab嘅Project入面揀選Settings > CI / CD > General pipelines settings度將Test coverage parsing嘅regexp寫返入去。GitLab已經好貼心咁俾埋提示你架啦。

Test coverage parsing regexp.

跟住就應該會喺CI / CD > Jobs嗰度睇到你啲代碼嘅coverage rate架啦。

我知好低...得啦唔駛講。

一開始初哥設定乜都唔識就會好似我一開頭張圖咁架啦,所以唔駛驚,搞下搞下就會搞得掂架啦。 w

Vue.js學習帳 - 1. 介紹


之前應承過自己要試下整Vue嘅教學,咁就由簡介吓佢開始啦,順便鞏固我對呢款JS framework嘅認知

如果仲有後續教學嘅話請注意呢一系列嘅教學並唔包括vue-router。

Vue係由Google嘅前員工尤雨溪開發。當時佢嘅諗法係覺得Angular太過龐大而且太過缺乏編程嘅彈性,於是佢就將Angular裡面覺得實用性高嘅部份抽出黎重寫並放上Github,呢個就係Vue嘅雛型。時至今日,Vue已經去到2.x版本,喺Github嘅星數已經可以同React爭一日之長短。

對我黎講,Vue點解會咁特別嘅原因有以下幾點:
1. Data-driven。其實而家普遍嘅JS framework都係以資料作主導,而唔再好似係以前jQuery之類嘅framework咁以操作DOM黎達成目的。由於我本身都係由jQuery開始學起,所以一開始上手其實唔係咁容易轉到諗法...不過上咗手之後就發現真心好好多。
2. 輕量化。同Angular嗰種以嘗試用一個framework解決絕大部份問題唔同,Vue本身剩係保持core code以及做data-binding嘅工作,其他嘢就一律以module嘅形式去整,用嘅時候先加載。如果問我嘅話,我會覺得Vue其實同React相似。

其實我會接觸Vue主要係因為Laravel...係,又係關佢事。Laravel 5.3嘅時候(亦即係我啱啱開始學Laravel嗰陣),Laravel嘅default JS framework就係用咗Vue。本住Vue喺當時已經係如日中天(?)JS framework,我就開始學習點樣去寫......而家CMS入面有一部份都已經由jQuery轉成用Vue,仲好方便添。

如果仲有下次的話(?)我就開始寫下基本嘅coding吧?

Powered by Half-moon Production.

Copyright © 2011-2020 by 泣雨家的雜物房. Version 1.5.2.

PHP Composer異常地慢


新手如我,喺初初用composer嘅時候成日都會覺得佢郁得好慢。composer install或者composer create-project都還好,但一用到composer update就好似成個網絡爆炸咗咁,次次都起碼等一分鐘以上;如果你整緊嘅嘢已經require咗一堆packages就更加耐啦。

[71.3MB/1500.77s] Downloading https://packagist.org/p/provider-2017-07%24adda4f38383325b5cc891e193f119392d14f6d2d7fe9ecd3636ec8be07f7f7d5.json


  [Composer\Downloader\TransportException]
  The "https://packagist.org/p/provider-2017-07%24adda4f38383325b5cc891e193f119392d14f6d2d7fe9ecd3636ec8be07f7f7d5.json" file could not be downloaded (HTTP/1.1 404 Not Found)
尋日我面對嘅狀況...當然呢個係因為composer嗰邊出咗問題所以先咁,但實際上每次更新都等咗我分幾鐘。

結果尋晚出咗問題後,我喺Laravel台灣嘅群組度發問,有人就介紹咗個package俾我。


簡單黎講就係composer嘅平衡下載/安裝用插件。如果本身無網絡問題嘅話,呢個plugin真係幫到唔少忙架。

異常嘅文章瀏覽量


喺資料庫入面,我有加入到一欄係用黎記錄返每篇文章嘅點擊率或者瀏覽量。今日我重設咗呢嚿嘢返去0,由頭數過。

點解我要咁做呢?原因係其實喺1.1版本嘅時候已經發現文章個count數異常地大。當時我以為係因為自己無將increment個數定返做1,所以就將increment()嘅第二項變數set做1。當然其實心知肚明嘅係,佢個2nd argument預設就係1,又點會無啦啦變咗其他嘢?

於是close咗issue後直到準備上1.2嘅時候,走返入去資料庫睇返發現啲數依然都係異常地大...嘛,自己都有自知之明係不人氣(?)嘅時候就自然會試吓點解啦,於是就發現即使自己將increment()嘅第二項變數set做1,佢都係會自動變成+3。上網睇吓有無解決方案,發現有可能係有啲嘢multi-request咗所以行多咗兩次。咁我就走入去access.log度睇吓。

[IP_ADDRESS] - - [26/Apr/2018:15:06:46 +0800] "GET /images/upload/20180125022347-5a68cf3363088.png HTTP/1.1" 200 745476 "https://www.littpi.net/blog/post/12" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
[IP_ADDRESS] - - [26/Apr/2018:15:06:49 +0800] "GET /blog/post/12 HTTP/1.1" 206 9800 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)"
[IP_ADDRESS] - - [26/Apr/2018:15:06:49 +0800] "GET /blog/post/12 HTTP/1.1" 206 9799 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)"

嗯?facebookexternalhit/1.1?仲有條link?咩黎架?

閣下找到本頁,可能是因為有 Facebook 用戶曾將閣下的網站連結發送給其他 Facebook 用戶。

簡單黎講就應該係Facebook要將你嘅網站內容cache出黎,等share俾其他FB用戶嗰陣就會即刻拎到啲資料咁。問題係,因為呢嚿嘢嘅關係我無厘頭地多咗兩個view數?嘛,仲未計其他唔同搜尋引擎嘅bots同crawlers,諸如TwitterBot、MJ12Bot等等...無錯,呢堆bot有助我喺搜尋引擎度更易被搜尋到,但係另一方面佢哋擾亂咗我個實際數字。

於是我就更新咗當入去篇文章嘅連結嗰陣要做嘅嘢。流程如下:
1. 檢查佢係咪bot/crawler
2. 如果係bot/crawler就唔會更新view counter
(Bold咗嘅位係新加...)

// This is used to check if it is a robot or web crawler.
// It will be kept updated since the name is different.
$robot = false;
if (empty(request()->server('HTTP_USER_AGENT')) || preg_match('/(facebookexternalhit.*)|(.*bot.*)|(.*crawl.*)/i', request()->server('HTTP_USER_AGENT')) !== 0) {
    $robot = true;
}

if ($robot === false) {
    // Do the increment job if it is not a bot or crawler.
    ...
}

其實個regexp應該要加埋spider...不過可以遲下先再搞。希望跟住落黎呢個問題可以正式解決。

Gitlab CI/CD設置


It is done... and I am done.

今次唔講Vue住,因為我呢兩日都喺度玩緊呢嚿嘢...

GitLab係一個以網頁作為基底嘅Git Repository Manager,唔識咩叫Git嘅請自行Google,真係懶嘅話...


而家成個網站我都係用自己整嘅GitLab Server黎維護,畢竟係private project而且大部份嘢自己控制到就當然最好啦。關於GitLab嘅教學可以自行上佢官方網站度參詳下。今日想講少少關於佢嘅CI/CD功能。

CI/CD嘅意思係持續整合(Continuous Integration)及持續交付(Continuous Delivery)。你寫咗一啲新嘅功能,可能喺local嘅環境下測試成功,但基於local同staging甚至production嘅環境唔同(OS、Apache/Nginx、MySQL/Oracle等)而導致有誤差,擺咗上去先發現有問題。目前我都會恃住自己網站流量低,而且無乜人睇我個網誌直接丟上production睇吓有無問題再進行修改,不過長遠黎講呢個唔係一個好嘅方法。於是我就嘗試吓用GitLab提供嘅CI/CD功能。

要做呢樣嘢首先你要有一個或以上可以行你啲代碼嘅runner。我最後選擇咗喺自己部電腦度裝VirtualBox再裝Ubuntu 16.04黎模擬返production environment,然後為咗方便起見我喺個VM度裝咗LAMP stack、Node.js同埋docker。請記住嘅係其實GitLab Runner係可以喺windows上運行,只係因為我需要docker但係Win 10 Home裝唔到所以先淪落到我而家呢個地步......

詳細嘅GitLab Runner設定教學可以去官網文件 https://docs.gitlab.com/runner/ 度睇返架。

然後就要幫project加一個叫做.gitlab-ci.yml嘅檔案。呢個檔案係用黎設定你成個CI/CD嘅流程。

.gitlab-ci.yml設定檔。

我喺個設定檔入面指定咗會加載edbizarro/gitlab-ci-pipeline-php嘅PHP 7.2 Docker image,因為佢已經包含晒所有Laravel需要用到嘅嘢,包括Composer、Node.js等。亦都係因為呢個原因我先需要整個VM出黎裝docker...

然後就大功告成啦。不過一開始整出黎嘅Jobs報告未必會出現到coverage rate,因為你仲要去GitLab嘅Project入面揀選Settings > CI / CD > General pipelines settings度將Test coverage parsing嘅regexp寫返入去。GitLab已經好貼心咁俾埋提示你架啦。

Test coverage parsing regexp.

跟住就應該會喺CI / CD > Jobs嗰度睇到你啲代碼嘅coverage rate架啦。

我知好低...得啦唔駛講。

一開始初哥設定乜都唔識就會好似我一開頭張圖咁架啦,所以唔駛驚,搞下搞下就會搞得掂架啦。 w

Vue.js學習帳 - 1. 介紹


之前應承過自己要試下整Vue嘅教學,咁就由簡介吓佢開始啦,順便鞏固我對呢款JS framework嘅認知

如果仲有後續教學嘅話請注意呢一系列嘅教學並唔包括vue-router。

Vue係由Google嘅前員工尤雨溪開發。當時佢嘅諗法係覺得Angular太過龐大而且太過缺乏編程嘅彈性,於是佢就將Angular裡面覺得實用性高嘅部份抽出黎重寫並放上Github,呢個就係Vue嘅雛型。時至今日,Vue已經去到2.x版本,喺Github嘅星數已經可以同React爭一日之長短。

對我黎講,Vue點解會咁特別嘅原因有以下幾點:
1. Data-driven。其實而家普遍嘅JS framework都係以資料作主導,而唔再好似係以前jQuery之類嘅framework咁以操作DOM黎達成目的。由於我本身都係由jQuery開始學起,所以一開始上手其實唔係咁容易轉到諗法...不過上咗手之後就發現真心好好多。
2. 輕量化。同Angular嗰種以嘗試用一個framework解決絕大部份問題唔同,Vue本身剩係保持core code以及做data-binding嘅工作,其他嘢就一律以module嘅形式去整,用嘅時候先加載。如果問我嘅話,我會覺得Vue其實同React相似。

其實我會接觸Vue主要係因為Laravel...係,又係關佢事。Laravel 5.3嘅時候(亦即係我啱啱開始學Laravel嗰陣),Laravel嘅default JS framework就係用咗Vue。本住Vue喺當時已經係如日中天(?)JS framework,我就開始學習點樣去寫......而家CMS入面有一部份都已經由jQuery轉成用Vue,仲好方便添。

如果仲有下次的話(?)我就開始寫下基本嘅coding吧?