Tuesday, September 24, 2019

vlog อ่านหนังสือ #2

พบกันอีกครั้งกับการอ่านหนังสือนอกเวลา
วันนี้ผมก็จะมาพูดเกี่ยวกับหนังสือที่ได้ทำการอ่านหน้า 26-28 ไป
ซึ่งวันนี้จะเกี่ยวกับอะไรนั้นเชิญรับชมได้ในคลิปใต้ล่างเลยครับ
.
.

Tuesday, September 17, 2019

vlog อ่านหนังสือ #1

วันนี้ผมก็จะมาพูดเกี่ยวกับหนังสือที่ได้ทำการอ่านหน้า 1-2 ไป
ซึ่งจะเกี่ยวกับอะไรนั้นเชิญรับชมได้ในคลิปใต้ล่างเลยครับ
.
.
.






Monday, September 16, 2019

Quiz ครั้งที่ 1

ในสัปดาห์นี้ผมก็ได้ทำการทำ Quiz ครั้งที่ 1 
.
.
.

โดยมีโจทย์คือให้สร้าง โปรแกรมบวกเลขฐานสอง
และโปรแกรมที่ทำการบันทึกผลการบวก



ซึ่งหน้า Layout ของโปรแกรมก็ได่ประมาณนี้


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


ว่ากันในอีกส่วนคือโปรแกรมการบันทึกผลการบวก




หน้าตาของโปรแกรมจะได้ประมาณนี้
ซึ่งโปรแกรมอันนี้ผมไม่สามารถทำทันได้จึงมีแต่ในส่วนของ Layout







สุดท้ายนี้คือส่วนของการ commit และ commit message ลงใน mercurial 


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Monday, July 29, 2019

Point of sale (GUI)

 ในปีที่แล้วผมได้ทำการสร้าง GUI ด้วย tkinter module ของภาษา Python
หน้าตาของ GUI ก็จะประมาณนี้


ส่วนในปีนี้ผมก็ใช้ภาษา Python เหมือนเดิมครับแต่เปลี่ยนไปใช่ Kivy module แทน
ได้หน้าตาออกมาแบบนี้ครับ


Shirt , Sweater , Short , Jean , Jacket Button คือปุ่มที่ไว้ใช้สำหรับเพิ่มสินค้าลงไปใน Table ในตารางด้านซ้ายล่างครับ
Table ซ้ายล่าง ไส้แสดงสินค้าที่เราทำการเพิ่มหรือลดลงไปครับผมจะเรียกให้เข้าใจง่ายๆว่า Cart ครับ
ปุ่ม delete ไว้สำหรับลบสินค้าทั้งหมดใน Cart ครับ
ปุ่ม Pay ไว้สำหรับ ทำการคิดเงืนทอนให้เราครับโดยต้องทำการใส่เงินตั้งต้นในช่อง Cash ด้วยครับ

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ในครั้งหน้าผมจะมาทำในส่วนของ Event handler และ อาจจะเพิ่ม function อื่นเข้าไป

Thursday, July 18, 2019

ทำความรู้จักกับ VCS และการใ้ชงานบน command line #1


วันนี้เราจะมาทำความรู้จักกับ VCS กันครับ



VCS (Version control system)
คือระบบที่ทำการจัดการเก็บการเปลี่ยนเปลงเวอร์ชั่นของ software ของเรา

โดยในวันนี้ผมจะมาสอนวิธีการใช้ VCS ที่มีชื่อว่า Mercurial บน Command line กัน


Mercurial มาจาก Mercury ที่แปลว่า ปรอท ในตารางธาตุจะใช้ตัวย่อว่า Hg ดังนั้นในการเขียน command ของ Mercurial ทุกครั้งจึงต้องขึ้นต้นว่า hg .... ตลอดนั้นเอง

ก่อนจะเริ่มทำการใช้งาน เรามารู้จัก Repository กันก่อน
Repository แปลว่าทีๆใช้ในการเก็บสิ่งของ ในที่นี้ก็คือที่ๆใช้ในการเก็บ Software เวอร์ชั่นต่างๆของเรานั่นเอง



ก่อนอื่นเลยเราก็ทำการสร้าง directory ที่จะมาเป็น repository กันก่อน โดยผมสร้าง directory ที่มีชื่อว่า pythonre ขึ้นมา ผ่านคำสั่ง mkdir pythonre จากนั้นก็เข้าไป directory แล้วทำการพิมพ์คำสั่ง hg init
เพื่อเปลี่ยน directory ปัจจุบัน ให้กลายเป็น repository เมื่อพิมพ์เสร็จแล้วจึงทำการเช็คด้วย ls -a เมื่อพบว่ามี .hg แล้วก็แสดงว่า directory นั้นมีคุณสมบัติเหมือน repository แล้ว


