DevOps

CentOS7 安裝 Chrome 步驟

CentOS 預設沒有支援 Chrome,需要經過額外配置的方式才能安裝

這裡提供安裝的步驟做為參考

新增 google.repo 設定

前往 /etc/yum.repos.d/ 新增 google.repo

vi  /etc/yum.repos.d/google.repo

在 google.repo 貼上以下內容

[google64]
name=Google - x86_64
baseurl=http://dl.google.com/linux/rpm/stable/x86_64
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

開始安裝

透過下方指令來安裝 google-chrome-stalbe

sudo yum install google-chrome-stable

安裝過程若有提問 可一律按 y

靜待安裝過程

檢查是否安裝完畢

透過檢查版本的方式,確定安裝完畢

google-chrome -version

點選應用程式> 網際網路 > 應該就會看到 Chrome 瀏覽器的圖示

Continue Reading

終端機操作 MySQL(MariaDB) 指令~

平時習慣透過介面方式來管理資料庫,趁著假日期間再來玩一下指令操作模式,

順道記錄一些透過終端機介面操作MySQL (or mariaDB) 的方式,便於之後再參考

(如果在windows 環境,請先將 mysql (…\mysql\bin) 加入環境變數中)

在這裡著重在操作及設定方面,不會提到太多CRUD相關操作

Continue Reading

Redis 介紹

Redis 介紹

Redis 是一個開源的 (BSD licensed) in-memory 的資料存放結構,可以被使用作為 Database,快取,訊息媒介。支援豐富的資料型態,包括: strings, hashes, lists, sets, stored sets, bitmaps, hyperloglogs 以及 geospatial indexes 儲存格式。

Redis 功能包括 replication, Lua scripting, LRU eviction, transactions,不同層級的 on-disk persistence(定時寫入硬碟,保持持久性), Redis Sentinel 的高可用性功能,以及 Redis Cluster 自動分區

你可以將上面的結構進行 atomic operations (原子操作。原子意思是不可分割的最小粒子,原子操作意思為不可中斷的一系列操作) ,例如: appending to a string incrementing the value in a hash pushing an element to a list computing set intersection, union and difference getting the member with highest ranking in a sorted set.

為了能有出色的執行效能,Redis 使用了 in-memory dataset 的方式來運作。並且能依照你習慣的方式,可以每次都將資料儲存在硬碟中,或者將每一個指令都寫入 log。如果你需要的是功能豐富、散播快且以記憶體的方式快取,就可以關掉持久性的寫入硬碟設定。

Redis 同時支援更細節的設定 主從異步複製(master-slave asynchronous replication),具有快速的非阻斷式優先同步、對於傳輸過程遺失部分片段,可採自動重新連結的方式,將網路節點中的小部分資料再重新同步。

其他還包括下列特性:

你可以從這個連結查看有哪些程式語言能使用 Redis Clients

Continue Reading

如何升級 XAMPP 到最新版本

目前主流的框架都會建議使用 PHP7 以上的環境

這時如果XAMPP的PHP版本過舊,就要考慮升級

可以參考下方的升級程序:

Continue Reading

在 Windows 架設 nginx + php

安裝 nginx

前往 nginx 官網,下載nginx/windows 的檔案

這裡下載的版本是 Stable version - nginx/Windows-1.12.2

在 C 槽新增一個 nginx_php/ 資料夾

將下載的nginx 壓縮檔解壓縮後放入

Continue Reading

SQL Joins

A LEFT JOIN B: 左外聯結,取得兩個資料表中,與A有關的資料。 A RIGHT JOIN B: 右外聯結,取得兩個表單中,與B有關的資料。 A INNER JOIN B: 將兩者匹配的資料取出來,即取得AB交集。 A OUTER JOIN B: 將兩者匹配及沒匹配的資料都取出來,即取得AB聯集。

Continue Reading

MySQL - Text 和 Blob 特性探討

簡介

MySQL 儲存格式中,常用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 Reading

如何調整 MySQL 上傳資料庫檔案大小限制 [紀錄]

php 預設都會有檔案上傳大小、傳輸時間等等限制

雖然一般資料庫都是由DBA負責維運,但有時在維護特殊的專案時,

