4月 07, 2019

Pentium G5400 ASUS PRIME H310M-K R2.0

再組一台長輩機,近期固態硬碟(SSD)價格大跳水,可能再過一年容量就會逼近傳統硬碟了。
傳統硬碟 1TB 目前大約是 $1300 左右,固態硬碟價格則是 240G($1000)、480G($1700)。
  • Intel Pentium G5400 , $2150
  • 華碩 PRIME H310M-K R2.0 (裝機版四年保) , $1990
  • 金士頓 UV500 120G (TLC顆粒/五年保) , $750
  • 威剛 8G DDR4-2666 , $1250
  • 全漢 聖武士350W (全日系DC-DC/五年保) , $990
  • Fractal Design the Core 1100 , $990
Total = $8,120



同場加映...友人委託的另台電腦
  • Intel Core i3-8100 , $4300
  • 技嘉 B360M DS3H (四年保) , $2750
  • 金士頓 UV500 240G (TLC顆粒/五年保) , $1130
  • Toshiba 1TB , $1190
  • 威剛 8G DDR4-2666 , $1250
  • 全漢 聖武士350W (全日系DC-DC/五年保) , $990
  • Fractal Design the Core 1100 , $990
Total = $11,850 (CPU+板子優惠$6300)



最後總結,這次選的機殼非常好,不論質感跟空間運用都極其恰當,對於只有簡單需求的使用者「一張小板mATX + 3.5吋硬碟 + 2.5吋SSD」都能塞的下。

12月 12, 2018

Node.js on macOS

Node.js 官網的安裝檔(10.14 LTS)會新增下列資料:
  • /usr/local/bin/{node, npm, npx}
  • /usr/local/lib/node_modules
  • /usr/local/include/node
反安裝方式可參考 stackoverflow 這篇文章

9月 12, 2018

快速轉移 Fortigate 防火牆設定檔

原始設備:FortiGate FG-300C、目標設備:FortiGate FG-60D

防火牆介面「管理模式」分為兩類:

Switch Mode(單一規則管理所有連接埠)
In this mode, all ports are grouped to a single switch, represented as "internal"
Interface Mode(各連接埠規則皆獨立)
In this mode, each port is independent and is represented as port1 through port7.
在較小型號的 FortiGate 上,連接埠命名預設是 WAN/DMZ/Internal,系統預設所有的 Internal Ports 皆套用到同一組 Policy;大一點型號的 Fortigate 則將連接埠直接命名為 Port1~portN。

想把設定值硬套過來,要先改變 Port 的對映方式,例如 (Port1, WAN1)、(Port5, Internal2)




9月 07, 2018

2018 Essilor 新眼鏡


  • 2018-09-07 / $5500
  • 依視路 鑽潔®E-SPF濾藍光鏡片(A4鍍膜)

8月 21, 2018

[PL2303] 在 macOS 下連線路網路設備(USB to RS232)

PL2303 安裝驅動後,在 macOS 終端機直接用 screen 指令即可透過 RS232 連接設備:

screen /dev/tty.usbserial 9600

5月 22, 2018

使用 PHP 整合 Windows Active Directory(AD) 進行身份認證

首先安裝 PHP-LDAP 套件:
# apt-get install php-ldap

之後是示範程式碼:
<?php
  $ADserver = "xx.xx.xx.xx";
  $domain   = "example.com.tw";
  $baseDN   = "dc=example,dc=com,dc=tw";
            
  $user     = 'Jack';
  $pass     = 'Password_here';  
  
  /* Format should like Jack@example.com.tw */
  $ldapDN   = $user . '@' . $domain;
  
  $ldapConn = ldap_connect( $ADserver ) or die("Connect fail");
  
  /* IMPORTANT */
  ldap_set_option($ldapConn, LDAP_OPT_PROTOCOL_VERSION, 3);
  ldap_set_option($ldapConn, LDAP_OPT_REFERRALS, 0);

  if ($ldapConn) 
  { 
    $ldapbind = ldap_bind($ldapConn, $ldapDN, $pass);   
    if ($ldapbind) 
    {
      $filter = "(sAMAccountName=$user)";
      $result = @ldap_search($ldapConn, $baseDN, $filter);
      
      if($result == false) 
      {
        /* empty search result */
      }
      else
      {
        $row       = ldap_get_entries( $ldapConn, $result );   
        $loginName = $row[0]['displayname'][0];     // display name
        $loginID   = $row[0]['samaccountname'][0];  // AD account
      }    
    } 
    else 
    {         
      die("User,Pass do not match");
    } 
  }
  ldap_close($ldapConn);  
