วันอาทิตย์ที่ 27 กันยายน พ.ศ. 2552

วันเสาร์ที่ 19 กันยายน พ.ศ. 2552

ท่าของ Pen Spinning

ขอบคุณเว็บ http://www.thaispinner.com/forum/index.php?topic=153.0

เริ่มกันเลย

ท่าตระกูล Fundamental มือใหม่ทั้งหลายควรฝึกให้ครบก่อนครับ

Thumbaround & Thumbspin 1.5 tutorial(ดูเฉพาะ TA นะจ๊ะ) - cheesecake

Sonic Normal tutorial มือซ้าย - sathonmig

Sonic Normal tutorial FULL VERSION มือขวา - cheesecake [new!!!!]

Infinity tutorial - life

Fingerpass Normal tutorial ฉบับแก้ไข - cheesecake

ท่าตระกูล Around

Anti Gravity tutorial - cheesecake

Backaround tutorial - cheesecake

Cont. Extended TA tutorial - MonoL

Cont.FL TA 2X++ tutorial - cheesecake

Double TA tutorial - cheesecake

Extended Thumbaround tutorial - 3D

Fingerless TA tutorial ฉบับแก้ไข - cheesecake

Fingerless TA reverse tutorial ฉบับแก้ไข - 3D

Ninja Fingerless Thumbaround tutorial - cheesecake

Pinky Backaround tutorial - *Neo~Nx*

Thumbaround Harmonic tutorial - MonoL

Thumbaround & Thumbspin 1.5 tutorial - cheesecake

Thumbaround Reverse tutorial - sm1lebuffal0

Backaround harmonic tutorial - Poomtay

Bakfall tutorial ภาคภาษาวัว - cheesecake

Bakfall tutorial ภาคภาษาคน - 3D

NeoSonic tutorial - cheesecake

ท่าตระกูล Sonic, (Conic Tricks)

Angel's Sonic tutorial - 3D

Demon's Devil's Shadow - Poomtay

Demon's Sonic tutorial ภาคเงียบ - mc_achapon

Demon's Sonic tutorial ภาคภาษาคน - sm1lebuffal0

Devil's Around tutorial ภาคแก้ไข - jedimage

Devil's Conversion tutorial - 3D

Devil's Shadow tutorial - Poomtay

Devil's Sonic tutorial - tonnam

Flush Sonic tutorial ภาคเงียบ - Hellzz

Flush Sonic tutorial ภาคภาษาคน - 3D

Inverse Devil's around tutorial - jedimage

Inverse Sonic tutorial - cheesecake

Inverse Sonic Reverse tutorial - cheesecake

Inverse Twisted Sonic tutorial - cheesecake

Moonwalk Sonic tutorial - cheesecake

Parallel sonic tutorial - cheesecake

Pseudo Sonic tutorial - cheesecake

Sonic Clip tutorial - 3D

Sonic Normal tutorial มือซ้าย - sathonmig

Sonic Normal tutorial มือขวา - cheesecake

Sonic Reverse tutorial - cheesecake

Sonic Rise&Fall Harmonic tutorial - cheesecake

Sonic 12-T1 tutorial - cheesecake

Tipped Sonic Fall tutorial - cheesecake

Twisted Sonic Bust tutorial ภาคเงียบ - Sakuraz

Twisted Sonic Bust tutorial 2X++ - 3D

Warped Sonic tutorial - cheesecake

ท่าตระกูล Pass

Fingerpass Normal tutorial ฉบับแก้ไข - cheesecake

Fingerpass Reverse tutorial - cheesecake

Trianglepass T12 tutorial - cheesecake

ท่าตระกูล Infinity

Double Extended Infinity tutorial - cheesecake

Double Infinity tutorial - life

Extended Infinity tutorial - cheesecake

Figure 8 tutorial - cheesecake

Figure 8 Reverse tutorial - cheesecake

Infinity tutorial - life

Infinity Reverse tutorial - cheesecake

Wiper Harmonic tutorial - MonoL

ท่าตระกูล Charge

Double Charge tutorial - cheesecake

Rising Fan tutorial - cheesecake

Triple Charge tutorial - cheesecake

ท่าตระกูล Shadow

Inverse shadow - sm1lebuffal0

Inverse shadow ฉบับแก้ไข - cheesecake

Shadow Reverse tutorial - 3D

Shadow Still tutorial - cheesecake

Shadow 12-23 tutorial - Sakuraz

ท่าตระกูล Counter

Counter Infinity tutorial - cheesecake

Counter TA Reverse tutorial - cheesecake

ท่าอื่นๆ+Tap+Aerial+Stall+Spin+Flicks+Hybrid

Bakriser tutorial ภาคเงียบ - infinity200

Bakriser tutorial ภาคภาษาคน - sm1lebuffal0

Bakriser 2X++ tutorial -3D

Basketball Spin - tonnam [new!!!!]

Cardioids tutorial - cheesecake

Corkscrew tutorial - 3D

Halftap & Halftap Reverse tutorial - jedimage

Fake Reverse 0.5 tutorial ฉบับแก้ไข - cheesecake

Leigun tutorial - jedimage

Ninja hai tua tutorial - 3D

Scissors Spin tutorial - cheesecake

TA Release ตอนต้น และ TA to air ตอนท้าย tutorial - longhorn

TA to Palmspin tutorial - Monol

Tip Stall tutorial - infinity200

ท่าพื้นฐานของโด๊งโด่ง - Dongza

Tooth brush bust tutorial - Poomtay

The Art of Pen Spinning

Pencil Spinning Tutorial

Pencil Spinning Tutorial Basics: Thumbaround

How To Make A PenSpinning Pen

Basic Pen Spinning

ยามว่างผมก็หัดเล่น Pen Spinning ครับ











วันพุธที่ 16 กันยายน พ.ศ. 2552

การเขียนโปรแรมภาษาซี ในการประมวลผลแบบเวกเตอร์ ตอนจบ

ขอขอบคุณ คุณ วัฒนา นัทธี
นอกจากจะสามารถใช้ตัวดำเนินการต่าง ๆ เช่น บวก ลบ คูณ หารกับข้อมูลแบบเวกเตอร์แล้ว จีซีซียังได้กำหนดฟังก์ชันพิเศษสำหรับจัดการข้อมูลแบบเวกเตอร์โดยเฉพาะ การใช้ฟังก์ชันพิเศษซึ่งจีซีซี เรียกว่า ฟังก์ชัน ในตัว (built-in function) นี้ อาจจะช่วยให้สามารถเขียนโปรแกรมที่ใช้งานส่วนต่าง ๆ ในโปรเซสเซอร์ได้เต็มประสิทธิภาพ หรือทำงานได้เร็วขึ้นกว่าเดิม เช่น ฟังก์ชัน __builtin_ia32_maxps(v4sf, v4sf) สำหรับหาค่ามากที่สุดระหว่างข้อมูลแต่ละตัวในเวกเตอร์ 2 ชุด กล่าวคือ เมื่อกำหนดเวกเตอร์ให้ 2 ชุด หน่วยประมวลผลจะเปรียบเทียบข้อมูลที่ตำแหน่งเดียวกัน ระหว่างเวกเตอร์สองชุด แล้วเลือกข้อมูลตัวที่มากที่สุด เพื่อสร้างเป็นเวกเตอร์ผลลัพธ์ การใช้ฟังก์ชันนี้ทำให้สามารถหาค่ามากที่สุดระหว่าง เวกเตอร์สองตัวได้ โดยไม่จำเป็นต้องเปรียบเทียบหลายครั้ง หรือฟังก์ชัน __builtin_ia32_pavgw(v4hi, v4hi) ใช้หาค่าเฉลี่ยระหว่างข้อมูลแต่ละตัวของเวกเตอร์ที่เก็บเลข จำนวนเต็ม 4 ตัว ฟังก์ชันพิเศษเหล่านี้กำหนดขึ้นตาม คำสั่งของหน่วยประมวลผล เช่น ฟังก์ชัน __buitin_ia32_maxps จะตรงกับคำสั่ง maxps ใน ภาษาแอสเซมบลี ดังนั้นการใช้การฟังก์ชันเหล่านี้จึงขึ้นกับสถาปัตยกรรม และคุณสมบัติของโพรเซสเซอร์เป็นหลัก คำสั่ง maxps นั้นจะใช้ได้เฉพาะโพรเซสเซอร์ที่สนับสนุน เอสเอสอีเท่านั้น ส่วนคำสั่ง pavgw จะใช้ได้ในหน่วยประมวลผลที่สนับสนุนเอ็มเอ็มเอกซ์

ข้อจำกัด
แม้ว่าการประมวลผลแบบเวกเตอร์จะช่วยเพิ่มความเร็วในการทำงาน ทำให้ใช้งานโพรเซสเซอร์ได้เต็มประสิทธิภาพก็ตาม แต่ก็ยังมีจุดอ่อน หรือข้อจำกัดหลายด้าน ซึ่งมีข้อจำกัดหลักอยู่ที่การนำไปใช้งานในระบบอื่นเนื่องจากวิธีการเขียนโปรแกรมแบบเวกเตอร์ค่อนข้างยึดติดกับสถาปัตยกรรม และคำสั่งของโพรเซสเซอร์ ทำให้ไม่สามารถนำโปรแกรมที่เขียนขึ้นไปใช้ในระบบอื่นได้ทันที เช่น โปรแกรมคำนวณหาระยะทางแบบยูคลิดที่นำมาเป็นตัวอย่างข้างต้น จะนำไปใช้ได้เฉพาะโพรเซสเซอร์ เพนเทียมของบริษัทอินเทล หรือโพรเซสเซอร์ของบริษัท เอเอ็มดีเท่านั้น ไม่สามารถนำไปใช้กับโพรเซสเซอร์แบบพาวเวอร์พีซีที่ใช้ในระบบแมคอินทอชซึ่งใช้คำสั่งแบบ แอลทิเวกได้ เนื่องจากมีวิธีการเขียนโปรแกรม และฟังก์ชันที่ใช้ก็ต่างกัน เช่น ถ้าจะเขียนโปรแกรมคำนวณระยะทาง
แบบยูคลิดสำหรับระบบแอลทิเวก จะได้ดังโปรแกรม โปรแกรมที่ 9 ต่อไปนี้

1 float eucidean_altivec(
2 int len, float *a,
3 float *b) {
4 int i=0,l;
5 vector float vx,vy,vz;
6 vector vsum=
7 (vector float)vec_splat_s8(0);
8 float sum=0.0;
9 while(len>0) {
10 vx = (vector float)
11 vec_ld(0, x+i);
12 vy = (vector float)
13 vec_ld(0, y+i);
14 vz = vec_sub(vx, vy);
15 vsum = vec_madd(vz, vz,
16 vsum);
17 len -= 4;
18 i += 4;
19 }
20 vsum = vec_add(vsum,
21 vec_sld(vsum,vsum,4));
22 vsum = vec_add(vsum,
23 vec_sld(vsum,vsum,8));
24 vec_ste(vsum, 0, &sum);
25 return sqrt(sum);
26 }
โปรแกรมที่ 9

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

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

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

เว็บแนะนำ
Hayes Technology, (2001). Software Speed Optimization,
http://www.hayestechnologies.com/en/softwareopt.htm
Free Software Foundation, (2004). Using the GNU Compiler Collection,
http://gcc.gnu.org/onlinedocs/gcc-3.4.0/gcc/index.html
Patel, Sanjay. (2004). AltiVec Programming: A Hands-on Tutorial,
http://www.simdtech.org/altivec/doc-uments/

Hubert, Bert. (2004). SIMD and Other Techniques for Fast Numerical Programming with GCC, http://ds9a.nl/gcc-simd/

การเขียนโปรแรมภาษาซี ในการประมวลผลแบบเวกเตอร์ ตอนที่ ๒

ขอขอบคุณ คุณ วัฒนา นัทธี
การกำหนดค่าให้ตัวแปรในระหว่างทำงานนั้น อาจจะทำได้โดยอาศัยความช่วยเหลือของฟังก์ชันจัดการหน่วยความจำและตัวแปรประเภทอะเรย์ เนื่องจากข้อมูล
ของตัวแปรแบบเวกเตอร์นั้นจะถูกจัดเก็บเรียงต่อเนื่องกันในหน่วยความจำเช่นเดียวกับอะเรย์ ดังนั้นจึงสามารถกำหนดค่าของตัวแปรเวกเตอร์โดยสร้างอะเรย์ขึ้นมา แล้วกำหนดค่าลงไปในอะเรย์ จากนั้นจึงใช้ฟังก์ชัน memcpy เพื่อใส่ค่าลงไปในเวกเตอร์ ดังโปรแกรมที่ 3 ต่อไปนี้

1 #include
2 #include
3 typedef int vector __attribute__
4 ((mode(V4SI)));
5 main() {
6 int tmp[4];
7 vector a;
8 tmp[0]=0; tmp[1]=1;
9 tmp[2]=2; tmp[3]=3;
10 memcpy(&a, tmp, sizeof(int)*4);
11 }
โปรแกรมที่ 3

จะเห็นว่ามีการกำหนดตัวแปร tmp ซึ่งเป็นอะเรย์ชนิด int และกำหนดที่สำหรับเก็บข้อมูลไว้ 4 ที่ (บรรทัดที่ 6) จากนั้นจึงกำหนดค่าให้กับอะเรย์ (บรรทัดที่ 8 และ 9) จากนั้นจึงใช้ฟังก์ชัน memcpy เพื่อเคลื่อนย้ายข้อมูลจาก tmp มาเก็บไว้ที่ตัวแปร a และเนื่องจากถือว่าตัวแปร a เป็น
ตัวแปรแบบปกติจึงต้องใส่เครื่องหมาย & เพื่อกำหนดให้หมายถึงที่อยู่ของตัวแปร a ในกรณีที่ต้องการนำค่าจาก ตัวแปรเวกเตอร์มาแสดงผล หรือใช้งานอื่นก็สามารถใช้ฟังก์ชัน memcpy ได้เช่นเดียวกัน ดังส่วนของโปรแกรมที่ 4
1 memcpy(tmp, &a, sizeof(int)*4);
2 printf(“%d %d %d %d\n”, tmp[0],
3 tmp[1], tmp[2], tmp[3]);
โปรแกรมที่ 4

