January 27, 2012

Visual Basic: การวนซ้ำแบบอื่นๆ

นอกเหนือจากการวน for ที่ทราบจำนวนครั้งแน่นอนแล้ว มีการวนแบบ while ที่ไม่จำเป็นต้องรู้จำนวนครั้งก่อนวน

ซึ่งจะให้ผลลัพท์ออกมาเป็นการวนพิมพ์ค่าตั้งแต่เลข 0 ถึงเลข 4 ครับ



นอกจากนี้ Visual Basic มันยังมี do loop แยกออกมาอีกต่างหากด้วย ซึ่งการใช้นั้นจะเหมือนกับ while เลย เพียงแต่สามารถควบคุมการวนได้มากกว่า เช่น
และยังมี until ซึ่งมีหลักการทำงานสลับข้างกับ while ตรงที่ until จะเข้าไปวนซ้ำเมื่อเงื่อนไขเป็น False และหลุดการวนเมื่อเป็น True ครับ


นอกจากนี้ เรายังสามารถสั่งให้ทำการวนอย่างแน่นอน 1 ครั้ง (ไม่ว่าเงื่อนไขตั้งต้นจะเป็นอย่างไร) ก่อนที่จะเริ่มตรวจแล้ววนซ้ำตามปรกติก็ได้

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

January 20, 2012

Visual Basic: จัดการกับทางเลือก และการวนอย่างง่าย

จากตอนก่อน เมื่อเรารู้จักกับบูลีนแล้ว เราก็สามารถจัด control flow ของโปรแกรมได้

การเขียน if - else if - else ก็เหมือนทั่วไปครับ
หรือจะเช็คแบบ switch case ก็ได้ครับ
ความต่างจากภาษาอื่นๆ คือ จบแต่ละ case ไม่ต้องสั่ง break ออกมา มันจะทำแค่อันแรกที่เจอเท่านั้น



ส่วนการวน for ทำได้โดย

สังเกตว่าตอนจบคำสั่งด้วย Next จะมีตัวแปรห้อยอยู่ ตรงนี้ไม่ต้องใส่ตัวแปรก็ได้นะครับ แต่จะใส่เพื่อให้อ่านง่ายในกรณีที่ซ้อน for หลายชั้นก็ไม่ว่ากัน

ส่วนการข้ามการทำงาน หรือเช็คเพื่อออกจาก for ทันที

PHP: ทำความรู้จักกับ PHP

คุณ neizod ถามว่าสนใจจะลองเขียนดูไหม ผมเลยลองกับ PHP เพราะคิดว่าเป็นภาษาที่ถนัดที่สุด (ถ้าไม่นับ HTML/CSS นะ)

PHP เป็นภาษาที่ใช้ในงานด้านเว็บเพจ เพื่อสร้างหน้าเว็บแบบไดนามิค และทำงานฝั่งเซิฟเวอร์เป็นหลัก แต่ก็สามารถทำงานบน command line ได้ ทำงานเป็นโปรแกรม GUI แบบ standalone (WinBinder/PHP-GTK) ก็ได้ ถ้า... บ้าพอ

PHP ทำงานแบบ interpreter (แปลทีละบรรทัด ขณะทำงาน) และมีภาษาที่ใกล้เคียงคือ ASP ของ Microsoft

PHP นั้นใช้ระบบตัวแปรแบบ Dynamic Typing (เปลี่ยนชนิดตัวแปรขณะที่ทำงานได้) และ Weak Typing (เปลี่ยนชนิดของค่าในตัวแปรอัตโนมัติ, ไม่จำเป็นต้องกำหนดชนิดตัวแปรก่อนแปลงค่า) สามารถเขียนได้ทั้งแบบ Functional และแบบ OOP ถ้าเขียนสคริปท์สั้น ๆ จะใช้ functional ก็ได้ แต่ถ้าเป็นโปรเจ็คขนาดใหญ่แนะนำให้ใช้แบบ OOP

