Oct 1, 2013

ฝากหน้าเว็บขำๆ กับ Google App Engine

ช่วงนี้เล่น JavaScript / CoffeeScript / CSS บ่อย พอโปรแกรมเริ่มซับซ้อนขึ้น ครั้นจะแสดงตัวอย่างด้วย code เพียวๆ ให้นั่งนึกตามคงไม่ไหว เลยต้องหาที่ฝากไฟล์แบบแสดงเป็นหน้าเว็บซักหน่อย จะได้ demo เจ้าตัว mock up นี้อย่างสะดวกราบรื่น ไม่ต้องเปิดเครื่องตัวเองโชว์หรือให้คนอื่นเข้ามาทาง ip address

ทางออกที่สวยงามที่สุดสำหรับผมคือ Google App Engine ครับ เพราะนอกจากจะได้ URL ที่สั้นและสะอาดแล้ว ยังสามารถพัฒนา controller เบื้องหลังต่ออย่างเนียนๆ ในอนาคตได้อีก

วิธีการก็ไม่ยุ่งยากครับ โหลด App Engine SDK (ผมใช้แบบ command line) มาพร้อมสร้าง application ใหม่ เรียบร้อยแล้วไปยัง directory ที่เก็บ file เว็บของเรา (.html, .css, .js, .jpg ฯลฯ) สร้าง directory ใหม่ชื่อว่า static แล้วย้าย file ทุกอันไปไว้ใน directory ใหม่นี้ ถ้าทำถูกต้องโครงสร้าง directory จะออกมาประมาณนี้ครับ

.
└── static
    ├── beautiful.css
    ├── img/
    ├── index.html
    ├── jquery.min.js
    └── logic.js

หลังจากนั้น สร้างไฟล์ app.yaml แล้วเขียนข้อมูลดังนี้

application: application-name
version: 0-alpha
api_version: 1

runtime: php
threadsafe: true

handlers:
- url: /
  static_files: static/index.html
  upload: static/

- url: /(.*)
  static_files: static/\1
  upload: static/(.*)

อย่าลืมเปลี่ยนบรรทัดแรกให้เป็นชื่อ application ตามที่สมัครไว้กับ App Engine ด้วยนะครับ

ถึงตอนนี้ ถ้าใช้ command line เพียงสั่ง appcfg.py update . ก็เรียบร้อย ส่วน GUI ให้สั่ง import application เพื่อเลือก directory นี้เข้ามา แล้วกด deploy ครับ



อย่างไรก็ตาม วิธีนี้ฝากได้แต่ไฟล์ static เท่านั้น ถ้าเป็นไฟล์ script ที่ทำงานฝั่ง server (เช่น .php) มันจะไม่แปลเป็น .html ให้ครับ ระวังว่าจะเผลออัพไฟล์ source code ที่มีข้อมูลที่ไม่อยากให้ใครเห็นนะครับ

ถ้าอยากให้ server แปล .php ก็เอาไฟล์ .php ทั้งหลายออกจาก directory static มาไว้ที่ directory หลัก แล้วเพิ่ม handlers นี้ไว้ก่อนอันสุดท้ายครับ

- url: /(.*)\.php
  script: \1.php

ทั้งนี้ database ของ App Engine นั้นไม่ใช่ MySQL นะครับ ถ้าจะติดต่อ database ด้วยอาจต้องศึกษาเพิ่มนิดหน่อยแล้วหละ ;)

ก็น่าจะเป็นทางเลือกที่น่าสนใจไม่น้อย ตั้งแต่คนที่แค่มองหา host ขำๆ ไว้ฝากหน้าเว็บส่งงาน mock up ไม่กี่ครั้ง ไปจนถึงเหล่าผู้พัฒนา prototype ทั้งหลายที่อาจต้องขยาย project ในอนาคตเลย

Sep 27, 2013

ไอคอนสกิลโปรแกรมเมอร์

ช่วงนี้อาจารย์สั่งงานเป็นโปรเจคเล็กๆ เพื่อความเข้าใจในฐานข้อมูล ครั้นจะเอาโปรเจคที่มีอยู่แล้วมายำๆ ส่งให้มันน่าเบื่อ ก็กลับไปค้นไอเดียเก่าที่ยังไม่ได้ implement มายำเล่นแทนดีกว่า

