แจกโค้ด C# วันสงกรานต์ 2008

ไปหน้าแรก | สารบัญ | Laploy.comระเบียนบทความ | บทความจากลาภลอย

แจกโค้ด C# วันสงกรานต์ 2551

วันนี้ฤกษ์งามยามดี วันสงกรานต์ ปี พ.ศ. 2551 อะไรจะดีสำหรับผมไปกว่าการเขียนรับใช้ท่านผู้อ่าน โดยแจกโค้ดแบบ Tricks & Tips ที่น่าสนใจและมีประโยชน์

 

เชื่อมสองเทเบิ้ลภายในหนึ่งดาต้าเซต

เราอาจมองดาต้าเซตเป็นเหมือนฐานข้อมูลน้อยๆ ก็ได้ ดังนั้นมันจึงควรสนับสนุนสิ่งสำคัญอย่างหนึ่งของฐานข้อมูล นั่นคือการเชื่อมความสัมพันธ์หรือ relationship ซึ่งก็คือการนำตารางหนึ่งมาผูกกับอีกตารางหนึ่งนั่นเอง โค้ดสำหรับเชื่อมสองเทเบิ้ลภายในหนึ่งดาต้าเซตในภาษา C# เป็นอย่างนี้

System.Data.DataColumn oParentColumn;
System.Data.DataColumn oChildColumn;
oParentColumn = oDS.Tables["Customers"].Columns["CustomerID"];
oChildColumn = oDS.Tables["Orders"].Columns["CustomerID"];

System.Data.DataRelation oRelation = 
[ic:ccc]new System.Data.DataRelation("CustomerOrders", 
[ic:ccc]oParentColumn, oChildColumn);
oDS.Relations.Add(oRelation);

 

สร้างวิวภายในดาต้าเทเบิ้ล

ใน ADO.NET มีดาต้าวิว (DataView) ทำหน้าที่กรองและเรียงข้อมูล วิธีสร้างวิวภายในดาต้าเทเบิ้ลในภาษา C# ทำอย่างนี้

System.Data.DataTable oTable = oDS.Tables["Customers"]; 
System.Data.DataView oView = new System.Data.DataView(oTable);

oView.RowFilter = "City='Berlin'";

 

โหลดไฟล์ XML เข้าสู่ดาต้าเซต

สิ่งที่ทำให้ดาต้าเซตทำงานได้คือ XML การโหลดไฟล์ XML เข้าสู่ดาต้าเซตจึงเป็นเรื่องสำคัญ โค้ดต่อไปนี้โหลดไฟล์ชื่อ customers1.xml เข้าสู่ดาต้าเซต

System.Data.DataSet oDS = new System.Data.DataSet();
oDS.ReadXml("http://localhost/sql2000/template/customers1.xml");

 

การสร้างเท็กซ์ไฟล์

เมื่อเขียนโปรแกรมบ่อยครั้งที่เราต้องการสร้างแฟ้มที่เก็บตัวอักษรล้วนๆ หรือ text file เพื่อบันทึกข้อมูลบางอย่างที่มีขนาดเล็กและทำงานได้รวดเร็ว โค้ดต่อไปนี้สร้างไฟล์ชื่อ MyTextFile.txt ไว้ที่รูทไดเรคทอรีของฮาร์ดดิสก์ (โฟลเดอร์ c:\) หัวใจของการทำงานคือการเรียกใช้ไทป์ StreamWriter ของ .Net

static void WriteToFile()
{
    StreamWriter SW;
    SW = File.CreateText("c:\\MyTextFile.txt");
    SW.WriteLine("God is greatest of them all");
    SW.WriteLine("This is second line");
    SW.Close();
    Console.WriteLine("File Created SucacessFully");
}
 

การอ่านเท็กซ์ไฟล์

เมื่อเขียนโปรแกรมบ่อยครั้งที่เราต้องการอ่านแฟ้มที่เก็บตัวอักษรล้วนๆ หรือ text file เพื่ออ่านข้อมูลบางอย่างที่มีขนาดเล็กและทำงานได้รวดเร็ว โค้ดต่อไปนี้อ่านไฟล์ชื่อ MyTextFile.txt ซึ่งอยู่ที่รูทไดเรคทอรีของฮาร์ดดิสก์ (โฟลเดอร์ c:\) หัวใจของการทำงานคือการเรียกใช้ไทป์ StreamReader ของ .Net

public class FileClass
{
    public static void Main()
    {
        ReadFromFile("c:\\MyTextFile.txt");
    }
    static void ReadFromFile(string filename)
    {
        StreamReader SR;
        string S;
        SR = File.OpenText(filename);
        S = SR.ReadLine();
        while (S != null)
        {
            Console.WriteLine(S);
            S = SR.ReadLine();
        }
        SR.Close();
    }
}

 
การแทรกข้อมูลเข้าสู่เท็กซ์ไฟล์

เราสามารถเขียนข้อมูลเพิ่มเข้าสู่เท็กซ์ไฟล์ (append) ได้โดยไม่ต้องทับข้อมูลเก่า คือของเก่าก็ยังอยู่ ของใหม่ก็ถูกเพิ่มต่อท้ายเข้าไป โค้ดเป็นดังนี้

public class FileClass
{
    public static void Main()
    {
        AppendToFile();
    }
    static void AppendToFile()
    {
        StreamWriter SW;
        SW = File.AppendText("C:\\MyTextFile.txt");
        SW.WriteLine("This Line Is Appended");
        SW.Close();
        Console.WriteLine("Text Appended Successfully");
    }
}

 

เซฟรูปภาพสามฟอร์แมต

โค้ดต่อไปนี้แสดงวิธีเซฟรูปภาพ โดยแสดงกรอบข้อความให้ผู้ใช้ป้อนพิมพ์ชื่อไฟล์และสามารถเลือก ฟอร์แมต ของไฟล์ได้สามแบบคือ bmp, gif และ jpg โปรดอ่านคำอธิบายที่แทรกไว้ในโค้ดครับ

private void button2_Click(object sender, System.EventArgs e)
{
   // แสดง SaveFileDialog เพื่อให้ผู้ใช้เซฟรูปภาพ
   // โดยกำหนดการทำงานไว้ที่ปุ่ม Button2
    SaveFileDialog saveFileDialog1 = new SaveFileDialog();
    saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif";
    saveFileDialog1.Title = "Save an Image File";
    saveFileDialog1.ShowDialog();

    // ตรวจสอบว่าชื่อไฟล์เป็นว่างเปล่าหรือไม่
    if (saveFileDialog1.FileName != "")
    {
        // เซฟภาพโดยใช้ FileStream ที่สร้างจากเมธอด OpenFile
        System.IO.FileStream fs = (System.IO.FileStream)saveFileDialog1.OpenFile();
      // เซฟไฟล์ให้ถูกฟอร์เมต โดยดูจากชนิดของไฟล์ที่ถูกเลือกใน dialog box
      // ค่าของ FilterIndex เริ่มจากหนึ่ง ไม่ใช่ศูนย์
        switch (saveFileDialog1.FilterIndex)
        {
            case 1:
                this.button2.Image.Save(fs,
                   System.Drawing.Imaging.ImageFormat.Jpeg);
                break;

            case 2:
                this.button2.Image.Save(fs,
                   System.Drawing.Imaging.ImageFormat.Bmp);
                break;

            case 3:
                this.button2.Image.Save(fs,
                   System.Drawing.Imaging.ImageFormat.Gif);
                break;
        }

        fs.Close();
    }
}

 

จับข้อมูลใส่ DataGridView

โค้ดต่อไปนี้อ่านแถวจากตารางในฐานข้อมูลโดยอาศัย SqlDataAdapter ดึงข้อมูลมาไว้ใน DataSet แล้วนำมาผูกไว้กับ DataGridView โค้ดนี้เป็นวินฟอร์ม ส่วนที่ใส่ข้อมูลเขียนเป็นเมธอดแยกไว้ชื่อ LoadData()

public partial class Form1 : Form
{
    private SqlDataAdapter da;
    private SqlConnection conn;
    BindingSource bsource = new BindingSource();
    DataSet ds = null;
    string sql;

    public Form1()
    {
        InitializeComponent();
    }

    private void btnLoad_Click(object sender, EventArgs e)
    {
        LoadData();
    }

    private void LoadData()
    {
        string connectionString = "Data Source=localhost;Initial Catalog=Northwind;" + "Integrated Security=SSPI;";
        conn = new SqlConnection(connectionString);
        sql = "SELECT OrderID, CustomerID, EmployeeID, OrderDate, Freight," + "ShipName, ShipCountry FROM Orders";

        da = new SqlDataAdapter(sql, conn);
        conn.Open();
        ds = new DataSet();
        SqlCommandBuilder commandBuilder = new SqlCommandBuilder(da);
        da.Fill(ds, "Orders");
        bsource.DataSource = ds.Tables["Orders"];
        dgv.DataSource = bsource;
    }
} 

 

อัพเดตฐานข้อมูลจาก DataGridView

คงดีแน่ๆ หากผู้ใช้แก้ไขข้อมูลบน DataGridView แล้วกดปุ่มๆ เดียวก็สามารถอัพเดตข้อมูลในฐานข้อมูลได้ โค้ดเป็นดังนี้

private void btnUpdate_Click(object sender, EventArgs e)
{
    DataTable dt = ds.Tables["Orders"];
    this.dgv.BindingContext[dt].EndCurrentEdit();
    this.da.Update(dt);
}

 

ยืนยันการลบ

โค้ดต่อไปนี้แสดงกรอบข้อความให้ผู้ใช้ยืนยันการลบข้อมูลจากฐานข้อมูล การผู้ใช้กดปุ่ม OK ข้อมูลแถวที่กำหนดจะถูกลบออกจากตาราง

private void dgv_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)

private void dgv_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
{
    if (!e.Row.IsNewRow)
    {
        DialogResult res = MessageBox.Show("Are you sure you want to delete this row?", "Delete confirmation",
                 MessageBoxButtons.YesNo, MessageBoxIcon.Question);
        if (res == DialogResult.No)
            e.Cancel = true;
    }
}

 

กำหนดความกว้างโดยอัตโนมัติให้ DataGridView

โค้ดต่อไปนี้จะปรับความกว้างของคอลัมน์ใน DataGridView ให้มีขนาดพอดีกับความยาวของข้อมูลโดยอัตโนมัติ

private void btnResize_Click(object sender, EventArgs e)
{
    dgv.AutoResizeColumns();
    dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

}

 

เลือกและทำแถบเน้นให้ DataGridView

โค้ดต่อไปนี้จะเลือกแถวที่สามของ DataGridView และทำแถบเน้น (Highlight) ด้วย

int rowToBeSelected = 3; // เลือกแถวที่สาม
if (dgv.Rows.Count >= rowToBeSelected)
{              
       //เนื่องจากค่าดรรชนีเริ่มจากศูนย์จึงต้องชดเชยโดยการลบหนึ่ง
        dgv.Rows[rowToBeSelected - 1].Selected = true; 
}

=================== จบ ===================

Advertisements

นิยายนักสืบ ตอน : วิชามาร

ไปหน้าแรก | สารบัญ | Laploy.comระเบียนบทความ | บทความจากลาภลอย

นิยายนักสืบ

ตอน : วิชามาร Social Engineering

ลาภลอย วานิชอังกูร laploy@gmail.com

 

“แฮกเกอร์มืดคือโจรใจชั่วที่ใช้แป้นพิมพ์ดังมีดปืน”

 

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

 

“แฮกเกอร์มืดที่ประสบความสำเร็จนอกจากจะต้องมีความรู้ด้านเทคนิคเป็นอย่างดีแล้ว ยังต้องเชี่ยวชาญวิชา Social Engineering ด้วย”

“มีแฮกเกอร์มืดแล้วมีแฮกเกอร์สว่างไหมครับ” คุณสุกรีถามอย่างยั่วล้อ เขาเป็นชายวัยกลางคน อ้วนลงพุงศีรษะล้าน เป็นพนักงานระดับบริหารที่มีตำแหน่งสูงสุดที่เข้าร่วมประชุม คือเป็นผู้ช่วยกรรมการผู้จัดการ