ประวัติโดยย่อ

  • 1994: คุณ Rasmus Lerdoft ให้กำเนิด PHP ในฐานะสคริปท์ของ Perl ที่ชื่อว่า Personal Home Page Tools
  • 1995: PHP ถูกเขียนใหม่โดยใช้ภาษา C แบบ CGI เป็นรุ่น 1.0 โดยมีฟังชั่นพื้นฐานเหมือนกับ PHP ปัจจุบัน, ใช้ตัวแปรแบบ Perl, ฝัง HTML ลงไปได้, รองรับฟอร์ม
  • 1997: คุณ Zeev Suraski และ Andi Gutmans เขียน parser ของ PHP ใหม่ และใช้เป็นฐานของ PHP 3 และเปลี่ยนชื่อเป็นแบบ recursive ว่า PHP: Hypertext Preprocessor ซึ่งปล่อยออกมาในปี 1998
  • 1999: สร้าง Zend Engine (Zend เป็นคำที่มาจาก Zeev และ Andi)
  • 2000: ปล่อย PHP4 ใช้ Zend Engine 1.0
  • 2004: ปล่อย PHP5 ใช้ Zend Engine II และสนับสนุน OOP

PHP รุ่นล่าสุด (official) ตอนที่เขียนคือ 5.3.9 แต่ก็ต้องดูด้วยว่าเซิฟเวอร์ที่เราใช้นั้น ใช้ PHP รุ่นไหนอยู่

Hello World

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

เมื่อเรียบร้อยแล้วก็เปิด Text Editor ขึ้นมาใช้ตามสะดวก แล้วพิมพ์

บันทึกเป็นไฟล์ชื่อ hello.php แล้วอัพโหลด หรือเก็บไว้ในโพลเดอร์ที่ Apache สามารถเข้าถึงได้ (ถ้าเป็น XAMPP จะอยู่ที่ .../xampp/htdocs/ ถ้าเป็น Apache บน Linux ที่ไม่ได้ปรับแต่งอะไรจะเป็น /var/www/) เปิดเบราว์เซอร์ไปที่ http://localhost/hello.php (หากเก็บไว้ในไดเร็คทอรี่ย่อยอื่น ๆ ก็ต้องพิมพ์ให้ตามนั้น) เบราว์เซอร์จะแสดง Hello World! สีดำบนพื้นสีขาวให้

แถม: ถ้าต้องการดูรายละเอียดของเว็บเซิฟเวอร์ที่ใช้ รวมทั้งรุ่นของ PHP ให้ใช้ phpinfo()

January 17, 2012

Visual Basic: ตรรกะการเปรียบเทียบ

ใน Visual Basic ค่าความจริงก็ตรงตัวที่ใช้คำว่า True กับ False ครับ

ความแตกต่างที่แปลกประหลาดไปจากภาษาอื่นคือ การ implement ค่า True ด้วย -1 เนื่องจากบูลีนมีขนาด 16 บิทนั่นเอง

ส่วนการดำเนินการทางตรรกะ ก็ใช้คำในภาษาอังกฤษตรงตัวไปมาเช่นกัน



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

ด้วยเหตุผลนี้ มันจึงไม่มีการกำหนดค่าเดียวกันให้ตัวแปรหลายๆ ตัวพร้อมกัน

ส่วนการเปรียบเทียบแบบไม่เท่ากับ, มากกว่า, น้อยกว่าเป็นดังนี้



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

January 15, 2012

Visual Basic: ตัวดำเนินการพื้นฐาน

สำหรับตัวดำเนินการบวก ลบ คูณ หาร (และหารปัดเศษทิ้ง)

อย่างไรก็ตาม การหารธรรมดาแล้วเก็บค่าเข้าไว้ในตัวแปร Integer จะส่งผลลัพท์เป็นจำนวนเต็มปัดเศษที่ 0.5



ส่วนการหารเก็บเศษนั้น จะพิจารณาเครื่องหมายของผลลัพท์จากตัวตั้งเท่านั้น



ส่วนตัวแปรแบบข้อความนั้น การนำมาเชื่อมกันทำได้โดย



สุดท้าย เราสามารถ assign ค่าให้ตัวแปรเดิมได้เช่นภาษาอื่นๆ ทั่วไปครับ

Python: เขียนตัวก่อกำเนิดขั้นสูง

โดยปรกติแล้ว ในฟังก์ชันหนึ่งๆ จะจบการทำงานทันทีที่เจอ return ตัวแรก นั่นคือการคืนค่าเพียง 1 เดียวของมัน

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