เรื่องสนุกของงานนี้คือ ไม่(ลืม)คิดมาก่อนเลยว่าโปรเจคนี้มันต้องมีรูปประกอบเยอะมาก (และสำคัญมากด้วย!) ก็ไม่เป็นไรเพราะได้จับโปรเจคที่อยากทำ ต่อให้ยากแค่ไหนไฟก็ลุกท่วม (ไฟพยายามนะไม่ใช่ไฟลนก้น) จริงมะ

และนี่คือร่างที่สองบนกระดาษ


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

ตอนแรกก็กะว่าจะสแกนรูปไปใช้เลย ติดที่ว่าตอนใช้งานจะตั้งใจให้มันมีทั้งโหมดขาวดำและภาพสี เลยลองลากๆ เมาส์ใน Gimp / Inkscape และพบว่าไม่เวิร์ก ไม้ตายสุดท้ายคือกลับสู่ปากกา โชคดีว่ายืม iPad มาได้เลยจิ้มวาดใน MyScript Memo ครับ



ถ้าเห็นว่าสวยก็เอาไปใช้กันได้เลยจ้า ให้เครดิตพร้อมหลังไมค์มาบอกแค่นี้ก็พอแล้ว ;)

Sep 19, 2013

ริจะฟังเพลงคลาสสิก อย่ายึดติดว่าต้องจินตนาการเห็นต้นไม้ใบหญ้า

ยาวไปไม่(ต้อง)อ่าน: จินตนาการระหว่างฟังเพลงคลาสสิกแล้วสนุกก็ทำไปเถอะ

แตกมาจากบทวิเคราะห์ Moonlight Sonata นะครับ เพื่อไม่ให้มีหลายเรื่องปนกัน

ในการฟังเพลงเหล่านี้ ใคร่เตือนว่าอย่าตั้งตาวาดภาพหรือพยายามจะจับให้ได้ว่า ขณะนี้นกกำลังบินอยู่ หรือฝนกำลังตก จนกระทั่งไม่ได้ชื่นชมตัวเสียงดนตรีเอง อันที่จริงภาพต่างๆ นั้นเป็นเพียงเครื่องประกอบ หรือเป็นสิ่งจูงใจผู้ประพันธ์ให้มีอารมณ์ที่จะแต่งเพลงเท่านั้น เราจะฟังเพลงเพื่อความไพเราะโดยไม่คำนึงถึงข้อความต่างๆ ซึ่งถือเป็นส่วนเกิน หรือส่วนที่ไม่เชิงดนตรีเลยก็ได้ และอาจดีกว่าด้วยซ้ำไป แต่บังเอิญมีครูสอนคีตนิยมบางท่านเอานิยายต่างๆ เหล่านี้เป็นเครื่องล่อความสนใจ จนทำให้เกิดความเข้าใจผิดกันว่า เพลงคลาสสิกทุกเพลงฟังแล้วถ้าเข้าใจจริงๆ จะต้องมองเห็นน้ำตกเห็นหุบเขาในจินตนาการ เลยเป็นเหตุให้คนกลัวเพลงคลาสสิกไป เพราะถ้าฟังเสียงไวโอลินแล้วไม่เห็นเมฆ คนอื่นเขาจะว่าโง่
-- ดร.ประทักษ์ ประทีปเสน

หลายครั้งผมก็พยายามฟังดนตรีเพื่อดนตรีนะ (พวกทฤษฎีดนตรี วิเคราะห์คอร์ด หาโมทีฟเปลี่ยนรูป อะไรทำนองนั้น) แต่ก็อดไม่ได้ที่จะนึกภาพตามว่าเสียงบรรเลงแบบนี้ มันควรจะเกิดขึ้นกับสถานการณ์แบบไหน

การรับรู้ของมนุษย์ที่แข็งแรงที่สุดยังไงก็หนีไม่พ้นการมองอยู่ดี ดังนั้นการไปบังคับว่าฟังแล้วห้ามจินตนาการภาพตามเนี่ยแหละที่แปลก แปลกมากด้วย

ส่วนเรื่องที่ว่าคนนึงมาฟังแล้วบอกว่าเห็นนกเห็นไม้ อีกคนเล่าว่าเหมือนได้ไปอยู่ชายทะเลมองเส้นขอบฟ้า ส่วนคนอื่นๆ กลับไม่เห็นอะไรเลย นี่มันแทบไม่ใช่ประเด็นด้วยซ้ำ มันก็เหมือนเด็กน้อยนอนดูดาวแล้วลากเส้นให้เป็นรูปต่างๆ นั่นแหละ ใครจะไปวาดออกมาได้เหมือนกันหมดทุกอย่างหละ จริงไหม?

