वीर | บันทึกของวีร์ | Vee(r)'s Blog

ธันวาคม 21, 2009

โทรศัพท์มือถือแบบที่อยากได้

Filed under: Phone — ป้ายกำกับ:, , — वीर @ 7:20 pm

โทรศัพท์มือถือ ผมคิดว่าเรียกว่าอุปกรณ์โทรคมนาคมแบบพกพา น่าจะตรงกว่าแต่ก็คงจะฟังดูคลั่งไป ถึงมีตาม specs แบบนี้ก็ไม่ใช่ว่าจะซื้อนะครับ ก็แค่จิตนาการ

  1. มี GPS หรือต่อ GPS ผ่าน Bluetooth ได้
  2. มี Geotagging
  3. รองรับ JSR 179
  4. กล้อง auto focus
  5. มีไฟฉายช่วยถ่ายรูป
  6. ถ่ายระยะใกล้สุดได้ใกล้กว่าหรือเท่ากับ 10 เซนติเมตร (ถ้าได้ 5 เซนติเมตรก็จะดี)
  7. เสียบหูฟัง 3.5 มิลลิเมตรได้
  8. Touchscreen
  9. Qwerty keyboard แบบ touchscreen
  10. ไม่มี keyboard จริงๆ
  11. ไม่มีกลไกที่ต้องพับหรือ slide
  12. รองรับภาษาไทยทั้งเวลาพิมพ์ และข้อความต่างๆ ในโทรศัพท์ อ่านภาษาลาวได้ด้วยก็ดี
  13. รองรับ EDGE
  14. ใช้เป็นไฟฉายได้ (แบบ Nokia 1200)
  15. ราคาต่ำกว่า 5000 บาท

เท่าที่เห็น Nokia 5800 กับ 5530 เกือบได้ แต่ราคาแพงไป 4000-5000 บาท ไม่มี geotagging มากไปกว่านั้นไม่แน่ใจว่าเปิดไฟฉายแบบ Nokia 1200 ได้หรือเปล่า

แผนที่เสรี

Filed under: Light IT — ป้ายกำกับ:, , , , , , — वीर @ 5:58 pm

แผนที่บนเว็บเยอะแยะตัวที่ดังที่สุดหรืออย่่างน้อยที่ผมคิดว่าดังที่สุดก็คือ Google Maps ส่วน Wikimapia เป็นแผนที่ที่ใช้ Google Map มาต่อยอดแต่อำนวยความสะดวกให้คนวาดแผนที่ทับลงไปง่ายขึ้น นอกจากนั้นก็ยังมี Ovi Maps ของโนเกีย ไมโครซอฟต์ก็มี Bing Maps ของยาฮูมี Yahoo Maps หรือแม้แต่แผนที่สำหรับรูปภาพโดยเฉพาะของ flickr แผนที่พวกนี้ถ้่าดูไปก็เห็นแบ่งเป็น 2 ค่ายคือ Google กับ Navteq ส่วนมากใช้แผนที่ของ Navteq ที่เป็นของโนเกียอีกที

เดี๋ยวนี้โทรศัพท์รุ่นใหม่ๆ ที่มี GPS ติดมาด้วยราคา 110 Eur (ประมาณ 5300 บาท) หรือ GPS Receiver ราคาก็เหลือ 3290 บาท เมื่อระบุตำแหน่งได้ง่าย ในราคาไม่แพงจนเกินไป ผมก็เชื่อว่าคนที่จะปักหมุดระบบสถานที่ (Point of interest; POI) ในปีหน้าคงเพิ่มขึ้นอีกมาก

