15 November 2004

Altivec

ลองบน Mac บ้าง G4 มีส่วนประมวลผลเวคเตอร์ที่เรียกว่า Altivec ซึ่ง ทำหน้าที่คล้าย MMX และ SSE เลยลองเขียนโปรแกรมแบบเดียวกัน อาศัยข้อมูลจาก G4 Tutorial

#include <stdio.h>
#include <math.h>

union float4 {
  vector float v;
  float f[4];
};

int main (int argc, const char * argv[]) {
  vector float z;
  union float4 x, y, w;
  float d, d2;
  int i;
	
  x.v = (vector float)(1.0, 1.1, 2.3, 1.3);
  y.v = (vector float)(1.2, 2.1, 3.1, 0.9);
	
  z = vec_sub(x.v, y.v);
  w.v = vec_madd(z,z,(vector float)(0.0));
  d2=0.0;
  for(i=0; i<4; i++)
    d2 += w.f[i];
  d = sqrt(d2);
	
  printf("%f\n", d);
  return 0;
}

MMX & SSE

เมื่อวานว่างๆ เลยลองหาวิธีเขียนโปรแกรมที่ใช้ MMX กับ SSE เพื่อประมวลผลเวคเตอร์ ลองหาคู่มือของ gcc ดู ก็พบว่าสนับสนุน MMX กับ SSE แล้ว ส่วน SSE2 เพิ่งเริ่มใช้ได้ในเวอร์ชัน 3.4 วิธีเขียนโปรแกรมก็ไม่ยาก ลองดูตัวอย่างจาก http://ds9a.nl/gcc-simd/ แล้วลองเขียนโปรแกรมหาค่า Euclidean distance แบบง่ายๆ ดู

#include <stdio.h>
#include <math.h>

typedef float v4sf __attribute__ ((mode(V4SF)));

union float4 {
  v4sf v;
  float f[4];
};

main() {
  float4 x,y,z;
  float d,d2;

  z.v = (x.v - y.v) * (x.v - y.v);
  d2 = 0.0;
  for(int i=0; i<4; i++)
    d2+=z.f[i];
  d =sqrt(d2);
}

วิธีกำหนดให้ใข้เวคเตอร์ ก็แค่ใส่ __attribute__ ไว้หลัง typedef ส่วน V4SF ก็คือเวคเตอร์ของ float จำนวน 4 ตัว เวลากำหนดค่าแต่ละตัวก็ใช้ union ร่วมกับอะเรย์เอา เวลาคำนวณก็ง่าย เพราะใช้ operator เหมือนเดิม (ที่จริงมีฟังก์ชันเฉพาะด้วย) ส่วนถ้าอยากจะใช้ตัวแปรแบบอื่น เช่น int ก็เปลี่ยน mode เป็น V4SI ได้ ถ้าจะใช้ double ก็ใช้ V4DF (แต่ว่า double นี้จะสนับสนุนในเวอร์ชัน 3.4 ขึ่นไปเท่านั้น) ต่อไปก็ต้องลองเทียบเวลาดู เวลาเร็วกว่ากันเยอะไหม

11 November 2004

Spyware

ใช้ Linux นานๆ นี่ก็มีข้อเสียเหมือนกันนะ ทำให้มองข้ามปัญหาต่างๆ ไปเยอะเหมือนกัน เช่นไวรัสก็ไม่เคยสนใจ เพราะบน Linux ไม่มีปัญหาพวกนั้น ปัญหาเกี่ยวกับความปลอดภัย น่าจะเป็นพวกหนอน หรือรูรั่วต่างๆ ซึ่งถ้าตั้งไฟร์วอลปิดทุกอย่างไว้ ก็ค่อนข้างอุ่นใจว่าน่าจะปลอดภัย แต่บน Windows นี่อีกเรื่องหนึ่งเลย วันก่อนเครื่องที่เด็กที่แล็บใช้ อยู่ดีๆ ก็เข้าเว็บภายในของแล็บไม่ได้ (ไม่ใช่ภายในทีเดียวหรอก เพียงแค่จำกัด IP เอาไว้) ตอนแรกก็คิดว่าฮาร์ดดิสก์จะมีปัญหา เพราะเครื่องที่คุณเลขาใช้เคยเป็น พอมี bad cluster มากๆ แล้วทำให้ส่วนอื่นรวนไปหมด ปรากฏว่าดูแล้วก็ไม่ใช่ ไวรัสก็หาไม่เจอ ค่าต่างๆ ก็ดูปกติ พอไปดู log ของ web server ก็แปลกใจว่าทำไม IP ของเครื่องนั้นเปลี่ยนไปทุกครั้ง สุดท้ายก็เลยเจอว่าโดน spyware ชื่อ Marketscore ซึ่งจะไปกำหนดให้ใช้ proxy ที่กำหนดไว้เสมอ (เหมือนต้องการข้อมูลว่าแต่ละคนเข้าเว็บไหนบ้าง) ทำให้เข้าเว็บภายในไม่ได้ เพราะล็อกเอาไว้ สุดท้ายเลยต้องให้เอาโปรแกรมที่ชื่อ SpyBot มาลงทุกคน แล้วก็นั่งเช็คว่ามีใครติดอะไรบ้าง ปรากฏว่าโดนกันแทบทุกคน มากบ้างน้อยบ้าง ส่วนใหญ่มักจะเป็นพวก cookie หรือ banner แต่วิธีการป้องกันนี่ก็ลำบากเหมือนกันนะ เพราะไปโหลดโปรแกรมมาลงเอง แล้วก็ไม่มีอะไรรับรองได้เลยว่า โปรแกรมที่โหลดมามี spyware แถมมาด้วยหรือเปล่า ตอนนี้คงได้แค่เลือกโหลดจะไซท์ที่คิดว่าไว้ใจได้เท่านั้นแหละมั้ง จนกว่าจะเอา digital signature มาใช้ ส่วน Linux ก็ยังอุ่นใจได้อยู่เหมือนเดิม อย่าง portage ของ Gentoo ก็ใช้ GPG แล้วนะ