ดังนั้นคนที่ฟังแล้วไม่เห็นภาพอะไรก็ไม่ต้องกังวล ส่วนคนที่สั่งห้ามจินตนาการนั้นก็ดูท่าว่าจะกลัวจนเกินเหตุ

จินตนาการกันดีกว่า ใครจะมาเข้าใจผิดก็ช่างเขาเถอะ

Sep 10, 2013

CoffeeScript มหัศจรรย์: ลูกศรเปลี่ยน Scope

JavaScript เป็นภาษา functional ที่คนมักเข้าใจผิดว่ามันเป็น OOP (ด้วยตัว syntax ที่หน้าตาคล้าย C/Java เสียเหลือเกิน) ด้วยความเข้าใจผิดและไม่มี syntax ประกาศ class โดยตรง ทำให้ framework หลายๆ เจ้าพยายาม define syntax นี้กันเอง ตัวอย่างเช่นใน CoffeeScript

class Dog
    constructor: (@name, @owner) ->
        me = $('<button>').addClass('dog').append(@name).click(@bark)
        $('#animals').append(me)
    
    bark: ->
        alert(@name + ': Bark bark. I love you, ' + @owner + '. Bark!')

bone = new Dog('Bonnie', 'Alice')

ดูดีและเหมือนภาษา OOP ทั่วไปเลยทีเดียว นอกจากนี้เมื่อทดสอบบน console จะเห็นว่า bone.bark() แสดงผลลัพท์ที่ถูกต้อง ไม่น่ามีปัญหาอะไร

อย่างไรก็ตาม ด้วยความเป็น dynamic scope ทำให้ฟังก์ชัน bark ไปใช้ scope จาก jQuery แทน ถ้ากดปุ่มจะเห็นว่าคราวนี้มี undefined ในข้อความ (เพราะ me ที่เป็น jQuery object ไม่มี attribute owner)

วิธีแก้แบบ JavaScript จะคล้ายๆ Python คือสร้าง self ที่ชี้กลับมาหาตัวเราจริงๆ แล้วให้ this เป็นแบบ dynamic ตามปรกติ

class Dog
    constructor: (@name, @owner) ->
        self = this
        me = $('<button>').addClass('dog').append(@name).click -> self.bark()
        $('#animals').append(me)

    bark: ->
        alert(@name + ': Bark bark. I love you, ' + @owner + '. Bark!')

ส่วน CoffeeScript มีท่าง่ายกว่านั้น แค่ใช้ fat arrow ก็พอ

class Dog
    constructor: (@name, @owner) ->
        me = $('<button>').addClass('dog').append(@name).click(@bark)
        $('#animals').append(me)

    bark: =>
        alert(@name + ': Bark bark. I love you, ' + @owner + '. Bark!')

ว่าแล้วก็แอบเห็นด้วยกับทวีตนี้ :P


Aug 26, 2013

Google Maps Linux เล่น 3D ได้แล้ว \(;w ;)/

เรื่องกราฟฟิกและเกม Linux ถือว่าเป็นลูกเมียน้อยมาตลอด จนกระทั่งต้นปีที่ผ่านมา Steam for Linux ได้ถือกำเนิด บวกกับระบบมือถือยอดนิยมอย่าง Android ที่ผู้ใช้ไม่น้อยซื้อไปเพื่อเล่นเกม สถานการณ์ก็เริ่มดูดีขึ้นมาบ้าง

ตอนนี้ก็มีอีกบริการหนึ่งที่รองรับการใช้กราฟฟิกบน Linux แล้ว ซึ่งก็คือ Google Maps ตัวใหม่นั่นเอง (ไม่แน่ใจว่ารองรับตั้งแต่เมื่อไหร่ เพราะจำได้ว่าช่วงแรกๆ ที่ปล่อยพรีวิว เวลาพยายามดูให้เป็น 3D มันจะฟ้องหา Google Earth Plugin ซึ่งไม่รองรับบน Linux) อันนี้ดูผ่าน Chromium รุ่นล่าสุด เข้าใจว่าพี่แกคงปลุกปล้ำกับ WebGL จนสำเร็จ


ซูมออกไกลสุด เห็นหมู่ดาวและแสงไฟในเมืองด้วย


โลกโค้งๆ กับปุยเมฆบนท้องฟ้า (ไม่แน่ใจว่าภาพเมฆเป็นแบบ live หรือเปล่า)


