2

เล่น SQLAlchemy

อยากเล่น SQLAlchemy ลงง่ายมากเพราะมี easy install สั่ง easy_install SQLAlchemy ก็เสร็จละ แต่เห็นว่า SQLite ในเครื่องเก่าไปเอามาลงใหม่ Python ก็ไม่เห็น. ตามเคย ผมก็แก้ปัญหาที่ปลายเหตุเปลี่ยนไปใช้ PostgreSQL แทน. ก็เลยต้องลงโปรแกรมเพิ่มอีกหน่อย ด้วยคำสั่ง easy_install psycopg2 ก็เป็นอันเรียบร้อย.

from sqlalchemy import *

def main():
  # db = create_engine("sqlite:///what.db")
  db = create_engine("postgres://what@localhost/play1")
  metadata = MetaData()
  metadata.bind = db
  metadata.bind.echo = True
  entries_table = Table('entries', metadata,
  Column('id', Integer, primary_key=True),
  Column('headword', String(1024)),
  Column('definition', String(4096)))
  entries_table.create()

if __name__ == '__main__':
  main()

ก่อน run ก็แอบๆไป  createdb play1 รอไว้ก่อน พอ run ก็ได้ผลลัพธ์ว่า

2007-07-31 21:51:59,959 INFO sqlalchemy.engine.base.Engine.0x..f0
CREATE TABLE entries (
  id SERIAL NOT NULL,
  headword VARCHAR(1024),
  definition VARCHAR(4096),
  PRIMARY KEY (id)
)

2007-07-31 21:51:59,985 INFO sqlalchemy.engine.base.Engine.0x..f0 None
2007-07-31 21:52:00,192 INFO sqlalchemy.engine.base.Engine.0x..f0 COMMIT

ใช้ได้ พอใจละก็จะเล่น Elixir ต่อ.

ป้าย:

0

reproduce ไม่ได้

mk ส่ง test case มาให้จริงๆก็เป็นหน้ายาวๆ หน้านึงของประชาไท ที่เอา Minefield ที่ patch Carbon line break ไปแล้วมาเปิดจะเจ๊ง. ผมลองทำดูครั้งแรกเจ๊งสมใจ. เลยเอา patch ออกแล้ว rebuild ปรากฎว่าไม่เจ๊งละ. ทีนี้เลยเอา patch กลับเข้ามาใส่ใหม่ แล้ว rebuild ก็ไม่เจ๊ง เริ่มงง. ป๋าเทพบอกว่าธรรมดา make clean ก่อน ผมก็ make -f client.mk clean แล้วก็ rebuild แล้วเปิดหน้านั้นใหม่ก็ไม่เจ๊ง. -_-! หรือว่ามันต้องใช้ไปซักพักให้ minefield มันน่วมก่อนถึงจะได้?

Tags:

0

ส่ง Firefox + Uniscribe patch เข้า Bugzilla แล้ว

โดยการร่วมแรงแข็งขันของคุณ nattachai และป๋าเทพ (thep) วันนี้ก็มี patch มาชิ้นเป็นอัน และส่งเข้าไปใน Bugzilla เรียบร้อยแล้วอยู่ที่  Bug #390048.  คำอธิบายดูเละๆหน่อยก็ขออภัย นึกว่า Bugzilla ใส่ HTML ได้ :-P. มันก็ใส่ได้นะแต่ก็ออกมาแบบที่เห็น. คุณเก่ง.ws ก็เข้าแก้หมายเลข bug ที่ผิดให้ด้วย. ท่านใดสนใจติดตามก็ไปใส่ CC ให้ Bugzilla ช่วย alert ได้.

ป.ล. ขอบคุณคุณ otto อีกคนที่เริ่มเขียน patch นี้นะครับ

Tag:

0

อาสาสมัครบน Windows มาแล้ว

ตอนนี้เอา Minefield จาก cvs trunk มา patch แล้วก็ลอง build เล่นได้แล้ว. ด้วยฝีมือของ Nattachai  ที่ใช้ code เริ่มจาก Pattara และ Chatsiri ก็ช่วยเติม wiki ด้วย. แล้วก็ยังมี PaePae ที่เริ่มเอา code มา build แล้ว.  ซึ่งก็น่าจะหมายความว่า Firefox น่าจะตัดคำได้ดีพอๆกับ IE ได้ในไม่ช้านี้. สมมุติฐานที่ว่า Windows อาสาสมัครน้อย ไม่จริงซะแล้ว. :-D

