Monthly Archives: November 2011

[Presentation Summary] A Tale of Three Trees (Git)

A Tale of Three Trees

Presentation นี้ ชื่อมันอาจจะไม่สื่อถึง Git และไม่ดึงดูดให้สนใจเท่าไหร่ แต่เนื้อหาดีมากครับ

ผู้พูดทำงานอยู่ Github และเป็นคนทำเว็บไซต์ 3 อันนี้ git-scm.comgitref.orgprogit.org 

ต้นไม้ 3 ต้นที่เค้าพูดถึง คือ 3 ต้นไม้ส่วนประกอบสำคัญของ Git ได้แก่

  1. ต้นไม้ HEAD
  2. ต้นไม้ Index
  3. ต้นไม้ Working directory

เค้าเริ่มจากการอธิบายต้นไม้ 3 ต้นนี้

จากนั้นอธิบายถึงคำสั่ง git reset ว่า default, –soft, –hard ทำงานภายในอย่างไร ทำให้เข้าใจว่าทำไมเค้าถึง design คำสั่งออกมาแบบนี้ (แต่ก็รู้สึกว่าเป็นวิธีคิดแบบโปรแกรมเมอร์จริงๆ ทำให้อาจจะไม่เหมาะสำหรับ first impression)

การทำงานของ –soft จะเป็น subset ของการทำงานของ default และการทำงานของ default จะเป็น subset ของการทำงานของ –hard

  • –soft จะอัพเดต HEAD และ current branch
  • default จะอัพเดต HEAD, current branch และ Index
  • –hard จะอัพเดต HEAD, current branch, Index, และ working directory

ผู้พูดได้ blog เรื่องส่วนนี้ไว้ที่ progit blog ด้วย

ตรงนี้ทำให้เข้าใจคำถามที่คาใจอยู่นานว่า ประโยชน์ของ Index มันเยอะเพียงพอให้ใส่เข้ามาในตัว tool เพื่อแล้วกลายเป็นต้องเพิ่มขั้นตอนในการทำงานขึ้นอีก 1 ขั้น จริงๆ หรือ

จากนั้น เค้าพูดต่อถึงเรื่อง git checkout ว่าคล้าย reset แต่เป็นการอัพเดต HEAD โดยไม่ได้อัพเดต current branch

จากนั้นก็เริ่มลงไปที่ internal command ของ git พร้อมกับการ demo บนจอซึ่งไม่ได้ capture มาด้วย + คนพูดๆ เร็วมากเลยฟังไม่ค่อยรู้เรื่องเท่าไหร่

ปล. ใครเจอปัญหา commit หายจาก reset –hard, git reflog และ git checkout ช่วยท่านได้นะครับ แต่ working directory หายนี่ ตัวใครตัวมัน

ผมกับศาสนาพุทธ

ผมนับถือศาสนาพุทธครับ แต่เริ่มเดิมทีก็นับถือตามพ่อแม่ ตามโรงเรียน แต่วันนี้ผมจะมาบอกว่าตอนนี้ผมนับถือศาสนาพุทธด้วยความคิดของผมเองครับ

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

แต่ผมเป็นพุทธศาสนิกชนที่แปลกหน่อย ผมไม่ชอบไปวัด ผมไม่ชอบตักบาตร ผมไม่ชอบเวลาไปเที่ยวต่างจังหวัดแล้วต้องไปวัดประจำจังหวัด ผมไม่ชอบธูป ผมไม่ค่อยทำบุญ และจำไม่ได้แล้วว่า สวดมนต์และน่ังสมาธิครั้งสุดท้ายเมื่อไหร่

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

ส่วนตัวของผมนั้นสิ่งหลักที่ได้จากศาสนาพุทธคือ ความสุขที่ยั่งยืน ทำอย่างไรให้ตัวเรายังเป็นสุขอยู่ได้ ไม่ว่าจะเกิดเหตุการใดก็ตาม

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

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

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

อยากรู้คุณชอบแบบใด -> ตรงไปตรงมา,ตัวใครตัวมัน vs มีน้ำใจ,คอรัปชั่น

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