ข้อมูลว่าอะไรอยู่จุดไหน (Point of interest; POI) เป็นข้อมูลที่มีค่า ถ้าสามารถช่วยกันสร้างขึ้นมาได้จำนวนมาก เท่าที่ผ่านมาหลายอย่างก็แสดงให้เห็นว่ามันเป็นไปได้จริง เช่น โครงการหาร้านกาแฟของชาว Blognone ผมว่าข้อมูลพวกนี้มันกระทบโดยตรงกับธุรกิจโดยเฉพาะการท่องเทีี่ยว ร้านอาหาร อะไรทำนองนั้น

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

  • ถ้าหากจะมีคนเอาไปใช้ เช่น ดาวโหลดแผนที่ทั้งหมดลงไปในอุปกรณ์นำทาง ชนิดที่ว่าไม่ต้องกลับมาต่อเน็ตอีกเวลาไปเที่ยวต่างประเทศ จะทำได้หรือเปล่า? หรือว่าต้องเสียค่าเน็ตตลอด
  • หรือมากไปกว่านั้นฐานข้อมูลสถานที่ทุกคนควรจะเอาข้อมูลนั้นไปประมวล เช่น นับว่าตำบลเชิงเนินมีร้านอาหารทั้งหมดกี่ร้าน ฯลฯ ทุกคนควรจะมีสิทธิเอาข้อมูลไปเขียนโปรแกรมนับได้ตรงๆ หรือไม่ หรือว่าจะทำได้แค่ผ่าน Web API ที่จำกัด
  • วันดีคืนดีบริษัทที่ให้บริการแผนที่จะพับฐานไป หรือว่าเก็บเงิน หรือใส่โฆษณาตามใจชอบ เวลาที่เราอยากไปดูหมุดที่เพื่อนของเราไปไว้หรือไม่
  • ถ้าเพื่อนของเราปักหมุดใน Ovi Maps แต่ว่าเราใช้ Google Maps แล้วจะแบ่งปันกันได้อย่างไร หรือว่าต้องปักทุกที่ หรือจะต้องส่งเสริมให้ใครผูกขาดไป

จากเป็นเด็นปัญหา 4-5 ข้อที่ผมยกขึ้นมากแบบไม่เป็นระบบนัก ผมคิดว่าบริการแผนที่ที่ผมอยากจะช่วยให้ข้อมูลควรมีคุณสมบัติดังนี้

  1. เพิ่มข้อมูลใหม่เข้าไปได้ง่ายและยืดหยุ่น
  2. ระบุเจ้าของชัดเจน ระบุว่าเอาไปทำอะไรได้บ้าง (สัญญาอนุญาต; License) โดยต้องอนุญาตให้เอาไปใช้ต่อได้ แก้ไขดัดแปลงได้ ข้อนี้เพื่อที่ว่าผมจะได้เอาไปใช้เองได้ เผื่อมีพก มี navigator พกเอาไปใช้ต่างประเทศที่ค่าเน็ตแพง (แต่ตอนนี้ยังไม่มี) จะได้เอาแผนที่ไปใช้ได้เลย นอกจากนั้น Google Maps, Ovi Maps หรือแผนที่อื่นๆ ก็ควรเอาข้อมูลนี้ไปใช้ได้ด้วย
  3. นำข้อมูลออกมาให้ประมวลผลได้ง่าย

คุณสมบัติ 3 ข้อนี้ข้อ 1 (เพิ่มข้อมูลใหม่เข้าไปได้ง่ายและยืดหยุ่น) เหมือนกับว่าจะไม่มีเว็บไหนที่ตกรอบเลย มี wikimapia ที่ใช้มานานที่เจ๋งเป็นพิเศษ เพราะทำอะไรได้มากกว่าปักหมุด แต่วาดเป็นพื้นที่ได้เลย OpenStreetMap ก็เด่นขึ้นมาเพราะถึงขนาดวาดถนนเองได้ด้วย คุณสมบัติข้อ 2 (เรื่องสัญญาอนุญาต) ก็เหลือ OpenStreetMap และ Placeopedia ที่เข้ารอบมา คุณสมบัติข้อที่ 3 (เรื่องการนำข้อมูลออกไปใช้) ทำให้เหลือ OpenStreetMap เข้าข่ายอยู่เว็บเดียวเพราะเห็นปุ่ม export ชัดเจนมากๆ

ผมจะใช้ OpenStreetMap นี้ล่ะ OpenStreetMap ตอนนี้ใช้ license แบบ creative common และแผนที่ก็เป็นของ contributor [อ่านเพิ่ม] มีโครงการเฉพาะของประเทศไทยด้วย เข้าใจว่าคงทำมาพักใหญ่แล้ว ถ้าจำไม่ผิดจำได้ว่าดร.ชิษณุใช้ด้วย ตั้งแต่ปีที่แล้ว

ยังไงก็ฝาก OpenStreetMap http://www.openstreetmap.org/ ไว้ด้วยแล้วกันครับ :-)

ธันวาคม 16, 2009

ขึ้นรถตู้สาย 555 จากสนามบินสุวรรณภูมิ

Filed under: Street — ป้ายกำกับ:, , , , — वीर @ 8:13 am

เดิมทีที่เคยมีปริศนาประตู 3 เดี๋ยวนี้ก็ไม่มีแล้วครับ ป้ายชี้ไปที่ประตู 8 ชัดเจน เลิศมาก

ป้าย

ออกไปก็เจอรถตู้จริงๆ แม่นยำชัดเจน

A van route no. 555 from suwannabhumi airport

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

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

ธันวาคม 11, 2009