โดยวิธีการดังกล่าวจะทำกลับกันกับโปรแกรมข้างต้นก็ได้ คือใช้ memcpy เคลื่อนย้ายข้อมูลจากตัวแปร a มายังอะเรย์ tmp แล้วจึงค่อยใช้ฟังก์ชัน prinft แสดงค่าของตัวแปร tmp ทีละตัว
แม้ว่าการใช้อะเรย์ร่วมกับ memcpy จะทำให้สามารถกำหนดค่า และเข้าถึงค่าที่เก็บอยู่ในเวกเตอร์ได้ แต่ก็ยังมีข้อจำกัดและไม่สะดวกเท่าที่ควร ยังมีวิธีการที่สามารถจัดการข้อมูลแบบเวกเตอร์ได้สะดวกกว่าก็คือ การใช้โครงสร้างแบบ union ซึ่งเป็นคุณสมบัติเฉพาะของ ภาษาซี โดย union จะแตกต่างจากโครงสร้างแบบ struct ที่วิธีการเก็บข้อมูลโดย union จะกำหนดตำแหน่งการเก็บ ข้อมูลของสมาชิกแต่ละตัวทับซ้อนกัน ทำให้สามารถกำหนดให้ตัวแปรอะเรย์เก็บในหน่วยความจำตำแหน่ง เดียวกับตัวแปรเวกเตอร์ ซึ่งจะทำให้สามารถเข้าถึงข้อมูลของตัวแปรเวกเตอร์ได้ทันที โดยอาศัยตัวแปรอะเรย์ที่ วางซ้อนทับกันอยู่ ดังส่วนของโปรแกรมที่ 5 ข้างล่างนี้

1 union va {
2 int a[4];
3 vector v;
4 };
โปรแกรมที่ 5

จะเห็นว่า union va ที่กำหนดขึ้น ประกอบด้วยสมาชิกสองส่วน คือ a ซึ่งเป็นอะเรย์แบบ int ขนาด 4 ที่ และ v ซึ่งเป็นตัวแปรเวกเตอร์ แต่เนื่องจากตำแหน่งในหน่วยความจำของสมาชิกทั้งสองตัวนี้ซ้อนทับกัน เมื่อกำหนดค่าให้อะเรย์ a ก็จะส่งผลให้ค่าของตัวแปร v เปลี่ยนไป ในขณะเดียวกัน เมื่อค่าของตัวแปร v เปลี่ยนไป ก็จะทำให้ค่าของอะเรย์เปลี่ยนไป ทำให้สามารถจัดการกับค่าของตัวแปรเวกเตอร์ได้สะดวกยิ่งขึ้น และเมื่อรวมโปรแกรม ทั้งหมดเข้าด้วยกัน จะสามารถเขียนโปรแกรม
เพื่อบวกเลข 4 ตัวพร้อม ๆ กันและแสดงผลบวกได้ ดังโปรแกรม ที่ 6 ต่อไปนี้


1 #include
2 #include
3 typedef int vector __attribute__
4 ((mode(V4SI)));
5 union va {
6 int a[4];
7 vector v;
8 };
9 main() {
10 union va a, b, c;
11 a.a[0]=1; a.a[1]=1;
12 a.a[2]=1; a.a[3]=1;
13 b.a[0]=2; b.a[1]=2;
14 b.a[2]=2; b.a[3]=2;
15 c.v = a.v + b.v;
16 printf(“%d %d %d %d\n”, c.a[0],
17 c.a[1], c.a[2], c.a[3]);
18 }
โปรแกรมที่ 6

จากโปรแกรมนี้จะเห็นว่า มีการกำหนดให้ ตัวแปรทั้งสามตัว เป็น union va (บรรทัดที่ 10) จากนั้นจึงกำหนดค่าโดยใช้อะเรย์ที่เป็นสมาชิกของ union (บรรทัดที่ 11-14) แต่เวลาคำนวณจะทำผ่านเวกเตอร์ซึ่งทำให้สามารถบวกเลขทั้ง 4 ตัวได้พร้อมกัน จากนั้นจึงใช้ฟังก์ชัน printf แสดงผลการบวก โดยอาศัยอะเรย์เช่นเดิม

ข้อกำหนดการใช้งาน
หัวข้อที่ผ่านมาได้แสดงวิธีบวกเวกเตอร์สองแบบ รวมทั้งวิธีกำหนดค่า และเข้าถึงค่าที่เก็บไว้ในเวกเตอร์ เพื่อให้เกิดความเข้าใจที่ตรงกันจึงขอสรุปข้อกำหนดต่าง ๆ ในการใช้ตัวแปรเวกเตอร์ ซึ่งข้อกำหนดนี้เป็นไปตาม จีซีซี ดังนี้
• ตัวแปรเวกเตอร์นั้นถือเป็นตัวแปรที่เก็บ ข้อมูลชุดเดียว สามารถนำไปใช้งานได้เช่นเดียวกับตัวแปรทั่ว ๆ ไป เช่น ส่งเป็นพารามิเตอร์ไปยังฟังก์ชัน หรือเป็นค่า ผลลัพธ์ของฟังก์ชัน ซึ่งกำหนดค่าให้แก่กัน
• ตัวดำเนินการที่สามารถใช้กับตัวแปรเวกเตอร์ได้คือ บวก (+) ลบ (-) คูณ (*) หาร (/) unary minus (-) ตัวดำเนินการตามบิต (bitwise operator) ได้แก่ and (&) or () not (~) และ xor (^)
• การดำเนินการต่าง ๆ ระหว่างตัวแปร เวกเตอร์ที่มีชนิดข้อมูลแตกต่างกัน จะต้องกำหนด การเปลี่ยนชนิดข้อมูล (type casting) ให้เรียบร้อยก่อน

การคำนวณหาระยะแบบยูคลิด
เนื่องจากการเขียนโปรแกรมแบบเวกเตอร์นั้น จะมีวิธีคิดที่แตกต่างจากการเขียนโปรแกรมแบบปกติ ดังนั้นเพื่อให้ผู้อ่านเกิดทักษะ และความเข้าใจวิธีการเขียนโปรแกรมแบบเวกเตอร์ยิ่งขึ้น ส่วนต่อไปของบทความนี้ จะขอยกตัวอย่างโปรแกรมสำหรับคำนวณค่า และ แก้ปัญหาต่าง ๆ เพื่อเป็นแนวทางในการศึกษาการเขียนโปรแกรมแบบเวกเตอร์ต่อไป โดยตัวอย่างนี้จะเป็น ตัวอย่างที่ไม่ซับซ้อนมากนัก เป็นตัวอย่างการคำนวณหาระยะทางระหว่างจุดสองจุด โดยกำหนดพิกัดของจุดนั้น ๆ มาให้ ทั้งนี้ระยะทางแบบที่รู้จักกันโดยทั่วไป ก็คือ ระยะทางแบบยูคลิด (Euclidean distance) ซึ่งคำนวณได้ ถ้ากำหนดจุด a มีพิกัด (x1,y1) จุด b มีพิกัด (x2,y2) และ ระยะทางระหว่างจุด a และ b มาให้ จะคำนวณได้จากสูตร

distance =

ตัวอย่างข้างต้นคือกรณีที่ต้องการหาระยะทางใน 2 มิติ ถ้าต้องการหาระยะทางใน n มิติ จะสามารถเขียนฟังก์ชันเพื่อหาระยะทางแบบทั่วไปได้ดังโปรแกรมที่ 7

1 float distance(int n, float *a,
2 float *b) {
3 int i;
4 float sum=0.0;
5 for(i=0; i0) {
13 memcpy(&va,a+i,16);
14 memcpy(&vb,b+i,16);
15 sum.v+=(va-vb)*(va-vb);
16 i+=4;
17 n-=4;
18 }
19 return sqrt(sum.f[0]+
sum.f[1]+sum.f[2]+
21 sum.f[3]);
22 }
โปรแกรมที่ 8
โปรแกรมข้างต้นมีการกำหนดแบบชนิด ข้อมูลใหม่โดยกำหนดแบบวิธีเป็น V4SF (บรรทัดที่ 1 และ 2) ซึ่งหมายถึงตัวแปรตัวเลขทศนิยมอย่างหยาบจำนวน 4 ตัว การทำงานของโปรแกรมนั้นก็มีลักษณะไม่ต่างจากโปรแกรมแรกมากนัก แตกต่างกันที่ต้องแบ่งข้อมูลออก ทีละ 4 ชุด ใช้ฟังก์ชัน memcpy เคลื่อนย้ายข้อมูลจากอะเรย์มาเก็บไว้ในตัวแปรเวกเตอร์ (บรรทัดที่ 13 และ 14) จากนั้นหาผลคูณของความแตกต่างและนำไปรวมกันไว้ที่ เวกเตอร์ sum (บรรทัดที่ 15) ซึ่งผลรวมนี้จะแยกกันอยู่ 4 ส่วนตามเวกเตอร์ เมื่อทำจนครบหมดทุกตัวแล้ว จึงนำค่าของ sum ทั้งหมดมารวมกัน และถอดรากที่สองก็จะได้ระยะทางแบบยูคลิดระหว่างจุดสองจุด

ขอให้สังเกตว่าโปรแกรมนี้จะเคลื่อนย้ายข้อมูลด้วยคำสั่ง memcpy ทีละ 4 ชุด (16 ไบต์) ดังนั้นอะเรย์จึงต้องมีขนาดหารด้วย 4 ลงตัว มิฉะนั้นอาจจะเกิดปัญหาได้ เนื่องจากฟังก์ชัน memcpy จะไปเคลื่อนย้ายข้อมูลในส่วนที่ไม่สามารถใช้งานได้ ทำให้เกิดข้อผิดพลาดขึ้น อันที่จริงเราสามารถเขียนเงื่อนไขให้คำนวณหาจำนวนชุดที่ต้อง เคลื่อนย้ายได้ แต่จะทำให้โปรแกรมยุ่งยากและทำความ เข้าใจยากขึ้น จึงขอละไว้ ให้เป็นหน้าที่ของผู้อ่านที่จะ นำไปใช้ หรืออาจจะให้เป็นหน้าที่ของโปรแกรมหลัก (ฟังก์ชัน main) ที่จะจองอะเรย์ให้มีขนาดหารด้วย 4 ลงตัวเสมอ จากนั้นก็ใส่ค่า 0 ลงไปในช่องที่ไม่ใช้ ก็จะไม่ทำให้ค่าระยะทางผิดพลาดไป
อ่านต่อบทความต่อไปนะครับ กำลังตัดต่อจ้า

การเขียนโปรแรมภาษาซี ในการประมวลผลแบบเวกเตอร์ ตอนที่ ๑

การเขียนโปรแกรมภาษาซี สำหรับ การประมวลผลแบบเวกเตอร์เตอร์

ขอขอบคุณ คุณ วัฒนา นัทธี
ในปัจจุบัน ถือว่าไมโครโพรเซสเซอร์ (microprocessor) ซึ่งเป็นหัวใจสำคัญที่ใช้ในการประมวลผลข้อมูลต่าง ๆ ของคอมพิวเตอร์ ได้รับการพัฒนาให้มี ประสิทธิภาพมากขึ้นทุกวัน โดยอาจจะสังเกตได้ง่าย ๆ จากความถี่ของสัญญาณนาฬิกาที่ใช้ในไมโครโพรเซสเซอร์มีความเร็วมากขึ้นเรื่อย ๆ โดยไมโครโพรเซสเซอร์ในปัจจุบันทำงานที่สัญญาณนาฬิกาสูงกว่า 3 กิกะเฮิรตซ์ ในขณะที่เมื่อสิบกว่าปีที่แล้ว ไมโครโพรเซสเซอร์ 8086 ของบริษัท อินเทล ทำงานที่สัญญาณนาฬิกาเพียง 4.77 เมกะเฮิรตซ์ ถ้าเทียบ ในแง่ความเร็ว ก็อาจจะคิดได้ว่าไมโครโพรเซสเซอร์ ทำงานได้เร็วกว่าเดิมถึงเกือบหนึ่งพันเท่า อย่างไรก็ดีไมโครโพรเซสเซอร์ไม่ได้รับการพัฒนาเฉพาะความเร็วในการประมวลผลเท่านั้น แต่ไมโครโพรเซสเซอร์ในปัจจุบันยังมีสถาปัตยกรรมที่ซับซ้อนขึ้น ซึ่งมีส่วนช่วยเพิ่มความเร็วในการประมวลผลมากยิ่งขึ้น ตัวอย่างเช่น
•แอลทิเวก (AltiVec) สำหรับโพรเซสเซอร์แบบพาวเวอร์พีซี (PowerPC) รุ่นจีโฟร์ (G4) และรุ่นจีไฟว์ (G5) ซึ่งพัฒนาโดยบริษัทแอปเปิลคอมพิวเตอร์ บริษัทไอบีเอ็ม และบริษัทโมโตโรลา (บริษัทแอปเปิลจะเรียกเทคโนโลยีนี้ว่าเครื่องยนต์เร็ว (velocity engine)) โดยเป็นส่วนประมวลผลแบบเวคเตอร์ที่มีประสิทธิภาพใกล้เคียงกับเอสเอสอีทู ของบริษัทอินเทล สามารถจัดการข้อมูลทั้งเลขจำนวนเต็ม และเลขทศนิยมทั้งแบบหยาบและแบบละเอียด รวมทั้งมีแบบชนิดข้อมูลพิเศษสำหรับจัดการข้อมูลจุดสีซึ่งประกอบด้วยสามส่วน คืออาร์จีบี (RGB) หน่วยประมวลผล แอลทิเวกนี้ได้รับการพัฒนาขึ้นมาก่อนเอ็มเอ็มเอกซ์ โดยถือเป็นหน่วยประมวลผลแบบเวกเตอร์ตัวแรกสุดสำหรับเครื่องคอมพิวเตอร์ตั้งโต๊ะ และเป็นส่วนสำคัญที่ทำให้เครื่องแมคอินทอชของบริษัทแอปเปิลมีความสามารถ ในการจัดการระบบกราฟิกต่าง ๆ
แม้ว่าการประมวลผลแบบเวคเตอร์จะมีประโยชน์ช่วยเพิ่มประสิทธิภาพและความเร็วใน การประมวลผลทำให้สามารถประมวลผลข้อมูลหลายชุดได้พร้อมกัน เพิ่มความสามารถในการประมวลผลกราฟิกแบบสามมิติ แต่ก็มีจุดอ่อนตรงที่ขาดการสนับสนุน ที่ดี คอมไพเลอร์ส่วนใหญ่ในปัจจุบันยังไม่ได้ สนับสนุนการใช้งานหน่วยประมวลเวกเตอร์อย่างดีพอ
ทำให้โปรแกรมเมอร์ในปัจจุบันยังไม่ได้นำความสามารถนี้มาใช้อย่างเต็มที่ เนื่องจากยังต้องอาศัยความรู้ทางด้านสถาปัตยกรรมคอมพิวเตอร์มาช่วยด้วย บทความนี้ จะอธิบายวิธีการเขียนโปรแกรมภาษาซีประมวลผล แบบเวกเตอร์ เพื่อให้ผู้สนใจมีวิธีนำความสามารถของโพรเซสเซอร์มาใช้งานอย่างเต็มที่
เริ่มจากตัวอย่างโปรแกรมในโปรแกรมที่ 1 ซึ่งเป็นตัวอย่างโปรแกรมแบบง่ายดังต่อไปนี้

