เรื่องหนึ่งที่เข้าใจผิดๆ กันมากเกี่ยวกับวงการไอที คือความคิดที่ว่า opensource คือของฟรี การนำ opensource มาใช้งานมีค่าใช้จ่ายเป็นศูนย์
อันที่จริงก็มีหลายคนเขียนถึงเรื่องนี้ไว้หลายครั้งแล้ว: 0, 1, 2 (ฯลฯ ที่ผมไม่สามารถหาเจอได้แล้ว) ซึ่งตอนนั้นผมเองอ่านบทความเหล่านั้นก็ยังไม่ค่อยเข้าใจเท่าไหร่ จนกระทั่งมาได้ทำงานกับ opensource จริงจัง
โปรเจค opensource อาจกำเนิดขึ้นมาจากงานง่ายๆ ที่ได้รับจากผู้ว่าจ้าง ในตอนแรกผู้ใช้เครื่องมือ opensource ชิ้นนั้นคงมีแค่เพียงทีมผู้สร้างไม่กี่คน แต่เมื่อเครื่องมือ opensource ชิ้นนั้นเริ่มมีประสิทธิภาพมากขึ้น มีคนให้ความสนใจศึกษาใช้งานมัน โปรเจค opensource ชิ้นนั้นก็จะได้รับการปรับปรุงขึ้นเรื่อยๆ จนติดลมบนไป
เช่นกันสำหรับผู้ที่ต้องการเริ่มงานบางอย่างที่ได้รับจากผู้ว่าจ้าง การเริ่มจากศูนย์นั้นยากและเสี่ยงเกินไป การดึงเครื่องมือ opensource มาช่วยงานคือสิ่งที่ควรทำ แน่นอนว่าการใช้งานเครื่องมือเหล่านั้น ย่อมพบเจอปัญหาไม่ต่างจากการเขียนโค้ดเองทั้งหมด การส่ง patch กลับไปยังต้นน้ำจะเป็นการช่วยพัฒนา opensource ให้แข็งแกร่งขึ้น
จาก 2 เคสที่ยกมานี้ จะเห็นว่าตัว opensource ไม่ได้จ่ายเงินให้นักพัฒนาเลย แต่เป็นผู้ว่าจ้างนั่นเองที่จ่ายเงินให้นักพัฒนาโดยตรง และโปรเจค opensource ก็โตได้เพราะเงินในส่วนนี้
ใช่ครับ opensource ไม่ใช่ของฟรี และคนทำก็ไม่ได้อิ่มทิพย์!!
Jun 2, 2012
May 17, 2012
ข้าวเย็น-แม่หลับรอ-ลูกกลับบ้านดึก
นอนไม่หลับ เลยตกตะกอนเรื่องตอนเย็นๆ จดเก็บไว้หน่อย เผื่อแก่ไปมีลูกเป็นวัยรุ่นจะได้กลับมาอ่านบ้าง...
ช่วงนี้เห็นโฆษณาหลายตัวเล่นประเด็นเกี่ยวกับความสัมพันธ์ในครอบครัว ตัวละครส่วนใหญ่ก็จะเป็นลูกชายกับแม่แค่สองคน (น่าสนใจมากว่าพ่อหายไปไหน ประเด็นลูกชาย-แม่มัน mass ขนาดนี้เลยหรือ?) และหนึ่งในเรื่องที่โฆษณาแทบทุกตัวหยิบมานำเสนอคือ ข้าวเย็น-แม่หลับรอ-ลูกกลับบ้านดึก
ผมก็เคยเจอกับเหตุการณ์นี้ครับ มันไม่สนุกหรอก ที่ต้องเห็นใครบางคนฟุบหลับบนโต๊ะอาหารที่เปิดไฟรอเรา ทั้งที่เค้ามีสิทธิ์เลือกสิ่งที่ดีกว่าอย่างขึ้นไปนอนเปิดแอร์บนเตียงดีๆ
คุณอาจคิดว่านี่เป็นภาพที่แสดงออกถึงความรัก ผมไม่เถียงนะ แต่คำถามคือ มันสมควรแล้วหรือ?
มันจะดีกว่ามั้ย ถ้าแม่จะขึ้นไปนอนหลับพักผ่อนดีๆ จะได้ไม่ต้องมาเจ็บป่วยทีหลังกับโรคข้อและอาการหลับไม่สนิท เก็บอาหารเข้าตู้เย็นซะ มันจะได้ไม่เสียและมดไม่ตอม ปิดไฟไปเหอะ ประหยัดพลังงานในส่วนที่ไม่ได้ใช้
คุณอาจเถียงว่าทำอย่างนี้แล้วลูกจะรู้มั้ยว่ารัก ... มันไม่มีลูกคนไหนหรอกครับ ที่คิดว่าพ่อแม่ไม่รัก ทำอย่างนี้มีแต่จะเพิ่มความอึดอัดให้ลูกซะเปล่าๆ คิดว่าตนเองเป็นภาระให้ครอบครัวต้องลำบากไปซะงั้น
คุณอาจบอกว่าวันๆ ลูกมันเอาแต่ทำงาน ถ้าไม่รออย่างนี้กว่าจะเจอหน้ากันทีก็คงเป็นสัปดาห์ละครั้ง ... ผมไม่อยากเปรียบเทียบกับคนอื่นๆ ที่เค้าต้องไปทำงานต่างจังหวัดแล้วได้เจอกันปีละสอง-สามครั้งหรอกนะ แต่ลองคิดดูดีๆ ครับ เจอกันแค่สัปดาห์ละครั้งแบบมีความสุข หรือเจอกันทุกวันด้วยความรู้สึกหนักอึ้งเช่นนี้
หรือคุณอาจจะบอกว่าตัวเองแก่แล้ว เวลาเหลือน้อย อยากใช้ชีวิตอยู่กับลูกให้มากที่สุด ... รอลูกอย่างนี้ นอกจากจะเสียสุขภาพกายเพราะได้หลับไม่เต็มที่ ไปจนถึงบางทีก็ไม่ยอมกินข้าวจนกว่าลูกจะกลับ ยังเสียสุขภาพจิต มัวแต่ชะเง้อรอด้วยความเครียดว่าลูกจะปลอดภัยมั้ย ผมอยากถามกลับครับว่า ใช้ชีวิตเครียดๆ แถมยังไม่ดูแลตัวเองอย่างนี้ แล้วคุณจะอยู่กับลูกไปได้นานๆ มั้ยครับ
นอกจากนี้รู้มั้ยครับ กลับบ้านดึกอย่างนี้ ส่วนใหญ่ก็กินข้าวรอบเย็นกันมาหมดแล้ว (ไม่งั้นจะมีแรงทำงานหรือ?) แต่พอเห็นอาหารที่คุณเตรียมไว้ก็ต้องกินอีก ไม่งั้นเดี๋ยวคุณจะเสียน้ำใจ ... แล้วผลลัพท์ที่ตามมาสู่ลูกๆ ก็คือความอ้วนและกรดไหลย้อนนั่นแหละ
... ใครว่าความรักอันเปี่ยมล้นของพ่อแม่ไม่มีทางไม่ดีครับ? ลองคิดดูใหม่นะ
แล้วก็ลองคิดดูนะครับ ว่าความรู้สึกผิดโดยไม่มีทางออกจะส่งผลเสียขนาดไหน เลือกครอบครัวกลับบ้านเร็วก็ทำให้เสียงาน เลือกงานก็ทำให้คนที่บ้านน้อยใจ
หลังจากเจอเหตุการณ์อย่างนี้หลายๆ ครั้ง (จนบางครั้งผมทั้งโมโหทั้งเสียใจ นั่งลงจ้วงข้าวเย็นที่เย็นชืดและมีมดขึ้นจนหมด) ผมเลยตัดสินใจที่จะไม่กลับบ้าน มันไม่ใช่ทางเลือกที่ผมอยากทำเท่าไหร่หรอก แต่ในเมื่อการพูดคุยอธิบายมันไม่ได้ผลแล้ว ก็ปล่อยให้แม่กระวนกระวายใจเล่นซักวันสองวัน และรับรู้ไว้ว่าแม้จะรอไปอย่างนี้ ผมก็ไม่กลับบ้านให้คุณเห็นหน้าเร็วขึ้นหรอกนะ
ก็เลือกเอาละกันครับ ว่าคุณจะเป็นพ่อแม่แบบไหนให้ลูกจดจำ? จะเป็นพ่อแม่ที่ทำให้ลูกรู้สึกผิดอยู่ตลอดเวลา เพราะว่าปันเวลาไปดูแลท่านได้ไม่ดีพอ หรือจะเป็นพ่อแม่ที่ลูกอาจไม่ได้คิดถึงตลอดเวลา แต่พอพูดถึงทีไรก็อมยิ้มและพูดด้วยความภาคภูมิใจว่า นี่แหละพ่อแม่ของฉัน
ช่วงนี้เห็นโฆษณาหลายตัวเล่นประเด็นเกี่ยวกับความสัมพันธ์ในครอบครัว ตัวละครส่วนใหญ่ก็จะเป็นลูกชายกับแม่แค่สองคน (น่าสนใจมากว่าพ่อหายไปไหน ประเด็นลูกชาย-แม่มัน mass ขนาดนี้เลยหรือ?) และหนึ่งในเรื่องที่โฆษณาแทบทุกตัวหยิบมานำเสนอคือ ข้าวเย็น-แม่หลับรอ-ลูกกลับบ้านดึก
ผมก็เคยเจอกับเหตุการณ์นี้ครับ มันไม่สนุกหรอก ที่ต้องเห็นใครบางคนฟุบหลับบนโต๊ะอาหารที่เปิดไฟรอเรา ทั้งที่เค้ามีสิทธิ์เลือกสิ่งที่ดีกว่าอย่างขึ้นไปนอนเปิดแอร์บนเตียงดีๆ
คุณอาจคิดว่านี่เป็นภาพที่แสดงออกถึงความรัก ผมไม่เถียงนะ แต่คำถามคือ มันสมควรแล้วหรือ?
มันจะดีกว่ามั้ย ถ้าแม่จะขึ้นไปนอนหลับพักผ่อนดีๆ จะได้ไม่ต้องมาเจ็บป่วยทีหลังกับโรคข้อและอาการหลับไม่สนิท เก็บอาหารเข้าตู้เย็นซะ มันจะได้ไม่เสียและมดไม่ตอม ปิดไฟไปเหอะ ประหยัดพลังงานในส่วนที่ไม่ได้ใช้
คุณอาจเถียงว่าทำอย่างนี้แล้วลูกจะรู้มั้ยว่ารัก ... มันไม่มีลูกคนไหนหรอกครับ ที่คิดว่าพ่อแม่ไม่รัก ทำอย่างนี้มีแต่จะเพิ่มความอึดอัดให้ลูกซะเปล่าๆ คิดว่าตนเองเป็นภาระให้ครอบครัวต้องลำบากไปซะงั้น
คุณอาจบอกว่าวันๆ ลูกมันเอาแต่ทำงาน ถ้าไม่รออย่างนี้กว่าจะเจอหน้ากันทีก็คงเป็นสัปดาห์ละครั้ง ... ผมไม่อยากเปรียบเทียบกับคนอื่นๆ ที่เค้าต้องไปทำงานต่างจังหวัดแล้วได้เจอกันปีละสอง-สามครั้งหรอกนะ แต่ลองคิดดูดีๆ ครับ เจอกันแค่สัปดาห์ละครั้งแบบมีความสุข หรือเจอกันทุกวันด้วยความรู้สึกหนักอึ้งเช่นนี้
หรือคุณอาจจะบอกว่าตัวเองแก่แล้ว เวลาเหลือน้อย อยากใช้ชีวิตอยู่กับลูกให้มากที่สุด ... รอลูกอย่างนี้ นอกจากจะเสียสุขภาพกายเพราะได้หลับไม่เต็มที่ ไปจนถึงบางทีก็ไม่ยอมกินข้าวจนกว่าลูกจะกลับ ยังเสียสุขภาพจิต มัวแต่ชะเง้อรอด้วยความเครียดว่าลูกจะปลอดภัยมั้ย ผมอยากถามกลับครับว่า ใช้ชีวิตเครียดๆ แถมยังไม่ดูแลตัวเองอย่างนี้ แล้วคุณจะอยู่กับลูกไปได้นานๆ มั้ยครับ
นอกจากนี้รู้มั้ยครับ กลับบ้านดึกอย่างนี้ ส่วนใหญ่ก็กินข้าวรอบเย็นกันมาหมดแล้ว (ไม่งั้นจะมีแรงทำงานหรือ?) แต่พอเห็นอาหารที่คุณเตรียมไว้ก็ต้องกินอีก ไม่งั้นเดี๋ยวคุณจะเสียน้ำใจ ... แล้วผลลัพท์ที่ตามมาสู่ลูกๆ ก็คือความอ้วนและกรดไหลย้อนนั่นแหละ
... ใครว่าความรักอันเปี่ยมล้นของพ่อแม่ไม่มีทางไม่ดีครับ? ลองคิดดูใหม่นะ
แล้วก็ลองคิดดูนะครับ ว่าความรู้สึกผิดโดยไม่มีทางออกจะส่งผลเสียขนาดไหน เลือกครอบครัวกลับบ้านเร็วก็ทำให้เสียงาน เลือกงานก็ทำให้คนที่บ้านน้อยใจ
หลังจากเจอเหตุการณ์อย่างนี้หลายๆ ครั้ง (จนบางครั้งผมทั้งโมโหทั้งเสียใจ นั่งลงจ้วงข้าวเย็นที่เย็นชืดและมีมดขึ้นจนหมด) ผมเลยตัดสินใจที่จะไม่กลับบ้าน มันไม่ใช่ทางเลือกที่ผมอยากทำเท่าไหร่หรอก แต่ในเมื่อการพูดคุยอธิบายมันไม่ได้ผลแล้ว ก็ปล่อยให้แม่กระวนกระวายใจเล่นซักวันสองวัน และรับรู้ไว้ว่าแม้จะรอไปอย่างนี้ ผมก็ไม่กลับบ้านให้คุณเห็นหน้าเร็วขึ้นหรอกนะ
ก็เลือกเอาละกันครับ ว่าคุณจะเป็นพ่อแม่แบบไหนให้ลูกจดจำ? จะเป็นพ่อแม่ที่ทำให้ลูกรู้สึกผิดอยู่ตลอดเวลา เพราะว่าปันเวลาไปดูแลท่านได้ไม่ดีพอ หรือจะเป็นพ่อแม่ที่ลูกอาจไม่ได้คิดถึงตลอดเวลา แต่พอพูดถึงทีไรก็อมยิ้มและพูดด้วยความภาคภูมิใจว่า นี่แหละพ่อแม่ของฉัน
Apr 27, 2012
Code Jam 2012 รอบคัดเลือก
สืบเนื่องจาก @Blltz กับ @ngfar มาเที่ยวบ้าน เลยนั่งปั่น Daiblo II กันตั้งแต่ตีสองตีสามจนถึงเจ็ดโมงเช้า กว่าจะเริ่มทำโจทย์ (ซึ่งควรจะเริ่มทำตั้งแต่หกโมงเช้าเลย)
ข้อแรก ง่ายๆ แค่ substitution cipher ธรรมดา ก็โยน input เข้าไป map กันแล้วสร้างเป็น dict ออกมา ทีนี้เวลามันเหลือ เลยเล่นกับ code ซักหน่อย ให้คนตามอ่านปวดหัวเล่น (ของจริงมันอยู่ในบรรทัดเดียว แต่อันนี้แยกบรรทัดให้อ่านง่ายๆ ละนะ) :P
print('\n'.join(
'Case #{}: {}'.format(
t+1,
''.join(d[c]
for d in [dict(zip('abcdefghijklmnopqrstuvwxyz ',
'yhesocvxduiglbkrztnwjpfmaq '))]
for c in input()))
for t in range(int(input()))))
แล้วก็เพิ่งมานึกได้ว่า ไม่ต้องสร้างเป็น dict ก็ได้นี่หว่า...ข้อถัดมา อันนี้ทดในกระดาษ กระจายรูปแบบออกมาแล้วจะพบว่า ถ้าคะแนน mod 3 แล้วได้ 1 ไม่มีทางที่จะเป็นเซอร์ไพรส์ เลยดูแค่ที่มันไม่ใช่พอ แล้วก็เพิ่มข้อยกเว้นคะแนนแค่ 0 กับ 1 ด้วย
from math import ceil
for t in range(int(input())):
gg, surprise, expected, *point = (int(n) for n in input().split())
point.sort(reverse=True)
count = 0
for p in point:
if ceil(p/3) >= expected:
count += 1
elif surprise > 0 and ceil(p/3)+1 >= expected:
if p%3 == 1 or p in (0, 1):
continue
count += 1
surprise -= 1
print('Case #{}: {}'.format(t+1, count))
ถ้าดูตาม code แล้ว จะเห็นว่าเริ่มมาสั่ง sort ไว้เลย (จริงๆ ไม่ต้องก็ได้) คือตอนนั้นเตรียม optimize ไว้แล้ว แต่เท่าที่จับเวลาดูไม่น่าเป็นห่วง เลยไม่ optimize ดีกว่า เดี๋ยวเจอ bug ซ่อนเร้นข้อสาม สมองเริ่มตายเพราะไม่ได้นอนทั้งคืน + เห็นคำว่า recycle เลยเขียนแบบ recursive (ที่ไม่จำเป็นต้อง recursive) ซะเลย 555+
def recycle(m, r):
global pair, count
if r > 0:
m = m%digit * 10 + int(m/digit)
if lower <= n < m <= upper and m not in pair.setdefault(n, []):
pair[n].append(m)
count += 1
recycle(m, r-1)
for t in range(int(input())):
lower, upper = [int(n) for n in input().split()]
round = len(str(lower)) - 1
digit = 10 ** round
pair = {}
count = 0
for n in range(lower, upper+1):
recycle(n, round)
print('Case #{}: {}'.format(t+1, count))
อันนี้ optimize นิดหน่อย ตอนแรกทำการกลับเลขโดยแปลงเป็น str -> สลับที่ str -> แปลงกลับเป็นตัวเลข ปรากฎว่ากินเวลาไปเกินกว่ารับได้ เลยเปลี่ยนวิธีเขียนเป็น math ถ้า test แค่ส่วนกลับเลขก็เร็วกว่าเป็นสิบเท่าเหมือนกัน แต่ไม่ได้ลอง test ทั้ง script ดูว่าเร็วจนน่าพอใจหรือเปล่าอนึ่ง พอเอาไปรันใน pypy แล้วไม่มีปัญหาเรื่องความเร็วเลยแฮะ เสียเวลา optimize ทำไมเนี่ย
(ข้อนี้แอบโดน @lewcpe ว่าตรงที่ทำไมใช้ global ไม่ return เอาตามธรรมดาวิสัยฟังก์ชั่นทั่วไปด้วย)
พอทำ 3 ข้อแรกเสร็จก็ออกไปเล่นสงกรานต์ กลับมาตอนดึกๆ นั่งมึนหัวอยู่พักนึงแล้วก็คิดวิธีแก้ปัญหาข้อ 4 ได้ (แบบเดียวกับเฉลยบนเว็บ คือสร้างภาพแบบ reflex แล้วใช้วงกลมร้อมรั้วนับเอา) แต่ตอนนั้นคิดวิธี implement ดีๆ ไม่ออกแล้ว แถมเท่าที่ลองเขียนเล่นๆ ก็คิดว่าน่าจะต้องเจองานหนักกว่า 200 บรรทัดแน่ๆ (เวลาไม่น่าพอ) และยังเลือกไม่ถูกอีกว่าจะเขียนแบบ OOP หรือ functional ดี เลยตัดสินใจนอนดีกว่า
แล้วเจอกันรอบ 1A ครับ ~
Feb 25, 2012
คอนเสิร์ตโนดาเมะ

