Tag Archives: Programming
Fibonacci Python
Java Performance Tuning
เมื่อเดือนที่แล้วมีโอกาสได้บรรยายเรื่อง “Java Performance Tuning” เลยเอาสไลด์มาแปะไว้ เผื่อใครมีเขียนโปรแกรมด้วยภาษา Java แล้วสนใจอยากเพิ่มประสิทธิภาพการทำงานของโปรแกรมมากขึ้น ก็สามารถศึกษาผ่านสไลด์นี้ได้ด้วยตัวเองได้ไม่ยาก โดยเนื้อหาจะแบ่งออกเป็น 3 ส่วนดังนี้
Introduction
- Why java slow?
- Tuning Strategy
- Start to tune
Profiling Tool
- Timing
- Garbage Collection
- Method Call
- All in one tool
Good code pratice
- Object creation
- String
- Exception, Asserttion, Cases, Variable
- Loops, Switch and Recursion
- I/O, Logging, and Console Output
- Appropiate Collection
ติดตั้ง Sun Java 6 บน Ubuntu Gutsy
ปกติแล้ว Ubuntu Gutsy จะมี Java SDK ที่เป็นเวอร์ชั่นของ GNU ซึ่งถ้าลองตรวจสอบเวอร์ชั่นของ Java แล้วจะได้ผลลัพธ์ดังนี้
atthakorn@chaos:~$ java -version
java version "1.5.0" gij (GNU libgcj) version 4.2.1 (Ubuntu 4.2.1-5ubuntu5)
Copyright (C) 2007 Free Software Foundation, Inc. This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
แต่ถ้าเราต้องการเปลี่ยนมาใช้ SDK ของ Sun สามารถทำได้โดยสั่ง install sun-java6-jdk ผ่าน terminal ดังนี้
atthakorn@chaos:~$ sudo aptitude install sun-java6-jdk
แล้ว ก็ให้ตอบตกลงไปเรื่อย ๆ จนกระทั่งการ download และ install เสร็จ default jvm ตอนนี้ยังคงเป็นของ gcj อยู่ ให้ใช้คำสั่งเพื่อดูชื่อ jvm ทั้งหมดในเครื่องเราเป็นอันดับแรก
atthakorn@chaos:~$ sudo update-java-alternatives -l
java-6-sun 63 /usr/lib/jvm/java-6-sun
java-gcj 1042 /usr/lib/jvm/java-gcj
จากนั่นให้ทำการอัพเดท java-6-sun เป็น default jvm โดยใช้คำสั่ง
atthakorn@chaos:~$ sudo update-java-alternatives -s java-6-sun
และทำการเพิ่มบรรทัดของ /usr/lib/jvm/java-6-sun ไว้บนสุดในไฟล์ /etc/jvm ดังนี้
atthakorn@chaos:~$ cat /etc/jvm
# This file defines the default system JVM search order. Each
# JVM should list their JAVA_HOME compatible directory in this file.
# The default system JVM is the first one available from top to
# bottom.
/usr/lib/jvm/java-6-sun
/usr/lib/jvm/java-gcj
/usr/lib/jvm/ia32-java-1.5.0-sun
/usr/lib/jvm/java-1.5.0-sun
/usr
ลองตรวจสอบ version java อีกครั้ง จะพบว่าตอนนี้ default jvm ในเครื่องเราเป็น java 6 เรียบร้อยแล้ว
atthakorn@chaos:~$ java -version
java version "1.6.0_03"
Java(TM) SE Runtime Environment (build 1.6.0_03-b05)
Java HotSpot(TM) Server VM (build 1.6.0_03-b05, mixed mode)
เริ่มต้นเขียนโปรแกรมด้วย C++
การเขียนโปรแกรมด้วยภาษา C++ นั้นไม่ได้ยากอย่างที่คิด ก็เหมือนกันกับเรียนเขียนโปรแกรมทั่ว ๆ ไป ลองอ่านพร้อม ๆ กับลงมือทำ (อย่าอ่านเฉย ๆ ) ว่าแล้วก็เริ่มต้นเลยดีกว่า โดยวันนี้ผมจะมาพูดถึงเบสิคขั้นพื้นฐานดังนี้
- โครงสร้างของโปรแกรม
- ตัวแปร ชนิดของข้อมูล และค่าคงที่
โครงสร้างของโปรแกรม
วิธีที่ง่ายที่สุดของการศึกษาการเขียนโปรแกรมก็คือ เรียนรู้จากตัวอย่าง เราลองมาดูตัวอย่างโครงสร้างโปรแกรมที่เขียนด้วย C++ ด้วย โปรแกรมยอดฮิต ที่ใคร ๆ ต้องรู้จัก ซึ่งก็คือการพิมพ์ “Hello World” ออกทางหน้าจอ
ตัวอย่างโปรแกรม
### ตัวอย่างโปรแกรม ###
// my first program in C++
#include <iostream>
using namespace std;
int main ()
{
cout << “Hello World!”;
return 0;
}
### สิ้นสุดตัวอย่างโปรแกรม ###
คำอธิบาย
- // my first program in C++
- แสดงตัวอย่างการ comment โดยการ comment ใน c++ แบบบรรทัดเดียวกัน จะใช้ ‘//’ เพื่อบอกโปรแกรมว่าตัวอักษรที่อยู่หลังจากตัวนี้จะถูก comment หมายเหตุ
การ comment ของ c++ มีได้สองแบบ
1) line comment คือการ comment แบบบรรทัดเดียว โดยเริ่มการ comment ได้ด้วย ‘//’ ที่จุดเริ่มต้นของการ comment
2) block comment คือการ comment แบบหลายบรรทัด โดย ‘/*’ แสดงการเริ่มต้นของ comment และ ‘*/’ แสดงการสิ้นสุดของการ comment
- #include <iostream>
- บรรทัดนี้เป็นการ import library พื้นฐานที่ชื่อ iostream เพื่อที่เราจะสามารถเรียกใช้ฟังก์ชั่นเกี่ยวกับ input/output ได้ (cout) ซึ่งจะยกตัวอย่างต่อไป
- using namespace std;
- เป็นการประกาศ namespace ที่ชื่อ std เพื่อระบุขอบเขตการใช้งานของตัวแปร
- int main () {}
- function ที่เป็นจุดเริ่มต้นของโปรแกรม c++ (เวลารันโปรแกรม ต้องมาเริ่มที่นี่ที่แรก) และฟังก์ชั่นนี้จะ return ค่าเป็น integer
- cout << “Hello World”;
- แสดงการเขียนโปรแกรมเพื่อพิมพ์ “Hello World!” ออกทางหน้าจอ โดย format ที่ใช้ คือ ชื่อฟังก์ชั่น (cout) ตามด้วย argument “Hello World!” และจบด้วย semicolon “;” เพื่อบอกการสิ้นสุดของบรรทัดนี้
- return 0;
- เพื่อบอกโปรแกรม c++ ให้จบการทำงานของฟังก์ชั่น main โดยค่า 0 หมายถึง โปรแกรมสามารถจบการทำงาน และทำงานได้อย่างถูกต้อง
แก้ไขหน้าเพจเพื่อนอย่างง่าย
แวะไปเยี่ยมเวบ www.iannnnn.com หลังจากไปไม่ได้เข้าไปดูประมาณ 2-3 ปี หน้าตาเวบไซต์เปลี่ยนไปเยอะเลย แบ่งเป็นหมวดหมู่มากขึ้น แต่ก็ยังคงเอกลักษณ์สมกับเป็น iannnnn เช่นเคย
เปิด article อ่านไปเรื่อย ๆ ไปเจอโค้ด javascript แปลก ๆ เลย copy มาให้เล่นกัน
javascript:document.body.contentEditable=’true’; document.designMode=’on’; void 0
เพื่อน ๆ ลอง copy โค้ดตัวนี้ทั้งบรรทัดไปแปะที่ URL ข้างบน จากนั้นก็กด Enter แล้วลองสังเกตดูว่ามีอะไรเกิดขึ้นบ้างง .. ?????
1 วินาที
2 วินาที
…
5 วินาที
แต่นแต๊นน พบสิ่งผิดปกติหรือยังเอ่ย ถ้ายังไม่พบ ก็ลองเอา cursor มาวางตรงหน้าเวบเพจนี้ที่ใดก็ได้ เพื่อน ๆ จะพบว่า เราสามารถแก้ไขข้อมูลได้ทั้งหน้าา ทั้งย้ายรูปภาพ แก้ไขข้อความ อื่น ๆ อีกจิปาถะ
“ว้าว แบบนี้ก็ดีสิ แบบนี้ก็เอาโค้ดนี้ไปแกล้งเวบไซต์คนอื่นก็ได้นี่นา แก้ให้เจ๊งกันไปเลยย” (คิดในใจ ) 
แต่อย่าเพิ่งตื่นเต้นไปครับ … ที่จริงหน้าที่ของ javascript บรรทัดนี้ ก็เพียงแต่ enable ความสามารถในการแก้ไขเนื้อหาในเวบเพจหน้าที่โหลดมาในปัจจุบันได้เท่านั้น ไม่สามารถไปแก้ไขข้อมูลจริง ๆ ได้ เป็นแค่โค้ดที่มีไว้เล่นสนุก ๆ ยามว่างเท่านั้นนน
ปล. ไว้คราวหน้าถ้าเจอโค้ดอะไรแปลก ๆ แบบนี้อีก จะเอามานำเสนอให้เพื่อน ๆ นะคับ
ปล. เอ้ออ เกือบลืมขอบคุณ www.iannnnn.com ที่นำมามาบอกเล่าและ www.digg.com ที่แจกจ่ายโค้ดนี้เพื่อความบันเทิงของเราคับ
มารู้จักกับ Ant กันเถอะ (ตอนจบ)
หลังจากเราเริ่มรู้จัก Ant กันคร่าว ๆ แล้ว มาวันนี้ผมก็จะนำเสนอการติดตั้ง Ant เพื่อการใช้งาน โดยสิ่งที่จำเป็น สำหรับการติดตั้งมีดังนี้
1. Java SDK ->> ดาวโหลดได้ที่ http://java.sun.com
2. Ant ->> ดาวโหลดได้ที่ http://ant.apache.com
การติดตั้ง
เริ่มต้นโดย Install Java SDK (โดย dir ของ Java ของผมจะเป็น C:\Program Files\Java\jdk1.6.0) และ แตกไฟล์ zip ของ ant โดยให้ไปไว้ที่ใดก็ได้ใน local drive ในที่นี้ผมจะไว้ที่ c:\ant แล้วก็ทำการเซ็ต classpath และ path ให้กับ Java และ Ant ดังตัวอย่างต่อไปนี้
ซึ่งการเซ็ต path นี้ เราจะสามารถเรียกใช้คำสั่ง ant.bat ที่ไดก็ได้ใน directory ปัจจุบัน
มารู้จักกับ Ant กันเถอะ (ตอนแรก)
แรก เริ่มเดิมทีผมก็ยังไม่รู้จักมักคุ้นกับ Ant มากเท่าไหร่ ว่ามันคืออะไร และใช้ทำอะไร ได้ยินมาบ้างจากพี่ที่บริษัทว่ามันคือ script ที่ใช้ในการพัฒนา Automate Build Tool
โอ้โฮแฮะ !!! มีคำว่า Build กับ Automate อยู่รวมกัน และก็โดยบังเอิญอีกนั่นล่ะ งานที่ผมต้องรับผิดชอบทำสัปดาห์ละหลาย ๆ ครั้ง ครั้งละเกือบชั่วโมงเต็ม มันมีคำว่า “Build” อยู่ด้วย ต่อมความสงสัยของผมก็ถูกกระตุกด้วย มด (Ant) ตัวนี้ ทำให้แสบ ๆ คัน ๆ มือ อยากจะลองศึกษาว่ามันคืออะไรกันแน่ เผื่อจะเอามาประยุกต์ในงานประจำของเราได้ด้วย คำว่า “Automate” มันอาจจะทำให้สิ่งที่ผมต้องทำนี้ ง่ายขึ้น เร็วขึ้น เผลอ ๆ อาจจะสั่งให้มันทำงานให้ผมทั้งหมดโดยที่ผมไม่ต้องทำเลยก็ได้ (ฮ่า ๆ ความขี้เกียจเริ่มบังเกิด)
ก็เลยไปค้นคว้าในอาจารย์คนเก่ง Google จนไปพบลิงค์ที่น่าสนใจเกี่ยวกับ Ant ที่ http://www.apache.org ซึ่งที่นี่เป็นแหล่งรวม Opensource project มากมายให้ศึกษา และนำไปประยุกต์ใช้งาน ที่ดัง ๆ ก็จะมี apache server และ Tomcat ซึ่งเป็น Java-base server เข้าไปที่ลิงค์ ant ->> http://ant.apache.org จากนั้นก็เริ่มศึกษาจนได้รู้ว่าอะไรคือ Ant และมันทำงานอย่างไร ดังนี้
Ant หรือมีชื่อเต็ม ๆ ว่า Apache Ant คือ Java-based build tool โดยเรามีหน้าที่ในการพัฒนา script สำหรับสั่งให้ Ant ทำงานแทนเราได้ทุกอย่างเกี่ยวกับกระบวนการ Build Package (ขอยืนยันว่าทุกอย่างจริง ๆ)
![]() |
หลายคนอาจจะ สงสัยว่ากระบวนการ Build package นั้นคืออะไร และมีขั้นตอนอะไรบ้างง ผมก็จะอธิบายคร่าว ๆ ตามประสบการณ์ของผม (อาจจะเป็นแค่ส่วนหนึ่งของกระบวนการ Build Package และอาจจะแต่งต่างกันในส่วนย่อยของแต่ละกลุ่มของนักพัฒนา) ได้ดังนี้
การ Build Package คือ กระบวนการทั้งหมดที่เกี่ยวกับการ checkout โค้ดจาก repository แล้วนำมา compile จนได้ class ไฟล์ แล้วนำมารวมกันในรูปของ Jar Excutable file เพื่อเตรียมอัพโหลดไปที่ server (ทั้งโค้ดที่ทำการ Tag เวอร์ชั่น และ ตัว executable file ที่พร้อมให้ดาวโหลดไปใช้งาน) สรุปง่าย ๆ เป็นข้อหลัก ๆ ดังนี้
1. Checkout โค้ดจากเซิร์ฟเวอร์ (Repository)
2. Compile ไฟล์ .java ให้เป็น .class
3. อัดข้อมูลให้เป็น Jar file (Excutable file)
4. แช่แข็ง package ณ จุดบิ้วในเวอร์ชั่นนั่น ๆ (Version Tagging to server)
5. อัพโหลดตัว excutable package ขึ้น server
หากแต่จะมีขั้นตอนย่อย ๆ มากกว่านี้ …
โอ้โฮ อีกที … ขึ้นตอนที่กล่าวข้างตอน กินเวลาร่วม ชั่วโมง หรือมากกว่านั้น แต่ผมกำลังจะสามารถทำได้ด้วยการดับเบิ้ลคลิ๊กเมาส์เพียงครั้งเดียวโดยใช้ Ant อย่างนี้ไม่ลองไม่ได้ซะแล้วววว แต่วันนี้ขอพักแค่นี้ก่อน เดี๋ยวมาต่อกันภาค 2 ว่าเราจะติดตั้ง Ant ลงในเครื่องเราอย่างไร และเราจะใช้งาน Ant ได้อย่างไร …
