Introduction to CouchDB with Pylons   no comments

Posted at 10:11 pm in Wired

สารภาพว่าก่อนหน้านี้ผมไม่เคยคิดที่จะมอง CouchDB อยู่ในสายตาเลยแม้แต่น้อย อาจจะเรียกว่าเป็นคนสาย RDBMS เต็มขั้นจนไม่เห็นความจำเป็นที่จะต้องเปลี่ยนไปใช้ฐานข้อมูลที่สร้างขึ้นด้วยแนวคิดอื่น แต่หลังจากอ่านที่มีคนอธิบายความสามารถของ CouchDB ใน Reddit ทำให้เกิดความสนใจขึ้นมาเล็กน้อยทำให้เริ่มลองศึกษาแนวคิดการทำงานของมัน

คอนเซปของ CouchDB ก็คือไม่มีการใช้ schema เป็นเบื้องหลังฐานข้อมูล และไม่มีคอนเซปที่เรียกว่าตาราง แต่ละแถวในฐานข้อมูลถูกเรียกว่า “document” และแยกออกจากกันชัดเจน โดยไม่จำเป็นต้องมีรูปแบบตายตัว สิ่งที่ได้มาจากการทำแบบนี้คือความยืดหยุ่นของข้อมูลในฐานข้อมูลหนึ่งๆ

ตัวอย่างง่ายๆ ที่สามารถนำคอนเซป document ของ CouchDB ไปใช้ได้คือ node ของ Drupal ที่สามารถเป็นได้หลายอย่าง ในกรณีของการใช้ RDBMS คุณต้องมานั่งปวดหัวกับ schema ของตารางที่จะยุ่งวุ่นวายขึ้นตามความหลากหลายของข้อมูลใน node แต่สำหรับการใช้งาน CouchDB แล้ว มันก็เป็นเพียงแค่ document หนึ่งๆ เท่านั้น

Read the rest of this entry »

Written by Sirn on December 23rd, 2008

Tagged with , ,

Thai Font in Ubuntu   no comments

Posted at 5:17 am in Wired

วันนี้ได้มีโอกาสลง Linux อีกรอบหนึ่งหลังจากผ่านไปหลายเดือนจากคราวที่แล้ว ถือโอกาสลงเสร็จใหม่ๆ จัดการกับฟอนท์ให้เรียบร้อย เพราะส่วนตัวแล้วไม่ชอบภาษาไทยที่ใช้เป็นมาตรฐานของ Linux เอามากๆ และในขณะเดียวกันก็ไม่ชอบภาษาอังกฤษที่ใช้ใน Lomaputta เลยแม้แต่นิดเดีย ด้วยเหตุนั้นเลยคิดว่าคงเป็นการดีถ้าหากเอาฟอนท์สองตัวนี้มารวมกันได้…

หลังจากลองขุดคุ้ยใน /etc/fonts/conf.d/ อยู่ซักพักหนึ่ง ก็พบว่าฟอนท์ชื่อ “serif” และ “sans-serif” นั้น จริงๆ แล้วเป็นเพียงแค่ alias ของฟอนท์หลายๆ ตัว ซึ่งถูกตั้งไว้ในไฟล์หลายๆ ไฟล์ และฟอนท์ Bitstream Vera DejaVu ที่เป็นมาตรฐานนั้นถูกเซ็ทไว้ที่ไฟล์ 60-latin.conf เลยคิดว่าถ้าหากเซ็ทให้ Lomaputta เป็น preferred ก่อนหน้านั้นล่ะ?

จัดการสร้างไฟล์ 40-ttf-thai.conf แล้วโยนลงไปใน /etc/fonts/conf.d/ หน้าตาแบบนี้

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
	<alias>
		<family>serif</family>
		<prefer><family>Lomaputta</family></prefer>
	</alias>
	<alias>
		<family>sans-serif</family>
		<prefer><family>Lomaputta</family></prefer>
	</alias>
	<alias>
		<family>monospace</family>
		<prefer><family>TlwgMono</family></prefer>
	</alias>
</fontconfig>

ผลปรากฎเป็นไปตามที่คาด ทั้งฟอนท์ “serif” และ “sans-serif” ต่างก็ใช้ glyph ภาษาไทยจาก Lomaputta ในขณะเดียวกันก็ใช้ภาษาอังกฤษจาก Bitstream Vera DejaVu เท่านี้ก็รู้สึกใช้ Ubuntu ได้อย่างสบายตาขึ้นเยอะ

Written by Sirn on December 21st, 2008

Tagged with

PostgreSQL Dirty Database Backup   no comments

Posted at 5:41 pm in Wired

พยายามหาสคริตป์สำหรับแบคอัพฐานข้อมูล PostgreSQL อยู่ซักพักนึง แต่หาตัวที่ทำอย่างที่ต้องการไม่ได้ซะที เลยคิดว่าเขียนเองแบบสกปรกๆ ใช้ไปก่อนดีกว่า เลยได้ออกมาหน้าตาแบบนี้ (เซ็ทรหัสผ่านในไฟล์ ~/.pgpass และ chmod 600 เอา)

#!/usr/bin/env bash
# Set user information inside ~/.pgpass and chmod 600 it.
 
# Configurations
DATABASE="dbname"
USERNAME="username"
SAVE_PATH="/backup"
DAYS=7
 
# Generate datetime for file naming
DATE_FILE=`date '+%Y-%m-%d-%H-%M-%S'`
DB_FILENAME="$DATABASE-$DATE_FILE.dump"
DB_FILEPATH="$SAVE_PATH/$DB_FILENAME"
SAVE_FILE="$SAVE_PATH/$DATABASE-$DATE_FILE.tar.bz2"
 
