RSS

Author Archives: Junlapong

About Junlapong

Coding Lover, Opensource, Liverpool FC :)

สรุปที่ไปเรียน Pentaho Data Integration

เมื่อวันเสาร์ที่ 10 มี.ค. 2012 ได้ไปเรียนคอส Pentaho กับพี่รูฟ @roofimon ที่ @tarad จัดโดยพี่หนุ่ม @zyracuze โดยคอสนี้เป็นการแลกเปลี่ยนความรู้ระหว่าง @tarad กับทาง @opendream

เริ่มต้นด้วยการแนะนำเกี่ยวกับ Data Warehouse ว่าเป็นเรื่องของการจัดเก็บและจัดการข้อมูล โดยปกติแล้วข้อมูลจะแบ่งประเภทได้ดังนี้

  • Transactional เป็นข้อมูลหน่วยย่อยที่สุด ที่มีการเก็บอยู่ในระบบต่างๆ เช่น Daily Sales, Order จะเป็นข้อมูลที่ realtime และมีการเก็บรายละเอียดเยอะ ทำให้มีข้อมูลขยะปนอยู่มาก การจัดเก็บข้อมูลมีความหลากหลาย เช่น เป็น text file, เป็น table ใน database เป็นต้น
  • Analytical การนำข้อมูลมาจัดใหม่ เพื่อให้มีรูปแบบเหมาะสำหรับนำไปใช้วิเคราะห์ได้สะดวก
  • Data Mining การเตรียมข้อมูลสำหรับใช้พยากรณ์แนวโน้มในอนาคต

แนวคิดการทำ Data Warehouse 2 แบบ ได้แก่

  • Bill Inmon : Normalize, Top-Down เป็นการมองภาพใหญ่ แบบ Enterprise Data Warehouse ออกแบบโดยการดูภาพรวมทั้งหมดขององค์กร
  • Ralph Kimball : Dimensional, Bottom-Up เป็นการออกแบบโดยเริ่มทำจากข้อมูลขนาดเล็กก่อน แล้วค่อยๆ เพิ่ม

แนวทางที่นิยม คือเริ่มทำจากการออกแบบ Data Warehouse ขนาดเล็กพอได้รูปร่างตามวิธีของ Ralph Kimball จากนั้นไปใช้วิธีแบบ Bill Inmon เพื่อวาง Standard แล้วค่อยทำเข้ามาหากันตรงกลาง

Pentaho เป็นโครงการ open source สำหรับงาน Business Intelligence ประกอบด้วยเครื่องมือสำหรับการทำ reporting, dashboard, data mining, workflow และ ETL

Pentaho แบ่ง license เป็น 2 แบบคือ

  1. Community Edition โปรแกรมต่างๆ สามารถ download มาใช้งานได้ฟรี
  2. Enterprise Edition คิดค่าบริการ Support เมื่อต้องการความสามารถที่สูงขึ้น

สำหรับการเรียนครั้งนี้เน้นที่การหัดใช้งานเครื่องมือสำหรับทำ ETL (Extract-Transform-Load) คือ PDI (Pentaho Data Integration) มีโค๊ดเนมว่า Kettle

ความน่าสนใจของ PDI คือการสร้าง flow เป็น diagram โดยการวาง control ที่มีหน้าที่ต่างๆ เป็นขั้นตอนและลากเส้นกำหนดทิศทางการทำงาน ซึ่งมี control ให้ใช้งานมากมาย เสร็จแล้วสามารถ save เป็นไฟล์นามสกุล *.ktr (kettle transformations) เพื่อนำไปใช้งานต่อไป

โปรแกรม PDI นั้นเป็น SWT เหมือนกับ Eclipse ต้องการ Java Runtime สำหรับทำงาน

หน้าตาของโปรแกรม PDI เป็นแบบนี้

ผู้สอนได้แนะนำให้ใช้งาน control ต่างๆ ดังนี้

