Category Archives: Talk

หลักสูตรอบรมการเรียนโปรแกรมด้วยภาษา Swift จากเริ่มต้นสู่มือโปร

ในที่สุดก็เสร็จแล้วนะครับ กับคอร์สหลักสูตรการเขียนโปรแกรมด้วยภาษา Swift  มีความยาวกว่า 10 ชม. ผมกล้าพูดได้เต็มปากว่า ไม่น่าจะมีหลักสูตรในไทยที่ไหน สอนละเอียดขนาดนี้ เพราะมันอัดแน่นด้วยเนื้อหาแทบจะครบทุกๆอย่างของภาษา Swift ตั้งแต่ขั้นเริ่มต้นอย่างการประกาศตัวแปร ไปจนถึงเรื่อง Closure , Memory Management หรือ Generic

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

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

ราคาเต็มอยู่ที่ 6400 บาท แต่ในช่วงเปิดคอร์สนี้ผมมีคูปองส่วนลดให้

สำหรับนักเรียน นักศึกษา ผมให้คูปองพิเศษ ลด 50% ให้ครับ ไม่ต้องไปแย่งกับคนอื่น 🙂 เพียงถ่ายรูป บัตรนักศึกษา และส่ง message มาทาง fb – fan page หรือจะส่ง email มาที่ macfeteria แอท gmail เพื่อยืนยันว่าเป็นนักศึกษาจริงๆ

และสำหรับผู้ที่ไม่มีบัตรเครดิต ส่ง email มาหาผมได้ครับ เดี๋ยวบอก รายละเอียดวิธีการสั่งซื้อให้

เนื้อหามีประมาณ 20 กว่าบทได้แก่

  • Variable
  • Operator
  • Making Decision
  • String
  • Collection ( Array , Dictionary )
  • Loop
  • Switch
  • Function
  • OOP
  • Initializer
  • Closure
  • Memory Management
  • Structure
  • Enumeration
  • Protocol
  • Extension
  • Error Handling
  • Generic

ในแต่ละบทยังแบ่งย่อยออกเป็นอีกหลายๆเรื่องนะครับ ลองเข้าไปดู Course ได้ครับที่

https://www.udemy.com/swift-th

ปล 1. ผม update course ให้ตลอดนะครับ หากมีเนื้อหาใหม่ๆเพิ่มเติม
ปล 2. ผมทำคูปองมาให้แล้ว ก่อนซื้อโปรดใช้คูปอง นะครับ

GH 60 Keyboard Building log

หลายคนก็น่าจะพอรู้ว่าผมมีงานอดิเรกอย่างหนึ่งคือ ทำ keyboard ไว้ใช้เอง ก็อย่างที่เคยได้โพสไปในครั้งก่อนโน้น ว่าจากการเริ่มต้นด้วยการสร้าง keyboard แบบ handwire ผมก็มีโปรเจคสร้าง keyboard แบบใช้ PCB บ้าง  และมันก็มาถึงโปรเจค GH60 ซึ่งเป็น Project Opensource Hardware จากทาง GeekHack ( Keyboard Community ) อันที่จริงโปรเจคนี้ได้เริ่มมาตั้งแต่ปี 2014 แต่กว่ามันจะสมบูรณ์มาเป็นตัวปัจจุบัน (REV C) ก็ 2016

IMG_5347

โดยหลักการแล้ว ตัววงจร PCB ก็ใช้หลักการเดียวกับ Handwire ที่ผมได้ทำไปคือ มีตัว Micro Controller ตัวเดียวกัน ใช้ Firmware เหมือนกัน เพียงแต่ว่าถ้าใช้แบบ PCB เราก็ไม่ต้องมานั่งเชื่อมสายไฟ บัดกรี พวก ไอโอด และ Microcontroller เอง จะเหลือส่วนให้ บัดกรี จริงๆ คือ switch เท่านั้น

_DSC0208