ในการใช้งาน generator นั้น ปรกติเราจะเรียกมันผ่าน iterator ทั้งหลายอยู่แล้ว เช่น

แต่ถ้าต้องการเรียก generator เป็น object ตรงๆ เพื่อควบคุมการดึงค่าออกมาให้ได้มากขึ้น ก็สามารถทำได้โดย



ข้อดีของมันเหนือการสร้างฟังก์ชันที่วิ่งวนหาค่าที่ต้องการทุกตัวแล้วส่งคืนมาเป็น list คือ generator จะทำงานเท่าที่ร้องขอเท่านั้น lazy evaluation ในรอบการทำงานหนึ่งๆ เมื่อเจอ keyword yield ก็จะหยุดพัก จนกว่าจะถูกเรียกอีกโดย __next__() มันถึงจะวิ่งไปหา yield ตัวถัดไป ทำให้ประหยัดหน่วยความจำมากกว่าการเตรียมทุกค่าไว้ก่อน แถมยังประหยัดเวลาอีกด้วยในกรณีที่มีการ break ออกจาก iterator

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

January 14, 2012

Python: ตรวจรูปแบบการเขียนด้วย pep8

PEP หรือ Python Enhancement Proposal คือข้อเขียน/ข้อเสนอโครงการสำหรับปรับปรุงเพิ่มความสามารถ Python ให้ดีขึ้น โดยที่ PEP 8 นั้นเป็นข้อเขียนสำหรับ coding standard ของ Python ที่เราควรยึดถือ

แน่นอนว่าเราควรเขียน code ตาม coding standard ที่วางไว้ แต่บางครั้งก็มีพลาดบ้าง เราสามารถเรียกโปรแกรม pep8 เพื่อตรวจสอบการเขียนได้ครับ

ก่อนอื่น (ฝั่ง Linux) ใช้ apt-get เพื่อดาวน์โหลด pep8 เรียบร้อยแล้วหาไฟล์ script.py ที่เราต้องการตรวจ แล้วสั่ง

สำหรับฝั่ง Windows ที่ไม่มี apt-get ก็สามารถใช้โปรแกรมนี้ได้เช่นกัน โดยการดาวน์โหลดไฟล์ pep8.py จาก Github แต่เวลาจะสั่งงานจะยุ่งยากกว่าเดิมเล็กน้อย ดังนี้

และต้องอย่าลืม copy ไฟล์ pep8.py ไปไว้ยังโฟลเดอร์เดียวกันกับไฟล์ที่ต้องการตรวจสอบด้วยครับ



หลังจากสั่งตรวจสอบไฟล์ script.py แล้ว ถ้าเราเขียนได้เรียบร้อยดีไม่มีปัญหา โปรแกรมจะไม่พิมพ์อะไรออกมาเลย (ตามสไตล์ของโปรแกรม Unix) แต่ถ้ายังมีรูปแบบการพิมพ์ที่ไม่ได้มาตรฐานอยู่ โปรแกรมจะพิมพ์ผลลัพท์ออกมาในรูปแบบนี้

เช่น

ทั้งนี้ เราอาจเห็นว่า error มีน้อย นั่นก็เพราะว่ามันจะแสดงข้อผิดพลาดที่ซ้ำๆ กัน (อย่างเช่นการใช้ tab) เพียงแค่ครั้งแรกครั้งเดียวครับ



เมื่อต้องการ option เพิ่ม เราสามารถขอดู help ได้เช่นโปรแกรม Unix ทั่วไป

option ที่สำคัญได้แก่
  • -v พิมพ์สถานะการทำงานออกมาเรื่อยๆ
  • -q แสดงแค่ชื่อไฟล์ที่มีข้อผิดพลาด มักใช้ในกรณี test หลายๆ ไฟล์
  • -r แสดงจุดที่ผิดพลาดทั้งหมด ไม่ใช่แค่ครั้งแรกที่เจอ
  • --show-source แสดง code ต้นฉบับด้วยเลยว่าผิดตรงไหน
  • --show-pep8 แสดงข้อแนะนำจาก PEP 8 ว่าควรเขียน code อย่างไร
  • --count นับว่าเขียนผิดทั้งหมดกี่จุด

