\

Facebook


วันจันทร์ที่ 2 กันยายน พ.ศ. 2556

ปรับแต่ง Notepad++ ให้เป็น Editor เมพ


นั่งเขียนเว็บอยู่ดีๆ Editplus ตัวเก่งของผมที่ช่วยผมเขียนเว็บก็หมดช่วงทดลองลง (เสียใจ) ใจหนึ่งก็จะ search หาตัว crack มาลงให้รู้แล้วรู้ลอดไป เพราะชอบ editor ตัวนี้มากแต่อีกใจก็อยากลองหาอะไรใหม่ๆมาลองเขียนโค๊ดดูบ้าง จะได้เป็นหลายๆเจ้า

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

ซึ่งวิธีการเลือกตัว editor สำหรับตัวผมเองจะคำนึงถึง 3 หัวข้อหลักๆที่ตรงตามนิสัยการ dev ของผมนั้นก็คือ
1 ต้องโหลดเร็ว ไม่กินแรม >> คอมผมจะ 5 ปีแล้วครับ เริ่มติ่งต้อง ซุกซนหลายเวลา ดังนั้นโปรแกรมต้องเบาไม่หนักเครื่อง
2 ต้องทำ auto complete ได้เพื่อย่นระยะเวลาการเขียนโค๊ดลง ข้อนี้ประมาณว่าพิมอะไรลงไปแล้วโปรแกรมจะคอยแนะนำ syntax ให้
3 ต้องฟรี และใช้กันกว้างขวาง มี plugin เสริมการทำงานที่พัฒนาอยู่เสมอ

จาก 3 ข้อนี้โปรแกรมที่เข้ารอบมีเยอะมากเลยครับ ผมเลยตัดสินจากตัวที่ดังๆละกัน >> เผื่อเกิดปัญหา จะได้ search Google หาวิธีแก้ได้ง่ายๆ ซึ่ง editor ตัวนั้นก็คือ Notepad++ นั้นเอง

ชื่อก็บอกแล้วครับว่าบวกจากตัวเดิม 2 รอบแสดงว่าต้องเมพกว่า 2 เท่า ซึ่ง plugin ตัวนี้เยอะมากครับ ผมยังลองเล่นได้ไม่หมดเลย เดี๋ยวจะเเนะนำเอาเฉพาะตัวที่สำคัญจริงๆให้การเขียนเว็บละกันครับ

อันดับเเรกเลยมาปรับแต่งกันก่อน ผมชอบเลือกนามสกุลไฟล์ที่เกี่ยวข้องกับไฟล์ที่เราจะแก้ไขเท่านั้นครับ เพราะเวลา save เอกสารเราจะได้เลือกง่ายๆ ผมdisable ตัวอื่นเหลือแต่เท่าที่เห็นนี้ครับ คือตัวที่ผมใช้จริงๆ เลือก settings > Preference > Language Menu

ต่อมาคือการเซ็ตสีของพื้นหลังและ theme ที่จะเอาไว้แสดงผล  >> ผมขอเน้นสีมืดๆละกันครับ จะได้ช่วยถนอมสายตา เวลาจ้องมองคอมพิวเตอร์นานๆ เลือกที่ settings > เเล้วเลือก style configurtor.. ที่ช่อง select theme เลือกได้ตามใจอยากได้เลยครับ


ต่อไปเป็นตัว explror ซึ่งเป็น plugin ที่ทำให้สามารถ browse ไฟล์ได้จากเมนูทางซ้าย คล้ายๆ edit plus วิธีการ install ก็แสนง่าย ให้ไปที่ plugIn > PlugIn manager > show Plugin Manager แล้วเลือก Install ตัว Explorer จากนั้น restart โปรแกรมใหม่แล้วจะมีแถบเมนู explorer เพิ่มขึ้นมาในหมวด PlugIn คลิกเลือก Explorer.. หรือ key ctrl+alt+shift+E ก็จะใช้งานได้ทันที

