ทดลอง Tesseract 4.0alpha กับภาษาไทย

Tesseract เป็นซอฟต์แวร์และไลบรารีแปลงภาพข้อความ (ที่คนอ่านเข้าใจ) ให้เป็นข้อความ (ที่คอมพิวเตอร์อ่านเข้าใจ) หรือที่เรียกกันว่า OCR

สาเหตุที่ Tesseract ได้รับความนิยม เพราะมันเป็นซอฟต์แวร์เสรี (free software ไม่ต้องจ่ายเงิน มีซอร์สโค้ดให้ดูและแก้ไขเผยแพร่ต่อได้ และประสิทธิภาพมันก็ดี จะเรียกใช้ตรงๆ ทาง command line ก็ได้ หรือจะเขียนโปรแกรมเชื่อมกับ API มันก็ได้ — ดู wrapper และ GUI อื่นๆ ได้ที่หน้า Add Ons ของโครงการ

ภาพที่จะส่งมา Tesseract ต้องเป็นภาพที่ปรับแต่งมาให้เหมาะกับการอ่านข้อความแล้ว คือหมุนมาค่อนข้างตรง และปรับแสงและสีให้อ่านง่าน พื้นหลังสีขาวหรือสีอ่อน ตัวอักษรสีดำ ใน StackOverflow มีคนอธิบายการใช้ OpenCV ปรับภาพเพื่อ OCR เอาไว้

Tesseract รองรับภาษาไทย (น่าจะตั้งแต่รุ่น 3) ตอนนี้รุ่น 4 กำลังจะออก เพิ่มเอนจินที่ใช้โมเดล Deep Learning แบบ LSTM เข้ามา เท่าที่ทีมพัฒนาทดสอบกันเอง มีข้อผิดพลาดน้อยกว่าเอนจินของรุ่นก่อน

โพสต์นี้จะพูดถึงการทดสอบรุ่น 4.0alpha บน macOS และทดลองเพิ่ม/ลดคำในรายคำศัพท์ที่ตัวเอนจิน LSTM จะเอาไปใช้

ส่วนใครจะใช้รุ่นที่ released แล้ว ติดตั้งด้วยวิธีปกติของแต่ละระบบปฏิบัติการได้นะครับ วิธีตามเอกสาร

ติดตั้งไลบรารีที่จำเป็น

brew install autoconf-archive leptonica icu4c pango

ไลบรารี icu4c (เอาไว้จัดการ Unicode) กับ pango (จัดการการวาดตัวอักษร) ติดตั้งเฉพาะถ้าเราต้องการฝึกโมเดลใหม่

อาจจะมีไลบรารีอื่นที่ต้องใช้เพิ่มเติม ลองอ่านที่ configure มันแจ้ง และติดตั้งตามที่มันบอกครับ

ICU ที่มากับ macOS ไม่มีไฟล์ header มาด้วย ดังนั้นใช้คอมไพล์ไม่ได้ ต้องลงใหม่ครับ

ตั้งค่า environment

ในไฟล์ ~/.bash_profile

export PATH="/usr/local/opt/icu4c/bin:$PATH"
export PATH="/usr/local/opt/icu4c/sbin:$PATH"
export LDFLAGS="-L/usr/local/opt/icu4c/lib"
export CPPFLAGS="-I/usr/local/opt/icu4c/include"

อันนี้ผมใช้ brew ปกติของมันจะเอาไลบรารีและเฮดเดอร์ต่างๆ ไปไว้ที่ไดเรกทอรี /usr/local/opt/ ถ้าใครติดตั้งไว้ที่อื่นก็เปลี่ยนตามนั้นครับ

ดาวน์โหลดโค้ดและเตรียมคอมไพล์

โค้ด Tesseract ตัวล่าสุดอยู่ที่ https://github.com/tesseract-ocr/tesseract ก็ไปโคลนหรือฟอร์กมาได้เลย

จากนั้นในไดเรกทอรีของ tesseract เราก็สร้างไฟล์คอนฟิกเพื่อเตรียมคอมไพล์

./autogen.h

และ

./configure

จากนั้นก็คอมไพล์และติดตั้งตัว tesseract

make
make install

และคอมไพล์และติดตั้งตัวโปรแกรมสำหรับฝึกและแก้ไขรายการคำ

make training
make training-install

ถ้าคอนฟิกไม่ผ่านหรือคอมไพล์ไม่ผ่าน ส่วนใหญ่สาเหตุมาจากการที่ tesseract หาไลบรารีที่มันต้องการไม่เจอ ซึ่งอาจจะเกิดจากการที่เครื่องเรายังไม่มี (ก็ติดตั้งซะ) หรือมีแล้วแต่หาไม่เจอ (ก็ลองตั้งค่า environment ดู)

ใช้งาน Tesseract

การจะใช้งาน Tesseract ได้ ต้องมีไฟล์ข้อมูลภาษาให้มันด้วย ซึ่งดาวน์โหลดได้จาก https://github.com/tesseract-ocr/tessdata_best และ https://github.com/tesseract-ocr/tessdata_fast ตัวแรกจะแม่นกว่า ตัวหลังจะเร็วกว่า

โมเดลภาษาไทยชื่อ tha.traineddata
โมเดลภาษาอังกฤษชื่อ eng.traineddata

ตัวอย่างการเรียกใช้งานจาก command line:

tesseract input.png output --oem 1 -l tha -c preserve_interword_spaces=1 --tessdata-dir ./tessdata_best/

  • tesseract — เป็นชื่อโปรแกรมที่เราใช้จาก command line
  • input.png — ตรงนี้จะเป็นชื่อภาพอะไรก็ได้ ได้ทั้งฟอร์แมต TIFF, PNG, JPG
  • output — ชื่อไฟล์ text ใส่ไปแบบนี้ ไฟล์ที่ออกมาจะใช้ชื่อ output.txt (เติม .txt ให้อัตโนมัติ)
  • –oem 1 — เลือก OCR Engine mode เป็น LSTM
  • -l tha — เลือกภาษาไทย ถ้าเอกสารเรามีทั้งไทยและอังกฤษ ก็ใช้ -l tha+eng
  • -c preserve_interword_spaces=1 — บอกเอนจินว่าไม่ต้องแทรกช่องว่างระหว่างตัวอักษรให้ เนื่องจากภาษาไทยเขียนติดกันโดยไม่มีช่องว่าง ถ้าแทรกมาจะอ่านลำบาก
  • –tessdata-dir ./tessdata_best/ — บอกไดเรกทอรีที่เก็บข้อมูลโมเดล

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

แก้ไขไฟล์ wordlist

ไฟล์ tha.traineddata จริงๆ ข้างในมีข้อมูลอยู่หลายประเภท เราสามารถแตกมันออกมาเป็นไฟล์ย่อยๆ ได้

combine_tessdata -u ./tessdata_best/tha.traineddata ./tessdata_TEST/tha.

จะได้ไฟล์ unicharset และไฟล์ dawg (Directed Acyclic Word Graphs) ออกมา ซึ่งจากไฟล์เหล่านี้ เราใช้สร้างรายการคำศัพท์ได้

dawg2wordlist ./tessdata_TEST/tha.lstm-unicharset ./tessdata_TEST/tha.lstm-word-dawg ./tessdata_TEST/tha.lstm-word-list

พอได้รายการคำศัพท์มาแล้ว เราแก้มันได้ด้วย text editor ทั่วไปเลย — 1 บรรทัด 1 คำ

พอแก้ไขเสร็จแล้ว ก็ทำกลับกัน คือแปลงรายการคำศัพท์ให้เป็น unicharset และ dawg

wordlist2dawg ./tessdata_TEST/tha.lstm-word-list ./tessdata_TEST/tha.lstm-word-dawg ./tessdata_TEST/tha.lstm-unicharset

และรวมทั้งหมดเข้าด้วยกันเป็นไฟล์ traineddata เพื่อเอาไปใช้งานกับ tesseract

combine_tessdata ./tessdata_TEST/tha.

เราสามารถลองใช้โมเดลใหม่นี้ได้โดยบอก tesseract ผ่านพารามิเตอร์ –tessdata-dir ให้มาใช้ข้อมูลในไดเรกทอรีนี้

(วิธีการจัดการกับไฟล์คำศัพท์นี้ ขอบคุณ Shreeshrii ที่ช่วยอธิบายอย่างละเอียด)

ผลการทดสอบ

เท่าที่ทดสอบเร็วๆ การ preprocess ประมวลภาพก่อนจะส่งให้ Tesseract มีผลมาก แค่ปรับภาพจากสีเป็นขาวดำ ก็ทำให้อ่านข้อความได้เพิ่มขึ้น และยิ่งเราตัด (crop) ภาพมาเฉพาะส่วนที่มีข้อความ มันก็จะแม่นขึ้นอีก อย่างไรก็ตามการ postprocess อย่างการทำ spellcheck แก้คำผิด ก็ยังจำเป็นอยู่ ถ้าต้องการความแม่นยำที่เพิ่มขึ้นครับ

ด้านล่างเป็นผลทดสอบด้วยโมเดลจาก tessdata_best โดยไม่ได้ปรับแต่งอะไรเพิ่ม

Pantip on Facebook Color - read with Tesseract
ภาพจากสื่อสังคม (ไม่ได้ preprocess เลย) เมื่อทดสอบอ่านด้วย Tesseract
Pantip on Facebook Black and White - read with Tesseract
ภาพจากสื่อสังคม (ปรับสีเป็นขาวดำ) เมื่อทดสอบอ่านด้วย Tesseract
Pantip on Facebook Black and White, Cropped - read with Tesseract
ภาพจากสื่อสังคม (ปรับสีเป็นขาวดำและตัดมาเฉพาะส่วนที่เป็นข้อความ) เมื่อทดสอบอ่านด้วย Tesseract

ใครลองเล่นแล้วได้ผลอย่างไรบอกกันได้ครับ

ทำเว็บ ทำแอป ให้รองรับหลายภาษา หลากวัฒนธรรม

ไลบรารี/เฟรมเวิร์กสำหรับการทำให้แอป/เว็บไซต์รองรับหลายภาษา/วัฒนธรรม หรือที่เรียกว่า “internationalization” ทั้งส่วนหน้าตาและการประมวลผลอื่นๆ เช่น เรียงลำดับตามพจนานุกรม ปฏิทิน รูปแบบวันเวลา สกุลเงิน

โพสต์เรื่องนี้ไปที่กรุ๊ปสมาคมโปรแกรมเมอร์ไทยและใน Medium ขอโพสต์ซ้ำที่นี่

อะไรคือ Internationalization?

หลักๆ ในเรื่องนี้มี 2 คำ คือ internationalization (i18n) กับ localization (L10n)

ส่วนของโค้ดจะเป็นการทำ internationalization รองรับไว้ คือเตรียมให้รองรับหลายภาษา/วัฒนธรรม ไม่ hardcode ภาษาลงในโค้ด คนเขียนโค้ดไม่ทึกทักเรื่องเกี่ยวกับภาษาและวัฒนธรรมไปเอง

สำหรับข้อความ/ข้อมูลสำหรับแต่ละภาษาแต่ละประเทศจะเก็บเป็นก้อนๆ เอาไว้ เรียกว่า locale

การจัดเตรียมข้อมูล locale พวกนี้เรียกว่า localization ซึ่งมีทั้งการแปลข้อความ และการเตรียมข้อมูลที่เจาะจงกับประเทศ/เขตการปกครอง/วัฒนธรรม

(ตัวย่อ i18n และ L10n มาจากอักษรแรกสุด+จำนวนตัวอักษรระหว่างอักษรแรกสุดกับอักษรท้ายสุด+อักษรท้ายสุด ใช้ i ตัวเล็ก และ L ตัวใหญ่ เพื่อให้เห็นแตกต่างจากเลขหนึ่ง 1)

ข้อมูลจำเพาะท้องถิ่น (locale)

ข้อความที่เจาะจงกับแอปในภาษานั้นๆ ก็ต้องแปลเอา ซึ่งมีเครื่องมือให้ช่วยแปลผ่านเว็บหลายตัว ตัวที่นิยมกันมากคือ Transifex (ใช้ฟรีสำหรับโครงการโอเพนซอร์ส) หรือจะใช้โปรแกรมอื่นๆ ก็มี โดยมาตรฐานการเก็บข้อความอันหนึ่งก็คือ gettext

ส่วนข้อมูลที่เป็นพื้นฐานสำหรับแต่ละภาษาแต่ละประเทศ ที่ไม่ขึ้นกับแอป มีคนทำเอาไว้แล้วที่โครงการ Unicode Common Locale Data Repository (CLDR)

เฟรมเวิร์กเกือบทั้งหมดรองรับการดึงข้อมูลจาก CLDR นี้ (และเราไม่ควรคิดใช้อะไรที่ต่างไปจาก CLDR ถ้าไม่ชัวร์จริงๆ ว่าคิดดีแล้ว)

ชื่อเรียก locale มีมาตรฐานกำหนดวิธีเรียกไว้ อยู่ในรูปแบบ:

  • รหัสภาษาตัวพิมพ์เล็ก_รหัสประเทศตัวพิมพ์ใหญ่
  • รหัสภาษาตัวพิมพ์เล็ก-รหัสประเทศตัวพิมพ์ใหญ่

เช่น th_TH คือภาษาไทยที่ใช้ในประเทศไทย, en_GB คือภาษาอังกฤษที่ใช้ในสหราชอาณาจักร, en_MY ภาษาอังกฤษที่ใช้ในมาเลเซีย, my_MM “ภาษาเมียนมาร์” ที่ใช้ในประเทศเมียนมาร์

รหัสภาษาและรหัสประเทศ​ โดยทั่วไปแล้วจะใช้ตามมาตรฐาน ISO ซึ่งจะมีทั้งแบบ 2 ตัวอักษร และแบบ 3 ตัวอักษร — โปรดสังเกตว่า รหัสภาษาและรหัสประเทศอาจจะแตกต่างกัน เช่น ภาษาญี่ปุ่นคือ ja ส่วนประเทศญี่ปุ่นคือ JP, หรือ MY ถ้าเป็นประเทศคือมาเลเซีย แต่ถ้าภาษา my คือ “ภาษาในเมียนมาร์”

บางทีเราจะเห็นชื่อ locale ในรูปแบบ รหัสภาษา_รหัสประเทศ_รหัสประเทศ อันนี้ต้องไปอ่านเอกสารของเฟรมเวิร์กนั้นๆ อีกทีว่าหมายความว่าอะไร เพราะมันไม่ใช่มาตรฐาน

เช่น th_TH_TH ใน Java จะหมายถึง ภาษาไทย, ในประเทศไทย, และใช้เลขไทยด้วย หรือ ja_JP_JP จะหมายถึง ภาษาญี่ปุ่น, ในประเทศญี่ปุ่น, และใช้การนับปีปฎิทินแบบญี่ปุ่น (Imperial calendar)

(ภาษาบางภาษาไม่มีโค้ดแบบ 2 ตัวอักษร แต่มีโค้ดแบบ 3 ตัวอักษร เช่น bur คือภาษาพม่า)

การทำงานของโค้ดที่ถูก internationalized แล้ว

ในการทำงานของโค้ด หลังจากโค้ดทราบภาษา/ประเทศของผู้ใช้ (จากที่ผู้ใช้ตั้งค่าเอง หรือจากการ detect/เดา หรือใช้ค่าจากระบบปฏิบัติการ) ตัวโค้ดก็จะไปดึงข้อมูลที่ตรงกันมาใช้ เพื่อกำหนดการแสดงผลหรือประมวลผล

เช่นถ้าทราบว่าเป็นผู้ใช้ภาษาอังกฤษ (en) ที่อยู่ในประเทศไทย (TH) ก็จะโหลด locale en_TH ขึ้นมาใช้ ซึ่งในการทำงานก็เป็นไปได้ว่า หน้าจอจะแสดงเป็นภาษาอังกฤษ แต่วันหยุดต่างๆ ใช้ตามปฏิทินของไทย

ส่วนข้อความที่แสดงผล (บนหน้าเว็บหรือทางอื่น) ตัวเฟรมเวิร์กจะกำหนดวิธีการแยกตัวโค้ดกับข้อความออกจากกัน ทำให้เราจัดการกับส่วนข้อความได้สะดวกขึ้น

โค้ดสามารถโหลดข้อมูล locale ได้จากทั้งฐานข้อมูล ใน string array ใน JSON หรือในแฟ้มต่างหาก อันนี้ก็ต้องไปตัดสินใจกันว่าทำงานแบบไหนสะดวกกว่า

i18n Library / Framework

ไลบรารี/เฟรมเวิร์กสำหรับ JavaScript ที่พบตอนนี้มีดังนี้

มีคนทำตารางเปรียบเทียบไว้ https://github.com/rxaviers/javascript-globalization/blob/master/README.md

สำหรับ PHP มีคนแนะนำวิธีต่างๆ ไว้ https://lingohub.com/blog/2013/06/php-internationalization-i18n-mechanisms-tutorial/

สำหรับ Ruby on Rails มีตัวนี้อีกตัว https://github.com/fnando/i18n-js คุณ Vittayasak Rujivorakul แนะนำมา

จบดื้อๆ แค่นี้ มีอะไรไปคุยกันได้ในเฟซบุ๊กกรุ๊ป สมาคมโปรแกรมเมอร์ไทย ครับ https://www.facebook.com/groups/ThaiPGAssociateSociety/

โพสต์(อาจจะ)ที่เกี่ยวข้อง

Consumer information security tools – Thai localization 2017 summary

การแปลโปรแกรมรักษาความปลอดภัยในการใช้คอมใช้เน็ต สำหรับผู้ใช้ทั่วไป สรุปสิ้นปี 2017

Thanks COCONET: Southeast Asia Digital Rights Camp and Localization Lab for a localization sprint this year for Thai, Bahasa Indonesia, Burmese, and Khmer. Events like that help volunteer translators get connected to people who close to developers, and it helps the translation submission goes more smooth.

รอผู้พัฒนาดำเนินการต่อ

แปล 100% รีวิว 100% รอให้าทางผู้พัฒนาทดสอบการใช้งานในแอป

A chart showing that Signal on Android 100% translated to Thai

ยังแปลไม่เสร็จ

รอให้ทางโครงการเพิ่มภาษาไทย

  • Gpg4win ชุดโปรแกรมสำหรับเข้ารหัสลับแบบ PGP (Windows)
    https://www.gpg4win.de/localize-gpg4win.html

    • มีโปรแกรมย่อยอีก 4 ตัวคือ GnuPG (โปรแกรมเข้ารหัสลับ), Kleopatra (โปรแกรมจัดการกุญแจ), GpgOL (ปลั๊กอินสำหรับ Outlook – เข้ารหัสลับอีเมล), GpgEx (ปลั๊กอินสำหรับ Windows Explorer – เข้ารหัสลับแฟ้ม)
    • อาจจะมีทางให้ Localization Lab ช่วยจัดการให้แปลผ่าน Transifex ได้

     

  • GPG Suite ชุดโปรแกรมสำหรับเข้ารหัสลับแบบ PGP (macOS) — Update 2018-01-05: เปิดให้แปลภาษาไทยได้แล้ว
    https://www.transifex.com/gpgtools/public/

    • มีโปรแกรมย่อยอีก 4 ตัวคือ libmacgpg (โปรแกรมเข้ารหัสลับ), GPG Keychain (โปรแกรมจัดการกุญแจ), GPGMail (ปลั๊กอินสำหรับ Mail.app), GPGPerferences (ส่วนการตั้งค่า)

     

  • Orbot, Orfox แอปช่วยเข้าถึงเน็ตอย่างเป็นส่วนตัวมากขึ้น (Android)
    https://www.transifex.com/otf/orbot/ (เทียบได้กับ Tor) — Update 2018-01-10: เปิดให้แปลภาษาไทยได้แล้ว
    https://www.transifex.com/otf/orfox/ (เทียบได้กับ Tor Browser)

สำหรับโปรแกรมที่อยู่บน Transifex แล้ว ใครสนใจช่วยแปล สามารถสมัครสมาชิก Transfex (ฟรี) แล้วไปที่หน้าโครงการ กด Join Team ได้เลยครับ — ถ้าโปรแกรมเหล่านี้เป็นภาษาไทย ก็มีโอกาสที่คนไทยจะสามารถใช้โปรแกรมช่วยความปลอดภัยเหล่านี้ได้มากขึ้นครับ

สวัสดีปีใหม่ 2018 ทุกท่าน ขอให้เป็นปีที่ปลอดภัย คิด ทำ พูด ได้อย่างมั่นใจ 🙂

ยากและไม่ค่อยปลอดภัย Facebook Wi-Fi #FAIL @ ห้องสมุด TCDC

วันนี้มีสัมภาษณ์ เลยลองนัดที่ TCDC ใหม่ ตรงไปรษณีย์กลาง บางรัก ช่วงนี้จนถึงสิ้นเดือนพฤษภาคมเขาเปิดให้ใช้ห้องสมุดฟรี

พบว่าการใช้ไวไฟที่นี่วุ่นวายไปหน่อย คือคงตั้งใจดี ทางหนึ่งก็จะได้ยอดเช็กอินเพิ่ม อีกทางก็คงอยากให้ผู้ใช้ล็อกอินได้ง่ายๆ เลยใช้ Facebook Wi-Fi ในการลงทะเบียน (พูดอีกแบบคือ ฝากภาระในการบันทึกผู้เข้าใช้ระบบให้เฟซบุ๊กทำ – จะไม่ทำเลยก็คงไม่ได้ เพราะพ.ร.บ.คอมพิวเตอร์กำหนดให้บันทึกข้อมูลการจราจร-ที่ระบุตัวผู้ใช้ได้)

รวมๆ คือเราพบว่าการล็อกอินไวไฟที่ TCDC ไม่ค่อยเป็นมิตรเท่าไร แถมอาจส่งเสริมพฤติกรรมเสี่ยงด้านความปลอดภัยของข้อมูลส่วนบุคคล โพสต์นี้จะบอกว่าทำไม ปัญหาน่าจะอยู่ตรงไหน และน่าจะแก้ไขยังไงได้บ้าง (ใครใช้ Facebook Wi-Fi ก็อาจจะเจอปัญหาแบบเดียวกันนี้ได้ ไม่เฉพาะ TCDC – เคยเจอร้านกาแฟบางร้านก็ใช้)

มั่นใจว่าไม่ได้เจอปัญหานี้อยู่คนเดียว เพราะระหว่างที่นั่งทำงานอยู่ที่นั่นตั้งแต่ประมาณ 12:40 จนถึงราว 17:00 ได้ยินโต๊ะรอบๆ ถามกันเป็นระยะถึงเรื่องต่อไวไฟ กดตรงไหน ทำไมต่อไม่ได้

บางส่วนอาจจะเกี่ยวกับ UI (เช่น พอ CSS ไม่โหลด ตำแหน่งของแบบฟอร์มที่จะต้องกรอกก็สับสน) แต่ยังมีส่วน UX ด้วย ที่ประสบการณ์ตั้งแต่ต้นจนจบกว่าจะต่อเน็ตได้มีอุปสรรคพอสมควร ซึ่งถ้ายังยืนยันจะใช้ Facebook Wi-Fi อยู่ คงต้องหาทางไปตั้งค่าให้ถูกต้องและรองรับผู้ใช้ที่มีความต้องการหรือข้อจำกัดแตกต่างกันไป

นี่คือเครือข่ายไวไฟที่พบที่บริเวณห้องสมุดชั้น 5 ของ TCDC (จับภาพหน้าจอมาเมื่อ 19 พ.ค. 2560 ประมาณ 14:30)

TCDC wifi list

Guest@TCDC เป็นเครือข่ายสำหรับผู้ใช้ทั่วไป ส่วน Member@TCDC นั้นสำหรับสมาชิก (บุคคลทั่วไป 1,200 บาท/ปี นักศึกษา 600 บาท/ปี) เนื่องจากเรายังไม่ได้เป็นสมาชิก ก็ลองเลือก Guest@TCDC

ซึ่งก็เหมือนกับการเข้าใช้เครือข่ายไวไฟสาธารณะทั่วไป ที่เราคาดได้ว่าจะมีหน้าจอล็อกอินขึ้นมา ให้ใส่ชื่อหรือรหัสเพื่อเข้าใช้ ของ Guest@TCDC ก็จะเด้งหน้าจอนั้นขึ้นมา เพียงแต่มันจะแสดงคำเตือนนี้มาคั่นก่อน

Cannot verify identity of the log in page

ซึ่งหมายความว่า เว็บเบราว์เซอร์ของเรา ไม่สามารถตรวจสอบได้ว่า หน้าเว็บสำหรับการล็อกอินซึ่งอ้างว่าอยู่ที่หมายเลขไอพี 172.16.170.13 นั้น อยู่ที่หมายเลขไอพีดังกล่าวจริงๆ หรือไม่ เนื่องจากใบรับรอง (certificate) ที่เว็บเบราว์เซอร์ได้รับจากหน้าจอล็อกอิน เป็นใบรับรองที่ไม่ได้รับความน่าเชื่อถือ

ถ้ากด “Show Certificate” เพื่อดูรายละเอียดก็จะพบว่า เป็นใบรับรองที่ออกโดย Root Certificate Authority (Root CA – หน่วยงานออกใบรับรองระดับบนสุด) ที่ชื่อว่า cmx.cisco.com และจะหมดอายุวันที่ 12 ตุลาคม 2560 เวลา 01:59:08 (UTC+7) แต่เว็บเบราว์เซอร์ของเรา ไม่เชื่อถือ Root CA รายนี้ มันก็เลยขึ้นคำเตือน

เครือข่ายไวไฟ Member@TCDC ก็พบปัญหาเดียวกัน

ถ้าอยากจะใช้งานเครือข่ายไวไฟ ก็จำเป็นต้องไปให้ถึงหน้าล็อกอินให้ได้ จะไปให้ถึงหน้าล็อกอิน ก็ต้องยอมกด “Continue” ไป ทั้งๆ เราไม่แน่ใจว่ามันปลอดภัยหรือไม่ หรือจะเกิดอะไรขึ้นหลังจากนี้

พอกด Continue ไปแล้ว จะเจอหน้าจอให้ “เช็กอินบน Facebook เพื่อรับการเข้าถึงอินเทอร์เน็ตฟรี”

แต่หน้าจอเช็กอิน/ล็อกอินนี้ จะสับขาหลอกนิดหน่อย เพราะช่องล็อกอินที่เราเห็นเด่นๆ มันไม่ใช่อันที่จะต้องใช้ เราต้องเลื่อนหน้าลงไปอีก ถึงจะเจอฟอร์มที่ใช่ (ปัญหาอาจจะมาจากการที่ CSS ไม่ยอมโหลดด้วย – แต่ลองทั้งมือถือและเดสก์ท็อปก็เป็นเหมือนกัน)

เลื่อนหน้าจอล็อกอินลงมาหน่อย จะเจอคำว่า “หากต้องการเช็กอิน ให้สมัครใช้งาน Facebook วันนี้ หรือคลิกที่ลิงก์ ‘ข้ามการเช็กอิน’ ข้างล่างนี้” ให้มองหาลิงก์ “เข้าสู่ระบบ” (มันจะอยู่ติดกับลิงก์ “สมัครใช้งาน” เลย วรรคก็ไม่ยอมเว้น) พอคลิกที่ลิงก์ “เข้าสู่ระบบ” มันจะนำเราไปที่หน้าล็อกอินที่ถูกต้อง

(ลิงก์ “ข้ามการเช็กอิน” นั้นไม่สามารถคลิกได้ – ส่วนช่องที่เขียนว่า “ป้อนรหัส Wi-Fi” นั้นก็ใช้ไม่ได้ สอบถามเจ้าหน้าที่ TCDC แล้ว ไม่มีการออกรหัสให้ใช้กับช่องนี้)

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

ถ้ามาถึงหน้าจอนี้ หมายถึงใกล้สำเร็จแล้ว แต่เราจะเจอปัญหากับใบรับรองเหมือนกับที่เราเจอไปแล้วทีหนึ่ง ตรงนี้เว็บเบราว์เซอร์จะแจ้งว่ามันไม่สามารถยืนยันได้ว่าหน้าจอนี้ที่อ้างว่ามาจากหมายเลขไอพี 1.1.1.1 นั้นเป็นอย่างที่อ้างจริงๆ ถ้าเราเชื่อใจ อยากไปต่อ ก็ให้กด “Continue” อีกทีหนึ่ง

บนมือถือ (iOS) จะเป็นแบบนี้

Canno Verify Server Identity "1.1.1.1"

ถ้ากด “Continue” ก็จะมีหน้าจอให้เช็กอิน ประกาศให้โลกรู้ว่าเรามาอยู่ที่ TCDC แล้วนะ พอเราเช็กอินเสร็จ ก็จะใช้อินเทอร์เน็ตได้แล้ว

สรุป

พบว่าการเข้าใช้เครือข่ายไวไฟ Guest@TCDC นั้นเป็นประสบการณ์ที่ยากลำบากมาก โดยปัญหาที่พบคือ

  • พบปัญหาใบรับรองออกโดย CA ที่เว็บเบราว์เซอร์ไม่ให้การยอมรับถึง 2 ครั้ง ทั้งช่วงก่อนหน้าจอล็อกอินและช่วงใกล้จะล็อกอินสำเร็จ
    • ผู้ใช้ทั่วไปอาจจะทำตัวไม่ถูกว่าให้ทำอย่างไรต่อ เพราะข้อความเตือนของเว็บเบราว์เซอร์อาจเข้าใจยาก
    • กรณีผู้ใช้ TCDC ถูกสอนว่า “ไม่ต้องสนใจ คลิก Continue” ไปเลย ก็จะเป็นการส่งเสริมพฤติกรรมเสี่ยงให้กับผู้ใช้ โดยอาจเข้าใจไปว่า ต่อไปหากเจออาการแบบนี้อีกไม่ว่ากับเครือข่ายไหน หากอยากไปต่อ ก็ให้กด “Continue” เสีย ก็จะแก้ปัญหาได้ พฤติกรรมเช่นนี้ทำให้ผู้ใช้อาจตกเป็นเหยื่อของอาชญากรรมคอมพิวเตอร์หรือข้อมูลส่วนบุคคลถูกขโมยได้
    • ปัญหาใบรับรองนี้ พบว่าไม่ได้เป็นเฉพาะกับหน้าจอล็อกอินไวไฟของ TCDC หน้าเว็บไซต์หลักของ TCDC ก็มีปัญหานี้ด้วย 🙁TCDC Bad Certificate
  • หน้าจอ Facebook Wi-Fi ในบางกรณี อาจแสดงผลไม่ชัดเจนเพียงพอ ว่าผู้ใช้จะต้องกรอกแบบฟอร์มล็อกอินอันไหน ผู้ใช้ไม่สามารถรู้ได้เองอย่างชัดเจน ว่าจะต้องเลื่อนหน้าจอลงมาเพื่อคลิกลิงก์ “เข้าสู่ระบบ” เพื่อจะไปยังหน้าจอล็อกอินอีกอัน ซึ่งจะสามารถนำไปสู่การเช็กอินและใช้อินเทอร์เน็ตได้
  • ใครไม่มีบัญชีเฟซบุ๊กจะใช้อินเทอร์เน็ตผ่านเครือข่าย Guest@TCDC ไม่ได้ เนื่องจากผู้ใช้จะต้องล็อกอินเฟซบุ๊กก่อน
    • หรือถ้าวันไหนเฟซบุ๊กล่มหรือถูกปิดไป ก็อาจจะล็อกอินไม่ได้เหมือนกัน
    • เจ้าหน้าที่ Info Guru ที่ TCDC ยืนยันว่าไม่มีรหัสให้ป้อนเพื่อข้ามการล็อกอินเฟซบุ๊ก
  • ผู้ใช้ถูกบังคับให้ต้องเช็กอิน เนื่องจากลิงก์ “ข้ามการเช็กอิน” ใช้งานไม่ได้  ซึ่งก็คงไม่ใช่ผู้ใช้ทุกคนที่รู้สึกสะดวกเช็กอินหรือรู้วิธีการตั้งค่าโพสต์เช็กอินให้เป็นส่วนตัว (สำหรับ Facebook Wi-Fi เจ้าของหน้าเฟซบุ๊กอย่าง TCDC สามารถตั้งค่า “โหมดบายพาส” ให้ผู้ใช้ไม่ต้องเช็กอินก็ได้ แค่ล็อกอินเฟซบุ๊กก็พอ)
    • สอบถามเจ้าหน้าที่เพิ่มเติม ได้ข้อมูลว่า ถ้าเป็นบนมือถือ จะข้ามได้ แต่เท่าที่ลองบนเดสก์ท็อปข้ามไม่ได้
  • กรณีผู้ใช้ใช้การยืนยันตัวตนแบบสองชั้นและล็อกอินผ่านมือถือเครื่องเดียวกัน จะมีเวลาไม่เกิน 30 วินาทีในการล็อกอิน เนื่องจากถ้าสลับหน้าจอมาเพื่อดูโค้ด หน้าล็อกอินจะหายทันที
  • แถม: พบว่าโปรแกรมอีเมล (อย่าง Mail บน macOS กับ iOS หรือ Thunderbird) ใช้ไม่ได้ พอร์ต 993 (SSL/TLS encrypted IMAP) และ 465 (SSL/TLS encrypted SMTP) ถูกปิด และแอปแชต Signal ก็ใช้ไม่ได้

ข้อเสนอแนะ

  • ที่แก้ไขได้โดยไม่ต้องรอฝ่ายนโยบายนัก เพราะน่าจะเป็นเรื่องการตั้งค่าเครือข่าย คือเรื่องใบรับรองและเรื่องหน้าจอล็อกอิน กรณีใช้ Cisco น่าจะลองดูเอกสารตรง Clients Redirected to External Web Authentication Server Receive a Certificate Warning กับ Cisco Wireless 1.1.1.1/login.html redirect issues (ผมไม่มีความรู้เรื่องการติดตั้งระบบเครือข่ายใดๆ นี่เป็นการลองค้นข้อมูลเบื้องต้นเท่านั้น)
  • ปัญหาการโหลด CSS ไม่ขึ้น ส่งผลให้การใช้งานหน้าจอล็อกอินสับสน ควรหาทางแก้ไข (ผมไม่แน่ใจว่าเกิดเพราะอะไร)
  • ควรอย่างยิ่งที่จะมีทางเลือกให้ผู้ที่ไม่ได้ใช้เฟซบุ๊ก หรือไม่สะดวกจะล็อกอินด้วยเฟซบุ๊ก (เช่นติดปัญหาการยืนยันตัวตนแบบสองชั้น) ให้สามารถกรอกรหัสไวไฟเพื่อเข้าใช้งานได้ (เลือกใน Facebook Wi-Fi ได้)
  • ควรมีทางเลือกให้ผู้ใช้เฟซบุ๊กหลังจากล็อกอินแล้วไม่จำเป็นต้องเช็กอินก็ใช้งานได้ (เลือกใน Facebook Wi-Fi ได้)
  • พิจารณาเปิดพอร์ตพื้นฐานอย่างอีเมล (IMAP, POP, SMTP)

ใครมีโอกาสก็มาลองใช้งานดูครับ TCDC ใหม่ ทางเข้าห้องสมุดอยู่ชั้น 5 หลังจากนี้ถ้าไม่ใช่สมาชิก ก็ใช้บริการได้ โดยจ่ายค่าบริการรายวัน 100 บาท/วัน มีโต๊ะทำงาน มีปลั๊กไฟ มีไวไฟ (ถ้าเข้าได้) ถูกกว่าไปนั่งร้านกาแฟอีก (ถ้าไม่รวมค่ารถ :p) นอกจากนี้ยังมีส่วนนิทรรศการ Maker Space และส่วนอื่นๆ อีก

อ้อ นอกจากที่กรุงเทพ ที่เชียงใหม่ก็มี TCDC นะ และที่ขอนแก่นก็กำลังจะเปิด (ตอนนี้มี mini TCDC อยู่ในมหาวิทยาลัยขอนแก่นอยู่แล้ว)

[27 ก.ค.] ตะลุยแปล #Tor เป็นไทย เสาร์นี้

แปล Tor เป็นไทย

ชวนชาวเน็ตมาช่วยแปลโปรแกรม Tor เป็นภาษาไทยกันครับ 🙂

เสาร์ 27 กรกฎา ประมาณ 10 โมงเช้าไปจนถึง 5 โมงเย็น
ที่ร้านกาแฟ Tom N Toms สยามเซ็นเตอร์ [Facebook event]

Tor (The Onioin Router) เป็นโปรแกรมที่ช่วยให้เราใช้งานอินเทอร์เน็ตได้ปลอดภัยขึ้น และลดโอกาสการถูกดักฟังขโมยข้อมูลจากผู้ไม่หวังดี มีวิธีการใช้ไม่ยุ่งยากนัก แต่อุปสรรคสำคัญอย่างหนึ่งสำหรับผู้ไม่คุ้นเคยคือ หน้าจอโปรแกรมยังเป็นภาษาอังกฤษอยู่ ซึ่งการแปลเป็นไทย ก็จะช่วยให้คนอีกมากเข้าอินเทอร์เน็ตได้อย่างปลอดภัยครับ

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

โดยรวมตอนนี้แปลไปแล้ว 46% และยังรอตรวจคำแปลอยู่อีกครับ

ตั้งค่า Nexus 4 ให้ใช้เน็ตบน AIS 3G 2100

ติดตั้ง APN เพื่อใช้อินเทอร์เน็ต/MMS บนเครือข่ายใหม่ AIS 3G 2100 MHz สำหรับ Nexus 4 (LG, Android 4.2.2) — ในเว็บ AIS จะไม่มีข้อมูลรุ่นนี้ (โทรถาม call center เขาก็ดูตามในเว็บ) แต่ลองเซ็ตตามนี้แล้วเวิร์กครับ

ขั้นตอนคร่าวๆ มี 3 สเต็ป

  1. อันดับแรก ลงทะเบียนใช้บริการก่อน โดยไปที่หน้าจอโทรออก กด *988*เลขที่บัตรประชาชน*1175# แล้วกดโทรออก
  2. สักพักจะได้รับ SMS ตอบกลับ เมื่อได้รับแล้วก็ปิดเครื่อง เปิดใหม่
  3. เพิ่ม APN ใหม่ เพื่อให้ใช้เน็ต-รับส่ง MMS บนเครือข่าย 2100 MHz ได้ (เราจะเพิ่ม APN 2 ตัว ตัวนึงของเน็ต อีกตัวของ MMS) โดยไปที่ Settings -> More… -> Mobile networks -> Access Point Names

การไปที่หน้า Access Point Names เพื่อเพิ่ม APN ดูตามรูปนี้ (คลิกเพื่อดูรูปใหญ่) ส่วนการใส่ค่าต่างๆ ของแต่ละ APN ดูด้านล่างครับ
ตั้งค่า AIS 3G 2100 บน Nexus 4

เพิ่ม APN Internet

ในหน้า Access Point Names ที่เมนูมุมขวาบน กดเลือก New APN แล้วใส่ข้อมูลตามนี้

Name (ชื่อ)
AIS Internet
APN
internet
Authentication type (ประเภทการรับรอง)
CHAP
APN type (ชนิด APN)
default

เสร็จแล้วกด Save (บันทึก)

เพิ่ม APN MMS

ในหน้า Access Point Names ที่เมนูมุมขวาบน กดเลือก New APN แล้วใส่ข้อมูลตามนี้

Name (ชื่อ)
AIS MMS
APN
mms
MMSC
http://mms.ais.co.th
MMS proxy (MMS พร็อกซี)
203.170.229.34
MMS port (พอร์ต MMS)
8080
Authentication type (ประเภทการรับรอง)
CHAP
APN type (ชนิด APN)
mms

เสร็จแล้วกด Save (บันทึก)

เท่านี้ก็น่าจะใช้ได้แล้วครับ

**ข้อควรระวังสำหรับผู้จะเดินทางไปต่างประเทศและจะใช้ roaming คือ ตอนนี้ตัวเครือข่าย AIS 3G ยังไม่รองรับ roaming ครอบคลุมเท่ากับเครือข่าย AIS เดิม ก่อนเดินทางควรโทรเช็คศูนย์ก่อนครับ

ข้อมูลจาก AIS 3G 2100 (ใช้ตาม Galaxy Nexus)

มากกว่าการแปล, localization คือการปรับเข้าถิ่น

ผมเริ่มงานแรกหลังเรียนจบตรี ในอุตสาหกรรมซอฟต์แวร์ (จริงๆ เริ่มก่อนจบน่าจะสามเดือนได้ ซึ่งงานนี่ก็เกือบทำให้ไม่จบ :p) งานที่ทำอยู่ในหมวด “software localization” หรือเรียกย่อๆ ว่า L10n (L ตามด้วยอักษรอีกสิบตัว ปิดท้ายด้วย n)

software localization ไม่ใช่แค่การแปลซอฟต์แวร์ให้ใช้ภาษาถิ่น แต่ต้องปรับให้เข้ากะท้องถิ่น (locale) ด้วย

เช่น มาตรฐานเข้ารหัสและจัดเก็บตัวอักษร (ยูนิโค้ด สมอ. ASCII JIS)

การจัดเรียงลำดับข้อมูล (เอาอะไรมาก่อนหลัง พยัญชนะ สระ วรรณยุกต์ ตัวไหนสำคัญกว่าตอนเรียง)

ระบบปฏิทิน (ศักราช การนับวันแรกของสัปดาห์ วิธีเรียกวัน การเขียนวันที่เอาวันหรือเดือนมาก่อน วันหยุดประจำปี เวลา 24 ชั่วโมงหรือ am/pm เขตเวลา ปรับเวลาออมแสงเมื่อใด)

ระบบจำนวนและระบบนับ (เลขไทย เลขอารบิค การออกเสียงจำนวน “211 -> สองร้อยสิบเอ็ด” การรันเลขรายการ “๑) ๑.๑) ๑.๑.ก)” เครื่องหมายบอกหลัก “1,000.00 vs 1.000,00”)