อัพเดทข่าว: ราชนาวีระยอง

Filed under: Football — ป้ายกำกับ:, , , , , — वीर @ 10:57 pm

สถานการณ์ของราชนาวีระยองหลังจากรอดตกชั้นมาได้ ก็ดูอึมครึมอยู่พักใหญ่ ยิ่งเห็นไฟฟ้ากับอยุธยาแล้วยิ่งเสียว ผมก็ตามข่าวจากเว็บบ้างจากทวิตเตอร์ของ @thailandpl บ้าง ข่าวส่วนใหญ่ก็มาจาก Siamsport ต้องขอบคุณด้วยสำหรับข่าวที่ข่าวสารข้อเท็จจริง

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

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

ธันวาคม 6, 2009

เกี่ยวข้าวเจอหนอน

Filed under: Agriculture — ป้ายกำกับ: — वीर @ 11:14 pm

วันนี้ไปเกี่ยวข้าวชัยนาท 80 ต้นเตี้ยมากแทบจะนอนเกี่ยว เกี่ยวไปเกี่ยวมาเจอหนอนด้วย แต่ว่าก็เจอตัวเดียวคงไม่เป็นปัญหามากเหมือนหอยเชอรี

หนอนในนา

ธันวาคม 4, 2009

หนังสือโลโม และหนังสือเพ็น

Filed under: Light IT — ป้ายกำกับ:, , — वीर @ 7:29 pm

วันนี้เดินผ่านร้านหนังสือ ก็ชวนให้คิดว่าถ้าหากว่า e-book reader ทั้งหลาย ที่ใช้ e-ink อ่านสบายตา เกิดขาดิบขายดีขึ้นมาแถมยังราคาถูก ต่อไปจะเป็นไปได้หรือเปล่าว่า คนก็จะไม่ต้องมาเดินซื้อหนังสือกันแล้ว ห้องสมุดคนก็มายืมกันน้อยลง คล้ายๆ กับที่เดี๋ยวนี้ไม่ค่อยได้ซื้อซีดีเพลงแล้ว แต่ซื้อเว็บ เช่น mixiclub แทน

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

หรือว่าจะมี e-book แบบ Olympus Pen ชื่อเหมือนเดิม หน้าตาคล้ายๆ เดิมแต่กลายเป็นกล้องดิจิทัล ก็เลยคิดไปว่าต่อไปจะมี e-book หน้าตาเหมือนหนังสือแบบโบราณๆ ออกมาหรือเปล่า

ก็แค่คิดๆ ไปขำๆ ไม่ได้มีสาระอะไร

ธันวาคม 1, 2009

double click เพื่อเลือกคำเดียวใน Firefox

Filed under: Software development — ป้ายกำกับ:, , , , , — वीर @ 4:01 pm

ปกติกด double click ไปบน text แล้วมันควรเลือกคำเดียว แต่ว่า Firefox เวลาเจอภาษาไทยกลับไปเลือกก้อนใหญ่ๆ ผมก็เลยถามไปที่ Thai Linux/FOSS developers <a href="http://thep.blogspot.com/"ป๋าเทพบอกว่าน่าจะเป็น bug 425915

วันนี้ผมก็เลยลองดูสักหน่อย สำหรับกรณีปัญหาที่เกิดจากการเลือกคำด้วย double click ผมคิดว่า code ส่วนที่จะแก้คือ layout/generic/nsSelection.cpp ใน method ชื่อ nsTypedSelection::selectFrames โดยก่อนที่จะเรียก textFrame->SetSelectedRange(startOffset, endOffset, aFlags, mType); ค่า endOffset น่าจะหาโดยใช้ nsIWordBreak::FindWord

แต่ว่า nsIWordBreak ตอนนี้มี implementation แต่ nsSampleWordBreak ที่มี comment ข้างในว่า

// need to call Thai word breaker from here
// we should pass the whole Thai segment to the thai word breaker to
find a shorter answer

แต่ว่าไฟล์นี้ก็สร้างมาตั้งนานแล้วยังไม่มีการแก้ไขอะไร

ผมรู้สึกไม่มั่นใจเท่าไหร่ที่ต้องไปเรียก nsIWordBreak เองใน nsTypedSelection::selectFrames อยากจะถาม ท่านอื่นๆ ว่าน่าจะใช้ทางนี้หรือเปล่า หรือว่า nsIWordBreak ไม่ควรใช้ ถ้าหากควรใช้ ควรจะเอาไปใส่ใน nsTypedSelection::selectFrames หรือเปล่า?

ผมก็ถามไปใน group ด้วย

