Just a blog of Web Developer

Ruby และ active_support/whiny_nil

June 29th, 2009 Posted in My Project, Programming | No Comments »

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

ผมขอสมมุติเอาไว้ว่า ผมได้สร้างระบบ Blog แห่งหนึ่ง โดยที่มี Model สามตัวคือ Post เอาไว้เก็บข้อความ Comment เอาไว้เก็บความคิดเห็น และ User เอาไว้เก็บชื่อผู้ใช้ ที่สามารถแก้ไขข้อความได้ครับ

สมมุติว่า User ที่สามารถเข้ามาแก้ไขได้นี้ มี id = 4 ผมก็เลยทำการ hard-coded เอาไว้ในโปรแกรมเลย เป็น filter ว่า

class PostController < ApplicationController
  before_filter :load_user
  before_filter :check_authorization!, :except => [:show, :index]
 
  # ... controller actions
 
  private
 
  def check_authorization!
    render :text => "Unauthorized!", :status => 401 unless @user.id == 4
  end
end

คราวนี้ผมก็ลองรันดู ปรากฎว่าเจอปัญหาว่าถ้าคนที่ไม่ได้เป็นสมาชิกเข้ามาที่บล็อก มันจะเกิด exception ขึ้นมา เพราะผมไปเรียก id method บน nil object ผมก็เลยจัดการ catch exception อย่างนี้ครับ

  def check_authorization!
    render :text => "Unauthorized!", :status => 401 unless (@user.id == 4 rescue false)
  end

โออ คราวนี้โปรแกรมผมหล่อกิ๊งเลย ไม่พบว่าเกิดปัญหาอะไร ผมก็เลยจัดการ deploy ขึ้นไปบนเว็บเสร็จสรรพ สร้าง user ให้เหมือนกับบนเครื่อง Development ทุกประการ และให้ User ที่มี id = 4 สามารถแก้ไขโพสได้เป็นคนเดียวเช่นเคย

แต่ปรากฎว่า การเขียนโปรแกรมของผมนั้นทิ้งช่องโหว่เอาไว้ใหญ่โตเลยครับ เพราะกลายเป็นว่าคนที่ไม่ได้เป็นสมาชิกสามารถแก้ไข และลบข้อความทั้งหมดของผมได้เลย !!

หลังจากการตามหาบักมานานแสนนาน .. ผมก็ขอเข้าเรื่องของ whiny_nil เลยละกันครับ

ในตัว active_support ที่ติดมากับ Ruby on Rails นั้น มีไฟล์อยู่อันหนึ่งชื่อว่า whiny_nil.rb ซึ่งไฟล์นี้เป็นส่วนของ Core Extension ซึ่งทำให้การเรียกใช้เมธอด #id บน object ที่เป็น nil นั้น จะมีการโยน RuntimeError ออกมาบอกว่าเรากำลังทำการเรียกใช้ #id บน nil อยู่

Sikachus-Notebook:rails sikachu$ script/console
Loading development environment (Rails 2.3.2)
>> nil.id
RuntimeError: Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
	from (irb):1
>>

ซึ่งตรงนี้ นักพัฒนาบางคนก็จะใช้วิธีการ rescue RuntimeError ไป เพราะคิดเอาว่าถ้าเผลอไปเรียก #id บน object ที่เป็น nil จริง มันก็ต้องโยน RuntimeError ออกมาบอกเรา ถูกไหมครับ

คำตอบคือ ผิดถนัด ครับ เพราะบน Production environment นั้น เจ้าตัว whiny_nil นั้นจะไม่ถูกเปิดใช้ครับ แล้วผลของการไม่ได้เปิดใช้หรอครับ?

Sikachus-Notebook:~ sikachu$ irb
irb(main):001:0> nil.id
(irb):1: warning: Object#id will be deprecated; use Object#object_id
=> 4

นั่นแหละครับ! การที่เรียกเมธอด #id บน nil นั้น Ruby จะคืนค่าเป็น 4 ครับ เพราะว่า nil นั้นมี id ของตัวมันเองคือ 4 ครับ :)

เพราะฉะนั้นคงเดาออกใช่ไหมครับว่าทำไมคนที่ไม่ได้ล็อกอินทุกคน ถึงสามารถเข้าไปแก้ไขบล็อกของผมได้? ก็เพราะว่า @user.id ของเขา คืนค่าเป็น 4 กันทุกคนเลยครับ ไม่ได้มีการโยน RuntimeError แต่อย่างใด