หน่วยชั่งตวงวัด (อิมพีเรียลหรือเมตริก ใช้กระดาษแบบ Letter หรือ A4) หน่วยเงิน (บาท-สตางค์ ดอลลาร์-เซนต์)

รูปแบบการเขียนชื่อ คำนำหน้า ที่อยู่ ไปรษณีย์ เลขหมายโทรศัพท์

เครื่องหมาย สัญลักษณ์พื้นฐาน สี (ถูก-ผิด ใช่-ไม่ใช่ O X / อัญประกาศเปิดปิด) และอีกมาก

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

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

การทำให้ซอฟต์แวร์สามารถทำ localization ได้สะดวก เรียกว่าการทำ internationalization หรือ i18n เป็นการเตรียมความพร้อมให้ซอฟต์แวร์ไม่ “taken for granted” เหมารวมไปว่าสิ่งคุ้นชินทางวัฒนธรรมของโปรแกรมเมอร์นั้น คนอื่นๆ ในโลกจะใช้แบบนั้นไปด้วย

โปรแกรมรุ่นใหม่ๆ ในช่วงสิบปีที่ผ่านมา ออกแบบมาโดยคำนึงถึงเรื่องนี้มากขึ้น ส่วนหนึ่งก็ต้องขอบคุณภาษาโปรแกรม เครื่องมือพัฒนา และระบบปฏิบัติการรุ่นใหม่ๆ ที่ทำให้การเขียนโปรแกรมแบบ i18n สะดวกขึ้น ซึ่งก็ทำให้ทำ L10n ได้ง่ายตามไปด้วย