1 typedef int vector __attribute__
2 ((mode(V4SI)));
3 main() {
4 vector a, b, c;
5 c = a + b;
6 }

โปรแกรมที่ 1


จากโปรแกรมอย่างง่ายข้างต้น จะเห็นว่ามีลักษณะเหมือนโปรแกรมภาษาซีทั่ว ๆ ไป คือมีการกำหนดตัวแปรขึ้นมาสามตัว ได้แก่ a b และ c จากนั้นนำ a มาบวกกับ b แล้วเก็บผลลัพธ์ไว้ที่ c แต่สิ่งที่แตกต่างจากโปรแกรมทั่วไปก็คือ แบบชนิดของข้อมูล (data type) ที่ใช้กับ ตัวแปรทั้งสามตัว จะไม่ใช่แบบชนิดข้อมูลมาตรฐาน แต่มีการกำหนดไว้ก่อนเริ่มโปรแกรมด้วยคำสั่ง typedef ในบรรทัดที่ 1 และ 2 โดยกำหนดชื่อข้อมูลชนิดนี้ว่า vector เป็นข้อมูลชนิดตัวเลขจำนวนเต็ม (int) และกำหนด คุณสมบัติพิเศษ __attribute__ ((mode(V4SI))) ซึ่งเป็น การกำหนดให้แบบชนิดข้อมูลเป็นแบบเวกเตอร์ กำหนด แบบวิธี (mode) เป็น V4SI ซึ่งหมายถึง เวกเตอร์ชนิด ตัวเลขจำนวนเต็มขนาด 32 บิตหรือ 4 ไบต์ จำนวน 4 ตัว ดังนั้น ตัวแปร a b และ c ที่ประกาศขึ้นทีหลัง (บรรทัดที่ 4) ก็จะแทนเวกเตอร์ของเลขจำนวนเต็ม 4 ตัว


การนำตัวแปร a มาบวกกับตัวแปร b ก็หมายถึงการบวกเวกเตอร์สองชุด แต่ละชุดมีข้อมูลอยู่ 4 ตัว เช่น ถ้ากำหนดให้ a คือ [1, 2, 1, 2] และ b คือ [2, 1, 2, 1] ก็จะได้ผลลัพธ์ซึ่งจะนำไปเก็บในตัวแปร c เป็น [3, 3, 3, 3] เนื่องจากการบวกนี้จะนำข้อมูลที่อยู่ในตำแหน่งเดียวกัน มาบวกกัน
ส่วนแบบวิธีซึ่งใช้กำหนดแบบชนิดตัวแปร เวกเตอร์นั้น มีการกำหนดไว้ว่า ต้องเขียนอยู่ในรูปแบบ VnB โดย n คือจำนวนข้อมูลในเวกเตอร์ และ B คือ แบบชนิดของข้อมูล โดยมีการกำหนดแบบชนิดข้อมูล ดังนี้
• QI เลขจำนวนเต็มขนาด 8 บิต หรือ 1 ไบต์
• HI เลขจำนวนเต็มขนาด 16 บิต หรือ 2 ไบต์
• SI เลขจำนวนเต็มขนาด 32 บิต หรือ 4 ไบต์
• DI เลขจำนวนเต็มขนาด 64 บิต หรือ 8 ไบต์
• SF เลขทศนิยมแบบหยาบ ขนาด 32 บิต หรือ 4 ไบต์
• DF เลขทศนิยมแบบละเอียด ขนาด 64 บิต หรือ 8 ไบต์
ดังนั้น V4SI ในบรรทัดที่ 2 ของโปรแกรมจึงหมายถึงเลขจำนวนเต็มขนาด 32 บิต จำนวน 4 ตัว แต่อย่างไรก็ดีการกำหนดแบบชนิดตัวแปรนั้น จะต้องคำนึงถึงความสามารถของโพรเซสเซอร์ที่ใช้ด้วย เช่น ถ้าใช้โพสเซสเซอร์เพนเทียม ซึ่งมีหน่วยประมวลผลเป็นแบบเอ็มเอ็มเอกซ์ ก็จะไม่สามารถกำหนดแบบชนิดข้อมูล V4SI ได้ เนื่องจากไม่สนับสนุน แต่อาจจะใช้ V4HI หรือ V8QI ได้ ถ้าเป็นโพรเซสเซอร์ที่สนับสนุนเอสเอสอี ก็จะสามารถกำหนดใช้ V16QI V8HI V4SI V2DI หรือ V4SF ได้

การกำหนดค่าตัวแปร
จากตัวอย่างแรกนั้น ยังไม่มีการกำหนดค่าตัวเลขให้กับตัวแปร แต่จะสามารถกำหนดค่าให้กับตัวแปร a b หรือ c ได้ดังโปรแกรมที่ 2 ต่อไปนี้
1 vector a={1, 2, 3, 4},
2 b={1, 2, 3, 4},
3 c={0, 0, 0, 0};
โปรแกรมที่ 2
โปรแกรมนี้จะสามารถกำหนดค่าเริ่มต้นให้กับ ตัวแปรได้ในลักษณะเดียวกับการกำหนดตัวแปรอะเรย์ หรือตัวแปรโครงสร้าง คือใช้วงเล็บปีกกา และจุลภาคแบ่งข้อมูลแต่ละชุด แต่การกำหนดค่าในลักษณะนี้จะใช้ได้ เฉพาะครั้งแรก หรือในขณะที่กำหนดชนิดของตัวแปร เท่านั้น ไม่สามารถนำไปใช้กำหนดค่าระหว่างทำงานได้ ตามข้อกำหนดของภาษาซี
เพื่อไม่ให้บทความยาวข้าน้อยขอแยกบทความออกเป็นช่วงๆนะขอรับ

วันพุธที่ 9 กันยายน พ.ศ. 2552

ไม่รู้จะทำอะไรกับรูปภาพพวกนี้ดี







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










ชอบรูปที่เป็นลายไทยประกอบกันเป็นรูปสวยดี
หรือ เอาลายไทยไปสอดแทรกตามรูปต่างๆ











ไม่รู้จะจัดเรียงยังไง Blogger จัดวางรูปยาก ช่วยที
































































วันจันทร์ที่ 7 กันยายน พ.ศ. 2552

ทำความเข้าใจระบบ Affiliate Model

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




จากภาพจะเป็นรูปแบบของการทำรายได้บนเนตที่ผมทำอยู่นะครับ จะได้เห็นภาพรวมกันก่อนว่าเงินจะเข้าหรือ เงินจะออกได้ด้วยวิธีใด ซึ่งผมเรียกภาพข้างบนว่า Affiliate Model ของผมเองละกัน โดยขั้นตอนคราวๆ ก็คือเราหาแหล่งสินค้ามา (CJ) แล้วก็เอาสินค้าของเราไปโปรโมทเพื่อขาย (Adword) การโปรโมทก็ย่อมมีค่าใช้จ่ายนะ แต่เมื่อเราขายของได้เราก็จะได้เงินคืน และถ้าเรามีหน้าร้านเป็นของตัวเอง (Blog) เราก็สามารถนำโฆษณาต่างๆ (ASense, CJ) มาวางบนหน้าเวปเราเพื่อโปรโมท หรือขายสินค้าได้อีกด้วย

สรุปง่ายๆก็ จัดหาแหล่งสินค้า --> นำเสนอขายสินค้าบนหน้าเวป หรือ ขายผ่าน Google Adword

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

* งั้นฉบับต่อไปผมจะมาเขียนอธิบาย ว่า CJ, Blog, Google Adword และ Google Adsense นั้นคืออะไร สมัครอย่างไร และในแต่ละตัวทำงานกันอย่างไร ครับ

Affiliate Marketing & Reseller

Google AdSense คือบริการจาก Google ที่ให้ผู้ที่มีเว็บไซต์ สามารถหารายได้โดยการนำ Code ที่ได้จากการสมัครเป็นสมาชิกของ Google มาใส่ไว้ที่เว็บไซต์ของตนเอง ซึ่ง Code นั้นจะเป็น โฆษณาที่ส่งมาจาก Google โดยโฆษณานั้น ๆ จะเป็นโฆษณาที่มีเนื้อหาสอดคล้องกับเนื้อหาของเว็บไซต์ของคุณ ตัวอย่างเช่นถ้าเว็บไซต์ของคุณเป็นเว็บไซต์ที่เกี่ยวกับการท่องเที่ยว โฆษณาที่ส่งมาจาก Google ก็อาจเป็นเว็บไซต์ที่เกี่ยวข้องกับ โรงแรม,สายการบิน เป็นต้น

โฆษณาที่ส่งมาจาก Google นั้น ๆ มีทั้งแบบ Text ,รูปภาพ และมีหลายขนาด ให้คุณได้เลือก นอกจากนั้นยังสามารถเลือกรูปแบบสีได้ตามความต้องการ เพื่อความเหมาะสมกับเว็บไซต์ของคุณ

แล้วโฆษณาต่าง ๆ เหล่านั้นมาจากไหน ??? หลายคงอาจสงสัย โฆษณาต่าง ๆ เหล่านั้นมาจากการทำ Google Adwords ซึ่งเป็นอีกหนึ่งบริการของ Google ที่ให้ผู้ประกอบการต่าง ๆ ที่ต้องการขายสินค้าหรือบริการต่าง ๆ โฆษณาสินค้าของตนเอง ผ่าน Search Engine ของ google รวมถึงเว็บไซต์อื่นๆ ที่นำ Google Adsense ไปติด เพื่อให้โฆษณาของตนเองอยู่ในตำแหน่งที่เด่น (เมื่อ Search ใน Google) กว่าข้อมูลอื่นที่ได้ผลลัพท์จากการค้นหา

รายได้จาก Google AdSense จะเกิดตอนไหน
จะมีอยู่ 2 กรณีครับคือ
• จ่ายเมื่อคลิก (Pay Per Click)
เมื่อคนที่เข้าชมเว็บไซต์ของคุณ คลิกที่โฆษณาของ Google AdSense ซึ่งแต่ละคลิกจะได้ไม่เท่ากัน ขึ้นอยู่กับผู้ที่ทำ Google Adwords จ่ายให้ Google มากน้อยเท่าไร ถ้าจ่ายให้มากคุณก็จะได้มากด้วยเช่นกัน
• จ่ายเมื่อแสดงโฆษณา (Pay Per Impression)
อันนี้จะจ่ายให้คุณเมื่อมีการแสดงโฆษณา ครบ 1,000 ครั้ง โดยไม่นับว่าจะมีคนคลิกกี่ครั้งก็ตาม คุณจะไม่ได้รายได้จากการคลิก

นอกจากโฆษณาต่าง ๆ แล้ว การแนะนำ บริการต่าง ๆ ของ Gogle เมื่อมีคนใช้บริการ คุณก็จะมีรายได้จากการแนะนำนั้นด้วยซึ่งมีอยู่ดังต่อไปนี้

Google AdSense
• ค่าตอบแทน $5 หากมีผู้ที่สมัคร Google Adsense ผ่าน Referral ของคุณและได้ $5 ภายใน 180 วัน
• ค่าตอบแทน $250 หากภายใน 180 วันถ้าผู้ที่สมัคร Google Adsense ผ่าน Referral ของคุณสามารถทำได้ $100 โดยผู้ที่สมัครต่อจากคุณต้องกรอก PIN ก่อนคุณถึงจะได้รับค่าตอบแทน
• ค่าตอบแทน $2,000 หากคุณมี 25 คนที่สมัครต่อจากคุณภายในระยะเวลา 180 วัน ที่สามารถทำได้มากกว่า $100 คุณจะได้รับโบนัสเพิ่มทันที (โบนัสจะได้รับ 1 ครั้ง/ปี)

AdSense for search
คุณจะได้เงินมีคนมาใช้ Googel Search Box จากเว็บของคุณ แล้วคลิกโฆษณาผลลัพท์ที่ได้จากการ Search นั้น ๆ (เว็บไซต์ที่ อยู่ในตำแหน่งสปอนเซอร์ จะอยู่ด้านบน เป็นกรอบที่เด่นชัด) ค่าตอบแทนจะได้มากหรือน้อยขึ้นอยุ่กับ Keyword ที่ผู้ใช้ค้นหา ซึ่งจะไม่เท่ากัน

Google Apps
Google Apps คือระบบที่เหมาะสำหรับองค์กรธุรกิจ โรงเรียน มหาวิทยาลัย ซึ่งในระบบจะมีบริการต่างๆที่สมาชิกในกลุ่มใช้ได้ เช่น อีเมลล์ ระบบการการสนทนาผ่าน Instant Massaging ระบบปฎิทิน ที่ทุกคนสามารถเข้าไปใช่ร่วมกันได้ เพื่อเป็นการแลกเปลี่ยนความคิดเห็นต่างภายในสมาชิก ระบบทั้งหมด Google เป็นผู้ให้บริการ โดยที่คุณไม่ต้องลงทุนอุปกรณ์และค่าซอฟท์แวร์แต่อย่างใด รวมถึงไม่ต้องเสียค่าบำรุงรักษา

คุณจะได้รับ $5 จากที่มีผู้สนใจคลิกโฆษณา Google Apps ผ่านเว็บไซด์ของคุณและได้ทำการลงทะเบียนอย่างเสร็จสมบูณณ์ อย่างไรก็ตามหากผู้ที่สนใจไม่ได้สมัคร Google Apps ทันทีก็ตามระบบจะเก็บขอมูลการคลิกโฆษณา Google Apps จากเว็บไซด์ของคุณต่ออีกเป็นเวลา 4 สัปดาห์ นั่นหมายถึงเขาอาจจะสมัครหลังจากนั้นก็ได้ แล้วคุณก็ยังได้รับรายได้อยู่