“ไม่มี มีแต่แฮกเกอร์มืดกับแฮกเกอร์เฉยๆ” ผมเฉลย “แฮกเกอร์ไม่ทำสิ่งผิดกฎหมาย เพียงแต่เป็นผู้ที่หมกมุ่นกับวิชาการมากกว่าคนปรกตินิดหน่อย ส่วนแฮกเกอร์มืดคืออาชญากรพร้อมที่จะประกอบอกุศลกรรมทุกอย่างเพื่อสนองตัณหาของตน”

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

“เป็นอย่างนั้นหรือครับ?” คุณไชยมง หัวหน้าแผนกทรัพยากรบุคคลถามอย่างประหลาดใจ

“ไม่เลย” ผมตอบสวนทันที “ในทางตรงกันข้าม แฮกเกอร์มืดส่วนมากเป็นพวกถนัดเรื่องพบปะผู้คน เจรจาคล่องแคล่ว มีทักษะในการพูดจาหลอกล่อจูงใจ มีความสามารถในการปั่นหัวคน หรือฉวยโอกาสจากสภาวะการต่างๆ เพื่อให้ได้ในสิ่งที่ตนต้องการ หรือที่เรียกว่า Social Engineering พูดง่ายๆ คือพวกมันไม่ต่างจากสิบแปดมงกุฎนัก”

 

“พวกแฮกเกอร์มืดหน้าตาเป็นยังไงครับ” คุณมโนมัย หัวหน้าแผนกนักลงทุนสัมพันธ์ถาม

“แฮกเกอร์มืดที่ประสบความสำเร็จมักหน้าตาดี บุคลิกดีน่าเชื่อถือ พูดจานุ่มนวล มีทั้งผู้ชายและผู้หญิง”

“จุดประสงค์ในการหลอกล่อคืออะไรครับ” คุณศรีข่าง หัวหน้าแผนกพัฒนาธุรกิจยกมือถาม

“จุดมุ่งหมายของพวกมันมีเพียงอย่างเดียว เหมือนกันหมดทุกคน คือต้องการชื่อและรหัสผ่าน” ผมกดปุ่มรีโหมดของเครื่องฉายภาพ “ภาพนี้คือระบบเครือข่ายของบริษัทชัยชนะ จะเห็นว่าเป็นระบบที่มีความปลอดภัยสูง เพราะได้รับการออกแบบมาอย่างดี ถูกต้องตามหลักวิชาการ เช่น server ต่างๆ ถูกกันไว้ในเครือข่ายย่อยที่เรียกว่า DMZ หรือเขตกันชน (Demilitarized zone) มีการติดตั้ง firewall ทั้งแบบฮาร์ดแวร์และซอฟท์แวร์ในตำแหน่งต่างๆ เพื่อป้องกันการบุกรุก นโยบายด้านรหัสผ่านเป็นยังไงครับ” ประโยคหลังผมหันไปถามคุณมารศรี หัวหน้าแผนกสารสนเทศ

 

ระบบเครือข่ายของบริษัทชัยชนะเป็นระบบที่มีความปลอดภัยสูง ได้รับการออกแบบมาอย่างถูกต้อง server ต่างๆ ถูกกันไว้ในเครือข่ายย่อยที่เรียกว่า DMZ หรือเขตกันชน (Demilitarized zone) และมีการติดตั้ง firewall ในตำแหน่งต่างๆ

 

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

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

“ไม่มีทางที่แฮกเกอร์จะหารหัสผ่านได้หรอก” คุณลีลาวดี system admin พูดอย่างปั้นปึ่ง พนักงานแผนกสารสนเทศที่เข้าประชุมต่างพยักหน้าอย่างเห็นด้วย

“ตรงกันข้าม อันที่จริงแล้วง่ายดายอย่างยิ่ง” ผมกล่าวสวน

“คุณมีอะไรพิสูจน์” คุณลีลาวดีถามเสียงสูงด้วยความไม่พอใจ

“อันที่จริงผมได้รับการว่าจ้างจากคุณทวีป หัวหน้าแผนกวิจัยและพัฒนา ให้ทดลองเจาะระบบ หรือทำ penetration test ซึ่งผมได้ลงมือทำแล้ว และประสบผลสำเร็จอย่างง่ายดาย โดยใช้อุบาย social engineering อย่างพื้นๆ”

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

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

“อาจารย์ช่วยเล่าหน่อยได้ไหมว่าใช้เทคนิคอะไรบ้าง” คุณมารศรีถาม

“ได้อย่างแน่นอน อันที่จริงการประชุมครั้งนี้มีขึ้นเพื่อบอกเล่าเทคนิคต่างๆ ที่พวกแฮกเกอร์มืดชอบใช้ และมักใช้ได้ผลเสมอ พวกเราจะได้คอยระวังกัน” ผมกดปุ่มรีโหมดแล้วลุกขึ้นเดินไปยังจอภาพ

 

“นี่คือ social engineering มาตรฐานที่แฮกเกอร์มืดนิยมใช้เพื่อให้ได้มาซึ่งรหัสผ่าน” ผมชี้ไปบนจอซึ่งมีข้อความดังนี้

  • หลอกถามตามชั่ว
  • แกล้งมั่วรหัสหาย
  • แปลงกายเป็น admin
  • พลิกลิ้นเป็น ISP
  • อวดดีสอดแนม
  • หาแถมจากขยะ
  • จอมสวะตกทอง

“คำอธิบายโดยย่อของแต่ละวิธีเป็นดังนี้…

 

หลอกถามตามชั่ว

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

แกล้งมั่วรหัสหาย

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

แปลงกายเป็น admin

วิธีนี้แฮกเกอร์มืดจะโทรหาพนักงานอื่นๆ ที่ไม่ใช่ admin แจ้งว่าเครื่องของผู้ใช้คนนั้นมีปัญหาบางอย่าง ให้ sign-on และ sign-off สุดท้ายจะลงเอยด้วยการถามรหัสผ่าน วิธีนี้มีข้อจำกัดเหมือนวิธีก่อนหน้าคือจะใช้ได้ผลกับหน่วยงานขนาดใหญ่เท่านั้น

พลิกลิ้นเป็น ISP

วิธีนี้แฮกเกอร์มืดจะโทรหา admin อ้างตนว่าเป็นเจ้าหน้าที่ support ของบริษัทผู้ให้บริการอินเตอร์เน็ต ต้องการซ่อมบำรุงการเชื่อมต่อ ซึ่งจำเป็นต้องขอตรวจสอบรายละเอียดการกำหนดค่าระบบ (system configuration) รวมทั้งชื่อและรหัสผ่าน บางครั้งแฮกเกอร์มืดอาจเป็นสตรี หรือใช้สตรีที่ผ่านการฝึกมาเป็นอย่างดีเป็นผู้พูด จึงลวงได้แม้ admin ที่มีประสบการณ์

อวดดีสอดแนม

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

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

วิธีนี้แม้จะเสี่ยงต่อการถูกจับ แต่ในหน่วยงานที่ใหญ่มากๆ ผู้คนสับสนวุ่นวาย พนักงานมักยุ่งอยู่กับธุระของตนเอง จนไม่สังเกตความผิดปรกติใดๆ

หาแถมจากขยะ

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

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

หากเก็บรวบรวมและคัดแยกขยะหลายวันแล้วยังไม่พบรหัสผ่าน แฮกเกอร์มืดก็มีเทคนิคมากมายให้พนักงานนำรหัสผ่านใส่ในถังขยะ ยกตัวอย่างเช่น DSI เคยเจอคดีหนึ่งซึ่งแฮกเกอร์มืดโทรไปบอก admin ว่ามีพนักงานจำนวนมากเขียนชื่อและรหัสผ่านใส่แผ่น Post-it ติดไว้ในที่แจ้ง admin ถามว่าใครโทรมา แฮกเกอร์มืดตอบว่าไม่ประสงค์ออกนาม เพราะไม่อยากขัดใจกับเพื่อนพนักงาน admin จึงตรวจสอบดูและพบว่ามีการกระทำเช่นนั้นจริง admin จึงออกหนังสือเวียนแจ้งว่าการทำเช่นนั้นผิดระเบียบของบริษัท เมื่อพนักงานเห็นหนังสือเวียนก็ปลดแผ่น Post-it ออกจากข้างฝา ขย้ำเป็นก้อน แล้วโยนทิ้งลงถังขยะ

จอมสวะตกทอง

เทคนิคการตกทองคล้ายเทคนิคที่พวกสิบแปดมงกุฎใช้ โดยอาศัยความโลภหรือความอยากรู้อยากเห็นของมนุษย์เป็นเครื่องมือ แฮกเกอร์มืดจะส่งอีเมลไปยังเป้าหมาย แจ้งให้ทราบว่าเป็นผู้โชคดีที่ชนะรางวัล หรือปลอมเป็นอีเมลที่ส่งจากผู้บริหารไปยังฝ่ายการเงิน แต่ด้วยเหตุผลใดสักอย่าง อีเมลนั้นกลับหลุดมายังกล่องจดหมายของเป้าหมาย อีเมล ดังกล่าวจะมีไฟล์ Microsoft Excel แนบมาด้วย โดยจะมีชื่อไฟล์ว่า “โครงสร้างเงินเดือนพนักงาน 2550” หรือ “รายชื่อผู้จะได้เลื่อนตำแหน่งในไตรมาศที่สอง” หรือชื่ออื่นๆ ที่ทำให้ผู้ได้รับอยากปิดดู หากผู้รับกดที่ลิงค์ หรือเปิดไฟล์เวิร์คชีต จะมีผลให้คอมพิวเตอร์เครื่องนั้นติดโปรแกรมม้าไม้โทรจัน โปรแกรมนี้มีหน้าที่ช่วยให้แฮกเกอร์มืดเฝ้าดูและรวบรวมข้อมูลที่วิ่งอยู่ในระบบเครือข่ายได้

ในกรณีที่การใช้อีเมลเป็นเหยื่อล่อไม่อาจทำได้ หรือทำแล้วไม่ได้ผล แฮกเกอร์มืดจะใช้วิธีนำแผ่นดิสก์เก็ต แผ่นซีดี หรือแม้กระทั่ง thumb drive (แฟลชเมโมรีที่มีหัว USB) ไปวางไว้ในที่สาธารณะที่เป้าหมายมักเดินผ่าน เช่นบนพื้นใกล้รถยนต์ของเป้าหมาย ตามทางเดินในอาคารเป็นต้น”

 

“แล้วอาจารย์ใช้วิธีไหน” คุณมิติ หัวหน้าแผนกบัญชีถาม

“ผมใช้วิธีที่สามคือปลอมเป็น admin” ผมเฉลย “ผมโทรหาพนักงานคนหนึ่งในแผนกหนึ่ง ขอปกปิดชื่อไว้ก่อน ลองมาฟังเสียงที่บันทึกไว้กัน” ผมกดปุ่มเครื่องเล่น MP3 ซึ่งมีสายต่อกับเครื่องขยายเสียงในห้องประชุม ช่วยให้เสียงที่บันทึกไว้ดังเพียงพอที่ผู้เข้าประชุมทั้งห้องจะได้ยินอย่างชัดเจน

“สวัสดีครับผมโทรจากแผนกสารสนเทศ เราได้รับแจ้งว่าเครื่องของคุณทำงานช้าผิดปรกติใช่ไหม”

“คุณเป็นใคร”

“ผมชื่อยัชโญปวีต เจ้านายผมคือคุณมารศรี หัวหน้าแผนกสารสนเทศสั่งให้โทรกลับมาเบอร์นี้ เพื่อตรวจสอบตามที่ได้รับแจ้ง”

“ดิฉันไม่ได้โทรแจ้ง อาจเป็นคุณประดิษฐ์เพราะเบอร์ภายในคล้ายกัน มีคนโอนมาผิดเป็นประจำ”

“แล้วคอมพิวเตอร์ของคุณปรกติดีไหม มีช้าไหม”

“บางที่ก็ช้าเหมือนกัน”

 

“น่ากลัวว่าแผนกคุณทั้งแผนกจะติดไวรัสหรือตัวอัปมงคลอะไรสักอย่าง ผมจะตรวจสอบให้ คุณจะสละเวลาช่วยสักสองนาทีได้ไหม”

“ได้ แต่ดิฉันเพิ่งเข้าใหม่ ไม่คุ้นกับระบบที่นี่”