ปัญหานี้ใช่ว่าไม่มีทางแก้ครับ แต่ผมจะไม่ขอเจาะลึกลงไปแล้วกันครับ เพราะว่าปัญหานี้หายไปแล้วใน Ruby 1.9.1 (object#id deprecated ไปแล้วครับ) ก็ต้องรอให้มันถูกใช้แพร่หลายเท่านั้นล่ะครับ ซึ่งตอนนี้วิธีการแก้ก็คงเป็น

  • เปิดการใช้งาน config.whiny_nil ใน production.rb
  • ใช้ object.try(:id) ที่จะคืนค่ามาเป็น nil หากว่า object เป็น nil
  • เขียนโค้ดใหม่โดยพยายามไม่เช็คจาก #id

หวังว่าโพสนี้จะทำให้หลายคนหายข้องใจได้บ้างนะครับ

ปล. บางท่านคงสงสัยใช้ไหมครับว่าแล้วทำไม nil.id หรือ nil.object_id มันถึง return เป็น 4 … เพราะว่า Ruby ทุกอย่างมันเป็น object ครับ ไม่เว้นแม่กระทั่ง nil! ไม่เชื่อลองดูนี่นะครับ

irb(main):002:0> nil.object_id
=> 4
irb(main):003:0> nil.class
=> NilClass
irb(main):004:0> 100.class
=> Fixnum

ใครจะชอบไม่ชอบผมไม่รู้ แต่ขอเอวังด้วยประกาลฉะนี้ :)

Battery ใหม่กิ๊ง ~

June 29th, 2009 Posted in Apple, My Project | No Comments »

หลังจากที่รอมานานแสนนาน ที่จะเก็บเงินซื้อ Battery ใหม่ ของ Macbook Pro 15” ซึ่งยังงั้ยยังไง ก็ไม่สามารถตัดใจซื้อได้สักที เพราะด้วยราคามหาโหด (6,xxx บาท) .. ทำให้โปรแกรมเมอร์น้อยๆ ได้แต่ทนใช้ battery ก้อนเก่าไป (ซึ่งจริงๆ ก็เป็นของ @lukeinth ซะด้วย – -”)

แต่แล้วคุณเจ้านาย (@trawut) ก็ได้โปรดเมตตา ซื้อแบตก้อนใหม่มาให้เป็นของขวัญ !!

(แต่รู้สึกว่าจะไม่เนียนเลยนะครับของขวัญนี่ … เพราะตอนแรก @hunt บอกว่า @trawut ซื้อมาให้เพราะบีฝากซื้อ จนตอนกลางคืนถึงบอกว่าไม่ได้ซื้อมาฝาก ทำอกสั่นขวัญแขวน กลัวเสียเงินไปใหญ่ -*-)

ไหนๆ ก็ได้แบตก้อนใหม่แล้ว เลยเอามาให้ดูก่อนการ Calibrate คร๊าบบ

before.png

after.png

coco.png

เวลาเห็น Coconut Battery รายงานว่า 100% แล้วรู้สึกดีพิลึก!

ลองเล่นดู ปรากฎว่าได้ระยะเวลาประมาณ 3 ชม. กว่าๆ ซึ่งก็ถือว่าเยอะแล้วนะครับสำหรับเครื่องรุ่นนี้ ก็แปลว่ารับได้ละกัน ๕๕๕๕

ขอบคุณคุง @trawut มากนะขอรับ ๕๕๕๕

Truewifi 2 Mbps

May 17th, 2009 Posted in My Life, News | No Comments »

หลังจากที่ได้ update speed ADSL ไปไม่นาน ก็เลยลองเชื่อมต่อ internet ผ่านทาง truewifi ดู ว่ามันได้สมราคาคุยมั้ยยยย (True ADSL 8 M จะได้ Wifi 2M ครับ)

Picture 1.png

ถือว่าได้ตามราคาคุยนะเนี่ย .. ได้เกือบๆ 2M เลย แต่สงสัยคงเพราะว่าผมเทสวันธรรมดาที่ห้างน่ะครับ คงมีคนเล่นน้อย .. ถ้าเป็นเวลาปกติ สงสัย 1M ยังจะวิ่งไม่ถึงเลย -..-

