Posts

Showing posts with the label programming

11(+3) เว็บที่ iOS Developer ไม่ควรพลาด

Image
Never stop learning from others นอกจาก Document ของ Apple ที่จัดเตรียมไว้ให้แล้ว เว็บไซต์ต่างๆ ที่เกี่ยวกับ iOS Development ที่น่าติดตามก็มีมากมายเลยล่ะ ซึ่งผมจะมาแนะนำ 11 เว็บที่คุณควรจะต้องติดตามไว้ Ray Wenderlich เว็บที่เต็มไปด้วย Tutorials ชื่อดังมาจากหนังสือ (เรียกว่าคัมภีร์เลยก็ได้) iOS Tutorials ซึ่งออกมาในทุกๆ เวอร์ชั่น iOS ซึ่งจะสอนในรูปแบบที่เราต้องทำตาม สนุกสนานและอ่านง่ายมาก objc.io บทความเดือนละชุด ซึ่งมาจากคนในวงการ iOS Engineers ระดับโลกเลยทีเดียว ทุกบทความนี่เจาะลึกในแต่ละเรื่องอย่างมาก นอกจากนี้ยังมี Newsstand App บน iPad เป็นอีกทางเลือกหนึ่งด้วย (มีค่าใช้จ่าย) ซึ่งเว็บนี้สร้างโดย Chris Eidhof , Daniel Eggert  และ  Florian Kugler Subjective-C เป็นแนวที่จะให้เราเรียนรู้การทำ UI เจ๋งๆ ที่อยู่บน App ดังๆ ทั้งหลาย สามารถดู Pattern ในการเขียนของพวกนี้ได้ และลองทำตาม เป็นเว็บที่เจ๋งดี บทความทั้งหมดเขียนขึ้นโดย Sam Page NSHipster เจ้าของเว็บนี้ (น่าจะ)ไม่มีใครไม่รู้จักเขา เขาคือ Mattt Thompson เจ้าของ Networking Library ชื่อดังอย่าง AFNetworki...

Functional Programming should be your #1 priority for 2015

Image
OOP cannot save us from the Cloud monster anymore. คุณอาจจะเคยได้ยินคำบางคำเช่น "Clojure", "Scala", "Erlang" หรือ "Java มี Lambdas แล้วนะเว้ย" และอาจจะรู้ว่ามีอะไรบางอย่างที่เกี่ยวกับ Functional Programming ถ้าคุณได้มีส่วนร่วมในสังคมของพัฒนาโปรแกรมใดก็ตาม เรื่องนี้เป็นเรื่องที่กำลังเป็นที่นิยมอย่างมาก ถ้าลอง Googling คำว่า Functional Programming คุณจะเห็นว่าไม่มีอะไรใหม่เลย เพราะภาษาโปรแกรมตัวที่สองที่กล่าวถึงด้านบน มันถูกสร้างตั้งแต่ปี 1950 และถูกครอบไว้ด้วยไวยากรณ์ใหม่เท่านั้นเอง ภาษาที่ว่าคือ Lisp แล้วทำไมล่ะ ทำไมเราต้องตื่นกับมันตอนนี้ด้วย ทั้งที่มันผ่านมากว่า 60 ปีแล้ว At the beginning, Computers were really slow ไม่ว่าคุณจะเชื่อหรือไม่ แต่คอมพิวเตอร์ในตอนนั้นช้ากว่า DOM ในตอนนี้เสียอีก ซึ่งมี 2 แนวคิดหลักๆ ในการออกแบบและสร้างภาษาโปรแกรมขึ้นมานั่นคือ เริ่มจาก สถาปัตยกรรมของ Von Neumann แล้วใส่ Abstraction เข้าไป เริ่มจากคณิตศาสตร์ และนำ Abstraction ต่างๆ ออกไป คอมพิวเตอร์ในตอนนั้นไม่มีความสามารถในการประมวลผลมากพอที่จะประมวล...

12 ข้อที่ Developer ควรจะเป็น และเด็กจบใหม่ควรทำความรู้จัก