อย่างไรก็ดี พึงระลึกไว้เสมอว่า pep8 เป็นเครื่องมือตรวจสอบความถูกต้องของ coding standard เท่านั้น code ที่เขียนผิดจน run ไม่ผ่านอาจไม่แสดง error ใน pep8 เลยก็ได้ครับ

January 13, 2012

Visual Basic: ตัวเลขและข้อความ

ก่อนจะใช้ตัวแปรใดๆ เราต้องประกาศชนิดของข้อมูลเสมอ เช่น

ตัวแปรที่ไม่ถูกำหนดค่าตั้งแต่เริ่ม จะมีค่าเป็นค่าตั้งต้นของมัน เช่น n ในตัวอย่างนี้จะมีค่าเริ่มต้นเป็น 0



ตัวแปรแบบตัวเลข มี 2 แบบหลักๆ คือจำนวนเต็มกับทศนิยม สำหรับจำนวนเต็มมีค่าดังนี้

ค่าต่ำสุดชนิดค่าสูงสุด
0Byte255
-32,768Short32,767
-2,147,483,648Integer2,147,483,647
-9,223,372,036,854,775,808Long9,223,372,036,854,775,807

และสำหรับทศนิยม

ชนิดค่าเล็กสุด (ที่ไม่ใช่ 0)ค่าใหญ่สุด
Single+/-1.401298E-45 +/-3.402823E+38
Double+/-4.94065645841246544E-324 +/-1.79769313486231E+308
Decimal+/-0.0000000000000000000000000001 +/-79,228,162,514,264,337,593,543,950,335

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

และในการประกาศตัวแปรแบบตัวเลขนั้น เรามามารถเขียน E แทนการคูณด้วยสิบยกกำลังได้ด้วย

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



สำหรับการประกาศตัวแปรแบบค่าคงที่ เปลี่ยนจาก Dim เป็น Const

ส่วนตัวแปรแบบข้อความ มี Char (อักษรตัวเดียว) กับ String (ข้อความอักษร)

การกำหนดค่าของ Char ด้วยข้อความจะส่งผลลัพท์คืนกลับมาเป็นตัวอักษรตัวแรกของข้อความนั้น และเราไม่สามารถกำหนดค่าตัวเลขลงไปให้มันตรงๆ ได้ แต่ส่วนตัวแปรแบบ String สามารถกำหนดค่าของตัวเลขลงไปได้ ซึ่งจะได้ผลลัพท์ออกมาเป็นตัวเลขนั้นๆ ไม่ใช่ตัวอักษรตามตำแหน่ง ASCII นะครับ

ทั้งนี้ ตัวแปรแบบ String ไม่สามารถแทรก escape char อย่างเช่น \n ลงไปในข้อความระหว่าง " ... " ได้ ส่วนการแทรกเครื่องหมาย " (double quote) ให้ใส่ "" เข้าไปครับ

January 12, 2012

Visual Basic: ตกลงกันก่อน

คอมเมนท์ใน Visual Basic ใช้เครื่องหมาย ' (apostrophe) นำหน้าบรรทัดนั้นๆ



เนื่องจาก code ในภาษานี้มักจะยาว (มาก) ดังนั้นผมจะยก code มาบางส่วนเท่านั้น สำหรับส่วนที่เข้าใจตรงกันหรือไม่ได้เปลี่ยน code จากเดิมจะแทนด้วย ... เช่น จากโปรแกรมสวัสดีชาวโลกในตอนที่แล้ว จะยกมาแสดงแค่นี้

อนึ่ง ในกรณีที่ code ยาวมากๆ จนเราอยากตัดไปขึ้นบรรทัดใหม่ ให้ใช้ _ (underscore) วางไว้ตรงท้ายบรรทัดนะครับ ไม่งั้นโปรแกรมจะคิดว่าเป็นคนละบรรทัดกัน

และสำหรับชื่อของ object แต่ละตัว (เช่น Button1) จะสามารถแก้ไขได้ที่หน้าต่าง Properties ทางขวามือ ในหมวด Design ช่อง (Name) ตรงนี้ก็แก้ตามที่เราต้องการได้เลย แม้เราจะเขียน code ไปแล้วก็ไม่เป็นไร โปรแกรมจะจัดการ update ชื่อเหล่านี้ที่ปรากฎใน code ให้เราโดยอัตโนมัติครับ (แต่ทางที่ดีก็ควรแก้ให้ถูกก่อนลงมือ code)

