/images/avatar.png

Enabling MikroTik REST API Over SSL Using Ansible

In this guide, we’ll show you how to enable the MikroTik REST API over SSL using Ansible 1. Starting from RouterOS v7.9, MikroTik officially supports SSL for the REST API 2.

We’ll break down the process into six simple steps:

  1. Set up a Python environment and install Ansible
  2. Test Ansible connectivity to the MikroTik router
  3. Generate a self-signed SSL certificate
  4. Enable the REST API with SSL
  5. Test the REST API with curl
  6. Automate SSL certificate renewal with a script

1. Set Up Python Environment and Install Ansible

Ansible is written in Python, so we’ll begin by creating an isolated Python virtual environment. This keeps dependencies contained and avoids conflicts with system-wide Python packages.

แสดงเส้นทางบนแผนที่ด้วย Open Source Routing Machine (OSRM)

บทความนี้แสดงวิธีติดตั้งและใช้งาน Open Source Routing Machine (OSRM) 1 ระบบโอเพ่นซอร์สสำหรับค้นหาเส้นทางบนแผนที่ โดยใช้ข้อมูลจาก OpenStreetMap (OSM) 2

เนื้อหาเน้นไปที่การตั้งค่า ระบบ OSRM ฝั่งเซิร์ฟเวอร์ (Backend) เพื่อให้สามารถคำนวณระยะทาง เวลาเดินทาง หรือเส้นทางที่เหมาะสมระหว่างพิกัดต่างๆ ได้ผ่าน REST API

โดยจะแบ่งเนื้อหาออกเป็น 4 ส่วนหลัก:

  1. ดาวน์โหลดข้อมูลแผนที่ของประเทศไทยจาก OSM
  2. เตรียมข้อมูลให้เหมาะกับอัลกอริทึมของ OSRM (CH 3 หรือ MLD 4 5)
  3. สร้างและเปิดใช้งานระบบ OSRM
  4. ทดสอบการคำนวณระยะทางและระยะเวลา
  5. ทดสอบการคำนวณเส้นทาง

1. ดาวน์โหลดข้อมูลแผนที่ของประเทศไทยจาก OpenStreetMap

ก่อนใช้งาน OSRM จำเป็นต้องมีข้อมูลแผนที่ที่ประกอบด้วยโครงสร้างถนน บทความนี้แนะนำการดาวน์โหลดข้อมูล OSM ของประเทศไทยจาก 2 แหล่ง:

1.1 ดาวน์โหลดจาก slice.openstreetmap.us 6

  1. เปิดเว็บไซต์ แล้วกรอก GeoJSON ของประเทศไทยลงในช่อง Paste bbox or GeoJSON:
  2. คลิก Load เพื่อโหลดขอบเขตข้อมูล (รูปที่ 1)
  3. คลิก Generate Slice รอจนระบบประมวลผลเสร็จ
  4. คลิก Download เพื่อดาวน์โหลดไฟล์ข้อมูล
  5. เปลี่ยนชื่อไฟล์เป็น thailand-latest.osm.pbf

ℹ️ หมายเหตุ: เว็บไซต์นี้เหมาะสำหรับผู้ที่ต้องการเลือกพื้นที่แผนที่เฉพาะ เช่น รายจังหวัด หรือเฉพาะจุดที่สนใจ และต้องการข้อมูลที่อัปเดตเร็วภายในไม่กี่นาที สามารถดาวน์โหลดตัวอย่างไฟล์ GeoJSON ของประเทศไทยได้ที่ลิงก์นี้

Resolving Boto3 Checksum Issue with S3-Compatible Services

When using the Boto3 library with S3-compatible services e.g. Blackblaze B2, you might encounter the error: Unsupported header 'x-amz-checksum-mode' received for this API call

This happens because Boto3, by default, enables checksum validation specifically for Amazon S3. However, third-party providers like Backblaze B2 may not support certain checksum headers.

Backblaze B2’s documentation 1 lists unsupported checksum features, such as:

  • x-amz-checksum-crc32
  • x-amz-checksum-crc32c
  • x-amz-checksum-crc64nvme
  • x-amz-checksum-sha1
  • x-amz-checksum-sha256
  • x-amz-checksum-algorithm
  • x-amz-checksum-mode

To disable checksum validation in Boto3, you need to adjust the client configuration. The boto3 client can be constructed with the following settings:

การแสดงข้อมูลต่างๆบนแผนที่ด้วยไลบรารี Folium