Google Checkout
Google Checkout คือระบบการจับจ่ายซื้อสินค้าที่สะดวก ปลอดภัยและรวดเร็ว ด้วยระบบการรับชำระของ Google Checkout คุณสามารถทำรายการสั่งซื้อและจ่ายค่าสินค้าตลอดจนตรวจสอบรายการ การสั่งซื้อหรือการจ่ายค่าสินค้าได้ด้วยตัวเองผ่านหน้าเว็บไซด์

คุณจะได้รับ $1 ถ้ามีผู้ที่สมัครบัญชี Google Checkout ผ่านการแนะนำจากเว็บไซด์ของคุณ และได้ทำรายการสั่งซื้อสินค้าภายใน 90 วันและรายการทุกอย่างเสร็จสมบูรณ์จนการชำระค่าสินค้าเสร็จสิ้น โดยมูลค่าของสินค้าต้องมีมูลค่า $10 ขึ้นไป ก่อนที่รวมภาษีและค่าขนส่ง ภายใน 7 วัน

Affiliate Marketing

ขอขอบพระคุณ ผู้เขียนโดย พ.ท.รศ.ดร. เศรษฐพงค์ มะลิสุวรรณ เป็นอย่างสูงครับ

ในโลกยุคปัจจุบันที่มีการแข่งขันกันมาก การเข้าถึงกลุ่มลูกค้าเป็นปัจจัยสำคัญที่ทำให้องค์กรประสบความสำเร็จ ดังนั้นจึงต้องการกลยุทธ์การตลาดที่มีประสิทธิภาพ และ

Affiliate Marketing ถือว่าเป็นกลยุทธ์ที่เหมาะสมวิธีหนึ่ง ซึ่งเป็นติดต่อสื่อสารกับผู้บริโภคโดยอาศัยความสัมพันธ์ระหว่างเจ้าของเว็บไซต์และผู้ค้า ทำให้เจ้าของสินค้าสามารถส่งข้อมูลข่าวสารต่างๆของผลิตภัณฑ์ไปยังผู้บริโภคได้โดยตรงและรวดเร็ว นอกจากนี้การทำการตลาดวิธีนี้ยังเอื้อประโยชน์อีกหลากหลายประการ ได้แก่ มีโอกาสทำกำไรมาก, สามารถทำเงินได้ตลอด 24 ชั่วโมง, ลดต้นทุน และค่าใช้จ่าย

คำสำคัญ : Affiliate Marketing, แบนเนอร์, Compensation Models


1. บทนำ


Affiliate Marketing หรือการทำการตลาดแบบสมาชิกสาขาเป็นวิธีการทำการตลาดโดยอาศัยความสัมพันธ์ระหว่างเจ้าของเว็บไซต์และผู้ค้า(เจ้าของสินค้า) โดยมีการเชื่อมโยงหรือมีลิงค์เสนอขายสินค้าหรือบริการไปยังเว็บไซต์ของเจ้าของสินค้า และทางบริษัทเจ้าของสินค้าจะจ่ายค่าตอบแทนให้แก่ผู้แทนโฆษณา เมื่อมีคนเข้ามายังเว็บไซต์ของบริษัท และคนคนนั้นได้ทำธุรกรรมอย่างใดอย่างหนึ่งที่บริษัทกำหนดไว้ เช่น ซื้อสินค้าหรือ สมัครสมาชิก เป็นต้น ผ่านทางเครื่องมือของผู้แทนโฆษณา เช่น Banner , Email ซึ่งถือได้ว่าเป็นการทำการตลาดรูปแบบใหม่ที่ช่วยลดช่องทางระหว่างผู้ขาย และผู้ซื้อ





ประวัติความเป็นมาของ Affiliate Marketing

Affiliate marketing เริ่มต้นและเป็นที่รู้จักอย่างกว้างขวางจากผู้ก่อตั้งเว็บไซต์ Amazon.com คือ Jeff Bezos ได้คุยกับผู้ที่ต้องการขายหนังสือในเว็บไซต์ของเธอ ทำให้ Bezos คิดว่า ทำไมผู้ขายหนังสือคนนั้นไม่ลิงค์เว็บไซต์มายังเว็บไซต์ Amazon หลังจากนั้นไม่นาน Amazon ก็ได้แนะนำโปรแกรมสมาชิกของอเมซอน (Amazon Associate Program) ซึ่งเป็นความคิดพื้นฐานง่าย ๆ โดยที่สมาชิกของ Amazon จะวางแบนเนอร์ลิงค์หรือลิงค์ข้อความของหนังสือแต่ละเล่มบนเว็บไซต์ของสมาชิกหรือวางลิงค์ของ Amazon แล้วส่งไปยังหน้าโฮมเพจของ Amazon โดยตรง


เมื่อผู้เข้าชมคลิกจากเว็บไซต์ของสมาชิกสาขาผ่านไปยังเว็บไซต์ Amazon.com แล้วทำธุรกรรมซึ่งในที่นี้คือการซื้อหนังสือ สมาชิกก็จะได้รับค่านายหน้า


ตัวอย่างเว็บไซต์ที่เป็นที่รู้จัก และใช้ระบบ Affiliate Marketing


• eBay.com ให้ค่าตอบแทนกับผู้แทนโฆษณา $12 ทุกครั้งที่ สามารถแนะนำให้คนมาสมัครสมาชิก


• AbeBooks.com ให้ค่าตอบแทนกับผู้แทนโฆษณา 5% ของยอดขายทั้งหมดที่ผู้แทนโฆษณาทำได้




2. Affiliate Program Models


Affiliate program models เป็นการเชื่อมโยงระหว่างเว็บไซด์ด้วยกัน ดังนั้นรูปแบบการนำเสนอที่จะสื่อสารไปยังผู้บริโภคจึงสามารถทำได้หลากหลายรูปแบบ แล้วแต่ความเหมาะสมของตัวสินค้านั้นๆ โดยสามารถนำเสนอโฆษณา ผ่านทาง Models ต่างๆ ดังนี้


· แบนเนอร์ และลิงค์ (Banner or text links) เป็นรูปแบบหนึ่งของ Affiliate marketing ที่มีการสร้างภาพหรือลิงค์ขึ้นมาเพื่ออธิบายหรือให้คำจำกัดความโดยย่อของสินค้า เมื่อลูกค้าคลิกไปยังแบนเนอร์นั้นๆ จะทำให้สามารถเข้าไปสู่เว็บไซต์ของเจ้าของสินค้าได้ ส่วนใหญ่แล้วการโฆษณารูปแบบนี้มักจะดำเนินการกับสินค้าประเภทบริการ เช่น บริการทางการเงิน


· Storefronts คือ Model ที่ไม่ได้นำเสนอหรือขายสินค้าใดๆบนเว็บไซต์ แต่เป็นการสร้างความเชื่อมโยงจากตัวแทนโฆษณาหนึ่งไปยังอีกตัวแทนหนึ่ง เสมือนเป็นการสร้างเพียงช่องทางการเชื่อมโยงระหว่างตัวแทนโฆษณาด้วยกันเอง เพื่อให้เกิดการเข้าชมเว็บไซต์ให้มากที่สุด


· ป๊อปอัฟ (Pop-Ups) สินค้าบางตัว ทำการโฆษณาโดยใช้หน้าต่าง pop ups ซึ่งเป็นหน้าต่างเล็กๆที่เปิดขึ้นมาเมื่อมีการเข้าชมเว็บไซต์ ทำให้ลูกค้าได้รับข้อความจากเจ้าของสินค้าได้โดยที่ไม่จำเป็นจะต้องเปลี่ยนหน้าต่างเว็บไซต์นั้น เนื่องจากหน้าต่าง pop ups จะปรากฏขึ้นมาซ้อนกับหน้าต่างเว็บไซต์เดิม


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


· ทูเทียร์โปรแกรม (Two-Tier Programs) เป็น Model หนึ่งที่มีลักษณะคล้ายกับการสร้างเครือข่ายแบบการขายตรง เนื่องจากจะมีการโฆษณาที่จัดทำโดยผู้อื่นอีกทอดหนึ่ง และมีแรงจูงใจเป็นเปอร์เซ็นต์ค่าตอบแทนจากลูกค้า ซึ่งวิธีการนี้จะทำให้สามารถสร้างเครือข่ายการโฆษณาได้อย่างรวดเร็วและกว้างขวาง เนื่องจากเปรียบเสมือนเป็นการสร้างสาขาโดยมีตัวแทนช่วยทำโฆษณาเพิ่มอีกส่วนหนึ่ง

3. รูปแบบการจ่ายค่าตอบแทนของ Affiliate marketing (Compensation Models)

การจ่ายต่อการเห็นโฆษณา (Pay-Per-Impression: CPM)

CPM มาจากคำว่า cost-per-mil โดยใช้ยอดคนเห็นที่ 1 พันคน (= 1 mil) เป็นหลักในการคิดค่าตอบแทน ซึ่งยอดการเห็นนี้อาจจะไม่ใช่ยอดคนเห็นโฆษณาจริง ๆ แต่เป็นยอดของโฆษณาที่อยู่ในหน้าเว็บ หรือหน้าแสดงผล โฆษณาที่ใช้ในลักษณะนี้อาจเป็นโฆษณาแบบข้อความ หรือเป็นภาพแบนเนอร์ ก็ได้


การจ่ายต่อการคลิ๊ก หรือ Pay-Per-Click (CPC)


เป็นรูปแบบการจ่ายที่ผู้ค้าหรือเจ้าของสินค้า/บริการจ่ายเงินให้กับผู้แทนโฆษณา ทุกๆครั้งที่มีผู้เข้าชม และคลิ๊กบนโฆษณาของผู้ค้า/เจ้าของสินค้า ซึ่งไม่จำเป็นที่ผู้เข้าชมเหล่านั้นจะต้องซื้อสินค้าที่โฆษณา

การจ่ายต่อการแนะนำ หรือ Pay-Per-Lead, CPA หรือ CPL)


ผู้ค้าหรือเจ้าของสินค้าจะจ่ายค่าตอบแทนให้กับผู้แทนเป็นจำนวนที่แน่นอนต่อการกระทำแต่ละครั้ง และเป็นค่าคอมมิชชั่นสำหรับผู้เข้าชมทุก ๆ คนที่แนะนำผ่านมาทางผู้แทนโฆษณาไปยังเว็บไซต์ของผู้ค้า แล้วผู้เข้าชมได้กระทำบางอย่างที่ผู้ค้าหรือเจ้าของสินค้าต้องการให้กระทำ เช่น การสมัครสมาชิก กรอกแบบฟอร์ม เปิดบัญชีหรือลงนามรับจดหมาย เป็นต้น


การจ่ายต่อยอดขาย หรือ Pay-Per-Sale (CPS)


รูปแบบการจ่ายที่ผู้ค้าหรือเจ้าของสินค้าจ่ายผู้แทนโฆษณาเป็นเปอร์เซ็นต์ของยอดการสั่งซื้อ (หรือยอดขาย) ที่เกิดขึ้นจากลูกค้าที่ผ่านการแนะนำจากผู้แทนโฆษณา รูปแบบนี้เป็นรูปแบบการตอบแทนส่วนใหญ่ที่ใช้ในร้านค้าปลีกออนไลน์ที่มีโปรแกรม Affiliate


รูปแบบการจ่ายต่อการโทรศัพท์ หรือ Pay-Per-Call


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

4. วิธีที่ทำให้ Affiliate marketing ประสบความสำเร็จ

ถึงแม้ว่า Affiliate marketing จะเป็นรูปแบบการทำการตลาดที่ง่าย แต่การที่จะทำให้สามารถเข้าถึงลูกค้าและอยู่ได้อย่างยั่งยืน ก็จำเป็นต้องอาศัยขั้นตอนหลักๆเพื่อทำ Affiliate marketing ให้ประสบความสำเร็จ โดยมีขั้นตอนดังต่อไปนี้


Pick a Market


Affiliate marketing สามารถดำเนินการได้กับสินค้าแทบทุกประเภท และทุกตลาด ดังนั้นจึงไม่ควรที่จะจำกัดการเลือกโฆษณาในสินค้าชิ้นใดชิ้นหนึ่งเท่านั้น โดยควรเลือกตลาดสินค้ามาหนึ่งตลาด เพื่อที่จะสามารถเข้าถึงลูกค้าได้อย่างครอบคลุม และสามารถสนองตอบต่อความต้องการของลูกค้าได้ และจำเป็นอย่างยิ่งที่จะต้องศึกษาข้อมูลของสินค้าชนิดนั้น เพื่อให้เข้าใจถึงความต้องการ และความจำเป็นในการใช้สินค้านั้นๆของลูกค้าด้วย


Pick a Product


เมื่อมีการเลือกตลาดสินค้าแล้ว เราควรที่จะเริ่มต้นจากสินค้าเพียงหนึ่งชนิดก่อน เพื่อเป็นการมุ่งเน้นไปยังผลิตภัณฑ์ตัวนั้นโดยเฉพาะ และค่อยๆขยายสินค้าให้ครอบคลุมทั้งตลาด เพื่อเป็นการสร้างโอกาสการเข้าชมเว็บไซด์ของคนที่สนใจให้มากขึ้น ซึ่งจะเป็นการช่วยลดต้นทุนการทำโฆษณา และเพิ่มกำไรให้เพิ่มขึ้นได้

Build a follow-up series


เป็นขั้นตอนของการทำโฆษณาที่จำเป็นจะต้องเลือกถ้อยคำที่เหมาะสมต่อสินค้าประเภทนั้นๆ โดยต้องเป็นคำที่ตรงใจกับผู้บริโภคและคิดว่าเขาจะเลือกคำไหนมาเป็นกุญแจสำคัญในการค้นหาสินค้าจากเว็บไซด์ต่างๆ เพื่อเป็นการรับประกันว่า เมื่อมีการโฆษณาแล้วจะทำให้มีคนสนใจในการโฆษณาของเราอย่างแน่นอน

Build an email capture page

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


Find additional related products


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

5. ข้อได้เปรียบของ Affiliate Marketing
ไม่น่าแปลกใจที่ Affiliate Marketing เป็นที่น่าสนใจเนื่องจากเป็นช่องทางการตลาดที่ง่ายและได้ผลลัพธ์อย่างรวดเร็ว นอกจากนี้ Affiliate Marketing ยังมีข้อได้เปรียบหลายประการ ดังนี้


