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

กรรม

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

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

18 November 2005

The Gimp กับ RawPhoto Plugin

ลอง plugin RawPhoto กับ Gimp 2.2 ที่มากับ FC4 ดู ง่ายดีเหมือนกันนะ เดี๋ยวนี้ชอบถ่ายรูปเป็น RAW format เพราะมีที่เหลือเฟือ ไม่ค่อยได้ไปถ่ายรูปที่ไหนไกลๆ เท่าไหร่แล้ว ถึงไม่พอจริงๆ ก็เปิด PowerBook มาโหลดไปเก็บไว้ก่อนก็ยังทัน

เสร็จแล้วก็เลยลองเอารูปวัดเบญจมฯ ที่ถ่ายไว้คราวก่อนมาแต่งใหม่ เพื่อเป็นการลองจอใหม่ด้วย อุๆ

Programming

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

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

15 November 2005

ซื้อคอมพิวเตอร์

ตั้งใจว่าจะเขียนเรื่องนี้มาซักพักหนึ่งแล้ว เพิ่งมีโอกาสเขียนจริงๆ วันนี้ เรื่องนี้เกิดมาประมาณ 2-3 สัปดาห์แล้ว คือที่ทำงานเขาจะซื้อเครื่องคอมพิวเตอร์ ให้ใช้ โดยกำหนดงบประมาณให้ แล้วให้เรากำหนดคุณสมบัติเอง ก็เลยพยายามเลือกรุ่นดีๆ จะได้ใช้ได้นานๆ หน่อย สุดท้ายเลยตัดสินใจเลือก Pentium 4 630 3.0GHz ซึ่งทำงานที่ความถื่ 3.0GHz และเป็นรุ่นที่มี cache 2MB และสนับสนุนคำสั่งแบบ 64 บิต (EM64T) ปรากฎว่าพอให้เจ้าหน้าที่เขาติดต่อไปยังร้านต่างๆ เพื่อขอใบเสนอราคา จะได้นำมาเปรียบเทียบกัน แล้วก็จะเลือกซื้อจากร้านที่มีราคาถูกที่สุด

ปรากฎว่ามีหลายร้าน ที่ระบุมาในใบเสนอราคาเพียงแค่ว่า "Pentium 4 3.0GHz" หรือ "Pentium 4 3.0T" พอเจ้าหน้าที่ติดต่อไปให้เพิ่ม 630 ให้หน่อย จะได้เป็นการระบุที่ชัดๆ ก็บ่ายเบี่ยง แถมยังบอกอีกว่ารุ่นเดียวกันแหละ ไม่ยอมระบุให้ เจ้าหน้าที่ซึ่งไม่มีความรู้มากนักก็งงๆ ว่าทำไม เลยเอากลับมาให้เราเช็คอีกครั้งหนึ่ง ตอนแรกก็งงๆ เหมือนกัน เพราะไม่ค่อยได้ติดตามรุ่นของโปรเซสเซอร์ พอเช็คไปเช็คมา ก็เห็นภาพเลยว่าร้านต้องการจะเอารุ่น 530 ที่ใช้สัญญาณนาฬืกาเท่ากันมาหลอกขาย เนื่องจากเป็นรุ่นที่มีราคาถูกกว่าเยอะ เฮ้อ....ตอนนี้เลยขึ้นบัญชีดำร้านเหล่านั้นไว้แล้ว และต่อไปคงต้องเช็คสเปคต่างๆ ให้ละเอียดขึ้น

01 November 2005

官房長官

เมื่อวานฟังข่าวทางวิทยุระหว่างกลับบ้าน ได้ยินข่าวเรื่องการปรับคณะรัฐมนตรีของรัฐบาลญี่ปุ่น ซึ่งมีการวางตัวให้ อะเบะ ชินโซ (安倍晋三) เป็นทายาททางการเมืองของนายกฯ โคะอิซึมิ ซึ่งจะลงจากตำแหน่งประมาณเดือนกันยายนปีหน้า โดยตั้งให้เป็น คัมโบโจคัง (官房長官) ซึ่งในข่าวแปลว่า "หัวหน้าโฆษกรัฐบาล" ซึ่งคนที่ไม่ทราบเรื่องการเมืองของญี่ปุ่น คงจะแปลกใจว่าทำไมถึงวางตัวทายาททางการเมืองโดยตั้งให้เป็นเพียงโฆษกของรัฐบาล ซึ่งเมืองไทยเห็นว่าเป็นตำแหน่งที่สำคัญน้อยกว่ารัฐมนตรีเสียอีก

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

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

ด้วยเหตุนี้นายกฯ โคะอิซึมิ จึงตั้งทายาททางการเมืองของตัวเองเป็นคัมโบโจคัง

อ้างอิง: http://oshiete1.goo.ne.jp/kotaeru.php3?qid=861760