0

พยายามจะเขียนโปรแกรมไปแกะเว็บด้วย Perl

ลูกทุ่งมากอะนะ ไม่มีหลักการอะไรเลย แทบจะดึง tag a ออกมาทั้งหมดแล้วก็มาดู attribute ว่า link ไปหน้าที่ต้องการหรือเปล่า

หลักๆ แล้วใช้ HTML::TreeBuilder

คำสั่งที่สำคัญเลยคือ look_down เราใส่เงื่อนไขไปได้ว่าใช้ element ที่มีเงื่อนไขแบบที่เราต้องการหรือเปล่า มันจะ traverse tree ไปเรื่อยๆ

แต่เท่านี้ก็เหมือนยังไม่พอจะทำ RSS Feed เพราะมันยังดึงวันที่มาไม่ได้

ถ้าจะทำให้ generic ขึ้นอาจจะดู prefix ของ link แทน อยากลอง แต่ต้องอดใจไว้ก่อน

use strict;
use HTML::TreeBuilder;
use Data::Dumper;

my $filename = "news.htm";
my $tree = HTML::TreeBuilder->new;
$tree->parse_file($filename);
my @elements = $tree->look_down(
	sub {
		if(lc($_[0]->tag()) eq "a" && $_[0]->attr('onclick') ne undef) {
			my $onclick = $_[0]->attr("onclick");
			if($onclick =~ /^NewWindow\('publicshow/) {
				return 1;
			}
		}
		return 0;
	}
);
foreach my $element(@elements) {
	if($element->attr('onclick') =~ /^NewWindow\('(publicshow[^']+)/) {
		my $url = $1;
		my $topic = "";
		foreach my $c ($element->content_list) {
			if(ref($c) ne "HTML::Element") {
				if(!($c =~ /^\s*$/)) {
					$topic = $topic . $c;
				}
			}
		}
		$topic =~ s/[\n\r]/ /m;
		if($topic ne "") {
			print "$topic\n$url\n\n";
		}
	}
}
0

ดูเว็บให้ลึกลงไปอีกหน่อยด้วย Firefox

เครื่องมือสำหรับ Firefox:

  • Geo ดูตำแหน่งทางภูมิศาสตร์ของหน้าเว็บ
  • Firebug เอาไว้ดูได้ว่า HTML หรือ CSS ในหน้าที่เราดูอยู่ ส่วนไหนทำให้เกิดเว็บหน้าตาแบบไหน
  • Header Spy เอาไว้ดู Header ปกติเราจะไม่เห็นถึงแม้จะดู source แต่ถ้าอยากรู้ว่าเกิดอะไรขึ้นบ้างก็น่าดู

เว็บที่น่าลอง:
identi.ca เว็บนี้ส่งตำแหน่งทางภูมิศาสตร์ที่อยู่ของเราลงไปด้วย

0

แผนที่เสรี

แผนที่บนเว็บเยอะแยะตัวที่ดังที่สุดหรืออย่่างน้อยที่ผมคิดว่าดังที่สุดก็คือ 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/ ไว้ด้วยแล้วกันครับ :-)

0

CakePHP app กับ userdir

เวลาเอา web app ที่เขียนด้วย cakephp ไปใส่ใน userdir เช่น /home/veer/public_html/myapp (ซึ่งมักจะไปตรงกับ url http://hostname/~veer/myapp) มักจะมีปัญหากับ mod_rewrite ขึ้นมา แต่ก็แก้ไม่ยาก เพียงแต่แก้ .htaccess ใน myapp กับ myapp/app/webroot

เดิมทีจะเขียนไว้ประมาณนี้ (ใน myapp กับ myapp/app/webroot ไม่เหมือนกัน แต่ก็แก้เหมือนกัน)


   RewriteEngine on
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]

ก็แก้โดยใส่ RewriteBase เข้าไปเป็นแบบนี้


   RewriteEngine on
   RewriteBase    /~veer/myapp
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]

เสร็จแล้ว

2

เรียนนักพัฒนาเว็บ ผมขอความกรุณาให้ใช้แฟลชแต่น้อย