Image
ค้นไปเจอสไลด์ที่มีชื่อเรื่องว่า “ 12 Things Every Programmer Should Know " เห็นว่าน่าสนใจและน่าจะเป็นประโยชน์สำหรับเด็กจบใหม่อย่างเราๆ เลยนำมาแปลเป็นไทย เท่าที่จะพอเข้าใจได้ดังนี้ 1.  Be Passionate  มีความรักในสิ่งที่กำลังทำ รักในสิ่งกำลังจะสร้าง ชอบที่จะทำให้ดีและชอบที่จะปรับปรุงให้ดีกว่าที่ผ่านมา นี่อาจจะ "Programmer are a subset of  creator  have the  responsibility  to shape the new world ”  @steveklabnik and @jodufyr 2.  Love Your Codes  รักโค้ดที่คุณเขียนมันขึ้นมาเอง การที่จะรักหรือชอบโค้ดที่เขียนขึ้นมานั้น โค้ดนั้นมันต้องอ่านรู้เรื่อง สะอาดตา เพราะฉะนั้นก็พยายามเขียนให้มนุษย์ด้วยกันเองอ่านรู้เรื่อง ไม่ใช่เขียนให้ machine อ่านได้อย่างเดียว 3.  Version Control  อย่าง Git หรือ Mercurial ใช้เพื่อ Backup โค้ดของเรา เวลาเครื่องพังจะได้สบายใจว่าโค้ดไม่หาย, เวลาทำงานกันเป็นทีมหลายๆคน ก็สามารถจะ Track ได้ว่าใครเปลี่ยนแปลงอะไร เปลี่ยนตรงไหน เปปลี่ยนเมื่อไหร่ ไม่ต้องมานั่งทะเลาะกัน ใครลบโค้ดตรูทิ้งวะ เมื่อวานไม่ Erro...

Understanding Event-driven and Non-Blocking I/O in Node.js

Image
ผมว่าคนที่มาลองเขียน Node.js แบบผม ในตอนแรกก็ต้องพยายามที่จะเข้าใจ Concept ของ Platform ตัวนี้ไม่มากก็น้อยล่ะนะ เคยมีปัญหาไหม เวลาที่ต้องพยายามเข้าใจว่า "blocking" และ "non-blocking" I/O ต่างกันอย่างไร ? อะไรคือ Event-driven Programming ? Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices. นี่คือคำโปรยในเว็บ Nodejs.org และคุณลักษณะที่ทำให้ Node.js ต่างกับ Server Side Platform ตัวอื่นๆ คือ Node.js uses an event-driven, non-blocking I/O model แล้วมันคืออะไร วันนี้เราจะมาอธิบายด้วยเรื่องเล่าสัก 2 เรื่อง ให้พอเห็นภาพกัน The Doctor's Office Reception Line Analogy ใน episode 102 of the Herding Code podcast  Tim Caswell ได้อธิบายการทำงานของ event-driven programming ด้วยเรื่องเล่าเกี่ยวกับการต่อแถวเพื่อพบคุณ...

Google Code Jam 2013 รอบคัดเลือก