ในครั้งนี้ผมได้ลองเอา Cherry  Switch สีเขียว มาใช้งาน (สวิตช์ สีเขียว ปกติจะใช้กับ space bar เพราะมันต้องการแรงกดค่อนข้างมาก)

สวิตช์สีเขียว รวมถึง Stabilizer สั่งมาจาก มาจาก Mouser ราคาไม่ได้แพงมาก แต่เจอภาษี เข้าไป ก็คือว่าแพงอยู่  แต่ถ้าคุณจะสั่ง ผมแนะนำว่าให้สั่งจากเวปพวก mechanicalkeyboards หรือ WASD ดีกว่าครับ เพราะ ปัญหาหลักที่ผมเจอตอนสั่งของจาก Mouser ก็คือว่า Mouser ไม่มี Costar Stabilizer มีแต่ Cherry Stabilizer อันนี้มันก็พอแก้ขัดได้ แต่ปัญหาอย่างที่สองเนี่ย ทำเอาปวดหัว นั่นก็คือเราต้องรู้จัก Part No. ครับ อย่างกรณี Cherry MX เนี่ย มันมีเป็น สิบๆ รหัส บางตัวใช้กับ PCB Mount (ไม่ต้องมี plate) ดังนั้นมันมีโอกาสที่เราจะสั่งผิดเยอะมาก  แต่ข้อดีของการสั่งจากเวปขายของ electronic แบบนี้ คือ ราคาถูกครับ อย่างสวิตช์ Cherry นี่ตัวละ 0.5 USD ในขณะที่เวปทั่วไปขาย 1 – 1.5 USD

_DSC0194

ส่วน Plate นั้นสั่งทำในไทย นี่แหละครับ คือมันจะมีร้านพวกทำงาน CNC อลูมิเนียม Laser Cutter ผมก็หาหลายเจ้านะ ถามๆดู ก็มีแต่รับงาน 10 ชิ้น ขึ้นไป หรือบางที่รับงานชิ้นเดียวแต่ราคาแพงมาก หาไปหามาจนกระทั่งเจอร้าน http://www.psstainlessthailand.com เค้าบอก อันเดียวก็รับทำ ผมเลยลอง email ไปถามเค้าดูว่าสั่งอันเดียวทำไหม ราคาเท่าไหร่ ผมต้องหาแผ่นอลูมิเนียมเองไหม เค้าก็บอกว่า รับทำ แผ่นอลูมิเนียมไม่ต้องหาเอง ผมก็เลยสั่งไป และราคาก็ไม่ได้แพงด้วย สรุปคือ ดีงาม (งานอาจจะไม่สวยนัก แต่ใช้ได้)

เมื่อทุกอย่างอยู่ในมือหมดแล้ว ในลำดับขั้นตอนต่อไปก็คือ เอา Switch มาใส่กับ Plate

_DSC0222

เสร็จแล้วก็ประกอบเข้ากับ PCB ใส่เข้าไปให้ตรงรู ที่เค้าเจาะไว้ให้

_DSC0224

เมื่อประกอบ switch ทุกตัวเสร็จ มันก็จะมีหน้าตาประมาณนี้

_DSC0232

ในส่วนด้านหลังก็จะเห็นว่า ช่องต่างๆ ก็จะเต็มพอดี

_DSC0244

จากนั้นก็ทำการบัดกรี และใส่ stabilizer ให้เรียบร้อย

IMG_5379

ในส่วนของ เคส นั้นผมสั่งจาก เวป alibaba express ครับ สั่งมาสองอัน สีขาว กับ ดำ (แต่ตัวที่ผมเอามาใช้กับตัวนี้คือสีขาว)

IMG_8673

คุณภาพของเคส ทีได้มาก็ถือว่า โอเค แต่เค้าไม่มี น๊อตให้นะ ต้องไปซื้อจากร้านขายน๊อต อีกที

และเมื่อประกอบเข้ากับ Keycaps สีเขียว/ขาว แล้วก็จะได้ Keyboard หน้าตาอย่างที่เห็น