ต่อไปเป็นฟังชั่น auto complete ซึ่งจะแสดง tag ที่อยู่ในฐานข้อมูลของอิดิเตอร์เอง ทำให้การเขียนโค๊ดไวมาขึ้น แต่ตัวนี้ เท่าที่ผมลองมี tag ใหม่ๆของ html5 และ css3 อยู่เหมือนกันแต่ว่าก็ไม่ได้ครบถ้วนทั้งหมด ซึ่งผมว่าก็พอแล้วสำหรับ เขียนเว็บสักเว็บนึง แต่คิดว่าอนาคตน่าจะมาอัพเดตใหม่ๆ ที่auto complete ได้ดีกว่านี้


ส่วนต่อไปผมจะปรับแต่งให้ไม่ต้องตรวจคำผิด เพราะโปรแกรมจะตรวจแม่ทั้ง string ทั้งหลายที่อยู่ใน quote ซึ่น่ารำคาญมากสำหรับผม >> เอาออกไปซะ ชื่อมันคือ DSpellCheck

ต่อไปเป็น PlugIn ชื่อ textFX เป็นตัวที่ทำให้ชีวิตง่ายขึ้นมาก เพราะจะ ไฮไลท์ tag html ที่ tag เปิดและปิดให้ ทำให้ไม่พลาดใส่ผิดแท็กอย่างแน่นอน โดยเมื่อ install ปลักอินตัวนี้มาแล้ว เลือกเมนู textFX > textFX setting > เลือก auto close XHTML/XML <tag> เวลาใช้งานก็กด ctrl + T ก็จะแสดงไฮไลท์ให้แล้ว

ต่อมาเป็น macro สคิปเล็กๆที่เรา gen ไว้สำหรับงานซ้ำๆ จะได้ไม่ต้องคลิกขวา copy แล้ววาง มันช้าให้มาโครจัดการเถอะ โดยการกด record เเล้วเริ่มทำการแก้ไขโค๊ด เมื่อแก้ไขเสร็จสิ้นก็กด stop record เพียงเท่านี้ เมื่อถึงบรรทัดที่ต้องการแก้ก็แค่คลิก playback โค๊ดที่พิมไว้ก็จะถูกวางลงทันที

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

วันอังคารที่ 27 สิงหาคม พ.ศ. 2556

อัพเดตโค๊ด Revisionล่าสุดมาMerge >> แล้วโค๊ดอะไรเปลี่ยนแปลงบ้าง


การใช้งาน Revision Control ในโปรเจกค์เขียนโปรแกรมที่มีขนาดใหญ่ถือว่าจำเป็นมาก เพราะเป็นเหมือนตัวช่วยให้เราทำงานแยกส่วนกับคนอื่นได้โดยอ้างอิงโค๊ดตรงกลาง ดังนั้นเมื่อใดก็ตามที่มีการแก้ไขไฟล์จะมีการเก็บ Log ส่วนที่เปลี่ยนแปลงไปกับ SVN ทำให้เราทราบ version ปัจจุบันว่ามีการปป.ไปถึงไหน และสามารถ revert กลับเพื่อกู้คืน version เดิมกรณีที่โค๊ดใหม่กระทบระบบส่วนรวม


แล้วเมื่อไฟล์เดียวกันถูกแก้ด้วย 2 คนหล่ะ
ถ้ามีการแก้ไขไฟล์พร้อมๆกัน คนที่ commit ไฟล์ขึ้นไปบน server ก่อนจะไม่ต้องกังวลเรื่องโค๊ดชนกัน แต่คนที่คอมมิตทีหลังจะต้อง Update โค๊ดตัวล่าสุดมาก่อน ซึ่งถ้าชนกันกับโค๊ดเดิม จะต้องเลือกโค๊ดอันใดอันหนึ่งก่อน Commit แต่ถ้าไม่ชนกันโค๊ดจะ Merge เข้าหากันทำมห้เราไม่ทราบว่า โค๊ดอะไรบ้างที่เปลี่ยนไปตามกาลเวลา