ผมว่าปัญหา คือ คนที่ให้ข่าวนี้ดันไปพูดว่า ไม่ให้ต่อสัญญาเพื่อ”เอาคลื่นไปทำประโยชน์” ทำเอาทั้งดีเจและแฟนๆกรีนเวฟเต้นกันยกใหญ่ ว่าที่ผ่านมาคลื่นไม่ได้ทำประโยชน์หรืออย่างไร

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

และตอนนี้มีคนบ่นๆ ว่าดีเจกรีนเวฟ ทำตัวเป็นเด็ก เพราะออกมาเรียกร้องว่าตัวเองไม่ได้ทำประโยชน์หรือ อันนี้อยากให้ลองดู timeline twitter ดีๆ มันเป็นช่วงแรกๆ ที่ออกข่าว อีกฝั่งหนึ่งให้ข่าวมาแบบนั้น ทางนี้ก็ต้องมีปฏิกิริยาแบบนี้เป็นธรรมดา ผมสังเกตว่า tweet หลังๆ ก็ไม่พูดเรื่องนี้แล้ว

เกริ่นมาซะยาว จะเล่าสั้นๆ ก็กลัวไม่เข้าใจ เข้าเรื่องจากหัวข้อละนะครับ

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

ผมว่าเรื่อง หลักการ และความรู้สึกเนี้ย มันเป็นเรื่องที่พูดกันยากมาก

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

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

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

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

แต่สิ่งที่ผมคิดคือ เราไม่มีทางที่จะได้ประเทศที่ ไม่มีคอรัปชั่น แต่มีความช่วยเหลือเกื้อกูล(ในสิ่งที่ถูกเสมอ) ทั้งสองอย่างพร้อมๆกัน

เราต้องเลือกซักอย่าง ว่าเราจะเป็นประเทศที่ตรงไปตรงมา แต่อยู่กันแบบตัวใครตัวมัน หรือจะเป็นประเทศที่ช่วยเหลือเกื้อกูลซึ่งกันและกัน มีน้ำใจ แต่คอรัปชั่น

ส่วนตัวผมตอนนี้ หลังจากที่ผมเข้าใจเรื่องนี้ ผมยอมรับกับการคอรัปชั่นไปแล้ว ผมเลือกประเทศที่ช่วยเหลือเกื้อกูลครับ

อยากรู้ว่าคนอื่นคิดอย่างไร

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

[ไปฟังมา] Python Memory Model

เสาร์นี้กำลังจะมีงาน Google DevFests ที่สิงคโปร์ ทาง Python group ที่นี่เลยได้โอกาส เชิญ Wesley Chun ที่บินมาร่วมงานด้วย ให้จัดพูดซักหน่อย (ถ้าผมเข้าใจไม่ผิด เค้าอยู่ทีม App Engine)

ตัว Wesley Chun นี้ผมเคยดู presentation ของเค้าครั้งนึง จากงาน Google I/O 2011 อันนี้ครับ Google I/O 2011: Python@Google

วันนี้เค้าพาพูดถึงเรื่อง Memory Model ของ Python เช่น มีตารางบอกว่าแต่ละ type มี model แบบใด และก็มีแทรก quiz ง่ายๆ เกี่ยวกับการ assign ค่าในแบบต่างๆ บน Python ที่มักทำให้เกิด bug 

เช่น กรณีนี้

และเค้าก็เล่าถึง implement แปลกๆ ภายในตัว Python เช่น

เลขที่ใช้บ่อยจะมี instance เดียวเสมอ ถูกสร้างไว้ตั้งแต่แรก ส่วนเลขทศนิยมประหลาดๆ ถ้าถูกอ้างถึงทีก็จะถูกสร้าง object ใหม่ที (ใน Python เลขเป็น immutable type) (ตั้งใจจะถ่ายสไลด์มาให้ดูแต่ถ่ายไม่ทัน) เค้ายังเล่าว่าสาเหตุของเรื่องนี้ เกิดตั้งแต่สมัย Python เวอร์ชั่น 1 กว่าๆ  ที่ตอนนั้นกำลังสู้กับ​ Perl อยู่ในเรื่อง performance จึงเกิด optimization แบบนี้ขึ้น