ซูมภูเขาเห็นเป็นภูเขาแล้ว


ส่วนตึกต้องเป็นเมืองที่รองรับ ตอนนี้ยังมีไม่มากเท่าไหร่ ส่วนใหญ่ก็เมกากับแถบยุโรป



ซูมใกล้สุด รายละเอียดไม่ได้ชัดเวอร์ขนาด backpack เที่ยวผ่านหน้าจอได้แฮะ (แต่ก็ดีกว่าไม่มีหละน่า)

Aug 24, 2013

DatePicker ตัวใหม่ของ Android?

ภายใต้มาตรฐานเดียวกัน (ISO 8601) การสื่อสารเรื่องวันที่ไม่ควรเป็นปัญหาระหว่างวัฒนธรรม และการป้อนข้อมูลผ่านคีย์บอร์ดโดยยึดหลักการนี้ก็ไม่ใช่เรื่องยากแต่อย่างใด

ในความเป็นจริงนั้น แต่ละวัฒนธรรมย่อมเลือกใช้สิ่งที่เหมาะสมกับตัวเองที่สุด เช่นประเทศไทยเราบอกปีเป็นพุทธศักราช อเมริกาใช้เดือนนำหน้าวัน อินเดียมีการนับวันในเดือนที่แตกต่างออกไป ไปจนถึงเหล่านักดาราศาสตร์ที่นับแค่วันเพียงอย่างเดียวบนปฏิทิน

อีกทั้งการป้อนข้อมูลผ่านคีย์บอร์ดยังไม่รองรับความผิดพลาดของข้อมูล ไม่ว่าทั้งการพิมพ์ผิด-ตกหล่น (syntactic error) หรือใส่วันที่เกินกว่าที่เดือนนั้นจะมีได้ (semantics error)

การบังคับป้อนข้อมูลด้วยวิธีการเฉพาะสำหรับข้อมูลนั้นๆ จึงเป็นสิ่งที่ควรทำเสมอ ดังตัวอย่างนี้



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



การป้อนวันเวลาในยุคแรกๆ ของ Android ผ่าน DatePicker (ฟังก์ชันมาตรฐานสำหรับป้อนข้อมูลวันเวลา) ที่ไม่ค่อยจะเป็นมิตรกับระบบสัมผัสซักเท่าไหร่ ด้วยปุ่มคลิกขึ้น/ลงที่ทำงานทีละขั้น หรือต้องกดค้างสำหรับการเลื่อนผ่านข้อมูลให้เร็วขึ้น (แบบเดียวกับนาฬิกาข้อมือเลย)


โชคดีที่ Android ยกเครื่องศัลยกรรมหน้าตาใหม่หมด (ช่วง Jelly Bean) ทำให้ DatePicker ตัวนี้ดูดีขึ้นมากภายใต้หน้าตาเดิมๆ (มีผลกับการปรับตัวของผู้ใช้ส่วนใหญ่) ด้วยการเลือกวันโดยใช้การเลื่อนขึ้น/ลงแทน แถมยังสามารถเลื่อนแบบมีแรงเฉื่อยเพื่อกระโดดข้ามชุดข้อมูลได้อีกด้วย


และแบบใหม่ล่าสุด เจอใน Google Keep (อาจจะกลายเป็น official ถัดไป) ออกแบบมาอย่างสวยงาม แม้จะหน้าตาจะเปลี่ยนไปบ้าง แต่ก็ยังคงความง่ายในการใช้งานอยู่

บล๊อกตอนนี้ไม่มีอะไร เห็นของสวยเลยมาอวยเฉยๆ :P

Aug 5, 2013

ทำไมผมเกลียด JavaScript

ลองเปิด JavaScript Console ของ browser แล้วป้อนคำสั่งเหล่านี้ลงไปดูครับ ...

console> [] + []
""
console> [] + {}
"[object Object]"
console> {} + []
0
console> {} + {}
NaN

จาก @garybernhardt