“ไม่เป็นไร เพียงแต่ทำตามขั้นตอนง่ายๆ ที่ผมกำลังจะบอกก็พอ พร้อมไหม”

“ค่ะ”

“ถ้างั้นคุณช่วย sing-off หน่อยผมจะลอง sing-on ด้วย account ของคุณ เพื่อจะได้ตรวจสอบได้ว่ามีอะไรผิดปรกติไหม”

“ต้องทำยังไงคะ”

“ป้อนชื่อและรหัสในหน้าพิเศษ”

“หน้าที่ว่าอยู่ตรงไหน”

“เอางี้นะครับ ผมจะป้อนที่เครื่องของผมก็ได้ ชื่ออะไรครับ”

“รติลักษ์ค่ะ”

“แล้วรหัสผ่านละครับ”

“panda500ค่ะ”

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

 

 

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

“พอได้รหัสแล้วทำอะไรได้ค่ะ? มีแต่คอมพิวเตอร์ในสำนักงานนี่เท่านั้นที่จะ sign-on เข้าสู่ระบบได้ หรือว่าอาจารย์แอบเข้ามาใช้เครื่องในนี้? รปภ. ไม่น่าจะยอมให้เข้ามานะคะ” คุณลีลาวดีตั้งคำถาม

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

“แต่เราปรับตัวส่งสัญญาณให้มีรัศมีครอบคลุมเพียงพื้นที่ในสำนักงานเท่านั้นนี่คะ โรงแรมนั่นน่าจะห่างออกไปไม่ต่ำกว่า 200 เมตร” คุณมารศรีถามอย่างประหลาดใจ

“ถูกต้องครับ ผมจึงต้องใช้เสาอากาศพิเศษเพื่อขยายสัญญาณให้แรงเพียงพอที่จะเชื่อมต่อได้อย่างมั่นคง”

“มีของแบบนี้ขายด้วยหรือคะ”

“มีสิครับ ถ้าไม่อยากซื้อจะประดิษฐ์ขึ้นเองจากหลอดใส่มันฝรั่งทอดก็ยังได้”

 


เสาอากาศขยายสัญญาณระบบเครือข่ายไร้สายย่านความถี่ 2.4GHz

“ถ้าแค่ sign-on เข้ามาใน account ของคุณรติลักษ์ก็ไม่น่าจะทำอะไรได้มาก เพราะมีสิทธิจำกัด” คุณมารศรีตั้งข้อสังเกต

“ผิดถนัดเลยครับ” ผมแก้ไข “เพราะเมื่อเข้าในระบบได้แล้วผมใช้โปรแกรม sniff เพื่อเฝ้าดูและรวบรวมข้อมูลในระบบ จากนั้นจึงนำข้อมูลมาวิเคราะห์ ใช้เวลาไม่นานผมก็ได้รหัสของ admin หรือ super user ทำให้ผมสามารถครอบครองระบบได้โดยสมบูรณ์ ผมอาจลบข้อมูลทั้งหมด ปิดระบบ หรือทำธุรกรรมที่อาจสร้างผลกำไรให้แก่ตัวผมเองได้เป็นล้านๆ ก็ได้ตามใจชอบ”

“ไม่จริง ชัยชนะไม่ใช่สถาบันการเงิน คุณจะยักยอกเงินอะไรได้” คุณมิติ หัวหน้าแผนกบัญชีแย้ง

“ในทางตรงกันข้าม ด้วยข้อมูลหมายเลขบัตรเครดิตที่ผมรวบรวมได้จากถังขยะ บวกกับข้อมูลธุรกรรมการเงินที่รวบรวมได้จากการ sniff ผมสามารถใช้ข้อมูลเหล่านี้เพื่อยักยอกเงินในลักษณะต่างๆ ได้ไม่ต่ำกว่าห้าสิบวิธี”

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

 

“ปัญหาของบริษัทชัยชนะก็เหมือนบริษัทขนาดยักษ์อื่นๆ คือไม่ได้อยู่ที่เครื่อง แต่อยู่ที่คน ฮาร์ดแวร์และซอฟท์แวร์ด้านรักษาความปลอดภัยเครือข่ายได้รับการติดตั้งไว้รัดกุมดีอยู่แล้ว สิ่งที่ยังเป็นจุดอ่อนคือบุคลากร การออกกฎระเบียบต่างๆ เพียงอย่างเดียวไม่เพียงพอ วิธีที่ดีที่สุดเพื่อรับมือกับแฮกเกอร์มืดคือต้องจัดอบรมพนักงาน ทุกฝ่าย ทุกแผนก ทุกระดับ ให้เข้าใจเทคนิค social engineering ครับ”

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

 

จบเรื่องนิยายนักสืบตอน 2

ชนิดข้อมูลในภาษา C# (ตอนจบ)

ไปหน้าแรก | สารบัญ | Laploy.comระเบียนบทความ | บทความจากลาภลอย

ชนิดข้อมูลในภาษา C# (ตอนจบ)

ผู้เขียน : ลาภลอย วานิชอังกูร (laploy.com) 

อ่านเรื่องซับซ้อนก้าวหน้ากันมามากแล้ว วันนี้มาดูเรื่องพื้นฐานใกล้ๆ ตัวที่ต้องพบเจอกันทุกวันบ้าง ในบทความชุดนี้จะนำเสนอเรื่องของหน่วยความจำ การอ้างแอดเดรส และชนิดข้อมูลในภาษา C# กันหน่อย เพราะเป็นเรื่องสำคัญในการเขียนโปรแกรมจัดการข้อมูลและโครงสร้างข้อมูลทุกแบบ บทความนี้มีสามตอน นี้คือตอนที่สามซึ่งเป็นตอนจบ

 

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

 

การอ้างหน่วยความจำ
การอ้างหน่วยความจำหรือ memory addressing หมายถึงการระบุตำแหน่งของหน่วยความจำ (แรมในคอมพิวเตอร์) เพื่อบอกให้ตัวแปลภาษารู้ว่าเราจะเอาอะไรไปเก็บที่ไหน เนื่องจากภาษา C# มีลักษณะ managed code ทำให้ปรกติเราจะไม่เขียนอ่านหน่วยความจำโดยตรง แต่จะให้ CLR และระบบปฏิบัติการจัดการให้โดยอัตโนมัติ ที่ผู้เขียนหยิบยกเรื่องนี้มาพูด เพราะการการรู้ว่าการอ้างหน่วยความจำเป็นอย่างไรก็เป็นสิ่งที่น่าสนใจและจะช่วยให้เห็นภาพรวมของโครงสร้างข้อมูลได้ดี

ลองจินตนาการว่าหน่วยความจำคือแถวของกล่องที่แบ่งเป็นกลุ่มๆ ละแปดใบ วางเรียงกันไม่มีที่สิ้นสุด กล่องแต่ละใบเก็บได้เฉพาะเลขศูนย์หรือหนึ่ง มีหมายเลขที่ไม่ซ้ำกันกำกับกล่องใบแรกของแต่ละกลุ่มไว้ (กลุ่มหนึ่งมีแปดใบคือที่เก็บข้อมูลแปดบิตหรือหนึ่งไบต์) ตัวเลขเหล่านี้คือตัวเลขสำหรับอ้างตำแหน่งของหน่วยความจำ (memory address)

 


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

 

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

 

ตำแหน่งจริงของหน่วยความจำ
ผู้เขียนระบุตัวเลขที่ใช้อ้างตำแหน่งหน่วยความจำที่กล่าวถึงในบทนี้โดยใช้ตัวเลขฐานสิบมาตลอด เช่น กล่องใบที่ 423 แต่ในความเป็นจริงแล้ว การอ้างตำแหน่งหน่วยความจำคอมพิวเตอร์เราจะใช้เลขฐานสิบหก (Hexadecimal) เป็นตัวเลขที่มีขนาด 32 หรือ 64 บิต ขึ้นอยู่กับระบบปฏิบัติการที่ใช้ (เช่นใน Windows XP จะเป็น 32 บิต แต่ใน Windows XP64 จะเป็น 64 บิต)

เลขฐานสิบหกก็คล้ายคลึงกับเลขฐานสองและฐานสิบ ในแง่ที่ว่ามันถูกใช้เพื่อการนับ และการกระทำทางคณิตศาสตร์ได้ ตัวเลขที่ใช้ในระบบเลขฐานสิบหกมีจำนวนสิบหกตัว คือจาก 0 ถึง 9 และ A ถึง F ซึ่งใช้แทนที่ 10 ถึง 15 ยกตัวอย่างเช่น ถ้าตำแหน่งของหน่วยความในเลขฐานสิบเป็น 258,425,506 จะเขียนเป็นเลขฐานสิบหกได้ว่า 0x0F6742A2

 

 

ตารางเปรียบเทียบระหว่างเลขฐานสิบ สิบหก และเลขฐานสอง

 

สาเหตุที่เราใช้เลขฐานสิบหกเพราะต้องการเขียนเลขฐานสองแบบย่อ เพื่อให้เราเองอ่านและเขียนได้ง่ายขึ้น และที่สำคัญคือตัวแปลภาษา C# ไม่สนับสนุนการป้อนเลขฐานสอง เมื่อต้องการทำงานกับเลขฐานสองหรือทำงานในระดับบิต เราจึงจำเป็นต้องใช้เลขฐานสิบหกแทน ยกตัวอย่างเช่นเราต้องการอ้างถึงตำแหน่งหน่วยความจำที่ 0000 1000 0001 0010 เขียนเป็นเลขฐานสองแบบนี้ยาวเกินไปและเขียนผิดได้ง่าย เราจึงเขียนเป็นเลขฐานสิบหกแทนได้ว่า 0x0812 ซึ่งมีความหมายดังนี้

    • 0x คือหมายเหตุในภาษา C# บอกให้รู้ว่าจำนวนต่อไปนี้เป็นเลขฐานสิบหก
    • 0000 ในเลขฐานสองเท่ากับ 0 ในเลขฐานสิบหก
    • 1000 ในเลขฐานสองเท่ากับ 8 ในเลขฐานสิบหก
    • 0001 ในเลขฐานสองเท่ากับ 1 ในเลขฐานสิบหก
    • 0010 ในเลขฐานสองเท่ากับ 2 ในเลขฐานสิบหก

 

ชนิดข้อมูลกับการอ้างหน่วยความจำ
ในส่วนต้นๆ ของบทนี้คุณได้เรียนรู้ว่า เราสามารถจองหน่วยความจำได้โดยการระบุชนิดข้อมูล ชนิดข้อมูลบางประเภทจะจองเนื้อที่ในหน่วยความจำมากกว่าหนึ่งไบต์ ยกตัวอย่างเช่นข้อมูลชนิด short ในภาษา C# ที่จะจองเนื้อที่สองไบต์ในหน่วยความจำ (คือ 16 บิต)

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

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

 

คำถามท้ายบท
โปรดตอบคำถามต่อไปนี้ ถ้าข้อไหนตอบไม่ได้ให้อ่านทบทวนเนื้อหาในบทความชุดนี้อีกที ตอบได้ครบทุกข้อเมื่อไหร่จึงจะถึอว่าผ่าน
1.    อะไรคือชนิดข้อมูล
2.    ชนิดข้อมูลแบบใดเหมาะสำหรับเก็บจำนวนเต็ม
3.    จงอธิบายวิธีอ้างตำแหน่งข้อมูล เมื่ออ้างถึงชนิดข้อมูลที่โตกว่าหนึ่งไบต์
4.    ข้อมูลชนิด float ต่างจาก double อย่างไร
5.    ความเที่ยงตรง (ความละเอียดแม่นยำ) คืออะไร
6.    จงอธิบายวิธีการการจัดเรียงหน่วยความจำในคอมพิวเตอร์
7.    อะไรคือระบบเลขฐาน
8.    เพราะเหตุใดคอมพิวเตอร์จึงใช้ระบบเลขฐานสอง
9.    เพราะเหตุใดเมื่อเราจองเนื้อที่ในหน่วยความจำ เราจึงไม่จำเป็นต้องกำหนดจำนวนไบต์
10.    จงอธิบายว่าตัวเลขแบบแสดงเครื่องหมาย และแบบไม่แสดงเครื่องหมาย ถูกเก็บในหน่วยความจำแตกต่างกันอย่างไร

 

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

Rich Internet Application (แบบไทยๆ)