也可能需要用到匯入測試,進而需要調整一些設定,

所以直接把常用的參數記錄起來,也可方便於日後查詢

Continue Reading

自動化測試工具介紹

主流測試框架介紹

本篇主要參考 Essential Skills for Landing a Test Automation Job in 2018 內容整理而成。

Test Automation Engineers (測試自動化工程師) 在業界的需求有不斷持續的增加的趨勢,從去年 34% 已成長到 40%

Continue Reading

MySQL - 浮點數與定點數

一般對於數字應用上,多數還是以整數為主

實際應用時,通常會先考量數字長度,並且通常都不會有問題

但是遇到與金融交易時,常常會牽涉到小數點的問題,也就是這裡要談的議題 - 定點數與浮點數

浮點數

具有小數點,插入的資料若小數點超過預設長度,則會實施四捨五入 在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)

Continue Reading

MySQL - 檢視表 (View)

檢視表是一個虛擬的資料表,從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

GraphCool 介紹

安裝 GraphQL Server 教學

這裡會紀錄 GraphQL 也稱 GraphCool 的操作

安裝

首先,用管理員權限開啟 cmd,安裝graphcool

安裝 graphcool

npm install -g graphcool

初始化graphcool專案

接著,前往專案資料夾,建立 local 端的graphcool管理初始化

graphcool init

Deploy

安裝完畢後,會看到選項 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

MySQL - InnoDB 簡介

MySQL 5.0 之後的版本支援的儲存引擎包括 MyISAM, InnoDB, MEMORY, CSV …等

其中 InnoDB 屬於交易安全表(支持交易,行級鎖定,外鍵和表加密)

MyISAM、MEMORY、CSV則屬於非交易安全表。

將目前支援的儲存引擎列出來,就能看到個引擎的支援狀況:

> SHOW ENGINES \G
...
*************************** 2. row ***************************
      Engine: InnoDB
     Support: DEFAULT
     Comment: Percona-XtraDB, Supports transactions, row-level locking, foreign keys and encryption for tables
Transactions: YES
          XA: YES
  Savepoints: YES
*************************** 3. row ***************************
      Engine: MEMORY
     Support: YES
     Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 4. row ***************************
      Engine: MyISAM
     Support: YES
     Comment: MyISAM storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
...
8 rows in set (0.00 sec)

在 MySQL 5.5 之前,預設的儲存引擎是 MyISAM

Continue Reading

MySQL - ENUM 與SET 類型比較

ENUM 列舉陣列 與 SET 集合 非常類似

底下分別說明兩者類型,以及舉例說明:

ENUM

ENUM 最多可預設 65535 個成員

1-255個成員 (佔1位元) 255-65535個成員 (佔2位元)

存取資料時,只允許從預設的成員之中,挑選其中單一值

也可以用數字代表,1就代表第一個成員..以此類推

範例:

> CREATE TABLE enum_demo (name VARCHAR(10), gender ENUM('M','F'));

回應:
Query OK, 0 rows affected (0.05 sec)

接下來我們插入多筆資料,並且試著插入

  • 正常的ENUM值
  • 非ENUM預設的數字值
  • 非ENUM預設的英文字母
  • 插入多個值
> INSERT INTO enum_demo (name,gender) VALUES ('jenny','F'), ('joe','M'), ('way',0), ('grown',1), ('bang',2), ('rown',100), ('honer',NULL), ('tank',''), ('show','F,M');

回應:
Query OK, 9 rows affected, 4 warnings (0.00 sec)
Records: 9  Duplicates: 0  Warnings: 4

從回應來看,可以看到插入9筆資料,但有3筆警示

檢查內容如下:

> SELECT * FROM enum_demo;

回應
+-------+--------+
| name  | gender |
+-------+--------+
| jenny | F      |
| joe   | M      |
| way   |        |
| grown | M      |
| bang  | F      |
| rown  |        |
| honer | NULL   |
| tank  |        |
| show  |        |
+-------+--------+
9 rows in set (0.00 sec)

SET

SET 預設值最多可以包含 64個成員

Continue Reading

MySQL 內建功能函數 - IP 格式轉換處理與天數計算

這裡特別介紹MySQL內建的功能函數

分別說明如下:

Continue Reading

