19 May 2010

Show Destktop ที่ Quick Lunch หาย

บางที หลายๆที หรืออาจจะซักสิบยี่สิบที ที่พอจะกด Start แล้วดันไปลาก Show Desktop ออกมาด้วยพอลากกลับดันกลายเป็นแ่่ค่ Shortcut เท่านั้น สำหรับอาการแบบนี้สามารถแก้ได้ครับ ไม่ยากเลย

ไปที่ C:\Documents and Settings\[ตรงนี้ใส่ Username ที่ login เข้าใช้]\Application Data\Microsoft\Internet Explorer\Quick Launch

สร้าง New File ขึ้นมาเซฟเป็น Show Desktop.SCF แล้วก็ใส่เนื้อหาสาระให้มันดังนี้ครับ

[Shell]
Command=2
IconFile=explorer.exe,3
[Taskbar]
Command=ToggleDesktop

เพียงเท่านี้แล้วเจ้า Show Desktop ผู้น่ารักก็กลับประจำตำแหน่งอย่างเดิมแร้วววววว ^^"

08 May 2010

ตั่งค่าระบบ Traffic shaping บน m0n0wall อย่างชาญฉลาด

เนื่องจากบทความต้นฉบับนั้นไม่มีภาพแล้วและผมเองก็หาภาพจากที่อื่นไม่ได้นะครับ ส่วนที่เป็นภาพจะปล่อยว่างไว้ตามเดิมนะครับ

สวัสดีครับ ^^ พบกันอีกครั้งกับบทความภาคต่อซึ่งกว่าจะออกแสนยาวนาน รอกันจนขี้เกลือขึ้นหมดแล้วแฮ่ๆ ขอบคุณสำหรับท่านที่ยังรอครับก็เป็นเวลาเกือบหนึ่งเดือนเต็มๆ ที่ผมหายหน้าหายตาไป ถึงแม้จริงๆ ก็ไม่ได้ไปไหนไกลครับยังคงสถิตอยู่ในบอร์ด เอดีเอสเอลไทยแลนด์เหมือนเดิม เพียงแต่จะแค่เข้ามาดูและตอบบ้างเล็กน้อยเท่านั้น ก็คงจะแก้ตัวเป็นอย่างอื่นไปไม่ได้ พูดได้อย่างเดียวว่าติด เรื่องส่วนตัวไม่ส่วนตัวเกือบหนึ่งเดือนเต็มๆ ทั้งเรื่องเรียน ด้วยเรื่องงานพิเศษและอีกสารพัด (แก้ตัวได้เนียนมาฮ่าๆ) ด้วยเหตุนี้ผมเลยไม่ได้ค่อยมีเวลาว่างและสมองว่างๆมาคิดเขียนอะไรที่มีสาระสักเท่าไหร่ และก็ได้ตัดสินใจเขียนใหม่อยู่หลายต่อหลายครั้ง เพราะดูแล้วจากข้อมูลที่หามาหลายแหล่งนั้นผมก็เข้าใจแต่ก็ไม่รู้จะอธิบายให้เหมาะอย่างไรดีรวมถึงการทำรูปประกอบซึ้ง ผมเองก็ห่วยเรื่องวาดรูปเป็นหนี้เดิมอยู่แล้ว ดันต้องมาเขียนรูปประกอบให้คนอื่นเข้าใจยิ่งไปกันใหญ่ วาดเองยังงงเองเลย ส่วนอะไรที่ผิดพลาดในบทความนี้ ท่านผู้รู้ช่วยให้คำแนะนำด้วยนะครับหลายๆ ท่านคงประสบปัญหาอาการ "แล็ก" (Lag) ของเกมส์ออนไลน์ เมื่อน้องที่เล่นอยู่อีกเครื่องเปิดเว็บขณะที่ตัวเองกำลังมันส์กับเกม FPSหรือน้องขอท่านจะกลายร่างทันที เมื่อตัวท่านเองเปิดเว็บเพื่อทำรายงาน ในขณะที่น้องเล่นเกมออนไลน์ และยิ่งไปกว่านั้นหากใครที่เปิดร้าน เกมส์+อินเทอร์เน็ต คงไม่มีลูกค้ากลับมาใช้บริการอีกเป็นแน่ หากปล่อยให้เกมเกิดอาการแล็ก โดยสาเหตุเพียงแค่คนในร้านเปิดเว็บทำให้ในปัจจุบันนี้ร้านส่วนใหญ่จะติดตั่ง ADSL ไว้ถึง 2 คู่สาย เพื่อแยกเกมและบริการอื่นๆ ออกจากกันหรือที่หนักกว่านั้น คือบางร้านนั้นไม่ยอมให้ลูกค้าเล่นอินเทอร์เน็ตเลย หากที่กล่าวมาทั้งหมดนี้ได้เป็นส่วนหนึ่งของปัญหาที่ท่านกำลังประสพอยู่ ระบบ Traffic shapingออพชั่นจาก m0n0wall ตัวเก่งนี้ อาจจะเป็นทางเลือกที่จะช่วยท่านได้ครับ

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

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