กลุ่ม Input

  • Fixed file input ใช้อ่านข้อมูลจากไฟล์ที่มีการกำหนดเป็น block ในแต่ละ column มี GUI ที่ใช้กำหนดขนาดของแต่ละ block ได้ง่าย
  • Text file input ใช้อ่านข้อมูลจาก flat database เช่น CSV, file ที่เก็บข้อมูลโดยมีตัวแบ่ง column
  • Table input โหลดข้อมูลจากตารางใน database

กลุ่ม Transform

  • Calculator ใช้สำหรับการคำนวณ
  • Select values ใช้ในการเลือกข้อมูล
  • Sort rows ใช้เรียงลำดับข้อมูล

กลุ่ม Scripting

  • Formula ใช้สำหรับกำหนดสูตรต่างๆ
  • Modified Java Script Value ใช้ JavaScript เพื่อกำหนดเงื่อนไข

กลุ่ม Statistics

  • Group by ใช้สำหรับ aggregate ต่างๆ เช่น Sum, Average

กลุ่ม Output

  • Text file output นำข้อมูลที่ได้จากการ transform สร้างเป็น text file
  • Table output นำข้อมูลไป insert/update ลงตารางใน database

หลังจากเรียยโดยการทำตามตัวอย่างแล้ว ก็มีโจทย์ให้ลองทำ
มี input เป็น text file ชื่อ ccaa.txt เป็นข้อมูลของกรมการปกครอง ที่มีข้อมูลรหัสพื้นที่และชื่อของเขตต่างๆ มีรูปแบบดังนี้

10000000|กรุงเทพมหานคร|
10010000|เขตพระนคร|
10010100|พระบรมมหาราชวัง|
10010200|วังบูรพาภิรมย์|
10010300|วัดราชบพิธ|
10010400|สำราญราษฎร์|
10010500|ศาลเจ้าพ่อเสือ|

ต้องการแยกข้อมูลออกมาเป็นรหัสและชื่อของเขตต่างๆ แบ่งเป็น จังหวัด, อำเภอ และตำบล เพื่อนำไปใช้งานต่อ

เมื่อดูจากรูปแบบของรหัสเขต พบว่าสามารถจัดกลุ่มเป็นรหัสเพื่อแบ่งระดับได้ดังนี้
PP|AA|TTTT

โดยตำแหน่งของ PP คือรหัสของจังหวัด, AA คือรหัสอำเภอ และ TTTT คือรหัสตำบล

ขั้นตอน

  1. ใช้ Text file input เพื่อระบุ path ของ source file และจัดข้อมูลลง field
  2. ใช้ Formula เพื่อแยกรหัสออกเป็น รหัสจังหวัด, อำเภอ และตำบล โดยเลือกใช้การตัดคำตามตำแหน่งตามที่ได้วิเคราะห์ไว้


  3. ใช้ Modified Java Script Value เพื่อเขียน script สำหรับกำหนดว่าข้อมูลแต่ละแถวเป็นประเภทอะไร

  4. ใช้ Switch / Case เพื่อแยกข้อมูลแต่ละแถวไปยังแต่ละกลุ่ม


  5. ใช้ Select values 3 อันเพื่อเลือก field ที่ต้องการนำไปใช้งานในแต่กลุ่ม
  6. ใช้ Table output เพื่อ insert/update ข้อมูลลงตารางตามประเภทของเขต

ผลลัพท์

เมื่อ execute โปรเจ็คแล้ว จะทำการ transform ข้อมูลจาก text file เข้าสู่ database ที่สร้างตารางสำหรับเก็บข้อมูลรอไว้ ดังนี้

การนำไปใช้
เมื่อได้ไฟล์ *.ktr แล้ว จะนำไปใช้งานโดยใช้คำสั่งดังนี้

$ /path/to/pdi/pan.sh /file:/path/to/kettle/transform/file.ktr

ถ้าต้องการให้ทำงานเป็น schedule ก็สามารถนำไปตั้ง contrab ได้

สรุป

