เข้าใจกับ jQuery Ajax Cross Domain

หลังจากที่ผมใช้ jQuery เป็น Javascript Framework หลักมาตลอดตอนนี้ ผมพึงได้ทำอะไรใหม่ๆ มากกว่าที่ผมทำอยู่เป็นประจำเช่น การทำ Web Service ที่ Javascript จะต้องเป็นคนเรียก วันนี้ผมก็พึุงได้รู้ว่าจริงๆแล้ว jQuery Ajax ไม่ได้โหลด Cross Domain ได้ทุก function หลังจากลอง Search ดูก็พึุงรู้ว่าจริงๆแล้วตอนนี้มีแค่

  • getJSON
  • getScript
  • $.ajax

เท่านั้นที่ทำได้ โดย $.ajax ก็คือการ setup ให้ datatype เป็น JSONP  หรือไม่ก็ Script เท่านั้นถึงทำได้ ดังนั้นเวลาเรียกให้ควร check เรื่องพวกนี้เป็นพิเศษ เพราะการทำภายใต้ domain เดียวกันนั้น คุณสามารถใช้พวก $.get , $.post ได้ตามสะดวก แต่พอจะทำ cross domain แล้วนั้นกลับทำไม่ได้ ดังนั้น ถ้าคิดจะทำ Web Service ที่ Javascript สามารถเรียกได้ ควรทดสอบด้วย getJSON หรือ getScript เท่านั้นครับ

ส่วนถ้าใช้กับพวก Server Side Script จะมีวิธีที่เรียกว่า Proxy ซึ่งทำให้สะดวกในการทำงาน ซึ่งเราสามารถใช้ได้ทุก Ajax เช่น $.get $.post ก็ใช้ได้หมด โดยมีตัวอย่างที่ทำเข้าใจอย่างมากของฝรั่งเขา ดูได้ที่นี้เลยครับ
http://jquery-howto.blogspot.com/2009/04/cross-domain-ajax-querying-with-jquery.html

ปล. สำหรับลิงค์ที่้ให้ไป อ่าน comment ด้วยจะได้เห็นทางเลือกที่เจ๋งๆอีกนิดหน่อย

Junior Webmaster Camp สอน WordPress เบื้องต้นฟรี ! สำหรับ ม.ปลายเท่านั้น

เนื่องจากผมเป็นเด็ก YWC แล้ววันนี้เลยเอาข่าวงาน Junior Webmaster Camp 2009 ค่ายนี้รับ 40 คน โดยผู้สมัครจะต้องเป็นเด็ก ม.ปลาย ตั้งแต่ขึ้นชั้น ม 4 จนกระทั่งจบ ม.6 เท่านั้น โดยครั้งนี้อบรมที่มหาวิทยาลัยจันทรเกษม ถ้าสนใจแล้วสมัครได้เลยครับ หมดเขต 28 เมษายน พ.ศ. 2552 นี้นะครับ

Junior Webmaster Camp ค่ายสอน WordPress เบื้องต้นสำหรับเ็ด็ก ม.ปลาย

แล้วเจอกันที่ค่าย Junior Webmaster Camp นะครับ :D

การขึ้นบรรทัดใหม่ของไฟล์ด้วย Ruby บน Windows

วันนี้ด้วยการจะทำการจัดการกับ Textfile แต่ก็ติดปัญหาเล็กน้อยว่า ทำไมใช้ myfile.puts แล้วไม่มีการขึ้นบรรทัดใหม่ให้บน Windows ก็งงไปพักใหญ่ ใช้ print หรือ write ก็แล้วโดยใส่ n แล้วก็ไม่ติด จนกระทั่งลองทำไฟล์ปกติขึ้นมาอันหนึ่งแล้ว ลองเอาไปเปิดดูใน Ruby ก็เห็นว่าเขาเขียนด้วย rn โดย n จริงๆคือการขึ้นบรรทัดใหม่ ส่วน r ก็คือ carriage return ซึ่งเป็นตัวอักษรตัวหนึ่งใน ASCII ซึ่งใน windows คงหมายถึงกด "enter" ดังนั้นวิธีแก้ปัญหาก็ค้นพบแล้วก็คือการใส่ rn เพื่อการขึ้นบรรทัดใหม่ โดยใช้กับคำสั่ง write หรือ print ก็ได้ (แต่ใช้กะ puts มะได้นะ)

