Posts

Showing posts with the label coding

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...

Comment 5 แบบที่ควรหลีกเลี่ยง! ในการเขียนโปรแกรม

Image
Code ไม่ควรมี Comment  การที่มี Comment แปลว่าเราอ่าน Code ไม่ออก  หรือไม่สามารถเขียน Code ให้อ่านออกได้  1. The Proud Programmer public class Program { static void Main(string[] args) { string message = "Hello World!"; // 07/24/2010 Bas Console.WriteLine(message); // 07/24/2010 Bas message = "I am so proud of this code!"; // 07/24/2010 Bas Console.WriteLine(message); // 07/24/2010 Bas } } @roofimon ได้กล่าวไว้ว่า "Programmer คือสิ่งมีชีวิตที่คิดว่าตัวเองฉลาดที่สุดในโลก" แน่นอนว่ามีโปรแกรมเมอร์ประเภทที่ Proud สิ่งที่ตัวเองเขียน (มากเกินไปหน่อย) ฮ่าฮ่า ซึ่งทำให้ Code เลอะเทอะอย่างที่เห็นนั่นแหละ 2. The Obsolete Programmer public class Program { static void Main(string[] args) { /* This block of code is no longer needed * because we found out that Y2K was a hoax * and our systems did not roll over to 1/1/1900 */ //DateTime today = DateTime.Today; ...

บันทึกการเดินทาง#21 : Code Retreat @ Geeky Base

Image
Code Retreat คือ ... (under construction)     Code Retreat คือกิจกรรมคู่เป็นหมู่ๆ สำหรับโปรแกรมเมอร์ โดยโจทย์ที่ใช้ในการทำ Code Retreat คือ Conway's Game of Life   อธิบายง่ายๆ คือนึกภาพตารางขนาด M x N เราจะเรียกมันว่า "Universe" โดยในแต่ละช่องจะมีสิ่งมีชีวิตที่เรียกว่า "Cell" โดยตัว Cell ก็มีสถานะคือ "มีชีวิต (alive)" และ "ตาย (dead)" โดยในแต่ละรอบของสิ่งมีชีวิตเหล่านั้น (Generation) ก็จะมีการเปลี่ยนสถานะของ Cell ต่างๆ โดยมีกฎดังนี้ ...  ถ้า Cell เพื่อนบ้านของ Cell มีชีวิตที่พิจารณา (8 Cells) มี Cell ที่มีชีวิตอยู่น้อยกว่า 2 ตัว Cell นั้นจะตายเพราะความเหงา (Under Population Rules) ถ้า Cell เพื่อนบ้านของ Cell มีชีวิตที่พิจารณา มี Cell ที่มีชีวิตอยู่เกิน 3 ตัว Cell นั้นจะตายเนื่องจากมีประชากรมากเกินไปในบริเวณดังกล่าว (Overcrownding Rules) ถ้า Cell เพื่อนบ้านของ Cell มีชีวิตที่พิจารณามี Cell ที่มีชีวิต 2 หรือ 3 ตัว Cell นั้นจะยังมีชีวิตอยู่ใน Generation ถัดไป (Next Generation Rules) ถ้า Cell เพื่อนบ้านของ Cell ที่ตายที่พิจาณามี C...

[iOS Dev] Objective-C Style Guide

Image
สิ่งสำคัญเวลาจะเขียน Code ภาษาต่างๆ สิ่งแรกที่ควรอ่านคือเขาเขียน Code ยังไง นอกจากเรื่องความสวยงามแล้ว  Code Convention ที่ดีจะสามารถแก้ไขโดยผู้อื่น Style Guide ที่เขียนใส่ Blog นี้ถูกรวบรวมมาจากที่นี่นะ (แล้วก็มีที่เขียนเพิ่มโดยผมเองนิดหน่อย) บางอย่างก็ไม่ได้หยิบมา อยากอ่านฉบับเต็มก็เชิญได้ที่ต้นฉบับเลยครับ :) https://github.com/NYTimes/objective-c-style-guide https://github.com/github/objective-c-conventions Dot-Notation Syntax Dot-Notation Syntax จะใช้ทุกครั้งที่เข้าถึงหรือเปลี่ยนแปลง Property ต่างๆ ของวัตถุใดๆ ส่วน Bracket Notation จะใช้ในกรณีอื่นๆ โดยมากแล้วจะเป็นการเรียก method ต่างๆ (Class method, Instance method) ตัวอย่าง view . backgroundColor = [ UIColor orangeColor ]; [ UIApplication sharedApplication ]. delegate ; ไม่ควร [ view setBackgroundColor : [ UIColor orangeColor ]]; UIApplication . sharedApplication . delegate ; Pragma mark ใช้ #pragma mark ในการแบ่งกลุ่มของ method ที่ทำหน้าต่างกัน เพื่อให้เกิดความเป็นระเบียบเวลาเราใช้ meth...

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 ถ...

Skill เบื้องต้นของ Programmer ตอนที่ 3: Write Code for another Coder

Image
ผมมีประสบการณ์การเป็นที่ปรึกษา ของรุ่นน้อง เพื่อนๆ หลายๆ คนนะครับ  คุณเคย "ปวดหัว" กับการต้องอ่านโค้ดง่ายๆ ไหมครับ ?  คำตอบรู้ครับ ว่าโค้ดทำงานยังไง แต่โค้ดมัน "ไม่น่าอ่านเอาเสียเลย" จนบางที ถ้าเจอโค้ดที่ซับซ้อนหน่อย ผมต้องเป็นคน "แก้ไข" เพื่อนั่งอ่านเสียเอง เบื้องต้น สิ่งที่ควรทำ ตามหลักของ Readable Code สิ่งนี้เรียกว่า "Aesthetics" โดยในที่นี้จะกล่าวถึงจังหวะการเว้นวรรค การใส่ Indent (soft tabs) ให้ Code ลองดูโค้ดง่ายๆ 2 ภาพ ซ้ายและขวานะครับ อันไหนน่าอ่านกว่ากัน ...  ผมเจออะไรแบบนี้ตั้งแต่น้องปี 1 ยันพี่ปีสูงๆ ...  นี่แค่โปรแกรมง่ายๆ ที่มองแว๊บเดียวก็รู้ว่ามันทำอะ ไรนะครับ นึกภาพโปรแกรมที่ซับซ้อนกว่านี้ สัก 10 เท่าสิ :( เรื่องของ "Aesthetics Coding" ยังมีอีกหลายข้อที่น่าสนใจนะครั บ  เช่น การจัดย่อหน้าให้ตรงกันของ Function ที่มี Argument หลายๆ ตัว (ยาวมากกว่า 1 บรรทัด) นี่เป็นแค่เบื้องต้นเท่านั้น ... Knowledge from Chapter 4: The Art of Readable Code. เราเขียนโค้ดยังไงก็ตามนะครับ ถูก Syntax ยังไง คอมพิวเตอร์ก...

[Intern at Opendream] limejs HTML5 Game Framework

Image
2 วันนี้ผมไม่ได้แตะ iOS เลย เพราะพี่ให้ย้ายมาช่วยงานของ TK Park  ก็เลยมาเขียน Javascript ซึ่งเป็นแค่ภาษาที่ผมเรียนแบบผ่านๆ  แต่ syntax ค่อนข้างจะไม่ต่างกับ C มากนัก ก็เลยปรับตัวตรงนี้ไม่มาก  แต่ปรับตัวตรงการทำงานของ Code พอสมควรเลย งงอยู่หลายชั่วโมง  กว่าจะเข้าใจ และเริ่มแก้ได้ เพิ่ม โค้ด ให้มันทำงานได้ ...  ใช้ Framework ตัวนี้ทำงานครับ  http://www.limejs.com/ ก็สนุกสนานดีนะ .... เป็นประสบการณ์แปลกๆ อีกอย่างนึง  Library อ่านไม่ยากมาก ... และเขียนไม่ยากมาก ถ้ารู้หลักการ ... 

Python Image :: Color Change [Sample]

Image
วันนี้เราจะมาเล่น Python Imaging Library กันนะครับ ในส่วนของโค้ดผมว่าแค่ดู ก็น่าจะเข้าใจนะครับ เพราะ method ใช้งานง่ายพอสมควรเลย ภาพนี้เป็นภาพ Original ที่เราจะใช้กันในวันนี้ครับ ที่นี่คือ Apple Store สาขา Grand Central Terminal เรามาเริ่มจากการเปลี่ยนภาพเป็น Sepia กัน ส่วนของ Sepia เนี่ยผมไม่รู้การคำนวณที่แน่นอนนะครับ เรื่องของค่าที่นำมาใช้ พอดีเจอค่าคงที่ นี้มาจาก Internet น่ะครับ เราก็จะได้ผลลัพธ์ที่เป็นภาพสีแบบนี้ครับ จากนั้นเราจะเปลี่ยนเป็นแบบ Gray-Scale กันบ้างนะครับ วิธีการเปลี่ยนก็คือ ปกติรูปของเราจะอยู่ใน RGB Mode และประกอบไปด้วยแต่ละ Pixel ที่มีค่าสี (Intensity) เป็นลักษณะของแผ่น 3 แผ่นซ้อนกันแบบนี้ครับ จากนั้นการทำ Gray-Scale เนี่ยคือการลดจาก 3 แผ่นให้เหลือเพียงแผ่นเดียว... (ค่าเดียว) ง่ายสุดคือการหาค่าเฉลี่ยของแต่ละ Pixel แล้วยัดใส่ให้เท่ากันทั้ง 3 แผ่น (ที่ต้องยัดใส่ทั้ง 3 แผ่นก็เพราะไม่ว่ายังไง Computer ก็แสดงค่าสีเป็น RGB อยู่ดียังไงล่ะ) ผลลัพธ์ภาพที่ได้ ก็จะเป็นภาพ ขาว-เทา ที่สวยงาม ต่อไปก็เป็นภาพขาว-ดำ ล่ะนะครับ ภาพขาว-ดำ ใช้ Concep...

[Android Dev] รับส่งข้อมูลระหว่าง Activity ด้วย Intent

Image
Blog นี้เป็น Blog ที่เขียนต่อจาก Sample Intent นะครับ ซึ่งเป็นการเปลี่ยนหน้าไปมา หรือที่เรียกว่า Activity ล่ะครับ ซึ่งสามารถศึกษาได้ที่นี่นะครับ Android Dev :: ทำ Apps หลายๆ หน้าด้วย Intent เมื่อคราวที่แล้ว เป็นแค่โปรแกรมง่ายๆ ครับ คือ คลิกปุ่มที่ Activity A ก็เปลี่ยนไป Activity B แต่วันนี้เราจะส่งข้อมูลระหว่าง Activity ด้วย การทำงานของโปรแกรมที่ผมจะเขียนนั้นจะทำงานโดย     - คลิกปุ่มที่ Activity A จะเปลี่ยนไป Activity B     - คลิกปุ่มที่ Activity B จะเปลี่ยนกลับมาที่ Activity A โดยส่ง String คำว่า "Hello World !!" ด้วย     - Activity A รอรับค่าจาก Activity B เมื่อมีการส่งมา ให้นำ String มาแสงบน TextView ส่วนของ UI จะเหมือนกับ Tutorial ที่แล้วเลยนะครับ เราจะลงในส่วนของ Coding อย่างเดียว ^___^ เริ่มจากโค้ดที่ Activity B [SecondView.java]  ก่อนนะครับ [เพราะมันสั้นกว่า :P] โค้ดในส่วนแรกจะไม่มีอะไรมากนะครับ ที่เพิ่มมาก็คือ ประกาศ String ที่เราจะส่งกลับไปเท่านั้น (ค่าที่ส่งจะเป็นอะไรก็ได้นะครับ) จะมาต่างในส่วนนี้ครับ เมื่อคราวท...