ไปหน้าแรก | สารบัญ | Laploy.comระเบียนบทความ | บทความจากลาภลอย

 

Rich Internet Application (แบบไทยๆ)

ที่ผมกำลังพูดถึงอยู่นี้คือการพัฒนาหน้าเว็บที่ไม่ธรรมดา มันคือการสร้างโปรแกรมที่ทำงานในเว็บเบราวเซอร์ ที่ให้ความรู้สึกใกล้เคียงกับโปรแกรมในเดกส์ทอป ที่ฝรั่งเรียกว่า RIA เป็นโปรแกรมประยุกต์ใช้งานในอินเตอร์เน็ต ที่มีส่วนติดต่อกับผู้ใช้แบบหรูหรา อลังการงานสร้าง (Rich Internet Application)

 

รายนามแพทย์ศิริราช กดที่นี่เพื่อทดลองใช้งานแบบออนไลน์

 

ถ้าเป็นโปรแกรมที่เลียนแบบการทำงานของระบบปฏิบัติการก็เรียกว่า Web OS ทั้งๆ ที่ความจริงมันเพียงแต่เลียนแบบส่วน shell หรือส่วน GUI (Graphical User Interface ส่วนปฏิสัมพันธ์กับผู้ใช้แบบภาพ) เท่านั้น ในเมืองฝรั่งมีการทำกันเป็นล่ำเป็นสัน แต่ในเมืองไทยยังไม่ค่อยเห็นมีใครทำกัน

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

ข้อมูลจำเพาะ

  • ชื่องาน : รายนามแพทย์ศิริราช
  • ขอบเขตของงาน : แสดงรายนาม (และพระนาม) ของแพทย์ นักเรียนแพทย์ พยาบาล ครู ฯลฯ ทั้งหมดตั้งแต่ก่อตั้งจนถึงปัจจุบัน ค้นหาข้อมูลได้ ทำงานได้ทั้งจากในแผ่นซีดี (ไม่ต้องติดตั้ง) และเว็บด้วย
  • เทคโนโลยีที่ใช้ : Flex 2.0 ActionScript 3.0 และ Flash 9
  • Database : flat text file
  • ผู้พัฒนา : ลาภลอย วานิชอังกูร (laploy.com)
  • ทดลองใช้งาน : http://www.laploy.com/demo