ตัวอย่างเช่น
myfile = File.new("test.txt","w")
3.times { myfile.write("hellorn") }
myfile.close

ประมาณนี้เป็นต้น ลองทำดูครับ :)

พึงรู้ว่าหมึกเติมที่ใส่ตลับมันมีข้อเสียอย่างงี้นี้เอง

หลังจากคราวก่อนที่เคยเขียน วิธีเติมหมึก ว่าต้องทำยังไงไป ถึงวันนี้ผมเจอข้อเสียแล้ว เป็นข้อเสียที่แก้ไม่ได้เสียด้วย (จริงๆแก้ได้แต่เปลื้อง) นั้นก็คือ ชิปตรงหน้าตลับเสีย !! พอชิปเสียคราวนี้เราก็ต้องไปหาชิปมาใส่แทนใช่ไหมครับประเด็นมันอยู่ที่ว่า ชิปพวกนี้ไม่มีขายครับดังนั้นวิธีได้มันมาก็คือ "ไปซื้อของแท้มาซะ" ซึ่งตลับของ IP4200 นั้นราคาตลับละ 500 บาท โอ้โหแพงโคตรๆ แล้วของผมมันเสียทุกตลับเลยที่ผมได้เติมหมึก (รวม 4 ตลับ) เซ็งจิตคราวนี้ต้องหมดเงินไปอีก 2000 บาทเป็นแน่แท้ เดียววันหลังต้องไปหาที่คาร์ฟูดูว่ามีรุ่นที่มาแทนได้ไหม แล้วถูกกว่า

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

ถ้าชอบแต่ Print ขาว-ดำ จริงๆผมขอแนะนำให้ใช้ Laser จะดีกว่าครับ เพราะเดียวนี้ถูกและดีด้วย แต่ถ้าต้องการ Print รูปยังไง Laser Printer ก็จะตอบสนองได้ไม่เท่า Inkjet Printer ดังนั้นถ้าจะใช้ Inkjet Printer อย่างลืมไปซื้อแบบที่ Refill ด้านข้างนะครับ ผมโดนมาเลยมา share (พึงเติมไปได้ 2 ครั้งเองนะ เซ็งจิต)

JRuby on Rails บน Google App Engine

วันนี้ผมทำได้ตั้งแต่บ่ายๆละแต่พึงมีเวลาพอจะมาเขียน Blog ต่อในเรื่องของ Google App Engine ผมมีตัวที่ทำเสร็จแล้วให้ทุกท่านสามารถลองไป Deploy บน GAE ได้เลยโดยดาวโหลดได้เลยจากไฟล์นี้ HelloRails ได้เลยครับ ผมขอสรุปวิธีทำดังนี้ครับ

โดยก่อนเริ่มเราต้องมี gem ดังนี้ก่อน

  • Rails
  • Rake
  • Warbler

เสร็จแล้วทำตามขั้นตอนดังนี้

  1. เราก็สร้าง project Rails ตามปกติ
  2. เข้าไปใน folder project rails จาก command-line พิมพ์ warble pluginize
  3. เสร็จแล้วตามด้วย warble config ครับ
  4. ใน vendor/rails ให้เราลบโฟลเดอร์ activerecord ออก
  5. ตามด้วยลบโฟลเดอร์ test ที่ิอยู่ในโฟลเดอร์ดังนี้ actionmailer , actionpack , activeresource , activesupport , railties
  6. เสร็จแล้วให้โหลด 4 ไฟล์ jar หลักเหมือนเมื่อวานคือ JRuby-GAE-Jar
  7. เสร็จแล้วโหลดไฟล์ Gae-Ruby-lib.zip นี้มาแตก zip ใส่ใน lib ครับ
  8. คราวนี้เราก็สร้างไฟล์ และแก้ไขไฟล์ตามไฟล์นี้ครับ google_app_engine.rb
  9. โดยดูจากคำว่า file แล้วก็ตัวอักษรภายในนั้นและที่จะอยู่ในไฟล์แต่ละไฟล์ ถ้าไฟล์ไหนมีข้อมูลอยู่แล้วให้ลบทิ้งหมด แล้วคัดลอกไฟล์ google_app_engine ใส่ไปเลย
  10. เสร็จแล้วก็เข้า command-line พิมพ์ warble ในโฟลเดอร์ project Rails ของเรา