สำหรับโปรแกรมเมอร์แล้ว ถ้าต้องการเครื่องมือช่วยในการ transform data ตัว PDI จะช่วยลดเวลาลงได้ มากกว่าไปเขียนโปรแกรมเอง หรือถ้าเป็น SE, SA, Tester จะนำไปใช้สร้าง Test Data ก็ช่วยได้เยอะ

นอกจากนี้ PDI ยังมี control ที่น่าสนใจเช่น MongoDB Input, Json Input/Output และอื่นๆ อีกมากมาย คิดว่าเสียเวลาเรียนรู้แล้วน่าจะนำไปทำอะไรได้อีกเยอะ

เพิ่มเติม

  • การกำหนดค่า Database Connection สำหรับ MySQL JDBC โดยcolumn ที่เป็น VARCHAR ที่กำหนด collection เป็น utf8 เมื่อ update data แล้วแต่กลายเป็น ????? วิธีแก้คือให้เพิ่ม Option characterEncoding = UTF8



  • โปรแกรม PDI version 4.2 บน Ubuntu 11.04 64 bit เมื่อเปิด Formula จะเกิด error เนื่องจากไม่มี xulrunner ให้ติดตั้งก่อนโดยใช้คำสั่งดังนี้
    sudo apt-get install xulrunner-1.9.2

    จาก: Problem on Ubuntu 11.04: java.lang.UnsatisfiedLinkError: no swt-mozilla-gtk-3346

Link อื่นๆ ที่น่าสนใจ

 
Leave a comment

Posted by on Mon March 26, 2012 in Technical

 

Tags: , ,

บันทึกเรื่องต่างๆ ตอนย้ายระบบจาก Windows มาเป็น Linux

หลังจากใช้ Linux เป็น OS หลักมาพักใหญ่ และย้าย Development Environment มาอยู่บน Linux ก็พบปัญหาเรื่องความไม่เข้ากันของระบบไฟล์นิดหน่อย เลยมาบันทึกไว้เผื่อจะต้องใช้อีกในอนาคต

เรื่องแรกเลยคือย้าย source code ของ project มา ต้องการลบ directory ของ SVN ออก แต่ใช้ Nautilus แล้ว search directory .svn ไม่เจอทั้งๆ ที่เลือกแสดง Hidden ก็เห็น เลยต้องใช้ command line เอา

$ find -name "\.svn" -exec rm -rf {} \;

ต่อมาเป็นเรื่องของ MySQL การ backup & restore database มีปัญหานิดหน่อย คือไฟล์ backup database ของ project ที่ได้มาเค้า export มาจาก tools ชื่อ Navicat บน Windows เมื่อเอา import เข้า MySQL บน Linux แล้วไฟล์เกิด error เอาเข้าได้ไม่ครบ ที่เอาเข้าได้ก็มีปัญหาเรื่อง encoding
แต่ลอง import เข้า MySQL บน Windows แล้วไม่มีปัญหา คิดว่าคงเป็นเรื่อง encoding ของไฟล์ เลยลอง export ออกมาใหม่ แล้วเอาไป import เข้าใน MySQL ใน Linux พบว่าใช้ได้แฮะ แถมขนาดไฟล์เล็กกว่าที่ใช้ Navicat เยอะเลย

คำสั่ง export/import ใช้ดังนี้

# export mysql data to sql script
$ mysqldump -u root -p dbname > script.sql

# import mysql data from script
$ mysql -u root -p dbname < script.sql

เรื่องถัดมาก็เป็นของ MySQL มีปัญหาเกี่ยวกับการตั้งชื่อไฟล์ของตาราง คือ MySQL จะใช้ชื่อของตารางเป็นชื่อไฟล์ตอนเก็บด้วย (ชื่อ database จะใช้ตั้งชื่อ directory) แต่ว่า MySQL ของแต่ละ OS มี default config เรื่องนี้ต่างกันใน เช่น Linux นั้นการตั้งชื่อไฟล์จะเป็น case sensitive แต่บน Windows เป็น case insensitive ทำให้การเปรียบเทียบชื่อของตารางใน SQL นั้นใน Linux ไม่สามารถใช้ชื่อที่ case ต่างกันได้ แต่ Windows ใช้ได้
เช่น ชื่อตารางเป็น table_name ควรจะอ้างอิงได้ทั้ง table_name, TABLE_NAME, Table_Name, etc.