คราวนี้จัดที่กาดสวนแก้ว ใกล้บ้านขนาดนี้ ยังไงก็ไม่พลาดอยู่แล้ว
Beethoven Symphony No.7
เป็นเพลงแรกที่ถูกนำมาเล่นในคอนครั้งนี้ น่าเสียดายว่าเป็น short version คือ rearrange ให้แต่ละท่อนมีแค่ part ใจความสำคัญแค่ครั้งเดียว ไม่มีการย้อนความซ้ำอีกรอบตามรูปแบบของ symphony โดยทั่วไป และระหว่าง movement ก็เล่น (เกือบจะ) ต่อกันทันทีเลย สงสัยว่าไม่อยากให้ปรบมือคั่นระหว่าง movement? สำหรับตัวเพลงนั้น movement แรกเล่นได้ช้ามาก (น่าจะเป็นไปตามสไตล์ของอาจารย์สมัคร กาใจคำอย่างนั้นเอง?) ทั้งที่น่าจะทำให้กระฉับกระเฉงมากกว่านี้ได้อีกหน่อย พอเข้า movement 2 ก็ขาดซึ่งเสียงแตรมา intro ปลุกใจ ข้ามไปยัง part violin เลย ส่วน movement ที่ 3 และ 4 นั้น ยังขาดความสง่างาม เกรียงไกรอย่างที่มันควรเป็นอยู่ครับ
Beethoven Spring Sonata - Allegro
แต่เพลงที่สองนี้ผมเทใจให้หมดเลยนะ piano ของคุณเรมีย์ นามเทพกับ violin ของอาจารย์อภิรัตน์ ประพันธ์วงศ์เล่นประสานกันได้ลงตัวมาก เสียอย่างนึงคือนักดนตรีไม่ได้ซ้อมถึงขั้นที่ไม่ต้องดู score แล้วจังหวะที่พลิกกระดาษเปิดหน้าถัดไปนั้นเสียงดังมาก คนฮือฮากันใหญ่ (ทำไมก็ไม่รู้)
Beethoven Pathetique Sonata - Andante Cantabile
เพลงนี้ก็เอาใจไปให้หมดเลยเหมือนกันครับ ชอบๆๆ (อ๋อ ผู้เล่นคือคุณเรมีย์คนเดิมครับ) แต่เสียดายว่าตอนใกล้ๆ จบเพลง มีเด็กอายุไม่น่าเกิน 5 ขวบเสียงดังขึ้นมา (ทำไมฟระ คนกำลังอิน) แย่ๆๆ
Gershwin Rhapsody in Blue
แล้วก็กลับมาที่เพลงแบบวงใหญ่อีกครั้ง ก่อนเริ่มเพลงแน่นอนว่าต้องเทียบเสียง เด็กคนนั้นนั่นแหละก็เทียบเสียงไปกับเค้าด้วย (เอ่อ จะว่าไปมันก็ตลกนะ... แต่ตอนนั้นขำไม่ออกกับมารยาทของผู้ปกครองแฮะ) แล้วเด็กคนนั้นก็ส่งเสียงเจี๊ยวจ๊าวตลอดเพลงซะอีก (ทำไมไม่พาลูกกลับบ้านไปเลย?) ส่วนเนื้อหาเพลงนั้นก็ปรกติทั่วไปดีครับ ได้คุณ Soo Hwan Cha มาเล่น piano คู่กับการคอนดักต์ของอาจารย์ชัยพฤกษ์ เมฆรา แต่โดยส่วนตัวแล้ว เพลงนี้ผมหลับแฮะ.. (เฉยๆ กับเพลงกึง Jazz กึ่ง Classic เป็นทุนเดิมอยู่แล้ว)
Rachmaninoff Piano Concerto No.2
นับได้ว่าเป็นไฮไลท์ของงานเลยทีเดียวกับเพลงนี้ แต่ผมว่าฝีมือ piano ของคุณ Atsuko Seta ยังไม่แกร่งกล้าพอที่จะฝ่าฟันทะเล orchestra ไปได้แฮะ หลายๆ ครั้งที่เสียง piano ของเธอนั้นโดนกลืนหายไปในพายุอันหนักหน่วง หนำซ้ำ แม้ว่าพายุร้ายจะได้สงบลง เธอกลับไม่สามารถฉายสายรุ้งสวยงามทั้งสองวงได้ ที่สำคัญ เธอจำโน้ตผิดไป 1 ห้อง (อีกแล้ว) ครับ ทางฝั่ง orchestra ก็เลวร้ายไม่แพ้กัน มีท่อนนึงที่เครื่องเป่าเกือบจะทำเพลงล่มเพราะหายไป 2 ห้อง และเฟรนช์ฮอร์นเล่นเสียงดังเกินไปด้วย -___-"
แต่โดยรวมก็ถือว่า คุ้มกับบัตรราคานักศึกษาครับ ยิ่งถ้ารู้ว่าวง orchestra เป็นวงเยาว์ชนที่อาศัยแค่ซ้อมช่วงเย็นด้วยแล้ว น่าจับตามองจริงๆ ว่าถ้าเราตั้งวง orchestra เป็นเรื่องเป็นราว น่าจะไปได้ไกลกว่านี้มากเลยนะ
Feb 16, 2012
ซ้อม CodeJam
ช่วงนี้ซ้อม CodeJam อยู่ หวังว่าจะได้เสื้อ Google มาใส่เล่น (โดน @lewcpe ยั่วให้อยากแข่ง) เลยว่าจะจดรายระเอียดเอาไว้หน่อย เผื่อว่าใครอยากจะลงเล่นแย่งชิงเสื้อไปด้วย อิอิ
การเขียนโปรแกรมแก้โจทย์:
- ใช้ภาษาอะไรก็ได้ ขอแค่มี compiler เวอร์ชันฟรีให้กรรมการเอาไว้ทดสอบก็พอ (Mathematica อด)
- ส่วน editor/ide จะใช้อะไรก็ได้ อันนี้ฟรีสไตล์เลย
- แต่ระบบคิดคะแนนคือโหลด test case มารันในเครื่องตัวเอง แล้วส่งคำตอบกลับไป ไม่ใช่รันที่ฝั่ง server ปิดบัง test case
- ดังนั้น test case ที่ให้มาก็จะมี time out เพื่อป้องกันการที่เราโหลด test case มาศึกษานั่นเอง
- และเวลาส่งคำตอบ ต้องแนบไฟล์โปรแกรมของเราไปด้วย
คำถามแต่ละข้อ:
- ในหนึ่งคำถาม จะมี test case ให้ 2 ชุด (ง่ายกับโหด)
- อ่านโจทย์ + เขียนโปรแกรมให้เสร็จก่อน แล้วค่อยโหลด test case
- test case ข้อง่ายเมื่อโหลดมาแล้ว มีเวลา 4 นาทีในการหาคำตอบ และส่งข้อมูลกลับไปให้ตรวจ
- ส่งคำตอบผิดไป ทางโน้นจะบอกว่าผิด แต่ยังให้ส่งใหม่ได้เรื่อยๆ จนกว่าเวลา 4 นาทีจะหมด
- ถ้าเวลาหมดก็ต้องโหลด test case ชุดใหม่มาคิด
- เมื่อส่งคำตอบที่ถูกต้องไปแล้ว ถึงจะโหลด test case แบบโหดมาทำได้
- test case โหดให้เวลา 8 นาที แต่จะไม่บอกตอนแข่งว่าถูกหรือผิด แถมคราวนี้เวลาหมดแล้วหมดเลย (ระวังให้ดี)
ในหนึ่งรอบต้องเจอ:
- แต่ละรอบจะมีคำถามให้ 3 ข้อ เรียงจากคะแนนน้อยไปมาก (อาจจะถือว่าเรียงง่ายไปยากด้วย)
- ถ้าคิดว่าทำไม่ทันทั้ง 3 ข้อ ควรเก็บข้อแรก (ง่ายสุด) แล้วข้ามไปเก็บข้อสุดท้ายเลย จะได้คะแนนเยอะกว่าเก็บข้อแรกกับข้อที่สอง
- แต่ถ้าคิดจะทำข้อสุดท้ายด้วยการ recursive - brute force ไม่พึ่ง dynamic programming ทำใจได้เลยว่าผ่านแค่ test case แบบง่ายเท่านั้น
- เพราะฉะนั้น จะเขียน algorithm ธรรมดาเก็บ test case แบบง่ายทั้งหมดก่อน (อย่างรวดเร็ว) แล้วค่อย optimize เพื่อลุย test case โหดก็ได้
รอบที่แข่งขัน:
- รอบ qualification ให้เวลา 24 ชั่วโมง แต่ถ้าจะจริงจังกับเสื้อ ควรทำรอบนี้ให้เสร็จใน 2 ชั่วโมง เพราะคำถามง่ายมาก
- เมื่อผ่าน qualification แล้ว ก็จะพบกับรอบที่ 1 ซึ่งมีให้เลือกเล่น 3 รอบย่อย
- จะแข่งรอบย่อยกี่รอบก็ได้ ขอแค่ผ่านรอบย่อยอันใดอันหนึ่งก็พอแล้ว (เข้ารอบประมาณรอบย่อยละ 1000 คน)
- รอบย่อยของรอบที่ 1 จะเริ่มโหดขึ้นมาบ้างแล้ว ควรเก็บให้ได้อย่างน้อย 2 ข้อเต็มๆ (เวลาแข่งประมาณ 2.5 ชั่วโมง)
- ถ้าไม่มีปัญหาอะไร ก็จะได้ผ่านเข้าไปแข่งรอบที่ 2
- รอบนี้จะยากขึ้นมาอีกระดับเลย เก็บได้ข้อนึงเต็มๆ กับอีกข้อที่ผ่านแค่ test case ง่ายก็มีสิทธิ์ได้เสื้อแล้ว
- จะผ่านเข้ารอบที่ 3 ได้ต้องติด 500 อันดับแรก ส่วนถ้าจะหวังเสื้อก็ติด 1000 อันดับแรก
เอาให้ได้ถึงแค่นี้ก่อน ถ้าติดถึงรอบ 3 มหาโหดจริงจะมาเขียนต่อ (ตอนนี้หวังแค่เสื้ออย่างเดียว)
Feb 9, 2012
การศึกษาไทย
ออกตัวก่อนว่าผมไม่ได้เรียนสายคอมฯ โดยตรง แต่ด้วยความที่ชอบคอมพิวเตอร์อยู่บ้าง ก็อยู่คลุกคลีกับมันบ่อยๆ
เรียกว่าเป็นความโชคดี (หรือโชคร้ายกันแน่) ของผมเอง ที่ไม่ได้เริ่มจากภาษา C/Java อย่างที่คนเรียนสายนี้มักจะทำกัน แต่ไปเริ่มกับภาษาชั้นสูงเลยอย่าง Python/JavaScript ทำให้ผมไม่ค่อยรู้เรื่องรู้ราวอะไรกับการศึกษาในมหาวิทยาลัยของสายนี้เท่าไหร่
แถมไอ้ตอนที่ผมเรียนรู้เอง ก็ไม่ได้ค่อยๆ เรียนค่อยๆ สร้าง tool แต่ละอย่างตามที่สอนในห้องอีก อยากได้อะไรก็ถาม Stack Overflow เอาเป็นที่แรก พวก tool ต่างๆ ก็เลยไม่ค่อยได้เขียนเอง import lib เข้ามาใช้เป็นประจำ
มันเลยทำให้ผมโคตรไม่เข้าใจว่า ถ้าจะรับค่าตัวเลข 0-6 แล้วส่งคืนเป็นวันอาทิตย์-เสาร์ ทำไมต้องเขียน if-else เพื่อตรวจเอาเองด้วย ทั้งๆ ที่เราก็มี strptime-strftime เอาไว้ให้ใช้อยู่แล้ว...
แล้วข้อสอบก็ออกให้ตรวจสอบ leap year ผมก็เขียนไปอย่างนี้ (ข้อสอบเป็นภาษาอื่น ไม่ใช่ Python)
วันนี้ซ้อมโจทย์ CodeJam เล่นๆ แล้วก็คิดว่า เอ่อ! โจทย์หยั่งงี้แหละ ที่มันควรเอาไปออกเป็นข้อสอบ
แต่พอลองมาดูๆ แล้ว โจทย์มันก็ยากพอควรอยู่เหมือนกัน แถมเวลาสอบแค่ 3 ชั่วโมง (ก็ประมาณเวลาแข่งนั่นแหละ) ถ้าอาจารย์เอาแต่สอนตามหลักสูตรอย่างนี้ นักศึกษาคงทำกันได้อย่างมากก็แค่ข้อเดียว
สรุปแล้ว ผลการสอบของการศึกษาไทยมันบอกแม่งอะไรวะ?
เรียกว่าเป็นความโชคดี (หรือโชคร้ายกันแน่) ของผมเอง ที่ไม่ได้เริ่มจากภาษา C/Java อย่างที่คนเรียนสายนี้มักจะทำกัน แต่ไปเริ่มกับภาษาชั้นสูงเลยอย่าง Python/JavaScript ทำให้ผมไม่ค่อยรู้เรื่องรู้ราวอะไรกับการศึกษาในมหาวิทยาลัยของสายนี้เท่าไหร่
แถมไอ้ตอนที่ผมเรียนรู้เอง ก็ไม่ได้ค่อยๆ เรียนค่อยๆ สร้าง tool แต่ละอย่างตามที่สอนในห้องอีก อยากได้อะไรก็ถาม Stack Overflow เอาเป็นที่แรก พวก tool ต่างๆ ก็เลยไม่ค่อยได้เขียนเอง import lib เข้ามาใช้เป็นประจำ
มันเลยทำให้ผมโคตรไม่เข้าใจว่า ถ้าจะรับค่าตัวเลข 0-6 แล้วส่งคืนเป็นวันอาทิตย์-เสาร์ ทำไมต้องเขียน if-else เพื่อตรวจเอาเองด้วย ทั้งๆ ที่เราก็มี strptime-strftime เอาไว้ให้ใช้อยู่แล้ว...
แล้วข้อสอบก็ออกให้ตรวจสอบ leap year ผมก็เขียนไปอย่างนี้ (ข้อสอบเป็นภาษาอื่น ไม่ใช่ Python)
def is_leap(year):
if not year%400 or (year%100 and not year%4):
return True
else:
return False
ปรากฏว่าอาจารย์ไม่ตรวจให้ เพราะผมไม่ได้ใช้ nested-if-else อย่างที่สอนในห้อง!!วันนี้ซ้อมโจทย์ CodeJam เล่นๆ แล้วก็คิดว่า เอ่อ! โจทย์หยั่งงี้แหละ ที่มันควรเอาไปออกเป็นข้อสอบ
แต่พอลองมาดูๆ แล้ว โจทย์มันก็ยากพอควรอยู่เหมือนกัน แถมเวลาสอบแค่ 3 ชั่วโมง (ก็ประมาณเวลาแข่งนั่นแหละ) ถ้าอาจารย์เอาแต่สอนตามหลักสูตรอย่างนี้ นักศึกษาคงทำกันได้อย่างมากก็แค่ข้อเดียว
สรุปแล้ว ผลการสอบของการศึกษาไทยมันบอกแม่งอะไรวะ?
Feb 2, 2012
Inception ส้นตีน
(ไม่ได้ด่าหนัง Inception นะครับ) วันนี้เห็นน้อง @srakrn อัพเรื่องตรรกะส้นตีนแล้วคิดถึงที่พี่ @lewcpe เคยเขียนไว้เช่นกัน
ส่วนตัวผมคิดว่ามีอีกอย่างที่แม่งโคตรส้นตีนมากๆ คือเอาความคิดตัวเองเป็นใหญ่ อะไรไม่เห็นไปในทางเดียวกับตัวเองต้องปิดกั้น เซนเซอร์ ห้ามแสดงความเห็น แล้วก็แม่งเอาความคิดตัวเองฝังหัวเข้าไป มึงไม่ทำอย่างกูมึงผิด ห้ามเถียง
... ก่อนจะบอกว่าประชาธิปไตยๆ มึงเคยเข้าใจคำว่าสิทธิและเสรีภาพมั้ยวะ?
อีกนานมั้ยกว่าเราจะเรียนรู้ว่า แม้จะไม่เห็นด้วยกับความคิดของอีกฝ่ายเลยแม้ซักนิดเดียว แต่เราก็จะไม่ปิดกั้นห้ามอีกฝั่งทำสิ่งนั้นๆ ตราบใดที่มันไม่ได้ไปขัดแย้งปิดกั้นเสรีภาพของคนอื่นๆ
ส้นตีนเถอะครับ
ส่วนตัวผมคิดว่ามีอีกอย่างที่แม่งโคตรส้นตีนมากๆ คือเอาความคิดตัวเองเป็นใหญ่ อะไรไม่เห็นไปในทางเดียวกับตัวเองต้องปิดกั้น เซนเซอร์ ห้ามแสดงความเห็น แล้วก็แม่งเอาความคิดตัวเองฝังหัวเข้าไป มึงไม่ทำอย่างกูมึงผิด ห้ามเถียง
... ก่อนจะบอกว่าประชาธิปไตยๆ มึงเคยเข้าใจคำว่าสิทธิและเสรีภาพมั้ยวะ?
อีกนานมั้ยกว่าเราจะเรียนรู้ว่า แม้จะไม่เห็นด้วยกับความคิดของอีกฝ่ายเลยแม้ซักนิดเดียว แต่เราก็จะไม่ปิดกั้นห้ามอีกฝั่งทำสิ่งนั้นๆ ตราบใดที่มันไม่ได้ไปขัดแย้งปิดกั้นเสรีภาพของคนอื่นๆ
ส้นตีนเถอะครับ
Jan 15, 2012
จะเช็คถูกอะไรกับชีวิตนักหนา
หลายวันก่อนมีเรื่องให้ได้แวะเข้า Windows แล้วก็เจอนี่
ก็ยังสงสัยอยู่ว่า มันจะเช็กถูกอะไรกับชีวิต (กู) นักหนา (วะ) ออกแบบ icon อย่างอื่นไม่เป็นหรือไง?
แต่คิดไปคิดมาก็นั่นแหละ เราจะภูมิใจและมีชีวิตอยู่ต่อไปได้ โดยที่ไม่ยอมแก้ไขเรื่องผิดให้เป็นเรื่องถูกหรือ?
เพียงแต่บางทีมันก็กดดันไปนะ ถ้าทุกๆ เรื่องมีกฎเกณฑ์ข้อกำหนดตายตัว ว่าเราต้องอย่างโน้นอย่างนี้อย่างนั้น เพื่อให้ผลลัพท์สุดท้ายออกมาถูกต้องหมด โดยที่ไม่มีดินแดนให้ได้ลองผิดลองถูกบ้างเลย
ก็ยังสงสัยอยู่ว่า มันจะเช็กถูกอะไรกับชีวิต (กู) นักหนา (วะ) ออกแบบ icon อย่างอื่นไม่เป็นหรือไง?
แต่คิดไปคิดมาก็นั่นแหละ เราจะภูมิใจและมีชีวิตอยู่ต่อไปได้ โดยที่ไม่ยอมแก้ไขเรื่องผิดให้เป็นเรื่องถูกหรือ?
เพียงแต่บางทีมันก็กดดันไปนะ ถ้าทุกๆ เรื่องมีกฎเกณฑ์ข้อกำหนดตายตัว ว่าเราต้องอย่างโน้นอย่างนี้อย่างนั้น เพื่อให้ผลลัพท์สุดท้ายออกมาถูกต้องหมด โดยที่ไม่มีดินแดนให้ได้ลองผิดลองถูกบ้างเลย
Jan 4, 2012
เล่นกับ Twitter & App Engine
หลายวันก่อนไปกิน Sizzler กับ @CrystalWingHero มา ก็เล่าให้ฟังว่าทำโปรเจคจบกับ @nemopear ในหัวข้อที่จะย่อ twitter ให้สั้นลง (ได้อีก) ฟังแล้วก็น่าสนใจดีครับ scope ค่อนข้างใหญ่มาก คือข้อความที่ถูกส่งเข้าไปในระบบจะถูก encode ด้วยวิธีต่างๆ ตามที่ผู้ใช้เลือก (ย่อแบบธรรมดา, ย่อแบบเกรียน, ฯลฯ) แล้วก็ยิงเข้าไปโพสต์บน twitter สำหรับตัวโปรแกรมนั้นจะเรียกผ่าน API ที่สร้างจาก Google App Engine อีกทอดหนึ่ง แน่นอนว่าโปรเจคเมพๆ อย่างนี้ มีอาจารย์ @pruet เป็นที่ปรึกษาครับ :D
ด้วยความสงสัยของผม เลยหยิบเอา tweepy มาดัดแปลงเล่นนิดหน่อย ผลที่ได้ออกมาก็เป็นอย่างนี้ครับ
hll wrld
— Nattawut Phetmak (@neizod) January 4, 2012
เนื่องจากเสียเวลางมผิดจุดไปเยอะมาก (เยอะเกินไป อ่าน dev.twitter.com ทำไมก็ไม่รู้ อ่าน stackoverflow คงทำเสร็จด้วยเวลาน้อยกว่ากันครึ่งๆ) แถมยังเป็นโปรเจคที่ทำขำๆ จากการหยิบยืมไอเดียเพื่อนมาทดลองเล่นช่วงปีใหม่ว่างๆ อีก ตอนนี้ก็เลยมีแต่ client อย่างเดียวไม่มี API บน App Engine และไม่พัฒนาต่อแล้วครับ (ส่วน code หาดูได้ที่ github เลยครับ)
อ๋อ สุดท้ายนี้ก็สวัสดีปีใหม่ครับ :)
Jan 1, 2012
ปี 2011 ของฉัน
ปรกติไม่อินกับงานปีใหม่ แต่คิดไปคิดมา มันก็เป็นโอกาสอันดีเหมือนกันที่จะลง milestone ไว้บ้าง
ถ้าปีหน้าไม่ลืมจะจดใหม่ :)
ปล.ตอนเที่ยงคืนปีใหม่พอดีกำลังขับรถไปซื้อ coke มากิน 555+
- ฝึกงาน Blognone - ไม่น่าเชื่อนะ ว่าจะได้ไปลองฝึกงานดู จากคนที่ไม่เคยทำอะไรเป็นมาก่อน ก็ได้เรียนรู้อะไรประหลาดๆ ใหม่ๆ เยอะเลย แล้วก็ฝึกงานผ่านซะด้วยแหละ
- แข่ง HLP Hackathon - อันนี้ก็ไม่น่าเชื่ออีกเหมือนกัน เพราะคนเก่งๆ เค้าก็ลงคัดตัวกันตั้งเยอะ งานนี้โชคดีได้เจอเพื่อนใหม่หลายๆ คนเลย ^^
- พิมพ์สัมผัส - ยากเหมือนกันนะอันนี้ แต่ก็ยังไม่ถึงขั้นเล่นเกม The Typing of the Dead ผ่านนะ
- ฟรีสไตล์ Tetris - อันนี้ก็ใช้เวลาซ้อมๆๆ แล้วก็ซ้อมนานมากเหมือนกัน แต่ก็ยังไม่ได้ไปคาเนกี้ฮอล์ :P
- เรียน Coding Theory - สนุกดี สนุกมาก
- Reunion เพื่อนม.6 - ในที่สุดเพื่อนๆ เราก็จัดงานกันเป็นซักที (รอบก่อนๆ เราต้องตัดเองหมด) แม้จะเป็นการรวมกลุ่มเล็กๆ แต่ก็มีความสุขที่เจอเพื่อนที่ไม่ได้เห็นหน้าเป็นปีเหมือนกันนะ
ถ้าปีหน้าไม่ลืมจะจดใหม่ :)
ปล.ตอนเที่ยงคืนปีใหม่พอดีกำลังขับรถไปซื้อ coke มากิน 555+
Subscribe to:
Posts (Atom)