ก่อนหน้านี้เคยคิดว่าการเปรียบ == ประหลาดพอแล้วนะ (ยังดีที่มี === ช่วยชีวิต) แต่พอเจอแบบนี้ก็ทำเอาเสียหลักเลยทีเดียว

  1. ด้วยเหตุผลที่ JavaScript ทำงานกับ HTML ซึ่งเป็น markup language ที่เน้นการแสดงผลด้วย string เป็นหลัก การเอา array (หรือ type อื่นใดที่ไม่ใช่ตัวเลข) บวกกับอะไรซักอย่าง จะได้ผลลัพท์เป็น string ทันที (คล้ายๆ กับที่ C ที่มองทุกอย่างเป็น pointer arithmetic) พอเอา array ว่างๆ มาบวกกันเลยได้ string ว่าง
  2. ในทำนองเดียวกัน เมื่อเปลี่ยนเอา array ไปบวกกับ {} (ถือว่าเป็น object ใน JavaScript) ก็ทำให้ได้ผลลัพท์เป็น string ที่บอกว่านี่คือ object นั่นเอง
  3. อย่างไรก็ตาม {} มีความหมายได้อีกอย่างคือ block (ที่ไม่ยอมทำหน้าที่เป็น variable scope ไปด้วยเหมือนภาษา C) ทำให้บรรทัดนี้มีค่าเทียบเท่ากับการเขียนเพียง +[] เครื่องหมายบวกเลยทำหน้าที่ทางคณิตศาสตร์อย่างเต็มที่ และมันเปลี่ยน array ว่างให้กลายเป็นค่า 0
  4. ส่วน object อื่นใดที่ไม่ใช่ array, string ว่าง จะมีค่าเป็น not a number เมื่อเอามาดำเนินการทางคณิตศาสตร์ครับ

เฮ้อ จะเขียน JavaScript แต่ละทีมันเหนื่อย (ใจ) จริงๆ

Aug 4, 2013

Puma คู่แรก

ผมเคยเป็นแฟน Converse มาตั้งแต่มีอิสระในการที่จะเลือกแต่งตัวไปเรียนยังไงก็ได้ เนื่องด้วยความขี้เกียจเลือก ทำให้ผมมีแนวทางการแต่งตัวว่า ควรเลือกใส่ชุดให้เหมือนกันทุกวัน นั่นทำให้ผมเหลือตัวเลือกในการแต่งตัวไปเรียนไม่มากเท่าไหร่ (เพราะต้องคำนึงถึงวันสอบที่ต้องแต่งตัวถูกกฎมากเป็นพิเศษด้วย) สิ่งเดียวที่ผมคิดว่าเปลี่ยนได้เพียงอย่างเดียวคือรองเท้า ทำให้ผมเลือก Converse Lo-Top สีขาวเชือกดำได้ภายในพริบตาหลังเดินผ่านประตูโชว์รูม และนี่คือรองเท้าคู่แรกที่ผมรักผูกพันและเลือกใส่มันในทุกๆ โอกาส

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

ถึงกระนั้น Puma ก็ยังเป็นรองเท้าที่ผมใฝ่ฝันมาโดยตลอด อันที่จริงแล้ว วันที่ซื้อ Converse คู่แรกนั้น ผมแวะไปยังโชว์รูม Puma ก่อนด้วยซ้ำ (เรียกว่าเป็น love at first sight เลยก็ไม่ผิด) ความเรียบง่ายลงตัวสไตล์ minimalism อันเกิดจากสีสันเพียงน้อยนิดที่ใช้ พร้อมลวดลายพื้นๆ คาดเดาได้ไม่หวือหวา เด้ดสุดคือตำแหน่งร้อยเชือกเยื้องข้างอันเป็นเอกลักษณ์ องค์ประกอบทั้งหมดรวมกันคงไม่ไกลจากคำว่า perfect เท่าไหร่ อย่างไรก็ตามราคาของมันก็นับว่าสูงไม่ใช่เล่นสำหรับเด็กมหา'ลัย (เทียบเท่าค่าขนมครึ่งเดือน) ก็ทำให้ผมต้องตัดใจจากมันเสียทุกคราเมื่อถึงเวลาปลดระวางรองเท้าคู่เก่า

โชคดีที่เจอช่วงลดราคา (โดยตั้งใจ -- ใครหละจะปล่อยโอกาส) เลยได้ฤกษ์พาเจ้าแมวล้ำยุคคู่แรกคู่นี้ออกไปผจญโลกด้วยกัน


Puma Future Cat M2 - ว่าแต่เห็นที่ไหนๆ เค้าก็ถ่ายมุมนี้กันแฮะ

และหวังว่านี่จะไม่ใช่คู่สุดท้ายจาก Puma ;)

Jul 25, 2013

ยินดียิ่งนัก LaTeX พิมพ์ไทยได้แล้ว