ในเมืองไทย คนที่ทำเรื่องนี้มานานก็เช่น @theppitak @htk999 @untsamphan @pruet @nanusorn ทำมาตั้งแต่สมัยบุกเบิก ยังไม่มีมาตรฐานสากลเรื่องนี้มากนัก ต้องทำโครงสร้างพื้นฐานขึ้นเองเลย คนเหล่านี้จำนวนมากมีความสัมพันธ์ในทางหนึ่งทางใดกับ NECTEC

อีกรุ่นถัดมาก็เป็น @markpeak @veer66 @kengggg @pittaya ฯลฯ ที่ทำบนฐานของซอฟต์แวร์ที่ออกแบบเรื่อง i18n มาไว้ค่อนข้างดีแล้ว และมาตรฐานอุตสาหกรรมหลายอย่างในเรื่องนี้ก็นิ่งแล้ว

จริงๆ ไม่ต้องพูดถึงเรื่องซอฟต์แวร์อะไรให้ยุ่งยาก เฉพาะการแปลข้อความปกติ ในวิธีคิดแบบ L10n ก็ควรจะแปลแบบปรับเข้าถิ่น ให้สามารถสื่อความความหมายที่ต้องการไปสู่วัฒนธรรมนั้นๆ ได้ ไม่จำเป็นต้องแปลแบบตามอักษร