ทำ ADSL Router/Firewall ประสิทธิภาพสูงด้วย M0n0wall จาก PC


สำหรับผมและอีกหลายๆ คนที่ใช้ ADSL Modem/Router ราคา 4-5 พันบาทที่วางขายกันเกลื่อนในตอนนี้ อาจจะเคยประสพปัญหาน่ารำคาญบางประการ เช่นอาการค้างแบบไร้เหตุผล, เข้าหน้าเวบที่ใช้ตั่งค่าไม่ได้ หลุดบ่อยทั้งๆ ที่สัญญาณไม่มีปัญหา และอีกหลายๆ อาการที่ไม่พึงประสงค์ โดยเฉพาะร้านเกมส์มันจะ กลายเป็นปัญหาใหญ่เลย

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

จากผมที่เคยลองมาหลายยี่ห่อ ADSL Modem/Router ที่ขายอยู่ในตลาดปัจจุบัน ทำงานได้แค่พอใช้ได้ เท่านั้น ปัญหาที่เกิดขึ้นทำให้ผมเบื่อไม่น้อยเลย เงินก็เสียไปแล้ว ยังได้ของห่วยมาอีก ผมก็เลยลองหาวิธี หลายวิธีที่จะแก้ปัญหาจนผมค้นพบ Software router ที่สามารถเปลี่ยน PC เก่าๆ ที่อยู่ในห้องเก็บของมา เป็น ADSL Router/Firewall ที่มีประสิทธิภาพรองรับงานหนักๆ ได้สบายๆ โดยไม่จำเป็นต้องใช้เครื่องหรูๆ ที่ไหนมันก็คือ m0n0wall นั่นเอง (จริงๆ แล้วมันมีอีกหลายตัวเลย แต่ผมลองแล้วไม่ประทับใจครับ)

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

อุปกรณ์ที่จำเป็นสำหรับเป็นส่วน ประกอบใช้ในการทำ PC Router/Firewall ด้วย m0n0wall
ถ้าหากขาดเหลืออะไร Pantip ชั้น 4 มือสองมีขายครับลองเดินดูมีเพียบเลย แต่หากว่าไม่มีอะไรเลยแนะนำอย่าทำดีกว่า เดี๋ยวจะเสียเงินมากไปโดยใช่เหตุ แต่ถ้ากระเป๋าหนักก็ตามสบาย คนมันรวยทำอะไรก็ไม่น่าเกลียดหรอกครับจริงไหม?

MASM & WinAsm Studio

ลองมาเล่นด้าน asm ดูบ้างได้ลองจับเจ้า masm ดูก็สนุกดีนะ การเขียนสามารถใช้ api ของ windows ได้เลยสำหรับบทความก็จะเป็นการติดตั้ง masm แล้วเซ็ตค่าให้ใช้งานได้กับ WinAsm Studio ก่อนอื่นก็โหลดเจ้า MASM กับ WinASM Studio ตามลิงค์นี้เลยครับ

เมื่องโหลดไฟล์ masm แล้วให้ทำการแตกไฟล์ออกมาจะเจอกับไฟล์ install.exe ก็ดับเบิลคลิกมันเลยครับ
หลังจากดับเบิลคลิกให้เลือกไดรฟ์ที่จะทำการติดตั้งแ้ล้วกด Start โปรแกรมจะทำการติดตั้งให้เราจนเสร็จครับ

สำหรับ WinASM Studio นั้นเมื่อแตกไฟลืออกมาจะสามารถใช้งานได้ทันทีโดยให้แตกไฟล์ไปที่ C:\Program Files หรือที่อื่นตามต้องการครับ แล้วให้เปิดโปรแกรมโดยเปิดจากไฟล์ WinASM.exe จากนั้นเข้าไปที่ Tool->Option แล้วเลือกแท็บ Files & Path ตั้งค่าตามภาพครับ


สำหรับบรรทัดสุดท้ายหัวข้อ Projects Path นั้นคือที่เก็บไฟล์โปรเจคให้เป็นชื่ออื่นก็ได้ตามต้องการครับแค่นี้เราก็ได้ IDE ที่สามารถใช้งาน MASM ได้แล้วครับ

07 May 2010

x86 calling Convention

หลายคนอาจจะไม่ทราบ ว่า keyword พวก __stdcall, __cdecl, __fastcall, __thiscall พวกนี้มันคืออะไรหรือแตกต่างกันยังไง ซึงมันก็คือ Calling Convention มันเป็นรูปแบบของการเรียกฟังชั่น ว่าจะส่ง parameter ไปแบบไหน และจะจัดการกับ stack ที่ใช้ส่ง parameter ยังไง สำหรับวิธีใช้งานมันนั้น จะใส่ไว้ระหว่างชื่อฟังชั่นและชนิดตัวแปรที่รีเทิน ยกตัวอย่างเช่นการใช้ __stdcall