ถ้าใช้เต่า SVN (TortoiseSVN) และ plugin svn กับ visual Studio
บนโปรเจกของเราคลิกขวาที่ไฟล์ที่เพิ่ง update มาใหม่ >> เลือก Show Different from xxx.cs แล้ว SVN จะทำการเปรียบเทียบไฟล์ของเรากับ Version ล่าสุดว่ามีส่วนไหนที่แตกต่างกันบ้าง โดย

- สีเขียว : โค๊ดที่ฝั่งเราเพิ่มลงไป
- สีแดง : โค๊ดที่ฝั่งเค้ายังไม่มี หรือโดนลบ
โค๊ดในหน้าต่างทางซ้ายมือคือฝั่ง server ส่วนทางขวามือคือโค๊ดของเรา เพียงเท่านี้เราก็สามารถ อัพเดตโค๊ดแล้วเอามาดูความแตกต่างได้ง่ายๆ

นอกจากนี้ยังสามารถดูความแตกต่างของแต่ละ revision ได้ด้วยการ คลิกขวาที่หัว solution คลิก VisualSVN > Show Log.. เพื่อเเสดง Log ไฟล์ทั้งหมดที่ถูกคอมมิต > เลือกไฟล์เดียวกัน 2 ไฟล์ที่ต่าง revision > เลือก Compare  Revision จะปรากฎหน้าต่างซ้ายขวาเหมือนเดิม แต่คราวนี้จะเเสดงสีเหลืองที่โค๊ดที่แตกต่างกัน
ส่วนคำสั่ง Show different as unified diff จะใช้เพื่อแสดงเฉพาะโค๊ดตัวล่าสุดว่ามีการอัพเดตส่วนไหนไปบ้าง

พอใช้ SVN เเล้วการควบคุม version เป็นเรื่องง่ายไปเลย ยิ่งบน Windows มีเต่าSVN ที่ใช้งานง่ายมากๆ นึกถึงตอนเรียนที่พองานแต่ละคนเสร็จก็ก็อปใส่ Handy Drive มารวมกันแล้วแก้กันยาวมากๆ นึกแล้วตลกตัวเอง

วันจันทร์ที่ 26 สิงหาคม พ.ศ. 2556

รู้จักกับ ADO.Net frame work แล้วถึงตา SqlConnection บน C#


นอกจาก Modelง่ายๆของ Linq ที่พูดถึงในโพสที่ผ่านมาบน Winform ก็มีชุดคำสั่งที่ใช้ในการเชื่อมต่อฐานข้อมูลเช่นเดียวกันซึ่งไม่ได้ยากและซับซ้อนอะไรแต่จะมีข้อแตกต่างจาก Linq ที่ผมพบเจอก็คือ

1 ต้องใส่ Connecttion String ก่อนดึงข้อมูลมาแต่ละครั้ง ซึ่งน่าจะช่วยในเรื่องความปลอดภัยในการเข้าถึงข้อมูลระดับหนึ่งซึ่ง ADO.Net นั้นใช้การผูก model กับเบสตั้งแต่ครั้งแรกที่เริ่มสร้าง ทำให้การเข้าถึงนั้นง่ายเพียงแค่เรียก Data Entities ขึ้นมาแล้วอัพเดตเบสด้วยลิงคิว (เดี๋ยวศึกษาต่อเรื่อยๆครับ แล้วจะมาเล่าอีกที)
2 การคิวรี่ต้องใช้ string ที่เป็นภาษา sql นั้นคือจะรู้ว่าคิวรี่ถูกหรือผิดนั้นต้อง execute query ก่อนเพื่อรับผลลัพธ์มา แต่ ถ้าเป็น Linq จะง่ายกว่าเยอะ เพราะสามารถselectข้อมูลสดๆมาและรู้ด้วยว่ามีคอลัมม์ไหนบ้างบนฐานข้อมูล ซึ่งช่วยย่นเวลาได้เยอะทีเดียว