?>

1月 17, 2018

使用 PHP 連接 Microsoft SQL Server 資料庫

依不同的 PHP 版本而定...

PHP 5.x

上古時代想連接 SQL Server 則要透過 FreeTDS 開源套件,說明如下:
FreeTDS is a set of libraries for Unix and Linux that allows your programs to natively talk to Microsoft SQL Server and Sybase databases.
; 安裝所需套件
# apt-get install freetds-common freetds-bin unixodbc php5-sybase

其中 php5-sybase 就包括 mssql.so 函式庫,所以基本上一行指令可以搞定所有事;之後更改 FreeTDS 相關參數(TDS連線協定版本)與連線編碼(UTF8支援中文字):

設定 /etc/freetds/freetds.conf:
[global]
# TDS protocol version
tds version = 8.0
client charset = UTF-8

連線測試可用下列指令:
tsql -S DBserver -p 1433 -U dbadmin -P dbpass
1> SELECT  @@servername
2> GO
3> SELECT @@servicename
4> GO

在 PHP 程式中使用下列指令進行連線/查詢 (PHP7中捨棄):
  • mssql_connect()
  • mssql_query()
  • mssql_fetch_array()

 PHP 7.x

微軟針對這個PHP版本所開發延伸套件:Microsoft Drivers for PHP for SQL Server(專案網址)
; 在 /etc/apt/sources.list 加入 APT 套件庫
deb https://packages.microsoft.com/debian/8/prod jessie main

; 安裝套件
# apt-get install php-pear msodbcsql mssql-tools unixodbc-dev
# pecl install sqlsrv
# pecl install pdo_sqlsrv

; 掛載函式庫
extension=sqlsrv.so
extension=pdo_sqlsrv.so

在 PHP 程式中使用下列指令進行連線/查詢:
  • sqlsrv_connect()
  • sqlsrv_query()
  • sqlsrv_fetch_array()

12月 22, 2017

長輩組8.5K主機:Pentium G4400 華碩 H110M-K

傳說中的長輩機,用過固態硬碟(SSD)就回不去了,所以這次試試美光的產品!
  • Intel Pentium G4400 , $1630
  • 華碩 H110M-K (裝機版四年保) , $1890
  • 美光 BX300 120G (MLC顆粒/三年保) , $1550
  • 美光 4G DDR4-2400 , $1250
  • 全漢 聖武士350W (全日系DC-DC/五年保) , $990
  • 酷碼 RC-343 , $1350
Total = $8,500

[重要]
Skylake 晶片組(H110/B150等)起,由於 USB 控制器從 EHCI 改為新一代 xHCI 之故, 造成 Windows 7 無法經由隨身碟安裝,若想循原有模式進行則需要一些改裝:
  1. 將 Windows 7 ISO 檔轉入隨身碟
  2. 透過技嘉 Windows USB Installation Tool 封裝「驅動程式」至隨身碟
  3. 開始系統安裝

12月 12, 2017

使用 C# 透過 Active Directory 驗證使用者

using System.DirectoryServices; 

static void Main(string[] args)
{
    string Username = "0MXXX";
    string Password = "AbXXX";
    DirectoryEntry entry = new DirectoryEntry("ADserver.domain.com.tw");
    entry.Path = "LDAP://DC=domain,DC=com,DC=tw";
    DirectorySearcher search = new DirectorySearcher(entry);

    /* Must using 'SAMAccountName' here */
    search.Filter = "(&(SAMAccountName=" + Username + "))";

    SearchResult result = search.FindOne();    
    string DisplayName = (String)result.Properties["displayname"][0];
    System.Console.WriteLine(DisplayName);
}
記得透過 DirectorySearcher.Filter 指定搜尋 SAMAccountName 鍵值;回傳的結果陣列中 displayname 則是使用者登入 AD 後顯示名稱。

10月 16, 2017

新增 Windows 系統服務(Service)

建立 Windows 系統服務的方法:

