ลองเล่น Puppet Master กับ Puppet Agent บนเครื่องเราเอง

หมายเหตุ ทดสอบกับ Ubuntu เวอร์ชั่น 14.04 Vagrant เวอร์ชั่น 1.5.3 และ Puppet เวอร์ชั่น 3.7.3

อย่างน้อยเราต้องมีเครื่องสัก 2 เครื่อง เครื่องหนึ่งติดตั้ง Puppet Master และอีกเครื่องหนึ่งติดตั้ง Puppet Agent วิธีที่ง่ายที่สุด และถูกที่สุดคือสร้าง Virtual Machine (VM) ขึ้นมาใช้งาน ถ้า Geek หน่อยก็ใช้ Vagrant สร้าง Multi-Machine สร้าง VM บล็อกนี้จะขอแนะนำให้ใช้ Vagrant นะครับ ชีวิตสบายขึ้นเยอะ

Continue reading "ลองเล่น Puppet Master กับ Puppet Agent บนเครื่องเราเอง"

Elasticsearch คืออะไร?

เนื่องจากที่บริษัทกำลังจะก้าวเข้าสู่โลก Big Data (จริงๆ เข้ามานานแล้วแหละ แต่เริ่มจะมีโอกาสได้ใช้ประโยชน์จากมัน) ช่วง 3-4 วันที่ผ่านมานี้ก็เลยมีโอกาสได้ลองแตะๆ Elasticsearch อยู่บ้าง จริงๆ มีอีกตัวหนึ่งที่คิดไว้คือ Solr แต่ส่วนตัวแล้วชอบชื่อ Elasticsearch มากกว่า ดูหล่อกว่า เลยเริ่มศึกษาจาก Elasticsearch ก่อน

Continue reading "Elasticsearch คืออะไร?"

วิธีแก้ปัญหา buildbot create-master master แล้วเจอ ImportError

ถ้าเวลารันคำสั่ง buildbot create-master master แล้วเจอ error 3 บรรทัดสุดท้ายเป็นประมาณนี้

  File "/home/zkan/.virtualenvs/ci/local/lib/python2.7/site-packages/migrate/versioning/schema.py", line 10, in <module>
    from sqlalchemy import exceptions as sa_exceptions
ImportError: cannot import name exceptions

ให้ไปหาไฟล์  schema.py ที่ขึ้น error นั้น (ลองดู path จาก error บนเครื่องตัวเองเอานะครับ เพราะแต่ละเครื่องคงจะไม่เหมือนกัน) แล้วให้เปลี่ยนบรรทัดด้านล่างนี้

from sqlalchemy import exceptions as sa_exceptions

เป็น

try:
    from sqlalchemy import exceptions as sa_exceptions
except ImportError:
    from sqlalchemy import exc as sa_exceptions

ใส่คำสั่ง try-catch ไว้นั่นเอง เพื่อให้มัน import ตัวโมดูล exc มาแทน ถ้าไม่มี exceptions พอเสร็จแล้วก็ลองรันคำสั่งสร้าง master ใหม่อีกรอบดู น่าจะรันได้แล้ว

รู้สึกเหมือนกับว่าเวอร์ชั่นของ SQLAlchemy มันไม่ compatible กับ Buildbot เวอร์ชั่น ณ ตอนนี้เลยทำให้เกิดปัญหา

ด้านล่างนี้เป็น environment ที่ผมลง Buildbot (เวอร์ชั่น 0.8.7p1) ไว้ ทำตามวิธี Installation นี้

(ci)[email protected]:~$ pip freeze
Jinja2==2.7
MarkupSafe==0.18
SQLAlchemy==0.8.2
Tempita==0.5.1
Twisted==13.1.0
argparse==1.2.1
buildbot==0.8.7p1
decorator==3.4.0
python-dateutil==1.5
sqlalchemy-migrate==0.7.2
wsgiref==0.1.2
zope.interface==4.0.5

ใช้ multirow สร้างตารางใน LaTeX

การสร้างตารางถ้าทำใน Words หรือ Writer จะทำได้ง่ายมาก แค่กระดิกนิ้ว 2-3 ทีก็ได้แล้ว แต่ถ้าเป็นใน LaTeX นี่คนละเรื่องเลยนะครับ หน้ามือเป็นหลังเท้าเลย ผมได้มีโอกาสได้ช่วย อ. แปลงเอกสาร .doc เอกสารหนึ่ง ให้เป็น LaTeX แล้วก็ดันไปเจอตารางที่เค้าทำไว้แบบนี้ (ขออนุญาตเปิดเผยข้อมูลผลการทดลองนะครับ -/\-)

"เชี้ย" เป็นคำแรกที่ผมพูดออกมา.. เสียเวลาไปครึ่งวันเพื่อหาวิธีสร้าง แล้วก็ได้เจอ package ช่วยชีวิต นั่นคือ.. multirow นั่นเองครับ ถ้ามี package นี้แล้ว ตารางแบบไหนมาก็ไม่กลัว (มั้ง) บล็อกนี้ไม่ขอสอนอะไรนะครับ ถ้าสงสัยก็ทิ้งคำถามไว้ได้นะ แค่อยากมาเอาโค้ดตารางมาแปะอวดเฉยๆ 😛 โอ้ะ! ขอออกตัวไว้ก่อนนะครับว่าโค้ดตารางที่แปะไว้นี่ไม่ได้สร้างตารางที่เหมือนกันเป๊ะๆ กับตารางตามรูปนะครับ บางเส้นอาจจะไม่มี แต่ผมคิดว่าคงไม่ยากที่จะเอาโค้ดไปแก้ต่อนะ 🙂

Continue reading "ใช้ multirow สร้างตารางใน LaTeX"

เริ่มต้นเขียน WordPress Plugin แบบง่ายๆ

เพิ่งลองหัดเขียน WordPress Plugin โดยอ่านจาก Tutorial: How to write a WordPress Plugin? ขอบันทึก + แปลเป็นภาษาไทยเก็บไว้สักหน่อย

ก่อนจะเขียนเราควรจะระลึกไว้ก่อนว่า

  1. ชื่อ plugin ควรจะไม่ซ้ำใคร ถ้าชื่อซ้ำกันแล้ว plugin ที่เราเขียนอาจจะไปมีผลกระทบกับ plugin อันอื่นที่ใช้อยู่
  2. เราควรจะเขียน comment ตรงส่วนที่คิดว่าจำเป็นไว้ในโค้ดด้วย เพื่อที่คนอื่นเข้ามาพัฒนาต่อจะได้ไม่มึน
  3. เราควรจะทดสอบ plugin ที่เขียนเสร็จแล้วบน localhost กับ WordPress เวอร์ชั่นล่าสุด ก่อนที่จะนำไปใช้จริงในตัว production

ถ้าโอเคทั้งหมด 3 ข้อแล้ว เราก็จะมาสร้าง plugin ที่ให้แสดงคำว่า Hello World บนหน้า WordPress กัน 🙂

Continue reading "เริ่มต้นเขียน WordPress Plugin แบบง่ายๆ"