รีวิว Kindle DX Graphite

14. August 2010

รีวิวนี้เหมาะกับคนกลั่นข้อมูลมาเต็มที่แล้วนะครับ อะไรที่มันซ้ำๆกับรีวิวอันอื่นจะละๆไปละกัน

ในที่สุดกิเลสที่สั่งสมมายาวนานของผมก็ก่อตัวเป็นรูปร่างของแข็งครับ TvT จุดประสงค์หลักๆเลยที่ซื้อมาคือเพื่อจะเอามาอ่าน PDF ที่เก็บๆไว้มากมาย ยังไม่ค่อยสนใจจะซื้อของจาก store ของ Amazon เท่าไหร่ ส่วน 3G ถึงจะแถมมาให้ฟรี แต่ก็ด้วยข้อจำกัดของตัวจอ E-ink ที่ refresh ช้ามากรวมถึงตัว web browser บน Kindle DX นั่นแหละ ที่ทำให้การเล่นเน็ตบน DXG ไม่ค่อยสะดวกสบายเท่าไหร่ เหมือนเค้าตั้งใจให้เอาไว้แค่เวลาซื้อหนังสือผ่าน Kindle จะได้ง่ายๆมากกว่า ขอสรุป requirement ของตัวเองดังนี้

  • เอามาใช้อ่านไฟล์ PDF เป็นหลัก ส่วนใหญ่เป็นหนังสือวิชาการ บทความ เอกสารประกอบซอฟแวร์ การ์ตูนบ้างบางเวลา
  • ไม่ได้พกไปข้างนอกมากเท่าไหร่ อ่านบนโต๊ะบนเตียงที่บ้าน
  • ยังไม่ค่อยสนใจซื้อหนังสือผ่าน Kindle store
  • 3G มีก็ดี เผื่อเอาไว้ไปเช็คเมล์ขำๆไม่ต้องเสียตังค์

มีคนถามบ่อยว่าทำไมไม่เอา iPad เปิด PDF ได้เหมือนกัน หลักๆเลยคงเป็นเรื่องจอ E-ink นี่ล่ะครับ

หลังจากอ่าน review มาหลายเจ้าก็ได้ข้อสรุปว่า ถ้าจะเอามาอ่านหนังสือ PDF นั้น ควรจะเป็นจอขนาด 9.7” ของ DXG เท่านั้นครับ (จอเล็กมันเล็กไป) ปรึกษาคนโน้นคนนี้อยู่หลายวันว่าจะสั่งยังไงให้มันถูกๆดีหว่า สุดท้ายก็ไม่ได้ทำไร –_-‘ สั่งตรง Amazon โดน Tax เต็มๆ ส่วนตัวก็รู้สึกอุ่นใจกว่านะที่มันมาส่งให้ถึงบ้านเลยไม่ต้องทำ action อะไรแล้ว แต่ถ้าคิดเป็นเม็ดเงินก็ >_<” (อยากจะร้องไห้)

เวลาจัดส่งประมาณ 4 วัน (คลิกดูรูปใหญ่) ติดตามผ่านเว็บ DHL ได้ตลอด (มันมี tracking number ให้) ดูผ่านเว็บจากที่ทำงานว่าพี่ที่บ้านเซ็นรับให้แล้วก็อุ่นใจ .. แต่ก็แอบไม่มีสมาธิทำงาน ฮ่าๆๆ

00_DELIVER

เข้าเรื่องตัวของเล่นกันเลยดีกว่า

จอ E-ink

เปิดกล่องมาครั้งแรกเห็นมันมีพลาสติกใสทับเครื่องอยู่แล้วก็มี instruction สอนให้เสียบปลั๊กแบบโน้นแบบนี้ ตอนแรกนึกว่า instruction มันเป็นหมึกพิมพ์ลงบนพลาสติกใส ปรากฎว่ามันเป็นรูปจากจอ E-ink ว่ะ o__o’ โอ้! ใช้ได้ๆ บางคนพอได้ยินคำว่า E-ink หรือจอกระดาษ อาจจะงงว่าแล้วมันต่างจากจอคอมหรือ iPad ยังไง? อ่านในที่มืดได้รึเปล่า? คำตอบคือมันไม่เหมือนกัน แล้วมันอ่านในที่มืดไม่ได้ครับ แต่ถ้าอยากอ่านก็ต้องเอาไฟฉายมาส่งเหมือนกระดาษ อ่านที่แดดจ้าไม่มีปัญหา (แต่อยู่เมืองไทยใครจะไปอ่านกลางแดด ….)

จอของ DX ขนาด 9.7” ตามแนวแทยงมุม (เหมือนเวลาบอกขนาด TV)  หรือ 20 x 14 cm

Pixel Count:
1200 x 825 (SVGA)

