在 Windows 架設 nginx + php
安裝 nginx
前往 nginx 官網,下載nginx/windows 的檔案
這裡下載的版本是 Stable version - nginx/Windows-1.12.2
在 C 槽新增一個 nginx_php/ 資料夾
將下載的nginx 壓縮檔解壓縮後放入
Continue ReadingMarketing, SEO, Web trends, Programming tutorial, Web design, and Life event...
前往 nginx 官網,下載nginx/windows 的檔案
這裡下載的版本是 Stable version - nginx/Windows-1.12.2
在 C 槽新增一個 nginx_php/ 資料夾
將下載的nginx 壓縮檔解壓縮後放入
Continue Reading
(更新日期: 2018/5/13)
當我們Google Adsense 達到100美金門檻之後,系統就會在指定時間自動付款,
在台灣,選擇西聯付款有相當多的優點,其中包括以下幾點:
可以在西聯官網查詢到,台灣地區支援付款的銀行機構及位置
根據最新資料顯示,目前台灣地區提供西聯服務的銀行主要有以下兩(三)幾家:
Continue ReadingA LEFT JOIN B: 左外聯結,取得兩個資料表中,與A有關的資料。 A RIGHT JOIN B: 右外聯結,取得兩個表單中,與B有關的資料。 A INNER JOIN B: 將兩者匹配的資料取出來,即取得AB交集。 A OUTER JOIN B: 將兩者匹配及沒匹配的資料都取出來,即取得AB聯集。
Continue ReadingMySQL 儲存格式中,常用TEXT或BLOB來儲存長字串
兩者之間的差異主要為: TEXT 只能儲存字元資料,BLOB 可以保存二進位資料(圖片..)
通常,根據內文預期的長度來挑選適當的類型
Type | Bytes | English words | Multi-byte words
———–+—————+—————+—————– TINYTEXT or TINYBLOB | 255 | ±44 | ±23 TEXT or BLOB | 65,535 | ±11,000 | ±5,900 MEDIUMTEXT or MEDIUMBLOB | 16,777,215 | ±2,800,000 | ±1,500,000 LONGTEXT or LONGBLOB | 4,294,967,295 | ±740,000,000 | ±380,000,000
兩者在刪除之後,仍會占用空間,長期或大量執行刪除動作時,會產生大量空洞空間,引起性能問題。
透過 OPTIMIZE TABLE 將資料表進行磁碟重組,將空洞空間釋放出來,改善效能。
>OPTIMIZE TABLE 資料表名稱
對於 TEXT 與 BLOB 內容進行搜尋,效能較差
Continue ReadingFlexbox 彈性盒子,讓CSS區塊布局能更容易更具有彈性, 目前主流瀏覽器都已經有良好的支援,雖然許多功能仍在草案階段,但該項目已受到廣泛支持,在未來勢必成為主流標準之一。
Flex 排版能更優雅的處理不同螢幕尺寸及設備布局,接下來將直接進入他的功能介紹,逐步來了解這裏面的特性及用法
在討論功能之前,先要了解 flex主要框架設計理念,
通常,會在最外圍設定一個主要的 flex,在他內部可以包含0到多個區塊。
在外層的這個主要的 flex,就可以用一些參數來控制內部的區塊排版,包括排列方向、總體尺寸等等…
因此,先將要設定的主要區塊調設定為 flexbox 例如,這裡用display:flex 來設定一個 div 為 flexbox
div{
/* flexbox setup */
display: flex;
}
flex 可以用來設定同一個主元素底下,內部元素的長度分配。
flex 包括了 flex-grow, flex-shrink, flex-basic 這三種屬性
這裡則是型態、範圍及預設
可以直接設定為 flex: auto; flex: initial; flex: none; 其中,設定為none就相對於 0 0 auto;
Continue Reading在 Laravel 執行測試,主要會以 phpunit.xml 設定檔案來定義環境變數。
預設的內容為
<php>
<server name="APP_ENV" value="testing"/>
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="CACHE_DRIVER" value="array"/>
<server name="MAIL_DRIVER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="array"/>
</php>
預設的 session 及 cache 都是以 Array driver 方式處理,表示在測試過程不會真的產生 session 或 cache 資料。
其中, APP_ENV 預設為 testing
直接複製 .env 命名為 .env.testing ,並且將 .env.testing 的 APP_ENV 設定為 testing
在執行 phpunit 時, .env.testing 會覆寫掉 .env 的設定值
此外,針對一些需要透過 migration 等相關 artisan指令操作,可以透過 –env=testing 來讀取.evn.testing 檔案
例如:
php artisan migrate --env=testing
//or
php artisan migrate:refresh --env=testing
一般網頁設計中,我們會使用到 console.log 在 Chrome Developer Tools輸出一些字串, 並且可以在右邊看到這個console.log的位置
如果想隱藏 log 的來源行數 讓其他用戶在 Chrome Developer Tools 無法得知程式的位置,該怎麼做呢?
Continue ReadingSet 是一個ES6新的資料結構
像是陣列一樣,可以用來存取值
Set會自動處理掉重複值,並且Set沒有Key,輸出時只會有value (key value都會相同)
只要用 new Set() 將陣列帶入,就可以進行 set 來格式化。
可以透過定義一個陣列,及搭配Spread Operator 來取得Set 結構值 […MySet]
Set 有一些方法可以使用 添加值、刪除值、清空值、判斷值是否存在、回傳內容長度
我們可以用 Set 來對多筆資料(array)來進行集合
集合包括 聯集 new Set([…mySet, …mySet2]) 取得整體數據
交集 new Set([…mySet].filter(v => mySet2.has(v))) 取得共同數據
A減B差集 new Set([…mySet].filter(v => !mySet2.has(v))) 取得A扣除B關聯的部分
Continue ReadingSpread Operator(展開運算符) 與 Rest Operator (其餘運算符)
這兩種特性原則上及寫法都一樣,
但特徵不同,所以使用情境不同
把一個陣列展開(expand)成個別值 (這裡陣列也可以用其他iterable的物件,包括: String、Array、Map、Set..等)
收集其餘的值,轉變成一個陣列
定義函式時,在傳入參數欄位使用一個 Rest Operator, 就能一次取得多個 a,b,c,d,e 傳入值,並轉為陣列格式來使用
Continue ReadingPromise 已經被ES6及新的瀏覽器支援,是一個強大的異步執行流程語法結構
Promise 可以讓我們確保某件事情做完之後,才進行後續動作
本質上都是使用callback(回呼函式),並且都是async(異步執行)
當我們實際執行一個 promise,他會先將狀態切換為 pending(等待中),並且依照 resolve 或reject 來返回結果
我們可以透過 Promise 來進行 then..catch 連續的連鎖流程處理
promise.all 可以用陣列的方式一次帶入多個promise,
執行到最後會再回傳一個 Promise 物件
有幾點特色:
promise.race 同樣可用陣列的方式一次帶入多個promise,
只要有任何一個值完成,無論是resolve, reject 還是錯誤,都會返回結果
如果傳入的 promise 同時完成,只會返回排陣列在第一位置的 promise 值
Continue ReadingES6 Arrows Function 和 Normal Function 差別
Arrow Function 主要有以下優勢:
在使用內部函式時,內部函式有自己的this,通常會指向最外部 windows 物件,
因此,通常要先用變數指定this,傳到內部函式使用,
而 Arrow function 則不必再透過變數就能直接使用外部函式的this作為自己的this
在物件裡的屬性,必須使用function,而不能使用 Arrows function
箭頭函式不能當作generators使用,使用yield會產生錯誤。
Continue Reading當我們宣告且呼叫一個函式時,函式本身會形成一個 scope,scope 裡面會包含 Closure
Closure 原則就是,是一個可以用 by Reference 的方式紀錄函式建立時的環境,包括了:
Closure 內部所建立的變數,限定於內部使用,
在Closure 裡也可以存取到 Scope chain 中的所有變數,
Continue ReadingJavascript 最難理解的源頭,始於 function
https://pjchender.blogspot.tw/2016/03/javascriptfunctionobjects.html First Class Functions(一級函式)的概念,是指其他類型(Objects, String, Boolean, Numbers)做的事, Function都能做,包括將Function指定成一個變數等等 (assign them to variables, pass them around, create them on the fly)。
function只是一種特殊的物件,它可以被當作物件來使用
所有函式都是物件中的"方法"
function 本身有幾個scope(作用域):
php 預設都會有檔案上傳大小、傳輸時間等等限制
雖然一般資料庫都是由DBA負責維運,但有時在維護特殊的專案時,
也可能需要用到匯入測試,進而需要調整一些設定,
所以直接把常用的參數記錄起來,也可方便於日後查詢
Continue Reading本篇主要參考 Essential Skills for Landing a Test Automation Job in 2018 內容整理而成。
Test Automation Engineers (測試自動化工程師) 在業界的需求有不斷持續的增加的趨勢,從去年 34% 已成長到 40%
強大的編輯器,可以讓工程師更快更有效率的開發,目前介紹的VSCode 是目前公認最強大的編輯器之一,並且擁有相當廣泛的擴充套件及功能,這裡將陸續整理相關套件。
未來,將預計陸續依照各種開發類型推薦套件組合。
首先,前往官網下載 VSCode 安裝檔
安裝完畢後,就能直接從左邊功能選項開啟套件擴充選單
只要輸入下方關鍵字就能找到相關套件
這裡列出的是自己安裝的列表 Auto Close Tag Auto Rename Tag AutoFileName Beautify Bootstrap 3 Snippets cdnjs Chinese Translation Debugger for Chrome Font-awesome codes for css Font-awesome codes for html Git History (git log) HTML Bolierplate HTML Snippets Node Debug 2 Open Folder Context Menus for VS Code Open folder in new instance PHP Debug PHP Extension pack PHP InstalliSense PHP-Autocomplete Preview on Web Server React Native Tools SCSS IntelliSense Vetur
Continue Reading一般對於數字應用上,多數還是以整數為主
實際應用時,通常會先考量數字長度,並且通常都不會有問題
但是遇到與金融交易時,常常會牽涉到小數點的問題,也就是這裡要談的議題 - 定點數與浮點數
浮點數
具有小數點,插入的資料若小數點超過預設長度,則會實施四捨五入 在MySQL中,float, double( or real) 都可以用來儲存浮點數
在使用時,可能會有誤差的問題
定點數
字串形式存放數值,若插入的數值長度超過預設長度,會回報錯誤 (在SQLMode 預設情況仍會四捨五入後,插入資料)
在 MySQL 中,decimal (or numberic) 都可以用來儲存定點數
對於精確度要求較高的資料,都要使用定點數來儲存
我們直接來建立一個浮點數及定點數的資料表
MariaDB [example]> CREATE TABLE float_and_decimal(flo float(10,2), deci decimal(10,2));
Query OK, 0 rows affected (0.07 sec)
接下來,插入三筆資料
MariaDB [example]>INSERT INTO float_and_decimal VALUES(0.3456, 0.3456);
MariaDB [example]>INSERT INTO float_and_decimal VALUES(0, 0);
MariaDB [example]>INSERT INTO float_and_decimal VALUES(131072.32, 131072.32);
查看結果,前兩筆資料都能符合預期,但是第三筆資料,131072.32 會因為浮點數誤差而產生差異 原因是 float 浮點數在±131072(65536×2)以內的時候,仍會保持精確,但是超出範圍就會開始有偏差 (詳細原因可以參考這裡)
MariaDB [example]> select * from float_and_decimal;
+-----------+-----------+
| flo | deci |
+-----------+-----------+
| 0.35 | 0.35 |
| 0.00 | 0.00 |
| 131072.31 | 131072.32 |
+-----------+-----------+
3 rows in set (0.00 sec)
這裡紀錄如何透過PHP來取得目前網址的相關方式
假設目前有一個網址: http(s)://www .example.com/site/contact.php?uid=123456&class=3
在 PHP 取得網址相關的方式有以下幾個:
<?php
$_SERVER['HTTP_HOST']; // www.exampe.com
$_SERVER['REQUEST_URI']; // /site/contact.php?uid=123456&class=3
$_SERVER['PHP_SELF'];// site/contact.php
$_SERVER['QUERY_STRING'];// uid=123456&class=3
檢視表是一個虛擬的資料表,從MySQL 5.0.1 版本即開始支援
在使用時,設計者可自行將多個表格進行關聯、篩選,製作成一份獨立的檢視表
使用上,具有以下優點
CREATE OR REPLACE VIEW user_view AS SELECT * FROM user;
Query OK, 0 rows affected (0.01 sec)
DROP VIEW user_view
Query OK, 0 rows affected (0.00 sec)
SELECT * FROM user_view;
+-------+------------+
| names | join_date |
+-------+------------+
| a | 2018-01-01 |
| adam | 2018-02-01 |
| adam | 2018-02-01 |
+-------+------------+
3 rows in set (0.00 sec)
檢視表對於更新資料有諸多限制, 在一般單純 SELECT 的檢視表,可執行 UPDATE 功能 但是有用到 sum, min, max,count, distinct, group by, having, union…. 等函式,都無法執行更新
在這裡還是建議,檢視表盡量僅用於檢視功能,如果需要進一步的操作,應該使用其他方式
UPDATE user_view set names='aa' WHERE names='a';
Query OK, 1 row affected (0.00 sec)
SELECT * FROM user_view;
+-------+------------+
| names | join_date |
+-------+------------+
| aa | 2018-01-01 |
| adam | 2018-02-01 |
| adam | 2018-02-01 |
+-------+------------+
3 rows in set (0.00 sec)
SHOW TABLE STATUS LIKE 'user_view' \G
*************************** 1. row ***************************
Name: user_view
Engine: NULL
Version: NULL
Row_format: NULL
Rows: NULL
Avg_row_length: NULL
Data_length: NULL
Max_data_length: NULL
Index_length: NULL
Data_free: NULL
Auto_increment: NULL
Create_time: NULL
Update_time: NULL
Check_time: NULL
Collation: NULL
Checksum: NULL
Create_options: NULL
Comment: VIEW
1 row in set (0.00 sec)
在MySQL 檢視表的定義存在一些限制,包括 FROM 之後不能有子查詢,使用 sum, min, max,count, distinct, group by, having, union…. 等函式,都無法執行更新..等
Continue Reading安裝 GraphQL Server 教學
這裡會紀錄 GraphQL 也稱 GraphCool 的操作
首先,用管理員權限開啟 cmd,安裝graphcool
npm install -g graphcool
接著,前往專案資料夾,建立 local 端的graphcool管理初始化
graphcool init
安裝完畢後,會看到選項 graphcool deploy, 將你的Graphcool server發布在線上 graphcool local up, 開始你的本地端Graphcool graphcool add-template facebook-auth, 加入facebook 驗證
我們先選擇線上發布
graphcool deploy
接著,會自動開啟瀏覽器,前往 https://console.graph.cool/graphql/schema 這時,開啟本地端的 types.graphql 會發現裡面的 schema 已經被發佈到線上
現在,新增一個 Test types.graphql
type User @model {
id: ID! @isUnique
name: String
dateOfBirth: DateTime
# Uncomment below - you can declare relations between models like this
# posts: [Post!]! @relation(name: "UserPosts")
}
type Test @model {
id: ID! @isUnique
namesss: String
dateOfBirth: DateTime
# Uncomment below - you can declare relations between models like this
# posts: [Post!]! @relation(name: "UserPosts")
}
再輸入發布指令
Continue Reading