การแสดงข้อมูลต่างๆ เช่น ตำแหน่ง หรือ ขอบเขต บนแผนที่ สามารถทำให้สามารถเข้าใจข้อมูลเหล่านั้นได้ดียิ่งขึ้น แต่ข้อมูลแผนที่ส่วนใหญ่ เช่น กูเกิลแมพ (Google Map)1 หรือ แมพบอกซ์ (Mapbox)2 แม้สามารถใช้งานได้ฟรี แต่ส่วนใหญ่มีข้อจำกัดปริมาณการใช้งาน และจำเป็นต้องให้ข้อมูลบัตรเครดิตเพื่อใช้งาน ผมขอแนะนำไลบรารี (library) ที่สามารถใช้งานได้ฟรีและไม่ต้องให้ช้อมูลบัตรเครดิตก่อนใช้งาน ซึ่งไลบรารีนี้คือ Folium3

โดยบทความนี้มีตัวอย่าง 2 ตัวอย่างในการใช้งานไลบรารี Folium และภาษาไพทอน (Python)

  1. ตัวอย่างการแสดงตำแหน่งที่ระบุด้วยละติจูด (latitude) และ ลองติจูด (longitude) ด้วยสัญลักษณ์ (marker) บนแผนที่
  2. ตัวอย่างการแสดงรูปเซลล์ (cell) หกเหลี่ยม (hexagon) ของ H3 ที่ระบุจากตำแหน่งบนแผนที่

ตัวอย่างการแสดงตำแหน่งที่ระบุด้วยละติจูด (latitude) และลองติจูด (longitude) ด้วยสัญลักษณ์ (marker) บนแผนที่

การแสดงสัญลักษณ์บนแผนที่สามารถทำได้ตามขั้นตอนดังต่อไปนี้

  1. สร้างแผนที่ Folium ด้วยคำสั่ง folium.Map กำหนดพารามิเตอร์ location มีค่าเท่ากับตำแหน่งของสัญลักษณ์ เช่น (13.7305, 100.5172) (เพื่อให้สัญลักษณ์อยู่ในตำแหน่งกึ่งกลางของแผนที่) และ zoom_start มีค่าเท่ากับ 15
  2. สร้างสัญลักษณ์ด้วยคำสั่ง folium.Marker กำหนดพารามิเตอร์ location มีค่าเท่ากับตำแหน่งสัญลักษณ์ เช่น (13.7305, 100.5172)
  3. เพิ่มสัญลักษณ์ที่สร้างขึ้นในข้อที่ 2 ลงบนแผนที่ในข้อที่ 1 marker.add_to(folium_map)

ตัวอย่างการแสดงสัญลักษณ์บนแผนที่ 4

แก้โจทย์ปัญหาการทอนเงินด้วยขั้นตอนวิธีแบบละโมบ (Greedy Algorithm)

หนึ่งในโจทย์ปัญหาการเขียนโปรแกรมที่นิยม คือ การทอนเงินด้วยเหรียญหรือธนบัตรตามที่กำหนด โดยโจทย์ต้องการหาจำนวนเหรียญหรือธนบัตรที่น้อยที่สุดในการทอนเงินจำนวนที่กำหนด ซึ่งโจทย์นี้เป็นโจทย์ที่เราทุกคนคุ้นเคยและใช้ในชิวิตประจำวันบ่อยครั้ง

สร้างแฟลชไดรฟ์ (Flash drive) ที่เข้ารหัสเพื่อเก็บข้อมูลสำคัญ

บทความนี้เขียนขึ้นเพื่ออธิบายการสร้างแฟลชไดรฟ์ที่เข้ารหัสเพื่อเก็บข้อมูลสำคัญ โดยใช้ซอฟแวร์ Linux Unified Key Setup (LUKS) 1

เมื่อก่อนผมใช้งานระบบปฎิบัติการ Windows ผมเลือกเก็บข้อมูลด้วยการเข้ารหัสโดยการใช้ซอฟแวร์ BitLocker 2 เข้ารหัสทั้งพาร์ติชันของฮาร์ดดิสก์ที่ใช้เก็บข้อมูล หรือใช้ซอฟแวร์ VeraCrypt 3 (หรือ TrueCrypt 4 ชื่อในอดีต) สำหรับสร้างไดรฟ์ข้อมูลเข้ารหัสเสมือน (virtual encrypted disk) โดยใช้เก็บสำรองไฟล์เข้ารหัสลงในแฟลชไดรฟ์ และนำไปใช้งานกับเครื่องอื่นๆ ทั้ง Windows หรือ Linux

แต่เมื่อย้ายมาที่ระบบปฎิบัติการ Ubuntu มากขึ้น ผมต้องการสำรองข้อมูล Public และ Private Key 5 จึงมองตัวเลือกอื่น ในการสำรองข้อมูลและเข้ารหัสเพื่อความปลอดภัย โดยได้เลือกใช้ LUKS 1 สำหรับการสำรองข้อมูลแบบเข้ารหัสในแฟลชไดรฟ์