ไม่รู้ว่า true ให้ผู้ใช้ใช้ wifi ได้เร็วขึ้นนี่ true ทำการเพิ่มความเร็วที่ AP บ้างรึเปล่านะครับ .. เพราะระบบการ login ตอนนี้ ถือว่าใช้ไม่ค่อยได้เลย ช้ามากๆ กว่าจะเข้า portal.trueinternet.co.th ได้สักที -..-

Google Doodle รหัสมอร์ส

May 17th, 2009 Posted in News | No Comments »

รหัสมอร์ส หรือ Morse code เป็นรหัสที่เอาไว้ใช้ในการส่งโทรเลข ซึ่งในวันครบรอบการคิดค้นรหัสมอร์สที่ผ่านมา Google ก็ได้เปลี่ยนโลโก้ของเว็บตัวเองให้เป็นรหัสมอร์ส

Picture 8-1.png

ผมว่าเท่ห์ดีนะ กับไอเดียนี้ :D

Squish it!

May 17th, 2009 Posted in Programming | No Comments »

ต้องบอกว่า Ruby on Rails นั้นมี helper methods เยอะจริงๆ และบางครั้งถ้าเราไม่ได้เข้าไปดูใน api documentation เราก็จะไม่พบว่ามันมีเมธอดเอาไว้ทำอะไรบ้าง

วันนี้ผมเจอ method นึงครับ ซึ่งคิดว่าน่าจะมีประโยชน์ และน่าจะมีใครต้องใช้เมธอดนี้แน่ๆ

มีใครบ้างไหมครับ ที่เคยเห็น user ชอบโพสข้อมูลมาเว้นบรรทัดๆๆๆ หลายๆ อัน หรือว่าชอบเคาะ space bar เว้นห่างๆ กัน ทำให้บางครั้งมันดูไม่เรียบร้อย และมันอ่านยาก .. วันนี้ผมมี method มาแนะนำครับ ชื่อว่า #squish

ตัวอย่างในการใช้งานก็เป็นอย่างนี้ครับ

>> str = %(hello
world)
=> "hello\nworld"
>> str.squish
=> "hello world"
>> str = "the      quick    brown     fox  jumped  over lazy    dog"
=> "the      quick    brown     fox  jumped  over lazy    dog"
>> str.squish
=> "the quick brown fox jumped over lazy dog"
>>

จะเห็นได้ว่ามันเอา space และ new line (\n) ออกด้วย .. แต่ผมคิดว่ามันจะเวิร์คกว่านี้ ถ้ามันยังคง \n เอาไว้ ทำแค่บีบบรรทัดลงมาเท่านั้นครับ :)

True 8 Mbps internet

May 17th, 2009 Posted in Gadgets | No Comments »

พอดีว่าเน็ตที่บ้าน (ที่ไม่ค่อยได้กลับเท่าไร) นั้น ปกตินั้นใช้อินเตอร์เน็ตของ true อยู่แล้ว และด้วยราคาที่ต้องจ่ายตอนแรก (เดือนละ 1,150+) ทำให้หลังจากที่ลองคิดหน้าคิดหลังแล้ว การอัพ speed internet ให้เป็น 1,199+ นั้น ดูคุ้มกว่า

ต่อจากนั้น ก็เลยติดต่อกับทาง true ว่าให้เช็คว่าสายนั้นสามารถอัพ speed ได้หรือไม่ เจ้าหน้าที่ก็หายไปเป็นสัปดาห์เลยครับ ผมก็เลยลองเช็คทางเว็บแล้ว ปรากฎว่ามันขึ้นระยะทางของผมประมาณ 1400 เมตร .. ซึ่งเป็นไปไม่ได้เลยกับการอัพ speed นี้

ซึ่งผมลองเข้าไปดูค่า SNR ก็พบว่ามันเป็นอย่างนี้ครับ

Picture 3.png

แต่แล้วเจ้าหน้าที่ก็โทรกลับมาหลังจากนั้น ว่าเน็ตบ้านผมสามารถอัพสปีดได้! อ่าว เวรกรรม – -! แล้วทำไมมันถึงอัพได้ ทั้งๆ ที่ไกลขนาดนั้น ผมก็เลยลองไปเช็คดู ปรากฎว่ามันเป็นอย่างนี้:

Picture 5.png

อุ .. แปลว่าเขาย้าย node ของผมให้มาใกล้ขึ้นแล้ววว ขอบคุณมากค้าฟ -/|\-

หลังจากนั้น ผมก็เลยจัดการเปลี่ยนแพกเกจอินเตอร์เน็ตบนเว็บเป็น 8 Mbps ..

changespeed.png

