18 May 2006

Google Web Toolkit

อ่านจาก Google blog แล้วขอเอา URL ของ Google Web Toolkit มาจดไว้หน่อย ไว้มีโอกาสค่อยลองเล่น เพราะตอนนี้ก็กำลังวางแผนแล็บวิชา database สำหรับเทอมหน้าอยู่เหมือนกัน ตอนนี้ตกลงกับอาจารย์อีกท่านได้ว่า จะสอนทั้ง MySQL (+PHP) และ Oracle 10g XE (+JSP/Servlet) แต่ก็กำลังคิดๆ อยู่เหมือนกัน เพราะคนสอนสนุก แต่เด็กจะเป็นไงบ้างก็ไม่รู้ จะว่าไปตอนนี้ Ajax ก็กำลังมาแรง ถ้ามีโอกาสก็น่าสอน

17 May 2006

MacBook

ตามข่าวจาก ITmedia ในที่สุด Apple ก็ออกโน้ตบุครุ่นใหม่ MacBook ซึ่งเป็นรุ่นที่จะมาแทนที่ iBook และ PowerBook 12" คราวนี้มีสองสีขาวกับดำ เฉพาะรุ่นท็อปใช้สีดำ ส่วนอื่นๆ ก็ไม่ต่างจาก MacBook Pro มาก แต่ที่ชอบก็คือจอ 13" กับน้ำหนัก 2.36 กก. เพราะเป็นพวกไม่ชอบโน้ตบุครุ่นจอใหญ่ๆ หนักๆ เท่าไหร่ มีความรู้สึกว่าโน้ตบุคน่าจะเล็กๆ เบาๆ ดีกว่า

Update: เมืองไทยก็เริ่มตั้งราคาขายแล้ว ไม่ถูกแฮะ
Update: MacBook: First Impression by PC Watch
Update: เปิดตัวอย่างเป็นทางการที่เมืองไทยแล้ว รุ่นท๊อป 61,500 (ไม่รวม vat)

08 May 2006

pdfLaTeX กับฟอนต์

วันก่อนเขียนเปเปอร์ด้วย pdfLaTeX แล้วรู้สึกว่าไฟล์ pdf ที่ได้ ใช้ฟอนต์ไม่เหมือนกับตัวอย่างที่ให้มา ทั้งๆ ที่ก็ทำตามวิธีการที่อธิบายมาทั้งหมด ลองหาไปหามา เลยเจอว่า pdf ของเรามีการ embed ฟอนต์ (Nimbus Roman No9 L สำหรับ Times) ลงไปในไฟล์ ในขณะที่ไฟล์ตัวอย่างเขาในฟอนต์มาตรฐานที่มากับ Adobe Reader ทำให้หน้าตาของฟอนต์ Times ไม่เหมือนกัน สุดท้่ายสาเหตุอยู่ที่การกำหนดไฟล์ font map สำหรับ pdfTeX ซึ่งจะกำหนดให้ดาวน์โหลดฟอนต์ไปด้วยเสมอเพื่อความปลอดภัย จะได้มีฟอนต์แสดงได้ทุกที่ (แต่เดี๋ยวนี้คงไม่จำเป็นเท่าไหร่แล้วมั้ง) จดวิธีแก้ไว้กันลืม แก้ไฟล์ /etc/texmf/updmap.d/00updmap.cfg ให้เป็น

pdftexDownloadBase14 false

จากนั้นก็ update map ด้วยคำสั่ง

$ sudo updmap-sys
$ updmap

22 February 2006

กลับสู่โลก Broadband