1. 使用內建 sc 指令
sc.exe create <service_name> binPath= "<path_for_service_executable>"
說明:binPath= 後面要空一格,並且使用雙引號把路徑包起來。
2. 使用工具軟體 NSSM 新增服務,這個好像蠻多人推薦的。

9月 01, 2017

MacBookPro 2017(256G SSD, 8G RAM)

先貼一下規格,再談購買流程(教育優惠)。這次從 Apple Store 網站上訂的是「沒有」Touch Bar 版本的 Macbook Pro,如果以過去使用 Windows 筆記型電腦的角度來看,蘋果產品的定價當然只有一個字貴,但有鑑於每個用過 Mac 的人都說多好多神。
  • Intel Core i5 Kaby Lake 2.3 GHz 雙核心 (7360U)
  • 8GB 2133MHz LPDDR3
  • 256GB SSD 儲存裝置
  • 美式鍵盤
  • Intel Iris Plus Graphics 640
目前 MacBook Pro 屬第四代產品於2016年10月發表,主推 Touch Bar 功能,上一代是主打 Retina 顯示器。於2017年6月進行小改版,將處理器由第六代(Skylake)升級為第七代(Kaby Lake),變更幅度不大,外觀仍維持原有設計。

今年 Apple 在臺灣有不少變革,除了開設第一家直營店,還在網路商店增加了美式鍵盤的配置選項,對於獨鐘簡潔鍵盤的使用者,再也不用跑個老遠出國扛電腦或找人代購。九月正好搭上 Back to School(BTS)教育優惠專案,買電腦就送一副 Beats Solo3 Wireless 耳機,這件事又推了敗家之路一把😂,專案適用的身份之一是這樣:
如果您是教職員工,請提供下列任一文件的掃描檔
  • 教職員識別證(正面、背面)
  • 聘書
  • 推薦函
所以在校的行政人員也能享有優惠, 下訂前問了網路客服兩次有關識別證與付款者認定問題「若識別證持有人為A、付款人為B,可否?」答覆皆不同:
  • 客服1:識別證持有人A,付款人或收貨人其中一者為A即可
  • 客服2:識別證持有人、付款者需為同一人才算符合
感覺得出來審核規則保有部份彈性,因此決定先試客服1提供的資訊,反正資格不符會退刷費用。


然後覺得有點貴不想買的 AppleCare 保固,最後還是掏錢了:

8月 15, 2017

九州之旅-2017夏

九州比想像中再鄉下一些,原本景點規劃時選了幾個區域:由布院、長崎、熊本以及博多市區,共計五天四夜,正好每個地方分配一天時間。交通工具主要是:JR火車、新幹線與路面公車。

只可惜人算不如天算,七月6日JR久大線行經的「花月川」橋梁因大雨沖毀,由布院之森隨即宣布停開。這是從博多市區前往由布院最便捷的方式,斷橋修復至少半年以上,因此只能尋求替代方案:高速巴士,搭起來就像台灣的客運。

整趟旅途共用到交通票券有: 飛機票、JR PASS三日券(旅行社代買)、高速巴士(信用卡網路訂票)、公車一日券與悠遊卡(ICOCA),算是種類最多元的一次。

Day1 - 去程
  • 住宿:博多市區
  • JR PASS 北九州三日卷:JR綠色窗口換票/劃位
  • 天下的燒鳥(信秀本店,中文菜單)
Day2 - 由布院
  • 交通工具:高速巴士
  • 博多巴士總站(Hakata Bus Terminal)搭乘,乘車卷去回各一張上車收走
  • 景點:金麟湖、YUFUIN FLORAL VILLAGE(人工造景)
  • 飲食: B-Speak 瑞士捲、金賞可樂餅
Day3 - 長崎
  • 交通工具:JR特急
  • 哥拉巴園(Glover Garden)、大浦天主堂(門票貴不值得)、眼鏡橋、稻佐山纜車夜景
  • 飲食:角煮(日本版刈包)、福砂屋蜂蜜蛋糕
Day4 - 熊本
  •  交通工具:新幹線
  • 博多搭乘新幹線,車程約50分鐘即可到達,班次很多
  • 景點:熊本城(長期整修封閉)、櫻之馬場(紀念品商圈)、COCOSA SHIMOTORI(百貨好逛)、上通町(商店街)、熊本縣美術館、水前寺成趣園