โปรดทราบว่าเทคโนโลยีนี้ไม่ได้เหมาะกับทุกงาน (ยกตัวอย่างเช่นบางงานใช้ C#+ASP.NET+SQL+AJAX อาจจะเวิร์คกว่า) สิ่งสำคัญคือการเลือกเทคโนโลยีและเครื่องมือให้เหมาะสมกับงาน นักพัฒนาซอฟต์แวร์จึงต้องเรียนรู้เทคโนโลยีไว้หลายๆ ชนิด เหนื่อยนะครับ แต่ช่วยไม่ได้ ก็อยากเกิดมาเป็นกรรมกรซอฟต์แวร์ทำไมแหละ

ชนิดข้อมูลในภาษา C# (ตอน 2)

ไปหน้าแรก | สารบัญ | Laploy.comระเบียนบทความ | บทความจากลาภลอย

ชนิดข้อมูลในภาษา C# (ตอน 2)

ผู้เขียน : ลาภลอย วานิชอังกูร (laploy.com) 

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

 

กลุ่มชนิดข้อมูล

เรากำหนดขนาดของหน่วยความจำที่ต้องการจองได้โดยเลือกกลุ่มชนิดของข้อมูล จากนั้นก็ต้องเลือกชนิดของข้อมูลที่อยู่ในกลุ่มนั้น ว่าชนิดใดจึงเหมาะกับข้อมูลที่จะจัดเก็บ

กลุ่มชนิดข้อมูลมีสี่กลุ่มดังนี้

  • จำนวนเต็ม (integer) : ใช้เก็บเลขจำนวนเต็ม และเลขแบบมีเครื่องหมาย เหมาะสำหรับเก็บจำนวนที่ไม่สนใจเศษ เช่นจำนวนเงินในกระเป๋าสตางค์ของคุณ
  • เลขทศนิยม (Floating-point) : ใช้เก็บเลขจำนวนจริง (จำนวนเศษส่วน) เหมาะสำหรับเก็บเลขในบัญชีธนาคารที่มีเศษสตางค์ (คือเศษส่วนของบาท) และสามารถนำมาบวกกันให้เป็นจำนวนบาทได้อย่างรวดเร็ว
  • อักขระ (Character) : ใช้เก็บตัวอักษร เหมาะสำหรับเก็บชื่อของสิ่งต่างๆ
  • บูลีน (Boolean) : ใช้เก็บค่าจริง หรือเท็จ (true/false) เหมาะสำหรับเก็บคำตอบของคำถามว่าใช่หรือไม่ใช่ จริงหรือเท็จ

 

จำนวนเต็ม

กลุ่มข้อมูลชนิดนี้ใช้จองพื้นที่ในหน่วยความจำเพื่อเก็บเลขจำนวนเต็ม มีทั้งหมดเก้าแบบเช่น byte, short, int, long และอื่นๆ ดังแสดงในตารางนี้

 

 

ข้อมูลชนิดจำนวนเต็มสามารถใช้เก็บเลขที่แสดงเครื่องหมาย คือเลขบวกและเลขลบ เช่น +10 และ –5 ถ้าไม่ระบุเครื่องหมายตามปรกติแล้วจะถือว่าเป็นเลขบวก ดังนั้นเครื่องหมายบวกจึงสามารถละไว้ในฐานที่เข้าใจ เลขจำนวนเต็มเมื่อเก็บแบบแสดงเครื่องหมายจะเรียกว่า signed number เมื่อเก็บแบบไม่สนแสดงเครื่องหมายจะเรียกว่า unsigned number

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

ยกตัวอย่างเช่นข้อมูลแบบ byte ใช้เนื้อที่ในหน่วยความจำแปดบิต หากเก็บเลขจำนวนเต็มแบบไม่แสดงเครื่องหมาย จะก็จะเก็บเลขได้จาก 0 ถึง 255 หากเป็นเลขจำนวนเต็มแบบแสดงเครื่องหมาย หรือ sbyte ก็จะเก็บเลขได้น้อยกว่าครึ่งหนึ่ง คือเก็บจำนวนได้จาก –128 ถึง +127 (ดูในตาราง) ภาษา C# สนับสนุนเลขจำนวนเต็มทั้งแบบแสดงและไม่แสดงเครื่องหมาย เลขที่ไม่แสดงเครื่องหมายจะถูกเหมาว่าเป็นบวก เครื่องหมายลบจะไม่ถูกเก็บไว้ในหน่วยความจำ และจำนวนศูนย์จะถูกถือว่าเป็นจำนวนลบ

 

ข้อมูลชนิด byte

ชนิดข้อมูลแบบ byte เป็นชนิดที่มีขนาดเล็กที่สุดในกลุ่มข้อมูลจำนวนเต็ม การประกาศจองหน่วยความจำชนิดนี้ทำได้โดยใช้คีย์เวิร์ด byte ปรกติแล้วโปรแกรมเมอร์นิยมใช้ byte ในการรับ-ส่งข้อมูล หรือแฟ้มข้อมูลภายในเครือข่าย นอกจากนั้นยังนิยมใช้เมื่อต้องการทำงานกับข้อมูลในระดับบิต (binary operation) เพราะการกระทำลักษณะนี้ไม่สามารถทำโดยใช้แบบข้อมูลชนิดอื่นๆ ได้

 

byte x = 10, y = 20;
 

โค้ดที่เห็นข้างบนทำหน้าที่ประกาศตัวแปรสองตัวชื่อ x และ y โดยมีชนิดข้อมูลเป็น byte ทั้งคู่

 

** จงใช้ชนิดข้อมูลแบบ byte เมื่อใดก็ตามที่คุณต้องการรับ-ส่งข้อมูลในเครือข่าย หรือเมื่อต้องการทำงานกับข้อมูลในระดับบิต **

 

อักขระ (Characters)

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

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

 

** จงใช้ชนิดข้อมูลแบบ char เมื่อใดก็ตามที่คุณต้องการเก็บตัวอักษรในหน่วยความจำ  **

 

ข้อมูลชนิด short

ข้อมูลชนิดนี้เหมาะสำหรับเขียนโปรแกรมไว้ทำงานในคอมพิวเตอร์แบบ 16 บิต อย่างไรก็ดีปัจจุบันนี้ไม่ค่อยมีคอมพิวเตอร์ขนาด 16 บิตแล้ว เพราะมันถูกแทนที่ด้วยคอมพิวเตอร์ขนาด 32 บิต และ 64 บิต ดังนั้นชนิดข้อมูลแบบ short จำไม่เป็นที่นิยมใช้อีกต่อไป

 

** จงใช้ชนิดข้อมูลแบบ short เมื่อคุณต้องการเขียนโปรแกรมสำหรับคอมพิวเตอร์รุ่นเก่ามากๆ  **

 

ข้อมูลชนิด int

ชนิดข้อมูลแบบ int เป็นชนิดข้อมูลที่นิยมใช้มากที่สุดในกลุ่มชนิดข้อมูลจำนวนเต็มด้วยเหตุผลหลายประการ

 

** จงใช้ชนิดข้อมูลแบบ int เมื่อ

  • ใช้เป็นตัวแปรสำหรับควบคุมการทำงานซ้ำ (loop)
  • ใช้เป็นดรรชนีของอาร์เรย์ (array index)
  • ใช้ในการกระทำทางคณิตศาสตร์ของเลขจำนวนเต็ม **

 

ข้อมูลชนิด long

ชนิดข้อมูลแบบ long เหมาะสำหรับใช้เมื่อต้องการทำงานกับตัวเลขที่มีขนาดใหญ่เกินกว่าจะใช้ชนิดข้อมูลแบบ int

 

** จงใช้ชนิดข้อมูลแบบ long เมื่อต้องการเก็บตัวเลขจำนวนหลายๆ หลัก เช่นมูลค่าทรัพย์สินของบิล เกสต์ ของนายกฯ ทักษิณ หรือของตัวคุณเอง **

 

จำนวนทศนิยม (Floating-Point)

ชนิดข้อมูลในนี้ใช้เพื่อเก็บเลขจำนวนจริง (real number) จำนวนจริงคือจำนวนที่มีทศนิยม ชนิดข้อมูลนี้มีสองแบบคือ float และ doubleโดย float ใช้สำหรับเก็บจำนวนที่มีความเที่ยงตรงตามปรกติ ส่วน double ใช้สำหรับจำนวนที่ต้องการความเที่ยงตรงเป็นสองเท่า ความเที่ยงตรง (precision) ในที่นี้หมายถึงจำนวนหลักของตัวเลขหลังจุดทศนิยม ถ้ายิ่งมีหลายหลัก ตัวเลขก็จะยิ่งถูกต้องเที่ยงตรงมากขึ้นตามที่เห็นในตารางข้างล่าง

 

 

สาเหตุที่ใช้คำว่า floating-point (จุดลอย) เกิดจากวิธีที่มันเก็บตัวเลขทศนิยมในหน่วยความจำ ซึ่งใช้วิธีเก็บตัวเลขทั้งหมด (จำนวนทั้งหน้าและหลังจุดทศนิยม) เป็นจำนวนเต็ม แล้วตำแหน่งของจุดทศนิยมไว้ต่างหาก วิธีเก็บเช่นนี้ทำให้ดูเหมือนว่าจุดทศนิยมลอยตัว (float) อยู่เหนือตัวเลข ยกตัวอย่างเช่นเลข 43.23 จะถูกเก็บเป็น 4323 (เก็บเป็นจำนวนเต็มไม่มีทศนิยม) การกำหนดจุดทศนิยมทำได้โดยการอ้างถึงหลักของตัวเลขที่จะประจุดทศนิยม ซึ่งในกรณีนี้คือหน้าหลักที่สอง

 

โครงสร้างของข้อมูลแบบ floating-point มีสามส่วนคือ sing bit, exponent และ mantissa

 

ข้อมูลชนิด float

ชนิดข้อมูลแบบ float เหมาะสำหรับเก็บเลขจำนวนจริงที่ต้องการความเที่ยงตรงแบบปรกติ อย่างเช่นจำนวนเงิน ความเที่ยงตรงแบบปรกติคือมีจำนวนเลขหลังจุดทศนิยมเจ็ดหลัก ยกตัวอย่างเช่นแบ่งเงินจำนวน 53.50 บาทให้คน 17 คนจะได้คนละ 3.147058823529 บาท ถ้าเก็บเป็นแบบ float ก็จะเหลือแค่ 3.1470588 ซึ่งไม่ได้เที่ยงตรงอย่างถึงที่สุด แต่ก็เพียงพอสำหรับจำนวนเงิน

 

** จงใช้ float เมื่อคุณต้องการตัวเลขแบบมีทศนิยมที่ต้องการความละเอียดขนาดจำนวนหลักหลังจุดทศนิยม 7 หลัก  **

 

ข้อมูลชนิด double

ชนิดข้อมูลแบบ double ใช้เก็บจำนวนมีทศนิยมซึ่งมีค่าสูงมากๆ หรือต่ำมากๆ ใช้พื้นในหน่วยความจำมากเป็นสองเท่าของ float

 

** จงใช้ double เมื่อต้องการเก็บตัวเลขที่มีจำนวนหลักหลังจุดทศนิยมมากกว่า 7 หลัก  **

 

ข้อมูลชนิด บูลีน

ชนิดข้อมูลแบบบูลีนใช้เก็บค่าจริง หรือเท็จ (true/false) เหมาะสำหรับเก็บคำตอบของคำถามว่าใช่หรือไม่ใช่ จริงหรือเท็จ จงใช้ชนิดข้อมูลแบบบูลีนเมื่อต้องการเก็บค่าที่เป็นไปได้เพียงแค่หนึ่งในสองอย่างเท่านั้น ชนิดข้อมูลแบบบูลีนในภาษา C# ใช้หน่วยความจำบิตเดียว

 

** ข้อควรระวังในการใช้ข้อมูลชนิดบูลีนคือในภาษา C++ เราสามารถแปลงข้อมูลชนิดบูลีนไปเป็นแบบจำนวนเต็มได้เลย คือ true ไปเป็น 1 และ false ไปเป็น 0 แต่ในภาษา C# ทำเช่นนั้นไม่ได้ เพราะภาษา C# เราจะแปลงข้อมูลชนิดบูลีนไปเป็นชนิดอื่นๆ ไม่ได้  **

 

int x = 123;
if (x)  
{
    printf_s("The value of x is nonzero.");
}
 

โค้ดข้างบนเป็นภาษา C++ ใน C# ต้องเขียนแบบข้างล่างแทน

 

int x = 123;
if (x != 0)   
{
    Console.Write("The value of x is nonzero.");
}

 

นอกจากชนิดข้อมูลที่ว่ามาทั้งหมดแล้ว C# ยังมีข้อมุลแบบ String และ Array ซึ่งมีรายละเอียดมาก สมควรนำเสนอแยกต่างหากออกไป นอกจากนั้น C# ยังมีชนิดข้อมูลแบบพิเศษอื่นๆ อีกหลายแบบเช่น struc, nullable และ delegate ที่จะนำเสนอในต่อต่อๆ ไปเช่นกัน

 

จบตอน 2 โปรดติดตามตอน 3

 

เกี่ยวกับผู้เขียน

 

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

ชนิดข้อมูลในภาษา C# (ตอน 1)

ไปหน้าแรก | สารบัญ | Laploy.comระเบียนบทความ | บทความจากลาภลอย

ชนิดข้อมูลในภาษา C# (ตอน 1)

ผู้เขียน : ลาภลอย วานิชอังกูร (laploy.com) 

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

 

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

 

สำรวจหน่วยความจำ

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

หน่วยความจำแคชในซีพียู ใช้เก็บข้อมูลและคำสั่งที่ใช้บ่อยๆ หรือเพิ่งถูกใช้ไป หรือคาดว่าจะถูกเรียกใช้ในอนาคตอันใกล้ แคชจะถูกแบ่งเป็นส่วนๆ เรียกว่ารีจิสเตอร์ (Register) รีจิสเตอร์คือหน่วยความจำขนาดเล็กที่อยู่ภายใน ซีพียู (CPU Central Processing Unit หน่วยประมวลผลกลาง) ทำหน้าที่เก็บข้อมูลหรือคำสั่งเป็นการชั่วคราว

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

 

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

เป็นเรื่องปรกติที่ซอฟต์แวร์ระบบปฏิบัติการ (Operating System เช่น Windows และ Linux) จะนำหน่วยความจำถาวรบางส่วน มาทำเป็นหน่วยความจำเสมือน (Virtual memory) อันเป็นเทคนิคที่ระบบปฏิบัติการใช้ เพื่อเพิ่มความจุของหน่วยความจำหลัก ให้มากกว่าปริมาณของแรมที่มีอยู่ในเครื่อง การทำงานของมันเป็นดังนี้ เมื่อหน่วยความจำหลักถูกใช้ไปจนเกินความจุของแรม ระบบปฏิบัติการจะนำข้อมูลที่เกินนี้ไปเก็บไว้ที่ในฮาร์ดดิสก์ ครั้นเมื่อคอมพิวเตอร์ต้องการใช้ข้อมูลนั้น ระบบปฏิบัติการจะนำข้อมูลในฮาร์ดดิสก์ มาสลับที่กับข้อมูลในแรมส่วนที่ยังไม่จำเป็นต้องใช้ในตอนนั้น

 

<< บัสคือสายไฟเชื่อมต่อระหว่างซีพียู หน่วยความจำ และอุปกรณ์ I/O

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

 

 เรื่องของข้อมูลและหน่วยความจำ

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

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

 

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

อย่างไรก็ดี จำนวนหนึ่งบิตไม่สามารถเก็บอะไรได้มากนัก จึงต้องใช้สวิตช์หลายตัวๆ มารวมกัน เช่นสวิตช์สองตัว จะได้สองบิต ซึ่งทำให้เก็บค่าที่แตกต่างกันได้สี่ค่า ดังแสดงในตาราง 1-1 คือใช้แทนเลขได้จาก 0 ถึง 3 ข้อให้สังเกตว่า ตัวเลขต่ำสุดในระบบเลขฐานสอง คือเลขศูนย์ ไม่ใช่เลขหนึ่ง หาเราใช้หน่วยความจำขนาดแปดบิต หรือที่เรียกว่าหนึ่งไบต์ (Byte) จะเก็บค่าที่แตกต่างกันได้ 256 ค่า ซึ่งนำมาใช้แทนตัวเลขจาก 0 ถึง 255 ได้

 

เราใช้ทรานซิสเตอร์หนึ่งตัวทำสวิตช์ ได้หนึ่งตัว แทนค่าได้หนึ่งบิต ในชิพซีพียูและแรมจะมีทรานซิสเตอร์บรรจุอยู่ภายในหลายร้อยล้านตัว >>

  

การนับเลขฐานสอง

ระบบจำนวน (Numbering system) คือวิธีนับ และวิธีกระทำทางคณิตศาสตร์ มนุษย์ใช้เลขฐานสิบในการนับ ส่วนคอมพิวเตอร์ใช้เลขฐานสองในการนับ ทั้งสองระบบทำงานเหมือนกันทุกประการ หากคุณบวกลบคุณหารโดยใช้เลขฐานสอง คุณจะได้คำตอบเช่นเดียวกันหากใช้เลขฐานสิบ

อย่างไรก็ดี ข้อแตกต่างอันควรสังเกตระหว่างเลขฐานสอง และเลขฐานสิบคือ เลขฐานสิบประกอบด้วยตัวเลขที่แตกต่างกันสิบตัว (0 ถึง 9) ส่วนเลขฐานสองประกอบด้วยตัวเลขเพียงสองตัวเท่านั้น (0 และ 1)

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

 

กฎในการบวกเลขฐานสอง

 

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

 

นี่คือกฎของการบวกเลขฐานสองเมื่อแสดงในลักษณะตารางความจริง (truth table) จะเห็นว่าเมื่อ 1 บวกกับ 1 จะเกิดตัวทดหรือ carry ขึ้น

 

การจองหน่วยความจำ

หน่วยความจำหนึ่งหน่วยเก็บข้อมูลได้หนึ่งไบต์ แต่ข้อมูลในโปรแกรมอาจโต 2, 4 หรือ 8 ไบต์ก็ได้ ดังนั้นคุณจึงต้องจองเนื้อที่ในหน่วยความจำโดยการกำหนดชนิดข้อมูลหรือ Abstract data type เสียก่อนจึงจะเก็บข้อมูลได้

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

ชนิดข้อมูลในภาษา C# มีขนาดตายตัว เพราะโปรแกรมที่เขียนด้วยภาษา C# จะรันบนสภาพแวดล้อมเหมือนเดิมตลอด (เรียกว่า CLR หรือ Common Language Runtime) ส่วนภาษา C และ C++ ชนิดข้อมูลจะมีขนาดไม่แน่นอน ขึ้นอยู่กับขนาดของรีจิสเตอร์ของคอมพิวเตอร์ที่จะใช้ ชนิดข้อมูล int และ float จะมีขนาดเท่ารีจิสเตอร์ ส่วน short จะมีขนาดครึ่งหนึ่งของ int ส่วนชนิดข้อมูล long จะมีขนาดเป็นสองเท่าของ int

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

 

ชนิดข้อมูลพื้นฐานในภาษา C# แบ่งออกเป็นหลายแบบดังแสดงในตารางข้างบน คอลัมน์แรกแสดงคีย์เวิร์ด คอลัมน์ถัดมาเป็นชื่อคลาสที่นิยามชนิดข้อมูล คอลัมน์ถัดมาอีกเป็นขอบเขตของจำนวนที่เก็บได้

 

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

 

เกี่ยวกับผู้เขียน

 

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

กรอกแบบฟอร์มแล้วรับรางวัล

กรอกแบบฟอร์มแล้วรับรางวัล

 

 

บก. ของนิตยสาร Windows ITPro ฝากบอกมาว่า

เพื่อที่จะปรับปรุงการให้บริการด้านต่างๆ ให้มีนิตยสาร Windows ITPro มีประสิทธิภาพมากยิ่งขึ้น จึงขอเชิญทุกท่านร่วมตอบแบบสอบถาม และร่วมลุ้นรับของรางวัลต่างๆ มากมาย อาทิ

โชคชั้นที่ 1 รับฟรีทันที
        –  Microsoft Visual Studio 2008 Express
โชคชั้นที่ 2 ลุ้นรับฟรี !! ****
        – USB Phone 8 รางวัล
        – SKYGATE Box จำนวน 4 รางวัล
        – BitDefender Internet Security 5 รางวัล

หมดเขตรับแบบสอบถามภายในวันที่  30 เม.ย. 2551
ประกาศรายชื่อผู้โชคดีในนิตยสาร Windows ITPro ฉบับ เม.ย. 2551
สามารถดาวน์โหลดแบบสอบถามได้ที่เว็บไซต์ http://www.windowsitpro.net/Download
หรือส่งแฟกซ์มาได้ที่ 0-2246-4251 ถึง กองบรรณาธิการ นิตยสาร Windows ITPro

**** สงวนสิทธิ์สำหรับผู้กรอกแบบสอบถามครบถ้วนเท่านั้น

บก. ของนิตยสาร Windows ITPro ฝากบอกมาว่า
ถ้าไม่มีเครื่องแฟกซ์จะส่งกลับไปทางอีเมลก็ได้ที่ suwaschai@windowsitpro.net
ส่วนที่้ต้องกาในแบบฟอร์มใช้ป้ายสีแทนได้

สร้าง IrDA ด้วยตนเอง

ไปหน้าแรก | สารบัญ | Laploy.comระเบียนบทความ | บทความจากลาภลอย

สร้าง IrDA ด้วยตนเอง
สร้างตัวรับส่งอินฟราเรดโดยใช้อุปกรณ์หาง่ายราคาถูก เพื่อเชื่อมต่อคอมพิวเตอร์ของคุณกับอุปกรณ์ไฮเทคแบบไร้สาย

เขียนโดย : ลาภลอย วานิชอังกูร    [บทความจาก นิตยสารไมโครคอมพิวเตอร์ ]

อุปกรณ์ไฮเทคเช่น Pocket PC, คอมพิวเตอร์พกพา, กล้องถ่ายภาพแบบดิจิตอล และโทรศัพท์มือถือ ล้วนมี “วงจรสำหรับการเชื่อมต่อด้วยแสงอินฟราเรด” (ต่อไปจะเรียกย่อๆ ว่า IrDA) เพื่อให้เราสามารถเชื่อมต่ออุปกรณ์เหล่านี้กับคอมพิวเตอร์และรับส่งแลกเปลี่ยนข้อมูลได้โดยไม่ต้องใช้สาย

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

อุปกรณ์ไฮเทคที่สนับสนุน IrDA มีจำนวนมาก ยกตัวอย่างเช่น
•    มือถือโนเกียรุ่น 5000 series, 6000 series, 7000 series, 8000 series
•    มือถือโมโตโลรารุ่น 7689, 7389, L2000, A6288, 388, time port
•    มือถืออิริคสันรุ่น T39, T68, T68i, R320, R380
•    มือถือซีเมน 2588, 3568i, 3618, 6618, 6686, 6688
•    เครื่องพิมพ์ยี่ห้อฮิวเลตเพคการ์ด รุ่น 5MP Laser Printer, HP 6P Laser Printer และ HP DeskJet 990C series Printer
•    กล้องโซนี่ DSC-F1 3COM
•    คอมพิวเตอร์พกพาแบบ ปามล์ รุ่น Palm III, Palm V, Palm M100, Palm Vx
•    Pocket PC, Smart Phone และ PDA ทุกรุ่น
•    คอมพิวเตอร์แบบ note book ส่วนใหญ่

วินโดวส์ทุกเวอร์ชันสนับสนุนการเชื่อมต่อ IrDA โดยใช้โปรโตคอลแบบจุดต่อจุด ความเร็วในการรับ-ส่งข้อมูลประมาณ 4MBps (MBps คือล้านบิตต่อวินาที) ตามทฤษฏีแล้ว IrDA สามารถทำงานได้ที่ความเร็วสูงสุดถึง 16MBps และทำงานได้ภายในระยะทางประมาณหนึ่งถึงสองเมตร

โชคดีที่เมนบอร์ดส่วนใหญ่มี  IrDA มาให้ด้วย แต่วงจรนี้จะไร้ประโยชน์โดยสิ้นเชิงหากเราไม่มี “หัวรับ-ส่งสัญญาณอินฟราเรด” (ต่อไปจะเรียกย่อว่า IrTxRx)  แย่หน่อยที่ IrTxRx ไม่มีมาในกล่องเมนบอร์ด เราต้องหาซื้อแยกต่างหาก  ผู้ที่อยู่ไกลศูนย์ไอทีอาจพบว่า IrTxRx เป็นสิ่งที่หาซื้อยากและมีราคาแพง  

 

 

<< หัวรับ-ส่งสัญญาณอินฟราเรด หรือ IrTxRx 

บทความนี้จะสอนวิธีสร้าง IrTxRx ขึ้นใช้เอง โดยใช้วัสดุเหลือใช้รอบๆ ตัว หรือซื้อจากร้ายขายอะไหล่อิเล็กทรอนิกส์ วงจรไม่ซับซ้อน (ออกแบบโดย Alain Gailland) ใช้อุปกรณ์ไม่กี่ชิ้น ใครก็ตามที่บัดกรีเป็นก็สามารถทำได้เอง และจะแสดงตัวอย่างการประยุกต์ใช้งาน โดยการสาทิตวิธีเชื่อมต่อ Pocket PC กับเครื่องพีซีเพื่อทำ ActiveSync แบบไร้สาย และสุดท้ายจะแสดงวิธีเชื่อมต่อกับโทรศัพท์มือถือเพื่อเข้าอินเตอร์เน็ตผ่านระบบ GPRS

หัวรับ-ส่งสัญญาณอินฟราเรด หรือ IrTxRx เมื่อประกอบเสร็จแล้ว  >>

 

ช่องต่อ IrDA บนเมนบอร์ด

เมนบอร์ดส่วนใหญ่มีจุดต่อวงจรอินฟราเรด (ต่อไปจะเรียกย่อว่า IRC) เตรียมมาให้แล้ว เปิดฝาเคสดูที่เมนบอร์ด มองหาหัวต่อ (jumper pin) ที่เขียนว่า IR, IRDA, IRCON, SIR, SIRCON หรืออะไรทำนองนี้ ถ้าหาไม่เจอให้ดูในคู่มือเมนบอร์ด (ถ้าหาคู่มือไม่เจอให้ดาว์นโหลดจากเว็บไซต์ของผู้ผลิต)  บทความนี้จะยกตัวอย่างเมนบอร์ดยี่ห้อ Asus รุ่น A7N8X ซึ่งมี IRC ที่มุมขวาด้านล่าง มีตัวอักษรเขียนว่า IR_CON1
 

IRC ปรกติจะมีสี่ถึงหกขาขึ้นอยู่กับเมนบอร์ดแต่ละรุ่น ในเมนบอร์ดยี่ห้อ Asus รุ่น A7N8X หากดูในคู่มือจะเห็นว่าขา IRC มีสิบขา แต่เป็นขาที่ไม่ได้ใช้งานไปเสียสามขา ขาของ IRC ที่เราต้องการใช้งานมีเพียงสี่ขาคือ ขาส่งสัญญาณ (IRTX) ขารับสัญญาณ (IRRX) ขากราวด์ (GND) และขาจ่ายไฟเลี้ยง (+5v) ตำแหน่งของขาเหล่านี้จะแตกต่างกันในเมนบอร์ดแต่ละรุ่น โปรดตรวจดูในคู่มือให้แน่ใจ เพราะหากต่อผิดอาจทำให้เมนบอร์ดหรือเหล่งจ่ายไฟชำรุดได้

 

จุดต่อวงจรอินฟราเรดในเมนบอร์ดยี่ห้อ Asus รุ่น A7N8X

การจัดวางขา IR_CON1 ในเมนบอร์ดยี่ห้อ Asus รุ่น A7N8X

 

อุปกรณ์ที่ต้องใช้

อุปกรณ์ที่เราจะใช้สร้าง IrTxRx เป็นอุปกรณ์อิเล็กทรอนิกส์ธรรมดาที่หาซื้อได้ตามร้านอะไหล่ใกล้บ้าน (ถ้าอยู่ใกล้บ้านหม้อก็สบายหน่อย) ถ้าคุณมีซากอุปกรณ์อิเล็กทรอนิกส์เก่าๆ ที่ชำรุดแล้วอาจแกะอะไหล่มาใช้ได้ ยกตัวอย่างเช่นหลอด LED แบบอินฟราเรด (IED) และตัวรับอินฟราเรด หากคุณมีเมาส์แสง (optical mouse) เก่าที่เสียแล้ว ก็สามารถแกะตัวรับส่งอินฟราเรดมาใช้ได้ (ปรกติในเมาส์แสงจะมีตัวรับส่งอินฟราเรดอยู่สี่ชุด)  หรือทรานซิสเตอร์จะใช้เบอร์อะไรก็ได้ เพียงแต่ให้เป็นชนิด NPN และมีขนาดยิ่งเล็กยิ่งดี


รายการอุปกรณ์
ตัวต้านทาน ¼ w    22โอห์ม, 4.7K, 47K, 15k และ 1K     อย่างละตัว
ตัวเก็บประจุ    10nf    หนึ่งตัว
ทรานซิสเตอร์    2N4041 หรือ BC548 (หรือเบอร์อื่นๆ ที่เป็น NPN)    สองตัว
ตัวรับส่งอินฟราเรด    เบอร์อะไรก็ได้    หนึ่งชุด
แผ่นวงจรอเนกประสงค์    แผ่นเล็ก    หนึ่งแผ่น
สายแพ    แบบสี่เส้น     2เมตร

 

ประกอบวงจร

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

เมื่อประกอบเสร็จให้ตรวจสอบโดยการไล่วงจร จนแน่ใจว่าไม่มีข้อผิดพลาด (เช่นทรานซิสเตอร์ หรือ LED สลับขา) จากนั้นนำวงจร IrTxRx เชื่อมต่อเข้ากับ IRC ของเมนบอร์ด (เมนบอร์ดยี่ห้อ Asus รุ่น A7N8X คือ IR_CON1)  ให้ต่อจุดที่เขียนว่า IRTX, IRRX, GND และ +5v ใน IrTxRx เข้ากับ IRC ในเมนบอร์ดในตำแหน่งที่มีชื่อตรงกัน ระวังอย่าต่อสลับขากันเพราะอาจทำให้วงจรในเมนบอร์ดชำรุดได้

วงจรหัวรับ-ส่งอินฟราเรด >>

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

<< สายแพแบบแปดเส้น หากใช้แบบนี้ต้องฉีกออกครึ่งหนึ่งให้เหลือสี่เส้น

 

การติดตั้งในวินโดวส์

เมื่อติดตั้ง IrTxRx เรียบร้อยแล้วให้เปิดคอมพิวเตอร์แล้วเข้าโปรแกรมไบออส (กดปุ่ม Del ขณะเครื่องกำลังตรวจสอบตัวเองก่อนเข้าวินโดวส์) เพื่อกำหนดค่าในไบออสให้ IrDA ทำงาน เมื่อตั้งค่าแล้วให้บูตใหม่ เมื่อเข้าวินโดวส์แล้ววินโดวส์จะตรวจพบ IrDA โดยอัตโนมัติและจะแสดงกรอบข้อความ Found New Hardware Wizard

 


กรอบข้อความ Found New Hardware Wizard

 

 
วิธีตรวจสอบว่า IrDA ถูกวินโดวส์ติดตั้งเรียบร้อยหรือไม่ทำได้โดย 1) กดปุ่ม Start 2) เลือกหัวข้อ Setting 3) เลือกหัวข้อ Control Panel จะเห็นไอคอน Infrared

 

