2

LG KP500 Cookie กับ Twitter

ลองใช้ Twitter กับ LG KP500 หรือ Cookie (LG มักจะมีชื่อเล่นน่ารักๆ ให้โทรศัพท์) มือถือเครื่องที่เอามาลองเหมือนจะมีปัญหากับ configuration ของ True นิดหน่อย แต่ว่าพอปรับ ให้เลือก Access point ถูกตัว (ก่อนหน้านี้เหมือนมีคน add access point ที่ถูกต้องไว้แล้ว) ก็ใช้งานได้ตามปกติ

ถ้าให้ผมเลือกผมคงต้องลองลงสิ่งนี้ก่อน web browser ที่เป็นประโยชน์ต่อโทรศัพท์เล็กๆ แทบทุกเครื่อง Opera Mini

(คลิกดูรูปใหญ่ได้ทุกรูปนะครับ)

p8240023.jpg p8240024.jpg

ต่อไปก็เป็น jibjib ก็ลงได้สบายๆ นะครับ แต่ว่า ถ่ายรูปไม่ได้ ผมลอง capture://video, capture://image, capture://devcam0 และ capture://devcam1 ครบแล้ว แต่ก็ยังไม่ได้

p8240032.jpg

แต่ก็ไม่เป็นไร เรายังมี E-mail ทดลองใช้กับ Gmail ก็ใช้งานได้ไม่มีปัญหา POP/IMAP SSL/TLS อะไรมีครบหมด เวลาถ่ายรูปแล้วก็มี Icon รูปเมล์ ให้กด แล้วส่งรูปนั้นไปให้ Twitpic กับ Facebook ได้สบายๆ ^_^

ลองแถมอีกหน่อยอยากลง Google Map ก็เลยลองเอามาลงพบว่าเรียกโปรแกรมมาแล้วมันค้างๆ ไม่รู้ว่าเน็ตช้า หรือว่าลงไม่ได้ แต่ก็เอาไว้วันหลังแล้วกัน :-P

สรุปว่า LG KP500 หรือ Cookie ก็ลงอุปกรณ์สำหรับเล่น Twitter ได้ค่อนข้างครบครับ ถึง Jibjib จะถ่ายรูปไม่ได้ แต่ก็ส่งทางเมล์แทนได้ไม่มีปัญหาอะไร ส่วนตัวแล้วคิดว่าเครื่องก็ทำงานเร็วดี แต่เครื่อง Touchscreen เอามาใช้พิมพ์เยอะๆ ก็ไม่ค่อยสนุกเท่าไหร่ (เวลาพิมพ์ควรจะมีไม้จิ้มด้วย ใช้นิ้วไม่ไหว)

ป.ล. ขอบคุณ @Jaoez ที่ให้ยืมเครื่องมาลอง

0

เขาฝึกป้องกันไฟไหม้เหรอ?

มองรวมๆ ก็ไม่ค่อยรู้สึกอะไร

p8230461.jpg

แต่ว่ากลิ่นอะไรแปลกๆ กองไฟนี้เอง

p8230463.jpg

อยู่ข้างๆ สถาบันนี้ สถาบันวิศวกรรมป้องกันอัคคีภัย (ที่เหมือนข้างหน้ามีถัง gas ตั้งอยู่ด้วย แต่ข้างในไม่รู้มีอะไรหรือเปล่า)

p8230462.jpg

ฝึกซ้อมกันหรือว่าอะไร?

2

ทำไมเพื่อนของเรายังต้องใช้ IE6

นี้ก็อาจจะเป็นอีกเหตุผลหนึ่ง บางทีอยากจะเปลี่ยนไปใช้ IE8 หรือ IE7 ก็ติดอะไรบางอย่างอยู่ คงไม่ได้มีแต่ที่เกษตรฯ ที่อื่นก็น่าจะคล้ายๆ กัน

คนใช้ Firefox บน Ubuntu ก็เศร้าไป T_T ถ้าใช้ Windows ก็อาจจะคง IE6 ไว้แล้วใช้คู่กับ Firefox เก็บ IE6 เฉพาะที่จำเป็น

0

Using Stanford parser

I thought that Stanford parser use “\n” as sentence separator but it doesn’t seem to be true :-P.

So I add the option “-sentence newline” to the command line.

java -mx1500m -cp “$scriptdir/stanford-parser.jar:” edu.stanford.nlp.parser.lexparser.LexicalizedParser -sentences newline -outputFormat “typedDependencies” -outputFormatOptions ‘xml’ $scriptdir/englishPCFG.ser.gz $*

I should do this since 2 days ago T_T.

P.S. I cannot build Stanford parser 1.6.1 by Ant or Make. I try to add -Xlint:unchecked and -Xlint:deprecation bla bla bla and it did not help. Finally I imported the source tree to Eclipse and it can be built. I still do not understand but I don’t care anymore ^_^.

0

Bug เกี่ยวกับการป้อนข้อมูลของ Firefox

หลังจากที่ลองลง Firefox รุ่นพัฒนาล่าสุดไป เพื่อที่จะลองดู bug ตามที่ป๋าเทพประกาศไว้.

