Menu

Saturday, May 26, 2018

[Ubuntu] การแตกไฟล์ zip ด้วย encoding ที่กำหนด
[Ubuntu] How to Extract ZIP File with Specific Encoding

หลังจากที่บีบอัดไฟล์ที่มีชื่อภาษาไทยเป็นไฟล์ zip บน Windows แล้วนำมาแตกไฟล์บน Ubuntu เพื่อใช้งาน จะพบว่า ชื่อไฟล์ที่เป็นอักขระภาษาไทยถูกแทนที่ด้วยอักระพิเศษที่อ่านไม่รู้เรื่อง

สาเหตุที่เป็นเช่นนั้น เนื่องจากการแตกไฟล์ปกติจะใช้ default encoding ซึ่งไม่ใช่ encoding สำหรับภาษาไทย ดังนั้นเราจึงต้องกำหนด encoding ที่จะใช้ในการแตกไฟล์ดังนี้
unzip -O <encoding> <filename> -d <target_dir>
ตัวอย่างเช่น
unzip -O windows-874 lp-real-font.zip -d ocr_in
สำหรับชื่อ encoding ที่ใช้ได้ สามารถดูได้จาก https://www.iana.org/assignments/character-sets/character-sets.xhtml

Ref: https://superuser.com/questions/872596/decompress-zip-with-given-encoding

[Laravel - Config] การบังคับให้ Laravel สร้าง URL แบบ HTTPS
[Laravel - Config] How to Force Laravel to Create URL with HTTPS

เมื่อ Laravel ถูกดีพลอยบน server ที่มีการเรียกหน้าเว็บแบบ HTTP เบื้องหลัง NGINX ที่ตั้งค่าให้เรียกหน้าเว็บแบบ HTTPS เราจึงจำเป็นต้องบังคับให้ link ที่สร้างขึ้นมาโดย Laravel เป็น HTTPS ทั้งหมด

Method ที่เกี่ยวข้องกับการสร้าง link ของ Laravel มี 2 methods ดังนี้
  • url() 
    • เป็น method สำหรับสร้าง url จาก relative path ที่ใส่เข้าไป เช่น url('/images/logo_sm.png') เป็นต้น
    • url ที่ถูกสร้างขึ้นจะเป็น HTTP หรือ HTTPS ตาม server ที่มันอยู่
    • วิธีแก้ไข คือ เพิ่ม \URL::forceScheme('https'); ใน boot ของ AppServiceProvider 
  • link() 
    • เป็น method สำหรับสร้าง render template เพื่อแสดงรายการของหน้า 
    • Method นี้เป็นของตัวแปรที่ได้มาจากการเรียกใช้ paginate() ตอน query ข้อมูลจากฐานข้อมูล
    • วิธีแก้ไข คือ ให้ทำการสั่ง setPath() ให้กับตัวแปรดังกล่าวก่อนที่จะเรียกใช้ link() เช่น $users->setPath('/users/manage'); แล้วจึงเรียกใช้ {{$users->link()}} ใน blade template เมื่อ $users เป็นตัวแปรที่ได้มาจากการเรียกใช้ paginate()

Saturday, April 7, 2018

[Laravel - Package] การสร้าง Refresh Token เองจาก jwt-auth version 1.0.0-rc.1
[Laravel - Package] How to Manually Generate Refresh Token from jwt-auth version 1.0.0-rc.1

tymon/jwt-auth เป็น library สำหรับจัดการการเข้าใช้งานแบบ token โดยเวอร์ชั่นล่าสุดในตอนนี้ คือ 1.0.0-rc.1

สำหรับ access token สามารถสร้าง, ตรวจสอบและใช้งานได้อย่างปกติ แต่สำหรับการ refresh token นั้นจะผิดแปลกไปจาก library สำหรับ JWT ทั่วไป

โดยทั่วไปแล้ว หลังจากที่เรา refresh token ไปแล้ว เราจะได้ access token ใหม่ที่เริ่มนับเวลาหมดอายุรวมถึงเวลาที่สามารถทำการ refresh ใหม่ด้วย เพื่อใช้ token นั้นในระบบต่อไป โดยที่ระบบจะบังคับให้เรา login ใหม่ก็ต่อเมื่อเราไม่ได้ใช้งานระบบเป็นเวลานานจน access token หมดอายุและเลยกำหนดเวลาที่จะ refresh token ได้

สำหรับการ refresh token ของ jwt-auth นั้น access token ใหม่จะเริ่มนับเวลาหมดอายุใหม่เท่านั้น แต่เวลาที่สามารถทำการ refresh ใหม่นั้น ยังคงนับเวลาต่อจากเวลาของ token เดิม เนื่องจากเวลาสร้างของ access token ใหม่ใช้เวลาสร้างเดียวกับ access token เดิม ทำให้ไม่ว่าเราจะ refresh token ไปกี่ครั้ง ระบบก็จะบังคับให้เรา login ใหม่ เมื่อ access token ปัจจุบันหมดอายุและเลยกำหนดเวลาที่จะ refresh token ตัวแรกที่ได้หลังจาก log in ได้

Saturday, March 17, 2018

[Docker] การเปลี่ยนแปลงวันเวลาของเครื่อง Server ที่เป็น Docker
[Docker] How to Change Date and Time of Server which is Docker

การเปลี่ยนแปลงวันเวลาของเครื่อง Server ที่เป็น Docker นั้น เราไม่สามารถใช้คำสั่ง docker exec เพื่อเข้าไปเปลี่ยนแปลงวันเวลาของเครื่องได้โดยตรง เนื่องจากวันเวลาของเครื่องที่เป็น Docker นั้นจะใช้วันเวลาจากเครื่อง Host เป็นหลัก ดังนั้นการจะเปลี่ยนแปลงวันเวลาของเครื่อง Docker จะต้องเปลี่ยนแปลงเวลาที่เครื่อง Host แทน

คำสั่งในการเปลี่ยนแปลงวันเวลาของเครื่อง Host ที่เป็น Linux คือ
date -s "2018-04-01 00:00:00"
ซึ่งถ้าต้องการเปลี่ยนแปลงวันเวลากลับไปเป็นวันเวลาของเครื่องจริงๆก็สามารถใช้คำสั่งดังนี้
hwclock > date -s