# Run
/usr/local/bin/pg_dump -U $USERNAME --no-owner $DATABASE > $DB_FILEPATH
cd $SAVE_PATH
/usr/bin/tar -cjf $SAVE_FILE $DB_FILENAME
/bin/rm $DB_FILEPATH
 
# Clean older files
/usr/bin/find $SAVE_PATH/* -mtime +$DAYS -name '*.tar.bz2' -exec rm {} \;

คิดว่าบรรทัดสุดท้ายคงใช้เป็น /usr/bin/find $SAVE_PATH/* -mtime +$DAYS -name '*.tar.bz2' -delete ไปเลยจะน่าปลอดภัยขึ้น แต่ตอนนี้ไม่อยากแก้อะไรที่มันทำงานได้อยู่แล้ว ดังนั้นปล่อยมันเป็นงี้ไปก่อนดีกว่า…

ไฟล์ที่ออกมาจะหน้าตาเป็น dbname-2008-12-18-17-30-00.tar.bz2 และจะเก็บไว้เพียงของ 7 วันสุดท้าย ผมตั้ง cron ให้มันรันทุกๆ 6 ชั่วโมง และ rsync ไปยังเซิฟเวอร์สำรองเอา น่าจะสบายใจได้พอสมควร

Written by Sirn on December 18th, 2008

Tagged with

Quinn   1 comment

Posted at 1:09 pm in Wired

Quinn stats

ไม่มีอะไรครับ แค่รู้สึกภูมิใจที่เอาชนะคุณ RH ได้แล้ว :P (ถึงขั้นรอวันนึงให้ stat มันขึ้นเลยนะเออ!)

สำหรับคนที่ไม่เข้าใจว่ามันคืออะไร มันคือเกม Tetris บน Mac OS X ในชื่อเกม Quinn ครับ สามารถดาวน์โหลดมาเล่นได้ฟรี และมันก็สูบเวลาผมไปแล้วมหาศาลมาก!

Written by Sirn on December 11th, 2008

Tagged with

Portfile Patchfile Patching   3 comments

Posted at 7:14 am in Wired

ช่วงนี้กำลังนั่งเล่นกับ Apache CouchDB สำหรับใช้ในโปรเจคถัดไป อ่านวิธีการทำงานของมันแล้วรู้สึกค่อนข้างชอบพอสมควร ถึงแม้ในขณะนี้มันยัง “ไม่สมบูรณ์” และ “ไม่มีการ optimize ใดๆ” แต่การใช้งานโดยทั่วไปน่าจะเรียกได้ว่าเร็วพอควร แต่เอนทรี่นี้ไม่ได้มาสาธยาย CouchDB …

ปัญหามันมีอยู่ว่า หลังจากลง CouchDB ผ่านทาง MacPorts เรียบร้อยแล้ว ก็พบว่าไม่สามารถเข้าไปยัง Futon ที่เป็น Web Interface สำหรับดูแลข้อมูลในฐานข้อมูลได้ ก็เลยลองโพสถามใน couchdb-user ดู แล้วก็ได้คำตอบว่าเป็นเพราะบั๊กตัวหนึ่งของ Erlang (ภาษาที่ CouchDB ใช้เขียน)

บั๊กตัวนี้มีอยู่ว่า (เดาเอา เขียน Erlang ไม่เป็น) คำสั่ง calendar:localtime_to_universaltime จะไปเรียก mktime() โดยมีค่า is_dst เป็น True ซึ่งพออยู่ในเขตที่ไม่มี DST แล้ว mktime() จะคืนค่าออกมาเป็น -1 ทำให้ calendar:local_time_to_universal_time_dst ที่รับค่าจาก localtime_to_universaltime อีกต่อ จะได้ {{1969, 12, 31}, {23, 59, 59}} ไป ซึ่งเป็นเวลาก่อน Epoch บน Mac OS X และ UNIX-like อื่นๆ 1 วินาที และแน่นอนว่ามันต้อง error

วิธีการแก้ก็เพียงแค่ใช้ แพทช์ ที่ Paul Guyot โพสไว้ตอนแจ้งบั๊ก นำมาแพทช์เข้ากับซอร์สของ Erlang และคอมไพล์ใหม่ … อ๊ะ แล้วถ้าหากไม่อยากจะคอมไพล์ใหม่เอง แต่อยากใช้ MacPorts เหมือนเดิมล่ะ จะทำยังไง?

ต้องขอขอบคุณที่ MacPorts นั้นใช้การแพทช์ซอร์สเป็นปกติอยู่แล้ว ดังนั้นเราสามารถเพิ่มแพทช์นี้เข้าไปในรายการนั้นได้ผ่านทางไฟล์ Portfile ซึ่งปกติจะอยู่ใน /opt/local/var/macports/sources/rsync.macports.org/release/ports/ (สำหรับ Erlang ต้องเข้าไปใน lang/erlang อีกต่อ) โดยการย้ายไฟล์แพทช์ที่โหลดมาไปไว้ใน files/ และแก้ไข Portfile เพิ่มชื่อไฟล์ที่ย้ายมาลงไปยังบรรทัด patchfiles

หลังจากแก้ไข Portfile เรียบร้อยแล้ว ก็แค่สั่งลง Erlang ใหม่ เมื่อเปิด CouchDB ขึ้นมาอีกรอบ ก็จะไม่มีปัญหาในการเข้าไปยัง Futon แล้ว แต่ตอนนี้สงสัยว่าแพทช์นี้มีมาตั้งแต่ R12B-4 แล้วตอนนี้มันออก R12B-5 มาแล้ว มันจะได้ commit เร็วๆ นี้หรือเปล่า?

Written by Sirn on November 26th, 2008

Tagged with , , ,