異常嘅文章瀏覽量


喺資料庫入面,我有加入到一欄係用黎記錄返每篇文章嘅點擊率或者瀏覽量。今日我重設咗呢嚿嘢返去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...不過可以遲下先再搞。希望跟住落黎呢個問題可以正式解決。

Laravel中如何解除Auto-incremented Integer Primary Key?


本來應該係過幾日先寫,但係更新緊個table發現咗呢個問題,立即過黎寫低先...

喺Laravel裡面,migrations係用黎做類似database版嘅version control,你可以用諸如php artisan migrate或者php artisan migrate:rollback去更新或者還原database入面嘅table structure。由於呢幾日喺度搞緊User Management嗰邊嘅table,所以就喺rollback嗰陣遇上咗問題。

問題code:
/**
 * Run the migrations.
 *
 * @return void
 */

public function up()
{
    Schema::table('dummy' function(Blueprint $table) {
        $table->increments('id')->first();
    });
}

/**
 * Reverse the migrations.
 * 
 * @return void
 */

public function down()
{
    Schema::table('dummy', function(Blueprint $table) {
        $table->dropPrimary(['id']);
        $table->dropColumn('id');
    });
}

喺更新嘅位我加咗一個會Auto-increment嘅id欄位並作為primary key存在,而當我要還原嘅時候應該係要首先將id嘅primary key屬性移除先再去將成個欄位刪走。不過好不幸地,當我rollback嗰陣出現咗以下嘅錯誤:

SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key

於是就諗起我要首先將個auto-increment特性移除咗先,但係Laravel嘅說明文檔無一個modifier係有呢個功能。結果喺上網搵完resource後發現原來我可以咁樣...

public function down()
{
    Schema::table('dummy', function(Blueprint $table) {
        $table->integer('id')->unsigned()->change();
        $table->dropPrimary(['id']);
        $table->dropColumn('id');
    });
}

利用change()嘅method將id欄位嘅unsign特性移走,咁就會順手無咗auto-increment嘅效果。之後就可以成功rollback啦。

圖片無法被Laravel Mix進行編彙?


話說近日我就喺度整緊後台既新介面,將個人資料更新個位寫好之後就擺咗上黎先。又更新Laravel 5.6,又轉Bootstrap 4,SweetAlert2又上左7,然後database有啲欄位又更新咗。喺開發嗰陣搞完一大輪再試無問題,就諗住擺上黎production應該就無問題啦,點知就出咗事......

事緣係因為更新咗堆SASS檔既關係,我就要行Laravel Mix黎compile做CSS啦,點知喺local同dev行咗幾次都無問題,上到production居然炒咗,所以尋日就應該會見到成個版面亂晒,又或者無咗背景張雲圖(手機版睇唔到好正常)。

咁到底衰咗啲乜?我試過鏟晒node_modules成個folder再行npm install,發現mozjpeg呢個package無辦法安裝,但我喺Windows又裝到喎。原來係因為Ubuntu個server無裝到一堆package......


如是者,裝返相關既嘢之後又用得返啦。明明之前都好地地無問題......

總而言之今次係想話俾大家聽終於都更新咗啦,應該會喺黎緊慢慢再加返啲唔同既功能落去啦。

社交平台功能 - Facebook留言版篇


而家都有唔少既網誌平台會加入一啲社交網站平台既功能。本來諗住自製留言版既我心諗:既然有現成既倒不如拎左黎用先,增加開發經驗之餘又可以慳返唔少時間。

於是今次我就揀左Facebook既留言版。而家如果有入啲post度睇既話應該會見到係頁底會有留言版存在。

Node.js更新問題


話說之前唔記得左點解更新左Node.js上9.4.0版本,然後今日想係dev度compile一啲SASS既時候彈error......上網查過之後發現原來係latest current有可能唔受部份package支援導致compile error。

Node Sass does not yet support your current environment 
Laravel用既其中一個NPM package「node-sass」,後面會有括號寫住你既OS版本同埋Node.js版本