Active Area:
202.9 x 139.5 mm
246.38 mm (9.7") diagonal

DPI:
150

ส่วนจอ Kindle 3 (Kindle ตัวใหม่ที่จะออกปลายสิงหานี้) ขนาด 9 x 12 cm ผมแนะนำว่าให้ตัดกระดาษออกมาขนาดเท่านี้ดู ถ้าอยากรู้ว่ามันเล็กเกินไปรึเปล่า

Pixel Count:
800 x 600

Active Area:
122.4 x 90.6 mm
152.3 mm (6") diagonal

DPI:
166

อีกเรื่องนึงที่มารู้ไม่นานก่อนซื้อเครื่องคือ ตัว firmware ของ Kindle มันจะทำหน้าที่ตัดขอบขาวๆของ PDF ออกให้ด้วย โอ้ววว >_< พูดง่ายๆคือไม่ต้องทำอะไรกับ PDF เลย แค่โยนลงเครื่องแล้วตอน display มันก็จะไม่แสดงขอบขาวๆพวกนี้ให้เห็น เป็นการใช้พื้นที่หน้าจออย่างมีประสิทธิภาพ ดังนั้นขนาด 20 x 14 หรือ 9 x 12 cm อาจจะเทียบตรงๆกับขนาดกระดาษไม่ได้ ให้มองเฉพาะส่วนที่เป็น text (ถ้าจะเปรียบเทียบ)

ผมประทับใจจอมากๆ วันที่สองที่ได้มา อ่าน pocket book เล็กๆไปประมาณ 2 - 3 ชม. ไม่ล้าเหมือนอ่านหน้าคอมเลย

01_DXG_VS_A4

สีขาวเป็นกระดาษ A4

06_SHADE

เฉดสีเทามี 16 ระดับ

ปุ่ม

ตอนแรกคิดว่าจะเป็นปุ่มหยาบๆ (แบบกดแล้วไม่ค่อยนุ่มเท่าไหร่ เหมือน Mouse) แต่พอลองของจริงแล้วมันก็นุ่มระดับนึงนะครับ แต่ก็ไม่ได้ดีมาก

และเนืองจากจอ E-ink ที่มัน refresh ช้าด้วยนี่แหละ เลยทำให้บางทีเวลาพิมพ์หรือเลื่อน cursor หรือกดปุ่มอะไร มันจะตอบสนองไม่ค่อยทันใจเรามาก แต่ก็ไม่ได้รู้สึกว่ารำคาญกับเรื่องนี้มากนะ

keyboard ถือแล้วใช้นิ้วโป้งพิมพ์ไม่ได้ อันนี้เคยอ่านมาจาก review อันอื่นเหมือนกัน แต่ผมคงไม่ได้พิมพ์อะไรบ่อยๆอยู่แล้ว ยกเว้นเวลาจะ jump ไปยังหน้าที่ระบุ หรือเวลาจะ search ใน PDF ถ้าอยากพิมพ์จริงๆควรจะตั้งกับพื้นแข็งๆแล้วพิมพ์

ปัญหาตลกๆอีกอย่างคือเวลาจะพิมพ์ตัวเลขต้องกด Alt ก่อน = =’ อันนี้แอบลำบากจริงเพราะต้องใช้บ่อย

03_KEYBOARD

น้ำหนัก

หนักประมาณ 0.5 kg เบากว่า iPad ขีดนึง เพื่อนผมบอกว่าถือนานๆคงเมื่อยมือ หนักไป ใหญ่ไป แต่ผมไม่มีปัญหากับข้อจำกัดเรื่องนี้เพราะว่ากะจะใช้ที่บ้านอยู่แล้ว เนื่องจากจอมันค่อนข้างจะใหญ่ด้วย กลัวพอไปมากระแทกแล้วแตก

3G

ฟรี ช้า และไม่บันเทิง

ผมลองใช้ในบ้านเราดู มันก็เข้าเว็บใดๆได้นะครับ แต่จะแสดงภาษาไทยไม่ได้ แล้วก็แสดงผลแปลกๆ ไม่มันส์เท่าเล่นในมือถือหรอก

มีคนถามมาบ่อยว่าแล้วมันใช้ 3G ผ่านเครือข่ายของใคร? AIS, True, DTAC? อันนี้ก็ไม่รู้เหมือนกัน รู้แต่เคยเห็นเว็บที่มันแกะเครื่องออกมา ข้างในจะมีซิมจาก Amazon ใส่มาอันนึง (เปลี่ยนเองไมได้)

การใช้งาน PDF

มีเรื่องที่งงๆกันเกี่ยวกับ Kindle และ PDF อยู่หลายอย่าง

  • Firmware Kindle ปัจจุบันใช้ zoom PDF ได้แล้ว แต่ก็เพราะจอ E-ink มัน refresh ช้าจัด บางทีจะให้มา zoom บ่อยๆมันก็ไม่สะดวกนะ (ยกเว้นเป็นพวก map ที่นานๆใช้ทีนึง)
  • ภาษาไทยหรือภาษาอะไรก็ตามใน PDF จะอ่านได้เสมอ ตามที่ผมเข้าใจคือ ส่วนใหญ่เอกสารที่เป็น PDF มันไม่ต้องใช้ข้อมูลพวก font จากข้างนอกมา render
  • ปรับขนาด font ใน PDF ไม่ได้แน่นอน ถ้าเป็น E-reader รุ่นอื่นอย่างเช่นของ Sony จะมีฟังก์ชันที่เรียกว่า reflow (แต่ก็ไม่ควรไปคาดหวังว่ามันจะทำงานได้ดี) แต่หนังสือและเอกสารส่วนใหญ่ผมเปิดใน DXG แล้วได้ font ที่ขนาดกำลังดี อ่านได้นะครับ ยกเว้นบางเล่มจริงๆที่รู้สึกว่ามันเล็กไปมากๆ หรือไม่ก็เล่มที่ขอบหนังสือมันไม่ขาวหมดจด มีขอบโน่นขอบนี่ตัว firmware เลยตัดไม่ได้
  • ถ้าเป็นหนังสือที่ซื้อจาก Amazon จะทำ text to speech ได้, take note ได้, เปลี่ยนขนาด font ได้ แต่ถ้าเป็น PDF ดาดๆ จะทำอะไรพวกนี้ไม่ได้เลย

ลองมาดูตัวอย่าง

04_AI_CHART

05_MANGA

05_MANGA_ZOOM

อันนี้เป็นอีกปัญหาที่หลายคนเจอเหมือนกัน คือ font ที่เป็นสีๆ บางทีพอมาดูบน Kindle แล้วสีมันจะเทาอ่อนเกินไป ทำให้อ่านไม่ออก

08_CODE 

09_CODE_NORMAL

บางไฟล์ตัวอักษรจะเล็กเกินไปจริงๆ แต่ถ้าพลิกเป็นแนวนอนก็จะใหญ่ขึ้นพออ่านได้เหมือนรูปด้านล่าง

10_HOR

สรุป คือผมพอใจกับมันนะครับ รู้สึกขอขวดที่ขวางผมกับ PDF ที่มีบน harddisk มันหายไปเกือบหมด >_< (เว่อซะ)  ค่อนข้างมั่นใจว่านี่จะไม่ใช่ E-reader เครื่องสุดท้ายที่จะซื้อในชีวิตนี้ มันมีตลาดตรงนี้จริงๆซึ่งตอนนี้อาจจะยังไม่ใหญ่ แต่คงไปได้อีกไกล

ข้อเสียส่วนใหญ่ก็เป็นเรื่องที่รู้มาจาก review อื่นแล้วเกือบจะทั้งหมด ไม่เจอเรื่อง surprise อะไรพิเศษ

ถ้าพยายามกว่านี้คงสามารถหาวิธีสั่งซื้อที่มันถูกกว่านี้ได้ เช่น ฝากเพื่อนที่ US หิ้วหรือหาคนที่เค้ารับส่งของจาก US มาให้ ในกรณีของผมที่สั่งตรงกับ amazon จะโดน tax ไปเยอะมากกกก…ก (โดนตัดไปตั้งแต่ตอนสั่งผ่านเว็บ) ถือว่าเป็นค่าขี้เกียจละกัน แต่ก็สบายใจดีในแง่ที่ว่าถ้าเปิดกล่องแล้วจอมันแตก ก็คงโวยกับ customer service ได้อย่างสะดวกใจ เสียตังค์กับของเล่นชิ้นนี้ไปเยอะเหมือนกัน TvT ขออนุญาตไม่คูณเป็นเงินบาท

34260_423955127256_637427256_5086573_7611058_n

รายละเอียดเพิ่มเติมไปดูที่หน้าสินค้า คนแถวนี้ใครจะซื้อมาคุยกันก่อนก็ดี :’P

จริงๆอยากเขียนละเอียดกว่านี้แต่เขียนไปเขียนมาชักยาว สงสัยอะไรถามมาได้ๆ ตั้งแต่ใช้มาจนถึงตอนนี้อ่านหนังสือเล่มเล็กๆไปได้ประมาณ 1 เล่มครึ่งแล้ว ยังคงแฮปปี้อยู่ ส่วนใหญ่นอนอ่านบนเตียง

Life , , ,

วิธีคำนวณ ROA ในเว็บ SET

14. August 2010

เพิ่งอ่านหนังสือเล่มแรกจบใน Kindle ไปได้ไม่นาน (The Little Book that beats the market) หนังสือมันสอนวิธีกรองหุ้นง่ายๆโดยใช้ reuturn on capital + earning yield แต่วิธีที่หนังสือมันใช้คำนวณสองค่านี่มันต้องใช้ค่าดิบๆบางอย่างจากงบการเงิน ซึ่งหามายากพอควร ( .. แปลว่า automate ไม่ได้ ..) ผมเลยลองมาดูๆค่าที่ใช้แทนได้ใกล้เคียงที่สุดแทนและมีบนเว็บ SET คือ ROA (return on assets - ผลกำไรต่อสินทรัพย์) และ ROE (return on equity - ผลกำไรต่อส่วนผู้ถือหุ้น)

 

ค่าสองตัวนี้ควรจะหาได้ง่ายๆ Wikipedia กล่าวว่า

ROA_FORM

แต่ทำไปทำมาปรากฎว่าคำนวณแล้วไม่เห็นจะตรงกับที่เขียนไว้ในเว็บเลยว่ะ ….’’ นั่งงงอยู่นาน

FS

จากรูป ถ้าจะหา ROA ปี 2009 (ปี 2010 ยังได้ข้อมูลไม่ครบ เด๋วจะงง) จะได้ 10190.22 / 115698.28 = 8.8076 %  … ไม่เห็นจะตรงกับ 13.33 % เลยอ้ะ

ถามอากู๋คนเดิมได้ความจากกระทู้ในพันทิบว่า SET มันใช้วิธีคำนวณคนละวิธี ใช้เป็น ROAA (return on average assets) แทน

ROAA = EBIT of nth year  / (0.5 * (NET assets n-1th year + NET assets nth year))

ตัวย่อแปลกๆในข้อความนี้อีกตัวคือ EBIT (Earnings before interest and taxes) ซึ่งเป็นกำไรแบบที่ยังไม่ได้คิดดอกเบี้ยเงินกู้กับภาษี ถ้าดูจากตารางข้างบนจะเห็น กำไร/ขาดทุน = 10,190.22 ล้านบาท แต่ถ้าไปเปิดงบกำไรขาดทุนละเอียดดูแล้วจะได้ EBIT = 14,878.46 ล้านบาท

INCOME

สุดท้ายเอาไปคำนวณ 14878.46 / ((115698.28 + 107510.00) / 2) ~ 13.3 % ตรงแล้ว

วันนี้แมงเม่าหนุ่มจึงอ่านงบการเงินเป็นมากขึ้นพอสมควรหลังจาก trade มานานเกือบปีแล้ว จดไว้นิดนึงเผื่อมีคนงงเหมือนกัน

หลักๆ หนังสือเล่มที่อ่านมันสอนให้ดูค่าพวกนี้เพื่อบอกว่าหุ้นตัวไหนน่าซื้อแบบ relative เค้าบอกว่าการทำนายอนาคตหรือราคาที่เหมาะสมนี่มันไม่ใช่เรื่องที่ใครๆก็จะทำได้ง่ายๆ แล้วหุ้นที่ undervalued แบบที่ Ben Graham เจ้าพ่อ VI ชอบซื้อปัจจุบันมันก็ไม่ได้เจอได้ง่ายขนาดนั้นอีกแล้ว ดังนั้นเรามาดูข้อมูลปีล่าสุดกันดีกว่า … ใครสนใจลองหาไปอ่านกันดู

General , , , ,

หนังไม่สมจริง

4. August 2010

ตอนเด็กๆ (ก็ไม่น่าจะเด็กมากประมาณ ม.3 ล่ะมั้ง) เวลาป๊าม๊าที่เป็นหมอนั่งดูละครชุดเรื่อง E.R. กันก็จะนั่งดูเหมือนจะบันเทิงแต่ก็จะจับผิดตลอดเวลาอย่างโน้นอย่างนี้ ไม่สมจริง ทำแบบนี้ไม่ได้ …. ตัวเองตอนนี้มาพอนั่งดูนั่งที่เกี่ยวกับคอมพิวเตอร์หลายๆเรื่องก็ไม่เห็นจะมีเรื่องไหนมันทำสมจริงๆมากๆเลยว่ะ (มีนะแต่น้อย) ส่วนใหญ่ GUI ของคอมพิวเตอร์ในหนังมันก็จะเว่อร์ๆอยู่แล้วเพื่อให้คนดูสนุก วันก่อนก็ได้คุยกับพี่ที่ทำงานอีกคนเค้าก็ติๆ Angel & Demon หน่อยว่าทำอะไรไม่อิงข้อมูลวิทยาศาสตร์ แล้วก็ชมเรื่อง Iron Man ให้ฟังว่าเรื่องนี้ทำอะไรปรึกษานักวิทยาศาสตร์ตลอด ไม่ได้ให้ข้อมูลผิดๆเหมือน Angel & Demon

พักหลังๆผมชอบไปอ่าน review หนัง หลายครั้งบทวิจารณ์หนังพวกนี้มันบอกว่าหนังเรื่องนึงไม่ดีด้วยเหตุผล “ไม่สมจริง” ยกตัวอย่างเช่นเรื่อง The Hurt Locker คนวิจารณ์เคยทำงานเกี่ยวกับทหารมาก่อน เค้าบอกว่าเค้าดูแล้วรู้สึกสะดุดมากตอนที่ตัวเอกตัดสินใจจัดกลุ่ม 3 คนไปกู้ระเบิด เค้าบอกว่าสถานการณ์จริงไม่มีทางมีเรื่องแบบนี้เกิดขึ้นเป็นอันขาด ทำให้เค้าเสียอารมณ์ = =’

มานั่งคิดๆดู สมมติว่าคนเขียนบทเค้าสามารถทำให้คนดู 95% ทั่วโลกบันเทิงไปกับหนังโดยไม่สะดุดเลยได้จนจบเรื่อง และไม่ต้องสนใจคน “วงใน” อีก 5% เลย ว่าจะคิดยังไง มันก็ดูคุ้มค่าที่จะทำนะ ไม่รู้จะเอาเงินไปจ้างที่ปรึกษาด้านวิทยาศาสตร์ การแพทย์ คณิตศาสตร์ โบราณคดี blah blah ไปทำให้คนอีก 5% พอใจไปทำไม

ผมมาจบที่ข้อสรุปว่า “ความไม่สมจริง” ไม่ใช่เหตุผลที่ทำให้หนังมันไม่ดีที่สามารถใช้เอามาบอกคนอื่นได้ (ยกเว้นชัวร์ว่าเป็น 5% ด้วยกัน) … หรือว่ายังไง ?

ถ้าจะให้ผมพูดในฐานะที่เป็นคนใน “5%” ของบางเรื่อง อย่างถ้าใครเคยดูเรื่อง Antitrust ไม่รู้จะมีคนสงสัยเหมือนผมรึเปล่าว่า บริษัทยักษ์ใหญ่จะแย่งตัวหนุ่มน้อยอัจฉริยะผู้เขียนโปรแกรมภาษา “Java” ได้ (ซึ่งมีคนเขียนเป็นอยู่ล้นตลาด) ไปทำงานทำไม =_=” อย่าลืมกดดูให้ถึงหน้าจอที่แสดงโค้ด Java สำหรับทำ Satellite Uplink .. หนังเรื่องนี้พยายาม feature ผลิตภัณฑ์ของ Sun ทั้งเรื่องเลย  …. ไม่อยาก spoil เพิ่มแต่ลองไปดูแล้วกันว่าคนพวกนี้พยายามกันขนาดไหนเพื่อจะ “ขโมย” โค้ด “Java” ของคนอื่น

แต่ก็ต้องยกให้ว่าเรื่องนี้ในด้าน GUI มันค่อนข้างจะสมจริงมาก จะมองมุมไหนคอมพิวเตอร์ก็น่าเกลียดเหมือนจริง +__+’

ถ้าหนังเรื่องไหนสามารถกำจัดความไม่สมจริงที่ถูกสั่งสมขึ้นมาโดยเรื่องอื่นๆได้นี่ ก็จะได้เป็น Hero ไปเลย :’) ยกตัวอย่าง Trinity ใช้ nmap ใน The Matrix (เคยลองๆใช้โปรแกรมนี้ตอนไปแข่ง Network Security Contest ด้วยนะ!) อันนี้ได้ใจคน 5% ไปชัวร์ๆ

หรือคุณว่ายังไง ??

Java, General , , ,

The search for ‘Edge’

25. July 2010

280px-Roulette_-_detail

 

ถ้ามีเกมเกมนึงมีกฎว่า โยนเหรียญเที่ยงตรงแล้วออกหัว จะได้ 1.001 บาท แต่ถ้าออกก้อย จะต้องเสียเงิน 1.000 บาท มันจะเป็นเกมที่น่าเล่นมากๆ เพราะเหรียญเที่ยงตรงยิ่งโยนมากเท่าไหร่ จำนวนที่ออกหัวต่อที่ออกก้อยก็จะเข้าใกล้ 1 มากกว่านั้น

ในกรณีแบบนี้ จะเห็นว่าผู้เล่นค้นพบ ‘กลยุทธ’ ที่จะทำให้ตัวเองได้กำไร (เสมอ) จากการพนันได้ พูดอีกแบบว่าผู้เล่นมี ‘Edge’ สำหรับเกมโยนเหรียญอันนี้

เรื่องอื่นๆที่ไม่ใช่เรื่องการพนันก็คล้ายๆกัน

  • ร้านอาหารมี edge เหนือร้านอื่นคือทำเลดี ลูกค้าติดปากอาหาร พ่อครัวเก่ง ….
  • กระเป๋า/ นาฬิกา/ เสื้อผ้าแบรนด์ดังมี edge คือคนติดแบรนด์ เป็นค่านิยมของสังคม
  • เซลล์มี edge คือหน้าตาดี พูดเก่ง เครือข่ายเยอะ โน้มน้าวเก่ง
  • บริษัทโทรคมนาคมมี edge คือได้สัมปทาน จำนวนคู่แข่งมีจำนวนจำกัด
  • ผู้นำเข้าสินค้ามี edge คือช่องทางนำเข้าที่ต้นทุนต่ำกว่ารายอื่น
  • เจ้าของ software house มี edge คือ connection เยอะมากคอย source งานให้เรื่อยๆ
  • เทรดเดอร์มีอัลกอริทึมจะทำให้เทรดได้โดยได้กำไรในระยะยาวและจำกัดความเสี่ยง
  • …. มากมาย

ถ้าไม่รู้สึกว่ามี edge ในสิ่งที่กำลังจะทำแล้ว โอกาสจะประสบความสำเร็จในสิ่งที่ทำคงมีน้อย ทุกวันนี้คุณมี ‘edge’ ในสิ่งที่ตัวเองทำ (หรือกำลังจะทำ) อยู่รึเปล่า ?

Life ,

จับโจรขโมยรูป

27. June 2010

เมื่อเร็วๆนี้เห็นคนแอด facebook มา … รูป profile ดึงดูดเกินมาตรฐานเพื่อนไปมาก >_< … แต่ไม่รู้ว่าเป็นใคร …..’’

FacebookTheft

ปกติเวลามีคนไม่รู้จักแอดมา ถ้าไม่ได้ใช้รูป profile เป็นรูปคนผมจะดองไว้พักใหญ่ๆ (เผื่อตอนหลังเปลี่ยนรูปแล้วจำหน้าได้) แต่ถ้าเป็นหน้าคนแล้วไม่รู้จัก รอซักพักนึงไม่นานผมก็จะ Ignore ไป ครั้งนี้ก็เช่นเดียวกัน ผมดองไว้พักใหญ่ๆ จากเดิมที่ mutual friends ไม่มีเลย จนเริ่มเพิ่มจาก 3 …. 5 …. 8 …. 11 (จากการสังเกตพบว่าเกือบทั้งหมดเป็นผู้ชาย)

Mutual

Mutual friends ส่วนใหญ่เป็นคนที่จบ ม.ปลาย โรงเรียนเดียวกัน …. หรือว่าคนนี้มันจะคนดังโรงเรียนเราวะ …. อ่ะๆ ไหนๆก็ไหนๆ ขอเข้าไปเก็บข้อมูลเพิ่มหน่อยแล้วกัน ว่ะฮะๆๆ .. accept

ปรากฎว่า

  1. เข้าวอลล์อันดับแรก …. มันเป็นใครวะ ?!? ข้างในวอลล์ไม่มีอะไรเลย เขียนเพิ่มไม่ได้ แล้วก็มีเขียนบอกไว้ว่า ถ้าอยากติดต่อให้ message ไปหา ….. เฮ้ย!
  2. แน่นอน ดูรูป! มีอัลบั้มรูปเพิ่มอีกอันนึงเป็นรูปเหมือนถ่ายที่งานอะไรซักอย่าง แล้วเหมือนกำลังซ้อมอะไรอยู่ คนข้างหลังรูปมีอยู่คนนึง หน้าไม่ค่อยเหมือนคนไทย –_-‘ เริ่มเอะใจ แถมยังคอมเม็นต์รูปไม่ได้อีก ปกติถ้ารูปดีขนาดนี้จะมีพวกเข้ามาเม้นต์ว่า “น่ารักจังครับ ผม%sนะ อยากรู้จัก”

เริ่มสงสัยว่าตกลงนี่มันรูปอะไรกันแน่ การเสิร์ชหารูปดาราจากชื่อนั้นเป็นเรื่องปกติที่ใครๆก็ทำกันอยู่แล้ว แต่ไอ่การมีรูปดาราแล้วจะสาวกลับไปหารูปนี่ … วิธีปกติคือต้องถามคนที่รู้เยอะๆ หรือไม่ก็ถามตามเว็บบอร์ด แถมดาราสาวเกาหลีสมัยนี้หน้าตาเหมือนกันอย่างกะปั๊มออกมาจากโรงงาน HTC … จะหาเจอได้ไงหว่า

ยังโชคดีที่โลกเรามีสิ่งที่เรียกว่า Reverse Image Search!

Reverse

การใช้งานง่ายมาก แค่อัพโหลดรูปที่จะหาขึ้นไป ระบบจะหาให้ว่ามีรูปคล้ายๆกันอยู่ที่ไหนบ้าง จากการทดลอง ถ้ามี text มาโปะหน้ารูปนิดหน่อย / รูปโดน crop / รูปเอียง / เบี้ยว / distort นิดหน่อย มันก็หาเจอนะ!

ผลลัพธ์ …. tadaaaaa~!

Result

ปรากฎว่ารูปนี้เป็นของดาราจากประเทศขวัญใจเยาวชนไทยคนนึง ชื่อ Sandara Park (박산다라) ครับ

(หมั่นไส้ล่ะสิ เวลาเห็นคนเขียนชื่อแล้ววงเล็บชื่อเกาหลี - -‘ ก็เห็นเด็กๆเค้าชอบทำกันอยากทำบ้าง ไม่งั้นจะมี Unicode ไปทำไม)

dd2

สรุปสั้นๆของนิทานเรื่องนี้

  • Bandwagon effect มันมีผลมากกับการ add friend
  • มองโลกในแง่ร้าย คนที่กระทำการในลักษณะนี้จะสื่อสารกับเหยื่อที่หลงเข้ามาแบบ private เท่านั้น ไอ่การสื่อสารผ่านวอลล์ คอมเม็นต์ จะโดนปิดหมด ไม่ให้เหยื่อได้ข้อมูลเพิ่มจากเหยื่อคนอื่น พอการสื่อสารเป็นแบบ private แล้ว การล่อลวงก็จะทำได้ง่ายขึ้น
  • มองโลกในแง่ดี อาจจะมีเพื่อนโรงเรียนเก่าล่ะมั้ง ที่แค่ชอบดาราคนนี้ล่ะมั้ง เลยต้องเอารูปทั้ง profile ทั้งอัลบั้มอื่นเป็นคนนี้หมดเลยล่ะมั้ง ขี้อายก็เลยไม่อยากให้คนเขียนวอลล์แล้วให้เมสเสจไปคุยล่ะมั้ง ….
  • ผมจะไปลบ friend ที่เพิ่งแอดทิ้ง
  • ผมเข้าไปเสพย์รูป Sandara Park (박산다라) ต่อได้ถ้าต้องการ :P

General , , ,

รีวิว The Art of the Start

17. June 2010

TheArtOfTheStart

เพิ่งอ่านจบครับ ได้ยินชื่อหนังสือเล่มนี้ครั้งแรกนานมาแล้ว แต่ได้ยินจากที่ไหนจำไม่ได้แฮะ น่าจะเป็นหนังสือแนะนำของพวก developer เจ้าของบลอกดังๆซักคน จนเมื่อเร็วๆนี้เองไปเจอ video บรรยายโดย Guy Kawasaki หรือคนเขียนหนังสือเล่มนี้นั่นแหละ ดูแล้วชอบมากๆๆๆ ก็เลยตัดสินใจไปถอยมาทันทีจากคิโนะฯพารากอน

เนื้อหาประมาณ 200 หน้า ถือว่าไม่ยาว อ่านเพลินมากๆ ตอนอ่านก็คิดตามไปโดยเทียบกับประสบการณ์ที่เคยเจอมาในชีวิตด้วย แต่ยอมรับว่ามันก็มีบางเรื่องที่อ่านไม่ค่อยเข้าใจเท่าไหร่ อาจจะเป็นเพราะยังไม่มีประสบการณ์พอ - -‘a

หนังสือเล่มนี้ให้ข้อคิด และตบหน้าความเชื่อของผมหลายๆอย่างครับ ยกตัวอย่างให้ฟังเป็นบางเรื่อง ถ้าอ่านจากหนังสือจะพบว่ามันเป็น structure มากกว่านี้มาก

  • เรื่อง 10/20/30 – ทำ slides 10 หน้าเท่านั้น และบรรยาย 20 นาที และใช้ฟอนต์ 30 pts (หรือขนาดเท่ากับอายุมากสุดของคนที่มาฟังหารสอง)
  • สร้าง mantra ไม่ใช่ mission statement
  • ทำสิ่งที่มีความหมาย ไม่ใช่ทำเพราะอยากได้เงิน แต่การทำสิ่งที่มีความหมายก็ต้องการเงิน ต้องการ business model ที่ทำให้อยู่ได้ ไม่งั้นก็อดตาย
  • กว่าจะทำ market research จนพิสูจน์ได้ว่าตลาดมันมีอยู่จริง คู่แข่งมันก็เต็มไปหมดแล้ว จะรอ proven market ก็รอกินฝุ่นได้เลย (อันนี้มีแอบกัด Gartner)
  • งานสำคัญอย่าง branding หรือเขียน business plan สำคัญเกินกว่าจะจ้าง consultant ข้างนอกทำ หรือจะจ้างก็เอาไว้ตรวจสอบก็พอ
  • หลายคนอยากทำ product หรือ service ของตัวเองแต่ทำไม่ได้เพราะเรื่องเงิน ต้องรับงานพวก consulting คือการทำตาม requirement ลูกค้าไปก่อนโดยพยายามเอา product ที่ทำไปเป็นส่วนประกอบ พอเงินพอ + ลูกค้าเยอะพอ ลุกค้าก็จะวิ่งเข้ามาหา product/service ของเราแทน (ไม่ต้องเข้าหาลูกค้าเหมือน consulting)
  • จ้างคนที่เสพย์ติด และเชื่อในความหมายที่เราจะสร้างไปด้วยกัน
  • เลือกเพื่อนร่วมงานที่หลากหลาย หาคนเห็นต่าง หาคนมีเน็ตเวิร์คเยอะ หาคนชอบ implement หาคนไอเดียบรรเจิด หา …. (มีลิสต์ในหนังสือ)
  • เทคนิคการพูด + การนำเสนอ … อันนี้รู้สึกเป็นประโยชน์กับตัวเองมากเพราะยังพูดไม่ค่อยเก่ง
  • การหาลูกค้าที่ชื่นชอบ product/service ของเราเพื่อขอความช่วยเหลือให้เป็นแนวร่วมในการเจาะตลาดเพิ่ม – สร้าง evangelist -- evangelist ไม่ต้องการผลตอบแทนในรูปแบบเงิน แต่ถ้าได้เสื้อหรือแก้วน้ำ หรืออะไรที่ทำให้รู้สึกว่าเป็นลูกค้าคนพิเศษจะดีใจมาก
  • สร้าง exit ที่ง่ายให้กับลูกค้า -- การสมัครสมาชิกที่ยกเลิกสมาชิกได้ง่ายๆ จะทำให้ลูกค้ารู้สึกดีกว่า
  • ไม่มีบริษัทที่สร้างมาให้ยิ่งใหญ่เหมือน Microsoft, Apple, Google (ตอนนี้) ตั้งแต่แรก ให้เริ่มจากตลาดที่ยักษ์ใหญ่จะเจาะไม่ถึง แต่ไม่คิดจะเจาะก่อน แล้วค่อยๆขยายไป .. แม้แต่ MS, Apple, Google ก็ทำแบบนี้เช่นกัน
  • การล้มเหลวไม่ใช่เรื่องใหญ่ ตราบใดก็ตามที่ยังลองใหม่ได้
  • …. อีกมากมายนับไม่ถ้วน

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

General

Correlation ในราคาหุ้น

13. June 2010

ช่วงนี้สนใจเรื่องแนวๆ quantitative มากเป็นพิเศษ อ่านไปเรื่อยๆก็สนุกดี แต่บางทีก็อดรู้สึกไม่ได้ว่านี่เอาเวลามาทำอะไรอยู่ฟะเนี่ย -*- ยิ่งทำๆไปแล้วยังไม่เห็นผลลัพธ์ที่จับต้องได้นี่ มันจะเริ่มหงุดหงิดๆ 555+

Correlation นี่มันเป็นความสัมพันธ์เชิงสถิติระหว่างข้อมูล (ในที่นี่ก็หมายถึงพวกราคานั่นแหละ) ซึ่งบางทีการที่ข้อมูลสองชุดมัน correlate กัน ก็ อาจจะ แปลว่ามีความสัมพันธ์อะไรบางอย่างอยู่เบื้องหลังก็ได้

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

ใน Excel มีฟังก์ชันสะดวกๆให้ใช้ชื่อ CORREL ส่วนใน Python เข้าใจว่าใน SciPy ก็มีเหมือนกัน แต่บางครั้งคนเราควร Reinvent the Wheel บ้าง เพื่อความบันเทิง :P

Pearson

วิธีการตีความผลลัพธ์คือ

  • ถ้าได้ค่าใกล้ 1 มาก แปลว่ามันขึ้นลงพร้อมๆกันมากๆ (correlate)
  • ถ้าได้ค่าใกล้ 0 แปลว่ามันแทบจะไม่ correlate กันเลย
  • ถ้าได้ค่าใกล้ 1 มาก แปลว่ามันจะขึ้นลงกลับกันมากๆ (correlate)
def corr(series1, series2):
"""Calculate Pearson's product-moment coefficient

More info: http://en.wikipedia.org/wiki/Correlation_and_dependence#Pearson.27s_product-moment_coefficient

"
""
if len(series1) != len(series2):
raise Exception((series1, series2), 'Lengths of series are not equal')

n = len(series1)
sum_x = sum(series1)
sum_y = sum(series2)
sum_sqx = sum(a*a for a in series1)
sum_sqy = sum(a*a for a in series2)
sum_xy = sum(map(lambda s: s[0] * s[1], zip(series1, series2)))

import math
res = (n*sum_xy - sum_x*sum_y)/(math.sqrt(n*sum_sqx - sum_x*sum_x)*math.sqrt(n*sum_sqy - sum_y*sum_y))

return res

ตัวอย่างที่ค่อนข้าง obvious:

  • [1,2,3] กับ [3,4,5] ได้ 1.0
  • [1,2,3] กับ [-3,-4,-5] ได้ -1.0

ลองเอามาทดสอบกับราคาหุ้นดู ช่วงนี้ผมมีฐานข้อมูลราคาเป็นของตัวเองแล้ว (จากการไป pull ข้อมูลมาจากเว็บสาธารณะ) เก็บใส่ mongdb ไว้ ใช้คู่กับ Python สะดวกโยธินมาก (เอาเวลาตอนไหนไปทำวะเนี่ย)

ทดสอบกับ data 500 วันล่าสุด

  • CPF กับ CPALL = 0.96  -- ขึ้นลงตามกันโคดๆๆ .. แน่ล่ะ
  • CPF กับ TUF = 0.94 -- อาหารเหมือนกันมั้ง
  • BBL กับ KBANK = 0.94 -- กลุ่มธนาคารเหมือนกัน
  • PS กับ QH = 0.89 -- อันนี้อยู่ใน sector อสังหาเหมือนกัน
  • DTAC กับ ADVANC = 0.74 -- ไม่เยอะอย่างที่คิด
  • CPN กับ CPF = 0.37 -- ห้างเซ็นทรัล กับ อาหาร
  • CPF กับ CAWOW = –0.68 – ไก่ ลง ฟิตเนส ขึ้น ??
  • TRC กับ PS = -0.11 -- ไม่ค่อยเกี่ยวกันเท่าไหร่ …
  • ..

พวก quant ตัวเทพเค้าบอกว่า จริงๆ correlation ไม่ค่อยมีประโยชน์กับการ trade เท่าไหร่ ที่มีประโยชน์คือ cointegration เป็นคุณสมบติอีกแบบที่บอกว่า series สองอันมันจะแตกต่างกันได้บ้างเป็นบางเวลา แต่สุดท้ายแล้วต้องกับมาขึ้นลงคู่กันอีกรอบ คุณสมบัตินี้ทำให้เอาไปใช้ทำ pair trading ได้

สรุปว่าถ้าลองทำกับทุกคู่ในตลาด (ประมาณ 500 ตัว) น่าจะพอเห็นอะไรบ้าง … ไว้เวลาเอื้ออำนวยอีกรอบละกัน :)

ช่วงนี้ความสนใจเยอะจัด สับสนมาก เลือกทำไม่ถูก - -‘ อย่างนึงที่ทำก็คือไล่อ่านบลอกของไอดอลคนใหม่อยู่ (Max Dama) ใครสนใจเรื่องพวก automated trading ต้องลองเข้าไปดู มีอะไรให้เก็บเกี่ยวเยอะแน่นอน

General , ,

กูเกิ้ลโค้ดแยม : รอบคัดเลือก 2010

9. May 2010

ครั้งนี้ตัดคำว่าเฉลยออกแล้ว ลดความมั่นใจลงหน่อยนึง - -‘a 

แต่ตั้งแต่ทำมา 3 ปี ปีนี้เป็นปีแรกที่ได้คะแนนเต็มรอบแรก T_T ดีใจ

ข้อแรก Snapper Chain

ถ้าเปลี่ยน ON เป็นเลข 1 แล้ว OFF เป็นเลขศูนย์ แล้วให้ปลั๊กไฟหลัก (Power) อยู่ซ้ายสุด

ถ้ามี Snapper สองอัน มันจะวิ่งตามลำดับนี้

00
10
01
11 <--- Light on!
00
10 …

ถ้าเป็น 3 อัน ก็พอจะเดาได้ว่ามันก็เป็นแบบนี้

000
100
010
110
001
101
011
111 <--- Light on!

สรุปว่ามันก็เหมือนกับนับเลขฐานสองกลับหลัง ดังนั้นถ้ามี snapper n อัน กรณีที่จะทำให้หลอดไฟติดได้ก็คงต้องเป็นการ snap เป็นจำนวน (c * 2^n) – 1 เท่านั้น (โดย c เป็นจำนวนเต็ม … บวก)

if __name__ == '__main__':
fin = 'A-large.in'
fon = 'A-large.out'

fi = open(fin, 'r')
fo = open(fon, 'w')

c = int(fi.readline())
for i in xrange(c):
n, k = [int(x) for x in fi.readline().split(' ')]
ans = (k % 2 ** n) == 2 ** n - 1
fo.write("Case #%d: %s\n" % (i + 1, 'ON' if ans else 'OFF'))

print "Done!"
fi.close()
fo.close()

ข้อสอง Fair Warning

ข้อนี้เข้าใจว่าเป็นเรื่องแนวๆ number theory

มีคนอ่านโจทย์แล้วงงเยอะมาก โจทย์มันถามว่า ต้องใช้เวลานานอย่างน้อยเท่าไหร่ ถึงจะทำให้ ตัวหารร่วมมากสุด (ห.ร.ม. – Greatest Common Divisor (GCD)) มีค่ามากที่สุด

ในโจทย์ตัวอย่างเป็น 26000 11000 6000 ดังนั้นถ้าเวลาผ่านไป 4000 sec (ซึ่งเป็นคำตอบที่ถูกต้อง) จะทำให้กลายเป็น 30000 15000 10000 และทำให้เลขชุดนี้มี GCD เป็น 5000 ซึ่งไม่ว่าจะเป็นเวลาก่อน 4000 sec หรือหลัง 4000 sec ไปอีกนานเท่าไหร่ก็ตาม GCD ที่หาได้ก็จะมีค่าไม่เกิน 5000 แน่นอน เช่นถ้าผ่านไปแค่ 2000 sec จะได้เลขชุดนี้เป็น 28000 13000 8000 ซึ่งมี GCD = 1000 (น้อยกว่า 5000)

ขอแทนเวลาที่ผ่านไปเรื่อยๆ ด้วยแถบยืดๆ x (ซึ่งยืดได้เท่าไหร่ก็ไม่รู้ แต่ต้องยืดเท่าๆกันสำหรับแต่ละ event)

<===== x ===...==><==  6000 ==>
<===== x ===...==><== 11000 ======>
<===== x ===...==><== 26000 ================>

หรือถ้าเรา define ให้ y = x + 6000 จะกลายเป็นรูปนี้ (เลือก 6000 เพราะเป็น MIN)

<===== y ===...=======>
<===== y ===...=======><== 5000 ======>
<===== y ===...=======><== 20000 ===========>

ทีนี้เราก็จะหา GCD ของ y, y+ 5000, และ y + 20000 .. ยกคุณสมบัติ GCD ที่จะใช้มาทวนก่อน

  • gcd(a, b) = gcd(b, a) …. สลับที่
  • gcd(a, gcd(b, c)) = gcd(gcd(a, b), c) …. เปลี่ยนกลุ่ม
  • gcd(a, b) = gcd(b, a - b) … กรณี a > b

จากรูปด้านบน ถ้าเราหา GCD ระหว่าง y กับบรรทัดอื่นๆ ทีละคู่ จะได้อะไรประมาณนี้ออกมา

<===== y ===...=======>
<== 5000 ======>
<== 20000 ===========>

กลายเป็น gcd(5000, 20000, y) ทำโน่นนี่ไปมาจะได้ GCD = gcd(gcd(5000, 20000), y)

เนื่องจากว่าเราให้ y เป็นอะไรก็ได้อยู่แล้ว ดังนั้น MAX GCD = gcd(5000, 20000) = 5000 แน่นอน!

ต่อมา เราต้องการทราบ x น้อยที่สุด (เวลาน้อยที่สุดที่จะทำให้ได้ MAX GCD) ซึ่ง y = x + 6000

พบว่าในเคสนี้ x น้อยสุดเป็น 4000 ซึ่งทำให้ y เป็น (+) ได้ และหาร MAX GCD = 5000 ลงตัว

ขอสารภาพว่า … ข้อนี้ตอนทำไม่ได้คิด math แบบข้างบนหรอก (อ้าววว) นั่งวาดรูปๆๆๆ เดาๆๆ แล้วลองมั่วๆกับ sample ดู ถูกเคสเล็กก็ลองเคสใหญ่เลย ไอ่ที่ทำ math เพราะพยายามหาข้อสนับสนุนวิธีที่ทำไป(แล้ว) = =’

ขอขอบคุณ Python ทำให้ไม่ต้องไปวุ่นวายเรื่อง BigInteger แล้วก็ยังแถม fractions.gcd มาให้อีก!

(แอบภูมิใจบรรทัด reduce TvT)

import fractions

if __name__ == '__main__':
fin = 'B-large.in'
fon = 'B-large.out'

fi = open(fin, 'r')
fo = open(fon, 'w')

c = int(fi.readline())
for i in xrange(c):
ts = [int(x) for x in fi.readline().split(' ')][1:]
m = min(ts)
tns = [x - m for x in ts]
unit = reduce(lambda x,y: fractions.gcd(x,y), tns)
r = m % unit
ans = unit - r if r else 0
fo.write("Case #%d: %d\n" % (i + 1, ans))

print "Done!"
fi.close()
fo.close()

ข้อสาม Theme Park

ข้อนี้ใช้วิธี pre-computed (หรือจะเรียกว่า cache ?) อะไรที่มันทำได้ไว้ก่อน ทำให้ตอนคำนวณจริงๆไม่ต้องทำอะไรซ้ำๆ แต่ถ้าทำแค่นี้มันจะยังไม่เร็วพอ (โดยเฉพาะถ้าเป็นโปรแกรม Python รันดิบๆ T_T’)

แนวคิดคือ ในการเล่นรอบใดๆที่มี group ที่อยู่หัวคิวเป็น group เดียวกัน (เช่นรอบ 3 กับรอบ 5 มี g1 เป็นหัวคิวเหมือนกัน) จะเก็บเงินได้เท่ากันเสมอ และหัว group ในรอบถัดไปก็จะเป็น group เดียวกันเสมอ …

ดังนั้นไอ่การคำนวณจำนวนคนนั่งในแต่ละรอบนี่ ทำครั้งเดียวก็พอ (สำหรับรอบที่ขึ้นต้นด้วยแต่ละ group) และก็ควรบันทึกไว้ด้วย ว่าหลังจาก group นี้เล่นในรอบนี้แล้ว รอบถัดไปจะเป็น group ไหน จากตัวอย่าง

grou: [1, 4, 2, 1]
hist: [5, 6, 4, 6]
next: [2, 3, 1, 2]

อันนี้บอกว่า ถ้าเริ่มที่ g0 เก็บเงินได้ 5 ในรอบนั้น, g1 เก็บได้ 6, ….

และถ้าเริ่มที่ g0 รอบถัดไปจะเริ่มที่ g2, เริ่ม g1 ถัดไปเริ่มที่ g3, เริ่ม g2 ถัดไปเริ่มที่ g1, …

โจทย์กำหนดมา r รอบ ก็แค่บวก hist แล้ววนตาม next ต่อไป r ครั้งก็น่าจะได้คำตอบแล้ว แต่อาจจะไม่ทัน …

ถ้าสังเกต next ดีๆ จะเห็นว่ามันวนซ้ำๆ

  • g0 –> g2 –> g3 –> g1 –> g2 –> g3 –> g1 –> g2 –> g3 –> g1 –> g2 –> ….
  • g0 –> (g2 –> g3 –> g1 –>)*  ….

จะเห็นว่ามี loop g2 –> g3 –> g1 วนซ้ำไปมา เราสามารถคิดเงินรวมได้เป็น hist[2] + hist[3] + hist[1] และการวนนี้ใช้เวลา 3 รอบ

ถ้าเรารู้ว่าในการเล่นเครื่องเล่น r รอบมันมีการวนแบบนี้เกิดขึ้นกี่ครั้ง ก็เอาจำนวนรอบมาคูณค่าเล่นรวมได้เลย จะลดการคำนวณไปได้มากเลยทีเดียว เพราะบางเคสมันเล่นตั้ง 10^8 รอบ

ข้อนี้โค้ดผมยาวและซับซ้อนผิด concept มาก - -‘ ปัญหาหลักเกิดจากการเลือกใช้ data structure ไม่ถูกต้อง ผมดันไปใช้เป็น linked structure แบบที่เห็นด้านบน ทำให้ทั้งการหา loop อะไรมันทำยากไปหมด ทั้งๆที่มันทำเป็น list ธรรมดาก็ได้แล้ว

จากเท่าที่แอบไปดูโค้ดเพื่อนบ้านมา ผมชอบคำตอบข้อนี้ของ nattster เขียนอ่านเข้าใจง่ายดี กระชับ สั้น (Python) เป็นตัวอย่างในการเรียนรู้ที่ดี (ส่วนโค้ดยาวๆของผมอยู่ที่นี่ )

ว่าด้วย Big Integer

ข้อสองดักคอคนเขียน C++ สุดๆ เพราะ input/output มันเกิน range ของ int, long ไปเยอะมากๆๆ (10^50)

หลังจากไปไล่อ่านโค้ดเพื่อนบ้านมาว่าแต่ละคนแก้ปัญหายังไง เพื่อนบ้านเขียนกันหลายภาษามาก Python, Ruby, C#, C++, Java, Scala, .. ได้ข้อสรุปว่า

  • Python - ไม่ต้องทำอะไร เด๋วมันเพิ่มขนาดให้เอง
  • C/C++ – ปกติใครๆในอินเทอร์เน็ตก็จะแนะนำให้ใช้ GNU MP (GMP - http://gmplib.org/) แต่เชื่อว่าหลายคนเห็นว่าเป็น GNU ก็คงไม่อยากยุ่งด้วยแล้ว ด้วยความชันของการเรียนรู้เพื่อใช้งาน (ผมคนนึงล่ะ) แล้วก็มีคนใช้ http://mattmccutchen.net/bigint/ ผมว่า lib มันดูใช้ง่ายน่าใช้มากเลยอ่ะ บางคนก็เคยเขียน big num ไว้ใช้เอง (จริงๆ)
  • Java BigInteger!
  • C# - เข้าใจว่า pre 4.0 ยังต้องหา lib ข้างนอกมาใช้เอง ส่วนถ้า 4.0+ (Visual Studio 2010) มี System.Numerics.BigInteger ให้ใช้ (พร้อมเมธอด GreatestCommonDivisor) เฉพาะเรื่องนี้ตามหลัง Java ไม่รู้กี่ปี 555+

ส่วนตัวรู้สึกสอบรอบนี้ โจทย์เน้นหนักไปทางคนที่ถนัดคิดแบบ verbally ซะเป็นส่วนใหญ่ (คือคนที่คิดเป็นข้อความ คำพูด พวกตรีโกณมิติ พีชคณิต ทฏษฏีจำนวน) คนที่ถนัดคิดแบบ visually จะเสียเปรียบ

Code Jam 2010 participants from Thailand http://www.go-hero.net/jam/10/regions/Thailand

ใครมีอะไรมาแชร์ คอมเม็นต์มาโลดด~

General , , ,

ว่าด้วย M79

2. May 2010

Grenade_launcher_M79_1

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

- M79 มันเป็นชื่อ ปืนยิงระเบิด ไม่ใช่ชื่อของระเบิดจริงๆ จริงๆแล้วมันยิงระเบิดได้หลายแบบมากสังแบบสังหารระยะใกล้ หรือยิงระเบิดระยะไกลแบบที่เจอในไทย

- ระเบิดที่เจอในไทยมีชื่อเรียกเฉพาะจริงๆว่า M406

- ตอนเริ่มยิง หัวระเบิด M406 จะวิ่งออกจากปากกระบอก M79 ด้วยความเร็วประมาณ 75 เมตร / วินาที หรือเท่ารถยนต์ความเร็ว 270 กม. / ชม. … โอ้ววว ที่ยกมาตรงนี้เพราะคิดว่าระหว่างหัวระเบิดวิ่งมันน่าจะมองเห็นทันด้วยตาเปล่าและมี action เช่นการหมอบลงพื้น ได้ทัน

- ตอนระเบิด หัวระเบิด M406 จะให้สะเก็ดระเบิดออกมาประมาณ 300 ชิ้นถ้วนออกมารอบทิศทาง (ถ้าใครไม่คุ้นกับคำว่าสะเก็ดระเบิด ให้คิดว่ามันเป็นกระสุนดีๆนี่เอง) ด้วยความเร็ว 1,524 เมตร / วินาที (อันนี้คงไม่ต้องเทียบกับรถยนต์ เพราะคงรู้นะว่ามันเร็วมาก - -‘’)

- เสียงเดินทางที่ความเร็ว 340 เมตร / วินาที ที่อากาศ 20 °C และความหนาแน่นอากาศระดับน้ำทะเล

- นั่นแปลว่า สะเก็ดระเบิดเดินทางเร็วกว่าเสียง และจังหวะที่เราได้ยินเสียงระเบิด คาดว่าสะเก็ดระเบิดคงฝังในตัวเรียบร้อยแล้ว o__o’ ฮะ!!?! ดังนั้นตอนที่ได้ยินเสียงระเบิด มันไม่มีโอกาสเลยที่จะทำ action เช่นการหมอบ … ยกเว้นจะทำเพื่อหลบระเบิดลูกถัดไป …

- ตัวลูกระเบิดมีระบบรักษาความปลอดภัย … ให้ผู้ยิง (เอ๊ะ!) ด้วยการการรันตีว่าจะไม่ระเบิดภายในระยะ 30 เมตรหลังจากที่มันโดนยิง ดังนั้นถ้าอยู่ใกล้คนยิง 30 เมตรก็จะปลอดภัย …. แต่ถ้าเห็นหน้าคนยิง ก็อาจจะโดนเก็บอยู่ดี =_=’’ โอ้ยย

- ยิงได้ไกลที่ประมาณ 350 – 400 เมตร  แต่ถ้าระเบิดตกใกล้ตัวในรัศมี 5 เมตร (เกือบเท่าตึก 2 ชั้น) การันตีว่าตาย  - -‘’

- ตอนเรียน นศท. (รด. นั่นแหละ) ทหารแตงโมรึเปล่าก็ไม่รู้ สอนว่าให้ “หมอบ” หลบระเบิด เพราะวิถีสะเก็ดระเบิดจะพุ่งออกมาเป็นตัว V แบบรูปด้านล่าง ดังนั้นการหมอบจะมีโอกาสหลบได้เยอะสุด อีกอย่างนึง (อันนี้ไม่แน่ใจ) ให้คว่ำหน้าเอาตาแนบกับมือเป็นการเก็บอวัยวะสำคัญ

Trajectory

- แต่ประเด็นคือระเบิดแบบที่ทหารบอก มัน assume ว่าระเบิดจากที่พื้น  แล้วถ้าระเบิดบนหลังคา BTS หรือต้นไม้ข้างๆ หรือกำแพงตึกล่ะ ??

Trajectory2

- ผมมานั่งคิดๆดูแล้ว คิดว่าสถานการณ์ส่วนใหญ่การหมอบ work สุดนะ เพราะโอกาสมันคงน้อยมากที่จะยิงแล้วไประเบิดบนเพดาน (ซึ่งเป็นกรณีแย่สุดของการหมอบ  - -‘ ) นอกนั้นก็โอเค

- ดังนั้น ผมคิดว่ากรณีทั่วๆไป ถ้าเราสามารถทำนายได้ว่าต่อไปจะมีเหตุระเบิดเกิดขึ้น หรือเห็นคนกำลังชู M79 กำลังจะยิงเลย ให้หมอบไว้น่าจะดีสุด (หวังว่าจะไม่มีใครทะลึ่งวิ่งเข้าไปหลบในระยะ 30 เมตรจากคนยิง +_+)

หวังว่าคงมีประโยชน์ ไม่ว่าฝ่ายไหนจะยิง ตัวเราต้องปลอดภัยไว้ก่อน

General, Life , ,

ทำงาน 1 ปีแรก

4. April 2010

คิดว่านี่เป็น milestone ใหญ่ๆอันแรกในชีวิตมนุษย์เงินเดือนครับ นั่นหมายถึงผมทำงานมาครบ life cycle ของมนุษย์เงินเดือนทั่วไปแล้ว คือ

  • ตั้ง objectives
  • ทำงาน
  • ประเมิน performance กับหัวหน้างาน ว่า objectives ที่ตั้งไว้ทำได้ตามนั้นรึเปล่า ได้ระดับไหน
  • ได้เงิน fixed bonus ปลายปี
  • ได้เงิน performance-based bonus ตอนเมษา

(Your mileage may vary)

ที่ทำงานบรรยากาศดีครับ เพื่อนร่วมงานใจดีทุกคน ส่วนใหญ่จะเป็นพี่ๆ มีตั้งแต่รุ่นพี่ประมาณ 3 ปี จนถึงเพื่อนๆของอาจารย์ (ใหม่ๆ) ที่ภาคคอม 55+ แต่คนนอกมองเข้ามาในทีมอาจจะไม่รู้สึกว่าผมแตกต่างเท่าไหร่ เพราะหน้าแก่นำไปแล้ว T_T (เส้า) เคยไปประชุมกับ QA ทีมอื่น โดนเรียกพี่อีก (อ่าววว งอแง) Issues จากระดับบนในบริษัทไม่ค่อยลงมาถึงระดับผมเท่าไหร่ ส่วนหนึ่งคงเพราะ management ใน team อันได้แก่ group leaders และ manager แบกรับจัดการให้หมดแล้ว คนงานทำงานได้อย่างค่อนข้างสบายใจ :’)

เรื่องลักษณะงานที่ทำก็เคยเขียนไปบ้างแล้ว สิ่งที่ได้จากการทำงานที่นี่ คงเป็นเรื่องเทือกๆ Incident Management แล้วก็เรื่องของ Customer Support โดยที่คำถามจากลูกค้าหลายครั้งก็ถูกส่งมาในขณะที่เค้ากำลังอยู่ในขั้นตอนการ develop หรือ test ระบบ ซึ่งอาจจะไม่ร้อนแรงมาก แต่เมื่อไหร่มันมาจาก production environment มันจะเริ่มมีความร้อนขึ้นมาหน่อยๆ - -‘’ ต้องตอบให้เร็วขึ้นและหาต้นเหตุ (root cause) ให้เร็วมากขึ้น ซึ่งเคสแบบนี้ก็มีมาให้ทำเรื่อยๆ งาน specialized technical support แบบนี้มันมีอยู่เฉพาะบริษัทใหญ่ๆที่มีฐานลูกค้าใหญ่ และ “ชัดเจน” เรื่อง support เท่านั้น ดังนั้นมันก็ตามมาด้วยข้อเสียว่า career path ถ้าอยากจะโตในสาย technical มันค่อนข้างจะแคบมากอยู่

ข้อมูลที่ลูกค้าให้มาหลายครั้งมัน complete มากขนาด reproduce issue ยากๆได้แทบจะทันที (เช่น deadlock) แต่บางครั้งข้อมูลที่ได้มามันก็เต็มไปด้วย noise มีทั้งแบบที่โยนมาให้เป็นก้อนใหญ่ๆไม่รู้ว่าส่วนสำคัญอยู่ไหน แบบที่เข้าใจไม่ตรงกันแล้วได้ข้อมูลมาผิด หรือแบบที่ไม่สามารถให้ข้อมูลเราได้ทันทีต้องรอนาน ต้องใช้กำลังภายในจัดการกับเรื่องพวกนี้บ้างเป็นบางครั้ง ฮึ่มมมม

อีกเรื่องที่ได้ไปเต็มๆคือได้เห็นว่าคนที่เค้าอยากได้ real-time financial data ไปเนี่ยเค้าเอาไปทำอะไรกัน เรื่องนี้ก็ช่วยเพิ่มความสนใจในเรื่อง finance ให้ผมได้ระดับนึงเลยล่ะ >_<’ ตอนนี้แอบสนใจเรื่องแนวๆ Quantitative Finance อยู่หน่อยๆ มันก็เป็นความเชื่อส่วนหนึ่งของผมเลยแหละว่า skill ด้าน software development ของพวกเราวิศวคอมเนี่ย มันจะมีค่ามากที่สุดต่อเมื่อเรารู้เรื่องใน domain อื่นในเชิงลึกคู่กันไปด้วย หลายๆครั้งผมเลยพยายามหาอะไรใหม่ๆทำดูบ้าง

เรื่อง technical ผมยังไม่รู้สึกว่า skill ตัวเองพัฒนามากขึ้นเท่าไหร่ ส่วนหนึ่งเพราะบริษัทมีอะไรๆที่มันเป็นของภายในให้เรียนรู้เต็มไปหมด ประโยชน์ที่เราจะได้ติดตัวไปจากการศึกษาเรื่องพวกนี้มีแค่ idea และ concept ว่าระบบแบบนี้เค้าสร้างกันขึ้นมาให้ประสบความสำเร็จและขายได้ได้ยังไง ผมรู้จักเทคโนโลยีพวก Low-latency Message Bus ละเอียดขึ้นระดับนึงเลย ส่วนเรื่อง implementation มันก็มีการยอมรับและใช้กันแพร่หลายในบริษัทกลุ่ม financial นั่นแหละ ถ้าเปลี่ยน industry ขึ้นมา ความรู้ในระดับ imlementation พวกนี้ก็อาจจะไม่ได้ใช้เลย

ตั้งแต่ทำงานผมยังไม่เคยเจอปัญหาแบบที่เป็น technical แล้วปวดตับไป 3 วันอะไรแบบนั้นด้วยแหละ >_<’ ความลำบากส่วนใหญ่เป็นเรื่องวิธีการค้นหาข้อมูลมากกว่า ช่วงแรกๆที่ทำงานผมบ่นตลอดเวลาว่าอยากได้ internal google เพราะหาอะไรแทบไม่เจอเร้ยยย วิธีการแก้ปัญหาแบบปกติที่เอา keyword ไป search, เจอบลอก, แล้วแก้ปัญหา ไม่สามารถเอามาใช้ได้ที่นี่ ต้องเปลี่ยนวิธีการมาเป็นการค้นในตัว documentation จริงๆ แล้วก็ต้องทำความเข้าใจกับโค้ด C/C++ ขนาดใหญ่มากที่เราไม่ได้เป็นคนเขียนเอง - -‘’ มันก็เหนื่อยอยู่ แต่พอปรับตัวได้มันก็สนุกและทำให้เรากล้ามากขึ้นที่จะเข้าไปรื้อโค้ดของคนอื่นนะ นอกจากนี้ก็มี flight บังคับให้เรียนรู้เทคโนโลยีเก่าๆเพราะต้อง support บ้าง บางทีผมเห็นเพื่อนๆได้ทำงานที่เรียนรู้อะไรใหม่ๆ (โดยตัวเนื้องานเอง) ก็มีอิจฉาบ้างนิดหน่อย แต่ที่นี่ก็ยังเปิดโอกาสให้มี internal project เอามาทำได้เรื่อยๆนะ โดยถือว่าเป็นส่วนหนึ่งในการพัฒนาตนเองของพนักงาน

ทำงานมาครบปีนึงเลยเข้าใจเลยนะ ว่าเวลาไปสมัครเรียนต่อหรือย้ายงานนี่ เวลาเค้า require “ประสบการณ์” นี่ เค้าอยากเห็นอะไร? ผมคิดว่ารวมๆแล้วมันหมายถึง

  • มีความสามารถที่เป็น hard skill ในการทำงานตามงานที่กำหนดได้
  • เข้าใจเรื่องทั่วๆไปเกี่ยวกับการทำงานในบริษัท: career path, โครงสร้างเงินเดือน, การประเมิน performance, โครงสร้างองค์กร
  • ได้อยู่ในบรรยากาศการทำงานในบริษัท มีการทำงานร่วมกับคนอื่น เห็นความขัดแย้ง ….. blah balh

โดยรวมๆผมยัง enjoy กับการทำงานครับ พี่ร่วมทีมใจดี ขนมเยอะ ชีวิตราบรื่นจนรู้สึกว่า เฮ้ย สบายไปเปล่าวะ - -‘a (เอ๊ะ! ยังไง) อย่างไรก็ตาม กฎของแก๊น ยังเป็นจริงอยู่ครับ

เลือกได้แค่ 2 อันจาก

  • งานสนุก ท้าทาย ได้เรียนรู้อะไรใหม่ๆ
  • มีเวลาว่าง และมี work-life balance หรือเป็น family man
  • จ่ายดีมาก มีตังค์ซื้อของ Apple

ถ้าใครทำให้ตัวเอง “เชื่อ” ได้ว่ามีทั้ง 3 อย่างพร้อมกัน ผมว่าคุณประสบความสำเร็จระดับนึงแล้วครับ ;)

หวังว่าคนอ่านคงได้อะไรไปบ้างครับ (พี่ที่ทีมถ้าหลุดข้ามาอ่านก็อย่าลืมคอมเม็นต์นะ :P) หลักกิโลหน้าคงเป็น “ทำงาน 3 – 4 ปี แรก”

Life ,