GMail POP/SMTP

เจอข่าวที่ ITMedia.co.jp ว่า Gmail ให้บริการ POP/SMTP แล้ว เพิ่งรู้เหมือนกัน ใช้อยู่ทุกวันไม่ได้สังเกตเลย เพราะเดี๋ยวนี้เอา Gmail ไว้เก็บเมลที่ส่งมาที่แล็บ ไว้เปิดดูที่บ้าน เนื่องจากขี้เกียจเซ็ต Thunderbird อีกอย่างก็คือ เดี๋ยวนี้เวลาอยู่บ้าน แค่เช็คเมลจริงๆ ถ้าไม่ใช่เรื่องเร่งด่วนก็ยังไม่ตอบอยู่แล้ว เลยใช้แค่ Gmail ก็พอ

09 November 2004

Pukiwiki

ช่วงนี้มัวแต่นั่งทำโฮมเพจของห้องแล็บใหม่ หลังจากมีหลายคนบ่นว่าโฮมเพจเดิมแย่มาก ไม่ค่อยมีข้อมูลอะไร โผล่เข้ามาก็เจอชื่อคนในแล็บเลย แถมรูปต่างๆ ก็ไม่สวย (โฮมเพจที่ใช้อยู่นี้มีมาตั้งแต่ ศ. คนเก่ายังไม่เกษียณ แสดงว่าอย่างน้อยสองปีแล้ว) ทีนี้ไหนๆ ก็จะทำใหม่ เลยเอา Pukiwiki มาใช้เป็นจัดการเนื้อหา ทำให้แก้ไขเนื้อหาได้ง่ายขึ้น Pukiwiki เป็น Wiki อันหนึ่งที่พัฒนาโดยคนญี่ปุ่น ใช้ php ทั้งหมด และไม่ใช้ DBMS ทำให้ติดตั้งง่าย และเป็นที่นิยมในญี่ปุ่น แต่หลังจากแก้ไขหน้าตาแล้ว ก็พบว่า Pukiwiki ยังมีข้อจำกัดในเรื่องการจัดการคนใช้ เพราะต้องกำหนดผู้ใช้ไว้ในไฟล์ pukiwiki.ini.php เอง ระบบไม่จัดการให้ ทำให้กำหนดพาสเวิร์ดลำบาก สุดท้ายเลยแก้ php เองให้ใช้ crypt() แล้วไปตัดพาสเวิร์ดมาจาก Solaris มาใช้เป็นอันว่าแก้ปัญหาได้ เพราะเอาไปผูกไว้กับ Solaris เลย ในแง่ความปลอดภัยแล้วคงไม่ดีเท่าไหร่ แต่จัดการแก้ใช้ Pukiwiki เช็คไอพีด้วย ถ้าเป็นคนนอกก็ไม่รับพาสเวิร์ดใดๆ ทั้งสิ้น คิดว่าคงปลอดภัยเพียงพอ ทีนี้ก็เหลือแต่จัดการเนื้อหา ตอนนี้เลยต้องมานั่งแปลภาษาญี่ปุ่นเป็นอังกฤษ เพราะจะได้มีเนื้อหาเท่าเทียมกัน