สำหรับที่นี่ จะใช้อักษรตัวเล็ก 3 ตัวแทนชนิดของ object แล้วตามด้วยคำที่แสดงหน้าที่ของ object นั้นๆ เช่น ปุ่มสวัสดีชาวโลกจากข้างต้น จะตั้งชื่อประมาณว่า btnHello ครับ



เนื่องจากโปรแกรม Visual Studio เป็น IDE เมื่อเราพิมพ์ code ไปบางส่วนจะมี auto-complete มาให้ เราสามารถกด [Ctrl]+[Spacebar] เพื่อให้แสดงรายการตัวเลือกที่มีได้ เช่น


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



ตอนรันโปรแกรมด้วยปุ่มสามเหลี่ยมสีเขียว (หรือกด [F5]) ถ้าโปรแกรมพัง ทางที่ดีให้แก้ code ที่ผิด แล้วหยุดโปรแกรมด้วยปุ่มสี่เหลี่ยมก่อน ก่อนที่จะกลับไปรันใหม่อีกรอบครับ

ในช่วงแรกนี้เราจะเขียนโปรแกรมเพื่อทดสอบใช้เองก่อน (ยังไม่ publish ออกไป) แต่ถ้าจะลองเอาโปรแกรมที่เป็น .exe ไปเล่นบนเครื่องอื่นที่ไม่ได้ลง Visual Studio ไว้ ก็หาเอาได้ใน folder: project\bin\debug ครับ

January 10, 2012

Visual Basic: ที่มาและลองสวัสดีชาวโลก

จริงๆ ผมไม่ได้ตั้งใจว่าจะเขียนเรื่องของ Visual Basic ซักเท่าไหร่ แต่เนื่องจากลงทะเบียนเรียนไปแล้ว ก็จดไว้อ่านเองเล่นๆ ตอนสอบครับ

1964 กำเนิดภาษา BASIC
1975 กำเนิดบริษัท Microsoft
1991 Microsoft ให้กำเนิดภาษา Visual Basic
2001 ภาษา Visual Basic พัฒนากลายเป็น Visual Basic .NET

แม้ว่าจะใช้ชื่อของ Visual Basic (หรือที่มักเรียกกันย่อๆ ว่า VB) จะได้มาจากภาษา BASIC แต่ภาษาทั้งสองก็แตกต่างกันเยอะมาก เรียกได้ว่าเอามาแต่โครง syntax เพียงเท่านั้นเอง

อย่างไรก็ตาม ในที่นี้จะจดเรื่องของ VB.NET ทั้งหมด แต่จะขอเรียกมันว่า Visual Basic เพื่อให้เกียรติแก่รากฐานดั้งเดิมของมัน (อีกแล้ว) ละกันครับ

อนึ่ง ผมจะไม่ลงรายละเอียดด้าน GUI มากนะ (ดีไซน์ไม่เก่ง) จะเขียนแนะนำแค่คร่าวๆ แค่ให้รันโปรแกรมได้พอ



ตัวภาษาเป็น OOP เต็มรูปแบบ ระบบตัวแปรเป็นแบบ static และต้องประกาศตัวแปรทุกครั้ง จุดแข็งคือมันทำงานบน Windows ซึ่งเป็น OS ที่มีคนใช้มากที่สุดในโลก ณ ขณะนี้

ผู้ใช้ Windows สามารถสร้างโปรแกรมได้โดยการลง Visual Studio เปิดโปรแกรมขึ้นมา สร้างโปรเจคใหม่ แล้วก็เริ่มเขียนโปรแกรมกันได้เลย

ส่วนผู้ใช้ฝั่ง Unix/Linux ถึงแม้อาจจะรันโปรแกรมผ่าน Wine (หรือใช้กำลังภายในอื่นๆ) ได้ แต่คาดว่าหลายคนคงมีภาษาอื่นที่เป็นทางเลือกที่ดีกว่าอยู่แล้วครับ :P



ก่อนจากในตอนนี้ เรามาทักทายโลกกันหน่อยดีกว่า เริ่มด้วยเปิดโปรแกรม Visual Studio ขึ้นมา เลือก File -> New Project แล้วเลือก Windows Application จากแถบของ Visual Basic ได้เลย

