Friday, June 27, 2008

Longdo Gadget สำหรับ iGoogle

บ่ายนี้หัดทำ Gadget สำหรับ iGoogle ได้มาอันนึงของ Longdo Dict

ใส่ลงไปในหน้า iGoogle ของตัวเองได้ โดยคลิกที่ "+ Google" (ข้างบนนี้ใช้งานได้นะ)

Thursday, June 26, 2008

จำนวน Client ของ Share Folder บน XP Professional

ปกติเวลาไปสอนหนังสือ จะมีชั่วโมงแล็บให้นักเรียนเขียนโปรแกรม หลายครั้งต้องเอาไฟล์ข้อมูลหรือไฟล์เอกสารไปแจกด้วย ก็มักจะวางไว้บนคอมพิวเตอร์เครื่องหนึ่งในห้องนั้น แล้วเปิดเป็นแชร์โฟลเดอร์เอาไว้ ให้นักเรียนเปิดเข้ามาเอาเอง

เช่น ถ้าวางไว้บนเครื่องที่มี IP 1.2.3.4 ก็ให้เปิดมาที่ \\1.2.3.4\ShareFolder\ ทุกเครื่องเป็น iMac 20" (ว้าว) แต่ดันบูทใช้เป็น Windows XP Professional ปัญหาก็คือว่า คนแรกๆจะเปิดได้ จากนั้นสักพักคนหลังๆก็จะต่อไม่ได้ ขึ้นข้อความผิดพลาดอะไรสักอย่างหนึ่ง

ตรวจสอบเครือข่ายก็ปกติดี Ping กันได้ดีอยู่ ไล่ไปไล่มา คิดว่าน่าจะเป็นเพราะจำนวน Client ที่เชื่อมต่อเข้ามามีมากเกินไป Windows XP มันไม่รับอีก (เดา) เปิดไปเปิดมา ไปเจอว่าใน Computer Management (คลิกขวาที่ My Computer แล้วเลือก Manage) จะมีกิ่งหนึ่งที่เกี่ยวกับ Session ของ Shared Folders

จะมี Session ที่เปิดค้างไว้นานแล้วโผล่มาตรึม (ประมาณ 10 ?) ในเมนู Action เลือก Disconnect All Sessions ปุ้บ ให้เด็กที่เมื่อกี้มีปัญหาลองต่อเข้ามาใหม่ ต่อได้แล้ว !

Thursday, June 19, 2008

นพดลต้องถูกตัดหัว

ฟังนายตาเขแถลงเมื่อวานแล้วมันทนไม่ได้ เรื่องปราสาทเขาพระวิหาร เท่าที่ทราบ ประเด็นที่ศาลโลกตัดสินเรายังไม่ยอมรับอย่างเป็นทางการ และยังสงวนสิทธิ์ในการโต้แย้งในอนาคต (อ้างอิง) เพราะปกติเขตแดนเขาก็แบ่งกันตามแนวธรรมชาติ แม่น้ำ สันปันน้ำ ฯลฯ แต่ยุคนั้นฝรั่งเศสลักไก่วาดเส้นเอาปราสาทไปดื้อๆ ทั้งๆที่อยู่ในฝั่งไทยถ้าดูตามแนวสันปันน้ำ อีกทั้งทางขึ้นปราสาทก็อยู่ฝั่งไทย จากกัมพูชาต้องปีนหน้าผาเอา

ศาลตัดสินให้เราแพ้ เพราะเราไม่โต้แย้งแผนที่ที่ฝรั่งเศสวาด

ส่วนบริเวณโดยรอบๆ ถือว่าเป็นของไทยแน่นอน

มาเมื่อวาน ไอ้ตาเขแถลงว่า ไทยยอมรับในแผนที่ใหม่ว่าปราสาทเป็นของกัมพูชา และบริเวณโดยรอบที่มีข้อขัดแย้งจะมาเจรจารายละเอียดในอนาคต

เท่ากับว่า

