06 กรกฎาคม 2553

ลองแก้ปัญหากดลิ้งค์ภาษาไทยใน Android 2.1 ไม่ได้

หลังจากได้ Samsung Galaxy S มาเล่นอาทิตย์กว่าๆ ก็เจอปัญหาเรื่องการกดลิ้งค์ที่เป็นภาษาไทยใน browser คือมันจะขึ้นกรอบไม่ตรงกับลิ้งค์ ทำให้ถ้าจะไปลิ้งค์นั้นจะลำบากมาก หรือไปไม่ได้เลย

เท่าที่ลองหาดูใน google ก็เจอว่ามันเป็นปัญหาของ webkit ซึ่งจากที่ไปดูใน source code ของ android ก็เห็นว่าใน froyo มี commit แก้ไขไปแล้ว แต่ทีนี้ Galaxy S ของเรามันดันเป็น eclair อยู่ แล้ว Samsung ก็ยังไม่มีทีท่าว่าจะออก firmware fix มาซะที ดังนั้นเรามาแก้เอาเองดีกว่า!!! :)

อ่านดูตามเว็บบอร์ดเห็น android ยี่ห้ออื่นเค้ามีวิธีแก้โดยไป compile webkit ใหม่แล้วเอาไฟล์ libwebcore.so ไปทับของเดิมใน /system/lib แล้วก็รีบูต... ท่าทางง่ายดี หุหุหุ

เริ่มต้นก็ไปโหลด source code ของ android มาก่อน โดยทำตามหน้านี้ http://source.android.com/source/download.html อย่าลืมว่าต้องลง required packages ให้ครบ

mkdir mydroid
cd mydroid
repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.1_r1
repo sync

อันนี้คือใช้ tag android-2.1_r1 ไม่รู้ว่าตรงหรือเปล่า เห็นมี 2.1 หลาย tag เหมือนกัน
จากนั้นก็แก้ไฟล์ ใน external/webkit/WebCore/platform/graphics/android/FontAndroid.cpp ด้วย patch นี้

--- a/WebCore/platform/graphics/android/FontAndroid.cpp
+++ b/WebCore/platform/graphics/android/FontAndroid.cpp
@@ -188,7 +188,7 @@ FloatRect Font::selectionRectForComplexText(const TextRun& run,
SkScalar spacing = paint.getFontMetrics(&metrics);

return FloatRect(point.x(),
- point.y() - floorf(SkScalarToFloat(-metrics.fAscent)),
+ point.y(),
roundf(SkScalarToFloat(width)),
roundf(SkScalarToFloat(spacing)));
}

แล้วก็ compile กันเลย!!

make

....ผล.....
compile ผ่านโลด ใช้เวลาประมาณชั่วโมงครึ่งบน Thinkpad คู่ใจ ได้ไฟล์ libwebcore.so ตามต้องการอยู่ใน out/target/product/generic/system/lib ก็เลยจัดการ copy ไปทับของเดิมในน้อง S แล้วก็ reboot ซะ

adb push out/target/product/generic/system/lib/libwebcore.so /sdcard
adb shell
su
cd /sdcard
cp /system/lib/libwebcore.so libwebcore.so-bak
cat libwebcore.so > /system/lib/libwebcore.so
reboot