void __stdcall foo()

__stdcall
อันนี้เป็นแบบ standard ของ Windows API การส่ง parameter จะส่งผ่านทาง stack โดยจะ push parameter จากขวามาซ้าย (จากหลังมาหน้านั่นละ) ตัวฟังชั่นจะเคลียร์ stack ที่ใช้ส่ง parameter เอง ดังนั้น จะไม่สามารถใช้ va_arg (ฟังชั่นที่สามารถส่ง parameter ได้ไม่จำกัด ยกตัวอย่างเช่น printf) กับฟังชั่นประเภทนี้ได้ เพราะตัวฟังชั่นต้องรู้จำนวนที่แน่นอนของ parameter ที่ส่งไป ข้อดีคือ ส่วนมากฟังชั่นประเภทนี้จะใช้ instruction ret ในการเคลียร์ stack หลังจากเรียกฟังชั่นแล้วไม่ต้องมาเสียเวลาเคลียร์ stack ตัวอย่างการเรียกฟังชั่นประเภทนี้

push param3
push param2
push param1
call function

__cdecl
อันนี้เป็นแบบ standard ของภาษา C/C++ การส่ง parameter จะเหมือนกันกับ __stdcall จะต่างกันตรงที่ฟังชั่นจะไม่เคลียร์ stack ที่ใช้ส่ง parameter จุดที่เรียกฟังชั่นต้องเคลียร์ stack เอง ข้อดีคือ สามารถทำให้ฟังชั่นใช้ va_arg ได้ ตัวอย่างการเรียกฟังชั่นประเภทนี้
push param3
push param2
push param1
call function
add esp, 12

__fastcall
การส่ง parameter จะคล้ายๆกับ __cdecl แต่จะต่างกันตรงที่ parameter แรกจะส่งผ่านทาง Register ECX กับ parameter สองจะส่งผ่านทาง Register EDX สำหรับ Borland C++ จะส่ง parameter ที่สามผ่านทาง Register EAX ส่วน parameter ที่เหลือจะส่งผ่านทาง stack เหมือนกันกับ __cdecl และ __stdcall ตัวฟังชั่นจะไม่เคลียร์ stack เหมือนกับ __cdecl ข้อดีคือ ทำงานได้เร็วหาก parameter ที่จะส่งไปให้ฟังชั่นมีแค่ 2 ตัว (3 ตัวสำหรับ Borland C++) ตัวอย่างการเรียกฟังชั่นประเภทนี้ของ Visual C++

push param3
mov edx, param2
mov ecx, param1
call function
add esp, 4

__thiscall
อันนี้จะเป็นชนิดพิเศษ เราไม่ต้องใส่ keyword อันนี้ เพราะเป็นรูปแบบการเรียก method ของ class ที่ไม่ใช่ static และสามารถรวมร่างกับ 3 แบบข้างบนได้! การส่ง parameter จะขึ้นอยู่กับว่าเราให้มันรวมร่างกับแบบไหน ตัว Object ที่เรียก method จะถูกส่งผ่านทาง Register ECX (ส่งไปแบบ pointer keyword this ใน method มันคือ ECX นี่ละ) หากเรารวมร่างมันเข้ากับแบบ __fastcall parameter แรกจะกลายเป็น EDX แทน (เพราะ ECX โดน Object เอาไปกิน) ส่วนการเคลียร์ stack จะขึ้นอยู่กับว่ารวมร่างกับแบบไหนเช่นกัน

ส่วนค่าที่รีเทินมาจากทุกแบบ หากเป็นจำนวนเต็ม จะผ่านทาง Register EAX หากค่าที่จะรีเทินเป็น 64 บิท จะรีเทินผ่าน Register EAX กับ EDX หากค่าที่รีเทินเป็นทศนิยมจะรีเทินผ่านทาง Floating Point Stack ST(0) แต่ละแบบจะมีข้อดีแตกต่างกันออกไป หากฟังชั่นไม่ได้ใช้ va_arg ควรจะใช้ __stdcall เนื่องจากมันน่าจะเร็วกว่า __cdecl ตอนเคลียร์ stack แต่หากฟังชั่นใช้ va_arg ควรจะใช้ __cdecl ถ้าหากฟังชั่นส่ง parameter ไป 1 หรือ 2 ตัว (หรือ 3 ตัวสำหรับ Borland C++) ควรจะใช้ __fastcall

ที่มา : http://thaikore.spaces.live.com/blog/cns!C2E9AE9782AA6173!201.entry