· มีโอกาสทำกำไรสูง ถ้าหากเราสามารถโฆษณาได้ดี เราก็จะสามารถทำกำไรกลับมาได้อย่างมหาศาลจากการโฆษณา จนบางครั้ง นักธุรกิจ Affiliate Marketing หรือ Affiliate Marketer บางคนสามารถทำเงินค่าตอบแทนกลับมาได้มากว่า เงินที่ทางบริษัทได้กำไรจากการขายสินค้าทั้งหมดเสียอีก


· สามารถทำเงินได้ตลอด 24 ชั่วโมง เนื่องจากตลาดคือ คนจากทั่วทุกมุมโลก ดังนั้นเราสามารถทำเงินจากธุรกิจนี้ได้ตลอดเวลา ขอเพียงเราทำการโฆษณาเว็บไซต์ไว้ตลอดเวลา เราก็สามารถที่จะทำเงินได้

· ใช้เงินลงทุนต่ำ การสมัคร Affiliate Program นั้น ไม่ต้องเสียค่าใช้จ่ายใดๆ ไม่จำเป็นต้องมีระบบในการติดตามงาน ไม่มีค่าผลิตและค่าเก็บรักษาสินค้า ทำให้เงินลงทุนเบื้องต้นในการทำ Affiliate Marketing น้อยมาก และต้นทุนเฉลี่ยต่อหัวก็ต่ำ เนื่องจากเราไม่จำเป็นต้องซื้อสินค้าคงคลังมาเก็บไว้ เนื่องจากเมื่อลูกค้าต้องการสินค้าเขาก็ติดต่อรับสินค้าจากเจ้าของสินค้านั้นๆ โดยตรง


· ยืดหยุ่นสูง ความยืดหยุ่นของ Affiliate Program คือ เราสามารถเลือกโฆษณาสินค้าและบริการให้กับบริษัทไหน เวลาไหนก็ได้ ไม่มีข้อจำกัด รวมทั้งสามารถสมัครเป็นผู้แทนโฆษณากับบริษัทต่างๆทั่วโลกได้ ทำให้เราสามารถโฆษณาได้ไม่จำกัด โดยที่ฐานลูกค้าของเราก็คือ คนทั่วทั้งโลก นั่นเอง

6. บทสรุป

Affiliate marketing เข้ามามีบทบาทสำคัญในการโฆษณาผ่านทางอินเตอร์เน็ต และสามารถโฆษณาผลิตภัณฑ์ได้หลากหลายรูปแบบ ซึ่งอาศัยความได้เปรียบในการส่งข้อมูลข่าวสารของสินค้าและบริการไปยังผู้บริโภคโดยตรง โดยเฉพาะอย่างยิ่งถือได้ว่าเป็นกลยุทธ์สำคัญที่สามารถเข้าถึงผู้บริโภคที่นิยมการหาสินค้าและบริการต่างผ่านช่องทางอินเตอร์เน็ตได้ นอกจากนี้ยังก่อให้เกิดประโยชน์ต่อบริษัทและนักการตลาดในหลายๆทิศทาง เช่น ลดต้นทุน ค่าใช้จ่าย

References:

http://www.articles2k.com/article/5/48834/Overview_Of_An_Affiliate_Marketing_Program/ http://en.wikipedia.org/wiki/Affiliate_marketing#Affiliate_Networks_and_CPA_Networks
http://forum.abestweb.com/showthread.php?t=6708

SEO (Search Engine Optimization)

ขั้นตอนการทำ SEO
ขั้นที่ 1
วิเคราะห์คู่แข่งและเลือกคีย์เวิร์ด ก่อนที่จะลงในเนื้อหา ขั้นตอนนี้ ผมจะพูดถึงเรื่อง SEO (Search Engine Optimization) กันก่อนนะครับ เผื่อมีบางคนหลงทางมาเจอ จะได้รู้ว่า SEO มันคืออะไร สำคัญยังไง ทำไมต้องทำ SEO ทำไมมีคนกล่าวถึงกันมากเหลือเกิน (ในกลุ่มเว็บมาสเตอร์และคนที่เป็นเจ้าของเว็บไซต์ต่างๆ) ก่อนอื่น ผมขอออกตัวก่อนนะครับว่า ผมไม่ได้เป็นเทพจุติจากที่ไหน แต่อาศัยว่ามีประสบการณ์ในการทำ SEO มาพอสมควร นอกจากนี้ ก็ยังได้ถ่ายทอดให้น้องๆ อีกหลายคนทำตาม และก็ประสบความสำเร็จมาแล้ว แต่ทั้งนี้ ก็ขึ้นอยู่กับความขยันของแต่ละคนอีกหล่ะครับ SEO มันไม่ได้เป็นกฏตายตัว (เราไม่ใช่กูเกิ้ล เอ็มเอสเอ็น หรือ ยาฮูนี่ครับ) มันมีการเปลี่ยนแปลงตลอดเวลา ใครขยันหาข้อมูล รู้จักสังเกต นำมาปรับแต่งก็ได้เปรียบหล่ะครับ

SEO คืออะไร SEO (เอสอีโอ) มาจากคำเต็มๆ ว่า Search Engine Optimization ความหมายแบบบ้านๆ ลูกทุ่งๆ ก็คือ การปรับแต่งเว็บไซต์ และกระบวนการต่างๆ ของเว็บไซต์ตั้งแต่การออกแบบ เขียนโปรแกรม และการโปรโมทเว็บ เพื่อให้ติดอันดับต้นๆ ของ Search Engine (เครื่องมือค้นหาเว็บไซต์ต่างๆ เช่น Google, MSN, Yahoo, AOL เป็นต้น)

SEO สำคัญยังไง อินเตอร์เน็ตในยุคปัจจุบันนี้ คนส่วนใหญ่ใช้ Search Engine ในการค้นหาข้อมูล แทนที่จะต้องพิมพ์ URL (Uniform Resource Locator) ก็ใช้ Keyword (คำค้น) ป้อนลงไปใน Search Engine Box ต่างๆ ก็จะค้นหาสิ่งที่ตัวเองต้องการได้อย่างง่ายดาย และตรงประเด็น มีให้เลือกเปรียบเทียบอีกหลายๆ แห่ง สำหรับเรื่องๆ นั้น และเมื่อค้นพบแล้ว ก็จะมีการแสดงผลออกมาหลายๆ หน้า หลายๆ เว็บไซต์ เว็บที่ถูกแสดงเป็นอันดับที่ 1 2 3 หรือที่แสดงผลในหน้าแรก ก็จะถูกคลิกเข้าไปดูข้อมูลมากที่สุด ด้วยเหตุนี้เอง เว็บไซต์ต่างๆ ย่อมต้องการให้เว็บตัวเองขึ้นอันดับ 1 ของ Keyword นั้นๆ เผื่อผลประโยชน์หลายๆ ด้านเช่น ขายสินค้า โฆษณา หรือโปรโมทร้านค้า บริษัทของตัวเอง ทำให้ได้เปรียบคู่แข่ง ดังนั้น ผมสรุป ความสำคัญของ SEO ออกมาเป็นข้อๆ ดังนี้นะครับ (ใครต้องการเพิ่มก็เขียนไว้ที่ คอมเม้นท์นะครับ)

1. ทำให้เว็บของเราติดอันดับต้นๆ ในการแสดงผลงการค้นหา
2. การเขียน Title ที่ดี Keyword Intrend ช่วยทำให้สะดุดตา แม้อันดับต่ำกว่า ก็มีสิทธิ์ถูกคลิกมากกว่า
3.ทำให้เว็บเราถูกหลักของ W3C ซึ่งเป็นมาตรฐานของภาษาที่ใช้เขียนเว็บ ทำให้ดูสละสลวยเมื่อ Search Engine มาเจอก็เก็บข้อมูลต่างๆ ได้ง่าย
4. เมื่อติดอันดับต้นๆ ทำให้ขายสินค้าได้ โฆษณาเข้ามา เพราะมีทราฟิก
5. ติด Adsense ก็มีโอกาสที่จะได้รับเงินค่าโฆษณาที่สูงด้วย เพราะมีทราฟิกก็มีโอกาส
....อื่นๆ

SEO คือ อะไร

SEO คืออะไร เกือบจะลืมเลยครับ ทำ Blog เกี่ยวดับ SEO แต่ดันลืมบอกเพื่อนๆว่ามันคืออะไร S ย่อมาจากคำว่า Search แปลว่าค้นหา E ย่อมาจากคำว่า Engine แปลว่า เครื่องยนต์แต่ในความหมายที่เกี่ยวกับอินเตอร์เน็ตเราจะแปลว่าเครืองมือหรือโปรแกรม ส่วนคำสุดท้ายคือ O ย่อมาจากคำว่า Optimize หรือ Optimization แปลว่าการปรับแต่ง ถ้าจะให้ผมแปลโดยร่วมแล้วก็อาจจะเหมือนท่านอื่นๆที่เขียนหนังสือและบทความของ SEO นะครับ อิอิ(ผมมือสมัครเล่นงับ) SEO จะมีความหมายว่า การปรับแต่งเว็บของเราให้ถูกใจพวกเหล่าเว็บ Search Engine ทั้งหลาย ครับ ทำอย่างไรให้เวลาค้นหาคำต่างๆแล้วเว็บเราสามารถติดหน้าแรกของผลลัพธ์ของเว็บ Search Engine เหล่านั้นได้ ถ้าเราติดที่หน้า 20กว่าๆ คนที่ค้นหาอาจจะไม่อยากที่จะคลิกหน้าต่อๆไปเพื่อหาข้อมูลอีกเป็นแน่ เพราะถ้าเป็นผมเองก็คิดว่า ผลลพธ์1-3หน้าแรกจะตรงกับสิ่งที่ค้นหามากที่สุด พอพูดแบบนี้เพื่อนๆก็คงจะมีคำถามแน่นอนว่า แล้วเราจะทำอย่างไรให้เว็บเราติดหน้าแรกได้ มันมีวิธีครับแต่เว็บผมเองก็ยังทำไม่ได้เลย อิอิ กำลังพยายามทำอยู่ครับ


รวบทิปเกาเหลา ทำอย่างไรให้ PR เราสูงขึ้น Traffics มากขึ้น Backlinks มากขึ้น

หลังจากที่เขียนบทความแรกเกี่ยวกับ SEM (Introduction to Search Engine Marketing) มีเพื่อนๆเข้าไปดูและให้ comments กลับมาบ้างครับ แต่วันนี้ผมจะขอเขียนถึงประสบการณ์ที่ได้เคยทดลองเองและ ทำตามคนอื่นในการทำ SEO กับ เว็บไซต์ของตัวเองนะครับ ในการสร้าง Backlinks และการเพิ่ม Link Popularity หรือ PR นั่นเองครับ เนื้อหาในหัวข้อต่างๆผมจะเขียนแบบไม่เจาะลึก(เพราะไม่มีอะไรให้เจาะ) เอาแบบเข้าใจง่ายๆครับ บทความนี้ไม่รวมในส่วนของการทำ SEO นะครับ

1. Search Engine Submission (SES)
ถือเป็นสิ่งแรกเลยนะครับหลังจากที่เว็บไซต์ของเราเสร็จสมบูรณ์ พร้อมที่จะโลดแล่นอยู่ในโลก Internet การทำการ submit เพื่อให้ Search Engines ต่างๆรู้จักกับเว็บไซต์ของเรา สำหรับบรรดา Search Engines หลักๆก็คือ Google, Msn, Yahoo, และ Search Engines อื่นๆเช่น โดยเฉพาะเจ้าพ่อแห่งวงการ อย่าง Google อย่าลืมที่จะ Submit นะครับ ซึ่งหลังจาก Submit ที่ google แล้ว เว็บของคุณอาจจะติดเจ้า Sandbox ก่อน (เป็น algorithm ชนิดหนึ่งที่ทาง Google สร้างขึ้นเพื่อเป็นการป้องกันการ Spam ครับ) ข้อดีของการ ทำ SES ก็คือท่าเว็บเราอยู่ในระบบ รับรองได้เลยว่ามีแต่ได้กับได้ครับ

2. Major Directory Submission
พวก Web Directory ก็มีมากมายหลายแบบหลายชนิด Directory ยอดนิยมที่ผู้คนให้ความสนใจที่สุดก็คงไม่พ้น พี่ DMOZ ซึ่งไม่รู้เป็นอะไร Submit ง่าย แต่อยู่ในระบบยาก แต่อย่าท้อครับ พยายามทำให้เว็บของคุณอยู่ในระบบ DMOZ ให้ได้ เพราะ เจ้าพ่อ SE อย่าง Google ก็ใช้ฐาณข้อมูลของทาง DMOZ ด้วย เหตุผลก็คือ พี่ DMOZ เขาเป็น Human Edit Directory หรือใช้แรงงานคนในการตรวจสอบนั่นเอง ซึ่งก็คือ Google Directory ส่วนอีก Directory ยอดนิยมของคนมีตังก็คือ Yahoo Web Directory ครับ แต่การที่เราจะเพิ่มชื่อเข้าไปในระบบจะมีค่าใช้จ่ายด้วย แต่เขาก็ไม่รับรองนะครับว่าจะผ่านการตรวจสอบ 100% แต่เท่าตรวจสอบมา เว็บไซต์ที่มี อยู่ในระบบของ DMOZ และ Yahoo Web Directory มักอยู่ในตำแหน่งที่ดีใน SERP (Search Engine Result Page)

3. Paid & Free Directories Submission
ของฟรีไม่มีในโลก อาจใช้ไม่ได้กับหัวข้อนี้ ผมจะบอกว่ายังมี Directories มากมายที่ให้เราได้ Submit Free และแบบเสียเงิน ซึ่งสามารถที่จะแยกออกตามหัวข้อต่างๆดังนี้

Regular Link ฟรีไม่ ชัวร์ว่าจะได้อยู่ในระบบไหม
Regular Link with Reciprocal อันก็ฟรีแต่ต้องลิงค์กลับให้เขาด้วย แต่มีแนวโน้มจะได้อยู่ในระบบสูง!
Featured Link ได้แน่นอนครับ เร็ว และได้อยู่ในอันดับต้นๆเลย แต่เสียเงิน!