ช่วงนี้มีแต่เรื่องยุ่งๆ เลยไม่มีเวลาเขียนอะไรเลย อยู่ที่ทำงานก็งานเยอะ ทั้งเตรียมสอน งานวิจัย และคุยกับนักศึกษา (งานหลังนี้บางทีก็กินเวลาเยอะเหมือนกัน) อยู่บ้าน(หอ) ก็ไม่ค่อยได้ใช้เน็ต เพราะขี้เกียจ แถมโมเด็มก็ยังช้าอีกต่างหาก แต่วันนี้ได้กลับมาใช้ ADSL อีกครั้งหนึ่ง เพราะที่หอเขาเปิดบริการ ADSL แล้ว ทำให้ได้กลับมาสู่โลก broadband อีกครั้ง แม้ว่า broadband นี้จะช้ากว่าเดิมเยอะมาก ไหนๆ เขียนแล้วก็ขอบ่นเก็บไว้ดีกว่า จะว่าไปแล้วการเป็นอาจารย์ ก็เป็นงานที่เหนื่อยเหมือนกันนะ ตั้งแต่วางแผน เตรียมการสอน จะสอนยังไงถึงจะทำให้เด็กเข้าใจ จะสอนยังไงถึงจะไม่ยากเกินไป ซึ่งตรงนี้รู้สึกว่าตัวเองยังทำได้ไม่ดีนัก เพราะบางเรื่องที่ตัวเองรู้สึกว่าง่าย แต่มันกลับเป็นเรื่องยากสำหรับนักศึกษา แต่จะว่าไปนักศึกษาก็ยังดูขาดความกระตือรือร้นในการเรียน ยังรู้สึกว่าเขาเรียนกันเพื่อคะแนนอย่างเดียว ไม่ได้เรียนเพื่อความรู้ มันทำให้ไม่เกิดความสนุกในการเรียน ยังจำได้ว่าสมัยเรียนจะรู้สึกสนุกกับแต่ละเรื่องที่อาจารย์สอนมาก อยากรู้ไปหมดซะทุกอย่าง (ตอนนี้ก็ยังเป็นอยู่ ขนาดสอนเองก็ยังรู้สึกสนุกกับการอ่านหนังสือเตรียมสอน) ตอนนี้ก็เลยพยายามจะทำยังไงก็ได้ ให้นักเรียนรู้สึกสนุกกับการเรียนมากกว่านี้ รู้สึกสนุก หรือเห็นความสวยงามของ programming มากกว่านี้ ถ้าทำได้อย่างนี้ชีวิตของพวกเขาคงจะมีความสุขกว่าตอนนี้ขึ้นเยอะเลย เพราะตอนนี้ดูเหมือนว่าอะไรก็ไม่สนุกซักอย่าง ไม่อยากทำอะไรเลย มีสนุกอยู่ไม่กี่คน

29 December 2005

Conditional Expression

ภาษา C จะมี conditional expression (?:) ซึ่งทำหน้าที่เป็น if statement สำหรับ expression โดยเฉพาะ เช่น

int a, b;
...
a = b==1 ? 1 : 2;
...

จะกำหนดค่าของ a เป็น 1 หรือ 2 ขึ้นอยู่กับค่าของ b ดังนั้น conditional expression ในกรณีนี้ จึงทำงานเหมือน

if (b==1)
  a=1;
else
  a=2;

เมื่อวานนี้หลังจากลองทำการบ้านแล็บที่ให้นักศึกษาไป เพิ่งรู้ว่าภาษาซี จะกำหนด type ของ conditional expression ในเวลา compile โดยส่วนใหญ่อาศัยกฎ implicit cast เลยขอจดเอาไว้หน่อย เช่น

int a,b;
int i;
float f;
...
a = b==1 ? i : f;
...

Type ของ conditional expression นี้ จะเป็น float เนื่องจากมี int กับ float เป็น operand ที่ 2 กับ 3 จึงเป็นไปตามกฎคือ เปลี่ยน int เป็น float ดังนั้น ใน expression นี้ ถึงแม้ว่า b จะมีค่าเท่ากับ 1 ก็จะเกิดการ promote ค่า i ให้เป็น float ก่อน แล้วจึง demote กลับไปเป็น int อีกครั้งเวลากำหนดค่าให้ a

24 December 2005

สร้างโปรแกรมเครื่องคิดเลขด้วย flex กับ bison

ช่วงนี้ไม่ได้เขียนเรื่องใหม่ๆ เนื่องจากมีภาระอยู่กับการเตรียมสอน เลยเอาเรื่องเกี่ยวกับการใช้ flex กับ bison ซึ่งเป็นเครื่องมือสำหรับสร้างคอมไพเลอร์ที่กำลังสอน มาเขียนลงไว้หน่อยเพื่อเตือนความจำตัวเอง และอาจจะเป็นประโยชน์ต่อคนอื่นๆ ที่กำลังจะใช้ด้วย