โค๊ดที่ใช้เรียกข้อมูลก็ง่ายๆ ไม่กี่ step ตามนี้
import libary โดย using System.Data.SqlClient;

ใช้ class SqlConnection สร้างคอเน็กชั่นใหม่ขึ้นมา
SqlConnection sqlConn = new SqlConnection(ConnectionString);
โดยพารามิเตอร์ของ  ConnectionString มีดังนี้
1 Host Server ที่ต้องการ connect : Data Source
2 ฐานข้อมูลที่จะ connect : Initial Catalog
3 Username ของ host server : User ID
4 Password ของ Host server : Password



หลังจากนั้นทดลองรันโปรแกรมเพื่อคอเน็คทดสอบดูครับ ถ้าไม่เป็ค่า Null แสดงว่า Connect สมบูรณ์

ถ้าผ่านมาได้อย่างสมบูรณ์จนถึงขั้นตอนนี้ ก็เริ่มต้นดึงข้อมูลได้เลย เริ่มจากการ open Connection ก่อน
sqlConn.Open();
แล้วสร้างคำสั่ง sql โดยสร้างจาก class : SqlCommand
SqlCommand sqlComm = new SqlCommand();
แล้วทดสอบคิวรี่select ง่ายๆจากตาราง User ที่ผมสร้างไว้ในเบสด้วยคิวรี่นี้
"SELECT * FROM [dbo].[User]" >> เลือกทุกอย่างที่อยู่ในตาราง User

เสร็จแล้วเราจะได้ผลลัพออกมา ส่งต่อให้กับตัวแปร reader ของ class SqlDataReader ซึ่งเป็นคลาสที่รองรับการอ่านค่าจากฐานข้อมูลซึ่งมีลักษณะตัวแปรเป็น Array นั่นหมายความว่าเราสามารถอ้างอิงตัวแปรแต่ละช่องได้โดย ชี้อินเด็กไปอ้างอิงเเต่ละ column นอกจากนี้ ยังมีคำสั่งง่ายๆให้การตรวจสอบว่าคิวรี่ที่ส่งไป return ข้อมูลกลับมาไหม ด้วยคำสั้ง

reader.HasRows ซึ่งจะ >= 1 ถ้ามีข้อมูลรีเทิร์นกลับ

ข้างล่างนี้เป็น โค๊ดสมบูรณ์ ลองโหลดไปทดลองดูกันได้ครับ กับ SQLบน windows application

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleSqlConnect
{
    class Program
    {
        static void Main(string[] args)
        {
            string table = "[dbo].[User]";
            SqlDataReader reader = null;
            string ConnectionString = GetConnectionString();
            SqlConnection sqlConn = new SqlConnection(ConnectionString);
            try
            {
                sqlConn.Open();
                Console.WriteLine("Connected");
                using (SqlCommand sqlComm = new SqlCommand())
                {
                string query = string.Concat("SELECT * FROM "+table);
                sqlComm.CommandText = query;
                sqlComm.CommandType = CommandType.Text;
                sqlComm.Connection = sqlConn;

                reader = sqlComm.ExecuteReader(); // exe query
             
                    while (reader.Read())
                    {
                        Console.WriteLine(reader[0] + " " + reader[1] + " " + reader[2]);
                    }
                }
                sqlConn.Close();
                 
            }
            catch(Exception ex)
            {
                Console.WriteLine("Connect fail");
            }
            Console.ReadLine();
        }

        private static string GetConnectionString()
        {
            string strConnect = "";

            string localhost = "(local)";
            string userName  = "sa";
            string Password  = "12345";
            string Catalog   = "Sample";

            strConnect = "Data Source=" + localhost + ";Initial Catalog=" + Catalog + ";User ID=" + userName + ";Password=" + Password + "";
            return strConnect;
        }
    }
}