อีกเรื่องหนึ่งที่เค้าพูดถึงคือ object reference count ที่เมื่อ object ถูก assign ให้ตัวแปรหนึ่งที ก็จะ +1 เวลาไม่ถูกอ้างถึงก็จะ -1 จนถ้าเป็น 0​ ก็จะโดน garbage collector เคลม memory กลับไป แล้วเค้าก็ลอง run command เช็ค reference count ให้ดูกับพวก object พื้นฐานต่างๆ เช่น 1, True, False ก็ได้เลขเป็นหลักสิบหลักร้อยเลยก็มี เพราะเค้ารัน Python shell บน ui ที่เขียนด้วย Python ด้วย

ท้าย presentation มีข้อสรุปนึงที่โดนใจ เค้าบอกว่าสาเหตุของ bug เกี่ยวกับเรื่องพวกนี้ส่วนใหญ่เกิดจาก mutability เห็นมั้ยครับ ขนาดคนใช้ ภาษาที่ mutate ตัวแปรได้ยังบอกอย่างงี้เลย จะไม่ให้พวกคนใช้ภาษา functional บ้า immutability ได้ไง

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

ปล. หลายๆ คนคงคาดหวังภาพ office Google ขอโทษด้วยนะครับ ไม่มีเวลาถ่ายเลย ไปถึงสายแล้ว เพราะหาตึกไม่เจอ แถมเข้ายากด้วย ต้อง scan บัตรรายคน

[ไปฟังมา] Collaborating with Stakeholders

อันนี้เป็นสไลด์จาก presentation จากงาน meetup ประจำเดือนตุลาคมของ Agile Singapore Group

เป็นเรื่องเกี่ยวกับ ความสำคัญของการสื่อสารระหว่างผู้มีส่วนร่วมในการพัฒนาระบบทั้งหมด เค้ากล่าวถึงว่า ทำไมเราซอฟแวร์/ฟีเจอร์ที่ทำขึ้นมา ถึงมักไม่ได้ใช้ หรือใช้ไม่ได้ และเราจะแก้ปัญหานี้ได้อย่างไร

สไลด์เค้าทำเพื่อสำหรับให้อ่านได้อยู่แล้ว ก็ลองอ่านกันดูละกัน หน้าไหนไม่เข้าใจถามมาได้ครับ เผื่อผมจะอธิบายเพิ่มเติมได้

กำจัดคอมเมนต์ ขอแชร์, ขอบคุณ บน Facebook ที่เปิดด้วย Google Chrome

ลองเล่นดูได้นะครับ

http://dl.dropbox.com/u/865556/clear-pollution.crx

ไม่ได้อัพโหลดขึ้น Google Web Store มันคิดตังแรกเข้า

การใช้งาน 

Screen_shot_2011-11-07_at_3

เมื่อติดตั้งแล้ว และเข้าไปที่ Facebook ของเรา จะพบว่ามีรูปตัว P ถูกกากบาทอยู่ในกล่อง url bar ของเรา (Chrome เรียกว่า Omnibar) เมื่อทำการกดปุ่มนั้น ทุกคอมเมนต์ที่ถูกขยายออกมาแล้ว ที่มีคำว่า “แชร์” และ “ขอบคุณ” อยู่จะถูกลบออกไป

ไม่รับผิดชอบความผิดพลาดและความเสียหายใดๆ ที่เกิดจากการใช้นะครับ

ใครไม่มั่นใจหรืออยากลองแงะเล่น เชิญยำได้ตามความพอใจครับจาก

https://github.com/visibletrap/chrome-ext-clear-pollution

ด้วยความที่ noob Javascript มาก รบกวนแนะนำด้วยนะครับ หากพบวิธีที่ง่ายกว่า ดีกว่าที่ผมเขียน

[Presentation Summary] Running a Startup on Haskell

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