วิธี reproduce (ทำให้ bug นั้นออกอาการอีกที) ทำแบบนี้จ๊ะ ใน $HOME/mozilla-central/objdir-ff-release/dist/bin

export XMODIFIERS="@im=BasicCheck"
export LC_ALL="th_TH"
./firefox

อาการที่เกิดคือสมมุติว่าเราพิมพ์ “เป่าปอย่างไร” เข้าไป แต่พึ่งมารู้ทีหลังว่าลืมพิมพ์ สระอี กับ ไม้เอก ให้เป็น “เป่าปี่อย่างไร” จะเลื่อน cursor ไปเติมทีหลังมันจะเติมไม่ได้. ตาม video นี้ที่น่าเสียดายว่า ถ่าย keyboard คู่ไปด้วยไม่ได้.

หลังจากลองดูแล้ว ส่วนตัวแล้วคิดว่า บัก นี้มีความสำคัญที่จะต้องแก้ ก็เลยกด vote ไปแล้ว ก็เพิ่มเข้ามาใน CC list เพื่อที่จะติดตามความก้าวหน้า

ช่วยแก้ ช่วย vote ฯลฯ ได้ที่ https://bugzilla.mozilla.org/show_bug.cgi?id=353776 ครับ

ป.ล. เหมือนจะยังขาดคน test อยู่ในครับ โดยเฉพาะบน Mac OS X และ Windows (บน GNU/Linux ก็เหมือนจะเงียบเหงาด้วย)

3

กลับมา build Firefox อีกแล้ว

ไม่ได้ build หรือทำอะไรต่างๆ นานากับ Firefox เสียนาน แต่ก็ไปเห็นเมลนี้ http://groups.google.co.th/group/thai-linux-foss-devel/browse_thread/thread/c571e26d6a1a8043 จริงๆ แล้วผมก็งงๆ ว่าลำดับภาษาไทยคืออะไร ลองอ่าน bug ก็ไม่ค่อยเข้าใจเท่าไหร่. แต่ก็ลองก่อนแล้วกัน แล้วลอง reproduce ตามข้อมูลที่มีอยู่ก็อาจจะเข้าใจขึ้นมาเอง.

แต่ก่อนอื่นต้องมี Firefox รุ่นล่าสุดใช้ก่อน สำหรับ Ubuntu นี้ build ง่ายมาก เดี๋ยวนี้เขาไม่ใช้ CVS แล้ว เปลี่ยนไปใช้ Hg แทน กว่าจะเอา source code มาได้หมดก็นานเหมือนเดิม (จะมากกว่าน้อยกว่าก็ไม่ทราบได้ เพราะผมหลับไปก่อน หลับจริงๆ นะ) วิธีตามนี้เลย https://developer.mozilla.org/En/Simple_Firefox_build

รอไปมันก็ build เสร็จเอง แต่ก็ดันมางงตอน run ทำไม่เป็นซะงั้น :-P. แต่ในที่สุดก็หาเจอ เข้าไปใน objdir-ff-release/dist/bin แล้วก็สั่ง ./firefox ก็ใช้งานได้เลย ^_^ (ทีแรกลืมปิดตัวเก่า พอปิดหมดแล้วตัวใหม่ก็ขึ้นมาสบาย)

0

CSP

  1. ดาวโหลด aima-java จาก http://code.google.com/p/aima-java/
  2. นำ aima-java เข้าสู่ eclipse
  3. เพิ่ม source code ด้านล้างเข้าไปใน project
  4. เปลี่ยนแผนที่จาก A, B, C, D เป็นแผนที่กรุงเทพฯ และจังหวัดรอบๆ แล้วลองรัน โปรแกรมดูครับ

ส่วนที่ต้องแก้ไขหลักๆ คือ variables และ neighbors โดย variables ในกรณีนี้เปลี่ยนเป็นชื่อจังหวัด และ neighbors ใส่ว่าจังหวัดใดติดกันบ้าง โดยต้องใส่ทั้งสองทาง เช่น กรุงเทพฯติดกับนนทบรี และ นนทบุรีติดกับกรุงเทพฯ

package aima.search.csp;

import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;

//Copyright (c) <2003-2008> 
//
//Permission is hereby granted, free of charge, to any person obtaining a copy
//of this software and associated documentation files (the "Software"), to deal
//in the Software without restriction, including without limitation the rights
//to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//copies of the Software, and to permit persons to whom the Software is
//furnished to do so, subject to the following conditions:
//
//The above copyright notice and this permission notice shall be included in
//all copies or substantial portions of the Software.
//
//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//THE SOFTWARE.

public class ModMapCsp extends CSP {
	public static String WA = "WA";

	public static String NT = "NT";

	public static String SA = "SA";

	public static String Q = "Q";

	public static String NSW = "NSW";

	public static String V = "V";

	public static String T = "T";

	public static String RED = "RED";

	public static String BLUE = "BLUE";

	public static String GREEN = "GREEN";

	private ModMapCsp(List variables, Constraint constraints) {
		super(variables, constraints);

	}

