Tag Archives: Rails

สรุป The Recipe for the World’s Largest Rails Monolith

เค้าว่าระบบเค้าเป็น Rails app ที่ใหญ่สุดในโลก มาเล่าเรื่องการ scale ให้ฟังอย่างสนุกสนาน
– เขียน auto scaling
– เขียน deploy tool ใหม่
– เขียน activerecord adapter สำหรับ connect multiple databases
– เขียน tool สำหรับเอา spec ไปรันบน aws spot instance
– เขียน database cleaner ใหม่สำหรับ clean เฉพาะ table ที่ถูกแตะตอน test
– เขียน database migration tool ใหม่
– เขียน component framework ใหม่
– เริ่มเขียนปี 2007 ตอน rails 1.x, upgrade มาเรื่อยๆจนตอนนี้ 4.1 แล้ว upgrade โดยการทำ shadow server เปรียบเทียบ output ของ version เก่าและใหม่

Advertisements

ตัวอย่าง source code โปรเจ็ค Rails ที่น่าสนใจ

Ben Orenstein พนักงาน thoughtbot ที่เคยพูดเกี่ยวกับ refactoring ที่งานต่างๆ หลายครั้ง ร่วมมือกับ Chris Hunt พนักงาน Github เขียน web application ที่ชื่อว่า Trailmix ขึ้นมาแทนบริการที่เค้าชื่นชอบที่ชื่อว่า OhLife ซึ่งได้ปิดตัวลงไป

เค้าได้เปิด source เจ้า Trailmix นี้ด้วย จากที่ดูคร่าวๆ ผมว่ามันเป็นโปรเจ็คตัวอย่างที่ดีมากสำหรับ Rails application ทั้งเรื่อง design, testing และที่สำคัญมันเป็น application ที่มีผู้ใช้งานจริงและเก็บเงินจริง ซึ่งปกติจะไม่มีใครยอมเปิด source code กัน ในส่วนท้ายของ Readme ยังระบุถึง practice และ guideline ต่างๆ สำหรับโปรเจ็คโดย link มาจาก guideline ของ thoughtbot ด้วย

ใครที่อยากดูตัวอย่างว่าจะเขียน Rails app ดีๆ ต้องทำยังไง โปรเจ็คนี้น่าจะเป็นโปรเจ็คที่นำไปศึกษาที่ดีเลยครับ ณ เวลาที่ผมเขียน blog นี้อยู่ source code ของเค้าได้คะแนนเต็ม 4.0 ที่ codeclimate

2 คนนี้เค้าเขียนเจ้า Trailmix นี้ขึ้นมาในกิจกรรม codecation ซึ่ง 2 คนได้ ไปอยู่ในบ้านตามสถานที่พักผ่อนต่างๆ เพื่อเขียน code ร่วมกัน ซึ่ง Ben พูดถึงกิจกรรมนี้ใน keynote ของเค้าที่ Nickel City Ruby Conf ส่วน Chris ได้ทำ github page สำหรับกิจกรรมของเค้าด้วย

สอน TDD, Rails ผ่าน Remote Pair Programming

ผมจำไม่ได้แล้วว่าผมแปะประกาศรับคนที่สนใจ TDD, Ruby, Rails มา pair ด้วยกันไว้ที่แถบด้านขวาของบล็อกและใน profile ของผมตั้งแต่เมื่อไหร่ น่าจะซักครึ่งปีได้ละมั้ง ตลอดเวลาที่ผ่านมาไม่เคยมีใครติดต่อมาเลยจนกระทั่งเมื่อ 3 อาทิตย์ก่อน มีผู้ขยันและกล้าหาญติดต่อมาคนแรก น้องวินปี 1 ลาดกระบังฯ ติดต่อมาว่าอยากจะศึกษา TDD เรานัดตอนหัวค่ำของวันนึงใช้ Google Hangout คุยกัน

ก่อนหน้านี้เคย remote pair ที่ไม่ใช่ตอนทำงานอยู่บ้างกับพี่รูฟ แต่ครั้งนี้จะเป็นครั้งแรกที่จะ remote pair กับคนที่ไม่เคยเขียน TDD มาเลย ช่วงนั้นเห็นพี่รูฟและหลายๆ คนเล่นโจทย์ Fizzbuzz กัน ก็เลยเอาโจทย์นี้แหละ

