วันจันทร์, พฤษภาคม 30, 2548

ใช้อันไหนดี ArrayList, LinkedList หรือ Vector

โดยทั่วๆไป ArrayList น่าจำเป็นคำตอบที่ดี(เร็ว) ในหลายๆ กรณี.
หากต้องการ Synchronized List ก็ให้ใช้ Vector.
รายละเอียดเพิ่มเติม ที่ Performance of Java Collections that implements the List - Interface

วันอาทิตย์, พฤษภาคม 29, 2548

เกี่ยวกับJava : การประกาศ Class และ สมาชิกของ Class

อยากเขียนโปรแกรมให้สวยๆ ก็เลยต้องศึกษา, วางแผน ให้รอบคอบก่อนแล้วค่อยลงมือ. เกิดสะดุดใจอยู่เรื่อง modifier เวลาประกาศ class ของ Java ว่ากันสั้นๆ สรุปเป็นตารางก่อนตามนี้ :
Class Declaration Elements
Element Function
public (Optional) Class is publicly accessible.
ส่วนขยาย public บอกว่าคลาสนี้สามารถเรียกใช้ได้จาก
คลาสอื่นๆ อย่างสาธารณะ (ต่างแพคเกจก็เรียกใช้ได้). ถ้าไม่ประกาศ public คลาสนี้ จะสามารถเรียกใช้ได ้จากคลาสอื่นในแพรเกจเดียวกันเท่านั้น.
ดูเพิ่มเติมที่ Creating and Using Packages  (in the Learning the Java Language trail)
abstract (Optional) Class cannot be instantiated
ส่วนขยาย abstract บอกว่าคลาสนี้ไม่สามารถนำไปสร้าง instance ได้. เพราะมันเป็นคลาสนามธรรม.
ดูเพิ่มเติมที่ Writing Abstract Classes and Methods (in the Learning the Java Language trail)
final (Optional) Class cannot be subclassed
สำหรับเหตุผลว่าทำไมถึงอยากให้มี final class ดูเพิ่มเติมที่
Writing Final Classes and Methods (in the Learning the Java Language trail)
class NameOfClass ชื่อคลาส
extends Super (Optional) Superclass of the class
ส่วนขยาย extends ระบุ superclass ของ class ที่ประกาศ.
คลาสที่ประกาศก็จะถูกบรรจุอยู่ในลำดับชั้นของการสืบทอดคลาส.
ดูเพิ่มเติมที่ Managing Inheritance (in the Learning the Java Language trail)
implements Interfaces (Optional) Interfaces implemented by the class
ใช้คีย์เวิร์ด implements ตามด้วยรายการชื่ของ interface ที่จะอิมพลีเมนต์ (ขั้นแต่ละชื่อด้วยคอมม่า). หลักการสร้างและการใช้ interface ดูเพิ่มเติมที่ Creating and Using Interfaces (in the Learning the Java Language trail).
{
ClassBody
}
Provides the class's functionality

การควบคุมการแอคเซส สมาชิกของคลาส

ในทำนองเดียวกับเรื่องการประกาศคลาสข้างบน การประกาศสมาชิกของคลาส กำหนดการเข้าใช้สมาชิกของคลาสนั้น จากข้างนอก สรุปเป็นตารางสั้นๆ ดังนี้:
Access Levels
Specifier Class Package Subclass World
private Y N N N
no specifier Y Y N N
protected Y Y Y N
public Y Y Y Y
ข้อควรระวัง access level เป็นตัวกำหนดว่า คลาสไหน สามารถแอคเซสสมาชิกที่ ถูกโมดิฟาย นั้นได้. มิใช่ว่า อินสแตนซ์ไหน สามารถแอคเซสได้.