ภาพนี้เอามาจากเว็บไซต์ไมโครซอฟท์ ที่ชวนคนให้ไปใช้ SkyDrive อย่าใช้ Dropbox เลย

ในราคาเพียง $10/ปี ซึ่งอาจจะถูกกว่าค่าอาหารกลางวันอีกนะ

จะเห็นว่า เป็นการแปลแบบรักษาต้นฉบับไว้ดีมาก แต่มันไม่ลงตัวเท่าไหร่กับถิ่นไทย หน่วยเงินยังเป็นดอลลาร์ และพอแปลงตัวเลขมาเป็นบาทก็ร่วม 300 ซึ่งก็ไม่เมกเซนซ์กับราคาข้าวกลางวันในเมืองไทย (ที่สามร้อยบาทนี่คือค่าแรงขั้นต่ำ :p)

กะจะแค่แคปมาให้ดูเล่นๆ ดันเขียนซะยืดยาว ถือว่าแชร์กันละกัน

เรื่อง “taken for granted” เหมาว่าคนอื่นก็คงคิดเหมือนเรา ทำแบบเรานี่แหละ และเรียกร้องให้ผู้ใช้ปรับตัวให้เข้ากับ “ผลิตภัณฑ์” ที่เราออกแบบ เป็นเรื่องที่เห็นกันทั่วไป ไม่เฉพาะในวงการซอฟต์แวร์