วันนี้ก็เอาไว้แค่นี้ก่อน ดึงจังหวะรอดู comment นิดนึง

พฤศจิกายน 28, 2009

MySQL: insert ถ้ายังไม่มี

Filed under: SQL — ป้ายกำกับ:, , , , — वीर @ 1:48 am

ปกติใน MySQL (DBMS อื่นๆ ก็คงเหมือนกัน) ถ้าเราไป insert อะไรซ้ำๆ เข้าไปใน column ที่บังคับไว้ว่าต้อง unique มันก็จะเจ๊ง ก็เลยต้องมาดูก่อนว่ามีข้อมูลแล้วหรือยัง ค่อย insert แต่ว่าจะเขียน SQL อย่างไรให้สั้นๆ ง่ายๆ เท่าที่อ่านมาจาก http://bogdan.org.ua/2007/10/18/mysql-insert-if-not-exists-syntax.html ผ่านทาง http://stackoverflow.com/questions/1361340/how-to-insert-if-not-exists-in-mysql มาอีกที

ผมเลือกใช้ “on duplicate key update” เพิ่มใน insert เพราะเท่าที่อ่านมา 3 วิธีก็ วิธ๊นี้ก็ดูประหยัด และไม่ไปเพิกเฉยต่อ error อื่น ที่ไม่เกี่ยวข้อง

สมมุติว่าผมจะเพิ่ม 6 เข้าไปใน textunit_conflicts.textunit_id ก็เขียนแบบนี้

insert into textunit_conflicts value (6) on duplicate key update textunit_id = textunit_id;

textunit_id = textunit_id ก็เขียนไปไม่ให้มันผิด syntax เฉยๆ

พฤศจิกายน 24, 2009

Weak typing

Filed under: Software development — ป้ายกำกับ:, , — वीर @ 1:15 pm

ใน PHP เขียนแบบนี้

<?php echo 10 + "20"; ?>

ผลลัพธ์คือ

30

ใน Python เขียนแบบนี้

print 10 + "20"

ผลคือ

Traceback (most recent call last):
  File "weak.py", line 1, in
    print "10" + 20
TypeError: cannot concatenate 'str' and 'int' objects

เท่าที่ผมเข้าใจแบบนี้คือข้อแตกต่างกันระหว่าง strongly typing กับ weak typing ถ้าเป็น weak typing แทนที่มันจะสร้าง exception หรือรายงานความผิดพลาด หรือสร้าง exception ออกมา มันก็แปลง (cast) ให้เอง โดยที่ไม่ได้บอกอะไร

เพิ่มเติม 1: จากเหตุผลข้างบน ทำให้ type system ของ Python ไม่ใช่ weak typing เพราะว่ามันไม่แปลง type ให้ แต่โยน exception ออกมาแทน ต่างจาก PHP ที่ string กับ integer ก็บวกกันออกมาเป็น integer ได้

พฤศจิกายน 23, 2009

ลองใช้ XMLChid กับ UnigramTagger ของ NLTK

Filed under: NLP — ป้ายกำกับ:, , , , , , — वीर @ 9:09 pm

ทีแรกผมก็เขียน xmlchid_loader.py เพื่ออ่าน xmlchid.xml ให้อยู่ในรูปแบบ corpus ของ NLTK

from xml.sax import make_parser
from xml.sax.handler import ContentHandler

class Handler(ContentHandler):
    def __init__(self):
        self.corpus = []

    def startElement(self, name, attrs):
        if name == 'word':
            surface = attrs['surface']
            tag = attrs['pos']
            self.corpus[-1].append((surface, tag))
        elif name == 'sentence':
            self.corpus.append([])

def load_xmlchid(filename):
    parser = make_parser()
    handler = Handler()
    parser.setContentHandler(handler)
    parser.parse(filename)
    return handler.corpus

และก็ทีนี้ก็ไปเรียกใช้ UnigramTagger ตามฟอร์ม

#-*- coding: UTF-8 -*-
from xmlchid_loader import load_xmlchid
from nltk import UnigramTagger
corpus = load_xmlchid('xmlchid.xml')
corpus = filter(lambda sent: len(sent) > 0, corpus)
tagger = UnigramTagger(corpus)
result = tagger.tag([u'การ', u'ทำ', u'การบ้าน'])
result = map(lambda w: (w[0], "UNK") if w[1] is None else w, result)
print u" ".join([u"/".join(w) for w in result])

ผลลัพธ์ก็จะได้แบบนี้

การ/FIXN ทำ/VACT การบ้าน/UNK
เรื่องที่เก่ากว่า

บลอกที่ WordPress.com .