ผมทำการสร้างไฟล์ name.py โดยข้างในบรรจุคำว่า Kitsanapong แล้วทำการ add เข้า repository ด้วยคำสั่ง hg add filename และทำการเช็ตว่าไฟล์ได้เข้าไปหรือยังด้วยคำสั่ง hg status จะเห็นได้ว่าขึ้นตัวอักษร A name.py แสดงว่าไฟล์ได้ถูก add เข้าไปใน repository แล้วนั่นเองจากนั้นผมทำการใช้คำสั่ง hg forget เพื่อสั่งให้เอาไฟล์  name.py ออกจาก repository แล้วทำการเช็ค status อีกครั้ง พบว่าได้  ? name.py โดยผลลัพธ์จากคำสั่ง hg status นั้น จะมีตัวอักษรด้านหน้าแทนความหมายดังนี้ 
  • M = modified
  • A = added
  • R = removed
  • C = clean
  • ? = not tracked





จากนั้นผมทำการใช้คำสั่ง commit -m text เพิ่อทำการ save and close เวอร์ชั่นของเราลงไป
แต่ก็ปรากฏข้อความ nothing changed ขึ้นมาเพราะว่าเรา add และ forget file ออกซึ่งหมายความว่า repository เรายังคงว่างเปล่าเหมือนเดิม ผมจึงทำการ add ไฟล์ name.py เข้าไปอีกครั้ง แล้วทำการ commit อีกที



เมื่อเสร็จสิ้นก็ทำการเรียกดูเวอร์ชั่นต่างๆของเราผ่านทางคำสั่ง hg log ก็จะปรากฎ list ของเวอร์ชั่นที่เราได้ทำการ commit ไปจำนวน 1 version ออกมา โดย changeset คือชุดตัวเลข ที่ตัวแลขแรกสุดคือสิ่ง
ที่บ่งบอกว่าเราทำการ commit ไปจำนวน กี่ครั้งแล้วเริ่มจาก 0 และกลุ่มตัวเลขด้านหลังคือเลขฐาน 16 ที่จะสื่อไปถึง version ที่เราทำการ commit นั่นเอง

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

ในครั้งหน้าเราจะมาต่อกันว่ามีคำสั่งอะไรต่อบ้างใน mercurial 




Wednesday, July 10, 2019

สร้างโปรแกรมเปลี่ยนเลขฐาน 2 เป็น 10

วันนี้เราจะลองมาทำโปรแกรมเปลี่ยนเลขฐาน

จาก 2 เป็น 10 กันนะครับ 

. 

   .   

โดยในครั้งนี้เราจะสร้างโปรแกรมด้วย Kivy ที่เป็น Python library
โค้ดต่อไปนี้คือโค้ดโดยรวมทั้งหมดเราจะทำการแบ่งช่วงเพื่อแยกอธิบาย

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
from kivy.core.window import Window

Window.size = (400, 150)
class Interface(Widget):
    def __init__(self,**kwargs):
        super(Interface, self).__init__(**kwargs)
        self.btn1 = Button(text='2b to 10b', pos=(200,50),                  on_press=self.calculate,height=40,width=100)
        self.textin2= TextInput(hint_text='write here',pos=(100,50),height=40)
        self.label3= Label(text='0',pos=(300,50),height=40)
        self.label4= Label(text='Number :',pos=(0,50),height=40)
        self.add_widget((self.label4))
        self.add_widget(self.btn1)
        self.add_widget(self.textin2)
        self.add_widget(self.label3)

    def calculate(self,btn1):
        result=0
        for i in range(len(self.textin2.text)-1,-1,-1):
            result= result + ((2**(i))*int(self.textin2.text[len(self.textin2.text)-(i+1)]))
        self.label3.text=str(result)


class Myapp(App):
    def build(self):
        return Interface()
Myapp().run()

.

.

.

 มาเริ่มต้นอธิบายโค้ดในแต่ละช่วงกัน

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
เริ่มด้วยทำการ import module_name ที่จำเป็นต้องใช้ในการสร้างโปรแกรมมาก่อน

 . 

.


Window.size = (400, 150)
เริ่มด้วยการปรับขนาด resolution ของโปรแกรมเป็น กว้าง 400 สูง 150

.


class Interface(Widget):
    def __init__(self,**kwargs):
        super(Interface, self).__init__(**kwargs)
        self.btn1 = Button(text='2b to 10b', pos=(200,50),                  on_press=self.calculate,height=40,width=100)
        self.textin2= TextInput(hint_text='write here',pos=(100,50),height=40)
        self.label3= Label(text='0',pos=(300,50),height=40)
        self.label4= Label(text='Number :',pos=(0,50),height=40)
        self.add_widget((self.label4))
        self.add_widget(self.btn1)
        self.add_widget(self.textin2)
        self.add_widget(self.label3)