ทำ ActiveSync กับ Pocket PC

ตอนนี้ IrDA พร้อมใช้งานแล้ว ต่อไปเป็นวิธีเชื่อม Pocket PC กับพีซีเพื่อทำ ActiveSync แบบไร้สาย

 
เปิดโปรแกรม ActiveSync แล้วเลือกเมนู File คลิกที่หัวข้อ Connection Setting…

 

 
กดให้มีเครื่องหมายถูกหน้าข้อความ Allow serial cable or infrared connection to this COM port แล้วเลือก Infrared (IR) จาก drop down list box

 


เปิดโปรแกรม ActiveSync ใน Pocket PC


นำ Pocket PC มาวางให้ตรงกับ IrTxDx แล้วคลิกคำสั่ง Tool และ Connect via IR


Pocket PC จะรับสัญญาณได้และทำการเชื่อมต่อ
เมื่อเชื่อมต่อได้แล้วก็สามารถโยกย้ายไฟล์ระหว่าง Pocket PC และพีซีได้ตามปรกติ

 

ใช้โมเด็มในมือถือ


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


นำมือถือมาเปิดเมนู เลือก Tools เลือก Setting แล้วเลือก Connection

เลือกหัวข้อ Access points แล้วใส่ค่าต่างๆ ตามที่ผู้ให้บริการระบุ เช่น ชื่อ รหัสผ่าน ดูรายละเอียดในคู่มือการใช้งานของมือถือแต่ละยี่ห้อแต่ละรุ่น และคู่มือวิธีกำหนดค่าของผู้ให้บริการ หรือใช้ระบบ OTA (การตั้งค่าผ่าน SMS) ต่อไปนี้เป็นแนวทางในการตั้งค่าโดยทั่วไป

1.    หัวข้อ Connection Name ให้กำหนดดังนี้

•    เครือข่าย AIS ใช้ AIS GPRS INTERNET
•    เครือข่าย DTAC ใช้ DTAC GPRS INTERNET
•    เครือข่าย Orange ใช้ Orange GPRS Internet
•    หรือจะใช้ชื่ออะไรก็ได้ที่เข้าใจง่าย


2.    หัวข้อ Data Bearer เลือกเป็น GPRS


3.    หัวข้อ Access Point name ให้กำหนดดังนี้

•    เครือข่าย AIS ให้กำหนดเป็น internet
•    เครือข่าย DTAC ให้กำหนดเป็น http://www.dtac.co.th
•    เครือข่าย Orange ให้กำหนดเป็น internet