—-
โพสต์ครั้งแรกที่เฟซบุ๊ก Art Bact’

อแดปเตอร์แมค

“กูเดินวนไปวนมาหาที่นั่งใน TCDC ไอ้พวกใช้แมคนี่มันเป็นอะไร ปลั๊กแม่งมีสองเต้าเสียบ มึงก็ต้องเสียบแบบให้อแดปเตอร์มึงบังไอ้รูที่มึงไม่ได้เสียบไปด้วย กูเดินสามที่เจอสามที่ หันอแดปเตอร์ไปอีกข้างแล้วพ่อมึงจะตายรึไงวะ”

มิตรสหายท่านหนึ่งกล่าว

นึกไม่ออกว่าจะดื่มเบียร์อะไร? Google ช่วยได้!

beers! beers! beers!

เปิด Google Spreadsheet ขึ้นมา
ใส่คำว่า “lager” ที่เซลล์ A1
ใส่คำว่า “ipa” ที่เซลล์ A2
ไฮไลต์ทั้งสองเซลล์นั้น แล้วลากลงมา โดยที่กด Ctrl หรือ Option ค้างอยู่

มันจะ auto-fill เป็นชื่อเบียร์ชนิดต่างๆ ครับ

นี่สิครับ เทคโนโลยีเพื่อมนุษยชาติ!!