พูดกันตรงๆเลยว่า พวก Directories เหล่านี้สามารถที่จะสร้าง Backlinks มาให้กับเว็บเรามากแค่ไหน ผมก็ขอตอบในส่วนของผมว่า หากเว็บเพจ ใน Directory มีค่า PR ซึ่งก็จะส่งผลดีให้กับเราอยู่แล้วยิ่งเป็นของฟรีแล้วยิ่งคุ้มครับ แต่การที่เราจะได้อยู่ในหน้าแรกๆในหัวข้อเช่น Travel ได้นั้นก็ยากพอสมควรครับ ขอให้เรามีความอดทนในการ Submit นะครับ( ตอนนี้ผมเองก็ทำทุกวัน เฮ้อ สู้ๆ)

4. Signature ลายเซ็นพิฆาต
หลายๆคนคงรู้จักทิปนี้แน่นอน(โดยเฉพาะตัวผมเองชอบมาก) ขอให้เป็นลายเซ็นที่ไม่เป็นในลักษณะการ Spam หรือขายโฆษณานะครับ (อาจโดนแบนได้จากเว็บบอร์ดนั้นๆ) เอาแบบเนียนและสวยงามครับ ผมจะบอกถึงผลดีที่เราได้รับตรงๆก็คือ Traffic จากจำนวนผู้คนที่จะเข้ามาในเว็บของส่วนผลพลอยได้แบบดับเบิ้ล ก็คือหากเว็บบอร์ดนั้นๆมีเนื้อหาสาระในหมวดเดียวกับเรา ละมีค่า PR ด้วย รับรองได้เลยว่าจะเป็น One way Link ที่มีคุณภาพคับแก้วแน่นอน

5. Link Exchange แลกลิงค์กระจาย
หัวข้อนี้ไม่มีอะไรมากครับ แลกลิงค์อย่างเดียวครับ ผมขอแนะนำให้เพื่อนๆสร้างหน้าแลกลิงค์มาโดยเฉพาะเลยนะครับ เช่น Link.html เป็นต้น เพราะว่าลิงค์ที่เราจะทำกลับไปให้ Partner ของเราจะได้ไม่ต้องทำจากหน้า Home หรือ index ของเราครับ ยังมีเว็บไซต์เช่น linkmetro.com Linkmarket.net ให้บริการโปรแกรมแลกลิงค์ ด้วยซึ่งก็มีประโยชน์กับเราตรงๆเลยครับ

6. BackLink for Sell ถึงเวลาต้องซื้อลิงค์
มีเว็บไซต์ทุนหนามากมาย ที่ต้องการให้เว็บไซต์ของตัวเองได้อยู่หน้าแรก อันดับแรกๆใน SERP ใน Keyword นั้นๆ การซื้อ Oneway Link จากเว็บไซต์ที่มีค่า PR สูงๆ ก็เป็นปัจจัยหลักๆในการสร้าง Link Popularity ครับ แต่หากเราจำเป็นต้องทำ ผมขอบอกเลยว่าทำให้เนียนนะครับ ผมขอยกตัวอย่างการซื้อ Oneway links ที่มีคุณภาพไม่ใช่ PR สูงอย่างเดียวและอย่าลืมดูว่าเนื้อหาต้องมีความ สัมพันธ์ กับเว็บไซต์ของเราด้วย โปรดอย่า!ซื้อลิงค์จำพวก 50$ for 10,000 oneway links เป็นต้น ตอนนี้เราคงต้องกลับมาถามตัวเองดูครับ ว่าถึงเวลาที่ต้องเสียเงินหรือยัง (ผมทุนน้อยชอบของฟรี)

7. Content is Everything เนื้อหาดี สาระดี ชีวิตก็ดีขึ้น
พวกเราคงเคยได้อ่าน Content is the King ใช่แล้วครับ ถ้าเว็บไซต์ของเราเนื้อหาดีมีข่าวสารน่าติดตาม
ข้อมมูลที่ดีและมีประโยชน์ต่อผู้เยี่ยมชม รับรองว่ารุ่งครับ ตัวอย่างง่ายๆก็คือหากเว็บของคุณเขียนบทความเกี่ยวกับ
Google Adsense ซึ่งเป็นบทความที่มีให้ประโยชน์กับผู้อ่านมากๆ อาจจะมีเว็บไซต์อื่นนำบทความของท่านไป ลงในเว็บของเขาและทำ ลิงค์กลับมาที่เว็บเจ้าของบทความซึ่งก็คือเว็บคุณ สิ่งที่คุณได้รับ Oneway Link ชื่อเสียง(สำคัญมาก) ไม่แปลกเลยที่หลายๆคน เขียนบทความและ Submit ไปที่ Articleห Directory (หัวข้อต่อไปครับ) อย่าลืมครับว่าไม่ใช่แค่ บทความยังมีสิ่งๆอื่นมากมากมายที่สามารถสร้าง Backlinks กัลมาได้อีกครับ

8. Articles Submission บทความ เสริมสร้างบารมี
หัวข้อภาษาไทยอาจจะดูอลังการ (นิดนึง) แต่ของอย่างนี้ไม่เจอกับตัวคงไม่เชื่อแน่ๆ บทความดีๆ บางทีสามารถที่จะทำให้จำนวนผู้เยี่ยมชมสู่เว็บคุณมีมากมายถล่มถลายจน Bandwidth vคุณหมดได้ครับ (ระวังไว้จะเจอกับตัว) แต่ก็อย่างว่าครับ มันขึ้นอยู่กับคุณภาพของบทความและคุณค่าที่มีให้กับผู้อ่านและ เว็บไซต์ที่ดึงไปลงในเว็บเขาครับ เพิ่มเติมอีกนิดนะครับว่า พวก Free Articles เว็บไซต์ที่ได้รับความนิยมมีเยอะครับ เช่น www.digg.com

9. PPC Pay Per Click คลิกแล้วจ่าย(ได้คุ้มเสีย)
เจ้า PPC หรือ Pay Per Click เป็นวิธีการหนึ่งที่ใช้ใน SEM (บทความแรกเลยนะครับที่ผมเขียน) ข้อดีของมันก็คือเราสามารถเจาะจงกลุ่มเป้าหมาย ที่เราต้องการให้เข้าชมเว็บของเราครับ จุดสำคัญจริงๆแล้วไม่ได้อยู่ที่จะนำคนเข้ามาตามคลิกที่เกิดขึ้นครับ แต่อยู่ที่ทำยังไงจะให้คนที่เข้ามา กลับเข้ามาอีกเรื่อยๆครับ(ย้อนไปที่หัวข้อ Content is Everything) หากเราต้องมาเสียเงินเรื่อยๆแต่สิ่งที่ตอบกลับมาคงไม่มีอะไรเลย หากมีแต่ลูกค้าหน้าใหม่ๆ เพราะเราคงไม่โปรโมทเว็บไซต์ของเราทั้งปีแน่ๆ สำหรับ PPC ก็มีหลายเจ้าที่ให้บริการอยู่นะครับ หลักๆก็ Google Adwords, Yahoo Sponsored Search, Overture อื่นๆอีกมากมายครับ

10. Email Marketing โปรโมต เว็บผ่านอีเมลย์
อันนี้เป็นวิธีเก่าเอามาทำใหม่ อย่าลืมเติมน้ำจิ้มและอุ่นก่อนทานนะครับ จริงๆแล้วเป็นวิธีที่ได้ผลพอสมควรถ้าให้ดีควรทำแบบที่ไม่เข้า ข่าย Spam นะครับ เช่นเมลย์ไปแนะนำเว็บไซต์ใหม่ที่เราทำกับ Contact List เพื่อนๆหรือคนรู้จักของเราเท่านั้นครับ ไม่ใช่เชิงพานิชย์ขายสินค้านะครับ สำคัญที่สุดก็คือ เว็บไซต์ที่ติด Adsense โปรดระวังอาจโดนแบนได้นะครับ แนะว่าไม่น่าใช้ถึงไม่น่าใช้ที่สุดครับ

เอาไปสิบหัวข้อก่อนนะครับ ผมว่าจะเขียนต่ออีก เอาไว้ค่อยเขียนต่อนะครับ หวังว่าคงมีประโยชน์ไม่มากก็น้อยกับเพื่อนๆนะครับ

Install Fedula 11

ขอบคุณรูปภาพจาก my-guides.net ด้วยครับ ขอให้เจริญๆๆนะครับ
๑.พอใส่แผ่นแล้ว โปรแกรมจะรันหน้าแรกขึ้นมาตามรูปด้านล่าง
๒.พอเลือกข้อแรกโปรแกรมจะถามว่าต้องการตรวจสอบแผ่นไหม ถ้ามั่นใจว่าแผ่นดี ก็เลือก

๓.กด Next


๔.เลือกภาษา








๕.ใส่ชื่อ โฮสเนม




๖.เลือกเวลาตามโซน




๗. ใส่พาสเวิร์ด root







๘. เลือก Replace existing Linux system






























๙. เลือก Next

























๑๐. รอจนโหลด Package เสร็จ












๑๑. เลือก Reboot













๑๒. พอ Reboot เครื่องขึ้นมาใหม่อีกครั้ง จะเป็นหน้านี้




๑๓. เลือก Forward























































































































































































































ติดตั้ง Cacti บน Fedora 11 ตอนที่ 3

ขั้นตอนนี้จะเป็นการคอนฟิก Cacti ผ่านหน้าเว็บ ซึ่งเป็นค่าคอนฟิกต่างๆ ที่ใช้รัน




เลือกชนิดการติดตั้ง ถ้าเป็นการติดตั้งใหม่ เลือกเป็น “New Install”




หน้าเว็บจะแสดงโปรแกรมต่างๆ ที่ Cacti เรียกใช้ หากมีครบทุกอย่างก็สามารถกดปุ่ม [Finish] ได้





การล็อกอินครั้งแรก ใส่ User Name เป็น “admin” โดยไม่ต้องใส่ Password




เพื่อความปลอดภัย ในการล็อกอินครั้งแรก โปรแกรม Cacti จะบังคับให้เปลียน Password




หลังจากล็อกอินเรียบร้อยแล้ว ก็จะขึ้นหน้าเว็บของ Cacti



เปิดการ polling
การติดตั้ง cacti โดยใช้ไฟล์ rpm จะติดตั้ง cron สำหรับการ poll data ทุกๆ 5 นาที ไว้ในไฟล์ /etc/cron.d/cacti เพียงแต่โดยดีฟอลต์จะปิดไว้ โดยใส่เครื่องหมาย ‘#’ ไว้หน้าบรรทัด

[root@fc11-64min ~]# cat /etc/cron.d/cacti
#*/5 * * * * cacti /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1ต้องแก้ไขไฟล์นี้โดยเอาเครื่องหมาย ‘#’ ออก

[root@fc11-64min ~]# cat /etc/cron.d/cacti
*/5 * * * * cacti /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1 ข้อมูลอ้างอิง
•ติดตั้ง Cacti บน Fedora 11 ตอนที่ 1
•ติดตั้ง Cacti บน Fedora 11 ตอนที่ 2
Comments (0)
ติดตั้ง Cacti บน Fedora 11 ตอนที่ 2
Filed under: Database, MySQL, Networking, PHP, Performance, apache — Tags: install cacti — editor @ 4:30 pm
หลังจากติดตั้งไฟล์โปรแกรม cacti เรียบร้อยแล้ว ต้องแก้ไขคอนฟิกไฟล์รวมทั้งสร้าง database เพื่อใช้ในการเก็บข้อมูลของ cacti เองด้วย

(more…)

Comments (0)
ติดตั้ง Cacti บน Fedora 11 ตอนที่ 1
Filed under: Database, Networking, PHP, Performance, Programming, SNMP, apache — Tags: install cacti — editor @ 3:45 pm
Cacti จัดเป็นโปรแกรมทางด้าน Network Management อย่างหนึ่ง คุณสมบัติหลักๆ คือสามารถไปดึงค่าต่างๆ จากอุปกรณ์ network ไม่ว่าจะเป็น Server, Router, Switch ผ่านทาง Poller นำข้อมูลมาเก็บไว้ใน Data Storage แล้วสามารถนำค่ามา plot เป็นกราฟ โดยใช้ RRDTool (ซึ่งเป็นโปรแกรมสร้างกราฟเดียวกันกับ MRTG)

ในตอนที่ 1 จะอธิบายวิธีการติดตั้งไฟล์ที่จำเป็นและ Cacti บน Fedora 11 (x86_64) โดยทดสอบบนเครื่องที่ ติดตั้ง Fedora 11 แบบประหยัดพื้นที่สุด

(more…)

Comments (0)
ติดตั้ง PHP Module: snmp
Filed under: Networking, PHP, Programming, apache — Tags: install_php-snmp — editor @ 3:28 pm
SNMP เป็นโปรโตคอลมาตรฐานสำหรับการบริหารจัดการอุปกรณ์ทางด้านเครือข่าย คือสามารถที่จะดึงค่าที่ต้องการ หรือคอนฟิกค่าของอุปกรณ์ได้

การที่จะสามารถเขียน PHP ให้เรียกใช้ฟังก์ชั่นเกี่ยวกับ snmp ได้ ต้องติดตั้งโมดูล php-snmp

(more…)

Comments (0)
June 27, 2009
ติดตั้ง rrdtool บน Fedora 11
Filed under: Networking, Programming — Tags: rrdtool — editor @ 3:15 pm
จากแผ่นดีวีดี Fedora 11 ติดตั้งไฟล์ RPM ดังนี้

[root@fc11-64a ~]# mount /dev/scd0 /media
[root@fc11-64a ~]# cd /media/Packages/
[root@fc11-64a Packages]# rpm -i fontpackages-filesystem-1.20-2.fc11.noarch.rpm
[root@fc11-64a Packages]# rpm -i dejavu-fonts-common-2.29-2.fc11.noarch.rpm
[root@fc11-64a Packages]# cd ~
[root@fc11-64a ~]# umount /media/ดาวน์โหลดไฟล์เพิ่มเติมจาก Fedora 11 (Everything) แล้วใช้คำสั่ง rpm เพื่อติดตั้ง