สร้างคลาส Interface (เป็น subclass ของ Widget class) ขึ้นมา 
ภายในคลาสนี้ประกอบไปด้วย Object คือ
  • ปุ่มกด  1 อัน  ชื่อ btn1
  • ช่องใส่ข้อความ 1 อัน ชื่อ textin2
  • ช่องแสดงข้อความ 2 อัน ชื่อ  label3, label 4
 btn1 : Text '2b to 10b', Positon X:200 Y:50, On press a button : 
                                                                 run function calculate
 textin2 : Hint_text 'write here', Height : 40, Position X:100 Y:50
 label3 : Text '0', Height : 40, Position X:300 Y:50
 label4 : Text 'Number :', Height : 40, Position X:0 Y50

.


def calculate(self,btn1):
        result=0
        for i in range(len(self.textin2.text)-1,-1,-1):
            result= result + ((2**(i))*int(self.textin2.text[len(self.textin2.text)-(i+1)]))
        self.label3.text=str(result)

ส่วนของ function ของ Interface class ที่ใช้ในการคำนวณเพื่อเปลี่ยนเลขฐาน 2 ไป 10 
เริ่มด้วยสร้างตัวแปร result มาเก็บค่าของ 0 type : integer
สร้างลูป for ที่จะวนโดยเริ่มจากให้ i คือ จำนวนสมาชิกของข้อความของ textin2 ถึง -1โดย   ลดทีละ 1
  โดยให้ result เป็นผลรวมของ 
        (2^i)*(ข้อมูลตำแหน่งใน textin2.text โดยเริ่มจาก 0 ถึง จำนวนมากสุดของข้อความ)
แทนค่า label3.text ด้วย result type : string 

.

.

class Myapp(App):
    def build(self):
        return Interface()
Myapp().run()

จบด้วยการ การสร้างคลาส Myapp (เป็น subclass ของ App class)
ทำการเขียนฟังก์ชัน Build ทับอันเก่าเพื่อ return Interface()
สั่งให้ Myapp() ทำงานด้วย run method



 จะได้หน้าตาของโปรแกรมออกมาแบบนี้


ใส่ตัวเลข 11110 เข้าไปในช่องว่าง 


ได้คำตอบออกมาเป็น 30 
ทำการตรวจคำตอบ 
(2^4 * 1)+(2^3 * 1)+(2^2 * 1)+(2^1 * 1)+(2^0 * 0)
= 30
คำตอบถูกต้อง
เช็คกันอีกสักรอบ


ใส่ตัวเลข 1000001 ลงในช่องว่าง และได้คำตอบคือ 65 
ทำการตรวจคำตอบ
(2^6 * 1)+(2^0 * 1) = 65 
คำตอบถูกต้อง
.

.

.

ก็จบกันแล้วนะครับสำหรับการทำโปรแกรมเปลี่ยนเลขฐานจาก 2 ไป 10
ขอบคุณสำหรับการติดตามอ่านนะครับ

Sunday, July 7, 2019

Coding standard

วันนี้เราก็จะมาทำความรู้จักกับ Coding Standards กันครับ

.

.

.


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


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

1. Camel case style

     โดยปกติแล้วเวลาเราตั้งตัวแปร Freq of human เราก็อาจจะตั้งว่า freqofhuman หรือ freq_of_human แต่ใน Camel case จะให้ตัวแรกของแต่ละคำเป็นตัวพิมใหญ่ freqOfHuman 
     ถัดมาคือถ้าเราจะสร้างชื่อ class ขึ้นมาจะกำหนดให้ตัวหน้าสุดของ class เป็นตัวพิมพ์ใหญ่เสมอเช่น ทำการสร้าง class ของ student database ก็จะได้เป็น StudentDatabase 

2. Snake case style

     สำหรับใครที่ไม่ชอบการสร้างตัวแปรที่ต้องเปลี่ยนตัวหน้าทุกคำเป็นตัวพิมพ์ใหญ่เราก็มีอีกวิธีหนึ่งวิธีที่ง่ายต่อการจดจำมากกว่าคือ Snake case โดยเราจะนำ _ มาแทนการเว้นวรรคนั่นเอง เช่น 
สร้างตัวแปร computer engineering เมื่อเปลี่ยนเป็นแบบ Snake case ก็จะได้ computer_engineering 
เห็นไหมว่ามันจะจดใจง่ายกว่า แต่ก็จะทำให้ยาวขึ้นมานิดหน่อยด้วยเช่นกัน 
     ในการสร้างคลาสแบบ Snake case จะคล้ายกับ Camel case คือจะให้ตัวหน้าของทุกคำในคลาสเป็นตัวใหญ่เปลี่ยน การเว้นวรรคเป็น _ เมื่อทำการสร้าง class ของ rotten food  เมื่อเปลี่ยนเป็นแบบ 
Snake case ก็จะได้ Rotten_Food
.
.
.

ก็จบกันไปสำหรับการตั้งตัวแปรและคลาสของทั้ง 2 รูปแบบของทั้ง Snake case และ Camel case