เรียนนักพัฒนาเว็บ ผมขอความกรุณาให้ใช้แฟลชแต่น้อย ปัจจุบันนี้ผมใช้งานระบบปฎิบัติการ GNU/Linux ที่ Adobe ก็ผลิตแฟลช player ให้มาเหมือนกัน แต่ว่าใช้งานภาษาไทยได้ไม่ค่อยสมบูรณ์ ดังนั้นการใช้แฟลชสำหรับเปิดวิดีโอจึงไม่เป็นปัญหา เพราะไม่ต้องแสดงข้อความภาษาไทย แต่ว่าการใช้แฟลชแสดงข่าวสาร หรือชื่อรายการที่เป็นตัวหนังสือ ก็มักจะแสดงผลไม่ได้บนแฟลชที่ใช้กับ GNU/Linux

ถึงแม้ว่าผู้ใช้ GNU/Linux จะเป็นคนส่วนน้อย แต่ก็อยากจะขอความเห็นใจจากท่านนักพัฒนาเว็บบ้าง

update: ตอนนี้เริ่มมีความหวังว่าเฟลชจะใช้ภาษาไทยได้ http://www.blognone.com/node/13944 ^_^

0

ใช้ Ubuntu เปิดเว็บ ThaiPBS แล้วเป็นแบบนี้

ผมดูผังรายการไม่ได้

thaipbs

มีวิธีแก้เปล่าครับ?

update: ได้คำตอบมาจาก @mrchoke แล้ว สรุปก็ประมาณว่า ต้องเปลี่ยนภาษาโดยปริยายเป็นภาษาไทย เท่านั้นก็จะพอดูได้ แต่ว่าสระบนล่าง และวรรณยุกต์ก็ยังคงหายไป

0

Range ใน Javascript

Range นี้ผมใช้ตอนอยากจะดูว่า ข้อความ อะไรที่ถูกเลือกอยู่บ้าง เวลาใช้ก็เขียนแบบนี้

var sel = window.getSelection();
if(sel.rangeCount > 0) 
    var r = sel.getRangeAt(0);

เขียน code แบบนี้ก็จะได้ r ที่เป็น range ออกมา อ่อผมใช้กับ Firefox 3.0.x และ Opera 10.x นะครับ IE 6-8 เข้าใจว่าใช้ไม่ได้ ส่วน chrome กับ safari ก็ยังไม่ได้ศึกษาเท่าไหร่

พอได้ range มา ผมก็รู้ได้ว่า element ไหน โดนเลือกตัวเริ่ม ตัวไหนตัวปิดโดยดูจาก r.startContainer และ r.endContainer ตามลำดับ แต่ว่าใน container อาจจะเป็น Text ก็อาจจะถูกเลือกแค่บางตัวในนั้นก็ต้องมาดู r.startOffset และ r.endOffset อีก

เท่านี้ก็คงพอใช้งานได้แล้ว …

3

Nokia 2730

หลังจากที่ลอง Nokia 5320, LG KT610, LG KP500 โทรศัพท์ TWZ Blueburry 8 ก็ลองๆ มาบ้างแต่ ส่วนตัวแล้วก็ไม่ค่อยสนใจเท่าไหร่ ไม่เขียนถึงดีกว่า Nokia 6700 เห็นในโฆษณาแล้วน่าใช้ จับแล้วก็น่าใช้ แต่ราคาก็ทำให้มันหลุดจากความสนใจของผมอีก

Nokia 2730 พึ่งออกมาใหม่ แต่ว่าราคาก็เปิดมาประมาณ 3600 บาทเลย ความน่าสนใจก็เพิ่มขึ้นมาทันที รุ่นนี้ผมคิดว่ามันก็คล้ายๆ Nokia 3110c ซอฟต์แวร์ใหม่กว่า มี Nokia map มาให้ แต่ไม่มี GPS แต่ก็หามาเพิ่มต่างหากได้ และต่อผ่านทาง Bluetooth สิ่งที่ดูดีขึ้นมากว่า Nokia 3110c อย่างชัดจันคือมันใช้ EDGE กับ WCDMA (ตอนนี้ยังไม่มีประโยชน์อะไร) ทำให้มันเหมาะมากที่จะเอามาเล่นเน็ต

