Thursday, June 30, 2011

Using Drupal to build a web app #2

Import Initial data ?
=====================
ในมุมการสร้าง web app (ที่ไม่ใช่ cms)
อาจมีข้อมูลระบบเก่าที่ต้อง import เข้า

แบ่งออกได้เป็นหลายกรณี เช่น

เป็นข้อมูล master ไม่มี foreign key
ในรูปแบบ เช่น csv, xml, หรือ table อยู่ใน ฐานข้อมูล
import ได้หลายวิธีเช่น
http://www.lullabot.com/articles/drupal-data-imports-migrate-and-table-wizard
http://drupal.org/node/1035296

เป็นข้อมูลที่มีความสัมพันธ์ one to many
เช่น table อัลบั๊มเพลง สัมพันธ์กับ table เพลง
(ซึ่งจะมีเพียงอัลบั๊มเดียว link ไปยัง เพลง
= เพลงหนึ่งเพลงอยู่ในอัลบั๊มเดียวเท่านั้น)
import ด้วย http://drupal.org/project/feeds

ผู้ฟังแต่ละคน ชอบเพลงได้หลายเพลง
เพลงแต่ละเพลงมีผู้ชอบฟังได้หลายคน
(ยังไม่ได้ศึกษา)


ติดต่อสื่อสารกับระบบอื่นๆได้
====================
XMLRPC, JSON, REST, AJAX, Webservice ...
ด้วย module ต่างๆ เช่น http://drupal.org/project/services

ตัวอย่าง
Building a webservice
http://jeroenbourgois.be/get-drupal-data-to-an-external-site
http://www.sparklepod.com/myblog/drupal-services-and-json-server-part-2/


เหมาะแก่การประมวลผล เพื่อออก report ?
==================================
- run sql select insert, update, delete ได้
- มี api มาให้แทน sql statement
- Drupal มีการเก็บข้อมูลใน table เฉพาะ
ซื่งออกแบบให้รองรับการเก็บบันทึกการแก้ไขข้อมูล หลายครั้ง revision
ไม่ใช่เก็บเฉพาะครั้งล่าสุด
ดังนั้น อย่าคาดหวังว่า ข้อมูลจะอยู่บน table เดียว ให้ select ง่ายๆ (ถ้าไม่ได้ผ่าน drupal api)

- Drupal ไม่ใช่ Object-Oriented (เป็น Procedural)
ถ้าคาดหวัง จะมี ORM ต้องลง http://drupal.org/project/orm เพิ่ม

- Drupal ไม่รองรับ Atomic Transaction !!!


Others
=======
- Drupal ยืดหยุ่นสูง