SELECT column FROM TABLE_NAME

เลยต้องปรับ config ของ MySQL ใน Linux นิดหน่อยให้สามารถใช้ได้ โดย
เปิดไฟล์ /ect/mysql/my.cnf ด้วยสิทธิ์ root แล้วทำการเพิ่ม config ใน section ของ mysqld ดังตัวอย่าง

[mysqld]
...
lower_case_table_names=1

รายละเอียดเพิ่มเติมดูที่ Identifier Case Sensitivity

จบแล้ว 🙂

 
Leave a comment

Posted by on Fri February 24, 2012 in Technical

 

Tags: , ,

Backup iPad Apps

ผมไม่ใช่ Apple User แต่พอดีมีคนฝากให้ช่วย update firmware ของ iPad จาก version 4.3.x เป็น 5.0.1 ก็ได้ google เป็นที่พึ่งเหมือนเคย การ update firmware นั้นก็ไม่ยากอะไรแค่ทำตามขั้นตอนใน iTunes

แต่มีจุดนึงที่ทำให้ต้องหาข้อมูลเพิ่ม เพราะตอน download App ไม่ได้ทำที่ iTunes เครื่องผม ทำให้ไม่มี App backup ไว้ที่ library และการ update firmware ของ iOS นั้นจะทำการ sync ข้อมูลจาก library ใน iTunes ไปยัง iPad และจะลบ App ต่างๆ ออกก่อน ทำให้ App ที่ติดตั้งไว้หายหมด

เมื่อดูขนาดของ App ที่ติดตั้งไว้ใน iPad ราว 7 GB แล้วนึกถึงว่าต้อง download และ install ใหม่ต้องใช้เวลานานเหมือนกัน ปัญหามันอยู่ตรงนี้แหละ กว่าจะ download ใหม่ก็นาน แล้วเค้าติดตั้ง App อะไรไว้บ้างต้องมา list ไว้ก่อน ซึ่งเยอะเหมือนกัน คิดแล้ววุุ่นวาย จึงได้ลองถามเพื่อนๆ ที่ใช้ iPad ดูว่ามีวิธี backup app ไว้ก่อนได้มั๊ย หลายคนก็ไม่แน่ใจเพราะปกติจะทำที่คอมตัวเอง พอดี @toobaya บอกให้ลองดูที่เมนู Transfer Purchases แล้วพบว่าทำได้ เลยมาบล๊อกสรุปวิธีการ backup App ของ iPad ไว้หน่อย (เกริ่นซะยาว ฮ่าๆๆ)

การ backup App ของ iPad มีขั้นตอนดังนี้

  1. เมื่อต่อสาย data link ระหว่าง iPad กับคอมแล้ว จะมีเมนู DEVICES แสดงขึ้นมา
  2. ให้ click ขวาที่ชื่อ iPad แล้วเลือกที่เมนู Transfer Purchases
  3. โปรแกรมจะเริ่ม Transfer App ที่ติดตั้งใน iPad มาไว้ที่คอมของเรา ระหว่างนี้หน้าจอของ App จะเป็นสีจางๆ
  4. เมื่อเสร็จแล้วหน้าจอที่แสดง App ทั้งฝั่ง Sync Apps และหน้าจอของ iPad จะกลับมาแสดงเป็นสีปกติ003_cr
  5. ตรวจสอบขนาดของ drive C: อีกครั้งเพื่อความชัวร์ พบว่ามีขนาดเพิ่มขึ้นประมาณ 7GB จริงๆ
  6. ทำการ update firmware ตามขั้นตอนปกติ
  7. ทำการ Sync App กลับไปยัง iPad และลองเช็คดูว่า App ต่างๆ กลับมาเหมือนเดิมหรือเปล่า