	public static CSP getMap() {
		List variables = new ArrayList();
		variables.add("A");
		variables.add("B");
		variables.add("C");
		variables.add("D");

		List colors = new ArrayList();
		colors.add(RED);
		colors.add(BLUE);
		colors.add(GREEN);

		Domain domains = new Domain(variables);
		for (int i = 0; i < variables.size(); i++) {
			String variable = variables.get(i);
			domains.addToDomain(variable, colors);
		}

		Hashtable<tring, List> neighbors = new Hashtable<string , List>();
		addToNeighbors(neighbors, "A", "B", "C", "D");
		addToNeighbors(neighbors, "B", "A", "C");
		addToNeighbors(neighbors, "C", "A", "B");
		addToNeighbors(neighbors, "D", "A");

		Constraint mapConstraints = new MapColoringConstraint(neighbors);

		return new CSP(variables, mapConstraints, domains);
	}

	public static void addToNeighbors(
			Hashtable<string , List> neighbors, String whose) {
		List l = new ArrayList();
		neighbors.put(whose, l);
	}

	public static void addToNeighbors(
			Hashtable<string , List> neighbors, String whose, String one) {
		List l = new ArrayList();
		l.add(one);
		neighbors.put(whose, l);
	}

	public static void addToNeighbors(
			Hashtable<string , List> neighbors, String whose,
			String one, String two) {
		List l = new ArrayList();
		l.add(one);
		l.add(two);
		neighbors.put(whose, l);
	}

	public static void addToNeighbors(
			Hashtable<string , List> neighbors, String whose,
			String one, String two, String three) {
		List l = new ArrayList();
		l.add(one);
		l.add(two);
		l.add(three);
		neighbors.put(whose, l);
	}

	public static void addToNeighbors(
			Hashtable<string , List> neighbors, String whose,
			String one, String two, String three, String four) {
		List l = new ArrayList();
		l.add(one);
		l.add(two);
		l.add(three);
		l.add(four);
		neighbors.put(whose, l);
	}

	public static void addToNeighbors(
			Hashtable<string , List> neighbors, String whose,
			String one, String two, String three, String four, String five) {
		List l = new ArrayList();
		l.add(one);
		l.add(two);
		l.add(three);
		l.add(four);
		l.add(five);
		neighbors.put(whose, l);
	}

	public static void main(String args[]) {
		System.out.println("!!!");
		CSP csp = ModMapCsp.getMap();
		Assignment result = csp.backTrackingSearch();
		System.out.println(result.getAssignment("A"));
		System.out.println(result.getAssignment("B"));
		System.out.println(result.getAssignment("C"));
		System.out.println(result.getAssignment("D"));
	}
}
0

ราคาเจลล้างมือ



เจลล้างมือ, originally uploaded by veer8.

วันนี้ไปซื้อเจลล้างมือที่ห้างดังแห่งหนึ่งมาเจอไป 50 บาทสำหรับเจประมาณ 50 มิลลิลิตร ขากลับแวะกินข้าวที่ Foodland กินข้าวเสร็จ ก็เดินไปดูน้ำผลไม้หน่อย ไปเจอเจลล้างมือแบบเดิมเลยขายอยู่ 36 บาทได้ พลาดมากๆ T_T.

0

Using Minipar + position

I want to use a dependency parser, which is free (al least for education purpose). So Minipar might be the right one. There is an example came with the package but parsing result is relied on surface forms. Surface form is easy to understand but it will be problematic when there are 2 duplicated words in the same sentence so I use position of word in the sentence instead and fortunately it is available the API ^_^. I just use head_pos() from node as below:

#include
#include
#include “ptree.h”

#define LINE_SIZE 100000

void
printParseResult(const ParseNode* node)
{
ParseNode* parent = ((ParseNode*) node)->parent();
if (node->relation() && parent && parent->category()) {
if (parent->root() && parent->category() &&
node->category() && node->root() && node->relation()) {
/* print parent head_pos, surface, category */
printf(“%d\t%s\t%s”, parent->head_pos(),
parent->root(),
parent->category());

printf(“\t”);

/* print node head_pos, surface, category */
printf(“%d\t%s\t%s”, node->head_pos(),
node->root(),
node->category());
printf(“\t”);

/* relation */
printf(“%s”, node->relation());

}
printf(“\n”);
}
forall (ParseNode*, sub, TRSTree, node) {
printParseResult(sub);
}
}

int
main(int argc, char **argv)
{
const char *path;
ParseTree parseTree;
char line[LINE_SIZE];

if(argc != 2) {
fprintf(stderr, “Usage: %s \n”, argv[0]);
return EXIT_FAILURE;
}
path = argv[1];
initialize_minipar(path);

while(fgets(line, LINE_SIZE, stdin) != NULL) {
parseTree.reset();
parse(line, parseTree);
printParseResult(parseTree.root());
}
return EXIT_SUCCESS;
}

I use it like this:

$ echo "I like a cat." | ./vparse ../data  2> /dev/null
1	fin	C	2	like	V	i
2	like	V	1	I	N	s
2	like	V	3	I	N	subj
2	like	V	4	cat	N	obj
4	cat	N	3	a	Det	det

$