4.    หัวข้อ User Name ให้กำหนดดังนี้

•    เครือข่าย AIS ปล่อยว่าง
•    เครือข่าย DTAC ปล่อยว่าง
•    เครือข่าย Orange ให้กำหนดเป็น orange

5.    หัวข้อ Prompt Password ปล่อยว่าง


6.    ห้อข้อ Password ให้กำหนดดังนี้

•    เครือข่าย AIS ปล่อยว่าง
•    เครือข่าย DTAC ปล่อยว่าง
•    เครือข่าย Orange ให้กำหนดเป็น orange

7.    หัวข้อ Authentication เป็น Normal

8.    หัวข้อ Homepage ให้กำหนดดังนี้

•    เครือข่าย AIS ใส่

http://wap.mobilelife.co.th
•    เครือข่าย DTAC ปล่อยว่าง
•    เครือข่าย Orange ให้กำหนดเป็น
http://www.orange.co.th

9.    หัวข้อ Connection security ให้กำหนดเป็น off

10.    หัวข้อ Session mode ให้กำหนดเป็น Temporary

 

ต่อไปเป็นการตั้งค่า Advance Setting ใน Option / Advance Setting

1.    หัวข้อ Phone IP Address ให้กำหนดเป็น automatic
2.    Primary name server ให้กำหนดเป็น 0.0.0.0
3.    Second name server ให้กำหนดเป็น 0.0.0.0
4.    Proxy serv. Address ให้กำหนดเป็น
•    เครือข่าย AIS ให้กำหนดเป็น 203.170.299.34
•    เครือข่าย DTAC ให้กำหนดเป็น 203.155.200.133
•    เครือข่าย Orange ให้กำหนดเป็น orange 010.004.007.039
5.    Proxy port number ให้กำหนดเป็น 8080

เปิดการใช้งาน IrDA ในมือถือโดยเลือก Connect, Modem และ Connect Via Infrared

 


นำมือถือไปวางให้ตรงกับ IrTxRx วินโดวส์จะตรวจพบโมเด็มในมือถือและแสดงกรอบข้อความนี้

 

 
มือถือจะแสดงข้อความว่ากำลังเชื่อมต่อกับพีซีผ่านอินฟราเรด

 

 
วิธีตรวจสอบว่าวินโดวส์ติดตั้งไดร์ฟเวอร์ของโมเด็มเรียบร้อยหรือไม่ทำได้โดยคลิกขวาที่ My Computer, Properties กดที่ tab Hardware กดปุ่ม Device Manager จะเห็นกรอบข้อความนี้ ดูในหัวข้อโมเด็มจะมีข้อความว่า Standard Modem over IR link (หรืออื่นๆ ที่คล้ายกัน)


 

ต่อไปเป็นการกำหนดการเชื่อมต่ออินเตอร์เน็ตผ่านโมเด็มของมือถือซึ่งทำได้โดยเรียก Wizard ของวินโดวส์ กดปุ่ม Start, Setting, Network Connection ในกรอบ Network Connections เลือกหัวข้อ New Connection Wizard


 

New connection Wizard จะทำงาน ให้ทำตามขั้นตอนไปเรื่อยๆ เมื่อมีหัวข้อให้เลือกการเชื่อมต่อ ให้เลือกโมเด็มของมือถือ

 

อิสระกับอินฟราเรด

ลงทุนไม่มากนักลงแรงประกอบวงจรและเซตค่าในซอฟท์แวร์อีกนิดหน่อย เราก็เป็นอิสระจากสายไฟเชื่อมต่อที่น่ารำคาญ ทำให้ใช้อุปกรณ์ไฮเทคร่วมกับพีซีได้สะดวกขึ้น เมื่อเทียบกับการเชื่อมต่อไร้สายอื่นๆ อย่าง BlueTooth การใช้ IrDA ถือเป็นทางเลือกที่ประหยัดคุ้มค่า และหากท่านมีคอมพิวเตอร์สองเครื่องอยู่ใกล้กัน ต้องการเชื่อมต่อกันเพื่อแลกเปลี่ยนข้อมูล แต่ไม่มีการ์ดแลน การใช้ IrDA สองชุดเชื่อมต่อกันจะประหยัดกว่าแถมยังปราศจากสายไฟรกรุงรังด้วย

 

 

เกี่ยวกับผู้เขียน

 

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

มาทำลายคอมพิวเตอร์กันเถอะ

ไปหน้าแรก | สารบัญ | Laploy.comระเบียนบทความ | บทความจากลาภลอย

มาทำลายคอมพิวเตอร์กันเถอะ!!

 

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

เขียนโดย ลาภลอย วานิชอังกูร    บทความจากนิตยสาร ComToday

 

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

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

คุณเคยดูเรื่อง A.I. หรือไม่? (ภาพยนตร์ปีค.ศ. 2001 กำกับโดยสตีเวน สปิลเบิร์ก) ในภาพยนตร์เรื่องนั้น เมื่อประชากรหุ่นยนต์มีมากเกินไป เค้ายังต้องจัดงาน “เฟรชแฟร์” (Flesh Fair) ลากหุ่นยนต์ออกมาทำลายเล่น เพื่อสะใจและเป็นการควบคุมประชากรหุ่นไปด้วยในตัว แน่ละ! ทั้งคุณและผมย่อมมีสิทธิที่จะได้ลิ้มรสความสุขใจเช่นนั้นบ้าง!

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

 

(คำเตือน : บทความนี้เป็นเรื่องของการใช้กำลังและความรุนแรง มีเนื้อหาไม่เหมาะต่อเยาวชนอายุต่ำกว่า 13 ปี ผู้ปกครองควรให้คำแนะนำ)

 

เริงร่ารอบตู้เคส

บันไดขั้นแรกที่จะนำเราไปสู่ความสุขอยู่ที่การได้เปิดฝาเครื่องคอมพิวเตอร์ ตู้คอมพิวเตอร์หรือที่ช่างชอบเรียกว่า “ตู้เคส” (computer case) นั้นจะมีฝาปิดไว้ทางซ้ายและทางขวา ฝานี้ทำหน้าที่เป็นเกราะป้องกันไม่ให้อุปกรณ์ภายในได้รับเสียหาย ผู้ที่ไม่ใช่ช่างซึ่งไม่มีหน้าที่บำรุงรักษาไม่ควรจะเปิดฝานี้ออก เมื่อรู้ดังนี้แล้วจะรอช้าอยู่ใย? ทำตามขั้นตอนต่อไปนี้ได้เลย!

  1. เดินอ้อมไปหลังโต๊ะคอมพิวเตอร์เพื่อพิจารณาด้านหลังของเคสคอมพิวเตอร์
  2. กวาดสายตาดูรอบๆ คุณจะเห็นว่าฝาเคสคอมพิวเตอร์ของเรามันช่างมีนอตเยอะเสียจริงๆ นอตที่ว่านี้เป็นนอตหัวแฉกหรือที่พวกช่างเรียกว่า “นอตหัวฟิลลิป” นั่นเอง นอตอย่างนี้ปกติใช้ไขควงหัวแฉกขนาดกลางขันเบาๆ นอตก็จะคลายเกลียวออกมาได้อย่างง่ายดาย แต่งานนี้ย่อมไม่มีการใช้ไขควงแบบนั้นอยู่แล้ว!
  3. นำไขควงแฉกไปเก็บซ่อนไว้ให้หมด
  4. ไปหา “ไขควงแบน” มา เอาไขควงแบนที่มีหัวใหญ่ๆ หน่อย นำมาไขโดยออกแรงให้มากเข้าไว้
  5. หากคุณสามารถทำให้ไขควงแฉลบออกไปทิ่ม “คอนเนคเตอร์” (connector ช่องเสียบสายอุปกรณ์ต่างๆ) จนขาหักได้จะถือว่าดีเลิศ (ของคอนเนคเตอร์ ไม่ใช่ขาของคุณ)
  6. ไม่ควรให้มือพลาดไปทิ่มสันโลหะของเคส เพราะอาจจะทำให้คุณบาดเจ็บ อย่าลืมว่าเป้าหมายของเราคือต้องการสร้างความเสียหายให้แก่คอมพิวเตอร์ ไม่ใช่รางกายของเรา
  7. ถ้าคุณใช้เครื่องหรูมีระดับ (เครื่องแบรนเนม) อาจต้องเจอกับนอตแบบ “โปสิไดร์ฟ” นอตแบบนี้เป็นนอตพิเศษ ถูกออกแบบมาเพื่อป้องกันคนที่ไม่ใช่ช่างมาเปิดฝาเคสเล่น หน้าตามันก็คล้ายๆ กับนอตหัวแฉกนี่แหละ แต่ร่องจะชันน้อยกว่า ถ้าไปหาซื้อไขควงโปสิไดร์ฟมาขัน นอตก็จะหลุดออกได้โดยง่าย แต่ผมขอบอกว่าอย่าไปซื้อให้เปลืองเงิน ใช้ ไขควงฟิลลิป นี่แหละเหมาะที่สุด ควรใช้แรงไขมากๆ เพราะจะทำให้นอตหัวแบะดูงามตา และถ้าคุณมีโชค ไขควงของคุณก็อาจจะหัวแบะตามไปด้วยเช่นกัน
  8. หากคุณเป็นสุภาพสตรี หรือมีแรงน้อย ให้ใช้ค้อนตอกที่ท้ายไขควงแรงๆ ทำเช่นนั้นซ้ำๆ จนกว่านอตจะหัวแบะ
  9. เป็นเรื่องสำคัญเมื่อถอดนอตด้านหลังเครื่อง ควรจะถอดให้ครบทุกตัว ไม่ใช่ถอดเฉพาะนอตที่รายล้อมอยู่รอบๆ ฝาเคสเท่านั้น นอตที่อยู่กลาง อยู่ล่าง อยู่บน และนอตซึ่งทำหน้าที่ยึดกล่องหน่วยจ่ายไฟ (power supply unit) นั้นควรค่าแก่การไขออกมามากที่สุด เพราะหากคุณมีโชค หน่วยจ่ายไฟจะร่วงออกจากที่ยึด หล่นลงไปใส่แผงวงจรในเครื่อง ซึ่งจะก่อให้เกิดความเสียหายอย่างรุนแรง ก่อนที่คุณจะทันได้ถอดฝาออกเสียอีก
  10. การแกล้งลืมไขนอตออกบางตัว แล้วพยายามงัดฝาเคสออกด้วยกำลัง ถือว่าเป็นความพยายามที่น่าชื่นชม จงพยายามงัดฝาเคสออกด้วยไขควงแบนตัวใหญ่ที่สุดที่หาได้ ลองงัดด้านนู้น แล้วย้ายมางัดด้านนี้ ออกแรงให้มากเข้าไว้เช่นเคย และถ้าคุณกำลังดวงขึ้น คุณก็อาจจะได้เห็นฝาหน้าแตกร้าว โลหะบิดงอ หรือมีชิ้นส่วนอะไรหลุดกระเด็นหายไปที่มุมห้อง
  11. เรียนผูกแล้วต้องเรียนแก้ เมื่อถอดฝาเคสแล้วควรฝึกใส่กลับเข้าที่ด้วย นับเป็นบุญที่เคสบางรุ่นออกแบบมาได้แย่มาก คือมีช่องและร่องมากมาย หากถอดหรือใส่ฝาผิดนิดเดียว สลักก็จะพับงอ มีเคล็ดลับอยู่หน่อยคือตอนใส่ฝาให้กดแรงๆ ใช้กำลังดันเข้าไป (ใช้ค้อนช่วยหากมีแรงน้อย) ถ้ามีสายไฟแลบออกมา ให้ดันฝาเคสกดทับสายไฟไปด้วยจะดีมากๆ ตอนขันนอตปิดควรขันให้แน่นที่สุด ประหนึ่งว่านอตตัวนั้นทำหน้าที่ยึดตึกระฟ้าทั้งหลังไว้ ภายหลังเมื่อเราถอดฝาเคสอีก นอตและรูนอตนั้นจะมีโอกาสเกลียวหวาน หรือหัวแบะได้สูง (เคล็ดลับ : ถ้าอยากผ่อนแรงขอแนะนำให้ใช้ไขควงไฟฟ้าที่มีแรงบิดสูงๆ แบบที่ช่างซ่อมรถใช้)
  12. ควรละลึกไว้เสมอว่าเคสของคอมพิวเตอร์นั้นเป็นสิ่งที่แข็งแรงเหลือเชื่อ จึงควรจัดให้มีน้ำหนักจำนวนมากกดทับไว้เสมอ เช่นเอาตู้เซฟมาตั้งบนเคส หรือมีเก้าอี้ในห้องน้อยๆ เข้าไว้ เมื่อมีแขกมาเยี่ยมก็ให้แขกนั่งบนเคสต่างเก้าอี้ นานๆ เข้าเคสจะบิดงอ เป็นสาเหตุสำคัญในการสร้างความเสียหายให้แก่แผงวงจรภายในได้เป็นอย่างดี

 