[root@fc11-64a ~]# rpm -i dejavu-lgc-sans-fonts-2.29-2.fc11.noarch.rpm
[root@fc11-64a ~]# rpm -i dejavu-lgc-sans-mono-fonts-2.29-2.fc11.noarch.rpm
[root@fc11-64a ~]# rpm -i dejavu-lgc-serif-fonts-2.29-2.fc11.noarch.rpm
[root@fc11-64a ~]# rpm -i dejavu-fonts-lgc-compat-2.29-2.fc11.noarch.rpm
[root@fc11-64a ~]# rpm -i rrdtool-1.3.7-1.fc11.x86_64.rpmข้อมูลอ้างอิง
•Fedora 11 (Everything)
Comments (0)
May 9, 2009
คอนฟิก VMware Server Networks บน Windows
Filed under: Networking, Virtualization, vmware — Tags: VMware Server — editor @ 1:31 am
หลังจากสร้าง Virtual Machine ใน VMware Server ที่ประกอบด้วย CPU, Memory, Disk เรียบร้อยแล้ว อีกส่วนหนึ่งที่สำคัญคือคอนฟิก network คือ ทำอย่างไรให้เครื่อง Guest Virtual Machine ที่อยู่ข้างใน สามารถติดต่อส่งข้อมูลกับเครื่องอื่นๆ ได้ ทั้งเครื่องหลัก (Host) และเครื่องอื่นๆ เลย

โดยดีฟอลต์จากการติดตั้ง จะมีการสร้างพอร์ตแลนขึ้นมา 1 พอร์ต ในเครื่อง Guest สำหรับเชื่อมต่อกับเครื่องหลัก เราสามารถสร้างเพิ่มเติมได้ โดยคลิ้กที่ “Edit virtual machine settings” แต่ในช่วงทดลอง ทำความเข้าใจ และการใช้งานโดยทั่วไปส่วนใหญ่แล้ว พอร์ตแลยเดียวก็เพียงพอ

ปิด remote services ตอนติดตั้ง Solaris

วิธีการหนึ่งที่ช่วยปิดเซอร์วิสเก่าๆ สำหรับการ remote services ไม่ว่าจะเป็น telnet, rlogin, ftp เหลือแค่ Secure Shell (SSH) สามารถทำได้ตั้งแต่ระหว่างการติดตั้ง Solaris ในหน้าจอที่เลือก “Enabling remote services” ให้เลือก [x] No สำหรับ “Remote services enabled”





ปิดเซอร์วิส CDE-Login (X Window)
หากคุณไม่เคยเดินไปที่หน้าจอคอนโซลของเครื่อง login เข้า CDE หรือ W Window แล้ว สามารถปิดเซอร์วิสนี้ไปได้เลย เหลือแค่เป็นคอนโซล แบบ text ธรรมดา ให้สามารถ login ได้

ใช้คำสั่ง svcs เพื่อตรวจสอบสถานะ cde-login

# svcs cde-login
STATE STIME FMRI
online 13:34:58 svc:/application/graphical-login/cde-login:default
ตัวอย่างหน้าจอ cde-login




ใช้คำสั่ง svcadm disable เพื่อปิดเซอร์วิส cde-login

# svcadm disable cde-loginตรวจสอบสถานะ cde-login หลังจากปิดเซอร์วิสแล้ว

# svcs cde-login
STATE STIME FMRI
disabled 13:36:59 svc:/application/graphical-login/cde-login:default
ตัวอย่าง text console login หลังจากปิดเซอร์วิส cde-login




ปิดเซอร์วิส Sun Java Web Console
Sun Java Web Console เป็นเซอร์วิสของ Solaris เพื่อสร้างเป็นจุดรวมของโปรแกรมประเภท system management ผ่านทาง web-based โดยผู้ใช้สามารถเรียกผ่าน https ได้ หากเราใช้แต่ command line เพื่อแก้ไขคอนฟิกเครื่อง เราสามารถปิดเซอร์วิสนี้ได้






ใช้คำสั่ง svcs เพื่อตรวจสอบสถานะ webconsole

# svcs webconsole
STATE STIME FMRI
online 14:01:06 svc:/system/webconsole:consoleใช้คำสั่ง svcadm disable เพื่อปิดเซอร์วิส webconsole

# svcadm disable webconsoleตรวจสอบสถานะ webconsole หลังจากปิดเซอร์วิสแล้ว

# svcs webconsole
STATE STIME FMRI
disabled 14:41:47 svc:/system/webconsole:console

วันอาทิตย์ที่ 6 กันยายน พ.ศ. 2552

FPGA

บทความจาก www.astronlogic.com
ทำความรู้จักกับ FPGA

ในปัจจุบันมี FPGA อยู่ 4 ชนิดที่วางขายอยู่ในท้องตลาดได้แก่ Symmetrical Array, Row-Based, Hierarchical PLD และ Sea-of-Gates ซึ่งแต่ละชนิดก็มีลักษณะการเชื่อมต่อภายในและการโปรแกรม ที่แตกต่างกันไป นอกจากนี้ในการแบ่งประเภทของ FPGA อาจแบ่งได้ตามเทคโนโลยีที่ใช้ในการโปรแกรม ซึ่งมีอยู่ 2 แบบคือ การโปรแกรมโดยการทำให้เกิดการเปลี่ยนแปลงทางกายภาพของตัวชิพ และการโปรแกรม โดยการใช้หน่วยความจำ

1. การโปรแกรมโดยการทำให้เกิดการเปลี่ยนแปลงทางกายภาพ

1.1 Fuse เป็นวิธีการโปรแกรมที่สามารถทำได้เพียงครั้งเดียว ซึ่งหลังจากที่โปรแกรมแล้วจุดเชื่อม ต่อจะขาดจากกัน
1.2 Anti Fuse เป็นวิธีการโปรแกรมที่คล้ายกับแบบ Fuse แต่ต่างกันที่หลังจากทำการโปรแกรม แล้วจุดเชื่อมต่อจะเชื่อมถึงกัน

2. การโปรแกรมโดยใช้หน่วยความจำ

2.1 EEPROM Based FPGA
FPGA ที่ใช้การโปรแกรมแบบนี้มักเรียกว่า CPLD ซึ่งเทคโนโลยีที่ใช้จะเหมือนกับ EEPROM ทำให้มีความจของเกทต่ำ โดยทั่วไปจะน้อยกว่า 20,000 เกท แต่ข้อดีของ EEPROM Based FPGA คือสามารถเก็บข้อมูลที่โปรแกรมลงไปได้โดยไม่จำเป็นต้องมีไฟเลี้ยง และในการโปรแกรมจะใช้ทรานซิสเตอร์ 1 ตัวต่อ 1 บิท ซึ่งการโปรแกรมสามารถทำได้ประมาณ 10,000 ครั้ง

2.2 SRAM Based FPGA
FPGA แบบนี้จะใช้เทคโนโลยีในการโปรแกรมเหมือนกับ SRAM (Static RAM) ทำให้สามารถ โปรแกรมซ้ำได้โดยไม่จำกัดจำนวนครั้ง นอกจากนี้ยังมีความจุของเกทในระดับปานกลางถึงสูงมาก (ประมาณ 10,000 - 1,000,000 เกท) ซึ่งข้อดีของ SRAM Based FPGA คือใช้เวลาในการ โปรแกรมน้อย (ระดับ nsec) การโปรแกรมทำได้ง่ายเทียบได้กับการเขียน SRAM ทั่วไป และ เหมาะสำหรับการออกแบบวงจรที่มีความสลับซับซ้อน ส่วนข้อเสียคือไม่สามารถเก็บโปรแกรมใน ภาวะที่ไม่มีไฟเลี้ยงได้ ดังนั้น FPGA ชนิดนี้จึงมักใช้ควบคู่กับ ROM เพื่อเก็บโปรแกรมและทำการ โหลดโปรแกรมลงในตัวชิพในขณะที่เริ่มต้นใช้งาน

โครงสร้างภายในของ FPGA

ลักษณะโครงสร้างภายในของ FPGA จะเป็นอะเรย์ของบล็อคลอจิกที่สามารถทำการโปรแกรมได้ดังรูปที่ 2.1 และ 2.2




รูปที่ 2.1 โครงสร้างภายในของ FPGA ตระกูล MAX7000S




รูปที่ 2.2 โครงสร้างภายในของ FPGA ตระกูล FLEX10K

ปัจจัยที่ทำให้การออกแบบ FPGA ทำได้ง่ายและสะดวกรวดเร็ว

1.ผู้ออกแบบไม่จำเป็นต้องทราบถึงโครงสร้างภายในของตัวชิพ เพียงแต่มีความรู้เกี่ยวกับขั้นตอนการออก แบบลอจิกก็เพียงพอแล้ว ต่างกับการใช้ไมโครโปรเซสเซอร์ซึ่งจำเป็นต้องศึกษาโครงสร้างภายในรวมถึง ภาษา Assembly ของไมโครโปรเซสเซอร์ตัวนั้นด้วย

2.มีการออกแบบโดยใช้ภาษาในการอธิบายการทำงานของวงจร หรือ HDL (Hardware Description Language)เป็นเครื่องมือในการออกแบบ ซึ่งเป็นวิธีการที่มีความยืดหยุ่นสูง ทำได้รวดเร็ว และไม่จำเป็น ต้องทราบถึงลักษณะของวงจรที่ต้องการว่าจะเชื่อมต่อกันอย่างไร เพียงแต่กำหนดลักษณะการทำงานให้มัน จากนั้นตัวซอฟต์แวร์จะทำ Synthesis and Optimize ให้ทั้งหมด นอกจากนี้ภาษาที่ใช้ยังเป็นมาตราฐาน เดียวกันสามารถใช้ได้กับชิพทุกตัวและทุกบริษัท

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



รูปที่ 2.3 การโปรแกรมลงในชิพ

การออกแบบโดยใช้ภาษาอธิบายพฤติกรรมของฮาร์ดแวร์

ในการออกแบบวงจรดิจิตอลนั้นสามารถทำได้โดยการวาดวงจร (Schematic) หรือใช้ภาษาอธิบายพฤติกรรม (Hardware Description Language) ของฮาร์ดแวร์ จากที่ได้กล่าวไปแล้วในบทที่ 1 ในกรณีของการออก แบบวงจรด้วย ASIC ชนิด Full Custom ผู้ออกแบบจะต้องเขียนวงจรด้วย Schematic จากนั้นจะนำวงจรที่ ออกแบบไว้ไปทำการจำลองการทำงาน (Simulate) ซึ่งหากผลออกมาเป็นที่พอใจก็จะต้อง Layout เป็นชั้นสาร และในการออกแบบ ASIC ชนิดนี้ผู้ออกแบบจำเป็นจะต้องทราบถึงเทคโนโลยีที่ใช้ในการสร้างด้วย หลังจากได้ Layout ที่สมบูรณ์แล้วจึงจะส่งไปเข้ากระบวนการสร้างไอซีหรือ Fabrication เพื่อสร้างเป็นชิพไอซีออกมา แต่ในการออกแบบวงจรด้วย FPGA โดยการใช้ Schematic หรือใช้ภาษาอธิบายการทำงานของวงจรจะทำ ได้สะดวกกว่า เนื่องจากวิธีการนี้ผู้ออกแบบไม่จำเป็นต้องคำนึงถึงเทคโนโลยีที่จะใช้สร้างไอซีและที่สำคัญ การออก แบบโดยวิธีนี้สามารถแก้ไขโมเดล (Model) หรือเปลี่ยนแปลงเทคโนโลยีได้สะดวกกว่า เพราะไม่ต้องวาดวงจร ใหม่ นั่นคือการออกแบบโดยใช้ภาษาอธิบายฮาร์ดแวร์ จะทำให้โมเดลที่ได้ไม่ขึ้นกับเทคโนโลยีสำหรับภาษาที่ใช้ สำหรับอธิบายพฤติกรรมของฮาร์ดแวร์ที่ใช้กันก็มี VHDL, AHDL และ Verilog เป็นต้น ส่วนรายละเอียด ของขั้นตอนในการออกแบบสามารถอธิบายได้ดังนี้

1.การสังเคราะห์วงจร (Logic Synthesis)
ในขั้นตอนนี้จะใช้ซอฟต์แวร์ในการสังเคราะห์วงจร (Synthesis Tools) ทำการสังเคราะห์พฤติกรรม ของวงจรที่ได้จากการออกแบบด้วย Schematic หรือ VHDL ซึ่งต้องทำการตรวจสอบด้วยว่าซอฟต์แวร์ นั้นสนับสนุนเทคโนโลยี FPGA (FPGA Library) ที่ต้องการหรือไม่ ตัวอย่างเช่น FPGA ของบริษัท XILINX และบริษัท ALTERA จะมีซอฟต์แวร์หลายตัวที่สามารถใช้ได้ เช่น Max Plus II ในขั้นตอนนี้ ซอฟต์แวร์สังเคราะห์วงจรจะทำการแปลงโค้ด VHDL และทำการ Optimize เพื่อให้ได้วงจรตาม เทคโนโลยีที่เลือกใช้ในการสังเคราะห์วงจรนั้นวงจรระดับเกท (Gate Level) จะไม่เหมาะสมกับโครง สร้างที่มีอยู่ในอุปกรณ์ FPGA ดังนั้นในการ Optimize ซอฟต์แวร์สังเคราะห์วงจร จะต้องทำการ Optimize ให้ได้เป็นวงจรที่ประกอบ ด้วยกลุ่มของลอจิกที่เหมาะสมกับอุปกรณ์ FPGA นั้นๆจึงทำให้ผล ที่ได้มีประสิทธิภาพและในขั้นตอนการสังเคราะห์วงจรนี้ ผู้ออกแบบสามารถกำหนดข้อบังคับสำหรับโมเดล แต่ละตัวได้ เช่น ข้อบังคับในเรื่องเวลา (Timing Constraints) หรือข้อบังคับในเรื่องของพื้นที่ (Area) หรือกำหนดชนิดและตำแหน่งของ I/O ซึ่งข้อบังคับเหล่านี้จะถูกนำไปใช้ในขั้นตอน Optimize เพื่อให้วงจร ที่ได้เป็นไปตามที่กำหนด ส่วนสำคัญในการ Optimize คือการเทียบ (Mapping) โมเดลให้เข้ากับ เทคโนโลยีที่ใช้เพื่อให้ได้วงจรที่เหมาะสมกับโครงสร้างและสถาปัตยกรรมภายในอุปกรณ์ FPGA เมื่อทำ การสังเคราะห์วงจรเสร็จแล้ว ซอฟแวร์การสังเคราะห์วงจรก็จะมีการรายงานผลว่าโมเดลที่ออกแบบไปนั้น เป็นอย่างไร เช่นมีค่าความหน่วง (Delay) เท่าใด ใช้ทรัพยากรต่างๆใน FPGA อะไรบ้าง เมื่อมาถึงขั้น ตอนนี้ ผู้ออกแบบก็จะทราบว่าโมเดลเป็นไปตามข้อบังคับหรือไม่ ถ้าไม่ก็สังเคราะห์ใหม่จนกว่าจะเป็นไปตาม ที่กำหนด