เดิม: ปราสาท-ยังแย้งกันอยู่, บริเวณโดยรอบ-ของไทย แต่ถูกรุกล้ำ
ใหม่: ปราสาท-ยกให้กัมพูชา, บริเวณโดยรอบ-เปิดช่องให้เขาเจรจา

มันยกดินแดนให้เขาไปชัดๆ ยังมีหน้ามาเรียกร้องจะเอาดอกไม้ !! แถลงเสร็จก็ไม่แจกสำเนาแผนที่ให้ ลับๆล่อๆ เรื่องใหญ่แบบนี้ก็ไม่เอาเข้าสภา เหมือนเขาเรียกร้องเอา 20 ไปเจรจายกให้เขาไป 10 ทั้งๆที่ไม่ควรยอมให้เลยสัก 1

เดิม UNESCO อาจจะไม่อยากจดเพราะมันไม่แน่ว่าเป็นของไทยหรือกัมพูชา แล้วมันเรื่องอะไรต้องไปรับรองให้ว่าเป็นของกัมพูชา ให้เขาไปจดทะเบียนมรดกโลก

Tuesday, June 17, 2008

ทดสอบ True ADSL ที่ 5Mbps

เมื่อวันศุกร์ ไป Upgrade ความเร็ว ADSL ของออฟฟิสจาก 1Mbps เป็น 5Mbps เขาบอกทำเรื่องเสร็จแล้วจะปรับให้ภายใน 24 ชม. ผ่านมาหลายวันแล้วก็เลยหาเว็บทดสอบความเร็ว ไปเจออันนี้ของ Kapook

http://speedtest.kapook.com/

ได้ผลดังนี้

ดูเหมือนตัวเลข 4328 ได้จากการเอาอัตราข้อมูลที่วัดได้ 541KBytes/sec ด้านล่างมาคูณด้วย 8 ซึ่งน่าจะต่ำกว่าความเป็นจริงเล็กน้อย เพราะในตัว TCP/IP มี Overhead อยู่อีกหน่อย แสดงว่าของจริงก็สูงกว่า 4328 หน่อยนึง ขาขึ้นก็ถูกจำกัดไว้ที่ 512kbps

ลองวัดด้วย sftp หรือ wget ไฟล์โตๆจาก Longdo.com ก็ได้ค่าพอๆกัน ~500KBytes/sec

ส่วนของที่บ้าน 1Mbps วัดได้ดังนี้

Wednesday, June 11, 2008

Bangkok Traffic iGoogle Gadget

เห็นใน iGoogle มีหน้าให้ทำ Gadget ง่ายๆ สำหรับแปะรูปถ่าย ฯลฯ นึกได้ว่าเคยมี URL สำหรับสร้างแผนภาพจราจร น่าจะเอามาทำได้แบบนี้

เพื่อที่จะเอาไปใส่ใน iGoogle แบบนี้

และติดตั้งได้โดย

Add Bangkok Traffic Gadget to your iGoogle

Thursday, June 05, 2008

ซ่อม permission ของ Installer บน iPhone

วันนี้เปิด Installer ขึ้นมา เจอหน้าจอแบบนี้

นึกขึ้นได้ว่า ไม่กี่วันก่อนเพิ่งหาเรื่อง ย้ายโฟลเดอร์ /Applications ทั้งหมดของ iPhone จาก / (ซึ่งมีขนาด ~300MB) ไปที่ /private/var (ซึ่งมีขนาด ~15GB) เนื่องจาก / ใกล้เต็มหลังติดตั้งโปรแกรมเข้าไปเยอะ (จน Installer เตือนว่าใกล้เต็มแล้วนะ ทั้งๆที่ยังมีเหลืออยู่ ~10MB)

ตอนนั้นก็ย้ายแล้วทำ symlink เหมือนตอนแก้ปัญหาทำนองนี้บน Unix ทั่วไป