ม่วนซื่นกันให้สุดขีด!

 

ไฟฟ้าสถิตจ๋า

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

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

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

 

ใช้แสนยานุภาพทางอากาศ

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

  1. ค้นดูในบ้านว่ามีอากาศอัดกระป๋องหรือไม่ หน้าตาเหมือนกระป๋องสเปรย์ ปรกติเราจะซื้อมาไว้เป่าฝุ่นเพื่อทำความสะอาดอุปกรณ์ต่างๆ กำลังลมของสเปรย์นี้มีอำนาจมากพอที่จะทำให้ชิ้นส่วนอิเล็กทรอนิกส์ในคอมพิวเตอร์หลุดกระเด็นออกมาได้อย่างสบาย
  2. หากต้องการแสนยากรทางอากาศที่ทรงพลังจริงๆ เราต้องอาศัยเครื่องปั๊มลม (Air compressor) อย่างที่ช่างซ่อมรถและนักพ่นสีใช้กัน นำมาปรับให้มีแรงดันสูงสุด (สักยี่สิบบาร์กำลังดี) แล้วนำมาเป่าส่วนต่างๆ ในตู้ ซอกซอนให้ทั่วทุกซอกมุม เช่นในซีดีรอมไดร์ฟ ลึกลงไปในเมนบอร์ด หากคุณมีพรสวรรค์ คุณจะสามารถทำให้ ชิพไอซี แรม หรือแม้กระทั่งตัวเก็บประจุ กระเด็นหลุดออกมาได้

 

ใช้ยุทธนาวี

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

  1. วางคอมพิวเตอร์ไว้ใกล้หน้าต่าง ในวันครึ้มฝน อย่าปิดหน้าต่าง
  2. ควรวางแก้วกาแฟและน้ำอัดลมไว้ใกล้ๆ คอมพิวเตอร์ หลักการนี้ได้ผลดีเป็นพิเศษกับคอมพิวเตอร์แบบ notebook
  3. ประดับเคสด้วยโหลปลาทองก็ถือว่าเป็นไอเดียที่ไม่เลว
  4. หากทำน้ำหกใส่คอมพิวเตอร์ อย่านำไปร้านซ่อมในวันนั้น ให้ประวิงไว้สักหนึ่งเดือน เพราะถึงตอนนั้นสนิมได้กินแผงวงจรโดยสมบูรณ์แล้ว

 

 

อำนาจแห่งความร้อน

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

  1. พยายามนำสิ่งต่างๆ เช่น ตั้งหนังสือ สมุด แฟ้ม ฯลฯ มากองไว้รอบเคสมากๆ จุดประสงค์ของเราคือต้องการให้สิ่งเหล่านั้นทำหน้าที่ปิดกั้นทางเดินอากาศ เมื่ออากาศไหลเวียนได้น้อย ความร้อนของคอมพิวเตอร์ก็จะสะสมขึ้นเรื่อยๆ
  2. นำสิ่งกำเนิดความร้อนมาไว้ใกล้ๆ คอมพิวเตอร์ เครื่องใช้ไฟฟ้าส่วนมากกำเนิดความร้อนทั้งนั้น ยกตัวอย่างเช่น UPS, เครื่องพิมพ์ ทีวี โคมไฟ กาน้ำร้อนไฟฟ้า ฯลฯ อัดเข้าไปรอบๆ เคส ความร้อนจากเครื่องเหล่านี้จะได้ถูกดูดเข้าไปในคอมพิวเตอร์มากๆ
  3. หากห้องทำงานของท่านมีหน้าต่างด้านทิศตะวันตก ที่ได้รับแสงแดดโดยตรงช่วงบ่ายจะดีมาก ให้นำโต๊ะคอมพิวเตอร์ไปตั้งไว้ตรงนั้น
  4. ถ้าขั้นตอนทั้งสามใช้ไม่ได้ผล ให้เผด็จศึกโดยนำเทปกาวมาปิดช่องระบายอากาศทั้งหมดบนตู้เคส

 

โจมตีที่จุดอ่อน

จุดอ่อนที่สุดของคอมพิวเตอร์คือฮาร์ดดิสก์ ภายในฮาร์ดดิสก์มีแผ่นจานกลมแบนๆ หลายแผ่น แผ่นจานเหล่านี้ไม่เคยถูกอะไรสัมผัสแม้กระทั่งฝุ่นผง ขณะเขียนหรืออ่านข้อมูล หัวอ่านของฮาร์ดดิสก์จะ “บิน” อยู่เหนือแผ่นจานในเพดานบินที่มีความสูงน้อยกว่าเส้นผ่าศูนย์กลางของเส้นผม แนวคิดพื้นฐานคือหาทางให้หัวอ่าน “กระแทก” กับแผ่นจาน การสัมผัสแม้เพียงเล็กน้อยก็เพียงพอจะทำให้ฮาร์ดดิสก์ชำรุดอย่างถาวร เมื่อรู้ทฤษฏีแล้วก็ลงมือปฏิบัติได้เลย

  1. ใช้ฝ่ามือตบที่เคสแรงๆ ขณะฮาร์ดดิสก์อ่านหรือเขียนข้อมูล จุดประสงค์คือเราต้องการสร้าง “แรงสะเทือน” ฮาร์ดดิสก์ส่วนใหญ่จะมีระบบต้านความสั่นสะเทือนอยู่แล้ว จึงอาจจะต้องหาวัตถุที่แข็งและหนัก (เช่นที่ทับกระดาษ) ทุบ คุณอาจถามว่าแล้วจะรู้ได้อย่างไรว่าฮาร์ดดิสก์กำลังอ่านหรือเขียนข้อมูล คำตอบคือให้สังเกตที่หลอดไฟสีแดงเล็กๆ หน้าเครื่อง (ปรกติหลอดนี้จะมีตัวอักษรเขียนว่า H.D. หรืออาจเป็นสัญลักษณ์รูปกลอง) หลอดไฟนี้จะติดสว่างขณะฮาร์ดดิสก์อ่านหรือเขียนข้อมูล
  2. ยกเคสขึ้นลอยจากพื้นเล็กน้อย (หนึ่งนิ้ว) แล้วปล่อยให้ตกกระแทกพื้นขณะฮาร์ดดิสก์อ่านหรือเขียนข้อมูล
  3. ในกรณีที่เป็นคอมพิวเตอร์แบบ note book งานของเราจะง่ายขึ้นมาก เพียงผลักให้มันตกจากโต๊ะขณะฮาร์ดดิสก์อ่านหรือเขียนข้อมูล หากเป็นวันที่คุณดวงขึ้นอาจได้โบนัสคือจอภาพแตกร้าวเป็นของแถมพกด้วย

 

 

สองเกลอลุยไฟ

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

  1. หาสาย USB แบบ AA มาหนึ่งเส้น สายชนิดนี้จะมีหัว USB แบบแบนทั้งสองปลาย
  2. นำปลายหนึ่งเสียบกับช่อง USB ในเครื่องของคุณ
  3. นำปลายอีกด้านหนึ่งเสียบกับช่อง USB ในเครื่องของเพื่อนคุณ
  4. เปิดคอมพิวเตอร์ทั้งสองเครื่อง
  5. รอสักหนึ่งนาทีจะเริ่มมีควันขึ้นที่คอมพิวเตอร์ทั้งสองเครื่อง ถ้าคุณเคราะห์ดี อาจมีไฟลุกขึ้นมาด้วย

 

เริงใจกับการถอด-ใส่

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

  1. เปิดฝาเครื่อง
  2. จ่ายไฟเข้าเครื่อง
  3. ถอดนอตออกจากแผงวงจรในเครื่อง จะเป็นแผงวงจรเชื่อมต่อจอภาพ หรือการ์ดเสียง หรืออะไรก็ดีทั้งนั้น ถ้าคอมพิวเตอร์ของคุณไม่มีแผงวงจะอะไรเลยเพราะทุกอย่างมีมาพร้อมในเมนบอร์ดทั้งหมด (build-in) ก็คงไม่มีทางเลือกนอกจากต้องหมายตาไว้ที่แผ่นหน่วยความจำแรม
  4. ถอดแผ่นวงจรออกจากเมนบอร์ด
  5. นำใส่กลับเข้าไปใหม่
  6. ถอดออกมาอีก
  7. ขณะทำขั้นตอนเหล่านี้ดูให้แน่ใจว่ามีไฟจ่ายเข้าเครื่อง และคอมพิวเตอร์เปิดอยู่

 

 

เล่นงานไบออส

ไบออส (BIOS ย่อจาก Basic Input Output System) คือโปรแกรมในไอซีแบบ EEPROM ไบออสเป็นโปรแกรมระดับรากหญ้ามันจะทำงานทันทีที่เราเปิดคอมพิวเตอร์ หากไบออสชำรุด คอมพิวเตอร์จะบูตไม่ได้ ดังนั้นไบออสน่าจะเป็นเป้าหมายที่ยอดเยี่ยมเลยใช่ไหม? วิธีทำลายไบออสให้ดำเนินการตามนี้

  1. เปิดเว็บไซต์ผู้ผลิตไบออส
  2. ดาวน์โหลดโปรแกรมสำหรับ Flash หรือปรับปรุงไบออส
  3. ดาวน์โหลดไบออสตัวล่าสุดมาด้วย
  4. ดูให้แน่ว่าไบออสตัวที่ดาวน์โหลดมาไม่ใช่รุ่นเดียวกับเมนบอร์ดของเรา
  5. ติดตั้งแล้วรันโปรแกรม Flash ไบออส

 

ถอดใจซีพียู

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

  1. เปิดฝาเครื่อง
  2. ถอดสายไฟออกจากพัดลมซีพียู ทำได้โดยดูที่พัดลมซึ่งติดอยู่บนครีบระบายความร้อน จะมีสายไฟสีแดงและดำ ไล่สายนี้ไป จะพบว่ามีหัวเสียบกับเมนบอร์ด ให้ถอดหัวนี้ออก
  3. หากเป็นไปได้ให้ถอดครีบระบายความร้อนออกด้วย แต่ขอเตือนก่อนว่าถอดยากมาก
  4. ปิดฝาเครื่อง
  5. ใช้เทปกาวปิดช่องระบายความร้อน
  6. เปิดคอมพิวเตอร์ แล้วเปิดเกม Half-Life 2 หรือโปรแกรมอะไรก็ได้ที่กินแรงซีพียูมากๆ หน่อย
  7. ดูให้แน่ใจว่าไม่ได้เปิดเครื่องปรับอากาศหรือพัดลม
  8. ทิ้งไว้เช่นนั้นสักสองชั่วโมง

 

ม้วยด้วยหฤหรรษ์

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

เจอกันในงาน vTalks #8

ไปหน้าแรก | สารบัญ | Laploy.comระเบียนบทความ | บทความจากลาภลอย

vTalks #8

อ.สุเทพ แสงวิโรจนพัฒน์

ผมได้รับการทาบทามจาก อ. นเรศ นันทบุรมย์ (ผู้เขียนตำรา ASP.NET 2.0 สนพ Success Media) เพื่อเชิญไปเป็น guest speaker ในงาน vTalks#8 โดย อ. นเรส แจ้งว่า อ. สุเทพ แสงวิโรจนพัฒน์ (Microsoft MVP suthep@greatfriends.biz) จะจัดงานดังนี้

  • ชื่องาน : Greatfriends vTalks #8
  • สถานที่ : อาคารสำนักงานบริษัท Microsoft (Thailand)
  • วันที่ : 27 January 2008
  • ลักษณะงาน : สัมนา พบปะพูดคุยเกี่ยวกับ software development

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