I'm a Ruby on Rails / jQuery web developer. Follow me at @sikachu

Archive for the ‘Programming’ Category

Operator Precedence ใน Ruby

Saturday, December 19th, 2009 Posted in Programming, Ruby | Comments

Operator Precedence หรือลำดับสำคัญของตัวดำเนินการนั้น ถือเป็นหลักสำคัญของโปรแกรมเมอร์ ที่จะทำให้สามารถทำการเขียนอัลกอริธึมเพื่อแก้ไขปัญหาต่างๆ ได้ ในทางคณิตศาสตร์นั้น มักมีคนสรุปมันออกมาง่ายๆ ว่า "วงเล็บมาก่อน คูณหารก่อนบวกลบ" ถ้าใครเคยเห็น code ภาษา Ruby นั้น คงจะเคยเห็นว่า Ruby นั้นมีทั้ง operator && และ || เหมือนกับในภาษา C แล้วยังมี and กับ or ที่เพิ่มเข้ามาใน Ruby ซึ่งเป็นสิ่งที่ทำให้โค้ดนั้นดูสวยงามขึ้น อ่านง่ายขึ้นตามหลักของ Ruby ลองดูโค้ดด้านล่างนี้เป็นตัวอย่างครับ irb(main):001:0> dessert = "Cheesecake" => "Cheesecake" irb(main):002:0> drink = "Coffee" => ...

Optimize database query ด้วย :include

Friday, August 7th, 2009 Posted in My Project, Programming, Ruby, Ruby on Rails | Comments

ในการเขียนโปรแกรมบน Ruby on Rails นั้น เรามักที่จะใช้ ActiveRecord ในการทำหน้าที่เป็น ORM ระหว่างตัว Application กับ database ซื่งทำให้การเรียก Record นั้น สามารถทำได้อย่างง่ายดาย เช่น ถ้าผมจะเรียกดู post ทั้งหมดที่มีอยู่ในระบบ ผมแค่สั่ง Post.find(:all) # หรือว่า Post.all ก็ได้ ใน Rails 2.x ซึ่งตรงนี้ ถ้าเราไปดูใน Log file จะพบว่า ActiveRecord นั้น จะใช้คำสั่งค้นหาข้อมูลประมาณนี้ครับ ...

Thin Rolling Restart Patch

Sunday, August 2nd, 2009 Posted in My Project, Programming, Ruby, Ruby on Rails | Comments

I wrote a patch for Thin web server to do a rolling restart (i.e. restart the server one at a time) when I was working for my final thesis, Localmapia. I put my source on Github, and already inform the ...

Object#try ใน Rails 2.3

Sunday, August 2nd, 2009 Posted in My Project, Programming, Ruby, Ruby on Rails | Comments

เคยเจอปัญหาบ้างไหมครับ กับการที่บางครั้ง object ที่เราเรียก method ไปเนี่ย มันกลายเป็น nil ขึ้นมา ทำให้เกิด exception ขึ้นมา >> @user.username NoMethodError: You have a nil object when you didn't expect it! The error occurred while evaluating nil.username from (irb):1 ซึ่งตรงนี้ เพื่อที่จะหลบ exception ในบางครั้งทำให้ Developer ต้องทำการเช็คก่อนว่า object นั้นเป็น nil หรือไม่ เช่น >> (@user ...

Flickr Submit Button CSS Retouch

Friday, July 17th, 2009 Posted in News, Programming | Comments

วันนี้ได้เข้า Flickr หลังจากไม่ได้เข้าไปหลายวัน ไปสังเกตเห็นบางอย่าง ตรงแถวๆ comment box สังเกตเห็นอะไรไหมครับ? นี่คือการ Retouch ปุ่ม Submit ในส่วนของการเพิ่ม comment ครับ .. ซึ่งผมว่าเป็นจุดที่ทำให้เว็บดูสวยขึ้นมาอีกหน่อยเลยทีเดียว เพราะว่าถ้าเทียบกันกับอันเก่า .. ต้องบอกกับทีมงาน Flickr ว่า .. น่าจะทำใหม่ได้ตั้งนานแล้ววว ;)

Ruby และ active_support/whiny_nil

Monday, June 29th, 2009 Posted in My Project, Programming, Ruby, Ruby on Rails | Comments

สำหรับนักพัฒนาส่วนใหญ่ที่เริ่มเขียน Ruby on Rails คาดว่าตอนนี้ในเครื่องของทุกๆ คน น่าจะลง Ruby 1.8 อยู่ เนื่องจากยังคงมี Gem หลายๆ ตัว ที่ยังไม่รองรับ Ruby 1.9 และทำให้เกิดปัญหาทางด้านความเข้ากันได้อยู่บ้าง ฉะนั้นผมเลยอยากพูดถึงหลุมพรางที่ Ruby 1.8 ได้ทิ้งเอาไว้ และทำให้หลายๆ คนนั้นพลาดตกหลุมกันไปบ้างครับ ผมขอสมมุติเอาไว้ว่า ผมได้สร้างระบบ Blog แห่งหนึ่ง โดยที่มี Model สามตัวคือ Post เอาไว้เก็บข้อความ Comment เอาไว้เก็บความคิดเห็น และ User เอาไว้เก็บชื่อผู้ใช้ ที่สามารถแก้ไขข้อความได้ครับ สมมุติว่า User ที่สามารถเข้ามาแก้ไขได้นี้ ...

Squish it!

Sunday, May 17th, 2009 Posted in Programming, Ruby, Ruby on Rails | Comments