於是唯有將Node.js既版本降返落去LTS版本(目前係8.9.4)。因為手多既關係,我將自己電腦(dev)同server(prod)都更新左上去,所以兩邊都要進行降級。Windows直接刪左Node.js後安裝返LTS版就可以;Ubuntu就需要行以下既指令去進行降級。

> sudo npm install -g n
> sudo npm cache clean -f
> sudo n 8.9.4

之後我再試行一次compile,依然都係發生error。因為版本改變過既關係,node-sass需要rebuild去跟上現行版本。係呢一步Ubuntu就簡單過Windows好多......Error message會有提示叫你行以下指令。

> npm rebuild node-sass --force
無需sudo,因為只係重新安裝目前目錄上既node_module而唔係global入面個folder

跟住佢就會自動更新並且成功執行。不過Windows就無咁順攤......首先既係我本身無裝Python所以我先去左Python官網下載「Python Releases for Windows」既3.6.4版本,但係Node.js唔受Python 3,我唯有再去下載埋Python 2.7.14......之後再行rebuild個陣就彈出第二個error message。

MSBUILD : error MSB3428: 無法載入 Visual C++ 元件 "VCBuild.exe"。若要修正這個問題,請1) 安裝 .NET Framework 2.0 SDK,2) 安裝Microsoft Visual Studio 2005,或 3) 將元件位置加入至系統路徑 (如果元件安裝在別的位置)。 
Windows真係特別麻煩......

如是者我首先就上網諗住搵.NET Framework 2.0 SDK黎安裝,點知因為我用緊Windows 10既關係而令到個安裝程式無左反應......於是我又上網搵關於呢個error message既資料,終於俾我搵到解決方案。首先以「系統管理員身份」(Run as Administrator)開啟cmd或者Powershell,然後打入以下指令。

> npm install --global --production windows-build-tools

跟住佢就會安裝兩個套件,一個係BuildTools_Full.exe,另一個係python-2.7.13.msi,不過Python 2本身已經安裝左所以應該唔會有太大問題。

下載完後會自動安裝Python 2.7及Visual Studio Build Tools

然後再行多一次段一開始個段rebuild指令就成功啦。

Powered by Half-moon Production.

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

異常嘅文章瀏覽量


喺資料庫入面,我有加入到一欄係用黎記錄返每篇文章嘅點擊率或者瀏覽量。今日我重設咗呢嚿嘢返去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...不過可以遲下先再搞。希望跟住落黎呢個問題可以正式解決。

Laravel中如何解除Auto-incremented Integer Primary Key?


本來應該係過幾日先寫,但係更新緊個table發現咗呢個問題,立即過黎寫低先...

喺Laravel裡面,migrations係用黎做類似database版嘅version control,你可以用諸如php artisan migrate或者php artisan migrate:rollback去更新或者還原database入面嘅table structure。由於呢幾日喺度搞緊User Management嗰邊嘅table,所以就喺rollback嗰陣遇上咗問題。

問題code:
/**
 * Run the migrations.
 *
 * @return void
 */

public function up()
{
    Schema::table('dummy' function(Blueprint $table) {
        $table->increments('id')->first();
    });
}

/**
 * Reverse the migrations.
 * 
 * @return void
 */

public function down()
{
    Schema::table('dummy', function(Blueprint $table) {
        $table->dropPrimary(['id']);
        $table->dropColumn('id');
    });
}

喺更新嘅位我加咗一個會Auto-increment嘅id欄位並作為primary key存在,而當我要還原嘅時候應該係要首先將id嘅primary key屬性移除先再去將成個欄位刪走。不過好不幸地,當我rollback嗰陣出現咗以下嘅錯誤:

SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key

於是就諗起我要首先將個auto-increment特性移除咗先,但係Laravel嘅說明文檔無一個modifier係有呢個功能。結果喺上網搵完resource後發現原來我可以咁樣...

public function down()
{
    Schema::table('dummy', function(Blueprint $table) {
        $table->integer('id')->unsigned()->change();
        $table->dropPrimary(['id']);
        $table->dropColumn('id');
    });
}

利用change()嘅method將id欄位嘅unsign特性移走,咁就會順手無咗auto-increment嘅效果。之後就可以成功rollback啦。