เป็นอันเสร็จเรียบ แต่ด้วยความซนลองกดนั่นนี่เรื่อยเปื่อย เลยทำให้ App ใน iTunes library หายหมด แล้วดันกด Sync ไปที่ iPad เลยทำให้ App ใน iPad หายเรียบ เลยต้องเหนื่อยหาวิธีแก้กันอีก เอาไว้ค่อยมาบล๊อกเล่าให้ฟังใหม่ครับ 🙂

 
1 Comment

Posted by on Sat November 19, 2011 in Technical

 

Tags: , ,

Install LAMP Server on Ubuntu

ที่ผ่านมาเวลาติดตั้ง LAMP Server ใน Ubuntu Desktop ผมจะติดตั้ง Apache, MySQL, PHP และ module ต่างๆ เองตามลำดับ ก็จะใช้เวลานิดหน่อย แต่พอดีไปเจอวิธีการติดตั้ง LAMP Server แบบกระชับและได้ผลเหมือนกันจาก Install LAMP on Ubuntu โดยคุณ Linerd เลยมา blog ไว้เผื่อจะได้ใช้งานอีก โดยขั้นตอนมีดังนี้

1) เริ่มทำการติดตั้ง package lamp-server ด้วยคำสั่ง

sudo apt-get install lamp-server^

2) ทำการยืนยันการติดตั้ง package และ download เมื่อเสร็จแล้วจะแสดงหน้าจอให้ใส่ root password ของ MySQL

3) เมื่อเสร็จแล้ว ทดสอบ Apache โดยเปิด web browser ไปที่ http://localhost ถ้าแสดงข้อความ “It Works!” แสดงว่า Apache ทำงานได้แล้ว

4) ทดสอบ PHP โดยสร้าง php script ไว้ที่ Document Root ของ Apache ดังนี้

sudo nano /var/www/info.php

จากนั้นเขียน php script ดังนี้

 <?php phpinfo(); ?>

บันทึกไฟล์และเปิด web browser ไปที่ http://localhost/info.php จะเห็นตารางแสดง information ต่างๆ ของ PHP

5) ทดสอบ MySQL โดยพิมพ์คำสั่งที่ terminal ดังนี้

$ mysql -u root -p

กด Enter แล้วใส่ password ถ้าสามารถเข้าใช้งานได้ถูกต้องจะแสดง MySQL promt ทดสอบเรียกดู database ด้วย SQL

mysql> SHOW DATABASES;

และออกจาก MySQL Promt โดยพิมพ์

mysql> \q

6) ติดตั้ง phpMyAdmin และ package ที่เกี่ยวข้องด้วยคำสั่ง

sudo apt-get install libapache2-mod-auth-mysql phpmyadmin
  • จะมีหน้าจอขึ้นมาให้เลือกว่าจะติดตั้งกับ web server อะไร ให้เลือก apache2
  • ถัดมาจะถามเพื่อให้สร้าง database config ของ phpmyadmin ด้วย dbconfig-common ให้เลือก Yes
  • ถัดมาจะให้กำหนด password ของ database phpmyadmin
  • จากนั้นจะถาม root password ของ MySQL เพื่อใช้สร้าง database ให้กับ phpmyadmin

7) เนื่องจากการติดตั้ง phpmyadmin จะมีการเพิ่ม apache config เพื่อชี้ไปยัง path ของ phpmyadmin จึงต้องทำการ restart apache ก่อน โดยใช้คำสั่ง

sudo /etc/init.d/apache2 restart

หรือ

sudo service apache2 restart

8 ) ทดสอบ phpMyAdmin โดยเปิด web browser ไปที่ http://localhost/phpmyadmin จะแสดงหน้าจอให้ login เข้าใช้งาน ให้ใส่ user root และ password ตามที่กำหนดไว้

เป็นอันเสร็จสิ้นการติดตั้ง LAMP Server 😀

Link อื่นๆ ที่น่าสนใจ

 
Leave a comment

Posted by on Mon October 24, 2011 in Technical

 

Tags: , , , , , ,

วิธีลบ LAMP Server ใน Ubuntu แบบหมดจด