ผมไม่ใช่ผู้ใช้ LaTeX ตั้งแต่ยุคแรกๆ แม้ว่าจะสนใจคณิตศาสตร์ก็ตาม การเขียนแทนสมการของผมแทบทั้งหมดนั้นสำเร็จได้ด้วยปากกาและกระดาษ ถ้าต้องการแสดงสมการในคอมก็จะเป็น plain text เพียงอย่างเดียว

ประสบการณ์ใช้ LaTeX ครั้งแรกเกิดขึ้นเมื่อ 5 ปีก่อนในวิชา Mathematics Software ซึ่งนับได้ว่าไม่น่าประทับใจเท่าที่ควร (และทำให้เกิดโครงการ EzMath ตามมา) และยังเลวร้ายขึ้นไปอีกเมื่อผมย้ายมาใช้ Linux เต็มตัวเมื่อสองปีก่อน เพื่อพบว่าการทำให้ LaTeX พิมพ์งานภาษาไทยได้นั้นยุ่งยากมาก จนสุดท้ายต้องหนีไป XeLaTeX หรือกลับไปใช้ MS Word ที่มหาวิทยาลัยแทน

อย่างไรก็ตาม สถานการณ์ตอนนี้เริ่มดูดีขึ้น หลังจาก @theppitak สามารถส่ง ThaiLaTeX กลับเข้าไปยังต้นน้ำได้สำเร็จ ต่อไปนี้ถ้าต้องการพิมพ์ไทยก็แค่ลงโปรแกรม

$ apt-get install texlive-full

แล้วก็เริ่มพิมพ์งานได้เลย ไม่ต้อง config / download อะไรเพิ่มเติมอีกต่อไป

\documentclass{article}
\usepackage[english,thai]{babel}
\usepackage[utf8x]{inputenc}
\begin{document}
สวัสดีอีกครั้ง $ e^{\pi i} + 1 = 0 $
\end{document}

ขอบคุณอีกครั้งที่ช่วยผลักดันวงการซอฟท์แวร์ไทยครับ

Jul 22, 2013

BarCamp เชียงใหม่ ครั้งที่ 6

วันเสาร์ปลายเดือนที่แล้วไปงาน BarCamp เชียงใหม่มา ตามธรรมเนียมที่ดีก็ควร blog เก็บไว้หน่อย (หลังจากอู้มา 2 ปีเต็ม)

งานครั้งนี้จัดที่วิศวะ มช. โดยได้โต้โผใหญ่อย่างอาจารย์ @pruet คอยจัดแจงทุกอย่างให้ ก็ขอขอบคุณอีกครั้ง ณ ที่นี้ด้วยครับ -/\-

อันนี้ session ส่วนตัวกับ @kengggg ว่าด้วย FireFox OS ซึ่งนับว่าเป็น session เช้าเพียง session เดียวที่ผมเข้าฟัง เนื่องจากความล้าจากการเดินทางข้ามคืน + ปั่นสไลด์ไม่เสร็จดี ก็ต้องกราบขอโทษทีม @thainetizen ที่ไม่ได้เข้าฟังด้วย


หลังจากหายเหนื่อยก็เดินสำรวจโน่นนี่นั่น และพบว่าตั้งชื่อห้องได้ geek มากๆ


คู่หูดูโอ้ @shr กับ @ckzon มาพูดว่าทำไมถึงไม่ควร aim ว่าจะทำงานเป็น tester ถ้าไม่อยากเขียน code แต่แรก


จบด้วยอาจารย์ @pruet สุดหล่อ ที่จะพาคุณออกเดินทางผ่านปราการด่านสุดท้ายด้วยความเร็วมากกว่าแสง


สำหรับผมเองพูดเรื่อง Tetris ก็แปลกใจอยู่ที่ได้รับความนิยมอย่างล้นหลามจาก geek ฝรั่ง ไม่แน่ใจว่าเป็นเพราะ session ของผมบรรยายเป็นภาษาอังกฤษ (จริงๆ บอกว่าเป็น 2 ภาษาแต่ไม่มีคนไทยมาฟัง) เพียง session เดียวตอนนั้นหรือเปล่า :P



งานนี้สนุกมากครับ เสียดายว่าผมเองไม่ได้ไป after party ต่อเพราะเวลาอยู่เชียงใหม่มีจำกัด อย่างไรก็ตามผมจะพยายามกลับมาพูดที่เชียงใหม่ให้ได้ทุกปีครับ :)