# cd /
# cp -R Applications /private/var
# mv Applications ApplicationsO
# ln -s /private/var/Applications .
Reboot ทีนึง แล้วก็ ให้ Process ทั้งหลายที่ใช้ไฟล์ใน /ApplicationsO (ซึ่งก็คือ /Applications เดิม) ปลดปล่อยไฟล์ให้หมด จากนั้นก็ค่อยมาลบทิ้ง
# rm -fr /ApplicationsO
สรุปว่าได้ เนื้อที่ว่างใน / มาเป็น 40MB (ตอนแรกสุดก่อนติดตั้งโปรแกรมต่างๆลงไป มีประมาณ 30MB)

จากข้อความในภาพข้างต้น แสดงว่าไม่ owner หรือไม่ก็ permission ของ Installer.App คงผิด ลองเข้าไปตรวจดู พบว่า owner เป็น root.wheel ถูกต้องอยู่แล้ว เลยลองแก้แค่ permission

# chmod +s /Applications/Installer.App/Installer
แล้วเปิด Installer อีกครั้ง ใช้ได้แฮะ เลิกบ่นแล้ว ติดตั้งโปรแกรมได้ตามปกติ

Monday, June 02, 2008

ใช้ Hibernate ใน Eclipse

(this article is under construction)

Hibernate

ตัวอย่างการใช้งาน

