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 อีก

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