2.การแบ่งวงจร (Partitioning)
ขั้นตอนนี้เป็นการแบ่งวงจรที่ได้จากการสังเคราะห์ เป็นส่วนย่อยๆ สำหรับลงใน CLBs, IOBs หรือองค์ ประกอบอื่นๆ ภายในอุปกรณ์ FPGA สำหรับเกณฑ์ที่ใช้ในการแบ่งคือให้แต่ละส่วนที่จะแยกออกจากกัน มีจำนวนสัญญาณที่เชื่อมต่อระหว่างกันน้อยที่สุดเท่าที่จะทำได้ เพื่อลดความหนาแน่นในตอนทำการเชื่อม ต่อสัญญาณ (routing) ในขั้นตอนนี้จะใช้ซอฟต์แวร์ทำโดยซอฟต์แวร์จะเทียบส่วนประกอบของวงจรเช่น เกท (gate), ฟลิป-ฟลอบ (flip-flop) ลงในทรัพยากรต่างๆ ที่มีอยู่ในอุปกรณ์ FPGAหลังจากทำขั้นตอน นี้เสร็จแล้วผู้ออกแบบสามารถที่จะทราบว่าวงจรใช้จำนวนทรัพยากรภายในอุปกรณ์ FPGA ไปเท่าไร ส่วนข้อมูลทางเวลานั้นผู้ออกแบบจะทราบเฉพาะความหน่วงภายในแต่ละส่วนเท่านั้น หรือที่เรียกว่าความ หน่วงลอจิก(logic delay) ส่วนซอฟต์แวร์จะรวมเอาซอฟต์แวร์ย่อยอื่นๆ อีก เพื่อให้การทำ PPR (Partitioning Placement & Routing) เป็นไปอย่างต่อเนื่อง

3.การวางอุปกรณ์ (Placement)
ขั้นตอนนี้เป็นการเลือกทำเลที่ตั้งของแต่ละส่วนของวงจรที่ผ่านการแบ่งวงจร (Partitioning) มาแล้วว่าควร จะอยู่ ณ ตำแหน่งไหนในอุปกรณ์ FPGA เพื่อให้ได้ผลลัพธ์ดีที่สุด เช่นวงจรส่วนไหนควรอยู่ใกล้กัน เพื่อจะ ได้ค้นหาเส้นทางได้ (route) ง่ายหรือช่วยลดความหน่วง จะเห็นได้ว่าตำแหน่งภายในอุปกรณ์ FPGA นั้นมี ความสำคัญเพราะถ้าจัดวางวงจรลงในตำแหน่งที่ไม่เหมาะสมแล้วจะทำให้ความหน่วงเพิ่มขึ้นหรือ Router ทำการค้นหาเส้นทางสัญญาณไดไม่หมด การวางอุปกรณ์ที่ดีควรวางส่วนต่างๆให้อยู่ใกล้กันโดยเฉพาะส่วน ที่มีการเชื่อมต่อสัญญาณด้วยกันนอกจากนั้นการกำหนดตำแหน่งขา I/O (I/O pin) ตามตำแหน่งขา I/O ของ FPGA บนแผ่น PCB ก็จะมีผลโดยตรงเลยคือซอฟต์แวร์จะวาง I/O ลงในตำแหน่งที่ผู้ออกแบบกำหนด ซึ่ง บางครั้งตำแหน่งที่กำหนดไปไม่เหมาะสม ดังนั้นการกำหนดขา I/O ควรกำหนดตำแหน่งให้เหมาะสม หรือ ไม่ก็ให้ซอฟต์แวร์จัดการเอง

4.การเชื่อมต่อสัญญาณ (Routing)
ในขั้นตอนนี้เป็นการเชื่อมต่อสัญญาณระหว่างองค์ประกอบต่างๆ ภายในอุปกรณ์ FPGA ขั้นตอนนี้จะทำ ต่อเนื่องจากการวางอุปกรณ์ ในกรณีที่ทำการวางอุปกรณ์ไว้ไม่ดีซอฟต์แวร์ก็จะทำการเชื่อมต่อสัญญาณ ได้ไม่หมด (เนื่องจากจำนวนทรัพยากรสำหรับเชื่อมต่อสัญญาณนั้นมีอยู่จำกัด) หรือเกิดความหน่วงเกิน ค่าที่กำหนดในข้อบังคับ ผู้ออกแบบสามารถทำขั้นตอนนี้ได้โดยใช้ซอฟท์แวร์หรือผู้ออกแบบจะทำการ เชื่อมต่อสัญญาณด้วยตนเองก็ได้ แต่ทางที่ดีควรใช้ซอฟต์แวร์ทำดีกว่า นอกจากนั้นการกำหนดข้อบังคับ ทางเวลา จะช่วยให้ผลที่ได้จากการเชื่อมต่อสัญญาณดีขึ้นได้

5.ความหน่วงด้านเวลา (Delay)
ในการทำ FPGA นั้นความหน่วงที่เกิดขึ้นเป็นความหน่วงที่เกิดจากการวางตำแหน่ง (layout) ของอุปกรณ์ ซึ่งผู้ออกแบบไม่สามารถเข้าไปแก้ไขได้ แต่สามารถทำให้มีความหน่วงน้อยที่สุดได้ สำหรับความหน่วง ที่เกิดขึ้นนั้นแยกได้เป็นสองประเภทคือ

ความหน่วงลอจิก (Logic delay) เป็นความหน่วงภายในองค์ประกอบของอุปกรณ์ FPGA เอง
ความหน่วงที่เกิดจากการเชื่อมต่อสัญญาณ (Routing delay)
เป็นความหน่วงที่เกิดจากการเชื่อมต่อสัญญาณระหว่างองค์ประกอบภายในอุปกรณ์ FPGA โดยปกติแล้ว ค่าความหน่วงลอจิกไม่ควรเกิน 50% ของค่าความหน่วงที่ยอมรับได้ เพราะความหน่วงที่เกิดจากการ เชื่อมต่อสัญญาณมักจะมีค่ามากกว่าค่าความหน่วงลอจิก ดังนั้นในการวางอุปกรณ์ และเชื่อมต่อสัญญาณ ผู้ออกแบบควรกำหนดข้อบังคับทางเวลาเพื่อให้ ซอฟต์แวร์ได้ทำงานอย่างมีประสิทธิภาพเพิ่มขึ้น และเพื่อ ให้ได้ผลลัพธ์ที่ดีขึ้นค่าความหน่วงที่ได้หลังจากการวางอุปกรณ์ และเชื่อมต่อสัญญาณแล้วจะมีค่าความ หน่วงที่ค่อนข้างแน่นอน ซึ่งผู้ออกแบบสามารถทราบได้ว่าโมเดลที่ออกแบบนั้น เป็นไปตามข้อกำหนด หรือไม่

6.การจำลองการทำงานของวงจร (Simulation)
ในขั้นตอนนี้เป็นขั้นตอนที่สำคัญอีกขั้นตอนหนึ่ง เพราะเป็นขั้นตอนที่ผู้ออกแบบตรวจสอบฟังก์ชันการ ทำงานของโมเดลว่าถูกต้องหรือไม่ มีข้อผิดพลาดตรงไหนเพื่อจะได้ทำการแก้ไขให้ถูกต้อง ในขั้นตอนนี้ จะมีซอฟต์แวร์ที่ใช้สำหรับทำการจำลองการทำงานของวงจรที่ใช้อยู่ เช่น Model Sim ของบริษัท Model Technology หรือ Max Plus II ของบริษัท Altera ในการจำลองการทำงานของวงจร ควรทำทุกครั้งหลังจากที่มีการทำแต่ละขั้นตอนหลักเสร็จแล้ว เพื่อจะได้ทราบว่าข้อผิดพลาดของโมเดล เกิดขึ้นตอนไหน จะได้แก้ไขข้อผิดพลาดตรงขั้นตอนนั้นๆ ได้เลย ไม่ต้องมาคอยตรวจหาขั้นตอนที่ทำให้ เกิดข้อผิดพลาด นั่นคือการทำการจำลองการทำงานของวงจร ต้องทำทั้งหลังการเขียนโค้ด, การสังเคราะห์วงจร และการทำ PPR การจำลองการทำงานของวงจรหลังจากที่เขียนโค้ดเสร็จแล้วนั้น ผู้ออก แบบสามารถทราบได้แค่โมเดลทำงานถูกต้องหรือไม่เท่านั้น (functional test) ยังไม่สามารถตรวจ สอบการทำงานในเชิงเวลาได้ถูกต้อง ในการจำลองการทำงานของวงจรหลังจากที่สังเคราะห์เป็นวงจร แล้ว เพื่อจรวจสอบว่าฟังก์ชันการทำงานยังคงถูกต้องหรือไม่ และค่าความหน่วงที่เกิดขึ้นเป็นไปตาม ข้อบังคับหรือไม่ มีข้อผิดพลาดเกิดขึ้นหรือไม่ถ้ามีจะแก้ไขให้ถูกต้อง

ในการจำลองการทำงานของวงจรหลังจากที่ทำการวางอุปกรณ์ การเชื่อมต่อสัญญาณ (post layout simulation) แล้วก็มีความสำคัญเช่นกันเพราะผลที่ได้จากการจำลองการทำงานของวงจรในตอนนี้ จะเป็นผลลัพธ์ของโมเดลเลย ซึ่งผู้ออกแบบนอกจากจะตรวจสอบฟังก์ชันการทำงานแล้วยังต้อง ตรวจสอบคุณสมบัติอื่นๆ เช่น ความหน่วงที่ได้จากการทำ PPR ในรูปแบบค่าความหน่วงมาตรฐาน (Standard Delay Format : SDF) ว่าตรงตามที่กำหนดหรือไม่ หรือตรวจสอบว่าวงจรรวม สามารถใช้งานที่ความถี่สูงสุดเท่าไรนั่นเอง ในการจำลองการทำงาน ของวงจรควรใช้ ซอฟต์แวร์ตัวเดียวกันตอลดเพื่อจะได้เปรียบเทียบผลที่ได้จากขั้นตอนต่างๆ

7.การโปรแกรมอุปกรณ์ FPGA (Configuration)
หลังจากที่โมเดลผ่านขั้นตอนต่างๆ จนกระทั่งผ่านการทำ PPR (Partitioning, Placement & Routing) แล้วนั้น ถึงตอนนี้ก็สามารถที่จะดาวน์โหลด (download) ลงในอุปกรณ์ FPGA ได้แล้ว ในการดาวน์โหลดนี้ก่อนอื่นต้องแปลงแบบวงจรรวมที่ได้เป็นข้อมูลวงจร (configuration data) ซึ่งอยู่ในรูปของบิตสตรีม (bit stream) ก่อนแล้วจึงดาวน์โหลดลงไปเพื่อให้อุปกรณ์ FPGA มี ฟังก์ชันการทำงานตามโมเดลที่ผู้ออกแบบต้องการ ซึ่งในขั้นตอนนี้จะใช้วิธีที่แตกต่างกันออกไปสำหรับ อุปกรณ์ FPGA ของแต่ละบริษัทผู้ผลิตคือ ในกรณีที่เป็นอุปกรณ์ FPGA ชนิดที่ต้องโปรแกรมโดย วิธี SRAM นั้น ในการใช้งานผู้ออกแบบจะต้องเก็บข้อมูลวงจรไว้ในหน่วยความจำประเภท EPROM หรือ serial PROM ด้วยเพื่อจะใช้งานสะดวกขึ้น คือในการใช้งานโมเดลครั้งต่อไปไม่ ต้องดาวน์โหลดข้อมูลวงจรจากเครื่องคอมพิวเตอร์อีก เพราะมีข้อมูลวงจรเก็บอยู่ในหน่วยความจำอยู่ แล้ว แต่กรณีที่อุปกรณ์ FPGA เป็นชนิดที่โปรแกรมโดยใช้วิธี EPROM หรือ Anti fuse ก็ไม่จำ เป็นต้องมีหน่วยความจำสำหรับเก็บข้อมูลวงจร เพราะว่าอุปกรณ์ FPGA ชนิดนี้เมื่อดาวน์โหลดข้อมูล วงจรลงไป ข้อมูลที่ดาวน์โหลดลงไปก็ยังคงอยู่ในอุปกรณ์ FPGA และครั้งต่อไปก็ใช้งานโมเดลที่ออก แบบไว้ได้เลย

เครื่องมือสำหรับการออกแบบ FPGA

จะเห็นได้ว่าการออกแบบเพื่อทำ FPGA นั้นทำได้สะดวกกว่า ASIC มากเพราะใช้เวลาน้อยกว่ามากด้วย ส่วน สำคัญที่ใช้ในการทำ FPGA คือ ซอฟต์แวร์ที่ใช้ตั้งแต่เขียนโค้ดอธิบายฮาร์ดแวร์จนกระทั่วดาวน์โหลดลงใน อุปกรณ์ FPGA ซึ่งซอฟต์แวร์ที่ใช้ต้องเป็น ซอฟต์แวร์ที่ทำงานต่อเนื่องกันได้ สำหรับซอฟต์แวร์ที่ใช้ทำการ จำลองการทำงานของวงจรนั้น ต้องสามารถใช้งานต่อเนื่องกับซอฟต์แวร์ที่ใช้ทั้งระบบ เพราะโมเดลที่ได้จาก การทำขั้นตอนต่างๆ (ด้วยซอฟต์แวร์ ต่างๆ ต้องเอามาจำลองการทำงานได้ และในการจำลองการทำงานของ วงจรควรใช้ซอฟต์แวร์ตัวเดียวกันตลอดทั้งระบบ เพื่อจะได้เปรียบเทียบผลได้ง่าย ในอดีตซอฟต์แวร์ส่วนใหญ่ จะใช้งานอยู่บนคอมพิวเตอร์สมรรถนะสูงอย่างเวิร์คสเตชั่น (Workstation) ในปัจจุบันมีการพัฒนาซอฟต์แวร์ ที่ใช้บนพีซี (PC) มากขึ้นซึ่งสามารถลดค่าใช้จ่ายในด้านอุปกรณ์คอมพิวเตอร์

eSATA




รูปต้นแบบของโปรเจ็ก















Ch


Ru


De

DEVELOPER ZOne