Day5 - 返程
  • 市區景點:太宰府天滿宮、博多運河城(百貨公司)
  • 飲食:たんやHAKATA牛舌定食(博多站地下街)、茅乃舍高湯包

8月 03, 2017

Laravel course #1

Route::get('/', function(){
  $name = 'Jack';
  $age  = 30;
  //return view('welcome')->with('name', 'Jack'); 傳入變數
  //return view('welcome', ['name' => 'Jack']); 傳入陣列
  return view('welcome', compact('name','age'));
});

compact內接的變數要用引號,並且沒有$字號

常用 DB Migrate 指令
$ php artisan make:migration create_tasks_table ;建立 migration 檔案

$ php artisan migrate          依照 migration 檔案進行 DB 架構異動
$ php artisan migrate:install  Create the migration repository            
$ php artisan migrate:refresh  Reset and re-run all migrations            
$ php artisan migrate:reset    Rollback all database migrations           
$ php artisan migrate:rollback Rollback the last database migration       
$ php artisan migrate:status   Show the status of each migration          
建立 Model 存取資料庫
$ php artisan make:model Task

產生檔案 app/Task.php 繼承 Model 類別、命名空間為 App 如下:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Task extends Model
{
    ...
}

呼叫語法範例
App\Task::all();  回傳所有資料
App\Task::pluck('body');  回傳所有資料的 body 欄位

建立 Model 時,順便連 Migration檔、Controller 檔都一起建立
$ php artisan make:model Task -m -c

建立三個檔案:app\Task.php 與 
\database\migrations\2017_08_08_060314_create_tasks_table.php 與
\app\Http\Controllers\TasksController.php
Blade 模板使用方式

  1. 骨架(layout)部份 include "nav-bar" 與 "footer" 檔案進來,中間挖個洞用 yield 宣告 "content" 讓其他檔案填充這塊。
  2. 主頁(index)部份 extends 使用 layout 這個骨架,並用 section 宣告 "content" 範圍區間

整合後的 index.blade.php 全貌

有關 Laravel 命名規則
  1. Model:必定使用單數(如Post),系統預設複數型為Table使用(如Posts)
  2. Table:複數,遵循 Model 規則
  3. Controller:複數,如 PostsController
  4. Migration:動詞+表格名,如 create_posts_table;系統產生類別 CreatePostsTable

11月 02, 2016

Lighttpd 網頁伺服器 SSL 憑證申請(Let's Encrypt)

1. 加入 Debian 8 "Jessie" Backports 套件庫

# vim /etc/apt/sources.list
deb http://httpredir.debian.org/debian jessie-backports main contrib non-free

2. 安裝 letsencrypt 套件

# apt-get install letsencrypt -t jessie-backports

3. 申請 SSL 憑證

# letsencrypt certonly --webroot -w /var/www/html -d mydomain.com

4. 混合 privkey.pem 與 cert.pem 成為 ssl.pem

cd /etc/letsencrypt/live/mydomain.com/
cat privkey.pem cert.pem > ssl.pem

(註)產生的 PEM 檔存在 /etc/letsencrypt/live/mydomain.com/ 下面

5. 啟用 lighttpd SSL 功能

# vim /etc/lighttpd/conf-enabled/10-ssl.conf
$SERVER["socket"] == ":443" {
  ssl.engine = "enable"
  ssl.pemfile = "/etc/letsencrypt/live/domain.com/ssl.pem"
  ssl.ca-file =  "/etc/letsencrypt/live/domain.com/fullchain.pem"
  ssl.cipher-list = "EECDH+AESGCM:EDH+AESGCM:AES128+EECDH:AES128+EDH"
  
  ssl.honor-cipher-order = "enable"  
  ssl.use-sslv2 = "disable"
  ssl.use-sslv3 = "disable"  
  
  # Using command "openssl dhparam -out dhparam.pem 4096" 
  # to generate a prime for Diffie-Hellman key exchange.
  ssl.dh-file = "/etc/ssl/certs/dhparam.pem"
  ssl.ec-curve = "secp384r1"  
}

6. 重新續約憑證

由於 Let's Encrypt 發出的憑證僅有 90 天效期,需定期更新以維持憑證效力。
# letsencrypt renew
# cat privkey.pem cert.pem > ssl.pem (路徑 /etc/letsencrypt/live/mydomain.com/)
# /etc/init.d/lighttpd force-reload

7. 線上SSL檢測工具