วันนั้นเราใช้ tmux/vim กัน โดยน้อง ssh เข้ามาที่เครื่องผม นี่คือโค้ดที่ได้จากวันนั้น

Continue reading

สไตล์ของ parallel programming ในปัจจุบัน

ชี้แจง: จากคำทักท้วงของหลายๆ ท่าน พบว่าจริงๆ แล้ว blog นี้ควรจะชื่อว่า concurrent programming ไม่ใช่ parallel programming อ้างอิงจากคำศัพท์ที่เค้านิยมใช้กันครับ ขออภัยที่ให้ข้อมูลที่ผิดมา ณ​ ที่นี้ด้วยครับ

เมื่ออยู่ในยุคที่การพัฒนาความเร็วของฮาร์แวร์คอมพิวเตอร์เป็นไปด้วยการเพิ่ม core ของ CPU การเขียนโปรแกรมแบบ single thread ก็มีความสามารถไม่เพียงพอต่อการใช้ทรัพยากรของเครื่องให้คุ้มค่าอีกต่อไป เพราะโปรแกรมที่เขียนนั้นจะสามารถใช้งาน CPU ได้เพียงแค่ core เดียว วิธีการเขียนโปรแกรมที่ทำให้สามารถประมวลผลมากกว่า 1 สิ่งต่อหนึ่งช่วงเวลา เพื่อจะได้กระจายงานไปให้แต่ละ core ประมวลผลได้พร้อมๆ กัน เป็นแขนงหนึ่งของ การเขียนโปรแกรมแบบขนาน (parallel programming)

การเขียนโปรแกรมแบบขนานแบบหนึ่งที่เป็นที่นิยมที่สุดในหลายๆ ปีที่ผ่านมา คือ การเขียนโปรแกรมแบบ multi-threading คือการสร้าง thread ขึ้นมาเพื่อทำการประมวลผลแยกจากโปรแกรมหลัก แต่ปัญหาของการเขียนโปรแกรมแบบ multi-threading คือ เป็นการเขียนโปรแกรมที่ต้องการความชำนาญสูง เพราะโปรแกรมอาจจะเกิด race condition หรือ dead lock ได้ง่ายหากเขียนอย่างไม่รอบคอบเพียงพอ ซึ่งส่งผลให้เกิดบั๊กที่หาสาเหตุได้ยาก ทำให้การพัฒนาโปรแกรมเป็นไปได้ช้าและอาจเกิดความผิดพลาดสูง การเขียนโปรแกรมในสไตล์อื่นๆ ที่พยายามทำให้เขียนโปรแกรมแบบขนานได้ง่ายขึ้นจึงได้รับความนิยมมากขึ้นตามลำดับ

Continue reading

โฆษณางาน RedDotRubyConf 2013

เนื่องด้วยรู้จักกับ Winston คนจัดงานเป็นการส่วนตัว และความอยากให้มีงานนี้ต่อๆ ไปเรื่อยๆ ขอเขียน blog ช่วยประชาสัมพันธ์หน่อยละกัน

อันนี้เป็นเว็บไซต์ของงานครับ RedDotRubyConf 2013

จริงๆ แล้วตัวงานก็มีความน่าสนใจในตัวมันเองอยู่ เนื่องด้วยมันเป็นงาน Ruby conference ที่ใกล้ไทยที่สุด รวมค่าตั๋วเครื่องบิน ที่พัก อาหาร การเดินทาง และตั๋วเข้างาน สามารถอยู่ได้ในงบ 15,000 บาท ส่วนใครจะถือโอกาสมาเที่ยวสิงคโปร์ด้วยก็ไม่ว่ากัน

งบระดับนี้หลายๆ คนอาจจะมองว่าค่อนข้างแพง สำหรับงาน 2 วัน แต่ช้าก่อนลองมาดูรายชื่อคนพูดกันครับ

Speaker ของงานปีนี้ผมถือว่าโหดมากๆ ครับ ลองมาไล่ดูรายคน