Image
ปีนี้สุดท้ายแล้วได้มา 80 คะแนนครับ อันดับอยู่ 8 พันกว่าๆ เนื่องจาก กว่าจะตื่นมาทำก็เที่ยงละ แล้วข้อสุดท้ายที่ทำได้ ก็เล่นเอาเกือบหมดเวลา (ตี 4 ของอีกวัน หมดเวลา 7 โมงเช้า) ทรมานคนแข่งประเทศอื่น Google ก็คิดว่า Programmer ต้องนอนดึกเลยจัดแข่ง 11.00PM เวลาที่นู่น ซึ่งเมืองไทยก็ 6 โมงไงครับ Programmer ที่นี่ บางทีพึ่งจะนอนหลับกัน (รึปล่าว ?) ผมทำไปทั้งหมด 3 ข้อ Problem A.  Tic-Tac-Toe-Tomek อันนี้ไม่มีอะไรครับ เป็น OX แบบ 4x4 ที่มีตัวพิเศษคือ T อยู่บนตาราง 1 ตัว (หรืออาจจะไม่มี) ซึ่ง T จะเป็นตัวพิเศษคือถ้ามี O หรือ X จำนวน 3 ตัวแล้วมี T ไม่ว่าจะแทรกอยู่หรือต่อท้าย เป็นว่าชนะ Input ตารางเข้าไปแล้วให้หาว่า ใครชนะ เสมอ หรือเกมส์ยังไม่จบ ตอนแรกคิดว่า T จะต้องต่อ XXX เท่านั้น แต่มาอ่านอีกที T เนี่ยแทรกอยู่ตรงไหนก็ได้ Algorithm ที่ผมใช้ เลยใช้ประโยชน์จากตัวภาษา แล้วนับจำนวนเลย (ตอนแรกก็เขียน check แถวหลักธรรมดาแหละ แต่ Code ยาวไปยันเกือบ 120 บรรทัดมั้ง = =') test = gets.chomp.to_i def win_checker(symbol_list, symbol) symbol_list.count(symbol) == 4 or (symbol_lis...

Word Counting in Various (Programming)Language

Image
ผมเป็นคนหนึ่งทีีเขียน Programming Langauge ได้หลายภาษา เนื่องจากสนใจ ผมเริ่มเขียนจาก C/C++ ซึ่งก็ไม่สบายนัก เลย ค้นหาภาษาที่จะมาช่วยล่นระยะเวลาในการเขียนเล่น เช่น Python, Ruby  วันนี้ก็อยากเขียนเล่น โดยเราจะมาเขียนโปรแกรมง่ายๆ กันด้วยหลายๆ ภาษากัน ปัญหา: ผมจะนับคำจำนวนคำที่ไม่ซ้ำจากข้อความหนึ่งข้อความ (string) C++ เนื่องจากการใช้ split บน C++ นั้นไม่เจอวิธีที่ดูง่ายก็เลยเขียนเองซะเลย Objective-C (with ARC)  เริ่มมีตัวช่วยเป็นภาษาที่ใช้เขียนบน iOS Java ภาษาที่เขาว่าเวิ่นเว้อ #จาว่าเร็วส์  คราวนี้มาฝั่ง Scripting Langauge กันบ้างเริ่มที่ Python Ruby  กันบ้าง เป็นภาษาที่พักหลังนี้ผมใช้เขียนประจำเลยครับ :)  มีคนบอกว่าภาษาพวก Scripting เร็วส์ ซึ่งเร็วในที่นี้หมายถึง "ความเร็วในการพัฒนา" นะครับ จากที่เห็นไปด้านบน เราสามารถแก้ปัญหาด้วย Code เพียงไม่กี่บรรทัดเท่านั้น  ลองเล่นกันครับ ... เป็นหลายๆ ภาษามันก็ดี เน้นที่พื้นฐานให้มาก ถ้าพื้นฐานเน้น กำแพงเวลาในการเรียนรู้ภาษาใหม่ๆ จะลดลง แล้วอย่าพยายามเขียนภาษาใหม...

Ruby Loops & Iteration method

Image
พอดีรุ่นพี่ผม  @onoaonoa เขียน Objective-C Iterator ครับ ใครสนใจลองไปอ่านดูนะครับ :)  http://www.jerapong.com/content/objective-cs-iteration เลยนึกได้ว่า เรื่องนี้ในภาษา Ruby มันเท่มาก Readable มาก และผมชอบมันมาก  ก็เลยเอามาเขียน Blog บ้าง ...  โดยการยกตัวอย่างจะเป็นแบบง่ายๆ ทั้งหมด ลองเอาไปใช้และประยุกต์ดูนะครับ มารู้จัก Range & Array ใน Ruby กันสักหน่อย  ต่อไปก็มาเล่น Loop แบบ Basic ที่เราเจอในภาษาโปรแกรมอื่นๆ กัน :) while กับ for ก็จะเหมือนกัน แต่ Ruby มี until ให้เราใใช้ได้ มันคือสิ่งที่ตรงข้ามกับ while ครับ แปลตรงตัวเลยว่า "จนกระทั่ง" ถึงเงื่อนไขใดๆ   ของเล่นอีกอย่างใน Ruby ก็คือการทำ Infinity Loop ครับ ปกติแล้วในภาษาอื่นๆ จะใช้พวก while(1) [C/C++/Java] หรือ while True: [Python] ซึ่งเวลาอ่าน Code แล้วมันไม่ Readable เท่าไรนัก ใน Ruby เราจะเขียนกันแบบนี้ครับ คราวนี้สิ่งที่ผมบอกว่ามัน "เท่" คือสิ่งที่เรียกว่า   Iteration method ครับ  โดย Iteration method ทุกตัวนั้นจะใช้ Blocks (ทั่วไปเรียก A...

Skill เบื้องต้นของ Programmer ตอนที่ 5: Packing Information into Names