IMG_6897

IMG_5401

เอามาเทียบกับ Handwire ที่เคยทำไป ก็เล็กกว่านิดหนึ่ง

IMG_5391

และสุดท้าย ลองมาวัดกับพี่ใหญ่อย่าง  Apple Extend Keyboard II  ซะหน่อย

IMG_7074

สรุป

ปัญหาหลักที่ผมเจอ ก็คือว่า Plate ผมสั่งมามันหนาไป ปกติเค้าใช้ 1.5 mm แต่ผมสั่ง 2 mm.  ด้วยความที่คิดว่าอยากให้มันทนทาน  ผมก็พบว่า มันทำให้ ใส่ stabilizer ลำบาก และไม่ลงตัว กลายเป็นต้องเอากระดาษทราย มาขัดเกลา stabilizer ให้มันบางลง เพื่อที่จะใส่ได้ ดังนั้นแนะนำว่า ควรให้มีความหนาแค่ 1.5 (+/- 0.1) นั่นแหละดีแล้ว

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

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

Review Harman/Kardon Aura

เอาละวันนี้ผมจะมารีวิว Harman/Kardon Aura นะครับ เพิ่งได้มาใหม่ๆ เลย คือจริงๆแล้วอาทิตย์ก่อน ผมไป Homepro (สาขาที่ผมไปคือ พระราม 3)  จะไปซื้อน้ำยาทำความสะอาดเครื่องซักผ้า แต่ดันผ่านบูทเครื่องใช้ไฟฟ้า คือบางสาขา Homepro มันมีส่วนขายเครื่องใช้ไฟฟ้าอยู่ เดินไปเห็นป้ายลดราคาลำโพงรุ่นนี้อยู่ 30% ไม่รอช้ารีบเข้าไปดูราคาว่ามันจริงป่าวว่ะ สรุปว่า เออมันลดจริงๆ จาก 15K เหลือ 11K โดยประมาณ สรุปว่าลดไป 4 พันบาท

แต่ก่อนจะซื้อ ผมก็ดูใน net ก่อนนะว่า ราคาจริงๆเค้าขายกันเท่าไหร่ ก็ลอง search ดูเห็นมีในเวป อย่าง jib ก็ขายที่ 15,900 บาท แล้วก็มีใน Lazada ขายแค่ 11,000 เหมือนกัน แต่พอแล้วพอเข้าไปดู มันเป็นคนละรุ่นกัน คือตัว ที่ขายอยู่มันจะเป็น  Aura Studio ซึ่งมันจะตัด พวก airplay ออกไป

จากการหาข้อมูลราคาคร่าวๆ ก็เลยตัดสินใจ ซื้อมา คือจริงๆมันก็มีลำโพงรุ่นอื่นๆเหมือนกันนะ ที่ลดราคา บางตัวซื้อหนึ่งแถมหนึ่งอย่าง JBL (คือลำโพง 4 พันแถมอีกตัวในราคา 2 พันกว่าบาท คุ้มโคตร) แต่ว่าผมสนใจรุ่นนี้เป็นพิเศษ คือส่วนตัวผมไปลองลำโพงตัว 4-5 พัน แล้วเสียงมันงั้นๆ เหมาะกับพกเอาไปเที่ยวมากกว่า เอามาไว้ฟังจริงจัง

มาดูกันเลย กล่องก็หน้าตาแบบนี้ ด้านบนขวา บอกไว้ว่า มันได้ Reddot Design ด้วยนะ (คือมันก็สวยจริงแหละ ถึงได้รางวัล)

aura1

ด้านหลังของกล่องก็ประมาณนี้

aura2

ส่วนด้านบนของกล่องจะเขียนไว้ชัดเจนเลยว่า รุ่นนี้ใช้ได้ทั้ง Airplay / Wifi / Bluetootch / AUX  แต่อย่างที่ผมได้บอกไป ถ้าเป็นรุ่น Aura Studio มันจะไม่มี Airplay แล้ว