ลองรัน browser ดูปรากฎว่าขึ้น...เฮ... แต่พอกดช่องใส่ URL เท่านั้นแหละ... ค้างไปซักแป๊บนึงแล้วก็ force close .... :~(

ไม่เป็นไร ไม่เป็นไร... ลองคุ้ยดูกันใหม่...คุ้ยไป คุ้ยมา (ใช้ readelf, objdump ช่วย) เจอว่าอันที่ compile ไปนั้นมัน target ไปที่ architecture arm5 (armv5te) แต่ไฟล์ที่อยู่ในน้อง S มันเป็น arm7 (armv7-a) ก็เลยจัดการเปลี่ยน architecture ซะโดยเปลี่ยนค่า TARGET_ARCH_VARIANT ในไฟล์ build/core/combo/linux-arm.mk b/core/combo/linux-arm.mk จาก armv5te เป็น armv7-a แล้วก็

make clean
make

รอ...รอ...รอ...อีกชั่วโมงครึ่ง...
.....ผล.....
เหมือนเดิมเด๊ะ :~( เปิด browser ได้แต่พอคลิกที่ช่องใส่ URL เท่านั้นแหละ เจอ force close เลย .. ทีนี้ก็เลยกด *#9900# เพื่ิิอ save log ออกมาดู

เท่าที่อ่านเข้าใจว่าเป็นเพราะ samsung มีการโม webkit ไปเยอะพอสมควร แล้วดันไม่ใส่มาให้ในไฟล์ opensource ที่โหลดได้จาก opensource.samsung.com ทีนี้ก็เลยจนปัญญาที่จะแก้ต่อ....เฮ้อออออ

12 มิถุนายน 2553

วิธีลง libflashplayer 32 บิต บน x86_64

วันนีเห็นข่าว FlashPlayer ออกเวอร์ชัน 10.1 มา แล้วโฆษณาว่าดีโง้นงี้ แต่กลายเป็นว่าไม่มีเวอร์ชัน x86_64 เหมือนเดิม ก็เลยลองหาข้อมูลบนเว็บดู ปรากฎว่ามีวิธีลง plugin เวอร์ชัน 32 บิต บนเครื่อง x86_64 ได้ ก็เลยลองซะหน่อย.. วิธีการก็ไม่ยาก ดังนี้
1. ดาวน์โหลดไฟล์ plugin ที่เป็น .tar.gz มา
2. mkdir ~/.mozilla/plugins ถ้ายังไม่มีไดเรกทอรี่นี้
3. untar ไฟล์ในข้อ 1. จะได้ไฟล์ libflashplayer.so แล้วเอาไปไว้ใน ~/.mozilla/plugins
4. nspluginwrapper -i ~/.mozilla/plugins/libflashplayer.so

เรียบโร้ย..

24 กุมภาพันธ์ 2553

การ recover ข้อมูลหลังจากฮาร์ดดิสก์ OS ของ Openfiler พัง

เมื่อวันก่อนมีปัญหาว่าฮาร์ดดิสก์ตัว OS ของเครื่อง Openfiler มันเดี้ยง ก็เลยทำให้ต้อง re-install Openfiler ลงบนฮาร์ดดิกสก์ตัวใหม่

โชคดีที่ฮาร์ดดิสก์ตัวเก็บ data ไม่พัง แต่ปัญหาก็คือว่าไม่ได้ backup configuration เอาไว้ ก็เลยต้องหาทาง recover เอาเอง เลยเอามาเขียนเก็บไว้ดังนี้
  1. ลง Openfiler ในฮาร์ดดิสก์ตัวใหม่
  2. หลังจากบูต Openfiler ขึ้นมาแล้ว ใช้คำสั่ง pvscan ซึ่งจะได้ output ประมาณนี้

    # lvs -a
    LV VG Attr LSize Origin Snap% Move Log Copy% Convert
    vol_share 500g -wi-a- 232.88G
    office2-iscsi md0raid1 -wi-ao 149.03G
    office3data office3 -wi-ao 78.12G
  3. ซึ่งก็คือเรามี volume group เดิมอยู่ 3 volume ได้แก่ 500g, office3 และ md0raid1
  4. ไป edit ไฟล์ /opt/openfiler/etc/volumes.xml ซึ่งถ้ายังไม่ได้มีการสร้าง volume อะไรในระบบ จะมีหน้าตาประมาณนี้

    <?xml version="1.0" ?>
    <volumes>
    </volumes>

  5. ให้เพิ่ม volume ของเราเข้าไปใน <volumes></volumes> ดังนี้

    <?xml version="1.0" ?>
    <volumes>
    <volume id="office3data" name="Office3 data volume" mountpoint="" vg="office3" fstype="iscsi" />
    <volume id="office2-iscsi" name="Office2 disk volume" mountpoint="" vg="md0raid1" fstype="iscsi" />
    </volumes>

    เป็นการเพิ่ม volume office3data และ office2-iscsi ให้กับ Openfiler
  6. จากนั้นก็ทำการสร้าง iSCSI Target ตามวิธีที่ http://www.techhead.co.uk/how-to-configure-openfiler-v23-iscsi-storage-for-use-with-vmware-esx
  7. ที่สำคัญคือหลังจากแก้ไขทั้งหมดแล้วควรจะ reboot openfiler ทีนึงก่อนทำงานต่อ