รอประมาณสองสามวัน กลับบ้านไปดูก็พบว่ามันเป็นอย่างนี้แว้ววว

8m.png

คราวนี้ก็เลยลอง test speed internet ดู ก็พบว่าได้ประมาณเกือบๆ 8 Mbps ก็ถือว่าโอเคครับ (7 ~ 7.5) .. พอรับได้ แล้วค่า SNR ก็ไม่ตกมากจนเกินไป ถือว่าโอเชเลยครับ

ถือว่าเป็นอีกก้าวหนึ่งที่ใช้ได้เลยครับ กับการที่เปิดโอกาสให้ผู้ใช้สามารถใช้ความเร็วที่มากขึ้นในราคาที่น้อยลงได้ แต่นี่ก็ถือว่าสูงสุดแล้วกับความสามารถในการให้บริการ ADSL ของ true ผ่านทางสายโทรศัพท์ระบบเดิมๆ อย่างนี้ เพราะถ้าจะให้บริการในความเร็วมากกว่านี้ true คงจะต้องลงทุนเพิ่มอีกมากทีเดียวในการเพิ่ม DSLAM ให้อยู่ใกล้ผู้ใช้มากขึ้น (ไม่น่าเกิน 500m ต่อบ้านครับ :) )

ว่าแต่ .. True รองรับ ADSL2+ ตั้งแต่เมื่อไรเนี่ย .. แอบเปลี่ยนจนผู้ใช้ไม่รู้เลย :D

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

April 9th, 2009 Posted in My Idea, Programming | 1 Comment »

สิ่งที่ไม่ควรจะทำ แต่ไม่ค่อยเห็นคนใส่ใจเท่าไรคือสิ่งนี้ครับ :)

rdgoth.png

เข้าใจว่ายังมี developer บางท่านยังไม่สนใจเท่าไร กับการที่จะปิดการ display error บนเว็บของตัวเอง ซึ่งโดยปกติแล้วมันจะถูกเปิดโดย default เพื่อให้ developer ทำงานสะดวกขึ้นในการค้นหา error บนเว็บไซต์ของตัวเอง

แต่สิ่งที่ควรทำคือ พอเว็บไซต์ของเราออกสู้สาธารณชนแล้ว ต้องปิดมันซะครับ!

เหตุผลคือ มันจะทำให้คนที่ต้องการจะเข้ามาแฮกเว็บไซต์ของเราเนี่ย สามารถดูได้หมดเลยว่าโค้ดของเรานั้นอยู่ที่ directory ไหน และบางทีก็จะเห็นเลยว่า table ที่เราใช้เก็บข้อมูลนั้นคืออะไร

แล้วที่แย่ไปกว่านั้นคือ ถ้าเราไม่ได้กันโค้ด SQL Injection อีก .. ตายครับตาย เว็บคุณจะโดนแฮกไม่รู้ตัว อยู่ดีๆ ใครก็เข้ามาเป็น admin ก็ไม่รู้

ค้นหาวิธีการไม่แสดง log แต่ให้ไปเก็บไว้ที่ไฟล์ๆ หนึ่งทาง Google เอาดูนะครับ :D แต่ว่าอย่าลืมว่าตำแหน่งที่จะเก็บ log file ต้องอยู่นอก htdocs ด้วยนะครับ ไม่เช่นนั้นก็อาจจะเจอปัญหาคนมาเปิดดูได้อยู่ดี :D

อย่าลืมครับ ไม่แสดง log และเก็บ log ในที่ปลอดภัย :D

เมื่อพนักงานต้อนรับบนเครื่องร้องแร๊พ!

April 2nd, 2009 Posted in Uncategorized | No Comments »

นั่งเครื่องบินมาก็หลายรอบ ไม่เคยเจออย่างนี้มาก่อนเลยครับ .. พนักงานของ Southwest Airline แจ้งข้อมูลของเที่ยวบินโดยใช้วิธีการแร๊ป ผมว่ามันทำให้การประกาศดูไม่น่าเบื่อ + สนุกดีนะครับ ;)

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

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

หลังจากที่ Sanook ปล่อย Noknok ออกมาได้สักระยะหนึ่ง ซึ่งตอนนั้นก็โดนกระแสวิภาควิจารณ์กันไปอย่างแรงจากชาวเน็ต กับการที่เหมือนจะ clone twitter กันมาเต็มๆ ทั้ง interface และอื่นๆ .. ซึ่งสุดท้ายแล้ว Noknok ก็ยังมีคนเล่น อยู่ยั้งยืนยงต่อไป

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

onair

(หลังจากที่ลองเข้าไปดู ก็พบว่าท่าน @sugree ไปจัดการโพสข้อความเอาไว้เรียบร้อยแล้ว .. สุดยอด ๕๕๕)

Kapook OnAir เป็นเว็บที่เขาเรียกตัวเองว่าเป็นสถานีออนไลน์ส่วนตัว ให้เราจัดรายการของเราเองง่ายๆ ผ่านอินเตอร์เน็ตและโทรศัพท์มือถือ .. ความคิดดีครับ ไอเดียดี แต่สุดท้ายแล้วมันก็ไปซ้ำกับ Twitter อยู่ดี เพราะมันก็คือการโพสเรื่อง “ส่วนตัว” ของเรา ถึงแม้ว่าจะไม่บอกโต้งๆ ว่า “ให้โพสว่าเราทำอะไร” แต่สุดท้ายคำว่า “ให้ออกอากาศความเป็นคุณ” มันก็เหมือนกันละครับ ..

ผมเลยกลับมาคิดว่า สุดท้ายแล้วเว็บไซต์ที่เป็นอันดับต้นๆ ของเมืองไทย ก็ต้องใช้ไอเดียของเว็บอื่นๆ มาโคลนเป็นผลิตภัณฑ์ของตนเองรือครับ? สุดท้ายแล้ว พอ Twitter ดัง Microblogging ดัง ก็เลยทำ Microblogging กันยกใหญ่ ..

ผมกำลังมองในแง่ของ information redundancy ครับ .. อย่างเช่น update ของ @sugree เนี่ย จะเห็นว่ามันจะขึ้นทั้งบน Noknok, OnAir และ Twitter ซึ่งสุดท้ายข้อมูลมันก็จะซ้ำๆ กัน .. ซึ่งวิธีการก็คือ @sugree จะโพสข้อมูลลงทั้งสามเว็บพร้อมๆ กัน ผ่านทาง API .. ซึ่งข้อมูลที่ขึ้นไปทั้งสามเว็บนั้น ถามว่ามันให้ประโยชน์กับผู้ใช้งานสามเท่าไหม? เปล่าเลยครับ .. แค่รู้ว่า @sugree at rama 3 ครั้งเดียวมันก็เกินพอ มันไม่มีความจำเป็นที่จะต้องมีเว็บไซต์ Microblogging หลายๆ อันแต่อย่างใด

sugree-1

สำหรับผมแล้ว ผมคิดว่าสิ่งที่ผมจะทำในกรณีที่ผมเป็น Sanook หรือ Kapook .. คือการที่จะสร้าง application ให้กับ Twitter ครับ! มันไม่มีความจำเป็นที่จะต้อง clone website ประเภทนี้มาอีก และผมคิดว่าถ้าคุณเอาเวลาของการ develop เว็บไซต์ประเภทนี้ โดยให้ขึ้นอยู่กับทาง Twitter API ผมว่ามันจะมีประโยชน์มากกว่าครับ แทนที่จะมา clone กัน แล้วพยายามดึงคนใช้ให้เข้ามาใช้ของตัวเอง

อย่าง Noknok ผมไม่รู้เหมือนกันครับว่าจะทำยังไง .. แต่อย่าง OnAir ผมคิดว่าถ้าจะทำเป็นคลับอย่างนี้ ผมให้ผู้ใช้โพสข้อมูลที่ Twitter นั่นแหละครับ แล้วทาง OnAir ก็ไปทำการดึงข้อมูลจาก Twitter มาแสดง .. จับ #hashtag และเอามา group .. เพราะว่า Twitter ก็มีข้อมูลตรงนั้นอยู่แล้ว ถ้าทาง OnAir คิดว่า เออ เราน่าจะให้มันมาเป้น group กัน ก็แค่จับ #hashtag มาก็จบครับ ไม่ต้องมาเสียเวลา develop และติดตั้ง .. มีเวลาไปคิดอะไรใหม่ๆ อีกเยอะเลย

ในต่างประเทศมันผ่านมานานแล้วนะครับ กับการที่เว็บไซต์ใหม่เปิดฟีเจอร์เหมือนเป๊ะ พยายามเปิดขึ้นมาเพื่อดึงลูกค้าเก่าๆ จากเว็บอื่นๆ .. เพราะพวกเขาเหล่านั้นคิดในเชิงที่ว่า เขาจะเปิด product ที่ทำให้ผู้ใช้ product นั้นๆ หันมาใช้ของเขาเหมือนกันครับ ไม่ใช่เปิด product ที่จะมาแย่งลูกค้า มาเตะตัดขากัน ให้เว็บไซต์คนอื่นนั้นพังลงไป .. มันเหมือนกับความคิดที่ว่า มึงก็ win กูก็ win น่ะครับ .. ไม่ใช่ความคิดของบางบริษัทที่ มึงต้อง lose กูต้อง win ..

นั่นคือเหตุผลที่เรายังไม่ค่อยเห็น API สำหรับเว็บไซต์ต่างๆ ในเมืองไทย เพราะว่าเรายังคิดที่จะกั้กกันอยู่ .. เราไม่มีความคิดที่ว่า “เห้ย .. เออ กุว่าเว็บนี้มันขาดตรงนี้ไปว่ะ .. กุทำเว็บใหม่เพื่อเพิ่มฟีเจอร์ให้กับมันดีกว่า” .. แต่เรากลับมีความคิดที่ว่า “เห้ย .. เว็บนี้มันห่วยว่ะ เปิดเว็บใหม่แข่งกับมันไปเลยดีกว่า” ซะอย่างนั้น ..

ผมว่าเหล่านักพัฒนาควรจะเริ่มเปลี่ยนความคิดกันได้แล้วล่ะครับ .. เพราะสุดท้ายแล้ว ผู้ใช้อินเตอร์เน็ตมันก็ไม่เติบโตทันจำนวนของเว็บไซต์หรอกครับ เราควรที่จะมาอยู่แบบถ้อยทีถ้อยอาศัยกัน เปิด API ให้คนอื่นเขามาใช้ และพยายามที่จะ build upon .. ไม่ใช้สร้างเว็บมาแข่งกันครับ :)

Developer ขาสั้น

April 1st, 2009 Posted in Garbage | 1 Comment »

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

เมื่อหลายเดือนก่อน (บล็อกนี้ดองเอาไว้นานครับ) ผมได้ไปเจอ entry หนึ่งของบล็อกเพื่อนผมที่ชื่อว่า มารยาททางสังคม ซึ่งมันช่างโดนกับตัวผมเสียนี่กระไร แต่ผมกลับยังไม่มีเวลาเขียนถึงมัน

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

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

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

มีบางบริษัทที่ผมเคยได้ยินมา .. เป็นบริษัท web developer ที่คนที่เป็น developer ไม่ได้เป็นคนที่ออกไปพบลูกค้าเองครับ ก็คือเจอกันเองอยู่ในบริษัทเนี่ยแหละ ปรากฎว่า .. เขาต้องให้พนักงานทุกคนใส่เสื้อเชิ้ต กางเกงขายาวมาทำงานทุกวัน เพราะว่าเป็นกฎของบริษัท .. ผมว่ามันเป็นกฎที่ไร้สาระมากน่ะครับ ผมว่าให้พนักงานแต่งตัวกันตามสบาย และให้เขามีจิตใจจดจ่ออยู่กับงาน จะทำให้ผลงานเยอะขึ้นซะกว่า .. แล้วอีกอย่าง พนักงานจะได้พักผ่อนเยอะๆ ไม่ต้องมาคอยนั่งรีดเสื้อเตรียมไปทำงาน :P

เพราะฉะนั้นผมอยากเสนอให้คนที่เป็นเจ้าของบริษัทลองคิดๆ ดูครับ ระหว่างการที่ให้ทุกคนที่ไม่ต้องไปติดต่อกับลูกค้าแต่งตัวยูนิฟอร์มเป็นทางการ แล้วทุกอย่างในบริษัทก็ดูเป็นทางการหมด ตึงเครียด .. กับให้พนักงานแต่งตัวสบายๆ ทุกคนอยู่กันแบบพี่และน้อง ถ้อยทีถ้อยอาศัยกัน .. คิดว่าแบบไหน productivity จะดีกว่ากันครับ? :)

ปล. วันนั้นไปสีลมตอนสายๆ แต่งตัวเสื้อยืดกางเกงขาสั้นไปเดิน รู้สึกแปลกประหลาดยังไงไม่รู้ครับ คนแถวนั้นเขาเสื้อเชิต-กางเกงขายาวกันหมดเลย สงสัยผมคงจะไม่ได้ทำงานแถวนั้นแน่ๆ :D