เครื่องมันก็แท่งเหมือน Nokia 3110c แต่ก็บางกว่านิดหน่อย ถอด microSD ได้โดยไม่ต้องถอด battery ออกมาก่อน แต่ว่าปุ่มเพิ่มเบาเสียงก็หายไปด้วย แต่ที่ดูดีกว่ามากๆ คือรูสำหรับ charge battery และเสียบหูฟังอยู่ด้านบน แทนที่จะเป็นด้านล่างแบบ Nokia 3110c แถมที่เสียบหูฟังเป็นแบบ 3.5 มิลลิเมตร ทำให้เสียบหูฟังทั่วๆ ไปเลยเลยไม่ต้องใช้ของ Nokia จอก็ใหญ่ขึ้นชัดขึ้น

(คลิกที่ภาพเพื่อดูภาพที่ใหญ่ขึ้นได้ทุกภาพนะครับ)

a010.jpg

กล้องก็ยังเป็น 2 ล้านจุด ไม่มี auto focus และ close-up ก็ไม่ค่อยชัด ไม่มีไฟฉายช่วยเวลาแสงน้อย แต่ภาพผมว่าออกมาก็พอใช้ได้ ถ้าแสงอำนวย

http://www.nokia.co.th/find-products/phones/nokia-2730-classic/specifications

ตัวอย่างภาพถ่าย

ไอติม แล ะ บัวลอย

อีกอย่างที่อาจจะสำคัญที่สุด Nokia 2730 ใช้ jibjib ได้ ถ่ายรูปและ upload ได้สบาย โดยเลือกกล้องเป็น capture://image

a001.jpg

แต่ว่าบางทีเราไม่อยากเปิด jibjib แต่ว่าอยากจะ upload ขึ้นเว็บเลยหลังจากถ่ายรูปใน mode ปกติ มันก็ทำได้เหมือนกัน แต่ที่น่าเศร้าคือตอนนี้ผมเห็นแต่ menu ที่เอาไว้ upload ขึ้น Ovi ส่วนตัวแล้ว Ovi ก็เป็นเว็บที่ดีแต่ว่าเพื่อนผมเล่น Facebook กับ Twitter -_-! น่าจะดีกว่าถ้ากดให้ส่งทาง e-mail ได้เลย หรือว่า upload ขึ้น flickr หรืออะไรอื่นๆ (ส่งภาพทาง e-mail แบบด่วนๆ นี้ Nokia 6700, Nokia 5320me, LG KT610, Nokia N80 และ LG KP500 ทำได้หมด)

a002.jpg

a003.jpg

ว่ากันเรื่องส่งรูปทาง e-mail แล้ว เมื่อเทียบกับ Nokia 3110c แล้ว Nokia 2730 ก็ยังดีกว่านิดหน่อย เพราะว่าใช้งานอีเมล์ง่ายกว่ามากแค่เลือกว่าใช้เมล์ที่ไหน เช่น Gmail และ Hotmail และใส่ username และ password ได้เลย ไม่ต้องรู้ว่า imap server คืออะไรอยู่ที่ไหน มากไปกว่านั้นภาพ preview เล็กๆ ให้ดูว่าส่งอะไรไป นอกจากนั้นก็ยังสั่งถ่ายภาพขณะที่เขียน e-mail ได้และแนบไปด้วยได้เลย ก็สะดวกดีเหมือนกัน โดยเฉพาะเวลาที่จะส่งทีละหลายๆ รูป

a006.jpg

a008.jpg

a007.jpg

อีกอย่างที่น่าตื่นเต้นคือเครื่องมันแรงพอจะเล่น pantip.com ได้เลย

a004.jpg

a005.jpg

สุดท้ายมันมี Windows live messenger มาให้เลย สิ่งนี้อาจจะสำคัญกับหลายคน

a012.jpg