aura3

จากนั้นก็เปิดกล่องออกมา

aura4

aura5

ภายในกล่องจะมีสายไฟ Adapter มาให้ พวกสาย Aux 3.5 ไม่แถมนะครับ ถ้าใครอยากจะต่อแบบมีสาย ก็ต้องซื้อสายมาเอง

aura6

และนี่ก็คือโฉมหน้าของ Aura ใสๆ วัยรุ่นชอบ

IMG_8275

ในส่วนด้านหลังจะเห็นว่ามี ช่องเสียบต่างๆ รวมไปถึงช่องต่อไฟ

aura7

เอาไปวางคู่กับ Macbook และ จอ Dell ก็ลงตัวทีเดียว

aura10

ดูใกล้ๆอีกรอบ

aura9

ใส กิ๊ก บาดใจ

สรุปทดสอบโดยรวม

  • จากการใช้งานโดยทั่วๆไป เสียงดีมากๆ เปิดดังสุด ก็ให้เสียงไม่แตก เบสยังนิ่ง เสียงแน่นมาก จริงๆผมแนะนำให้ไปร้าน ไปลองฟังก่อนนนะ ลำโพง เรื่องเสียงนี่แล้วแต่สไตล์ความชอบส่วนตัวเลย แต่โดยรวมตัวนี้ ใครฟัง ก็บอกว่าเสียงดี
  • การลด เพิ่มเสียง เป็นระบบสัมผัส ไม่ต้องกดปุ่ม แค่เอานิ้ว ลูบๆไปตามขอบๆ ก็ลดเสียง เบาเสียงได้แล้ว
  • การเชื่อมต่อ Bluetooth ทำได้ดี
  • การเชื่อมต่อ Airplay ก็ดี แต่บางทีมันกระตุก (ในกรณีที่เครื่องทำงานอย่างอื่น หรือเปิด net โหลดหนักๆ) เข้าใจว่าเป็นเพราะ router wifi ที่ผมใช้มันอาจจะไม่ดีเท่าไหร่ ( ของแถมมากับ AIS Fiber)
  • เสียง Airplay ดีกว่า Bluetooth นิดหนึ่ง เชื่อว่าคนทั่วไป แยกไม่ออก
  • ถ้าต่อ Bluetooth เสียงทุกอย่างมันจะออกที่ลำโพงหมด อย่างเช่นถ้าเปิดฟังเพลงจาก youtube ก็จะได้ยินผ่านลำโพง
  • ถ้าใช้ Airplay จะใช้ได้กับพวก iTune หรือโปรแกรมที่รองรับ Airplay ในกรณีเปิดฟังเพลงผ่าน youtube เสียงจะไปออกที่ mac แทน
  • มี iOS Application ให้ใช้ แต่ผมยังไม่ได้ลอง
  • ถ้าเทียบกับ Bose SoundLink III ผมว่าตัว Bose นั้นเสียงดีกว่าตัวนี้ นิดหนึ่ง และ bose มีขนาดเล็กกว่า แต่ Bose นั้นต่อได้เพียงแค่บลูทูช และไม่มีระบบสัมผัส  และถ้าตั้งเอาไว้ที่บ้าน ผมว่าตัวนี้มันดูสวยงามกว่าเยอะ

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

และสำหรับวันนี้ก็เท่านี้ครับ

Review Dell U2414H

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

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

  • ต้องมี port HDMI หรือ Display , Mini Display เพื่อใช้ต่อกับ Macbook Retina
  • มีประกันให้อุ่นใจ
  • งบไม่เกิน 10,000 บาท
  • ขนาดไม่เล็ก ไม่ใหญ่ไป (สำหรับผม 27″ ใหญ่ไป  และจอ 20″ ก็เล็กไปสำหรับเขียนโค้ด )