วันอาทิตย์ที่ 25 สิงหาคม พ.ศ. 2556

วิธีการเป็น Administrator บน PC ของตัวเอง

ผมว่าออกจะน่าขำไปสักนิด กับการที่เครื่องคอมพิวเตอร์ของตัวเองแท้ๆแต่กลับ log in เข้าใช้ได้เพียง User ธรรมดาซึ่งจะโดนจำกับสิทธิในการการทำที่มีการดัดแปลงระบบทั้งหมด ซึ่งต้องมานั่งคอยคลิกขวา run as administrator เพื่อใช้งานบางฟังชั่นของ Windows ได้ครบ


เรื่องมีอยู่ว่าผมต้องการลบ assembly ตัวหนึ่งที่อยู่ใน drive C:/Windows/assembly ซึ่งผมทำการ Uninstall โปรแกรมไม่สมบูรณืเองทำให้ไม่ได้ล้างค่าใน assembly ไปด้วย ดังนั้นพอรันโปรแกรมผมเลยมีปัญหาว่ายังเห็นเอสเซมบรี่ตัวเก่าอยู่ซึ่งเวอร์ชั่นที่ซ้ำกันทำให้ทำงานต่อไม่ได้(เลือกไม่ได้ว่างั้น)

การลบต้องการสิทธิของ admin ซึ่งทดลองรัน as admin ด้วย Expplorer แล้วลองลบดูก็ยัง access denied
อ้าวงี้กวนละครับคุณ win7 ไม่ได้ให้สิทธิแอดมินจริงๆกับเรา แบบนี้ต้องเจอไม่เด็ด เปิด cmd(command promt) ด้วยสิทธิ admin ขึ้นมาก่อน ถ้าเปิดถูก location ปัจจุบันจะอยู่ที่ C:/Windows/system32

แล้วจัดโค๊ดชุดนี้ลงไปเลยครับ : net user administrator /active:yes


เท่านี้ครับเราก็เพิ่ม User ที่เป็น admin ขึ้นมาได้แล้ว >> ทำการ switch user ไป log on ที่ Administrtor

เเล้วสิทธิทั้งหมดก็เป็นของเรา ตอนนี้เราก็สามารถทำการ แก้ไข ดัดแปลงทุกสิ่งอย่างได้ตามใจอยากเลยครับ อย่างผมอยากลบ assembly กวนใจก็ไม่ใช่ปัญหาอีกต่อไป

ถ้าต้องการเอาสิทธิแอดมินออกก็เพียงเปลี่ยนคำสั่งเดิมจาก Yes เป็น No

วันอังคารที่ 28 พฤษภาคม พ.ศ. 2556

ลบ .Bak แสนกวนใจใน Edit Plus

ลบ .Bak แสนกวนใจใน Edit Plus

สำหรับใครที่ใช้ Edit plus เป็น Editor ในการเขียนโค๊ดไม่ว่าจะเป็น html php c/c++ java ต้องมีไม่มากก็น้อยที่รู้สึกรำคาญเวลาที่
เจ้าอิดิทเตอร์ตัวนี้สำรองไฟล์ให้เรา (ช่างรู้ใจจริงๆ) แต่บางครั้งเราก็อยากปิดฟังชั่นนี้ออกไป โดยเฉพาะผมที่ใช้เขียนเว็บอยู่บ่อยๆ เวลาอัพโหลดข้อมูลขึ้นโฮสหลายๆไฟล์จะรู้สึกรำคาญมาก
เพราะต้องนั่งเลือกไฟล์ที่ไม่ใช้ .bak เท่านั้น >> จะได้ไม่หนักโฮสด้วย