รวมๆ แล้วผมว่า Nokia 2730 ก็เล่นเน็ตใช้ได้เลยเมื่อเทียบกับราคาของมัน แต่ก็มีหลายๆ อย่างที่ขัดใจอยู่บ้าง เช่น อยากจะถ่ายรูปแล้วกดส่งไป e-mail ได้เลย เรื่อง keyboard ต่อให้ใช้ T9 แล้วผมก็พิมพ์เร็วเท่าใช้ QWERTY keyboard ไม่ได้ แต่ QWERTY keyboard ก็มีข้อจำกัดที่ว่าทำให้เครื่องใหญ่โตขึ้น ถ้าจะทำเครื่องเล็กปุ่มก็เล็กตามไปด้วย เรื่องฟังเพลงก็ดีรุ่นก่อนๆ ที่ราคาขนาดนี้มาก เพราะเสียบหูฟัง 3.5 มิลลิเมตรได้เลย ครั้งต่อไปผมคาดว่าจะลองเล่น Samsung ดู ถ้าเจ้าของเขาให้ยืม ^_^

1

เรียกว่า Basa API แล้วกัน

เป็นเวลานานมาแล้วเวลาเอาโปรแกรมต่างๆ มาต่อกัน ตัดคำเอย, part of speech tagger เอย ก็ต่อกันไม่ค่อยได้ นานมาแล้วอีกเหมือนกัน ก็เลยทำให้แต่ละตัวเป็น service ขึ้นมา แล้วก็เรียกผ่านเว็บได้. เคยดู SOAP ไว้แต่ว่ากว่าจะทำอะไรได้แต่ละอย่างก็วุ่นวายมากมาย กว่าจะใช้ได้. ใช้ XML-RPC ก็ง่ายหน่อยแต่ว่าดูเหมือนมันไม่ค่อยช่วยอะไร สุดท้ายก็ส่งแค่ string ที่มี XML หรือหลังๆ มาเป็น JSON อยู่ข้างในแล้วจะใช้ XML-RPC ทำไม เราก็แค่ใช้ HTTP. ล่าสุดนี้ REST น่าจะใกล้เคียงที่สุด แต่ก็ยังต้องประเด็นถกกันอีกว่าจะเรียก REST ได้หรือเปล่าบางคนก็เรียก REST แบบหลวมๆ บางคนก็ใช้แบบเคร่งครัด ต้องไม่มี state ไม่ใช้ cookie อะไรต่างๆ นานา ที่ผมก็ไม่มั่นใจอีกว่าจะทำอย่างนั้นได้ตลอด. ก็เลยตามเฟชัน เห็นเขามี Flickr/Yahoo/Google/Flickr API ก็เลยเรียก API ที่ทำอยู่ว่า “Basa API” และกัน Basa เป็นภาษาชวาแปลว่าภาษานั่นล่ะ :-P.

Basa API รวมๆ แล้วก็คือ API ที่เกี่ยวกับการประมวลผลภาษา ทำงานบน HTTP และใช้ JSON เป็นหลัก เน้นให้เอามาใช้กับ Ajax ง่ายๆ ด้วย แต่ก็ไม่จำเป็นต้องใช้กับ Ajax ตรงๆ (จำทำให้คล้าย REST หรือไม่คล้ายก็ได้).

ตอนนี้ประเด็นที่ดูต่อไปคือ authentication จำทำอย่างไร ใช้ basic auth จะง่ายไปหรือเปล่า ใช้ OAuth จะได้ได้หรือไม่.

0

dicthttp แบบมี xml และระบุ dict server ได้

dicthttp เป็นโปรแกรมที่ครอบ dict protocol ไว้อีกทีเพื่อที่จะใช้งานผ่าน http ได้ จะได้ไม่โดน block และใช้กับเทคนิค ajax ได้ด้วย. จาก ความเดิมในตอนที่แล้ว. dicthttp ให้ผลลัพธ์ออกมาเป็นแบบ json แถมยังเลือกไม่ได้ว่าจะใช้ dict server ตัวไหน จาก comment ของ @bact และ @jittat ก็ทำให้ได้ url แบบนี้ออกมา

http://localhost:8000/d:แมว?host=dict.longdo.com&format=xml

มี host=dict.longdo.com และ format=xml เข้ามาเพื่อระบุ dict server และ format ตามลำดับนั้นเอง

dict

มีภาพประกอบด้วย :-P

โปรแกรมก็เหมือนเดิม checkout ออกมาจาก svn ได้เลย http://code.google.com/p/basaasa/source/browse/#svn/trunk/dicthttp.