ส่วนถ้าไม่ใช้ Windows เราสามารถที่จะทำแบบนี้ได้เลย

  • rails ชื่อโปรเจคrails -m google_app_engine.rb

แล้วทุกอย่างก็จะเสร็จพร้อมลุย แต่อันนี้ต้องมี JRuby นะสำหรับคนที่จะใช้ script นี้ แต่ด้านบนตามขั้นตอนผมใช้ ruby ธรรมดา แต่การใช้ script จะไม่มีไฟล์ big_table_servlet_store.rb ครับ ไม่รู้ว่าจำเป็นไหมแต่ตอนผมทำเป็นขั้นตอนพอเอาไฟล์นี้มาใส่ก็หาย เลยคิดว่าน่าจะเกี่ยวแต่คนเขียน script อาจจะลืม

(J)Ruby บน Google App Engine

หลังจากใช้ความพยายามมา 2 วันในการพยายามทำ Hello World JRuby ขึ้น Google App Engine ให้ได้ซึ่งจากหลายๆแหล่งผมพยายามทำตาม เสร็จแล้วก็ติดปัญหาจุกจิกมากมาย ซึ่งผมก็เชื่อเขาว่าให้ใช้ JRuby แต่สุดท้ายวิธีที่ผมได้ผลก็คือ Ruby ธรรมดาเนี้ยและ ได้แบบไม่มีปัญหาเลยด้วยครับผม วันนี้ผมเอาวิธีทำ Sinatra บน Google App Engine มาฝากครับ

http://blog.bigcurl.de/2009/04/running-sinatra-apps-on-google.html

