Facebook Messenger Webhook 驗證時出現以下訊息:
The URL couldn't be validated. Callback verification failed with the following errors: curl_errno = 60; curl_error = SSL certificate problem: unable to get local issuer certificate; HTTP Status Code = 200; HTTP Message = Connection established
表示 CA 認證檔案在開啟Server時沒有Load進來
以NodeJS 為例,將CA LOAD進來即可 :
Pages - Menu
▼
2016年10月16日 星期日
2016年10月1日 星期六
[ Ubuntu ] 安裝 ssh 與 openssh 差別
可以從 aptitude show ssh 得到package的內容(需要安裝 aptitude )
其實就是說:apt-get install ssh 會安裝 openssh-server 與 openssh-client ,僅此而已...
其實就是說:apt-get install ssh 會安裝 openssh-server 與 openssh-client ,僅此而已...
2016年9月25日 星期日
[Laravel] config:cache 之後無法用getenv 或 env funciton存取env 問題
php artisan config:cache 之後,使用getenv會出現false 使用env 會出現 null
那是因為 config:cache會把env cache 到 config ,其實沒必要再透過env取得環境
此時只要使用config function即可取得env設定的值
比如果要取得APP_ENV ,如果沒有cache,可以藉由getenv('APP_KEY') 取得
但cache則用 comfig('app.env') 取得(app.env 代表在config資料夾中的app.php 中的 env)
其實官方在升級說明也有提到此問題,也解釋說cache後用config即可,也比較符合cache的目的
https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0
那是因為 config:cache會把env cache 到 config ,其實沒必要再透過env取得環境
此時只要使用config function即可取得env設定的值
比如果要取得APP_ENV ,如果沒有cache,可以藉由getenv('APP_KEY') 取得
但cache則用 comfig('app.env') 取得(app.env 代表在config資料夾中的app.php 中的 env)
其實官方在升級說明也有提到此問題,也解釋說cache後用config即可,也比較符合cache的目的
https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0
Caching And Env
If you are using the
config:cache command during deployment, you must make sure that you are only calling the env function from within your configuration files, and not from anywhere else in your application.
If you are calling
env from within your application, it is strongly recommended you add proper configuration values to your configuration files and call env from that location instead, allowing you to convert your env calls to config calls.2016年9月21日 星期三
[ Laravel 開發] no supported encrypter found. the cipher and / or key length are invalid. laravel 問題
表示key 不行用 (比如說Session加密需要key)
php artisan key:generate
產生新的APP_KEY
即可解決
2016年9月8日 星期四
[Audacity] 導入mp4時 出現錯誤 audacity advanced audio coding file
解決辦法:
其實就是缺少解析mp4的模組,去安裝一下即可
http://lame.buanzo.org/
到上面網址下載 ffmpeg-win-2.2.2.exe
安裝後重新開啟Audacity就可以讀入mp4了
其實就是缺少解析mp4的模組,去安裝一下即可
http://lame.buanzo.org/
到上面網址下載 ffmpeg-win-2.2.2.exe
安裝後重新開啟Audacity就可以讀入mp4了
2016年9月7日 星期三
[Laravel] 使用vueify 時的一堆問題
https://github.com/JeffreyWay/laravel-elixir-vueify
npm install 之後可能會出現很多問題
網路上很多人也一堆問題,看了下JeffreyWay的回答 ,他也說你們怎麼一堆問題我都沒有...
其實問題就在NodeJS 還有 npm 的 version ,更新一下就好了
1. 更新NodeJS (Ubuntu)
2. 更新npm
npm install npm -g
npm install 之後可能會出現很多問題
網路上很多人也一堆問題,看了下JeffreyWay的回答 ,他也說你們怎麼一堆問題我都沒有...
其實問題就在NodeJS 還有 npm 的 version ,更新一下就好了
1. 更新NodeJS (Ubuntu)
sudo npm cache clean -f
sudo npm install -g n
sudo n stable
sudo ln -sf /usr/local/n/versions/node/<VERSION>/bin/node /usr/bin/node
如果要最新的:sudo n latest
2. 更新npm
npm install npm -g
[Laravel 開發] gulp-notify: [Error in notifier] Error in plugin 'gulp-notify'
使用gulp時出線 gulp-notify: [Error in notifier] Error in plugin 'gulp-notify'
解決:
在輸入gulp 就可以成功了
(
解決:
sudo apt-get update
sudo apt-get install libnotify-bin
在輸入gulp 就可以成功了
(
- Node v5.1.0
- NPM v3.3.12
2016年9月5日 星期一
[程式開發] 更改 phpmyadmin config 限定 IP
1. cd /etc/phpmyadmin/apache.conf
2. 在裡面加入(127.0.0.1 替換成自己想要的路徑)
<Directory /usr/share/phpmyadmin>
Option FollowSymLinks
DirectoryIndex index.php
Order Allow,Deny
Allow from 127.0.0.1...
3. 重開 Apache
sudo /etc/init.d/apache2 restart
2016年7月11日 星期一
[程式開發] Laravel Redirecting With Flashed Session Data 但 session data 無法顯示
正常來說 你想要 Redirecting With Flashed Session Data 但是 卻無法顯示
問題所在: routes.php 的 middleware : web
這裡有解釋說web已經預設當做是middleware了 但是你在routes.php 又做了一次
此時可以 輸入
$ php artisan routes
此時會發現所有Middleware都有兩個web 這就是問題,此時只要將Middleware的web移除掉即可,Session data就會正常運作了!!!
2016年7月9日 星期六
[程式開發] Laravel 寄信服務 使用 Gmail 設定
想要在Laravel中使用寄信服務 也就是網站能寄信給使用者 , 這邊可以使用gmail 帳號 當做官方Email
1. 首先Gmail 帳號必需要開起雙重驗正 https://www.google.com/landing/2step/
2. 之後到我的帳戶去新增應用程式的密碼 也就是幫網站產生一組密碼
https://myaccount.google.com/u/3/security
https://security.google.com/settings/u/3/security/apppasswords
這邊應用程式的密碼 等一下設定的時候會用到
產生好後的畫面
如果跳過以上app password 直接將email 的密碼填入.env 會出現
Expected response code 250 but got code "535", with message "535-5.7.8 Username and Password not accepted. Learn more at 535 5.7.8 http://support.google.com/mail/bin/answer.py?answer=14257 wd7sm12843789wjc.36 - gsmtp "
3.到Laravel 專案的 .env 設定 郵件服務 這邊分兩種 看你的網站有沒有ssl
如果沒有就用以下設定 填好 email 還有 app password
如果上述沒有設定好 可能會出現
4. 設定好後 測試寄信服務並 在routes.php中新增以下程式碼 並修改from to 的email
參考資料:http://learninglaravel.net/learn-to-send-emails-using-gmail-and-sendgrid-in-laravel-5
1. 首先Gmail 帳號必需要開起雙重驗正 https://www.google.com/landing/2step/
2. 之後到我的帳戶去新增應用程式的密碼 也就是幫網站產生一組密碼
https://myaccount.google.com/u/3/security
https://security.google.com/settings/u/3/security/apppasswords
這邊應用程式的密碼 等一下設定的時候會用到
產生好後的畫面
如果跳過以上app password 直接將email 的密碼填入.env 會出現
Expected response code 250 but got code "535", with message "535-5.7.8 Username and Password not accepted. Learn more at 535 5.7.8 http://support.google.com/mail/bin/answer.py?answer=14257 wd7sm12843789wjc.36 - gsmtp "
3.到Laravel 專案的 .env 設定 郵件服務 這邊分兩種 看你的網站有沒有ssl
如果沒有就用以下設定 填好 email 還有 app password
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=<<your email address>>
MAIL_PASSWORD=<<app password>>
MAIL_ENCRYPTION=tls
有用ssl就用以下設定MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=<<your email address>>
MAIL_PASSWORD=<<app password>>
MAIL_ENCRYPTION=ssl
如果上述沒有設定好 可能會出現
Expected response code 220 but got code “”, with message “” 問題
4. 設定好後 測試寄信服務並 在routes.php中新增以下程式碼 並修改from to 的email
Route::get('sendemail', function () {
$data = array(
'name' => "Learning Laravel",
);
Mail::send('emails.welcome', $data, function ($message) {
$message->from('yourEmail@domain.com', 'Learning Laravel');
$message->to('yourEmail@domain.com')->subject('Learning Laravel test email');
});
return "Your email has been sent successfully";
});
5.並且新增以下 blade 定義郵件的內容 (Mail::send的第一個參數 /emails/welcome.blade.php )
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
</head>
<body>
<h2>Learning Laravel!</h2>
<div>
Welcome to {!! $name !!} website!
</div>
</body>
</html>
6.最後輸入網址http://yourdomainname/sendemail 出現Your email has been sent successfully 表示成功囉 此時去收信一下就會看到了!
7. 如果沒有填 from 的 那欄 系統會用config/mail.php 中的null 會出現錯誤
Cannot send message without a sender address
此時將mail.php中的from修改成
'from' => ['address' => env('MAIL_FROM', null), 'name' => env('MAIL_NAME', null)],
並到.env設定MAIL_FROM,MAIL_NAME兩個變數即可
2016年7月5日 星期二
[ 編譜 | 演奏Anima's Piano Cover ] 周杰倫Jay Chou X aMEI【不該 Shouldn't Be】鋼琴譜pdf
有想要的其他曲子? 求譜系統連結:http://goo.gl/1fDDvn
追蹤Facebook,取得最新琴譜:
Youtube訂閱網址:https://goo.gl/VNHBqt
原key PDF連結
轉貼請標明出處哦 > <
[ 編譜 | 演奏Anima's Piano Cover ] 林俊傑 JJ Lin – 不為誰而作的歌 Twilight 鋼琴譜pdf
有想要的其他曲子? 求譜系統連結:http://goo.gl/1fDDvn
追蹤Facebook,取得最新琴譜:
Youtube訂閱網址:https://goo.gl/VNHBqt
原key PDF連結
轉貼請標明出處哦 > <
[ 編譜 | 演奏Anima's Piano Cover ] Eric周興哲《你,好不好? How Have You Been?》《遺憾拼圖》片尾曲 鋼琴譜pdf
鋼琴演奏:
琴譜預覽:
![]()
有想要的其他曲子? 求譜系統連結:http://goo.gl/1fDDvn
追蹤Facebook,取得最新琴譜:
Youtube訂閱網址:https://goo.gl/VNHBqt
原key PDF連結
轉貼請標明出處哦 > <
有想要的其他曲子? 求譜系統連結:http://goo.gl/1fDDvn
追蹤Facebook,取得最新琴譜:
Youtube訂閱網址:https://goo.gl/VNHBqt
原key PDF連結
轉貼請標明出處哦 > <
[程式開發] Javascript let 與 var 差別 筆記
先來看看MDN對兩者的定義
Declares a variable, optionally initializing it to a value.
Declares a block scope local variable, optionally initializing it to a value. 差別在於 let 特別用在block scope
以下範例 清楚解釋 block scope 概念 : var可以作用在該scope以內的所有scope ,但是let 只作用在該block scope
(1) 同一個Scope不能重複 let 宣告相同變數
(2) 在最外層(Top level , Global) 不能用 let 宣告
用let的好處
(1) 每一個 instance 是分開不一樣的 不像 var 只會呈現最後數值
參考: MDN
另外補充
(1) Var 如果再最外層(Top level) 其實就是全域變數
(2) 如果沒有任何宣告就使用變數,他則會被當成全域變數 而且可以delete
(3) hoisting: 在js 裡面 所有var宣告的都會被提升到最前面先宣告初始化
比如說,原本你這樣打
varlet以下範例 清楚解釋 block scope 概念 : var可以作用在該scope以內的所有scope ,但是let 只作用在該block scope
var a = 1;
var b = 2;
if (a === 1) {
var a = 11; // the scope is global
let b = 22; // the scope is inside the if-block
console.log(a); // 11
console.log(b); // 22
}
console.log(a); // 11
console.log(b); // 2
另一個範例,可以看出var作用域變數內都會是同一個,而 let 只作用該scope 所以裡面的不一樣function varTest() {
var x = 1;
if (true) {
var x = 2; // same variable!
console.log(x); // 2
}
console.log(x); // 2
}
function letTest() {
let x = 1;
if (true) {
let x = 2; // different variable
console.log(x); // 2
}
console.log(x); // 1
}
!!!有些 let 需要注意的事情(1) 同一個Scope不能重複 let 宣告相同變數
if (x) {
let foo;
let foo; // SyntaxError thrown.
}
下面也是相同狀況switch (x) {
case 0:
let foo;
break;
case 1:
let foo; // SyntaxError for redeclaration.
break;
}
(2) 在最外層(Top level , Global) 不能用 let 宣告
var x = 'global'; let y = 'global'; console.log(this.x); //"global"console.log(this.y); //undefined
用let的好處
(1) 每一個 instance 是分開不一樣的 不像 var 只會呈現最後數值
var list = document.getElementById("list");
for (let i = 1; i <= 5; i++) {
let item = document.createElement("li");
item.appendChild(document.createTextNode("Item " + i));
item.onclick = function (ev) {
console.log("Item " + i + " is clicked.");
};
list.appendChild(item);
}
如果用var是不行的,結果會是 var 都是 6參考: MDN
另外補充
(1) Var 如果再最外層(Top level) 其實就是全域變數
(2) 如果沒有任何宣告就使用變數,他則會被當成全域變數 而且可以delete
x = 42;
var y = 43;
myobj = new Number();
myobj.h = 4; // create property h
delete x; // returns true (can delete if declared implicitly)
delete y; // returns false (cannot delete if declared with var)
delete Math.PI; // returns false (cannot delete predefined properties)
delete myobj.h; // returns true (can delete user-defined properties)
delete myobj; // returns true (can delete if declared implicitly)
(3) hoisting: 在js 裡面 所有var宣告的都會被提升到最前面先宣告初始化
比如說,原本你這樣打
/**
* Example 1
*/
console.log(x === undefined); // true
var x = 3;
/**
* Example 2
*/
// will return a value of undefined
var myvar = "my value";
(function() {
console.log(myvar); // undefined
var myvar = "local value";
})();
則他在執行時會這樣做:/**
* Example 1
*/
var x;
console.log(x === undefined); // true
x = 3;
/**
* Example 2
*/
var myvar = "my value";
(function() {
var myvar;
console.log(myvar); // undefined
myvar = "local value";
})();
而 let 則是沒有這個特性 所以他會直接是錯的console.log(x); // ReferenceError
let x = 3;
另外function 宣告也有這個特性 (function 附值則沒有)/* Function declaration */
foo(); // "bar"
function foo() {
console.log("bar");
}
/* Function expression */
baz(); // ReferenceError: baz is not a function(it's undefined!!!)
var baz = function() {
console.log("bar2");
};
function 若是沒有return值 typeof 會是undefined 若有 typeof 則看return 是什麼型態。