– Jim Weirich คนสร้าง rake ซึ่งเป็น build tool ที่เป็นมาตรฐานของ Ruby อยู่ในปัจจุบัน
– Josè Valim อยู่ใน top 5 ของ all-time contribution ของ Rails เป็นคนเขียน Devise gem สำหรับช่วงเรื่องการ authentication บน web ที่สะดวกมาก และเป็นคนเขียนหนังสือ Crafting Rails Applications
– Aaron Patterson นี่ก็ top 5 ของ all-time contribution อีกคน และเป็นคนเดียวในโลกที่เป็นทั้ง Rails core และ Ruby core ส่วนตัวผมชอบคนนี้เป็นพิเศษ ตามดูเค้าพูดอยู่ตลอดตามงานต่างๆ และชอบวิดีโอที่ Peepcode ไปจับเค้ามาน่ังเขียนโปรแกรมให้ดู เป็นคนที่มีอารมณ์ขันดีมาก
– Steve Klabnik 2011 Ruby Hero Award และคนเขียน drapper
– Akira Matsuda Ruby core และคนพูดเรื่อง Ruby 2.0 ที่งาน RubyConf 2012
– และ Prem Sichanugrist ความภาคภูมิใจของคนไทยเป็น Rails’s committer ทำงานอยู่ thoughbot ที่เป็นบริษัทที่เขียน gem ที่คน community Ruby ใช้กันอยู่มากมาย

จะเห็นได้ว่าได้คนเก่งๆ ใน Ruby community มาเยอะจริงๆ

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

ผมเคยเขียน blog ถึงงานเมื่อปีที่แล้วไว้ ใครสงสัยว่าบรรยากาศเป็นอย่างไร ลองไปอ่านกันดูได้ครับ

หากมีคำถามข้อสงสัยอะไรเกี่ยวกับงาน และการมางานที่สิงคโปร์ ถามผมมาได้นะครับทุกช่องทาง

และใครจะมาบอกด้วยครับ เดี๋ยวนัดเจอกันๆ 🙂

มืออาชีพ 2

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

เป็นประโยคที่ฟังแล้วชอบมาก จากตอนท้ายของ presentation เรื่อง What Killed Smalltalk Could Kill Ruby, Too ของ Robert Martin ในงาน RailsConf 09

ปล. 1 ที่ “2” เพราะว่าเคย เขียน ถึงมืออาชีพไปแล้วรอบนึง
ปล. 2 ขอบคุณพี่รูฟที่แชร์ link มาครับ

เริ่มต้นกับ Ruby และ Rails ยังไงดี

Blog นี้ผมเข้าเนื้อหาเลยนะครับ ใครอยากอ่านที่ ผมเกริ่น ตามไปอ่านกันได้

Blog นี้เหมาะสำหรับคนที่พร้อมหรือพยายามศึกษาด้วยเอกสารภาษาอังกฤษนะครับ มันเป็นวิธีที่ผมใช้ ใครไม่ค่อยถนัด ลองพยายามหน่อยนะครับ ภาษาอังกฤษมันจะเป็นสำหรับสาขาเราจริงๆ

เริ่มต้นที่ตัวติดตั้ง Ruby ครับ ผมแนะนำ RVM ถ้าใช้ตัวนี้คุณจะติดตั้ง Ruby ได้ง่ายๆ จะเปลี่ยน Ruby version ได้ง่ายๆ เปลี่ยนไปใช้ Ruby บน VM อื่นๆ เช่น JRuby ก็ง่ายเช่นกัน แถมสามารถสร้าง gemset ต่างๆ กันต่อโปรเจ็คได้ด้วย

จากนั้นก็ไปทำความรู้จักกับ basic Ruby จากสถานที่ต่างๆ ตามอัตถยาศัยครับ อันนี้ไม่มี recommend แต่อย่าลืมทำความรู้จักกับ irb เพื่อนยากไว้ด้วย