เริ่มจาก flex ซึ่งเป็นเครื่องมือสำหรับสร้าง lexical analyzer ซึ่งส่วนของคอมไพเลอร์ที่ใช้วิเคราะห์เพื่อแบ่งข้อมูลเข้า (ในที่นี้คือโปรแกรม) ออกเป็นส่วนๆ ที่เรียกว่า token โดย token เปรียบเสมือนคำในภาษาคอมพิวเตอร์ เช่น ชื่อตัวแปร ชื่อฟังก์ชัน หรือ เครื่องหมาย หรือตัวดำเนินการต่างๆ การวิเคราะห์ token นี้จะทำโดยการระบุรูปแบบ (pattern) ของ token แต่ละประเภท ด้วย regular expression เช่น ชื่อตัวแปรในภาษาซี คือ สายอักขระที่เริ่มต้นด้วย a-z A-Z หรือ _ (underscore) แล้วตามด้วยตัวอักษร ตัวเลข หรือ _ (underscore) จะกำหนดด้วย [a-zA-Z_][a-zA-Z0-9_]* ในที่นี้ [] ใช้กำหนดเซตของตัวอักษร ส่วน * หมายถึง Kleene closure หรือสายอักขระที่สร้างจากเซตที่มีความยาวอย่างน้อย 0 ตัว ดังนั้นจะเขียน lex specification file สำหรับโปรแกรมเครื่องคิดเลข ได้คือ

%{
#include"y.tab.h"
%}

%%

[0-9]+            { yylval=atoi(yytext); return NUMBER; }
"+"|"-"|"*"|"/"|"("|")"   { return yytext[0]; }
\n                { return yytext[0]; }
[ \t]             { }
.                 { printf("Error in lexical analyzer.\n"); }

%%

มีการกำหนด token หลักๆ 2 แบบ ใน specification file นี้ คือ token สำหรับตัวเลข (NUMBER) ซึ่งเกิดจากตัวเลข ตั้งแต่หนึ่งตัวขึ้นไป โดยนอกจากจะส่งค่า token NUMBER และ ยังส่งค่าของตัวเลขนั้น ไปยัง parser ผ่านทางตัวแปร yylval

01 December 2005

กรรม

ช่วงนี้มีการเปลี่ยนระบบทีวีของหอพักใหม่ เลยมีช่องทีวีผ่านดาวเทียมแปลกๆ ให้ดู เปิดไปเปิดมา มีรายการที่เกี่ยวกับเรื่องเวรกรรม ดูแล้วทึ่งกับความสามารถของนักบวชคนนั้นจริงๆ แค่คนที่มาปรึกษาเล่าว่า ตอนนี้ลำบากอย่างนั้น มีปัญหาอย่างนี้ ก็สามารถบอกได้เลยว่าสมัยก่อนไปทำโน้นทำนี้ไว้ ทำให้กลายเป็นกรรมส่งผลมาถึงปัจจุบัน ถ้าอยากจะแก้ไข ก็ให้ไปทำอย่างนั้นอย่างนี้ตามที่บอก ก็จะสามารถแก้กรรมเก่าได้

ฟังช่วงแรกก็เฮ้อ..... แต่ฟังไปฟังมาแล้วก็ขำดี ขำตรงที่ขนาดเจ้าตัวบอกจำไม่ได้ว่าไปทำกรรมไว้จริงหรือเปล่า แต่ก็เชื่อนักบวชนั้นว่าเคยทำจริงๆ แถมยังจะไปแก้กรรมตามที่บอกด้วย เฮ้อ.... ตัวเองก็ไม่ได้ศึกษาพุทธศาสนาลึกซึ้งเท่าไรหรอกนะ แต่พุทธศาสนาไม่เคยสอนเรื่องล้างบาป หรือแก้กรรมไม่ใช่หรือ ? ถ้าเราเคยทำกรรมชั่วไว้ เราก็ต้องไปรับผลกรรมนั้นสักวันหนึ่ง เพียงแต่ว่าเราอาจจะเจือจางผลนั้นได้ ด้วยการทำกรรมดี เหมือนการเติมน้ำเพิ่มลงไปในน้ำเกลือ ถ้าเติมไปเรื่อยๆ รสเค็มก็จะค่อยๆ จางหายไปเอง ไม่ใช่หรือ ?