วันนี้เลยมีวิธีง่ายๆ มาแบ่งปันเป็นวิธีปิด auto backup file นามสกุล .bak ของ Edit Plus ตามขั้นตอนดังนี้เลยครับ
ไปที่ tool > preference > ทางด้านซ้ายจะมี catagories ให้เลือกคลิกที่แท๊ป File แล้วติกคำว่า
Create backup wher saving ออก เพียงเท่านี้ไฟล์แบ็คอัพกวนใจก็จะหาไปในทันที


วันจันทร์ที่ 27 พฤษภาคม พ.ศ. 2556

จับผิด ถ้าคิดแอบใช้คอมเรา ด้วย Event Log

เคยสงสัยกันไหมว่า ตอนเราไม่อยู่มีใครมาแอบเล่นคิมพิวเตอร์ของเราหรือเปล่า บางทีอาจเป็นเพื่อนของเรา หรือคนรู้จักอื่นๆ
ซึ่งเราก็ไม่ได้ซีเรียสอะไรกับเรื่องพวกนี้หรอก แต่..รู้ไว้ก็ดีเหมือนกันว่า "คอมพิวเตอร์ของเรา turn on เวลาไหนบ้าง"

อันดับแรกผมอยากแนะนำให้รู้จัก administrator tools ซึ่งเป็นเครื่องไม้เครื่องมือที่เป็นประโยชน์มากสำหรับการจัดการ
บนระบบของเรา คลิก start แล้ว search คำว่า "administrator tools" คลิกผลการค้นหาแรกจะเข้าสู่หน้าต่างดังรูป



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

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

ทีนี่ให้ลองสังเกตุ เวลาที่เกิด event แต่ละตัวขึ้นในคอลัม Date ซึ่งจะบอกข้อมูลละเอียดถึงเวฃาที่เกิดขึ้นด้วย เราสามารถนำไปประยุกต์คือ "ช่วงที่เราไม่ได้เล่นคอม
จะต้องไม่มี log ในช่วงนั้น"


ทางขวามือจะมี Filter เอาไว้กรองข้อมูลว่าจะเอาเฉพาะอะไรบ้าง จากรูปจะเห็นว่ามีให้คลิดคือ Critical , Warning , Verbose, Error, Information
นอกจากนี้ ยังใส่ keyword เฉพาะที่ทำให้การค้นหาเป็นเรื่องง่ายขึ้น

เท่านี้ครับเราก็สามารถตรวจสอบการเข้าใช้งานคอมพิวเตอร์ด้วยวิธีง่ายๆ

วันพฤหัสบดีที่ 16 พฤษภาคม พ.ศ. 2556

เรื่องของ MyComputer ที่อาจยังไม่รู้

ตอน uninstall โปรแกรมเข้ากันยังไงครับ ยังเป็นแบบนี้อยู่หรือเปล่า Start > Control Panel > Program and Feature ถึงจะเจอหน้าลิสต์โปรแกรม

ตอนดูสเปกเครื่อง ทำกันยังไงครับ Start > คลิกขวาที่ My Computer > Properties กันอยู่ใช่ไหม

มันมีวิธีเข้าที่ไวกว่านั้นครับ วันนี้จะมาแนะนำ เพียงเเค่เข้า My Computer แค่ครั้งเดียว ทุกหน้าก็จะมาอยู่ในมือเรา แหะๆ มาดูกัน


ที่ผมขีดเส้นใต้สีแดงๆ ไว้นั่นแหละครับ
-System Properties : ก็คือการดูสเปกเครื่องคอมเราว่า cpu อะไร ram เท่าไหร่
-Uninstall or Change a program : คือ Uninstall ดีๆนี้เอง เข้าง่ายๆได้ที่นี้เลย
-Map Network drive : คือการเลือก Drive ให้ยิงไปโฟลเดอร์ที่เรากำหนดไว้ อันนี้เล่นระวังๆด้วย
- Open Control panel : ความหมายตรงตัวครับ เปิดคอนโทรพาเนล

May be like this posts