เรียบร้อยแล้ว เราจะได้หน้าต่างโปรแกรมมา 1 อัน (ชื่อ Form1) ไปที่ Toolbox -> All Windows Forms แล้วลาก Button มาวางไว้บน Form1 นั้น ดับเบิลคลิกเข้าไปที่ Button1 ที่เพิ่งลากมาไว้ จะเห็นว่ามี code อยู่บ้างแล้ว ลงมือพิมพ์ให้ code ทั้งหมดมีรูปร่างหน้าตาเป็นดังนี้ครับ (เพิ่มแค่บรรทัดที่ 4 ถ้าทำตามทั้งหมดอย่างถูกขั้นตอน)

เรียบร้อยแล้วก็กดปุ่ม [F5] หรือหาปุ่มสามเหลี่ยมสีเขียวที่บอกว่า Run ครับ เราจะได้โปรแกรมที่มีหน้าต่างว่างๆ พร้อมปุ่มใหญ่ๆ 1 ปุ่มออกมา เมื่อคลิกที่ปุ่มนั้นก็จะพบกับกล่องข้อความทักทายว่า Hello World. ก็เป็นอันเสร็จพิธี

เรียบร้อยแล้ว กด ok เพื่อปิดกล่องข้อความ แล้วกดปุ่ม x สีแดงที่มุมขวาบนเพื่อปิดโปรแกรมที่เราทดสอบ (หรือจะกดปุ่มสี่เหลี่ยม Stop ที่ขึ้นแทนที่ปุ่มสามเหลี่ยม Run ก็ได้) ปิดโปรแกรม Visual Studio ตามปรกติแล้วพบกันใหม่ตอนหน้าครับ

January 8, 2012

vi: เลื่อนหน้าเอกสาร

ในหลายตอนก่อน เราพบว่าการเลื่อนหน้าเอกสารนั้น นอกจากจะใช้ [j], [k] และ [Number] [g] เพื่อไปยังจุดต่างๆ ที่ต้องการได้แล้ว เรายังมีคำสั่งสำหรับเลื่อนหน้าอีกดังนี้

เลื่อน cursor ไปยังหัว/กลาง/ท้ายในหน้านั้นๆ ใช้ [H], [M], [L] ตามลำดับ



ส่วนการเลื่อนหน้าเอกสารไปด้วย จะใช้ [Ctrl]+[f] และ [Ctrl]+[d] เพื่อเลื่อนลง ดังนี้

ส่วนการเลื่อนย้อนกลับจากข้างต้น ก็ใช้ [Ctrl]+[b] และ [Ctrl]+[u] ตามลำดับ



อนึ่ง เมื่อต้องการเลื่อนเอาบรรทัดที่ cursor อยู่มาไว้ตรงกลางหน้าจอ ทำได้โดยการกด [z] [z] ครับ

Python: เข้ารหัสแบบแฮชและฐาน 64

การเข้ารหัสข้อความแบบ hash สามารถทำได้โดยการเรียก

แล้วจึงสร้าง object ของการเข้ารหัสแบบที่ต้องการ เช่น ประกาศ

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

สังเกตว่าก่อนที่จะพิมพ์ค่าออกมาดูนั้น เราควรผ่านฟังก์ชัน repr() เสียก่อน เพื่อให้ผลลัพท์ที่ออกมาอ่านง่ายขึ้น

อนึ่ง ในกรณีที่ข้อความไม่ยาวมาก ไม่อยาก update หลายครั้ง จะสั่งเช่นนี้ก็ได้



ส่วนการเข้ารหัส hash แบบมี key ทำได้คือ

ซึ่งจะได้ผลลัพท์เข้ารหัสแบบ MD5 ถ้าต้องการใช้วิธีเข้ารหัสแบบอื่น ให้ระบุวิธีเข้ารหัสลงไปในรูปแบบของ function callback เช่นนี้



ผลลัพท์จากข้างต้นนั้น จะออกมาเป็นอักษรในฐาน 16 เสมอ แต่ส่วนมากเราต้องใช้ฐาน 64 ก็สามารถทำได้โดย