วันนี้เริ่มต้นด้วย presentation นี้ครับ Running a Startup on Haskell

  1. ผู้พูดเป็น CTO mailrank เป็น startup เล็กๆ อยู่
  2. เขียน Desktop App ด้วย C# เพราะมันจำเป็นต้องเป็น Windows App และไม่ใช้ F# เพราะเค้ายังไม่มั่นใจในความรู้ .Net ของเค้า เลยเลือกสิ่งที่ popular
  3. Backend เขียนด้วย Haskell เพราะถนัด
  4. ก่อนมาทำที่นี่ เค้าเขียน Real World Haskell
  5. เค้ายังเป็นคนเขียน Mercurial: The Definitive Guide ด้วย แต่บริษัทเค้าใช้ Github นะ
  6. บริษัทเค้าเขียน library Haskell ใหม่เองเยอะมาก ผิดจากบริษัท startup ที่ยังไม่ใหญ่มากที่เคยเห็น ที่มักจะเลือกใช้ library ที่มีอยู่มากกว่าจะลงไปเขียนเอง
  7. ในช่วงแรกใช้ data store เป็น Riak
  8. แต่ต่อมาเปลี่ยนเป็น MySQL
  9. การเปลี่ยนใช้เวลาแค่ 2 วัน เพราะตอนเขียน Riak มีสังหรณ์อยู่แล้วว่าอาจจะต้องเปลี่ยน
  10. มีพูดถึงการรับคนว่าการที่มีคนที่บอกว่าเขียน Haskell, Scala, Clojure หรือ Erlang ได้ คนๆนั้นควรค่าที่จะสนใจ เปรียบเทียบกับคนที่มี C# ใน resume ว่ามันไม่ได้บอกอะไรเลย เค้าบอกว่าในยุคหนึ่ง Python ก็บอกได้ แต่ตอนนี้ไม่แล้ว slide

จำได้แค่นี้ ถ้าสนใจมากกว่านี้ เชิญติดตามกันเองครับ

Update: โปรดักของบริษัทคงไม่ได้ออกสู่สาธารณะชนแล้วนะครับ เพราะเค้าโดน Facebook ซื้อตัวไปแล้ว จากข่าวนี้ Founders Of Email Sorting Startup MailRank Head To Facebook

 

 

Agile 101

ถึงแม้ว่าผมจะไม่เคยได้ทำงานบริษัท Agile จริงๆ จังๆ เลยก็ตาม แต่วันนี้จากประสบการณ์ที่ผมได้ทำงานในบริษัทพัฒนาซอฟต์แวร์มา การที่ผมได้ศึกษาด้วยตนเอง และพบปะ community ผมว่าผมสำเร็จหลักสูตร Agile 101 แล้ว ด้วยการตัดสินโดยตนเอง 🙂

ผมค้นพบว่า ทุก agile practices สามารถเชื่อมโยงย้อนกลับถึง 3 สิ่งต่อไปนี้ได้เสมอ

  • Feedback เราต้องเปิดโสตประสาทของเราและทีมให้รับ feedback จัดการมันอย่างเป็นระบบ และสร้าง feedback ในด้านที่ขาดไปขึ้นมา
  • Change ระบบที่เราพัฒนาจะต้องอยู่ในจุดที่สามารถรับมือกับ change ได้
  • Bring value value จะเกิดขึ้นได้ก็ต่อเมื่อ เรา release ในสิ่งที่ผู้ใช้งานพึงพอใจ ในระยะเวลาที่เหมาะสม

แน่นอนว่าอ่านแค่นี้แล้ว คนที่ไม่รู้จัก Agile มาก่อนย่อมไม่เห็นภาพอะไรเลย จริงๆ แล้ว target ของ blog นี้ ผมตั้งใจสะกิดให้ท่านที่ใช้ agile อยู่ หรือกำลังเริ่มปรับใช้ ให้ย้อนกลับมาคิดว่าแต่ละสิ่งในกระบวนการพัฒนาซอฟแวร์ที่เราทำและไม่ได้ทำ มันมีเหตุผลอะไรแฝงอยู่ เพราะโดยส่วนตัวผมเคยพบคนที่บอกว่าตัวเองใช้ agile อย่างนี้อย่างนั้น แต่ทั้งทีมไม่เข้าใจ 3 สิ่งข้างต้นนี้เลย ผลลัพธ์ที่ออกมาก็จะค่อนข้างกระจัดกระจาย ไม่ดีเท่าที่ควร หรือ fail ไปเลยก็มี

ปล. ถ้ามีอะไรผิดพลาด รบกวนชี้แนะ และเพิ่มเติมด้วยนะครับ