หลังจากทดลองใช้ XAMPP ดูสักพัก แล้วแล้วพบปัญหาเล็กน้อย เวลาใช้ php cli เพื่อรัน php script ผ่าน command line เพราะ php ของ XAMPP นั้นอยู่ที่ /opt/lampp/bin/php แต่ path ปกติของ php ทั่วไปจะอยู่ที่ /usr/bin/php เพื่อจะได้ไม่ต้องมาคอยแก้ path ของ php เลยหันกลับมาใช้ LAMP ดีกว่า

แต่ตอน install LAMP เจอ error ของ php module บางตัวไม่สมบูรณ์ เพราะก่อนหน้าที่จะใช้ XAMPP ก็ลง php ไว้นิดหน่อย แถมพอลง apache, mysql เพิ่มเข้าไป ยังเจอปัญหาใช้งาน php กับ mysql ไม่ได้อีก หลังจากไล่ลบ package ต่างๆ แล้วลงใหม่ เสียเวลาอยู่นาน เลยลอง google หาวิธีลบแบบหมดจดดู ไปเจออันนี้ Remove LAMP in Ubuntu เลยเอามา blog ไว้เผื่อวันหลังจะได้ใช้อีก 🙂

คำเตือน: คำสั่งต่อไปนี้จะลบ package ที่เกี่ยวกับ apache, mysql และ php ออกจากระบบทันทีโดยไม่แจ้งเตือน

dpkg -l *apache* *mysql* *php* phpmyadmin | grep ^ii | awk '{ print $2}' | xargs sudo apt-get -y purge --auto-remove

สามารถตรวจสอบความหมดจดว่ายังมี package ไหนไม่ถูกลบได้ด้วยคำสั่งนี้

dpkg -l *apache* *mysql* *php* phpmyadmin | grep ^ii | awk '{ print $2}'
 
Leave a comment

Posted by on Mon October 17, 2011 in Technical

 

Tags: , ,

Ubuntu with OS X Lion theme

post นี้ขอ draft ไว้ก่อน เพื่อรวบรวม Link เกี่ยวกับการเซ็ตธีมของ Ubuntu 11.04 ให้เหมือนกับ OS X Lion หลังจาก Ubuntu 11.10 ออกแล้วจะลองดูอีกทีว่าใช้ได้หรือเปล่า

Ubuntu OSX Lion Theme

Reference

 
Leave a comment

Posted by on Wed October 5, 2011 in Technical

 

Tags: , ,

How to disable Bluetooth at start up in Ubuntu

ผมใช้ laptop Lenovo Thinkpad T400 หลังจากติดตั้ง Ubuntu 11.04 desktop พบว่าเมื่อ boot เข้าใช้งาน Bluetooth จะถูกเปิดอัตโนมัติทุกครั้ง ซึ่งปกติจะไม่ค่อยได้ใช้ Bluetooth เท่าไหร่และเป็นการเปลืองพลังงาน จึงลอง search หาจาก google พบว่ามีคนมีปัญหานี้เหมือนกัน และมีคนแนะนำวิธีไว้ที่นี่ [SOLVED] How do I disable bluetooth on boot up?
คุณ gradinaruvasile ได้แนะนำวิธีโดยให้ใช้คำสั่ง rfkill

$rfkill block bluetooth

แต่เนื่องจากเป็น soft block เมื่อ reboot แล้ว Bluetooth ก็จะกลับมาเปิดเหมือนเดิม จึงมีคนแนะนำให้ไปเพิ่มไว้ที่ไฟล์ /etc/rc.local (ต้องใช้ root permission) ก็พบว่าสามารถปิด Bluetooth ไม่ให้เปิดอัตโนมัติได้แล้ว 🙂

และถ้าต้องการเปิดใช้งาน ก็ใช้คำสั่ง

$rfkill unblock bluetooth

นอกจากนี้เราสามารถดูสถานะการเปิด/ปิดของอุปกรณ์ wireless ต่างๆ ด้วยคำสั่ง

$rfkill list
 
2 Comments

Posted by on Tue October 4, 2011 in Uncategorized

 

Tags: , , ,