Image
เรื่องง่ายๆ ที่เรามองข้ามจาก The Art of Readable Code อย่าได้กลัวการตั้งชื่อตัวแปร "ยาวๆ" เพราะมันไม่มีผลอะไรกับการทำงาน ของโปรแกรมเลย ดังเช่นสิ่งที่กล่าวไปในตอนนี้ท ี่ 3 และขอ Quote ข้อความของอาจารย์ @rawitat "จงเขียนโค้ดเพื่อให้คนอ่าน และบังเอิญมันเอาไปใช้งานได้" Write code for people to read, and occasionally for machine to execute. ฉะนั้น Code ของเรา ไม่ใช่เขียนไป 3 วันกลับมาดูอีกที -> "เขียนอะไรลงไปวะ" แล้วต้องมานั่งไล่การทำงานของโป รแกรมกันใหม่อีกรอบ ว่า "มันทำงานอะไร ยังไง" ทำให้เป็นนิสัยครับ ตอนแรกหลายคนอาจจะเริ่มด้วย a, b, c, x, y ของแบบนี้แก้กันยากนะครับ ปรับตัวให้ชิน ลองดูสักพัก เดี๋ยวมันจะทำเป็น Automatic เอง แถมได้ฝึกทักษะภาษาอังกฤษด้วย ไม่มีใครห้ามพก Dictionary ครับ :) หลักการการตั้งชื่อยังมีอีกหลายแบบนะ เช่น "ถ้าฟังก์ชั่นนั้น Return ค่าความจริงก็อาจจะตั้งชื่อฟังก์ชั่นขึ้นต้นด้วยคำว่า is " ต้องลองไปอ่านเอาเองนะ :) มีอีกหลายหลาก เช่น ถ้าตัวแปรนั้นเก็บที่อยู่ของไฟล ์ที่จะเปิด => filePath ถ...

บันทึกการเดินทาง#12 : Barcamp Bangkhen #3 IUP Building, KU.

Image
งาน Barcamp Bangkhen เป็นงาน Computer (non-)Conference ที่จัดติดต่อกันครั้งนี้เป็นครั้งที่ 3 แล้วครับ :) รอบนี้ผมก็เลยไม่พลาดที่จะไปร่วมงานด้วย http://barcampbangkhen.org งานนี้มีอะไร ?  รายละเอียดงานไปหาอ่านในเว็บนะครับ (แล้วจะเขียนทำไม ?) :P เข้าเรื่อง วันนี้เราเดินทางไปถึงมหาวิทยาลัยเกษตรศาสตร์ วิทยาเขตบางเขน เดินไปถึงตึก IUP ประมาณ 9.30 พอดี ซึ่งคนก็เริ่มมากันเยอะแล้ว  ผมเดินทางไปกับน้องๆ ในคณะประมาณ 5 คน และอยู่ที่งานแล้ว 2 คน ไปถึงก็วิ่งหาเสื้อฟรีก่อนเลย -- เสื้อที่ได้รับเป็นแบบนี้ครับ :)  ขอยืมภาพมานะครับ Credit อ่านดูที่ป้ายชื่อ พูดถึงเรื่อง Session กันบ้าง ? ปีนี้ผมเสนอไปพูดด้วยนะ หัวข้อ Hello, iOS Development แต่ได้รับแค่โหวตแค่ประมาณโหลนึง ก็เลยไม่ได้ขึ้นพูด แต่ปีหน้าจะส่งไปอีก ในเรื่องเดิมนี่แหละ Session#1 -- 10.10 - 11.00 --> Mobile Platform Wars (Discussion) ก็เข้าไป Discuss ก่อนจบในประเด็นของ Developer ว่าเรามาเขียน Native กันก่อนที่จะเลือกความง่ายดีกว่านะ ... แต่เนื่องจาก Developer ในห้องเนี่ยน้อยมากกก...

Skill เบื้องต้นของ Programmer ตอนที่ 4: Naming Convention

Image
ในเรื่องของ Naming Convention นั้น เราจะแบ่งเป็น 2 เรื่องนะครับ  เรื่องแรกนั่นคือ "Language-specific conventions"   เขียนให้ถูกวัฒนธรรมของภาษานั้น ๆ ซึ่งเราจะแบ่งการเขียนชื่อต่างๆ  ไม่ว่าจะเป็น ชื่อตัวแปร, ชื่อฟังก์ชั่น, ชื่อคลาส บลา บลา บลา ซึ่งจะอยู่มีอยู่ 2 ประเภทใหญ่ๆ ที่เห็นกันทั่วไปคือ ... CamelCase  แบ่งออกเป็น 2 อย่างคือ lowerCamelCase และ UpperCamelCase ตัวอย่างภาษาที่ใช้คือ Java, Objective-C, C# snake_case,  under_separate, separated_by_underscores ตัวอย่างภาษาที่ใช้คือ C, C++, Javascript และก็ยังมีบางภาษาที่ใช้ทั้ง 2 แบบผสมกัน ยกตัวอย่างเช่น Ruby และ Python จะใช้ UpperCamelCase กับ Class Name และชื่ออย่างอื่นเป็น separated_by_underscores ทั้งหมด อีกอย่างนึงที่เป็นที่รู้กันในทุกๆ ภาษาก็คือ Constant (ค่าคงที่) เราจะใช้  uppercase characters separated by underscores ** ไม่ได้อธิบายลักษณะไว้นะ แต่ดูที่เขียนก็น่าจะเข้าใจนะ เขียนตัวอย่างให้ดู 3 ภาษาที่พอเขียนสดบน Text Editor ได้แล้วกันครับ :) C/ C++ Naming Convention...