0

เล่นกับ UCFindTextbreak

ผมลองเขียน code แบบข้างล่างดู x เป็น UTF-8 string เขียนแบบเถื่อนๆ หน่อย. จริงๆแล้วคือ string นี้ “สูงอันดับสองของมหาเถรสมาคม”.

void
play_uc_find_textbreak()
{
	UniChar x[] = { 0xE2A,  0xE39,  0xE07,  0xE2D,  0xE31,  0xE19,  0xE14,  0xE31,  0xE1A,  0xE2A,
  0xE2D,  0xE07,  0xE02,  0xE2D,  0xE07,  0xE21,  0xE2B,  0xE32,  0xE40,  0xE16,
  0xE23,  0xE2A,  0xE21,  0xE32,  0xE04,  0xE21};
	int len = sizeof(x)/sizeof(x[0]);
	TextBreakLocatorRef breakLocator;
	int position = 0;
	OSStatus s;

	printf("position = %d len = %d\n", position, len);
	s = UCCreateTextBreakLocator(NULL, 0, kUCTextBreakWordMask, &breakLocator);
	if(noErr == s)
	{
		int i;
		UniCharArrayOffset end_offset;
		for(i = 0; i < len;)
		{
			s = UCFindTextBreak(breakLocator,
								kUCTextBreakWordMask,
								i == 0 ? kUCTextBreakLeadingEdgeMask : 0,
								(const UniChar *)x,
								len,
								i,
								&end_offset);
			printf("### s=%s i=%d end=%d\n", s==noErr ? "cool" : "sad" , i, end_offset);
			i = end_offset;
		}
	}
}

ทุกอย่างก็ดู ok แต่ว่ามัน run ไม่จบซักที

position = 0 len = 26
### s=cool i=0 end=3
### s=cool i=3 end=3
### s=cool i=3 end=3
### s=cool i=3 end=3
### s=cool i=3 end=3


ใส่ position เท่ากับ 3 เข้าไป offset ที่ได้คืนออกมาก็เท่ากับ 3 เหมือนกัน. คล้ายกับว่า UCFindTextbreak อาจจะไม่ได้ออกแบบไว้ทำ layout. แต่ว่าออกแบบไว้เวลาเอา mouse ไป click บน text แล้วสามารถ high-light คำที่ถูก click ได้อย่างถูกต้อง. ถ้าจิตนาการแบบนี้ การที่ UCFindTextBreak คืนค่าเดียวกับ position ก็อาจจะสมเหตุสมผล?

0

ตัดคำบน Firefox ด้วย Carbon API

หลังจากที่มั่วมาได้สักพักก็พอหาท่า ตัดคำบน Firefox ด้วย Carbon API ไม่ได้ใช้ ATSUI แต่ว่าใช้ Core service เลย. ที่จะ post ให้ดูนี่มันอาจจะช้า สกปรก หรือแม้แต่ผิด. แต่มันก็เริ่มจะทำ line breaking ได้ละ :-).

#include "nsComplexBreaker.h"
#include <Carbon/Carbon.h>
#include <stdio.h>

void
NS_GetComplexLineBreaks(const PRUnichar* aText, PRUint32 aLength,
PRPackedBool* aBreakBefore)
{
  OSStatus status = noErr;
  NS_ASSERTION(aText, "aText shouldn't be null");
  TextBreakLocatorRef breakLocator;
  UniCharArrayOffset position;

  status = UCCreateTextBreakLocator(NULL, 0, kUCTextBreakWordMask,
                                    &breakLocator);
  UniChar *buf = new UniChar[aLength];
  for(UniCharArrayOffset i = 0; i < aLength; ++i)
  {
    printf("@@@ i=%lu ch=0x%X\n", i, aText[i]);
    buf[i] = aText[i];
  }

  if(status == noErr)
  {
     UniCharArrayOffset offset;
     for(position = 0; position < aLength;)
    {
       UCTextBreakOptions opt = (position == 0 ? kUCTextBreakLeadingEdgeMask : 0);
       UCFindTextBreak(breakLocator,
                   kUCTextBreakWordMask,
                   opt,
                   (const UniChar *)buf,
                   aLength,
                   position,
                   &offset);
                   aBreakBefore[offset] = PR_TRUE;
                   position = offset + 1;
                   printf("!!! position %lu\n", position);
    }
    UCDisposeTextBreakLocator(&breakLocator);
  }
  delete[] buf;
}