ซึ่งจริงๆแล้วผมก็ทำตามจากที่นี้ทั้งหมดครับ เพียงแต่ว่ามันไม่ได้ตามเปะๆเจอปัญหาต่างๆนานา ที่ค้นหาใน Google ก็ไม่เจอ แต่ผมพอมีความคุ้นกับ Java/Servlet อยู่บ้างเลยพอเข้าใจว่าต้องทำอะไร พอคล่ำๆไปสักพักก็เลยมาถูกทาง ดังนั้นผมจะสรุปจากบทความด้านบนนะครับผม มีขั้นตอนทำดังนี้ครับ อาจจะยาวหน่อย โดยอันนี้ผมทำแบบ Version Windows ที่ผมทำได้จริงนะครับ แต่ก่อนทำคุณต้องมี Account Google App Engine ก่อนนะครับ แล้วก็สร้าง App-id สักตัวหนึ่ง

  1. ใช้ Ruby 1.8.6 One-Click-Installer
  2. พอลงเสร็จ ก็เข้า Command-line จาก run -> cmd
  3. พิมพ์ gem install rake sinatra warbler
  4. ทำการสร้าง folder ใน drive C: เป็น sinatra-app
  5. ภายใน folder sinatra-app ให้สร้าง folder ดังนี้เพิ่มไป views public config lib
  6. พอสร้าง folder เสร็จก็สร้างไฟล์ดังนี้ครับ config.ru , app.rb , appengine-web.xml
  7. เสร็จแล้วไป copy โค้ดใส่แต่ละไฟล์ที่นี้ http://gist.github.com/91801
  8. จะสังเกตว่ามีไฟล์ warble.rb ด้วยอีกไฟล์ให้สร้างใน folder config ดังนั้นไฟล์นี้จะอยู่ config/warble.rb
  9. ขั้นตอนนี้เป็นขั้นตอนลัดนะครับ เพราะมีบางตัว run ใน windows ไม่ผ่านผมเลยทำการรวมไฟล์ lib ที่จำเป็นไว้ให้เรียบร้อยแล้ว โหลดได้เลย
  10. พอโหลดเสร็จก็นำไปแตก zip ที่ folder ใน sinatra-app/lib นะครับ
  11. เสร็จแล้วก็เข้า command-line แล้วไปที่ folder sinatra-app โดยพิมพ์ c: ตามด้วย cd ตามด้วย cd sinatra-app
  12. พอเข้ามาถึงพิมพ์ warble เฉยๆเลยมันก็จะทำการจัดการให้เสร็จ
  13. เปิดไฟล์ sinatra-app/tmp/war/WEB-INF/gems/gems/sinatra-0.9.1.1/lib/sinatra.rb
  14. ทำการ comment (ใช้สัญลักษณ์ #) ที่บรรทัดสุดท้ายที่เขียนว่า use_in_file_templates!
  15. แล้วไปเรียก warble ใน folder sinatra-app เหมือนเดิมอีกที
  16. เสร็จแล้วให้ไปโหลด Google App Engine SDK
  17. เอาไปแตกอยู่ drive C: เหมือนกัน (เพื่อความง่าย) และเปลี่ยนชื่อโฟลเดอร์เป็น appengine-java-sdk
  18. เสร็จแล้วก็เข้า command-line และไปอยู่ใน drive C: root (C:)
  19. ทดลอง app ด้วยการพิมพ์ appengine-java-sdkbinappcfg.cmd sinatra-apptmpwar
  20. ถ้าไม่มีอะไรผิดพลาดมันจะขึ้นบอกว่า app ถูก run อยู่ที่ http://localhost:8080 เราลองเข้าไปดูว่าขึ้น Hello ไหม
  21. ถ้าขึ้นละก็เตรียม upload ขึ้น app กันได้เลยแต่ต้องแก้นิดหน่อย
  22. เปิดไฟล์ใน sinatra-app/appengine-web.xml
  23. เปลี่ยนจาก YOUR-APPLICATION-ID เป็น app-id ของคุณ (app-id คือชื่อ app ที่ตั้งใน Google App Engine)
  24. เสร็จแล้วก็ warble
  25. เข้าไป drive C: พิมพ์ appengine-java-sdkbinappcfg.cmd update sinatra-apptmpwar (แบบนี้เท่านั้นห้ามพิมพ์ / แทน )
  26. ถ้าถูกต้องมันจะถาม email กับ password เราก็ใส่ไปแล้วก็รอๆๆ
  27. พอเสร็จเราก็เข้าไปดูได้เลยที่ app-id-ของคุณ.appspot.com
  28. ครั้งแรกจะนานพอดูเลย แล้วพอครั้งหลังๆก็จะเร็วขึ้น (รอ compile นะและ)

เสร็จแล้วววว คำสั่ง appcfg.cmd นั้นใช้ใน windows นะครับถ้าใช้ linux หรือ mac osx จะใช้ appcfg.sh แทนนะครับ หวังว่าคงชอบ Ruby คงมีเฮกันแล้วคราวนี้

งานสัปดาห์หนังสือปีนี้ซื้ออะไรบ้าง

ปีนี้ผมซื้อมาเยอะกว่าทุกปีเลย เพราะมีหนังสือน่าสนใจเพียบ เลยได้มาเยอะหน่อยหมดไป 1,500 บาทแนะซื้อมาดังนี้เลยครับ

  1. Ajax in Practice
  2. 101 Tips & Tricks CSS
  3. 101 Tips & Tricks PHP
  4. สร้างเว็บไซต์ในพริบตาด้วย Drupal 6
  5. วิถีแห่ง Apple
  6. How dell does it
  7. เรื่องเล่าสยองของลุงมงตากิว (อันนี้แหวกแนวหน่อยเพื่อความบันเทิง)

ซื้อมาแต่ละเล่มหนาทั้งนั้นยกเว้นอันสุดท้าย ! จะพยายามอ่านให้จบภายใน 1 ปีซึ่งไม่รู้จะทำได้ไหมเนี้ย แล้วทุกท่านซื้ออะไรมาอ่านกันบางหรอครับ