ขั้นตอนการติดตั้ง และใช้งาน Hibernate กับโปรแกรม Java ใน Eclipse มีดังต่อไปนี้

  1. ติดตั้ง Eclipse Europa

  2. ติดตั้ง Hibernate Tools for Eclipse and Ant ลงใน Eclipse Europa

  3. สร้าง Project ใหม่ใน Eclipse สมมติว่าชื่อ TestHibernate

  4. สร้าง Hibernate Configuration File

    ใน Project TestHibernate สร้าง Hibernate Configuration File โดยคลิกขวาที่ชื่อ เลือก New -> Other แล้วค้นหา Hibernate Configuration File

    ระบุตำแหน่งของไฟล์ hibernate.cfg.xml ว่าอยู่ใต้ Project นี้แหละ

    กรอกข้อมูลเกี่ยวกับฐานข้อมูล วิธีการเชื่อมต่อ รหัสผ่าน ฯลฯ เท่าที่ทราบ ไม่ต้องเครียด เดี๋ยวแก้ในไฟล์ XML ด้วยมืออีกที

    สุดท้ายอย่าลืมเลือก "Create a console configuration"

    จากนั้นก็กด OK (หรือ FINISH) ไปเรื่อยๆ จนกระทั่งได้ไฟล์ hibernate.cfg.xml ออกมาใต้ Project นี้

    ลองเปิดขึ้นมาดู เนื้อหาไฟล์ควรมีหน้าตาทำนองนี้ อาจจะแก้ไข connection string, ชื่อฐานข้อมูล ชื่อคลาสที่เป็น JDBC Driver ฯลฯ ได้ตามสบาย

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
      "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
      "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
            <property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
            <property name="hibernate.connection.password">hui</property>
            <property name="hibernate.connection.url">jdbc:sqlserver://192.168.1.111;DatabaseName=pool;SelectMethod=cursor</property>
            <property name="hibernate.connection.username">sa</property>
            <property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
        </session-factory>
    </hibernate-configuration>
    
    

  5. ทดสอบการเชื่อมต่อฐานข้อมูลใน Hibernate Configurations View

    ดูว่าที่แถบด้านล่างมี Hibernate Configurations แล้วหรือยัง

    ถ้ายังไม่มี ก็ให้เปิดโดยเลือกจากเมนู Window -> Show View -> Others

    ถ้าทำการตั้งค่าทุกอย่างถูกต้องเมื่อกี้นี้ เมื่อคลิกที่เครื่องหมาย + หน้า TestHibernate ที่เพิ่งสร้างใหม่ มันควรจะทำการเชื่อมต่อไปที่ฐานข้อมูล และแสดงรายชื่อฐานข้อมูล ฯลฯ มาให้ดูได้ดังนี้

    แต่ถ้าเกิดข้อผิดพลาดใดๆ ให้ลองแก้ไขค่าใหม่ โดยคลิกขวาที่ TestHibernate แล้วเลือก Edit Configuration

    ข้อผิดพลาดที่พบบ่อยคือ หา Class ที่เป็น JDBC Driver ไม่เจอ ซึ่งแก้ไขได้โดยการเพิ่ม JAR ของ JDBC Driver นั้นลงในหน้า Classpath ของ Edit Configuration

    จากนั้นให้สั่ง "Rebuild Configuration" แล้วทดลองคลิกที่เครื่องหมาย + หน้า TestHibernate อีกครั้ง

  6. ทำวิศวกรรมย้อนกลับฐานข้อมูล

    เมื่อทดสอบว่าทำการเชื่อมต่อโดยใช้ TestHibernate ได้สำเร็จแล้ว สามารถสั่งให้ Hibernate Tools สร้างคลาสต่างๆที่จำเป็นจากโครงสร้างฐานข้อมูลที่มีอยู่เดิม โดยการทำวิศวกรรมย้อนกลับได้ดังนี้

    เลือก "Open Hibernate Code Generation Dialog" จากปุ่ม Run ของ Hibernate Tool

    ในหน้าจอที่ปรากฏขึ้นมา สร้าง Configuration ใหม่ ตั้งชื่อว่า TestConfiguration โดยกำหนดค่าดังนี้

    • เลือก Console configuration ชื่อ TestHibernate ที่เพิ่งสร้างก่อนหน้านี้
    • ตั้ง Output directory เป็นโฟลเดอร์ src ใต้ Project
    • ใส่เครื่องหมายถูกหน้า "Reverse engineer from JDBC connection"
    • ตั้งชื่อ package ของโค้ดที่จะถูกสร้างขึ้นมา ในที่นี้ใช้ชื่อ autogetn

    จากนั้นคลิกที่ "Setup" ข้าง Reveng.xml เพื่อตั้งค่ารายละเอียดตารางของฐานข้อมูลที่ต้องการสร้างคลาส หน้าจอถามว่าต้องการสร้างไฟล์ reveng.xml ใหม่หรือไม่ ตอบตกลง

    ระบุตำแหน่งที่จัดเก็บไฟล์ reveng.xml

    ในหน้าจอ Table Filter ให้กดปุ่ม Refresh

    จะได้รายชื่อตารางในฐานข้อมูลที่ระบุไว้ใน jdbc ปรากฏขึ้นมา เลือกตารางที่ต้องการแล้วกดปุ่ม Include

    ตรวจสอบค่าต่างๆในหน้านี้ให้เหมือนดังภาพข้างล่าง แล้วกด Apply

    พลิกไปที่หน้า Exporters เลือกให้สร้างไฟล์ดังภาพข้างล่างนี้แล้วกด Apply

    Domain Code คือ VO (Value Ojbect) คลาสที่แทน 1 record ใน Table DAO คือ คลาสสำหรับอ่านเขียนข้อมูล (VO) จากตาราง และ HTML คือเอกสารโครงสร้างของตาราง ฯลฯ ส่วนไฟล์ XML Mapping เก็บรายละเอียดความสัมพันธ์ของคลาส VO ทั้งหลายที่สร้างขึ้น กับตารางจริงในฐานข้อมูล ไฟล์เหล่านี้เอาไว้ใช้ตอนสร้าง SessionFactory ของ Hibernate

    กดปุ่ม "Run" ถ้าทุกอย่างเรียบร้อย จะได้ไฟล์ต่างๆในโฟลเดอร์ "autogen" (ที่ระบุไว้ในช่อง package) ดังนี้

    คลาสจะมีชื่อตรงกับชื่อของตารางในฐานข้อมูล คลาสที่ชื่อลงท้ายด้วย Home คือคลาส DAO ของตารางนั้นๆ

  7. ทดสอบการใช้งานฐานข้อมูลผ่าน Hibernate