Skip to content

Kor's blog Posts

ปีกว่าๆ ที่ไม่ได้เขียนบล็อกทำอะไรไปบ้าง

ถ้าสังเกตบล็อกล่าสุดของผมจะย้อนไปเมื่อวันที่ 15 Sep, 2018 เป็นเวลาปีกว่าเลยที่ไม่มีโพสต์ใหม่ ความจริงก็ไม่ใช่ไม่ได้เขียนเลยแต่เขียนแล้วไม่ได้ publish มากกว่าเพราะเขียนไม่จบ ใจความไม่ครบถ้วนตามที่ตั้งใจไว้ก็ไม่อยาก publish ตอนนี้ดองโพสต์ไว้ประมาณ 10 โพสต์ได้ บล็อกช่วงหลังๆ ณ ตอนนั้นจะเห็นว่าผมเขียนเกี่ยวกับงานด้าน data ซะเยอะ เพราะตอนนั้นผมเปลี่ยนสายงานจาก backend engineer มาทำ data engineer ซึ่งจะบอกว่าเปลี่ยนซะทีเดียวก็คงไม่ถูกต้องนักเพราะงานที่ทำก็ยังคล้ายเดิม เขียนโปรแกรมเหมือนเดิมแต่คนละ field เรียกว่า expand ขอบข่ายการเรียนรู้น่าจะถูกกว่า (ถ้าในภาษาเกม RPG ก็เรียกว่า up skill tree ไปสายอื่นด้วย ฮา) ตอนนี้ผมทำงานใหม่ได้ปีกว่าละ role…

บันทึกสิ่งที่ได้เรียนรู้จากการใช้งาน AWS Elasticsearch service

งานที่ผมทำอยู่ตอนนี้ใช้งาน Apache Kafka เป็น distributed messaging และใช้ Elasticsearch เป็น storage เก็บข้อมูลและค้นคืนในการทำ analytics ซึ่งก็เจอแง่มุมที่น่าสนใจ สิ่งที่ต้องคำนึงถึงในการใช้งาน Elasitcsearch หลายอย่าง เลยอยากแชร์สิ่งที่พบเจอระหว่างทางซะหน่อย Elasticsearch ที่ผมจะกล่าวถึงต่อไปนี้คือ Elasticsearch service บน AWS ต่อไปนี้ผมจะเรียก Elasticsearch ว่า ES ละกันเพื่อความกระชับ ส่วนหัวข้อที่จะเขียนแยกเป็น 2 ส่วนคือ ES topology  และการ ES tuning/troubleshooting เพื่อรองรับงานที่เน้น write operation เป็นหลัก…

บันทึกการใช้งาน Serverless application ด้วย AWS Lambda

งานที่ผมทำตอนนี้มีการใช้งาน AWS Lambda เอามาใช้งานในลักษณะ schedule worker ที่ทำงานตามเวลาและ worker ที่ทำงานเมื่อมี event เกิดขึ้นใน service ใดๆ เช่น เมื่อมี request มาที่ API Gateway, มีการสร้าง แก้ไขไฟล์ใน S3, มี trigger จาก CloudWatch ฯลฯ AWS Lambda, Serverless, Function as a Service คืออะไร ? AWS Lambda เป็น Serverless…

Python | แก้ปัญหาการเรียกใช้ module แบบ command line ไม่ได้หลังจากติดตั้งผ่าน pip

ปัญหาคือผมต้องการใช้  Apache Airflow บนเครื่อง  Ubuntu ซึ่งเขียนด้วย  Python และมี cli ให้ใช้ แต่หลังจากติดตั้งด้วย pip install airflow  ไปแล้วปรากฏว่าไม่สามารถใช้คำสั่ง  airflow  ผ่าน terminal  ได้ เจอ  error  แบบนี้ zsh: command not found: airflow ปัญหาเกิดจาก pip รุ่นใหม่ๆ บน Ubuntu เมื่อเรา pip install เพื่อติดตั้ง module ที่สามารถใช้งานผ่าน command line…

Python | จัดการ Python หลาย version ด้วย pyenv และ virtualenv (virtualenvwrapper)

ช่วงนี้ผมมีโอกาสใช้งาน Python และ contribute open source โปรเจกต์หนึ่งอยู่ ปัญหาที่โคตรจะเบสิกของ developer อย่างเราๆ ที่ต้องเจอคือ environment (ต่อไปขอย่อเป็น env ละกัน) บนเครื่องที่ใช้พัฒนากับ env ที่โปรเจกต์ต้องการเป็นคนละ version กัน เราอาจจะติดตั้ง env สำหรับโปรเจกต์นั้นบนเครื่องเราก็ได้แต่ก็จะเกิดปัญหาต่อมา เช่น

  • version ของชุดซอฟต์แวร์ที่โปรเจกต์ต้องการกระทบกับ version ของซอฟต์แวร์หลักของระบบ
  • version ของชุดซอฟต์แวร์ที่โปรเจกต์ต้องการอาจจะเก่าเกินไปจนติดตั้งบน OS version ปัจจุบันของเราไม่ได้

แม้ว่าเราจะมี Docker ซึ่งสามารถสร้าง container ที่มี env แยกจากระบบหลักได้ แต่บางครั้งก็ไม่สะดวกนักเพราะในระหว่างพัฒนาเราอาจจะต้องใช้  tool chain ต่างๆ ร่วมด้วย เช่น ถ้าผม develop ด้วย  Python ก็อาจจะต้องใช้ pip ด้วย เป็นต้น

ภาษา Python เองก็มี virtualenv ซึ่งช่วยให้เราจัดการ env ของ Python โดยสามารถรัน Python version ต่างกันกับแต่ละโปรเจกต์ได้โดยไม่กระทบ version  หลักในเครื่อง ส่วนอีกตัวที่จะช่วยให้เราทำงานกับ virtualenv ได้ง่ายขึ้นคือ pyenv

บันทึกการย้ายบล็อกและใช้งาน HTTPS จาก Let’s encrypt โดยใช้ Docker

บล็อกนี้ผมใช้ WordPress และ MySQL การ Dockerize เลยง่ายหน่อยเพราะมี official image ให้ใช้เลย ส่วนการทำ HTTPS ด้วย Let’s encrypt ก็ง่ายเช่นกันเพราะมี docker-letsencrypt-nginx-proxy-companion ให้ใช้ การสร้าง virtual host และ issue domain/sub-domain ที่ต้องการใช้งาน HTTPS ก็ทำได้ง่ายโดยการกำหนด env variable ตอนสั่ง docker run

Backup the database

เดิมผมติดตั้ง MySQL ผ่าน apt-get  โดยปกติ data ทั้งหมดของ MySQL จะอยู่ /var/lib/mysql  ก็ compress เป็น tar.gz แล้ว scp ไปที่เครื่องใหม่

ถ้ากลัวไม่ชัวร์ก็ใช้ phpmyadmin หรือ MySQL client dump เป็นไฟล์ .sql ออกมาด้วยก็ได้

Backup WordPress files

เนื่องจากบล็อกเก่าผมมีรูปภาพที่อัปโหลดไว้และติดตั้ง plugin ไว้หลายตัว ขี้เกียจติดตั้งและ config ที่เครื่องใหม่อีกเลย copy ออกมาทั้งเว็บ โดย compress เป็น tar.gz เสร็จแล้วก็ scp ไปที่เครื่องใหม่เหมือนเดิม