ตัวอย่าง
package One;
public class Alpha {
private int iamprivate = 1;
private void privateMethod() {
System.out.println("iamprivate Method");
}
...
public boolean isEqualTo(Alpha anotherAlpha) {
if (this.iamprivate == anotherAlpha.iamprivate) {
//legal
return true;
} else {
return false;
}
}
}
คลาส Alpha ข้างบนนั้น สามารถ อ้างถึง private member ของอินสแตนซ์ อื่นได้ เพราะมันเป็นอินสแตนซ์ของคลาสเดียวกัน. คราวนี้พิจารณาคลาส DeltaAlpha
package One;
public class DeltaOne {
public static void main(String[] args) }
Alpha a = new Alpha();
//a.privateMethod(); //illegal
a.packageMethod(); //legal
a.protectedMethod(); //legal
a.publicMethod(); //legal
//System.out.println("iamprivate: "
// + a.iamprivate); //illegal
System.out.println("iampackage: "
+ a.iampackage); //legal
System.out.println("iamprotected: "
+ a.iamprotected); //legal
System.out.println("iampublic: "
+ a.iampublic); //legal
}
}
จะเห็นได้ว่า private member และ private method นั้น เราไม่สามารถแอคเซสได้ จากคลาสอื่นที่ไม่ใช่คลาส Alpha แต่เราสามารถแอคเซส protected member และ protected method ได้จาก DeltaAlpha เพราะว่ามันอยู่ในแพคเกจเดียวกัน

รายละเอียดเพิ่มเติมดูจาก การควบคุมการแอคเซสสมาชิกของคลาส สำหรับการใช้และสร้างแพคเกจ --> Creating and Using Packages (in the Learning the Java Language trail).

วันจันทร์, พฤษภาคม 23, 2548

ปัญหา Mac OS X แชร์ไฟล์กับ Windows2000 Server และ TLS/SSL ftp

มีปัญหาเรื่องจะแชร์เพลงใน Music Server มาฟังที่เครื่องแมค อยู่นาน
พึ่งมาเจอว่าที่ Server มันไม่ได้ enable NETBIOS over TCP/IP ไว้
เลย enable อันที่เป็น interface ที่ 2 แล้วก็แอคเซสได้ด้วย mount_smbfs
------------
หาซอฟต์แวร์ที่ทำ ftp แบบรองรับ TLS/SSL ได้. หาอยู่ตั้งนานเออ...
ส่วนมากมีแต่แชร์แวร์ ขัดกับอุดมการณ์ ก็เลย เอาวะ ลง fink ซะเลย
พอดีมันมี ftp-tls เป็น patch ของ ftp ของ OpenBSD ซึ่งทำให้รองรับ
ก็เลยลองเล่นดู. command-line เนี่ยแหละเก๋า.
แต่เวลาจะเรียกใช้กับโฮสภาคต้องให้มันใช้ TLS กับ data channel ด้วย
ต้องเรียกด้วย $ ftp -z private

วันพฤหัสบดี, พฤษภาคม 19, 2548

Eject CD tray in Mac OS X by F12 key.

ใช้ SpaceSaver II Keyboard ของ IBM เลยไม่มีปุ่ม eject CD ให้กดใน Mac OS X.
เวลาจะเอา ซีดี ออกทีก็ต้องถ่อเปิด iTunes ขึ้นมาแล้วกด Winkey + E เอา.
โง่อยู่นาน... วันนี้ลอง google หาดูเออ กด F12 ก็ได้เหมือนกันนี่หว่า
แต่ว่าต้องกดค้างสัก 2 วินาทีนะ ไม่งั้นไม่เวิร์ค. โอ้ เยี่ยม จดไว้กันลืม.

วันจันทร์, พฤษภาคม 09, 2548

็็H8 interrupt ทำอย่างไร?

วันนี้อยากจะลองใช้ interrupt กับ H8 ดู เลยลองคุ้ยๆดูใน google
ก็ไปเจอ เมล์ลิ่งลิสต์ นี้เข้า
คิดว่าน่าจะใช้ได้ทีเดียว
http://www.toppers.jp/TOPPERS-USERS/200501/msg00019.html

แ่ต่มันค่อนข้างยุ่่งยาก เอาวะ ไว้วันหลัง
อันนี้ก็เป็นอีก ไซต์นึงที่เขียนเกี่ยวกับ interrupt ไว้นิดหน่อย
http://robotics.toyama-nct.ac.jp/H8/toppers/

วันนี้เหนื่อยแล้ว พอแค่นี้ก่อนเว๊ย