Theppitak's blog

My personal blog.

12 ธันวาคม 2547

งานวันหยุด

หยุดสามวันครั้งนี้ ค่อยว่างหน่อย อาจเป็นเพราะธุระอื่นๆ ของท่านทั้งหลายได้เสร็จสิ้นไปแล้ว ตั้งแต่ช่วงหยุดวันพ่อ แต่วันศุกร์ก็ใช้ไปกับการเดินงานไหมกับแม่ แล้วก็ดู Finding Nemo (พักนี้พลาดหนังโรงตลอด แต่ก็ดีเหมือนกัน ดูซีดีก็ได้ฟัง sound track ด้วย แถวนี้หนังโรงพากย์ไทยล้วนๆ) ดูแล้วรู้สึกทะนุถนอมปลาที่เลี้ยงไว้ขึ้นอีกเยอะ ในเรื่องมีการจับเอาปรากฏการณ์บอกต่อแบบ forward mail ในอินเทอร์เน็ตมาใช้ด้วยแฮะ

ว่าแล้วก็กลับมาทำงาน:

  • พยายามแก้ปัญหา license ใน thaifonts-scalable อีกครั้ง
  • แก้คำแปลใน gnome-applets หลังจากที่ไปเจอคำแปลแปลกๆ ระหว่างเซ็ตเครื่องสอนลินุกซ์ พร้อมกันนี้ ก็แปลแพกเกจใหม่เพิ่มอีกสองตัว คือ gnome-menus และ procman ทั้งหมด commit เข้า GNOME CVS แล้ว
  • ติดตาม AbiWord Bug #8064 (crash/hang กับ XIM ไทย) เป็นไปตามที่คาด ว่าการ revoke bug เก่า เขาไม่ยอม (จริงๆ ก็ไม่ได้คิดจะ commit แบบนั้นอยู่แล้วแหละ แค่เป็น workaround ที่ช่วยบรรยายปัญหาให้ใกล้เข้าไปแค่นั้น) แต่คำอธิบายของเขาก็ทำให้กระจ่างขึ้น ว่าโค้ดที่ใช้หาตำแหน่งต้นย่อหน้านั้น เอาไว้ใช้กับการเคลื่อนไปมาในเอกสาร พอเจอต้นย่อหน้า มันเลยพยายามกระโดดไปย่อหน้าก่อน เพื่อให้ต่อเนื่อง ไอ้เราก็งง ว่า operation นี้มันน่าจะ atomic คือย้ายไปต้นย่อหน้าก็พอ จะกระโดดต่อก็ให้เป็นเรื่องของคน call สิ แต่พอ search source tree ไป ก็เจอการใช้งานหลายที่ ที่ทำให้ต้องยอมเขาละ ก็เลยเสนอเขาไปว่าน่าจะเพิ่มการเคลื่อนที่แบบ "begin of same block" ด้วยไหม? (ตาม patch ซึ่งทดลองแล้ว work ขาดก็แต่ว่า มัน make sense ในทางเทคนิคหรือเปล่าแค่นั้น)

3 ความเห็น:

  • 13 ธันวาคม 2547 16:46 , Blogger ziddik::zdk แถลง…

    ทำไมสามารถเรียก function ใน C ได้เหมือนกันทั้งสองแบบอ่ะครับ?

    1.(objects[type_variable]->init)(pointer_variable);
    2.(*objects[type_variable]->init)(pointer_variable);

    แต่เห็นว่าถ้าแบบสองจะถูกต้องกว่า...พี่เทพพอจะทราบรึเปล่าว่าเพราะอะไร?


    ป.ล.ขอโทษครับที่ฝากถามมาในนี้

     
  • 14 ธันวาคม 2547 00:20 , Blogger Thep แถลง…

    คล้ายๆ กับเรื่อง pointer กับ array น่ะครับ คือลำพังชื่อ function โดดๆ จะหมายถึง address ของ function (== pointer to function) เช่น เวลาเขียนฟังก์ชัน

    void f() { printf("hello\n"); }
    void (*pf)() = f;

    มัน assign ค่ากันได้ทันทีเพราะชนิดของนิพจน์ f คือ void (*)() (เหมือนๆ กับที่ a ใน char a[10] เป็นชนิด char *) แล้วทีนี้ การเรียก f() ตรงๆ ตามปกติก็หมายถึงการ take address ของ function ที่ได้จากค่า f นี้ แล้วเรียกไปที่ address นั้น

    ทีนี้ พอมาดู pf มันก็เป็นชนิด void (*)() เหมือนกันกับนิพจน์ g ก็เลย apply function call operator ได้เหมือน g เป็น pf() ได้เลย

    ขณะเดียวกัน *pf ก็มีชนิดเป็น void function ซึ่งการอ้างถึง void function ก็จะอ้างด้วย address เสมออย่างที่บอกข้างต้น ก็เลยไม่ต่างกับ void (*)() อยู่ดี ก็เรียกเป็น (*pf)() ได้เหมือนกัน

    ผมอธิบายเคลียร์มั้ยนี่ :-P

     
  • 14 ธันวาคม 2547 13:45 , Blogger ziddik::zdk แถลง…

    ตามที่่อธิบายมาก็พอเข้าใจครับ

    แล้วถ้ามันอ้าง address เหมือนกัน ความเร็วก็ไม่น่าจะต่างกันมั้ยครับ?

    แต่เห็นว่าเรียกแบบนี้ (*pf)() มันจะดีกว่า.. แต่ไม่ทราบว่าเพราะอะไร?

    พอทราบมั้ยครับ?

     

แสดงความเห็น (มีการกลั่นกรองสำหรับ blog ที่เก่ากว่า 14 วัน)

<< กลับหน้าแรก

hacker emblem