ต้องบอกว่า Ruby on Rails นั้นมี helper methods เยอะจริงๆ และบางครั้งถ้าเราไม่ได้เข้าไปดูใน api documentation เราก็จะไม่พบว่ามันมีเมธอดเอาไว้ทำอะไรบ้าง วันนี้ผมเจอ method นึงครับ ซึ่งคิดว่าน่าจะมีประโยชน์ และน่าจะมีใครต้องใช้เมธอดนี้แน่ๆ มีใครบ้างไหมครับ ที่เคยเห็น user ชอบโพสข้อมูลมาเว้นบรรทัดๆๆๆ หลายๆ อัน หรือว่าชอบเคาะ space bar เว้นห่างๆ กัน ทำให้บางครั้งมันดูไม่เรียบร้อย และมันอ่านยาก .. วันนี้ผมมี method มาแนะนำครับ ชื่อว่า #squish ตัวอย่างในการใช้งานก็เป็นอย่างนี้ครับ >> str = %(hello world) => "hello\nworld" >> str.squish => ...

สิ่งที่ไม่ควรทำอย่างยิ่งในการ deploy website

Thursday, April 9th, 2009 Posted in My Idea, Programming | Comments

สิ่งที่ไม่ควรจะทำ แต่ไม่ค่อยเห็นคนใส่ใจเท่าไรคือสิ่งนี้ครับ :) เข้าใจว่ายังมี developer บางท่านยังไม่สนใจเท่าไร กับการที่จะปิดการ display error บนเว็บของตัวเอง ซึ่งโดยปกติแล้วมันจะถูกเปิดโดย default เพื่อให้ developer ทำงานสะดวกขึ้นในการค้นหา error บนเว็บไซต์ของตัวเอง แต่สิ่งที่ควรทำคือ พอเว็บไซต์ของเราออกสู้สาธารณชนแล้ว ต้องปิดมันซะครับ! เหตุผลคือ มันจะทำให้คนที่ต้องการจะเข้ามาแฮกเว็บไซต์ของเราเนี่ย สามารถดูได้หมดเลยว่าโค้ดของเรานั้นอยู่ที่ directory ไหน และบางทีก็จะเห็นเลยว่า table ที่เราใช้เก็บข้อมูลนั้นคืออะไร แล้วที่แย่ไปกว่านั้นคือ ถ้าเราไม่ได้กันโค้ด SQL Injection อีก .. ตายครับตาย เว็บคุณจะโดนแฮกไม่รู้ตัว อยู่ดีๆ ใครก็เข้ามาเป็น admin ก็ไม่รู้ ค้นหาวิธีการไม่แสดง log แต่ให้ไปเก็บไว้ที่ไฟล์ๆ หนึ่งทาง Google ...

Clone กันเข้าไป .. คิดอะไรกันอยู่?

Thursday, April 2nd, 2009 Posted in Garbage, News, Programming | Comments

หลังจากที่ Sanook ปล่อย Noknok ออกมาได้สักระยะหนึ่ง ซึ่งตอนนั้นก็โดนกระแสวิภาควิจารณ์กันไปอย่างแรงจากชาวเน็ต กับการที่เหมือนจะ clone twitter กันมาเต็มๆ ทั้ง interface และอื่นๆ .. ซึ่งสุดท้ายแล้ว Noknok ก็ยังมีคนเล่น อยู่ยั้งยืนยงต่อไป คราวนี้เมืี่อ Sanook ทำแล้ว .. แล้วไฉนคู่แข่งจะไม่ทำบ้างเล่า! วันนี้พอดี @hunt ส่งลิงค์มาเรียบร้อยครับ ชื่อเว็บว่า onair.kapook.com ซึ่งเป็น Microblogging อารมณ์เดียวกับ Twitter กันเลยทีเดียว .. และไม่ต้องบอกเลยว่าเจ้าของนั่นก็คือ kapook.com เจ้าของ subdomain xxx.kapook.com ชื่อดัง !! (หลังจากที่ลองเข้าไปดู ...

Login เข้า server ผ่าน SSH แบบเนียนๆ

Wednesday, April 1st, 2009 Posted in My Project, Programming | Comments

เคยบ้างไหมครับ กับที่ต้องมานั่งคอยใส่รหัสผ่านวันละหลายๆ ครั้ง เวลาที่ต้องการจะเข้าไปทำงานบนเครื่อง Server ผ่านทาง SSH .. ผมละเป็นคนนึงครับที่มักจะมีปัญหาในเรื่องตรงนี้ เพราะว่าบางครั้งต้องล๊อคอินเข้าไปหลายๆ Server ในแต่ละวัน ทำให้พิมพ์รหัสผ่านกันมือหงิกเลยครับ หลังจากที่ได้ลองค้นหาข้อมูล ก็ไปเจอวิธีการอันหนึ่งครับ ที่ใช้วิธีการล๊อกอินเข้าไปโดยการใช้ RSA key pair โดยหลักการของมันก็คือ ให้เราเอา public key ของเราไปใส่ไว้บน server แล้วในตอนที่มันทำการ authenticate นี้ มันก็จะใช้ public key บน server กับ private key ที่เก็บอยู่ในเครื่องของเรา เอามายืนยันกันว่าเป็นตัวเราจริงๆ แทนที่จะต้องใช้รหัสผ่านครับ สำหรับวิธีการทำนั้นก็ง่ายแสนง่าย แต่ต้องเตือนไว้ก่อนนะครับว่าเทคนิคนี้ควรจะทำบนเครื่องคอมพิวเตอร์ของตัวเอง ที่มีการรักษารหัสผ่านเอาไว้ในระดับนึง ...