<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Cholwich's blog</title>
	<atom:link href="http://cholwich.org/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://cholwich.org/wordpress</link>
	<description>Just another blog of mine</description>
	<lastBuildDate>Fri, 09 Jul 2010 09:11:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>กรอกคะแนน</title>
		<link>http://cholwich.org/wordpress/2010/07/09/%e0%b8%81%e0%b8%a3%e0%b8%ad%e0%b8%81%e0%b8%84%e0%b8%b0%e0%b9%81%e0%b8%99%e0%b8%99/</link>
		<comments>http://cholwich.org/wordpress/2010/07/09/%e0%b8%81%e0%b8%a3%e0%b8%ad%e0%b8%81%e0%b8%84%e0%b8%b0%e0%b9%81%e0%b8%99%e0%b8%99/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 09:11:23 +0000</pubDate>
		<dc:creator>cholwich</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[teaching]]></category>
		<category><![CDATA[input]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[score]]></category>
		<category><![CDATA[teaching. programming]]></category>

		<guid isPermaLink="false">http://cholwich.org/wordpress/?p=404</guid>
		<description><![CDATA[ผมรู้สึกว่าการกรอกคะแนนนักศึกษาเป็นเรื่องยุ่งยาก โดยเฉพาะคะแนนการบ้านกับควิซ ที่เก็บมาแบบไม่ได้เรียงตามลำดับรหัสนักศึกษา ไม่รู้ว่าอาจารย์คนอื่นเขาทำกันยังไง (โดยเฉพาะวิชาที่สอนกัน 200-300 คน) เดิมผมมักจะเอากระดาษมาเรียงตามรหัสนักศึกษา แล้วค่อยไล่กรอกลง spreadsheet แต่มันก็ยุ่งยาก ขี้เกียจอีก ความขี้เกียจนี้ส่งผลให้ผมไม่ค่อยได้คืนควิชหรือการบ้านกลับให้นักศึกษา แล้วก็จะมาหัวหมุนเอาตอนปลายเทอม เพราะต้องกรอกทุกอย่างให้เสร็จก่อนจะตัดเกรด วันก่อนก็เลยเขียนโปรแกรมเล็กๆ เอาไว้กรอกคะแนนควิซโดยเฉพาะ ฟีเจอร์หลักๆ ที่ต้องการก็คือ อยากใส่แค่รหัสนักศึกษาบางส่วน (3-4 ตัวก็พอ) ถ้าไม่ซ้ำก็กรอกคะแนนไปได้เลย ถ้าซ้ำก็แสดงตัวเลือกให้หน่อย แล้วค่อยกรอกคะแนน ตอนแรกก็อยากจะทำเป็น GUI สวยงาม มี textbox ให้กรอกรหัส แล้วจะแสดงตัวเลือกเหมือนพวก autocomplete อะไรทำนองนั้น แต่ก็ดูยุ่งยาก ขี้เกียจอีก (จะเห็นว่าขี้เกียจกันทุกขั้นตอน) แต่สุดท้ายเลยได้โปรแกรม python แบบ command-line มาอันหนึ่ง รับข้อมูลเป็น text file มีแต่รหัสนักศึกษา ใช้ regular expression สำหรับเทียบรหัสกรอกเข้ามา แล้วก็ให้เลือกได้ ถ้ามีรหัสตรงหลายอัน จากนั้นก็กรอกคะแนนลงไปได้ เรียบร้อย ใช้ได้ดี ตามข้างล่างนี้ [...]]]></description>
			<content:encoded><![CDATA[<p>ผมรู้สึกว่าการกรอกคะแนนนักศึกษาเป็นเรื่องยุ่งยาก โดยเฉพาะคะแนนการบ้านกับควิซ ที่เก็บมาแบบไม่ได้เรียงตามลำดับรหัสนักศึกษา ไม่รู้ว่าอาจารย์คนอื่นเขาทำกันยังไง (โดยเฉพาะวิชาที่สอนกัน 200-300 คน) เดิมผมมักจะเอากระดาษมาเรียงตามรหัสนักศึกษา แล้วค่อยไล่กรอกลง spreadsheet แต่มันก็ยุ่งยาก <strong>ขี้เกียจ</strong>อีก</p>
<p>ความ<strong>ขี้เกียจ</strong>นี้ส่งผลให้ผมไม่ค่อยได้คืนควิชหรือการบ้านกลับให้นักศึกษา แล้วก็จะมาหัวหมุนเอาตอนปลายเทอม เพราะต้องกรอกทุกอย่างให้เสร็จก่อนจะตัดเกรด</p>
<p>วันก่อนก็เลยเขียนโปรแกรมเล็กๆ เอาไว้กรอกคะแนนควิซโดยเฉพาะ ฟีเจอร์หลักๆ ที่ต้องการก็คือ อยากใส่แค่รหัสนักศึกษาบางส่วน (3-4 ตัวก็พอ) ถ้าไม่ซ้ำก็กรอกคะแนนไปได้เลย ถ้าซ้ำก็แสดงตัวเลือกให้หน่อย แล้วค่อยกรอกคะแนน ตอนแรกก็อยากจะทำเป็น GUI สวยงาม มี textbox ให้กรอกรหัส แล้วจะแสดงตัวเลือกเหมือนพวก autocomplete อะไรทำนองนั้น แต่ก็ดูยุ่งยาก <strong>ขี้เกียจ</strong>อีก (จะเห็นว่าขี้เกียจกันทุกขั้นตอน) แต่สุดท้ายเลยได้โปรแกรม python แบบ command-line มาอันหนึ่ง รับข้อมูลเป็น text file มีแต่รหัสนักศึกษา ใช้ regular expression สำหรับเทียบรหัสกรอกเข้ามา แล้วก็ให้เลือกได้ ถ้ามีรหัสตรงหลายอัน จากนั้นก็กรอกคะแนนลงไปได้ เรียบร้อย ใช้ได้ดี ตามข้างล่างนี้ (แต่ไม่รับประกันความผิดพลาดถ้าจะเอาไปใช้ เพราะ<strong>ขี้เกียจ</strong>เช็ค input error บางกรณีอีก) โปรดลองใช้กันได้ตามอัตภาพ <img src='http://cholwich.org/wordpress/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
<span id="more-404"></span></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">re</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> Student:
	<span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>,line<span style="color: black;">&#41;</span>:
		<span style="color: #008000;">self</span>.<span style="color: black;">line</span> = line.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
		l = <span style="color: #008000;">self</span>.<span style="color: black;">line</span>.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>&quot;</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">self</span>.<span style="color: #008000;">id</span> = l<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
		<span style="color: #008000;">self</span>.<span style="color: black;">score</span> = -<span style="color: #ff4500;">1.0</span>
	<span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__str__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
		<span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">self</span>.<span style="color: #008000;">id</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> saveData<span style="color: black;">&#40;</span>fname,students<span style="color: black;">&#41;</span>:
	f = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span>fname, <span style="color: #483d8b;">'w'</span><span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> students:
		score = <span style="color: #ff4500;">0</span>
		<span style="color: #ff7700;font-weight:bold;">if</span> i.<span style="color: black;">score</span> <span style="color: #66cc66;">!</span>= -<span style="color: #ff4500;">1</span>:
			score = i.<span style="color: black;">score</span>
		i.<span style="color: black;">line</span> += <span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\t</span>{0}'</span>.<span style="color: black;">format</span><span style="color: black;">&#40;</span>score<span style="color: black;">&#41;</span>
		f.<span style="color: black;">write</span><span style="color: black;">&#40;</span>i.<span style="color: black;">line</span><span style="color: black;">&#41;</span>
		f.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span>
	f.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> inputUntilMatched<span style="color: black;">&#40;</span>prompt, pattern<span style="color: black;">&#41;</span>:
	<span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #008000;">True</span>:
		s = <span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span>prompt<span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">re</span>.<span style="color: black;">match</span><span style="color: black;">&#40;</span>pattern, s<span style="color: black;">&#41;</span>:
			<span style="color: #ff7700;font-weight:bold;">return</span> s
	<span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">None</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">1</span>:
	fname = <span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
<span style="color: #ff7700;font-weight:bold;">else</span>:
	<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Unknown data file.&quot;</span>
	quit<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
f = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span>fname, <span style="color: #483d8b;">'r'</span><span style="color: black;">&#41;</span>
students = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
<span style="color: #ff7700;font-weight:bold;">for</span> line <span style="color: #ff7700;font-weight:bold;">in</span> f:
	s = Student<span style="color: black;">&#40;</span>line<span style="color: black;">&#41;</span>
	students.<span style="color: black;">append</span><span style="color: black;">&#40;</span>s<span style="color: black;">&#41;</span>
f.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> students:
	<span style="color: #ff7700;font-weight:bold;">print</span> i
&nbsp;
<span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #008000;">True</span>:
	<span style="color: #dc143c;">cmd</span> = <span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'&gt; '</span><span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">cmd</span>==<span style="color: #483d8b;">'save'</span>:
		saveData<span style="color: black;">&#40;</span>fname, students<span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">break</span>
	<span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #dc143c;">cmd</span>==<span style="color: #483d8b;">'quit'</span>:
		<span style="color: #ff7700;font-weight:bold;">break</span>
	pat = <span style="color: #483d8b;">&quot;.*&quot;</span>+<span style="color: #dc143c;">cmd</span>+<span style="color: #483d8b;">&quot;.*&quot;</span>
&nbsp;
	matched = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
	<span style="color: #ff7700;font-weight:bold;">for</span> s <span style="color: #ff7700;font-weight:bold;">in</span> students:
		<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">re</span>.<span style="color: black;">match</span><span style="color: black;">&#40;</span>pat, s.<span style="color: #008000;">id</span><span style="color: black;">&#41;</span>:
			matched.<span style="color: black;">append</span><span style="color: black;">&#40;</span>s<span style="color: black;">&#41;</span>
			<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;({0}) {1}&quot;</span>.<span style="color: black;">format</span><span style="color: black;">&#40;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>matched<span style="color: black;">&#41;</span>,s<span style="color: black;">&#41;</span>
	count = <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>matched<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">if</span> count==<span style="color: #ff4500;">0</span>:
		<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Not found&quot;</span>
	<span style="color: #ff7700;font-weight:bold;">else</span>:
		<span style="color: #ff7700;font-weight:bold;">while</span> count<span style="color: #66cc66;">&gt;</span><span style="color: #ff4500;">1</span>:
			schoice = inputUntilMatched<span style="color: black;">&#40;</span><span style="color: #483d8b;">'choice&gt; '</span>, <span style="color: #483d8b;">'[0-9]+'</span><span style="color: black;">&#41;</span>
			choice = <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>schoice<span style="color: black;">&#41;</span>
			<span style="color: #ff7700;font-weight:bold;">if</span> choice <span style="color: #66cc66;">&lt;</span>= count:
				student = matched<span style="color: black;">&#91;</span>choice-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
				<span style="color: #ff7700;font-weight:bold;">break</span>
			<span style="color: #ff7700;font-weight:bold;">else</span>:
				<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Unknown choice&quot;</span> 
		<span style="color: #ff7700;font-weight:bold;">if</span> count==<span style="color: #ff4500;">1</span>:
			student = matched<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
		sscore = inputUntilMatched<span style="color: black;">&#40;</span><span style="color: #483d8b;">'score&gt; '</span>, <span style="color: #483d8b;">'[0-9.]+'</span><span style="color: black;">&#41;</span>
		score = <span style="color: #008000;">float</span><span style="color: black;">&#40;</span>sscore<span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">if</span> student.<span style="color: black;">score</span> <span style="color: #66cc66;">!</span>= -<span style="color: #ff4500;">1</span>:
			<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Replaced!!!&quot;</span>
		student.<span style="color: black;">score</span> = score
		<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Updated {0} to {1}&quot;</span>.<span style="color: black;">format</span><span style="color: black;">&#40;</span>student.<span style="color: #008000;">id</span>, student.<span style="color: black;">score</span><span style="color: black;">&#41;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://cholwich.org/wordpress/2010/07/09/%e0%b8%81%e0%b8%a3%e0%b8%ad%e0%b8%81%e0%b8%84%e0%b8%b0%e0%b9%81%e0%b8%99%e0%b8%99/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>ดอกไม้ที่บ้าน</title>
		<link>http://cholwich.org/wordpress/2010/04/20/%e0%b8%94%e0%b8%ad%e0%b8%81%e0%b9%84%e0%b8%a1%e0%b9%89%e0%b8%97%e0%b8%b5%e0%b9%88%e0%b8%9a%e0%b9%89%e0%b8%b2%e0%b8%99/</link>
		<comments>http://cholwich.org/wordpress/2010/04/20/%e0%b8%94%e0%b8%ad%e0%b8%81%e0%b9%84%e0%b8%a1%e0%b9%89%e0%b8%97%e0%b8%b5%e0%b9%88%e0%b8%9a%e0%b9%89%e0%b8%b2%e0%b8%99/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 00:48:10 +0000</pubDate>
		<dc:creator>cholwich</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[photos]]></category>
		<category><![CDATA[ดอกไม้]]></category>
		<category><![CDATA[รูปถ่าย]]></category>

		<guid isPermaLink="false">http://cholwich.org/wordpress/?p=399</guid>
		<description><![CDATA[ช่วงนี้ชอบถ่ายรูปดอกไม้ต่างๆ ที่บ้านเก็บเอาไว้ด้วย iPhone เลยเอามารวบรวมลงเว็บไว้หน่อย Flowers at Home Forget me not โมก โมก โมก This is not a flower. &#160;]]></description>
			<content:encoded><![CDATA[<p>ช่วงนี้ชอบถ่ายรูปดอกไม้ต่างๆ ที่บ้านเก็บเอาไว้ด้วย iPhone เลยเอามารวบรวมลงเว็บไว้หน่อย<br />
<span id="more-399"></span>
<div id="kpg-album-description">
<div id='kpg-title'>Flowers at Home</div>
</div>
<table cellpadding="0" cellspacing="0" border="0" width="100%" id="kpg-pictures">
<tr>
<td width='33%'><a href='http://lh4.ggpht.com/_Nxd2wi7DOto/S8z3TXkKlhI/AAAAAAAABEc/HnfmKW9x0JA/s800/IMG_0001.JPG' rel='shadowbox[kpicasa_gallery]'><img src='http://lh4.ggpht.com/_Nxd2wi7DOto/S8z3TXkKlhI/AAAAAAAABEc/HnfmKW9x0JA/s144/IMG_0001.JPG' height='144' width='108' alt='' class='kpg-thumb' /></a></td>
<td width='33%'><a href='http://lh5.ggpht.com/_Nxd2wi7DOto/S8z3VReb9BI/AAAAAAAABCQ/QxTP5ZbIzuc/s800/IMG_0106.JPG' title='Forget me not' rel='shadowbox[kpicasa_gallery]'><img src='http://lh5.ggpht.com/_Nxd2wi7DOto/S8z3VReb9BI/AAAAAAAABCQ/QxTP5ZbIzuc/s144/IMG_0106.JPG' height='144' width='108' alt='Forget me not' class='kpg-thumb' /></a>
<div class='kpg-summary'>Forget me not</div>
</td>
<td width='34%'><a href='http://lh6.ggpht.com/_Nxd2wi7DOto/S8z3W9nGpFI/AAAAAAAABCU/3H2pkars35Q/s800/IMG_0328.JPG' rel='shadowbox[kpicasa_gallery]'><img src='http://lh6.ggpht.com/_Nxd2wi7DOto/S8z3W9nGpFI/AAAAAAAABCU/3H2pkars35Q/s144/IMG_0328.JPG' height='144' width='108' alt='' class='kpg-thumb' /></a></td>
</tr>
<tr>
<td width='33%'><a href='http://lh4.ggpht.com/_Nxd2wi7DOto/S8z3YpmxFJI/AAAAAAAABCc/5hGjFMaEaag/s800/IMG_0375.JPG' title='โมก' rel='shadowbox[kpicasa_gallery]'><img src='http://lh4.ggpht.com/_Nxd2wi7DOto/S8z3YpmxFJI/AAAAAAAABCc/5hGjFMaEaag/s144/IMG_0375.JPG' height='144' width='108' alt='โมก' class='kpg-thumb' /></a>
<div class='kpg-summary'>โมก</div>
</td>
<td width='33%'><a href='http://lh3.ggpht.com/_Nxd2wi7DOto/S8z3afu9etI/AAAAAAAABCg/lb5O3mFLpX4/s800/IMG_0378.JPG' title='โมก' rel='shadowbox[kpicasa_gallery]'><img src='http://lh3.ggpht.com/_Nxd2wi7DOto/S8z3afu9etI/AAAAAAAABCg/lb5O3mFLpX4/s144/IMG_0378.JPG' height='144' width='108' alt='โมก' class='kpg-thumb' /></a>
<div class='kpg-summary'>โมก</div>
</td>
<td width='34%'><a href='http://lh6.ggpht.com/_Nxd2wi7DOto/S8z3cZOQPMI/AAAAAAAABCk/sraLYa1K36Y/s800/IMG_0396.JPG' title='โมก' rel='shadowbox[kpicasa_gallery]'><img src='http://lh6.ggpht.com/_Nxd2wi7DOto/S8z3cZOQPMI/AAAAAAAABCk/sraLYa1K36Y/s144/IMG_0396.JPG' height='144' width='108' alt='โมก' class='kpg-thumb' /></a>
<div class='kpg-summary'>โมก</div>
</td>
</tr>
<tr>
<td width='33%'><a href='http://lh6.ggpht.com/_Nxd2wi7DOto/S8z3dwbqXQI/AAAAAAAABCo/COxVxtI3_p8/s800/IMG_0230-1.JPG' rel='shadowbox[kpicasa_gallery]'><img src='http://lh6.ggpht.com/_Nxd2wi7DOto/S8z3dwbqXQI/AAAAAAAABCo/COxVxtI3_p8/s144/IMG_0230-1.JPG' height='144' width='108' alt='' class='kpg-thumb' /></a></td>
<td width='33%'><a href='http://lh5.ggpht.com/_Nxd2wi7DOto/S8z3fSBHoMI/AAAAAAAABCs/oMx4OKx8eB4/s800/IMG_0231-1.JPG' rel='shadowbox[kpicasa_gallery]'><img src='http://lh5.ggpht.com/_Nxd2wi7DOto/S8z3fSBHoMI/AAAAAAAABCs/oMx4OKx8eB4/s144/IMG_0231-1.JPG' height='144' width='108' alt='' class='kpg-thumb' /></a></td>
<td width='34%'><a href='http://lh5.ggpht.com/_Nxd2wi7DOto/S8z3g9gBgjI/AAAAAAAABC0/6VUQVPdBhjk/s800/IMG_0232-1.JPG' rel='shadowbox[kpicasa_gallery]'><img src='http://lh5.ggpht.com/_Nxd2wi7DOto/S8z3g9gBgjI/AAAAAAAABC0/6VUQVPdBhjk/s144/IMG_0232-1.JPG' height='144' width='108' alt='' class='kpg-thumb' /></a></td>
</tr>
<tr>
<td width='33%'><a href='http://lh5.ggpht.com/_Nxd2wi7DOto/S8z3iB-sAZI/AAAAAAAABC4/zCcGt47o6Nw/s800/IMG_0233-1.JPG' rel='shadowbox[kpicasa_gallery]'><img src='http://lh5.ggpht.com/_Nxd2wi7DOto/S8z3iB-sAZI/AAAAAAAABC4/zCcGt47o6Nw/s144/IMG_0233-1.JPG' height='144' width='108' alt='' class='kpg-thumb' /></a></td>
<td width='33%'><a href='http://lh5.ggpht.com/_Nxd2wi7DOto/S8z3jjZqUII/AAAAAAAABC8/AX8GCKQbxSo/s800/IMG_0234-1.JPG' rel='shadowbox[kpicasa_gallery]'><img src='http://lh5.ggpht.com/_Nxd2wi7DOto/S8z3jjZqUII/AAAAAAAABC8/AX8GCKQbxSo/s144/IMG_0234-1.JPG' height='144' width='108' alt='' class='kpg-thumb' /></a></td>
<td width='34%'><a href='http://lh5.ggpht.com/_Nxd2wi7DOto/S8z3k01Bp2I/AAAAAAAABDA/YS4F7zceCnU/s800/IMG_0263-1.JPG' rel='shadowbox[kpicasa_gallery]'><img src='http://lh5.ggpht.com/_Nxd2wi7DOto/S8z3k01Bp2I/AAAAAAAABDA/YS4F7zceCnU/s144/IMG_0263-1.JPG' height='108' width='144' alt='' class='kpg-thumb' /></a></td>
</tr>
<tr>
<td width='33%'><a href='http://lh6.ggpht.com/_Nxd2wi7DOto/S8z3nBTtKuI/AAAAAAAABDE/9gMxIX0o1-w/s800/IMG_0264-1.JPG' title='This is not a flower.' rel='shadowbox[kpicasa_gallery]'><img src='http://lh6.ggpht.com/_Nxd2wi7DOto/S8z3nBTtKuI/AAAAAAAABDE/9gMxIX0o1-w/s144/IMG_0264-1.JPG' height='144' width='108' alt='This is not a flower.' class='kpg-thumb' /></a>
<div class='kpg-summary'>This is not a flower.</div>
</td>
<td width='33%'><a href='http://lh5.ggpht.com/_Nxd2wi7DOto/S8z3oqXOK0I/AAAAAAAABDI/yPkw6Yd73oA/s800/IMG_0408.JPG' rel='shadowbox[kpicasa_gallery]'><img src='http://lh5.ggpht.com/_Nxd2wi7DOto/S8z3oqXOK0I/AAAAAAAABDI/yPkw6Yd73oA/s144/IMG_0408.JPG' height='144' width='108' alt='' class='kpg-thumb' /></a></td>
<td width='34%'><a href='http://lh4.ggpht.com/_Nxd2wi7DOto/S8z3qYw-pQI/AAAAAAAABDM/ySBpVyqKbXU/s800/IMG_0409.JPG' rel='shadowbox[kpicasa_gallery]'><img src='http://lh4.ggpht.com/_Nxd2wi7DOto/S8z3qYw-pQI/AAAAAAAABDM/ySBpVyqKbXU/s144/IMG_0409.JPG' height='144' width='108' alt='' class='kpg-thumb' /></a></td>
</tr>
<tr>
<td width='33%'><a href='http://lh6.ggpht.com/_Nxd2wi7DOto/S8z3sJtx2FI/AAAAAAAABDQ/u8jY1l6DXwM/s800/IMG_0410.JPG' rel='shadowbox[kpicasa_gallery]'><img src='http://lh6.ggpht.com/_Nxd2wi7DOto/S8z3sJtx2FI/AAAAAAAABDQ/u8jY1l6DXwM/s144/IMG_0410.JPG' height='144' width='108' alt='' class='kpg-thumb' /></a></td>
<td width='33%'><a href='http://lh4.ggpht.com/_Nxd2wi7DOto/S8z3tyt8tsI/AAAAAAAABDU/d066Qc86Xv4/s800/IMG_0413.JPG' rel='shadowbox[kpicasa_gallery]'><img src='http://lh4.ggpht.com/_Nxd2wi7DOto/S8z3tyt8tsI/AAAAAAAABDU/d066Qc86Xv4/s144/IMG_0413.JPG' height='144' width='108' alt='' class='kpg-thumb' /></a></td>
<td width='34%'><a href='http://lh4.ggpht.com/_Nxd2wi7DOto/S8z3vqbxYVI/AAAAAAAABDY/NmNxLCn0KqA/s800/IMG_0414.JPG' rel='shadowbox[kpicasa_gallery]'><img src='http://lh4.ggpht.com/_Nxd2wi7DOto/S8z3vqbxYVI/AAAAAAAABDY/NmNxLCn0KqA/s144/IMG_0414.JPG' height='144' width='108' alt='' class='kpg-thumb' /></a></td>
</tr>
<tr>
<td width='33%'><a href='http://lh6.ggpht.com/_Nxd2wi7DOto/S8z3xBfFZJI/AAAAAAAABDc/1SYPelnzPQs/s800/IMG_0416.JPG' rel='shadowbox[kpicasa_gallery]'><img src='http://lh6.ggpht.com/_Nxd2wi7DOto/S8z3xBfFZJI/AAAAAAAABDc/1SYPelnzPQs/s144/IMG_0416.JPG' height='144' width='108' alt='' class='kpg-thumb' /></a></td>
<td width='33%'><a href='http://lh3.ggpht.com/_Nxd2wi7DOto/S8z3y2KrsjI/AAAAAAAABDg/2_Hj81-MuYg/s800/IMG_0417.JPG' rel='shadowbox[kpicasa_gallery]'><img src='http://lh3.ggpht.com/_Nxd2wi7DOto/S8z3y2KrsjI/AAAAAAAABDg/2_Hj81-MuYg/s144/IMG_0417.JPG' height='144' width='108' alt='' class='kpg-thumb' /></a></td>
<td width='34%'><a href='http://lh4.ggpht.com/_Nxd2wi7DOto/S8z30SL2pZI/AAAAAAAABDk/1TIpuJ9HOM8/s800/IMG_0427.JPG' rel='shadowbox[kpicasa_gallery]'><img src='http://lh4.ggpht.com/_Nxd2wi7DOto/S8z30SL2pZI/AAAAAAAABDk/1TIpuJ9HOM8/s144/IMG_0427.JPG' height='108' width='144' alt='' class='kpg-thumb' /></a></td>
</tr>
<tr>
<td width='33%'><a href='http://lh4.ggpht.com/_Nxd2wi7DOto/S8z31_M4XFI/AAAAAAAABDo/OQTIZzAVseg/s800/IMG_0428.JPG' rel='shadowbox[kpicasa_gallery]'><img src='http://lh4.ggpht.com/_Nxd2wi7DOto/S8z31_M4XFI/AAAAAAAABDo/OQTIZzAVseg/s144/IMG_0428.JPG' height='144' width='108' alt='' class='kpg-thumb' /></a></td>
<td width='33%'><a href='http://lh5.ggpht.com/_Nxd2wi7DOto/S8z33TFfhNI/AAAAAAAABDs/ROPpLEdLkLo/s800/IMG_0429.JPG' rel='shadowbox[kpicasa_gallery]'><img src='http://lh5.ggpht.com/_Nxd2wi7DOto/S8z33TFfhNI/AAAAAAAABDs/ROPpLEdLkLo/s144/IMG_0429.JPG' height='144' width='108' alt='' class='kpg-thumb' /></a></td>
<td>&nbsp;</td>
</tr>
</table>
<p><br style="clear: both;" /></p>
]]></content:encoded>
			<wfw:commentRss>http://cholwich.org/wordpress/2010/04/20/%e0%b8%94%e0%b8%ad%e0%b8%81%e0%b9%84%e0%b8%a1%e0%b9%89%e0%b8%97%e0%b8%b5%e0%b9%88%e0%b8%9a%e0%b9%89%e0%b8%b2%e0%b8%99/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>แกงส้มดอกแคกับถั่วฝักยาว</title>
		<link>http://cholwich.org/wordpress/2010/04/19/%e0%b9%81%e0%b8%81%e0%b8%87%e0%b8%aa%e0%b9%89%e0%b8%a1%e0%b8%94%e0%b8%ad%e0%b8%81%e0%b9%81%e0%b8%84/</link>
		<comments>http://cholwich.org/wordpress/2010/04/19/%e0%b9%81%e0%b8%81%e0%b8%87%e0%b8%aa%e0%b9%89%e0%b8%a1%e0%b8%94%e0%b8%ad%e0%b8%81%e0%b9%81%e0%b8%84/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 14:06:21 +0000</pubDate>
		<dc:creator>cholwich</dc:creator>
				<category><![CDATA[cooking]]></category>
		<category><![CDATA[ดอกแค]]></category>
		<category><![CDATA[น้ำพริก]]></category>
		<category><![CDATA[อาหาร]]></category>
		<category><![CDATA[แกงส้ม]]></category>

		<guid isPermaLink="false">http://cholwich.org/wordpress/?p=381</guid>
		<description><![CDATA[เนื่องจากระยะหลังบ้านผมมักจะซื้อกับข้าวถุงมากิน หรือไม่ก็ออกไปกินข้าวเย็นข้างนอก เนื่องด้วยความยุ่งยากวุ่นวายในการทำอาหาร แต่การไปกินข้างนอกบางครั้งก็ไม่อร่อยถูกใจ วันก่อนอยู่กันพร้อมหน้า คุณน้องสาวก็เลยเสนอให้พ่อแม่ทำแกงส้มดอกแค เลยเอาวิธีการปรุงมาเขียนไว้แก้ขัด ขั้นแรก คือ การเตรียมพริกสำหรับแกงส้ม เนื่องจากพ่อผมไม่ถูกกับกลิ่นกะปิอย่างแรง แกงส้มที่บ้านจึงไม่ใส่กะปิ เราจึงตำน้ำพริกเอง เริ่มจากเอาพริกแห้งมาหั่นเป็นท่อน เอาไส้กับเม็ดพริกออก แล้วแช่น้ำไว้ เมื่อพริกนิ่มได้ที่ก็เอาใส่ครก แล้วก็โขลกๆๆๆๆ เมื่อโขลกจนพริกละเอียดได้ที่ ก็ใส่หัวหอมลงไป ส่วนใหญ่มักจะใส่กะปิลงไปด้วย หรือถ้าต้องการให้น้ำแกงข้นหน่อย บางคนเขาก็ใส่เนื้อปลา เนื้อกุ้งต้ม ลงไปโขลกด้วย เมื่อโขลกทุกอย่างจนเข้ากัน และละเอียดแล้ว สุดท้ายก็จะเติมน้ำลงไปในครก เพื่อละลายน้ำพริก แล้วตักใส่หม้อ เท่านี้ก็เสร็จหน้าที่ของผม (จริงๆ ตอนหลังมีเสริมเล็กน้อย เนื่องจากพริกแกงใช้แต่พริกแห้งเลยไม่เผ็ด ต้องโขลกพริกขี้นกสดใส่ลงไปเพิ่มเล็กน้อย) ขั้นตอนที่เหลือ จะเริ่มจากการต้มน้ำแกงจนเดือด ใส่กุ้ง หรือเนื้อปลา จากนั้นก็ปรุงรส ด้วย น้ำปลา น้ำตาลปี๊บ และน้ำส้มมะขาม ให้รสออกเปรี้ยว หวาน เค็ม ตามความชอบ สุดท้ายก็ใส่ดอกแค กับถั่วฝักยาวที่เตรียมไว้ลงไป เป็นอันเสร็จสิ้น (ผักบางประเภทก็นิยมใส่ไป แล้วก็ตักขึ้นกินเลย เช่น ผักกระเฉด [...]]]></description>
			<content:encoded><![CDATA[<p>เนื่องจากระยะหลังบ้านผมมักจะซื้อกับข้าวถุงมากิน หรือไม่ก็ออกไปกินข้าวเย็นข้างนอก เนื่องด้วยความยุ่งยากวุ่นวายในการทำอาหาร แต่การไปกินข้างนอกบางครั้งก็ไม่อร่อยถูกใจ วันก่อนอยู่กันพร้อมหน้า คุณน้องสาวก็เลยเสนอให้พ่อแม่ทำแกงส้มดอกแค เลยเอาวิธีการปรุงมาเขียนไว้แก้ขัด</p>
<p><strong>ขั้นแรก</strong> คือ การเตรียมพริกสำหรับแกงส้ม เนื่องจากพ่อผมไม่ถูกกับกลิ่นกะปิอย่างแรง แกงส้มที่บ้านจึงไม่ใส่กะปิ เราจึงตำน้ำพริกเอง เริ่มจากเอาพริกแห้งมาหั่นเป็นท่อน เอาไส้กับเม็ดพริกออก แล้วแช่น้ำไว้ เมื่อพริกนิ่มได้ที่ก็เอาใส่ครก แล้วก็โขลกๆๆๆๆ</p>
<p><a href="http://cholwich.org/wordpress/wp-content/uploads/2010/04/IMG_0432.jpg"><img class="aligncenter size-medium wp-image-382" title="ตำน้ำพริก 1" src="http://cholwich.org/wordpress/wp-content/uploads/2010/04/IMG_0432-300x225.jpg" alt="ตำน้ำพริก 1" width="300" height="225" /></a><br />
<a href="http://cholwich.org/wordpress/wp-content/uploads/2010/04/IMG_0434.jpg"><img class="aligncenter size-medium wp-image-383" title="ตำน้ำพริก 2" src="http://cholwich.org/wordpress/wp-content/uploads/2010/04/IMG_0434-300x225.jpg" alt="ตำน้ำพริก 2" width="300" height="225" /></a></p>
<p><span id="more-381"></span></p>
<p>เมื่อโขลกจนพริกละเอียดได้ที่ ก็ใส่หัวหอมลงไป ส่วนใหญ่มักจะใส่กะปิลงไปด้วย หรือถ้าต้องการให้น้ำแกงข้นหน่อย บางคนเขาก็ใส่เนื้อปลา เนื้อกุ้งต้ม ลงไปโขลกด้วย</p>
<p><a href="http://cholwich.org/wordpress/wp-content/uploads/2010/04/IMG_0436.jpg"><img class="aligncenter size-medium wp-image-388" title="ตำน้ำพริก 3" src="http://cholwich.org/wordpress/wp-content/uploads/2010/04/IMG_0436-300x225.jpg" alt="ตำน้ำพริก 3" width="300" height="225" /></a>เมื่อโขลกทุกอย่างจนเข้ากัน และละเอียดแล้ว สุดท้ายก็จะเติมน้ำลงไปในครก เพื่อละลายน้ำพริก แล้วตักใส่หม้อ</p>
<p><a href="http://cholwich.org/wordpress/wp-content/uploads/2010/04/IMG_0438.jpg"><img class="aligncenter size-medium wp-image-389" title="ตำน้ำพริก 4" src="http://cholwich.org/wordpress/wp-content/uploads/2010/04/IMG_0438-300x225.jpg" alt="ตำน้ำพริก 4" width="300" height="225" /></a>เท่านี้ก็เสร็จหน้าที่ของผม (จริงๆ ตอนหลังมีเสริมเล็กน้อย เนื่องจากพริกแกงใช้แต่พริกแห้งเลยไม่เผ็ด ต้องโขลกพริกขี้นกสดใส่ลงไปเพิ่มเล็กน้อย)</p>
<p><strong>ขั้นตอนที่เหลือ</strong> จะเริ่มจากการต้มน้ำแกงจนเดือด ใส่กุ้ง หรือเนื้อปลา จากนั้นก็ปรุงรส ด้วย น้ำปลา น้ำตาลปี๊บ และน้ำส้มมะขาม ให้รสออกเปรี้ยว หวาน เค็ม ตามความชอบ สุดท้ายก็ใส่ดอกแค กับถั่วฝักยาวที่เตรียมไว้ลงไป เป็นอันเสร็จสิ้น (ผักบางประเภทก็นิยมใส่ไป แล้วก็ตักขึ้นกินเลย เช่น ผักกระเฉด เพราะว่าใส่ทิ้งไว้นานแล้วจะเหนียว ไม่กรอบ)</p>
<p><a href="http://cholwich.org/wordpress/wp-content/uploads/2010/04/IMG_0441.jpg"><img class="aligncenter size-medium wp-image-390" title="แกงส้มดอกแค" src="http://cholwich.org/wordpress/wp-content/uploads/2010/04/IMG_0441-300x225.jpg" alt="แกงส้มดอกแค" width="300" height="225" /></a>สุดท้ายได้แกงส้มออกมาหน้าตาอย่างนี้ กินกับไข่เจียว อร่อยมาก</p>
<p><a href="http://cholwich.org/wordpress/wp-content/uploads/2010/04/IMG_0443.jpg"><img class="aligncenter size-medium wp-image-391" title="แกงส้มดอกแค" src="http://cholwich.org/wordpress/wp-content/uploads/2010/04/IMG_0443-300x225.jpg" alt="แกงส้มดอกแค" width="300" height="225" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://cholwich.org/wordpress/2010/04/19/%e0%b9%81%e0%b8%81%e0%b8%87%e0%b8%aa%e0%b9%89%e0%b8%a1%e0%b8%94%e0%b8%ad%e0%b8%81%e0%b9%81%e0%b8%84/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Stylish และ Twitter</title>
		<link>http://cholwich.org/wordpress/2010/02/06/stylish-%e0%b9%81%e0%b8%a5%e0%b8%b0-twitter/</link>
		<comments>http://cholwich.org/wordpress/2010/02/06/stylish-%e0%b9%81%e0%b8%a5%e0%b8%b0-twitter/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 15:14:48 +0000</pubDate>
		<dc:creator>cholwich</dc:creator>
				<category><![CDATA[firefox]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[stylish]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://cholwich.org/wordpress/?p=378</guid>
		<description><![CDATA[หลังจากที่ twitter ออกฟีเจอร์ใหม่ให้แจ้ง tweet เพิ่มเติมอัตโนมัติ ผมก็มักจะใช้ Firefox เล่น twitter ตรงๆ ผ่านเว็บ แต่ก็พบปัญหาหนึ่งคือเว็บของ twitter จะแสดงภาษาไทยไม่ถูกต้อง สระบนถูกตัดแสดงไม่ครบ ลองใช้ Firebug ตรวจดูพบว่าเกิดจากปัญหาของ CSS ที่กำหนดความสูงของบรรทัดไว้เป็นค่าคงที่ ซึ่งจะใช้ได้ดีกับภาษาอังกฤษ แต่ก่อปัญหาให้กับภาษาไทย ผมแก้ไข CSS โดยใช้ add-on ของ Firefox ที่ชื่อ Stylish ซึ่งจะทำให้เราสามารถปรับเปลี่ยนรูปแบบการแสดงผลของเว็บที่กำหนดโดย URL ได้ เมื่อติดตั้งเสร็จ ก็แค่เปิดเว็บ twitter แล้วก็เลือกที่ icon ของ Stylish ที่อยู่มุมล่างขวาของ Firefox จากนั้นก็เลือก &#8220;Write new style&#8221; &#62; &#8220;For twitter.com&#8221; จากนั้นก็เพิ่ม CSS ตามข้างล่างนี้ เพื่อกำหนดให้ใช้ line-height เป็นแบบปกติ [...]]]></description>
			<content:encoded><![CDATA[<p>หลังจากที่ <a href="http://twitter.com">twitter</a> ออกฟีเจอร์ใหม่ให้แจ้ง tweet เพิ่มเติมอัตโนมัติ ผมก็มักจะใช้ <a href="http://getfirefox.com">Firefox</a> เล่น twitter ตรงๆ ผ่านเว็บ แต่ก็พบปัญหาหนึ่งคือเว็บของ twitter จะแสดงภาษาไทยไม่ถูกต้อง สระบนถูกตัดแสดงไม่ครบ ลองใช้ <a href="http://getfirebug.com">Firebug</a> ตรวจดูพบว่าเกิดจากปัญหาของ CSS ที่กำหนดความสูงของบรรทัดไว้เป็นค่าคงที่ ซึ่งจะใช้ได้ดีกับภาษาอังกฤษ แต่ก่อปัญหาให้กับภาษาไทย</p>
<p>ผมแก้ไข CSS โดยใช้ add-on ของ Firefox ที่ชื่อ <a href="https://addons.mozilla.org/en-US/firefox/addon/2108">Stylish</a> ซึ่งจะทำให้เราสามารถปรับเปลี่ยนรูปแบบการแสดงผลของเว็บที่กำหนดโดย URL ได้ เมื่อติดตั้งเสร็จ ก็แค่เปิดเว็บ twitter แล้วก็เลือกที่ icon ของ Stylish ที่อยู่มุมล่างขวาของ Firefox จากนั้นก็เลือก &#8220;Write new style&#8221; &gt; &#8220;For twitter.com&#8221; จากนั้นก็เพิ่ม CSS ตามข้างล่างนี้ เพื่อกำหนดให้ใช้ line-height เป็นแบบปกติ เท่านี้ก็เสร็จเรียบร้อย</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #6666ff;">.entry-content</span> <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">line-height</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">normal</span> !important<span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
textarea<span style="color: #cc00cc;">#status</span> <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">line-height</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">normal</span> !important<span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://cholwich.org/wordpress/2010/02/06/stylish-%e0%b9%81%e0%b8%a5%e0%b8%b0-twitter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ลองเล่น Go</title>
		<link>http://cholwich.org/wordpress/2009/11/22/%e0%b8%a5%e0%b8%ad%e0%b8%87%e0%b9%80%e0%b8%a5%e0%b9%88%e0%b8%99-go/</link>
		<comments>http://cholwich.org/wordpress/2009/11/22/%e0%b8%a5%e0%b8%ad%e0%b8%87%e0%b9%80%e0%b8%a5%e0%b9%88%e0%b8%99-go/#comments</comments>
		<pubDate>Sun, 22 Nov 2009 14:07:27 +0000</pubDate>
		<dc:creator>cholwich</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[go]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://cholwich.org/wordpress/?p=349</guid>
		<description><![CDATA[ไม่ได้เขียนอะไรใหม่ๆ ที่นี่มาเกือบครึ่งปี เพราะงานยุ่ง แล้วก็ยังเสพติด twitter และ facebook งอมแงมอีกต่างหาก วันนี้มีเวลาว่าง (จริงๆ ก็ไม่ว่างหรอก แต่ขี้เกียจทำงานที่ควรจะทำ) เลยเอา Go Programming Language ที่พัฒนาโดย Google มาลองเล่นดู เนื่องจากผมใช้ Mac OS X ซึ่งเป็นแพลตฟอร์มที่สนับสนุนอยู่แล้ว ก็เลยติดตั้งไม่ยาก แค่มี XCode อยู่ แล้วลง mercurial เพิ่ม ก็สามารถโหลดซอร์สโค้ดคอมไพเลอร์ของ Go มาคอมไพล์เองได้เลย ใช้เวลาคอมไพล์ตัวคอมไพเลอร์สั้นมาก แป๊บเดียวเสร็จ ประทับใจพอสมควร จากนั้นก็เลยลองเขียนโปรแกรมแบบมั่วๆ (เพราะยังงงกับ syntax อยู่) เพื่อแก้ปัญหา N-Queens แบบง่ายๆ (ใช้ backtracking search ด้วย recursive ดื้อๆ เอานี่แหละ) โดยใช้ Go: package main [...]]]></description>
			<content:encoded><![CDATA[<p>ไม่ได้เขียนอะไรใหม่ๆ ที่นี่มาเกือบครึ่งปี เพราะงานยุ่ง แล้วก็ยังเสพติด <a href="http://twitter.com">twitter</a> และ <a href="http://facebook.com">facebook</a> งอมแงมอีกต่างหาก วันนี้มีเวลาว่าง (จริงๆ ก็ไม่ว่างหรอก แต่ขี้เกียจทำงานที่ควรจะทำ) เลยเอา <a href="http://golang.org">Go Programming Language</a> ที่พัฒนาโดย <a href="http://google.com">Google</a> มาลองเล่นดู เนื่องจากผมใช้ Mac OS X ซึ่งเป็นแพลตฟอร์มที่สนับสนุนอยู่แล้ว ก็เลยติดตั้งไม่ยาก แค่มี XCode อยู่ แล้วลง mercurial เพิ่ม ก็สามารถโหลดซอร์สโค้ดคอมไพเลอร์ของ Go มาคอมไพล์เองได้เลย ใช้เวลาคอมไพล์ตัวคอมไพเลอร์สั้นมาก แป๊บเดียวเสร็จ ประทับใจพอสมควร</p>
<p>จากนั้นก็เลยลองเขียนโปรแกรมแบบมั่วๆ (เพราะยังงงกับ syntax อยู่) เพื่อแก้ปัญหา N-Queens แบบง่ายๆ (ใช้ backtracking search ด้วย recursive ดื้อๆ เอานี่แหละ) โดยใช้ Go:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">package main
&nbsp;
import <span style="color: #ff0000;">&quot;fmt&quot;</span>
&nbsp;
var N <span style="color: #993333;">int</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">10</span>
&nbsp;
func nqueens<span style="color: #009900;">&#40;</span>board <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #993333;">int</span><span style="color: #339933;">,</span> filled <span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span> <span style="color: #993333;">int</span> <span style="color: #009900;">&#123;</span>
	var attack bool <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> filled <span style="color: #339933;">==</span> N<span style="color: #339933;">-</span><span style="color: #0000dd;">1</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">for</span> i<span style="color: #339933;">:=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>N<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span> <span style="color: #009900;">&#123;</span>
			fmt.<span style="color: #202020;">Printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\t</span>&quot;</span><span style="color: #339933;">,</span> board<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#125;</span>
		fmt.<span style="color: #202020;">Printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">1</span>
	<span style="color: #009900;">&#125;</span>
	filled <span style="color: #339933;">+=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">for</span> i<span style="color: #339933;">:=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>N<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span> <span style="color: #009900;">&#123;</span>
		board<span style="color: #009900;">&#91;</span>filled<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> i<span style="color: #339933;">;</span>
		attack <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">for</span> j<span style="color: #339933;">:=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> j<span style="color: #339933;">&lt;</span>filled<span style="color: #339933;">;</span> j<span style="color: #339933;">++</span> <span style="color: #009900;">&#123;</span>
			dy <span style="color: #339933;">:=</span> board<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">-</span>board<span style="color: #009900;">&#91;</span>filled<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
			dx <span style="color: #339933;">:=</span> j <span style="color: #339933;">-</span> filled<span style="color: #339933;">;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>board<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> board<span style="color: #009900;">&#91;</span>filled<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> 
			<span style="color: #009900;">&#40;</span>dy<span style="color: #339933;">/</span>dx <span style="color: #339933;">==</span> <span style="color: #0000dd;">1</span> <span style="color: #339933;">||</span> dy<span style="color: #339933;">/</span>dx <span style="color: #339933;">==</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>dy<span style="color: #339933;">%</span>dx <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				attack <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">true</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>		
		<span style="color: #b1b100;">if</span> <span style="color: #339933;">!</span>attack <span style="color: #009900;">&#123;</span>
			nqueens<span style="color: #009900;">&#40;</span>board<span style="color: #339933;">,</span> filled<span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#125;</span>	
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
func main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	var board <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #993333;">int</span> <span style="color: #339933;">=</span> make<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #993333;">int</span><span style="color: #339933;">,</span> N<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	nqueens<span style="color: #009900;">&#40;</span>board<span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>ด้วยความอยากรู้ ก็เลยลองเอาโปรแกรมนี้เอามาแปลงเป็นภาษา C แบบตรงๆ บรรทัดต่อบรรทัด</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include&lt;stdio.h&gt;</span>
<span style="color: #339933;">#include&lt;stdlib.h&gt;</span>
&nbsp;
<span style="color: #993333;">const</span> <span style="color: #993333;">int</span> N<span style="color: #339933;">=</span><span style="color: #0000dd;">10</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">int</span> nqueens<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span>board<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> filled<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span> i<span style="color: #339933;">,</span>j<span style="color: #339933;">,</span>attack<span style="color: #339933;">,</span>dy<span style="color: #339933;">,</span>dx<span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>filled <span style="color: #339933;">==</span> N<span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>N<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
			<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\t</span>&quot;</span><span style="color: #339933;">,</span> board<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	filled<span style="color: #339933;">++;</span>
	<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>N<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		board<span style="color: #009900;">&#91;</span>filled<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> i<span style="color: #339933;">;</span>
		attack <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>j<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> j<span style="color: #339933;">&lt;</span>filled<span style="color: #339933;">;</span> j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			dy <span style="color: #339933;">=</span> board<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">-</span>board<span style="color: #009900;">&#91;</span>filled<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
			dx <span style="color: #339933;">=</span> j <span style="color: #339933;">-</span> filled<span style="color: #339933;">;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>board<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> board<span style="color: #009900;">&#91;</span>filled<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span>
			<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>dy<span style="color: #339933;">/</span>dx <span style="color: #339933;">==</span> <span style="color: #0000dd;">1</span> <span style="color: #339933;">||</span> dy<span style="color: #339933;">/</span>dx <span style="color: #339933;">==</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>dy<span style="color: #339933;">%</span>dx <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				attack <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>attack<span style="color: #009900;">&#41;</span>
			nqueens<span style="color: #009900;">&#40;</span>board<span style="color: #339933;">,</span> filled<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span> <span style="color: #339933;">*</span>board <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>N<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	nqueens<span style="color: #009900;">&#40;</span>board<span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>เสร็จแล้วก็ลองเขียน Python อีกโปรแกรมหนึ่ง</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> nqueens<span style="color: black;">&#40;</span>board, filled<span style="color: black;">&#41;</span>:
	<span style="color: #ff7700;font-weight:bold;">global</span> N
	<span style="color: #ff7700;font-weight:bold;">if</span> filled == N-<span style="color: #ff4500;">1</span>:
		<span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> board:
			<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;%d<span style="color: #000099; font-weight: bold;">\t</span>&quot;</span> <span style="color: #66cc66;">%</span> board<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span>,
		<span style="color: #ff7700;font-weight:bold;">print</span>
		<span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">True</span>
	filled+=<span style="color: #ff4500;">1</span>
	<span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">xrange</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>, N<span style="color: black;">&#41;</span>:
		board<span style="color: black;">&#91;</span>filled<span style="color: black;">&#93;</span> = i
		attack = <span style="color: #008000;">False</span>
		<span style="color: #ff7700;font-weight:bold;">for</span> j <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">xrange</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>, filled<span style="color: black;">&#41;</span>:
			dy = board<span style="color: black;">&#91;</span>j<span style="color: black;">&#93;</span>-board<span style="color: black;">&#91;</span>filled<span style="color: black;">&#93;</span>
			dx = j - filled
			<span style="color: #ff7700;font-weight:bold;">if</span> board<span style="color: black;">&#91;</span>j<span style="color: black;">&#93;</span> == board<span style="color: black;">&#91;</span>filled<span style="color: black;">&#93;</span> <span style="color: #ff7700;font-weight:bold;">or</span> <span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>dy/dx == <span style="color: #ff4500;">1</span> <span style="color: #ff7700;font-weight:bold;">or</span> dy/dx == -<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">and</span> dy<span style="color: #66cc66;">%</span>dx==<span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>:
				attack = <span style="color: #008000;">True</span>
				<span style="color: #ff7700;font-weight:bold;">break</span>
		<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> attack:
			nqueens<span style="color: black;">&#40;</span>board, filled<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">0</span>
N=<span style="color: #ff4500;">10</span>
board = <span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">*</span>N
nqueens<span style="color: black;">&#40;</span>board, -<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span></pre></div></div>

<p>ทดลองรัน (ด้วย N=10) แล้วจับเวลาง่ายๆ ด้วย time ก็จะได้ผลเป็น</p>
<table>
<tr>
<th></th>
<th>Go</th>
<th>C</th>
<th>Python</th>
</tr>
<tr>
<th>real</th>
<td>0m0.165s</td>
<td>0m0.041s</td>
<td>0m1.048s</td>
</tr>
<tr>
<th>user</th>
<td>0m0.116s</td>
<td>0m0.029s</td>
<td>0m1.028s</td>
</tr>
<tr>
<th>sys</th>
<td>0m0.040s</td>
<td>0m0.002s</td>
<td>0m0.015s</td>
</tr>
</table>
<p>ประสิทธิภาพแบบคร่าวๆ ก็ถือว่าใช้ได้ทีเดียว ไม่ได้แย่กว่า C นัก แต่ไม่รู้ว่าผมชินกับภาษา C มากเกินไปหรือเปล่า ทำให้ผมรู้สึกแปลกๆ งงๆ กับ syntax ของ Go มันดูไม่ค่อยสวยงามยังไงไม่รู้ บอกไม่ถูก เหมือนแค่เอา C มาตัดบางส่วนออก เพราะกลัวจะพิมพ์เยอะเกินไป มันเลยดูขัดๆ อีกอย่าง Go ก็ไม่ได้เขียนสั้นๆ ง่ายๆ ได้เหมือน Python ผมว่าโครงสร้าง syntax ของ C กับ Python สวยงามกว่าเยอะ แต่ผมก็ยังไม่ลอง concurrent programming ที่เป็นจุดขายของ Go เหมือนกัน เอาไว้หนีงานมาลองใหม่คราวหน้าละกัน</p>
]]></content:encoded>
			<wfw:commentRss>http://cholwich.org/wordpress/2009/11/22/%e0%b8%a5%e0%b8%ad%e0%b8%87%e0%b9%80%e0%b8%a5%e0%b9%88%e0%b8%99-go/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ฟอนท์ Inconsolata กับ LaTeX</title>
		<link>http://cholwich.org/wordpress/2009/07/04/%e0%b8%9f%e0%b8%ad%e0%b8%99%e0%b8%97%e0%b9%8c-inconsolata-%e0%b8%81%e0%b8%b1%e0%b8%9a-latex/</link>
		<comments>http://cholwich.org/wordpress/2009/07/04/%e0%b8%9f%e0%b8%ad%e0%b8%99%e0%b8%97%e0%b9%8c-inconsolata-%e0%b8%81%e0%b8%b1%e0%b8%9a-latex/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 14:38:19 +0000</pubDate>
		<dc:creator>cholwich</dc:creator>
				<category><![CDATA[latex]]></category>
		<category><![CDATA[inconsolata]]></category>

		<guid isPermaLink="false">http://cholwich.org/wordpress/?p=343</guid>
		<description><![CDATA[Inconsolata เป็นฟอนท์สำหรับโปรแกรมเมอร์ (หมายถึงฟอนท์ความกว้างคงที่สำหรับแก้ไขโปรแกรม) ที่ออกแบบโดย Raph Levien ซึ่งผมใช้มาสักระยะหนึ่งแล้ว เนื่องจากชอบรูปร่าง สัดส่วนของตัวอักษร เมื่อไม่นานนี้มีคนใจดีนำฟอนท์นี้ไปทำเป็นแพคเกจสำหรับ LaTeX ซึ่งสามารถโหลดได้จาก http://ctan.org/pkg/inconsolata ทำให้ผมสามารถนำฟอนท์นี้มาใช้สำหรับแสดง code บนสไลด์ที่ใช้ประกอบการสอน (ผมใช้ LaTeX Beamer สำหรับทำสไลด์) แต่เทอมนี้ผมสอนวิชา Computer Architecture ซึ่งพูดถึงพวก machine code และ assembly code เต็มไปหมด จึงคิดว่าการใช้เลขศูนย์แบบมี / คาด จะช่วยลดความกำกวมของเนื้อหาได้พอควร ผมจึงต้องแก้ไขแพคเกจเล็กน้อย เนื่องจาก Karl Berry ที่เป็นคนออกแบบแพคเกจ เลือกใช้ศูนย์แบบไม่มีคาดเป็นรูปร่างปกติสำหรับเลขศูนย์ พอลองดูข้อมูลรูปร่างของตัวอักษรต่างๆ ที่มากับฟอนท์แล้ว ก็พบว่ามีมาให้ทั้งสองแบบ คือ เลขศูนย์แบบปกติ กับเลขศูนย์แบบมี / คาดทับ ก็เลยลองไปดูไฟล์ fi4-ec.enc ซึ่งเป็นไฟล์ที่ใช้กำหนดว่า จะให้รหัสใดใช้รูปร่างตัวอักษรตัวไหนของฟอนท์ แล้วผมก็พบว่าไฟล์นี้ระบุว่า /zero.noslash %0x30 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.levien.com/type/myfonts/inconsolata.html">Inconsolata</a> เป็นฟอนท์สำหรับโปรแกรมเมอร์ (หมายถึงฟอนท์ความกว้างคงที่สำหรับแก้ไขโปรแกรม) ที่ออกแบบโดย Raph Levien ซึ่งผมใช้มาสักระยะหนึ่งแล้ว เนื่องจากชอบรูปร่าง สัดส่วนของตัวอักษร เมื่อไม่นานนี้มีคนใจดีนำฟอนท์นี้ไปทำเป็น<a href="http://texblog.net/latex-archive/fonts/inconsolata/">แพคเกจสำหรับ LaTeX</a> ซึ่งสามารถโหลดได้จาก <a href="http://ctan.org/pkg/inconsolata">http://ctan.org/pkg/inconsolata</a> ทำให้ผมสามารถนำฟอนท์นี้มาใช้สำหรับแสดง code บนสไลด์ที่ใช้ประกอบการสอน (ผมใช้ <a href="http://latex-beamer.sf.net">LaTeX Beamer</a> สำหรับทำสไลด์)</p>
<p>แต่เทอมนี้ผมสอนวิชา Computer Architecture ซึ่งพูดถึงพวก machine code และ assembly code เต็มไปหมด จึงคิดว่าการใช้เลขศูนย์แบบมี / คาด จะช่วยลดความกำกวมของเนื้อหาได้พอควร ผมจึงต้องแก้ไขแพคเกจเล็กน้อย เนื่องจาก Karl Berry ที่เป็นคนออกแบบแพคเกจ เลือกใช้ศูนย์แบบไม่มีคาดเป็นรูปร่างปกติสำหรับเลขศูนย์</p>
<p>พอลองดูข้อมูลรูปร่างของตัวอักษรต่างๆ ที่มากับฟอนท์แล้ว ก็พบว่ามีมาให้ทั้งสองแบบ คือ เลขศูนย์แบบปกติ กับเลขศูนย์แบบมี / คาดทับ ก็เลยลองไปดูไฟล์ fi4-ec.enc ซึ่งเป็นไฟล์ที่ใช้กำหนดว่า จะให้รหัสใดใช้รูปร่างตัวอักษรตัวไหนของฟอนท์ แล้วผมก็พบว่าไฟล์นี้ระบุว่า</p>
<pre>
/zero.noslash       %0x30
</pre>
<p>ผมก็เลยแก้เป็น</p>
<pre>
/zero               %0x30
</pre>
<p>ก็เป็นอันเรียบร้อย เพราะเป็นการบอกให้ LaTeX เลือกใช้เลขศูนย์แบบมี / คาดทับ สำหรับรหัส 0&#215;30</p>
<p>จบแต่เพียงเท่านี้ <img src='http://cholwich.org/wordpress/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://cholwich.org/wordpress/2009/07/04/%e0%b8%9f%e0%b8%ad%e0%b8%99%e0%b8%97%e0%b9%8c-inconsolata-%e0%b8%81%e0%b8%b1%e0%b8%9a-latex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>จราจรกับหลักเหตุผล</title>
		<link>http://cholwich.org/wordpress/2009/06/28/%e0%b8%88%e0%b8%a3%e0%b8%b2%e0%b8%88%e0%b8%a3%e0%b8%81%e0%b8%b1%e0%b8%9a%e0%b8%ab%e0%b8%a5%e0%b8%b1%e0%b8%81%e0%b9%80%e0%b8%ab%e0%b8%95%e0%b8%b8%e0%b8%9c%e0%b8%a5/</link>
		<comments>http://cholwich.org/wordpress/2009/06/28/%e0%b8%88%e0%b8%a3%e0%b8%b2%e0%b8%88%e0%b8%a3%e0%b8%81%e0%b8%b1%e0%b8%9a%e0%b8%ab%e0%b8%a5%e0%b8%b1%e0%b8%81%e0%b9%80%e0%b8%ab%e0%b8%95%e0%b8%b8%e0%b8%9c%e0%b8%a5/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 16:57:42 +0000</pubDate>
		<dc:creator>cholwich</dc:creator>
				<category><![CDATA[thought]]></category>
		<category><![CDATA[bangkok]]></category>
		<category><![CDATA[traffic]]></category>

		<guid isPermaLink="false">http://cholwich.org/wordpress/?p=341</guid>
		<description><![CDATA[แม้ว่าผมจะขับรถเป็น สอบใบขับขี่มานานแล้ว (นานพอที่ทำให้มีใบขับขี่แบบตลอดชีพได้) แต่ผมเพิ่งจะได้ขับรถจริงๆ จังๆ แค่ประมาณ 4 ปีเท่านั้นแหละ หลังจากเริ่มมาทำงานนอกเมือง รถก็กลายเป็นสิ่งจำเป็นอันดับต้นๆ ในการดำเนินชีวิต แต่ยิ่งขับรถในเมืองกรุงก็ยิ่งรู้สึกถึงความไม่มีเหตุผล อย่างเช่น เวลาผมขับรถออกจากซอยหรือสถานที่อะไรบางแห่ง แล้วจะเลี้ยวซ้ายเข้าถนน หลักเหตุผลของผมก็คือ ผมควรจะหันไปมองเฉพาะรถทางด้านขวา ถ้าไม่มีรถวิ่งมาผมก็น่าจะออกรถไปได้เลย แต่ผมก็พบว่ามันไม่ถูกต้อง ผมต้องมองทั้งด้านซ้ายและขวา (หลายๆ หน) เพราะด้านซ้ายมักจะมีพี่มอเตอร์ไซค์ (หลังๆ รถยนต์ก็เอาด้วย) วิ่งสวนทางมาเสมอ แถมบางคนยังไม่มีทีท่าจะหยุดหรือชลอด้วย เวลาเจอทางแยกหรือทางโค้ง ที่มีการแบ่งเลนแยกทางเดินรถ ซึ่งผมควรจะขับรถตรงต่อไปตามทางของผม เหตุผลแบบการจราจรไทย คือ ผมควรจะต้องชลอรถบ้างเป็นบางครั้ง เพราะจะมีรถยนต์ (โดยเฉพาะแท็กซี่) ที่เลือกเข้าช่องทางผิด จะพยายามถอยหลังช้าๆ เพื่อย้อนมาตรงทางแยก จะได้เปลี่ยนทางได้โดยไม่ต้องไปหาทางกลับรถ เหตุการณ์นี้จะแปรผันตรงกับราคาน้ำมัน ยิ่งน้ำมันแพงจะยิ่งพบบ่อยมาก เลิกเถอะครับ ผมไม่ได้กลัวรถพี่โดนชนหรอก แต่ผมกลัวผมชนรถพี่ แล้วผมต้องมาเสียเวลากับเรื่องแบบนี้ เวลาผมขับรถมาตามทางตรงปกติ แล้วเจอทางแยกซึ่งผมจะเลี้ยวขวา ผมก็ควรจะดูรถทั้งข้างหน้าและข้างหลัง เพราะพี่ที่ขับรถมาข้างหลังอาจจะใจร้อน แซงรถผมออกทางขวา และเลี้ยวขวาไปพร้อมๆ กัน ทำให้รถผมที่กำลังหักเลี้ยวขวา ไปประจันด้านข้างของรถพี่เขาได้พอดี นอกจากนี้ถ้าผมขับรถอยู่เลนซ้ายสุด [...]]]></description>
			<content:encoded><![CDATA[<p>แม้ว่าผมจะขับรถเป็น สอบใบขับขี่มานานแล้ว (นานพอที่ทำให้มีใบขับขี่แบบตลอดชีพได้) แต่ผมเพิ่งจะได้ขับรถจริงๆ จังๆ แค่ประมาณ 4 ปีเท่านั้นแหละ หลังจากเริ่มมาทำงานนอกเมือง รถก็กลายเป็นสิ่งจำเป็นอันดับต้นๆ ในการดำเนินชีวิต แต่ยิ่งขับรถในเมืองกรุงก็ยิ่งรู้สึกถึงความไม่มีเหตุผล อย่างเช่น</p>
<p>เวลาผมขับรถออกจากซอยหรือสถานที่อะไรบางแห่ง แล้วจะเลี้ยวซ้ายเข้าถนน หลักเหตุผลของผมก็คือ ผมควรจะหันไปมองเฉพาะรถทางด้านขวา ถ้าไม่มีรถวิ่งมาผมก็น่าจะออกรถไปได้เลย แต่ผมก็พบว่ามันไม่ถูกต้อง ผมต้องมองทั้งด้านซ้ายและขวา (หลายๆ หน) เพราะด้านซ้ายมักจะมีพี่มอเตอร์ไซค์ (หลังๆ รถยนต์ก็เอาด้วย) วิ่งสวนทางมาเสมอ แถมบางคนยังไม่มีทีท่าจะหยุดหรือชลอด้วย</p>
<p>เวลาเจอทางแยกหรือทางโค้ง ที่มีการแบ่งเลนแยกทางเดินรถ ซึ่งผมควรจะขับรถตรงต่อไปตามทางของผม เหตุผลแบบการจราจรไทย คือ ผมควรจะต้องชลอรถบ้างเป็นบางครั้ง เพราะจะมีรถยนต์ (โดยเฉพาะแท็กซี่) ที่เลือกเข้าช่องทางผิด จะพยายามถอยหลังช้าๆ เพื่อย้อนมาตรงทางแยก จะได้เปลี่ยนทางได้โดยไม่ต้องไปหาทางกลับรถ เหตุการณ์นี้จะแปรผันตรงกับราคาน้ำมัน ยิ่งน้ำมันแพงจะยิ่งพบบ่อยมาก เลิกเถอะครับ ผมไม่ได้กลัวรถพี่โดนชนหรอก แต่ผมกลัวผมชนรถพี่ แล้วผมต้องมาเสียเวลากับเรื่องแบบนี้</p>
<p>เวลาผมขับรถมาตามทางตรงปกติ แล้วเจอทางแยกซึ่งผมจะเลี้ยวขวา ผมก็ควรจะดูรถทั้งข้างหน้าและข้างหลัง เพราะพี่ที่ขับรถมาข้างหลังอาจจะใจร้อน แซงรถผมออกทางขวา และเลี้ยวขวาไปพร้อมๆ กัน ทำให้รถผมที่กำลังหักเลี้ยวขวา ไปประจันด้านข้างของรถพี่เขาได้พอดี</p>
<p>นอกจากนี้ถ้าผมขับรถอยู่เลนซ้ายสุด ด้านซ้ายของผมมีแต่ไหล่ทาง ผมก็ไม่ควรจะขับชิดไหล่ทางจนเกินงาม มิฉะนั้นอาจจะโดนบีบแตรไล่ โดยพี่ที่ขับรถตามมา ซึ่งอาจจะรู้สึกไม่ทันใจ ก็จะแซงซ้ายมาทางไหล่ทางได้ และถ้าริจะขับอยู่เลนซ้าย ก็ควรจะขับรถให้เร็วพอสมควร เพราะพี่บางคนก็อาจจะเปิดไฟสูงไล่ หลังจากที่พี่เขาไล่รถทางขวาแล้วไม่หลบให้ เขาก็จะมาไล่รถทางซ้ายด้วย (แล้วจะให้ตู หลบไปขับเลนไหนฟะ)</p>
<p>สุดท้ายผมรู้สึกว่าปัญหาการจราจรเมืองกรุงจริงๆ แล้วแก้ไม่ยากครับ ไม่ต้องใช้เทคโนโลยีอะไร ไม่ต้องสร้างถนนหรือสะพานลอยฟ้าหลายๆ ชั้นหรอก ผมรู้สึกว่ามันแก้ง่ายๆ ที่วิธีการใช้รถใช้ถนนของคนกรุงนี่แหละครับ ผมไม่เข้าใจว่าเราจะใจร้อนกันไปถึงไหน (ช่วงหนึ่ง ผมก็เคยใจร้อนมากๆ นะ แต่ความสามารถในการปาดไปปาดมาไม่ถึงเลยเลิกแล้ว) ขับรถก็ค่อยๆ ไปก็ได้ครับ ไปถึงช้าอีกนิดนึงก็คงไม่ทำให้เสียเงิน หรือเสียอะไรมากนักหรอก อย่างเช่น ถ้ารถมันติด (อาจจะเกิดจากคอขวดข้างหน้า) รถข้างหน้าวิ่งช้ากันอยู่แล้ว พี่ๆ ก็อย่าแซงซ้ายหรือขวา เปิดช่องทางใหม่ไปเบียดเข้าเลย ถ้าพี่ๆ ไม่ทำแบบนั้นผมว่ามันก็ไปกันได้เรื่อยๆ เสียเวลาไม่นานหรอก พอพี่ๆ ไปเบียดแทรกกัน สุดท้ายก็ไปกันได้ไม่กี่คัน ที่เหลือติดกันยาวเป็นหางว่าว พี่ก็ไปกินช่องคนอื่น ทำเอาคนที่ไปต้องติดพลอยติดไปด้วยอืก (กรณีนี้ผมอยากให้ตำรวจไปจับมากที่สุด แต่เวลารถติดๆ ตำรวจก็มักจะไม่จับ)</p>
<p>ผมว่านอกจากรณรงค์เมาไม่ขับแล้ว เราน่าจะมารณรงค์ขับแล้วไม่ใจร้อนด้วยครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://cholwich.org/wordpress/2009/06/28/%e0%b8%88%e0%b8%a3%e0%b8%b2%e0%b8%88%e0%b8%a3%e0%b8%81%e0%b8%b1%e0%b8%9a%e0%b8%ab%e0%b8%a5%e0%b8%b1%e0%b8%81%e0%b9%80%e0%b8%ab%e0%b8%95%e0%b8%b8%e0%b8%9c%e0%b8%a5/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>เขียนโปรแกรมกันเถอะ</title>
		<link>http://cholwich.org/wordpress/2009/06/07/%e0%b9%80%e0%b8%82%e0%b8%b5%e0%b8%a2%e0%b8%99%e0%b9%82%e0%b8%9b%e0%b8%a3%e0%b9%81%e0%b8%81%e0%b8%a3%e0%b8%a1%e0%b8%81%e0%b8%b1%e0%b8%99%e0%b9%80%e0%b8%96%e0%b8%ad%e0%b8%b0/</link>
		<comments>http://cholwich.org/wordpress/2009/06/07/%e0%b9%80%e0%b8%82%e0%b8%b5%e0%b8%a2%e0%b8%99%e0%b9%82%e0%b8%9b%e0%b8%a3%e0%b9%81%e0%b8%81%e0%b8%a3%e0%b8%a1%e0%b8%81%e0%b8%b1%e0%b8%99%e0%b9%80%e0%b8%96%e0%b8%ad%e0%b8%b0/#comments</comments>
		<pubDate>Sun, 07 Jun 2009 01:16:54 +0000</pubDate>
		<dc:creator>cholwich</dc:creator>
				<category><![CDATA[thought]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[teaching]]></category>

		<guid isPermaLink="false">http://cholwich.org/wordpress/?p=330</guid>
		<description><![CDATA[เมื่อวานนี้อ่านข่าวบน /.jp แล้วเจอบทสัมภาษณ์ประธานบริษัท NTT Data ซึ่งเป็นบริษัท IT ในกลุ่ม NTT 若い時にプログラムを書こう、必ず人生の豊かさにつながる &#8211; 山下徹　NTTデータ社長 แปลเป็นไทยได้ความว่า เขียนโปรแกรมกันไปเถอะในช่วงที่อายุยังน้อย, สิ่งเหล่านี้จะเชื่อมโยงกับความรุ่มรวยในชีวิตอย่างแน่นอน &#8211; โทรุ ยะมะชิตะ ประธานบริษัทเอ็นทีทีดาต้า ถ้าอ่านบทสัมภาษณ์ฉบับเต็มแล้ว จะมีประเด็นต่างๆ อยู่หลายประเด็น แต่ในฐานะคนสอนหนังสือเด็กปริญญาตรี ผมสนใจประเด็นการเขียนโปรแกรมเป็นหลัก เพราะปัจจุบันผมรู้สึกว่าตัวเองยังไม่สามารถทำให้เด็กๆ ที่สอนอยู่ หันมาชอบ สนใจและตั้งใจที่จะเขียนโปรแกรมคอมพิวเตอร์ได้ แม้ว่าเด็กๆ เหล่านั้นจะเรียนในสาขาที่โลกภายนอกคาดหวังว่า เมื่อจบแล้วจะต้องมีทักษะในการเขียนโปรแกรมที่เพียงพอ จริงอยู่ว่าเด็กส่วนใหญ่จะพอเขียนโปรแกรมได้ อาจจะใช้วิธีตัดแปะเอาบ้าง หาทางเอาตัวรอดกันไปได้ แต่ส่วนใหญ่มักจะรู้สึกว่าการเขียนโปรแกรมเป็นเรื่องยาก เป็นเรื่องน่าเบื่อ เป็นงานคนชั้นล่าง (เหมือนผู้ใช้แรงงานในสังคมไอที) โดยเฉพาะค่านิยมอันหลังนี้ เป็นสิ่งที่ผมไม่เห็นด้วยที่สุด เพราะผมเชื่อว่าเราไม่สามารถเป็น system analyst เป็น project manager ที่ดี หรือเป็นตำแหน่งต่างๆ ที่บางบริษัทบอกว่าเป็นเหมือนยอดปิระมิดได้ โดยไม่มีพื้นฐาน ทักษะการเขียนโปรแกรม หรือไม่รู้ว่าถ้าออกแบบไปอย่างนี้แล้วคนที่เอาไป implement เขาจะทำยังไง ผมตั้งใจว่าต่อไปนี้ผมพยายามลบค่านิยมนี้ออกจากเด็กๆ [...]]]></description>
			<content:encoded><![CDATA[<p>เมื่อวานนี้อ่านข่าวบน <a href="http://slashdot.jp">/.jp</a> แล้วเจอบทสัมภาษณ์ประธานบริษัท NTT Data ซึ่งเป็นบริษัท IT ในกลุ่ม NTT</p>
<blockquote><p>若い時にプログラムを書こう、必ず人生の豊かさにつながる<br />
&#8211; 山下徹　NTTデータ社長</p></blockquote>
<p>แปลเป็นไทยได้ความว่า</p>
<blockquote><p>เขียนโปรแกรมกันไปเถอะในช่วงที่อายุยังน้อย, สิ่งเหล่านี้จะเชื่อมโยงกับความรุ่มรวยในชีวิตอย่างแน่นอน<br />
&#8211; โทรุ ยะมะชิตะ ประธานบริษัทเอ็นทีทีดาต้า</p></blockquote>
<p>ถ้าอ่านบทสัมภาษณ์ฉบับเต็มแล้ว จะมีประเด็นต่างๆ อยู่หลายประเด็น แต่ในฐานะคนสอนหนังสือเด็กปริญญาตรี ผมสนใจประเด็นการเขียนโปรแกรมเป็นหลัก เพราะปัจจุบันผมรู้สึกว่าตัวเองยังไม่สามารถทำให้เด็กๆ ที่สอนอยู่ หันมาชอบ สนใจและตั้งใจที่จะเขียนโปรแกรมคอมพิวเตอร์ได้ แม้ว่าเด็กๆ เหล่านั้นจะเรียนในสาขาที่โลกภายนอกคาดหวังว่า เมื่อจบแล้วจะต้องมีทักษะในการเขียนโปรแกรมที่เพียงพอ</p>
<p>จริงอยู่ว่าเด็กส่วนใหญ่จะพอเขียนโปรแกรมได้ อาจจะใช้วิธีตัดแปะเอาบ้าง หาทางเอาตัวรอดกันไปได้ แต่ส่วนใหญ่มักจะรู้สึกว่าการเขียนโปรแกรมเป็นเรื่องยาก เป็นเรื่องน่าเบื่อ เป็นงานคนชั้นล่าง (เหมือนผู้ใช้แรงงานในสังคมไอที) โดยเฉพาะค่านิยมอันหลังนี้ เป็นสิ่งที่ผมไม่เห็นด้วยที่สุด เพราะผมเชื่อว่าเราไม่สามารถเป็น system analyst เป็น project manager ที่ดี หรือเป็นตำแหน่งต่างๆ ที่บางบริษัทบอกว่าเป็นเหมือนยอดปิระมิดได้ โดยไม่มีพื้นฐาน ทักษะการเขียนโปรแกรม หรือไม่รู้ว่าถ้าออกแบบไปอย่างนี้แล้วคนที่เอาไป implement เขาจะทำยังไง</p>
<p>ผมตั้งใจว่าต่อไปนี้ผมพยายามลบค่านิยมนี้ออกจากเด็กๆ ที่เข้ามาเรียนในภาค แม้ว่ามันจะเป็นเรื่องยาก เพราะแนวความคิดว่างานบริหารจัดการเป็นงานสบายเป็นเรื่องที่ฝังรากลึกไปแล้ว รวมถึงการเสนอทางเลือกที่ดูเหมือนดีกว่า ว่าการเรียนวิธีการบริหารจัดการโดยตรงก็สามารถเข้าใจวิธีการ และเทคนิคต่างๆ ได้ สามารถเริ่มงานโดยเป็นผู้บริหารได้เลย ไม่จำเป็นต้องทำงานต๊อกต๋อยเหมือนพวกที่เรียนเขียนโปรแกรม เขาทำแค่ออกแบบ เสนอแนวความคิด ที่เหลือก็ปล่อยให้ใครก็ไม่รู้ทำก็หมดเรื่อง</p>
<p>จริงอยู่ ที่เด็กที่จบจากภาคผมทุกคนไม่จำเป็นต้องไปทำงานเขียนโปรแกรม มีงานที่น่าสนใจอีกเยอะ แต่ผมก็เชื่ออย่างประโยคข้างบนว่า ทักษะการเขียนโปรแกรมจะชักนำไปสู่ความรุ่มรวยในชีวิตการทำงาน ทำให้เรามีทักษะที่เพียงพอในการทำสิ่งต่างๆ สำเร็จไปด้วยดี</p>
<p>ปัญหาอย่างหนึ่งสำหรับตัวผมเอง ก็คือ ผมรู้สึกว่าผมยังไม่รู้ ไม่มีวิธีดีๆ ที่จะสอนให้เด็กๆ เข้าใจความสนุกสนาน แล้วความน่าสนใจของการเขียนโปรแกรมได้ คงต้องพยายามกันต่อไป</p>
<p>อ้างอิง: http://slashdot.jp/developers/09/06/05/066228.shtml</p>
]]></content:encoded>
			<wfw:commentRss>http://cholwich.org/wordpress/2009/06/07/%e0%b9%80%e0%b8%82%e0%b8%b5%e0%b8%a2%e0%b8%99%e0%b9%82%e0%b8%9b%e0%b8%a3%e0%b9%81%e0%b8%81%e0%b8%a3%e0%b8%a1%e0%b8%81%e0%b8%b1%e0%b8%99%e0%b9%80%e0%b8%96%e0%b8%ad%e0%b8%b0/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Scroll Wheel บน Bluetooth Mouse</title>
		<link>http://cholwich.org/wordpress/2009/06/02/scroll-wheel-%e0%b8%9a%e0%b8%99-bluetooth/</link>
		<comments>http://cholwich.org/wordpress/2009/06/02/scroll-wheel-%e0%b8%9a%e0%b8%99-bluetooth/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 04:02:27 +0000</pubDate>
		<dc:creator>cholwich</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[bluetooth]]></category>
		<category><![CDATA[hal]]></category>
		<category><![CDATA[X]]></category>

		<guid isPermaLink="false">http://cholwich.org/wordpress/?p=328</guid>
		<description><![CDATA[วันนี้ลองใช้ Bluetooth Mouse ที่มีอยู่ หลังจากที่ไม่ได้ใช้มานาน (หลังๆ ใช้แต่ touchpad จนนิ้วเริ่มสึก) ปรากฏว่าไม่สามารถใช้ scroll wheel ได้ แถม Ubuntu รุ่นหลังๆ ใช้ HAL ทำให้ไม่สามารถแก้ข้อกำหนดเกี่ยวกับ mouse ในไฟล์ xorg.conf ได้ วิธีการแก้ไขจะต้องไปสร้างไฟล์ชื่ /etc/hal/fdi/policy/mouse.fdi แล้วใส่ &#60;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&#62; &#160; &#60;match key=&#34;info.product&#34; string=&#34;Mouseemu virtual mouse&#34;&#62; &#60;merge key=&#34;input.x11_options.ZAxisMapping&#34; type=&#34;string&#34;&#62;4 5&#60;/merge&#62; &#60;/match&#62; เพื่อเพิ่ม option ที่เกี่ยวกับ scroll wheel สำหรับ mouse สุดท้ายรีบูทเครื่องใหม่ ก็เรียบร้อย]]></description>
			<content:encoded><![CDATA[<p>วันนี้ลองใช้ Bluetooth Mouse ที่มีอยู่ หลังจากที่ไม่ได้ใช้มานาน (หลังๆ ใช้แต่ touchpad จนนิ้วเริ่มสึก) ปรากฏว่าไม่สามารถใช้ scroll wheel ได้ แถม Ubuntu รุ่นหลังๆ ใช้ HAL ทำให้ไม่สามารถแก้ข้อกำหนดเกี่ยวกับ mouse ในไฟล์ xorg.conf ได้</p>
<p>วิธีการแก้ไขจะต้องไปสร้างไฟล์ชื่ /etc/hal/fdi/policy/mouse.fdi แล้วใส่</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span> 
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;match</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;info.product&quot;</span> <span style="color: #000066;">string</span>=<span style="color: #ff0000;">&quot;Mouseemu virtual mouse&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;merge</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;input.x11_options.ZAxisMapping&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;string&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>4 5<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/merge<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/match<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>เพื่อเพิ่ม option ที่เกี่ยวกับ scroll wheel สำหรับ mouse สุดท้ายรีบูทเครื่องใหม่ ก็เรียบร้อย</p>
]]></content:encoded>
			<wfw:commentRss>http://cholwich.org/wordpress/2009/06/02/scroll-wheel-%e0%b8%9a%e0%b8%99-bluetooth/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PDFCrop</title>
		<link>http://cholwich.org/wordpress/2009/05/22/pdfcrop/</link>
		<comments>http://cholwich.org/wordpress/2009/05/22/pdfcrop/#comments</comments>
		<pubDate>Fri, 22 May 2009 10:42:28 +0000</pubDate>
		<dc:creator>cholwich</dc:creator>
				<category><![CDATA[latex]]></category>
		<category><![CDATA[pdftex]]></category>

		<guid isPermaLink="false">http://cholwich.org/wordpress/?p=326</guid>
		<description><![CDATA[เวลาใช้ Tikz หรือ PGF สร้างภาพประกอบ หรือแผนภาพต่างๆ ผมจะพบปัญหาเวลา ต้องการนำรูปนั้นไปใช้ในสถานกรณ์อื่น เช่น เดิมเคยเขียนไว้สำหรับรายงาน แล้วอยากเปลี่ยนขนาดใหม่เอาไปใช้ประกอบสไลด์ อันที่จริง Tikz ก็มีตัวเลือก scale มาให้สำหรับปรับเปลี่ยนขนาดให้พอเหมาะ แต่ก็ยังมีปัญหาที่ขนาดตัวอักษรอีก (หรือผมทำไม่เป็นก็ไม่รู้) ต้องแก้ไขฟอนท์ ทำให้ยุ่งยากพอสมควร ผมก็เลยคิดจะเปลี่ยนจากการแปะคำสั่งวาดภาพไปในไฟล์ตรงๆ เขียนไฟล์ LaTeX ต่างหากสำหรับรูปแต่ละรูป ทำเป็น PDF แล้วค่อยเอาไปแปะทีหลัง ซึ่งจะทำให้การปรับเปลี่ยนขนาด ทำได้ง่ายมากๆ ลองหาดูในที่ต่างๆ สุดท้าย ก็เจอโปรแกรม PDFCrop เป็นสคริปต์ที่มากับแพคเกจ texlive-extra-utils บน Ubuntu โปรแกรมนี้ทำหน้าที่ตัดขอบว่างๆ ทั้งหมดของรูปออก ทำให้สามารถใช้ includegraphics แปะเข้าไปในไฟล์อื่นได้ง่ายๆ วิธีใช้ก็คือ $ pdfcrop myfig.pdf]]></description>
			<content:encoded><![CDATA[<p>เวลาใช้ Tikz หรือ PGF สร้างภาพประกอบ หรือแผนภาพต่างๆ ผมจะพบปัญหาเวลา ต้องการนำรูปนั้นไปใช้ในสถานกรณ์อื่น เช่น เดิมเคยเขียนไว้สำหรับรายงาน แล้วอยากเปลี่ยนขนาดใหม่เอาไปใช้ประกอบสไลด์ อันที่จริง Tikz ก็มีตัวเลือก scale มาให้สำหรับปรับเปลี่ยนขนาดให้พอเหมาะ แต่ก็ยังมีปัญหาที่ขนาดตัวอักษรอีก (หรือผมทำไม่เป็นก็ไม่รู้) ต้องแก้ไขฟอนท์ ทำให้ยุ่งยากพอสมควร</p>
<p>ผมก็เลยคิดจะเปลี่ยนจากการแปะคำสั่งวาดภาพไปในไฟล์ตรงๆ เขียนไฟล์ LaTeX ต่างหากสำหรับรูปแต่ละรูป ทำเป็น PDF แล้วค่อยเอาไปแปะทีหลัง ซึ่งจะทำให้การปรับเปลี่ยนขนาด ทำได้ง่ายมากๆ ลองหาดูในที่ต่างๆ สุดท้าย ก็เจอโปรแกรม PDFCrop เป็นสคริปต์ที่มากับแพคเกจ texlive-extra-utils บน Ubuntu โปรแกรมนี้ทำหน้าที่ตัดขอบว่างๆ ทั้งหมดของรูปออก ทำให้สามารถใช้ includegraphics แปะเข้าไปในไฟล์อื่นได้ง่ายๆ วิธีใช้ก็คือ</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ pdfcrop myfig.pdf</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://cholwich.org/wordpress/2009/05/22/pdfcrop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