อันที่จริงมันก็มีจอหลายรุ่นที่ตรงตามที่ผมอยากได้ แต่ก็มาลงเอยกับ Dell U2414H เพราะว่า

  • เคยใช้จอ Dell มาก่อน จากประสบการณ์คิดว่ามันโอเค
  • รุ่นนี้ประกัน 5 ปี ( ถ้าเลือกเอา 3 ปีก็ถูกกว่านิดหน่อย )
  • ผมซื้อในราคา 8 พันบาท แต่ไปรับของเอง (ถ้าสั่งซื้อในเวปออนไลน์ ก็ประมาณ 9 พัน ส่งฟรี)
  • Onsite service
  • Spec ต่างๆของจอ อยู่ในขั้นดี
  • มันมีช่องต่อ usb จากจอ

Open Box

_DSC0106

ตัวที่ผมได้มานี้คือ Dell UltraShape U2414H (Rev A03) คือจอภาพรุ่นนี้จะมี Rev 1 , 2 , 3 ถ้าจะซื้อก็ต้องดูด้วยนะครับว่าเป็น Rev ไหน เพราะ Rev 3 คือรุ่นใหม่สุด (ณ เวลาที่ผมเขียน)

_DSC0107

เมื่อดูข้างๆกล่อง ตรงที่ผมขีดสีแดงเอาไว้ มันบอกว่า รุ่นนี้ ประกัน 5 ปี (U2414H ปกติจะประกัน 3 ปี)  เอาละอย่ามัวเสียเวลากันเลย เริ่มแกะกล่องกันเลยดีกว่า

_DSC0109

หลังจากแกะกล่องออกมา ก็จะพบสายไฟที่ให้มา ประกอบไปด้วย

_DSC0113

  • สาย power
  • สาย usb
  • สาย display port

_DSC0133

_DSC0131

คือมันไม่แถมสาย HDMI มาให้แต่ให้ สาย Mini Display ไว้ต่อกับ Macbook ก็ถือว่าโอเค

ฐานตั้งที่ให้มาก็ดูแข็งแรงดี

_DSC0114

_DSC0115

หลังจากแกะห่อออกมาละ ด้านหลังของจอภาพก็ประมาณนี้

_DSC0116

รายละเอียดต่างๆของการผลิต ก็บอกไว้หลังจอ และที่ผมได้มา มันก็เขียนไว้ว่าผลิต มกราคม 2016  ในส่วนของ serial number ก็ตรงกับข้างกล่อง

_DSC0119

ด้านหน้าจอ ก็อย่างที่เห็น ขอบบาง

_DSC0124

ดูกันใกล้ๆ จะเห็นว่าในส่วนของการแสดงผลเกือบจะติดขอบเลยทีเดียว

_DSC0123

เมื่อประกอบกับฐานเสร็จ ก็จะเป็นแบบนี้

_DSC0127

จอมันจะปรับเลื่อนขึ้นลงได้ และบิดองศาก้มเงิย ได้ พอประมาณ

_DSC0129

ถ้าหากไม่ชอบการวางจอภาพแนวนอน จะเปลี่ยนเป็นแนวตั้งก็ได้

_DSC0130

ในส่วนของภายนอก ก็พอมองเห็นภาพละ ต่อไปก็ลองเอาไปต่อกับ macbook  กันเลย

_DSC0160

จอ Dell U2414H นี้ไม่ใช่จอแบบความละเอียดสูงเหมือน retina display ดังนั้นแล้ว ความคม  (dpi ) จะเอาไปสู้ จอ macbook คงไม่ได้แน่ๆ

_DSC0159

แต่ถ้าเอามาเปรียบเทียบพื้นที่การทำงานก็จะเห็นได้ว่ามันมีพื้นที่เยอะกว่าเดิมมาก

Untitled-2

และในส่วนของการปรับแต่งก็เหมือนๆ จอทั่วๆไป ปรับโทนสี ความสว่าง เลือก input source ว่าจะรับสัญญาณจาก hdmi หรือ diplay port ได้