- มี User Interface ให้แก้ไขเมนู, เพิ่มหน้า + ใส่รูป (เช่น FCKeditor)
(ไม่ต้อง code ใดๆ)
รองรับ markdown (http://tewson.com/markdown)

- search + แสดงข้อมูล บน table ที่มีอยู่แล้ว (น่าจะเรียกว่า custom table)
http://drupal.org/project/data (ไม่ต้อง code อีกเช่นเดิม)
(join ความสัมพันธ์กับ content บน drupal ได้)

- ฟรีจริงๆ (ไม่เหมือน บน joomla ที่หลาย module ฟรีตัว demo)

- มี http://drupal.org/project/panels ที่ทำให้แต่ละหน้ามี layout ที่ต่างกันได้

- สร้าง form ขึ้นมาเฉพาะงาน
เช่น http://drupal.org/project/webform (making surveys)

ทำหน้า frontpage http://drupal.org/project/front

หน้า contact us  http://drupal.org/project/contact_forms

บอกว่า drupal มี Acquia เป็นเบื้องหลัง เหมือน fedora กับ Redhat
(http://www.isriya.com/node/2355/why-geeks-love-drupal)

มี drush เป็นทางเลือกในการติดตั้ง & maintainance >> http://ubuntuclub.com/node/3159/drupal-ขั้นเทพ-ด้วย-drush

ตัวอย่างเทพๆ ในการ setup ลงบน centos
http://thedrupalblog.com/creating-centos-server-installation-apache-mysql-tomcat-php-drupal-and-solr

ทิ้งท้ายด้วย อีกตัวอย่าง(ที่น่าตื่นตา) การใช้ drupal สร้าง web สมัครงาน (ภายในเวลา 30 นาที)
http://benbuckman.net/tech/11/02/drupal-application-framework-bostonphp-competition

ชั่งน้ำหนักกันเอาแล้วกันนะครับ ว่าเหมาะสมกับ Project ที่กำลังทำหรือเปล่า
สำหรับบางงาน อาจจะเหมาะมากๆ

Using Drupal to build a web app

จะทำ Project ใหม่ กำลังเลือก framework ก็กำหนดความคาดหวังกันซะหน่อย

เราคาดหวังอะไรจาก framework บ้าง?
================================
- เป็น web app
- ฟรี ไม่ติดเรื่องลิขสิทธิ์
- ภาษา เป็น php น่าจะดี
(เพื่อเลี่ยงปัญหาลิขสิทธิ์ java หรือความไม่แน่นอนใดๆ ที่อาจจะเกิดขึ้น)
- รองรับ postgres, mysql
- มีเอกสารเพียงพอ
- ควรอำนวยความสะดวก ในสร้าง app
(ทำงานหลักๆของ app คงไม่พ้น หน้า Search และแสดงข้อมูล
แล้วก็ Insert, Update, Delete)
framework ควรเอื้อให้พัฒนาได้อย่างเร็วๆ (เช่น  Validate input data)
เคยใช้ oracle application express (APEX) สร้าง App
ให้อารมณ์เหมือน ทำ M$ Access
(คือ click ๆๆๆ แล้ว key code นิดหน่อย แล้วได้ เป็น app ขึ้นมาใช้งาน)
แต่ต่างจาก access ตรงที่หน้าจอ User Interface เป็น Web
ถ้า framework เอื้อให้ทำได้อย่าง APEX นี่จะดีมาก
- เพิ่มส่วนขยายได้
เช่น อยากเพิ่ม lib ของ AJAX, JSON, JQuery, etc.
framework ก็เอื้อให้สามารถทำได้
(ถ้าไม่ได้พร้อมใช้ ก็ขอให้มีตัวอย่างคนที่ทำสำเร็จมาแล้ว
ไม่ต้องไล่แก้ code เพื่อเพิ่มเติม module ต่างๆ)
- เขียน code เพิ่มเติมสำหรับงานใน app ของเราได้
- Import Initial data ได้
- ติดต่อสื่อสารกับระบบอื่นๆได้
- เหมาะแก่การประมวลผล เพื่อออก report
- กำหนดสิทธิ์ผู้ใช้ (ACL)
- รองรับ Template
- Performance


เลยมาทำ research ตัว Drupal ดู สรุปได้ความดังนี้

โดยรวม
=======
- เป็น web app
- GNU GPL = นำมาใช้งานได้ฟรี
- เป็น php
- รองรับทั้ง postgres, mysql
(บาง module เช่น http://drupal.org/project/data รองรับเฉพาะ mysql)
(ใน D7 มีแยก layer ออกเป็น database abstraction
ทำให้ module ต่างๆ ไม่ต้องเขียนแยกสำหรับแต่ละ db อีกต่อไป)

- มีเอกสารพอสมควร (เพราะเป็นที่นิยม และมีผู้ใช้เยอะ)
- มี User Interface ให้ admin กำหนดสิทธิ์ + นิยามใหม่ได้โดยง่าย
รวมถึง รองรับ OpenID และ OAuth
- รองรับ Template
- มีระบบ cache (ซึ่งกำหนดได้หลายระดับ) เพื่อเพิ่ม Performance
(ไว้ทำ Project เสร็จคงให้รายละเอียดได้ว่าช้าแค่ไหน tune ยังไง)


สร้าง app ได้โดยง่าย?
===================
เนื่องจาก Drupal เริ่มต้นถูกสร้างขึ้นเพื่อเป็น CMS
ทำงานหลักๆของ app เช่น ทำหน้าหน้า Search และแสดงข้อมูล
แล้วก็ Insert, Update, Delete นั้น
Drupal มีหน้าจอ interface ให้กดๆ
(อาจจะกินเวลาในขั้นตอนตั้งชื่อตัวแปรบ้าง)
ก็จะได้หน้าผลลัพธ์ออกมาแล้ว !!!

โดยทั่วไป เมื่อพูดถึง CMS เราจะนึกถึงข้อมูลเพียง topic + body
(เช่น blog, news, forum) แล้วก็ส่วน comment
เลยสงสัยว่าด้วย drupal เราจะสร้างเนื้อหา (content)
หรือ ประเภทของเนื้อหา (content type) ที่มี field เพิ่มเติมตามความต้องการได้หรือ
(เช่น เนื้อหาประเภทหนังสือ มี isbn, ราคา, จำนวนหน้า เป็นต้น)
คำตอบคือ http://drupal.org/project/cck คือผู้อยู่เบื้องหลังคุณสมบัตินี้ครับ
(ซึ่งมีคุณสมบัติในส่วน ย้ายโครงสร้างข้อมูลที่กำหนดขึ้นนี้ ไปยัง production env ด้วย)

ซึ่งเราสามารถ config ให้ Validate input data
แล้ว drupal จะคอยตรวจสอบ + แสดงผลเตือนผู้ใช้ให้
เราไม่ต้อง coding สำหรับความต้องการนี้

ประเภทข้อมูลแบบ email http://drupal.org/project/email
หรือ ผูกรูปภาพเข้ากับ recode ในฐานข้อมูล http://drupal.org/project/imagefield
fields for content types that can be used to display video, image, and audio files from various third party providers (such as youtube)  http://drupal.org/project/emfield

ตัวอย่าง วิธีทำหน้า Search criteria โดยไม่ต้อง code
http://itshee.exteen.com/20090608/views-drupal
http://civicactions.com/blog/2009/apr/28/views_filter_blocks_drupal_6

ซึ่งตัว search result สามารถกำหนดให้แสดงผลเป็นตาราง
+ build-in ส่วน next prev last ในกรณีที่ผลลัพธ์มากกว่า 1 หน้า
+ ผู้ใช้สามารถกดตาม column ต่างๆ ให้เรียงลำดับข้อมูลมากน้อยได้
หรือ แสดงผลการค้นหาแบบ google ได้

กำหนดรูปแบบการแสดงผลข้อมูล http://drupal.org/project/contemplate

ตอน research อยู่, สงสัยอยู่ว่า cms ส่วนมากจะเป็นเหมือน blog
คือจะมี content หลัก แล้วก็ comment
เราสามารถ content มาลิงค์ความสัมพันธ์แบบ foriegn key ไปยังอีก content ได้หรือ
โดยที่ content อาจจะเป็นคนละ content type กันเช่น
content ประเภทอัลบั๊มเพลง สัมพันธ์กับ content type ชื่อเพลง
ได้คำตอบว่า http://drupal.org/project/cck ในส่วน nodereference ทำในส่วนนี้ได้
(ย้ายไปอยู่ในส่วน code module แล้วใน D7)


extension
==========
Drupal มี module ให้ download และติดตั้งเพื่อเพิ่มส่วนขยายได้อย่างง่ายดาย

ตัวอย่างวิธีการ http://drupal.org/node/587878
เป็นการใช้ module lightbox ที่ทำให้เมื่อเรากดที่รูป ระบบจะแสดงรูปในแบบ fullscreen
ผู้ใช้เลื่อนดูรูปก่อนหน้า หรือถัดไปได้ (เหมือนใน facebook) หรือเป็น slide show ก็ได้
(ไม่ต้อง coding ใดๆ อีกเช่นเคย)

ซึ่งเราสามารถเขียน code สร้าง module เพิ่มเติมสำหรับงานใน app ของเราได้เช่นกัน
(Thai version - http://www.thaitux.info/node/426)
หน้าเก็บค่า config ของ module นี่ เขียน code น้อยมาก
ตัวอย่างการเขียน page ที่บันทึกข้อมูลลง db เมื่อผู้ใช้กรอกและกดปุ่ม submit
http://coderepositories.blogspot.com/2011/02/drupal-module-inset-data.html

อ่านต่อ

Monday, June 13, 2011

Xfce 4.8

to change the keyboard layout
==============================
sudo apt-get install xfce4-xkb-plugin


add a shortcut to XFCE
=======================
- Select Menu | Settings | Settings Manager from the main menu
- Click the Keyboard icon in the Settings Manager
- Click the Application Shortcuts tab
- Click Add


http://wiki.xfce.org/faq

Sunday, June 12, 2011

Manually enabling the Intel driver for X11

create a file called /etc/X11/xorg.conf containing the following:

Section "Device"
Identifier "Configured Video Device"
Driver "intel"
EndSection

Section "Monitor"
Identifier "Configured Monitor"
EndSection

Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Configured Video Device"
EndSection


Ref: https://wiki.ubuntu.com/X/Bugs/Mavericki8xxStatus


framebuffer (fbdev) driver
==========================
This is a generic featureless driver like -vesa but works under KMS (-vesa does not work with KMS).


Kernel mode-setting (KMS)
=========================
shifts responsibility for selecting and setting up the graphics mode from X.org to the kernel. When X.org is started, it then detects and uses the mode without any further mode changes. This promises to make booting faster, more graphical, and less flickery.

Verifying KMS is loaded by
dmesg | grep drm

KMS is dependent on ACPI, so on some systems that actually support ACPI but for some reason Ubuntu disables ACPI, adding acpi=force to GRUB2 boot options may help KMS and the graphics card to load properly.


More at https://wiki.ubuntu.com/X/KernelModeSetting

Thursday, June 9, 2011

software licenses

GNU GPL
=========
หากเรานำ source code ไปทำการแก้ไข หรือ เขียนโปรแกรมขึ้นมาใหม่เพื่อให้เรียกใช้ function หรือ class หรือ library หรืออะไรก็แล้วแต่จาก source code ตัวนั้น โปรแกรมใหม่ที่เราทำขึ้นก็จะต้องมี license เป็น GPL ตามไปด้วย

ตัวอย่างของ GNU GPL คือ Linux
ดิสทริบิวชั่นต่างๆของลีนักซ์จะต้องเป็นของฟรี บริษัทหรือนักพัฒนาสามารถตั้งราคาสำหรับลีนักซ์ที่เป็นดิสทริบิวชั่นของตัวเองได้
กล่าวคือเมื่อนำซอร์สโค้ดของลีนักซ์ดิสทริบิวชั่นใดๆมาปรับปรุงแก้ไขให้กลายเป็นดิสทริบิวชั่นของตัวเองแล้ว อาจวางจำหน่ายลีนักซ์ดิสทริบิวชั่นใหม่ได้
แต่ต้องให้ซอร์สโค้ดไปด้วย

General Public License ไม่เปิดโอกาสให้นำโปรแกรมของคุณเข้าไปใช้ใน proprietary software.
เสรีภาพที่จะเผยแพร่สำเนาของซอฟต์แวร์เสรี (และคิดราคาสำหรับการจัดจำหน่ายในกรณีที่คุณต้องการ)
สามารถที่จะได้ source code มาในกรณีที่คุณต้องการ
สามารถแก้ไขหรือใช้ส่วนประกอบของซอฟต์แวร์นั้นในซอฟต์แวร์เสรีโปรแกรมใหม่
ในแต่ละครั้งที่คุณเผยแพร่โปรแกรม (หรืองานที่มีพื้นฐานจากโปรแกรม) ต่อไป ผู้รับจะได้รับอนุญาตโดยอัตโนมัติจากเจ้าของสิทธิให้สามารถที่จะทำซ้ำ เผยแพร่ หรือดัดแปลงโปรแกรม ภายใต้ข้อกำหนดและเงื่อนไขของสัญญานี้. คุณไม่สามารถวางข้อจำกัดเพิ่มเติมต่อการใช้สิทธิของผู้รับที่ได้มอบไปตามนี้
http://linux.sut.ac.th/download/SUTLinux/SUTinsFEC5308/gpl_thai.html

#กรณีศึกษา
D-Link (เอา GPL ไปใช้แล้ว ไม่แจ้ง + ปกปิด src) > http://www.blognone.com/node/3024
Monsoon > http://www.blognone.com/node/5880

สัญญาอนุญาตรุ่น 3 ส่งผลให้มีเหตุการณ์ขัดแย้งระหว่าง ลีนุส ทอร์วัลส์ผู้คิดค้นระบบลินุกซ์ และ ริชาร์ด สตอลแมนผู้เริ่มต้นสัญญาอนุญาตจีพีแอล
Ref: http://th.wikipedia.org/wiki/GPL


BSD Licenses
============
source code ที่ได้ทำการแก้ไขก็ไม่จำเป็นต้องส่งกลับ
แต่ขอให้แสดงไว้ในเอกสารว่ามีส่วนของโปรแกรมที่พัฒนาต่อมาจาก source code ที่เป็น BSD License
(มันต่างอะไรกับ Apache License เนี้ย ??)


GNU LGPL (Lesser General Public License)
========================================
หากเราทำการเขียนโปรแกรมขึ้นมาเรียกใช้ function หรือ class หรือ library หรืออะไรก็แล้วแต่จาก source code ที่เป็น LGPL
โปรแกรมใหม่ที่เราพัฒนาขึ้นไม่จำเป็นต้องเป็น LGPL
แต่ส่วนของ source code ชุดเดิมก็ยังคงเป็น LGPL อยู่


สัญญาอนุญาตสาธารณะทั่วไปแบบผ่อนปรนของกนู
ใช้สำหรับไลบรารีซอฟต์แวร์
Ref: http://th.wikipedia.org/wiki/GPL


GNU LGPL (Library General Public License)
==========================================
ซอฟต์แวร์ที่ใช้ไลบราลีที่มีลิขสิทธิ์แบบนี้จะมีผลทำให้ซอฟต์แวร์ นั้นมีลักษณะเป็น Free Software ไปด้วย
Ref: http://www.value.co.th/th/service/articles/FSF.htm



Apache Software License
========================
ให้แสดงในเอกสารว่าเราได้ใช้ source code หรือ library ที่เป็น Apache License
ส่วนโปรแกรมที่เราพัฒนาขึ้นมาใหม่จะใช้ license แบบไหนก็ได้


Creative Commons
================
1. แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกัน
2.


จุดที่ถกเถียงกันของ Open Source Initiative (OSI) กับ Free Software Foundation
=========================================================================
คือ ฝ่าย OSI นั้นถกเถียงอยู่ในกรอบของ Collaboration
ในขณะที่ทางฝ่าย FSF กลับถกเถียงอยู่ในกรอบของปรัชญาเรื่องเสรีภาพ
Ref: http://www.value.co.th/th/service/articles/FSF.htm


Copyleft
=========
สัญญาอนุญาตกลุ่ม copyleft มอบเสรีภาพให้ทุกคนสามารถคัดลอก ดัดแปลง ปรับปรุง และจำหน่ายงานได้
โดยมีเงื่อนไขว่าต้องยังคงรักษาเสรีภาพเดียวกันนี้ในงานที่ดัดแปลงแก้ไขมาจากงานดังกล่าว
http://www.sunnahstudent.com/forum/archive.php?topic=5640.0

Thanks
http://www.unzeen.com/article/1335/มารู้จักกับ-open-source-license-ในแบบต่างๆ

Sunday, June 5, 2011

Power Supply Wattage Calculator

http://support.asus.com/PowerSupply.aspx?SLanguage=en

http://www.extreme.outervision.com/psucalculator.jsp

http://educations.newegg.com/tool/psucalc/index.html


ประสพการณ์ PSU ไม่ดี
==============
(เช่น จ่ายไฟไม่นิ่ง, จ่ายไฟไม่พอ)
- MB พัง
- Ram พัง
Ref: http://community.thaiware.com/index.php/topic/282540-acaosoaouiaaoeacan-power-supply-eoaaezaeaei/

อาการที่บ่งบอกว่าไฟไม่พอ
===============
- เปิดสักพัก(เครื่องเริ่มร้อน พัดลมเริ่มดึงไฟเพื่อทำงานมากขึ้น) แล้วเครื่องดับ
- คอมพิวเตอร์ไม่ทำงาน
more : http://www.vcharkarn.com/vblog/74243/26

(HD เสียงดังแปลกๆ น่าจะเกี่ยวด้วย)

ข้อคิดในการเลือกซื้อ
=============
- ดูให้ดี ๆ ว่าแผง 12v นะจ่ายกระแสพอไหม อุปกรณ์รุ่นใหม่ ๆ มักกินไฟหนักที่ไฟตรงนี้
- Watt มาก ๆ ไม่ได้หมายความว่าจะกินไฟมากกว่า เป็นสเปคที่บอกว่าจ่ายไฟได้สูงสุดเท่าไหร่เท่านั้น
- power supply มักจะออกแบบมาให้จ่ายไฟได้มีประสิทธิภาพสูงสุดประมาณครึ่งหนึ่งของ rated watt เช่นรุ่น 500 Watt ก็จะไปทำงานได้ดีที่สุดช่วง 200-300 watt
ที่มา http://www.vcharkarn.com/vblog/74243/26