Google Auto-Fill

มันเป็นส่วนหนึ่งของฟีเจอร์ Auto-Fill น่ะครับ โดยข้อมูลพวกนี้เคยอยู่ใน Google Sets มาก่อน ลองดูกับชื่อรัฐ ชื่อประเทศ ยี่ห้อรถ ได้เหมือนกัน

via TechCrunch

อันนี้เด็ด

ชวนสมัคร Mekong ICT Camp [หมดเขต 28 ก.พ.] #ICT4D

Five-days workshop on ICT for development. 6-10 May 2013. Cha-Am, Thailand. Scholarships available. Deadline is 28 Feb 2013.

ค่ายอบรมไอซีทีเพื่อการพัฒนา ที่อุทยานสิ่งแวดล้อมนานาชาติสิรินธร มีทุนให้ครับ สมัครด่วนถึงสิ้นเดือนกุมภานี้

Mekong ICT Camp is a mix of activism, policy advocacy, and hacking.

In 2010, we built a low-power radio transmitter from scratch and in the same week we learned about political discourses in telecom spectrum allocation.

This year theme is about DATA. Big data. Open data. Linked data.

From grassroots movement in opening up the data to using the data for policy advocacy.

Applications are open to everybody who working in or for countries in Mekong sub-region.

Apply now at http://mekongict.org/apply/

—-

Facebook: MekongICT
Twitter: @mekongict