สิ่งที่ต้องรู้จักต่อมาคือ gem มันคือ library package manager ที่กลายเป็นมาตรฐานของ Ruby ไปแล้ว หนึ่งในความสนุกของ Ruby อยู่ตรงนี้หละครับ เพราะ ณ วันนี้มี gem ให้เล่นเยอะเหลือเกิน ถ้าติดตามข่าวดีๆ ทำความรู้จักกับเหล่า gem ไว้ จะทำให้เราประหยัดเวลาในการทำอะไร ด้วยการไปใช้ของที่คนอื่นทำไว้ให้แล้ว ไปได้เยอะมาก เช่น ทำหน้า CRUD สำหรับ Admin ได้อย่างรวดเร็วด้วย Active Admin หรือระบบ user management พื้นฐานด้วย Devise และอื่นๆอีกมากมาย

มาถึง​ Rails กันครับ มันก็อยู่ในรูป gemๆ หนึ่งเท่านั้นแหละ ก็ install มันเข้าไป เอกสารพื้นฐานของตัว Rails ผมก็ไม่มีอันไหนแนะนำเป็นพิเศษเหมือนกัน

โดยพื้นฐานก็ 2 ลิงค์นี้ น่าจะพอครับ http://ruby.railstutorial.org/ กับ http://guides.rubyonrails.org/index.html

แต่ผมมี screencast แนะนำอยู่อันนึง The Intro to Rails Screencast I Wish I Had

พอเล่นกับ Rails ซักพัก ก็คงอยาก deploy ขึ้นบน server จริง อันนี้แนะนำ Heroku ครับ สำหรับผู้เริ่มต้น ฟรี ครับ แต่จะจำกันให้แค่ 1 dyno ต่อประมาณหนึ่งเดือน หมายความว่าเราจะรับได้แค่ไม่กี่ concurrent user และห้ามมี background job ครับ

อีกยี่ห้อนึงที่ดังๆ คือ Engine Yard แต่ผมไม่เคยใช้เหมือนกันคิดว่าคงไม่ต่างกันมากมั้ง

ถ้าเราเลือกใช้ Heroku สิ่งที่ต้องเตรียมตัวคือ มันบังคับให้เราใช้ PostgreSQL เป็น database ครับ เพราะฉะนั้นตอนเริ่มเล่น Rails ใครไม่อยากเสียเวลาก็เริ่มที่ Postges ซะเลย

หรือใครจะอยากไม่อยากใช้ SQL ก็ไม่ว่ากันครับ แต่ไม่แน่ใจเหมือนกันว่า Heroku มี add-ons ของพวก NoSQL ให้เล่นฟรีๆ แค่ไหน แต่ถ้าไม่ใช้ NoSQL ก็จะไม่ได้เล่นกับ ActiveRecord ที่ถือเป็นของขึ้นชื่อของ Rails พอควร

พอเล่นไปได้ซักพัก ใครที่สนใจเรื่อง test เหมือนผม แนะนำ เล่มนี้ครับ The RSpec Book 

RSpec คือ ชื่อ test framework ยี่ห้อนึง ประมาณ xUnit แหละครับ แต่ส่วนตัวผมชอบมาก เล่มนี้ไม่ได้สอน RSpec อย่างเดียว แต่สอนถึง TDD และวิธีการพัฒนาแบบ Outside-in ด้วย และพอเป็น outside-in แน่นอนต้องพูดถึง Cucumber ด้วย

ปัญหาอย่างนึงที่ผมเจอตอนไต่ learning curve ของ Rails มาคือ document มันไม่ค่อยน่าพอใจเท่าไหร่ มันก็มีเยอะพอสมควรแต่รู้สึกไม่พอใจยังไงไม่รู้

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

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

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

ผมติดตามๆ สิ่งต่างๆ เหล่านี้ http://railscasts.com/, http://rubyshow.com/, http://ruby5.envylabs.com/, http://www.rubyinside.com/, http://www.planetrubyonrails.com/ ที่มีการอัพเดตอยู่ทุกวัน, ทุกอาทิตย์ๆ ผม follow twitter account ของคนเขียนหนังสือ และคนเขียน library ต่างๆ และผลที่ผ่านมารู้สึกเป็นไปได้ด้วยดีครับ เริ่มรู้อะไรขึ้นเรื่อยๆ

สำหรับเบื้องต้น ก็คงประมาณนี้หละครับ ใครมีปัญหาอะไรก็ถามมาได้ ทางไหนก็ได้ตามสะดวกครับ

ขอให้มีความสุขครับ 🙂