_DSC0161

รูปเปรียบเทียบกับ Macbook 13″

_DSC0165

สรุปแล้ว ผมว่ามันเป็นจอที่เหมาะกับการเขียนโปรแกรมมาก เพราะ

  • มีพื้นที่ให้เขียนโค้ดเยอะกว่า macbook retina
  • สีสันของภาพ คุณภาพของจออยู่ในขั้นดีมาก
  • ใช้ usb 1 ช่อง ต่อจาก macbook  ไปเข้าจอ แต่เราจะได้ช่อง usb หลังจอภาพ เพิ่มมา 3 ช่อง
  • ราคาคุ้มค่ากับที่ต้องจ่ายไป

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

สำหรับผมก็ขอจบการ review  เพียงเท่านี้

Semantic Versioning

ทุกคนน่าจะเข้าใจคำว่า version เป็นอย่างดี แต่เคยสังเกตไหมว่า เลขแต่ละตัวของมันคืออะไร เช่น

version

อย่าง atom ก็บอกไว้ว่า version 1.3.2 คนทั่วๆไปก็คงไม่ได้สนใจว่า เลขเหล่านี้คืออะไร เข้าใจแค่เพียงว่า ตัวเลขเยอะขึ้นก็คือ version ใหม่กว่าเดิม แต่ถ้าคุณเป็น Developer เรื่องของ version จะกลายเป็นสิ่งสำคัญมาก เพราะเมื่อเขียนโปรแกรมไปสักพัก เราอาจจะต้องใช้ Library จากข้างนอก ที่เราไม่ได้เป็นเขียนขึ้นมาเอง เมื่อเลือก Library หรือ API แล้ว แน่นอนว่าไลบารีต่างๆที่เราเลือกใช้ ก็มักมีการ update เป็นเวอร์ชันใหม่ ซึ่งโดยปกติเราก็จะเปลี่ยนไปใช้เวอร์ชั่นใหม่ถูกไหม เพราะ library อาจจะมีการแก้ bug เพิ่ม feature อะไรก็ว่ากันไป  …. แต่หลายๆครั้งเราก็ต้องพบว่า อ้าวนี่เราต้องแก้ไขโค้ดใหม่ เพราะ API , Library เหล่านั้น ได้เปลี่ยนแปลง  บางฟังชั่นได้ยกเลิกไป หรือฟังชั่นที่เคยใช้งานใช้งานประจำ ต้องการพารามิเตอร์เพิ่มเติม อะไรแบบนี้  คำถามคือ เราจะรู้ได้ยังไงว่า ไลบารี่ที่เค้า update ใหม่เนี่ย โค้ดของเราจะยังใช้งานได้ โดยไม่ต้องแก้ไขอะไร ?

โอเค หลายคนอาจจะบอกว่า โปรเจคเล็กๆ แก้โค้ดของเราให้เป็น API ตัวใหม่ก็จบละ แต่ถ้าเป็นโปรเจคใหญ่ๆ มีโค้ดซับซ้อน การไปไล่แก้คำสั่งต่างๆย่อมปวดหัวแน่นอน และในมุมกลับกัน ถ้าหากเราเป็นคนที่เขียน library , api  เหล่านั้นเสียเองละ

โอเค .. ในวันแรกที่ปล่อย library ให้คนอื่นใช้งาน ก็ตั้งเป็น 1.0 ใช่ไหม ? ต่อมาพบว่ามันมีบั๊ก แก้ไขโค้ดเสร็จ ต้องการจะปล่อย lib ตัวใหม่ ก็ต้องปรับ เลข version กันสักหน่อย แต่ก็ไม่รู้จะตั้งเป็นเลขอะไรระหว่าง 1.1 หรือเปลี่ยนเป็น 2.0 ไปเลย เราจะมีหลักการยังไงในการตั้งเลข version ?

หรือเคยสังเกตกันไหมว่า บางทีเราใช้ library ที่โหลดมาจากเน็ท เค้าจะมีเลขบอกไว้ เช่น LibA 4.0 ต่อมาเมื่อมีการปรับปรุงแก้ไข bug ก็เปลี่ยนเลขเป็น 4.2 แล้วเคยคิดไหมครับว่า ทำไมมันไม่เป็น 5.0 หรือ 4.1 ละ ?

เมื่อหลายๆปีก่อน ผมเองก็เป็นคนหนึ่งที่เขียนเลข version แบบมั่วๆ โดยไม่มีหลักการอะไรเหมือนกัน อยากได้อะไรก็ตั้งเอาเอง เช่น 1.2.0 beta อะไรแบบนี้ เห็นมันเท่ดี แม้ว่าการเขียนเลข version นั้นไม่ได้มีแนวทางตายตัว ว่าต้องเขียนแบบนี้ถึงจะถูกต้อง อย่างไรก็ตามมันมีหลักการที่เป็นที่นิยมใช้อยู่ ซึ่งหนึ่งในนั้นคือ Semantic Version

เลข Semantic Version จะมีความสำคัญอย่างมาก สำหรับ Developer เพราะมันจะช่วยให้เราเลือก Version ของ Library ได้ถูกต้อง และถ้าหากเราเขียน Library ให้คนอื่นเอาไปใช้ยิ่งต้องเขียนเลข version ให้ดี ซึ่งอย่างกรณี JKNotificationPanel ที่เป็น cocoapod library ของผมเอง นั้นก็ตั้งเลข version ตามแบบ semantic นี้เหมือนกัน

วันนี้ก็เลยจะขอพูดถึง Semantic Version และหลักการของมัน อย่างคร่าวๆเพื่อให้เราสามารถเขียนเลข version ให้มีความหมาย มากกว่า แค่บอกว่า library , api ที่เราใช้อยู่นั้น ใหม่ หรือ เก่า

Semantic Version

การเขียน semantic version นั้นมักจะใช้ในการเขียน Library และ API ต่างๆ ซึ่งเลข version ที่เป็น semantic version นั้นจะประกอบไปด้วยเลข 3 ส่วนคือ  x.y.z ( ไม่มี z ก็ได้ )

โดยที่เลขแต่ละตัวนั้นหมายถึง

  • X คือ Major  Version
  • Y คือ Minor  Version
  • และสุดท้าย Z คือ Patch Version

แต่ก่อนที่จะไปทำความเข้าใจการเขียนเลข เหล่านี้จะขออธิบายเพิ่มเติมเกี่ยวกับศัพท์ที่จะยินอยู่บ่อยๆสักหน่อย นั่นคือ backward compatibility

คำว่า Backward compatibility คือ การทำงานเข้ากันได้กับ API เดิม เช่น สมมติว่า โปรเจคเราใช้ LibA 1.0 ซึ่งมีฟังก์ชั่น Sum( a, b ) ที่รับค่า integer สองตัวคือ a และ b และในเวลาต่อมา LibA ได้ออกเวอร์ชั่นใหม่เป็น 1.2  และปรับปรุงให้ฟังก์ชั่น Sum นั้นสามารถรับค่า double ได้

ถ้าโค้ดของเราที่เรียกฟังก์ชัน Sum ยังทำงานได้ โดยที่ไม่ต้องเปลี่ยนแปลงอะไร นั่นคือไม่ต้องเปลี่ยนค่า a,b เป็น double สามารถใช้ integer ต่อไปได้ นั่นหมายถึงว่า libA ตัวใหม่นี้รองรับ backward compatibility

เอาละ เมื่อเข้าใจคำศัพท์แล้ว ต่อไปก็มาดูหลักการกันเลย