Power of Pair Programming: Agile Thailand 2012

Image
Triple P :: Power of Pair Programming @Agile Thailand 2012 เป็น Session นึงที่ถูกใจผมมากๆ เลยครับ พูดโดยพี่ @roofimon  -- Scrum Master ณ Opendream ทำไมถึงถูกใจ ... ? อาจจะเป็น Session ที่เข้าถึงได้ง่ายที่สุด เพราะผมยังคงเป็นนักศึกษาอยู่ และการ Pair มันเอาไปใช้ได้ทุกๆ วัยของ Programming ถ้าอยาก Focus งานที่อยู่ตรงหน้า มากกว่าเรื่องอื่นๆ ที่ฟังมา เพราะเรื่องอื่นๆ อาจจะต้องทำงานจริง ถึงจะเข้าใจแนวคิดเหล่านั้น My mind to your mind, my thoughts to your thoughts. การ Pair กับใครสักคน ต้องนึกถึงข้อความข้างบนนี้เสมอๆ นะครับ ... ทำไมถึงต้อง Pair Programming ? เนื่องจาก Programmer เป็นสิ่งมีชีวิตที่ค่อนข้างอ่อนไหว และในการทำงาน ใช้สมองเยอะมาก ฉะนั้นเราจะหาความ Balance ของการทำงานได้อย่างไร ... ไม่ใช่ทำงานจนไม่มีเวลาใช้เงิน งานต้องเสร็จ นู่น นี่ นั่น เครียดไปไหม ... สุดท้ายจบที่ ... "ลาออก" แม้ที่ Opendream จะใช้ Scrum Process เข้ามาช่วย แต่ก็ไม่ได้ Solve ปัญหาทั้งหมดลงได้ (แหง ?) เป้าหมายของ Scrum Master คือการหา Velocity ของ Team Velocity ถ้าแบบมีหลักการหน่...

การเขียนโปรแกรมแก้ปัญหา "โจทย์รูปทรงสมมาตร"

Image
ผมรู้จักมันในสิ่งที่ผมเรียกว่า "โจทย์ดาว" คิดว่าทุกคนน่าจะได้เรียนตอนที่เรียน Nested Loop ในวิชา Computer Programming ซึ่งเป็นสิ่งทีผมไม่ชอบเอามากๆ ... แต่โจทย์จำพวกนี้เรามักจะเจอใน "คอมพิวเตอร์ โอลิมปิค" และในวันนี้ผมก็ขอหยิบโจทย์หนึ่งใน "การแข่งขันคอมพิวเตอร์ โอลิมปิค" (ลืมปี) ที่มีชื่อว่า "ฝุ่นธุลีล้อมดาว" พร้อมกับ Algorithm ที่ผมได้มาจากท่านอาจารย์คนหนึ่งนั่นคือ อาจารย์ภิญโญ แท้ประสาทสิทธิ์ อาจารย์ประจำภาควิชาคอมพิวเตอร์ มหาวิทยาลัยศิลปากร  ซึ่ง Algorithm นี้สามารถนำไปประยุกต์ใช้กับ "โจทย์ดาว" ที่เป็น "รูปทรงสมมาตร" ได้หลายๆ อันเลย (ณ ตอนนี้ผมไม่มีโจทย์อยู่ในมือ เลยอาจจะได้แค่ 3 - 4 ข้อ) ว่ากันต่อโจทย์ "ฝุ่นธุลีล้อมดาว" ที่ผมกล่าวถึงเนี่ยจะมีลักษณะ input และ output เป็นแบบนี้ครับ เรามาดูเรื่องของ Algorithm กันก่อนนะครับ (อาจจะในภาษาที่ผมเข้าใจ) ขั้นแรกให้วาดตารางครอบคลุมปัญหาย่อยๆ ของเราก่อน  ในที่นี้ผมเลือก Input เป็น 3 เราจะนับจำนวนได้ด้านละ 5 ช่อง โดยถ้าดูแบบ Array 2 มิติ ...