圖片無法被Laravel Mix進行編彙?


話說近日我就喺度整緊後台既新介面,將個人資料更新個位寫好之後就擺咗上黎先。又更新Laravel 5.6,又轉Bootstrap 4,SweetAlert2又上左7,然後database有啲欄位又更新咗。喺開發嗰陣搞完一大輪再試無問題,就諗住擺上黎production應該就無問題啦,點知就出咗事......

事緣係因為更新咗堆SASS檔既關係,我就要行Laravel Mix黎compile做CSS啦,點知喺local同dev行咗幾次都無問題,上到production居然炒咗,所以尋日就應該會見到成個版面亂晒,又或者無咗背景張雲圖(手機版睇唔到好正常)。

咁到底衰咗啲乜?我試過鏟晒node_modules成個folder再行npm install,發現mozjpeg呢個package無辦法安裝,但我喺Windows又裝到喎。原來係因為Ubuntu個server無裝到一堆package......


如是者,裝返相關既嘢之後又用得返啦。明明之前都好地地無問題......

總而言之今次係想話俾大家聽終於都更新咗啦,應該會喺黎緊慢慢再加返啲唔同既功能落去啦。

社交平台功能 - Facebook留言版篇


而家都有唔少既網誌平台會加入一啲社交網站平台既功能。本來諗住自製留言版既我心諗:既然有現成既倒不如拎左黎用先,增加開發經驗之餘又可以慳返唔少時間。

於是今次我就揀左Facebook既留言版。而家如果有入啲post度睇既話應該會見到係頁底會有留言版存在。

Node.js更新問題


話說之前唔記得左點解更新左Node.js上9.4.0版本,然後今日想係dev度compile一啲SASS既時候彈error......上網查過之後發現原來係latest current有可能唔受部份package支援導致compile error。

Node Sass does not yet support your current environment 
Laravel用既其中一個NPM package「node-sass」,後面會有括號寫住你既OS版本同埋Node.js版本

於是唯有將Node.js既版本降返落去LTS版本(目前係8.9.4)。因為手多既關係,我將自己電腦(dev)同server(prod)都更新左上去,所以兩邊都要進行降級。Windows直接刪左Node.js後安裝返LTS版就可以;Ubuntu就需要行以下既指令去進行降級。

> sudo npm install -g n
> sudo npm cache clean -f
> sudo n 8.9.4

之後我再試行一次compile,依然都係發生error。因為版本改變過既關係,node-sass需要rebuild去跟上現行版本。係呢一步Ubuntu就簡單過Windows好多......Error message會有提示叫你行以下指令。

> npm rebuild node-sass --force
無需sudo,因為只係重新安裝目前目錄上既node_module而唔係global入面個folder

跟住佢就會自動更新並且成功執行。不過Windows就無咁順攤......首先既係我本身無裝Python所以我先去左Python官網下載「Python Releases for Windows」既3.6.4版本,但係Node.js唔受Python 3,我唯有再去下載埋Python 2.7.14......之後再行rebuild個陣就彈出第二個error message。

MSBUILD : error MSB3428: 無法載入 Visual C++ 元件 "VCBuild.exe"。若要修正這個問題,請1) 安裝 .NET Framework 2.0 SDK,2) 安裝Microsoft Visual Studio 2005,或 3) 將元件位置加入至系統路徑 (如果元件安裝在別的位置)。 
Windows真係特別麻煩......

如是者我首先就上網諗住搵.NET Framework 2.0 SDK黎安裝,點知因為我用緊Windows 10既關係而令到個安裝程式無左反應......於是我又上網搵關於呢個error message既資料,終於俾我搵到解決方案。首先以「系統管理員身份」(Run as Administrator)開啟cmd或者Powershell,然後打入以下指令。

> npm install --global --production windows-build-tools

跟住佢就會安裝兩個套件,一個係BuildTools_Full.exe,另一個係python-2.7.13.msi,不過Python 2本身已經安裝左所以應該唔會有太大問題。

下載完後會自動安裝Python 2.7及Visual Studio Build Tools

然後再行多一次段一開始個段rebuild指令就成功啦。