อันที่จริงการตั้งตัวเลข semantic นี้มีหลักการ ที่เขียนไว้ใน http://semver.org/ อยู่แล้ว ไปอ่านกันได้ แต่โดยสรุปอย่างย่อแล้ว มันมีหลักการง่ายๆคือ

  • เลข x.y.z นี้จะต้องไม่เป็นค่าติดลบ คือ จะไม่เขียน -1.0.0 อะไรแบบนี้
  • ค่าจะต้องไม่เป็น 0 คือ เขียนเลข 0.0.0 ไม่ได้
  • ค่าจะต้องเพิ่มขึ้นเสมอ เช่นตอนนี้ใช้ 1.4 เมื่อเปลี่ยน version ก็ต้องมีค่ามากขึ้น จะเขียน 1.3 ไม่ได้
  • ถ้าเลข Major Version มีค่าเป็น 0 นั่นหมายถึงว่า เป็น version ที่กำลังเริ่มต้นพัฒนา API ต่างๆอาจจะเปลี่ยนแปลงได้เสมอ
  • การเปลี่ยนเลข Patch Version จะใช้กับการแก้ไข bug ที่ทำให้การทำงานของ API, Function ของ library นั้นไม่ถูกต้อง เช่นฟังชั่น Sum ส่งค่าลบเลข มาแทน ผลการบวกเลข ในกรณีนี้จะต้องทำการเปลี่ยนเลข Patch  เช่นจาก 1.0.0 เป็น 1.0.1 เป็นต้น
  • Minor Version จะเปลี่ยนก็ต่อเมื่อ มีการเพิ่ม Feature , API ใหม่ๆ แต่ยังคงรองรับ api เก่า (backward compatibility) และถ้าหากเปลี่ยนเลข Minor Version แล้ว เลข Patch จะต้องเปลี่ยนเป็น 0
    เช่น 1.1.3 ก็เปลี่ยนเป็น 1.2.0
  • Major Version จะเปลี่ยน เมื่อ มีการเพิ่ม Feature หรือ  API แต่ไม่รองรับ backward compatibility และเมื่อเปลี่ยนเลข Major ใหม่ ตัวเลข Minor , Patch จะต้องเปลี่ยนเป็น 0
    เช่น 1.1.3 ถ้าหากเปลี่ยนเป็น 2.0.0 หมายถึงว่า lib นี้ได้เพิ่ม feature และไม่รองรับ backward นั่นเอง
  • ในกรณีที่เป็น pre-release ( ยังไม่สมบูรณ์ แต่ออกมาให้ลองใช้ก่อน ) อาจจะเขียน ตัวหนังสือ หรือตัวเลขต่อท้ายได้ เช่น 1.0.0-alpha , 1.0.0-beta.2 และแน่นอนว่าเวอร์ชั่นที่ไม่มี prelease ต่อท้ายคือเวอร์ชั่นที่ใหม่กว่า เช่น (เก่าสุด) 1.0.0-alpha  < 1.0.0-beta < 1.0.0 < 1.0.1 (ใหม่ล่าสุด)

ทีนี้พอจะเข้าใจแล้วใช่ไหมครับว่า เลข version นั้นมีความสำคัญยังไง และเราก็ควรจะใช้ semantic version นี้ให้เป็นประโยชน์

เอาละครับก่อนจากกัน ลองตอบตัวเองกันสักหน่อยว่า

Swift 2.0 กับ Swift 2.2 นั้นหมายถึงอะไร

เชื่อว่าหลังจากอ่านบทความนี้จบ คุณก็ตอบได้ใช่ไหมละครับว่า 2.2 การเพิ่ม feature ใหม่ๆ และรองรับ backward compatibility คือพูดง่ายๆว่า ถ้าหากเราเขียนโค้ดด้วย Swift 2.0 มันจะยังทำงานกับ Swift 2.2 ได้ โดยที่ไม่ต้องเปลี่ยนแปลงอะไร แต่จะถูกแจ้งว่า โค้ดบางส่วน กำลังจจะ deprecate ( ยกเลิก ) ในอนาคต นั่นเอง