intl/lwbrk/src/nsCarbonBreaker.cpp.

0

แม้จะแก้ปัญหาได้ แต่ความน่าสะพรึงกลัวยังคงอยู่ ถ้า…

แม้จะแก้ปัญหาได้ แต่ความน่าสะพรึงกลัวยังคงอยู่ ถ้าไม่รู้ว่าปัญหานั้นเกิดจากอะไรกันแน่. ผมใช้ Tapestry 5 อยู่ใน Project A แล้วก็เจ๊งๆ. ด้วยความงงเลยเปิด Project B มาทำอะไรคล้ายๆ Project A ค่อยเปลี่ยนให้ B กลายเป็น A จะดูว่าเจ๊งที่ไหนแต่มันกลับใช้ได้. ดีใจนิดๆ แต่ก็น่ากลัวด้วย อ่าวแล้ว A มันเป็นอะไร. กลับไป run A ใช้ได้แล้ว!!! … ถึงจะหาสาเหตุแน่ชัดไม่ได้แต่คาดว่าน่าจะเกี่ยวกับสิ่งที่ Maven download มา เพราะว่าเห็น Maven download อะไรมาเพิ่มตอนทำ B. การทำงานแบบ online บ้าง offline บ้าง แล้ว package ก็มี update ตลอด น่าสงสัยอยู่.

ป้าย​:

0

ท่าลง JTA ใน Maven (จาก G2K)

หา download jta-1_0_1B-classes.zip มาจาก web ของ sun แล้วเรียกมา maven
mvn install:install-file -Dfile=/path/to/jta-1_0_1B-classes.zip -DgroupId=javax.transaction -DartifactId=jta -Dversion=1.0.1B -Dpackaging=jar
ที่ jta ไม่เข้าไปอยู่ใน maven repository คงเป็นเพราะเรื่อง license?

0

รวมการเฉพาะกิจเพื่อ patch Firefox

พอ post blog ได้ไม่นาน. ไม่นานจริงๆนะขนาดมา post blog นี้แล้วยัง download xcode ไม่เสร็จเลย. เก่ง.ws ติดต่อเข้ามาว่าอยากจะต่อ Firefox กับ ATSUI เหมือนกัน. เก่ง.ws กับผมเลยร่วมกันสร้างหน้าวิกิขึ้นมา เพื่อใจได้ share ข้อมูลกัน รวมถึงคำถามคำตอบด้วย. เพื่อมีใครสนใจอีกจะได้เข้ามามีส่วนร่วมได้ง่ายๆ ด้วย. หน้านั้นอยู่ที่ http://scratchpad.wikia.com/wiki/Firefox_Thai. นะครับ. ผมหวังว่าการ share น่าจะทำให้เราทำงานเสร็จได้โดยแต่ละคนไม่เหนื่อย และเหงา (มีปัญหาแล้วไม่รู้จะถามใคร … แล้วก็ถามตัวเองว่ามานั่งทำอะไรอยู่คนเดียว.) จนเกินไป.

tag:

0

ปัญหา maven-eclipse-plugin

แต่ก่อนผมก็ใช้ maven eclipse plugin มาดีๆ. รู้สึกว่าพอลบ $HOME/.m2/repository ออกแล้วกลับมาสั่ง mvn eclipse:eclipse อีกทีแล้วใช้ไม่ได้. ทั้งที่แต่ก่อนก็สั่งได้เลยไม่เคยต้องไปแก้ pom.xml หรืออะไร. มี error บอกมาว่า ไม่เจอ artifact นี้หรือไม่มี version ที่เหมาะสม. ผมก็เลยไประบุ version ใน pom.xml เอา

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.4</version>
</plugin>

ด้วยท่านี้ก็กลับมาใช้ได้เหมือนเดิม. :-)

Tag: