Archive for the ‘Code’ tag
Drupal, Inline and Contemplate no comments
ช่วงสัปดาห์ที่ผ่านมา มั่วแต่วุ่นๆ อยู่กับการเปิดเว็บข่าวอนิเมะเอามันส์ หลังจากที่มัวลังเลอยู่หลายเดือน ในที่สุดก็ออกมาเป็นรูปเป็นร่าง ซอฟท์แวร์ที่ใช้ในขณะนี้ก็คือ Drupal พอลองเอามาใช้ดูกับงานแบบนี้แล้วค่อนข้างถูกใจในความยืดหยุ่นของมัน
Plugin ที่ใช้ในการทำหน้าเนื้อหาข่าว หลักๆ ก็คือ Content Template กับตระกูล CCK ทั้งหลาย พร้อมด้วย CSS แบบเถื่อนๆ ลงไปบน template อีกนิดหน่อย (เพราะธีมยังไม่เสร็จดี) ซึ่งผลที่ได้ออกมาก็เป็นที่ค่อนข้างพอใจ
ทีนี้ ปัญหามันก็เกิดขึ้น ปัญหาที่ว่าก็คือเมื่อต้องการจะทำ inline image ลงในบทความ ตัวเลือกโมดูลแรกที่จะมองหาก็คือ Inline โดยที่มันจะสร้าง tag เล็กๆ เช่น [inline:hello.jpg] และจะแทนแทคนี้ด้วยภาพที่เราอัพโหลดลงไป
จุดที่เป็นปัญหาคือส่วน “แทนภาพ” ที่ว่านี่ เมื่อมันใช้การเรียกหา $node->body เพื่อมาแทนภาพ แต่การใช้งาน Content template เราจะไม่ได้ใช้ในส่วนนั้น แต่จะเป็น $node->content['body']['#value'] แทน เลยเป็นผลทำให้สิ่งที่แสดงออกมาเลยกลายเป็น raw text [inline:hello.jpg] แทนที่จะเป็นภาพ
Mollom meets Pylons, the Mollom Decorator no comments
ทุกวันนี้เรื่องสแปมนับว่าเป็นปัญหาใหญ่มากบนเว็บ การแก้ไขปัญหาที่ดีต้องทำให้มัน transparent ที่สุดเท่าที่จะเป็นได้—ก็คือต้องให้ผู้ใช้สามารถใช้งานเว็บได้ปกติ โดยไม่จำเป็นต้องสนใจว่ามีระบบป้องกันอะไรอยู่ ทางเลือกที่เหลืออยู่จึงกลายเป็นการใช้บริการต่อต้านสแปมอย่าง Akismet หรือ Mollom ที่จะทำให้ผู้ใช้มีส่วนเกี่ยวข้องน้อยที่สุดในกระบวนการ
ส่วนตัวแล้วผมเลือกใช้ Mollom ส่วนหนึ่งเพราะลิมิท API call ไว้สูงที่ 100,000 calls ต่อเดือน และเป็นบริการโดยผู้สร้าง Drupal ส่วนอีกเหตุผลหลักอีกอันหนึ่งก็คือจะใช้สแปมฟิลเตอร์ผสม CAPTCHA อยู่แล้ว ก็เลยไม่ลำบาก ใช้อันที่มีอยู่แล้วไปเลยดีกว่า
Declarative again no comments
เขียนเรื่อง declarative plugins ไปเมื่อ entry ก่อน หลังจากผ่านไปหลายสัปดาห์ ในที่สุด model ใหม่ที่ใช้งาน declarative plugins ก็ถูกใช้งานจริงอย่างไม่มีปัญหาใดๆ แต่การเปลี่ยนจากวิธี mapper ปกติไปเป็น declarative ไม่ได้ราบรื่นอย่างที่คิด (ถ้าหากใช้แต่แรกคงสบาย)
ปัญหาที่เจอส่วนหนึ่งคือ circular import ใน Python (คือ import class ก่อนที่มันจะถูกสร้างขึ้น) ที่ถึงแม้การรับ string ใน relation() จะช่วยเรื่องนี้ได้พอสมควร แต่ก็ไม่ช่วยในทุกกรณี เช่นกรณีที่ต้องทำตารางแบบ Many-to-Many หรือการสร้าง UNIQUE constraint กับสองคอลัมน์
Declarative, declarative 2 comments
เมื่อเช้านี้นั่งอ่าน Changelog ของ SQLAlchemy เลยได้เห็นถึงการมีอยู่ของ declarative plugins ที่ถ้าหากมองแล้วคงนึกถึง Elixir กันก่อน เพียงแค่มัน verbose กว่า Elixir มาก แต่หลังจากที่ดูความสามารถมันไปซักพักแล้วก็คิด “อื้ม! นี่แหละ ใช่เลย”