SQL 資料庫設計 - 讓產品支援多國語系的四種方式

一、單列方式 (Column Approach)

在單一列,設定多個語系欄位

優點: - 簡單 - 易於實施 - 輕鬆查詢 - 無需JOIN - 沒有重複 - 沒有重複的內容(每個記錄只有一行,只有語言列被重複) 缺點: - 很難維護 - 如果只有2-3種語言會很容易維護,但當您有很多欄或很多語言時,它變得非常龐大且不容易維護 - 很難添加新語言 - 添加新語言時,有設定多國語言的欄位都要進行新增調整(以及db用戶的特殊訪問權限) - 佔用空間 - 如果不是所有的項目都必需翻譯(例如在某些地方,只需使用默認語言),它可能會導致冗餘數據或空的db字段 - 需要建立檢視判斷 - 需要依照目前語系環境決定要撈出哪一列,還需額外判斷才能達成

CREATE TABLE app_product (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `date_created` datetime NOT NULL,
  `price` decimal(10,2) unsigned NOT NULL DEFAULT '0.00',
  `title_en` varchar(255) NOT NULL,
  `title_es` varchar(255) NOT NULL,
  `title_fr` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
);

透過很簡單的Query就能取出資料

<?php
// Retrieve titles for all languages
$sql = "SELECT * FROM `app_product` WHERE 1";
if($result = mysqli_query($link, $sql)){
    if($row = mysqli_fetch_assoc($result)){
        echo "English: ".$row["title_en"]."<br>";
        echo "Spanish: ".$row["title_es"]."<br>";
        echo "French: ".$row["title_fr"]."<br>";
    }
}

// Retrieve appropriate title according to the chosen language in the system
$sql = "SELECT `title_".$_SESSION['current_language']."` as `title`
        FROM `app_product`";
if($result = mysqli_query($link, $sql)){
    if($row = mysqli_fetch_assoc($result)){
        echo "Current Language: ".$row["title"];
    }
}
?>

二、多列方式(Multirow Approach)

方法與第一種很像,但不是透過欄位的方式來建立多國語系,而透過一個語系欄位且不同列的方式來處理 優點: - 簡單 - 易於實施 - 輕鬆查詢 - 無需JOIN 缺點: - 難以維護 - 每個語言的所有列中必須更改未翻譯的每一列。例如,改變單一產品的價格需要對所有語言重複此操作 - 很難添加新語言 - 需要針對每個產品項目進行重複插入操作(從默認的語系作為模板進行複製)

Continue Reading

Git 操作筆記

這裡簡單記錄一些常用的 git 指令

Continue Reading

windows10以及之前版本,如何開啟啟動資料夾 (開機時自動啟用軟體)

在windows系統用戶安裝的多數軟體,通常都會自動設定"開機自動啟用"功能,

但是,並不是所有軟體都會預設開啟這項功能,

如果你想手動的方式來達到 開機時自動啟用軟體

通常會直接透過windows 啟用資料夾的方式來管理,

只要將你的軟體捷徑圖示(或者啟用程式)直接拖曳複製一份到啟用資料夾

就能夠達成在開機時自動啟用這個軟體,

這裡將會說明 windows10、windows8、windows7、windows xp 的啟動資料夾在哪裡

Continue Reading

如何關閉/停用 windows 開機啟用項目

電腦隨著使用時間越來越長,安裝的軟體服務通常也會越來越多,

原本多元的軟體可以讓你更加方便的工作及管理作業,但是產生的困擾就在於,

多數軟體都會自動加入開機程序,當電腦開機後會自動執行,

當開機自動啟用的項目越來越多,

就會明顯發現電腦開機的速度越來越慢,非常不方便

因此,接著內容會說明如何開啟或關閉開機啟用軟體的方法:

Continue Reading

手動查詢網址WHOIS Domain Name 或 IP 的DNS設定 - nslookup

在很多情況,我們會需要使用手動方式查詢 domain name 或 ip 的DNS設定

例如: 一般設定好DNS之後,都需要一段時間才能完成配對,這時我們就能透nslookup確定IP是否已經對應到dns

在這裡,會針對一些平時會使用的nslookup查詢方式進行說明

後續會陸續再新增更多說明及內容

Continue Reading