ซึ่งเลขในฐาน 64 นี้ จะเริ่มจาก A-Z ตามด้วย a-z และ 0-9 ส่วนสองตัวสุดท้ายจะใช้ + และ / สำหรับ = จะใช้แทนอักษรว่างสำหรับเติมให้ประโยคมีตัวอักษรหารสามลงตัว ถ้าเราต้องการกำหนด 2 ตัวสุดท้ายเองก็ย่อมทำได้คือ

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

ส่วนการ decode ก็ทำได้เช่นเดียวกับการ encode ครับ

January 7, 2012

Python: ปรับปรุงข้อความในบรรทัดเดิม

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

เราอาจประยุกต์ท่านี้มาใช้สร้าง progress bar/progress message ได้ง่ายๆ เช่น



แต่ถ้าต้องการพิมพ์ข้อมูลออกมาเรื่อยๆ ไม่อยากกลับไปเริ่มต้นจากด้านหน้าบรรทัดใหม่หมดตามตัวอย่างข้างบน ต้อง import ฟังก์ชัน flush จากโมดูล sys.stdout มาครับ



สุดท้าย ถ้าเราต้องการปรับค่าเล็กน้อยในบรรทัด แต่ไม่ต้องการลบทั้งบรรทัดเพื่อพิมพ์ใหม่หมด เราอาจใช้ \b เพื่อลบตัวอักษร (จริงๆ ก็ไม่ได้ลบ แต่เป็นการเลื่อน cursor ไปด้านซ้าย) ได้

ระวังอย่าเลื่อนกลับไปทางซ้ายด้วย \b เพลิน เพราะการจะเลื่อนกลับมาด้านขวาไม่มีอักขระแบบ \b ให้ใช้ ต้องพิมพ์ซ้ำตัวอักษรทับลงไปในตำแหน่งนั้นๆ ครับ

January 5, 2012

vi: แยกหน้าต่างเปิดหลายไฟล์

เราสามารถแบ่งหน้าจอการแสดงผล vi ได้โดยคำสั่งใน last line mode คือ

(ถ้าไม่ใส่ชื่อไฟล์เข้าไป จะเป็นการสร้างไฟล์เปล่าขึ้นมาครับ)

ซึ่งจะทำการแบ่งหน้าจอในแนวนอน (horizontal) ถ้าต้องการแบ่งหน้าตอในแนวตั้ง (vertical) ให้ใช้คำสั่ง

อย่างไรก็ตาม ถ้าหากเผลอพิมพ์คำสั่งแบ่งหน้าจอพลาดไปแล้ว และต้องการแค่เปลี่ยนวิธีแบ่งหน้าจอ สามารถกดคำสั่งเหล่านี้ได้

note นิดนึงว่าถ้าเปิดไฟล์มาผิดไฟล์ สามารถเปิดไฟล์บนหน้าต่างนั้นได้ด้วยคำสั่ง



การย้ายหน้าต่างที่เราทำงาน ให้กด [Ctrl]+[w] นำ แล้วตามด้วยปุ่มทิศทาง [h], [j], [k], [l] ของหน้าต่างที่จะย้ายไปทำงาน แต่ถ้ามีหน้าต่างไม่เยอะมาก อาจใช้

เพื่อสลับระหว่างหน้าต่างได้เช่นกัน



การเพิ่ม-ลดขนาดหน้าต่างในแนวนอน สามารถทำได้โดยกด

ที่น่าสนใจคือ เราสามารถกำหนด prefix number ได้ด้วย เช่น [3] [+] [Ctrl]+[w]

ส่วนการเพิ่ม-ลดขนาดในแนวตั้ง ใช้ [<] กับ [>] แทนครับ



สุดท้าย คือเมื่อเราจัดหน้าต่างทำงานอย่างสวยงามแล้ว แต่เราต้องกลับไป build-test บน shell แล้วไม่อยากออกโปรแกรม vi เพราะต้องกลับเข้ามาจัดหน้าต่างใหม่อีก ตรงนี้สามารถแวะเข้า shell โดยคำสั่งนี้ก่อนได้ครับ

เมื่อทำงานบน shell เสร็จแล้ว จะกลับเข้าโปรแกรม vi ก็สั่ง exit จาก shell ได้เลย

ส่วนการปิด vi ที่มีหลายๆ หน้าต่าง ทำได้โดยเติมตัว a หลัง :q (ถ้าไม่เติม a จะเป็นการปิดทีละหน้าต่าง) ครับ