วันอาทิตย์ที่ 30 เมษายน พ.ศ. 2560

Random_food (v.1.0)

    ในตอนนี้ฟังก์ชั่นการทำงานของ app Random_food นั้นสามารถที่จะ
 - สุ่มอาหารได้
 - เพิ่มเมนูที่จะสุ่มอาหารได้
 - ลบเมนูอาหารได้

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


    หน้าแรกก็จะเป็นดังนี้


    ก็สามารถเลือกหมวดอาหารที่จะสุ่มได้ ได้ที่ต้องการแล้วกด สุ่มเลย แต่หากต้องการที่จะแก้ไข หรือ เพิ่มเมนูในคลิกปุ่มด้านล่าง



    เมื่อกดเข้ามาแล้ว ให้กดเลือกหมวดที่จะแก้ไข แล้วก็กด 'Edit'


    ด้านบนจะเลือกเพื่อที่จะลบรายการส่วนด้านล่าง จะเป็นการแอดเมนูอาหารให้กับหมวดๆนั้น

ปัญหาที่พบ
ยังไม่เจอปัญหาร้ายแรง ส่วนใหญ่จะเป็นการลืมนู้นนี้ซะส่วนใหญ่



วันพุธที่ 19 เมษายน พ.ศ. 2560

Random_food : User story

# Mr.Wick want to have dinner
# he goes to restaurant
# he don't know what to eat
# he've heard about new app "Random_food"
# app will random food for the one who doesn't know what to have for that meal
# he goes in to website
# then he see its homepage and
# he sees message "Just click" and a button
# he clicks on it
# he sees many options and he decide to choose "หมวดข้าวจานเดียว"
# the website shows the result, it's "ข้าวกะเพราะหมูกรอบ"
# he feels okay with that then he closes website.

วันอาทิตย์ที่ 16 เมษายน พ.ศ. 2560

AS2 : Random_food

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

    นี้เป็นการ commit ทั้งหมด ในตอนนี้ โดยจะมาอธิบายอีกภายหลังครับผม


วันอาทิตย์ที่ 26 มีนาคม พ.ศ. 2560

Selenium pt.2

    ใน Tutorial บทที่ 1 จะไม่ค่อยมีอะไรมากแค่สอนวิธีการใช้ Django สร้าง project แล้วก็การรัน test อย่างง่ายๆ ซึ่งจะเป็น FT (functional test) เพราะฉะนั้นจะขอข้ามไปบทที่ 2 เลย

    ในบทนี้ก็จะเป็นการสอนการทำ function test ต่อ โดยโค้ดจะมีหน้าตาดังนี้

from selenium import webdriver
import unittest

class NewVisitorTest(unittest.TestCase):  #1

    def setUp(self):  #2
        self.browser = webdriver.Firefox()
        self.browser.implicitly_wait(3)


    def tearDown(self):  #3
        self.browser.quit()

    def test_can_start_a_list_and_retrieve_it_later(self):  #4
        # Edith has heard about a cool new online to-do app. She goes
        # to check out its homepage
        self.browser.get('http://localhost:8000')

        # She notices the page title and header mention to-do lists
        self.assertIn('To-Do', self.browser.title)  #5
        self.fail('Finish the test!')  #6

        # She is invited to enter a to-do item straight away
        #[...rest of comments as before]

if __name__ == '__main__':  #7
    unittest.main(warnings='ignore')  #8

โดย #1 มีการสืบทอด unittest

#2 จะเป็นการ set up โดยจะเปิดเป็น browser firefox

#3 เมื่อ test เสร็จก็จะออก browser ให้อัตโนมัติ

#4 พวก function หรือ method ที่ขึ้นตันด้วย test_ จะเป็นการ test ทั้งสิ้น

#5 โดยใน function นี้จะเรียก url localhost:8000 และก็จะเช็ค โดยใช้คำสั่ง assertIn(a,b) คือจะทำการเช็คว่ามี a อยู่ใน b หรือไม่

#6 เป็นการบังคับ fail แล้วให้ขึ้นข้อความว่า "Finish the test"

#7 & #8 ขอข้ามไปก่อนครับผม


Selenium pt.1

    ในการทดลองใช้ selenium SPN ได้เขียน keyword ลงใน Blog ของเขาซึ่งผมก็ได้ทำตาม tutorial ไปเรื่อยๆก็ได้พบกับคำเหล่านี้ เต็มไปหมด ซึ่งผมจะหาคำนิยามของ keyword เหล่านี้

- Functional test ( การรันทดสอบการทำงานของโปรแกรม จากมุมองของ user ที่ user สามารถเข้าถึงได้ )

- User story ( เป็นการที่ user จะใช้โปรแกรมทำอะไร แล้วผลที่โปรแกรมจะส่งกลับมาเป็นยังไง )

- Expected failure ( ในการเขียน test จะต้องมีการคาดว่า การกระทำใดจะทำให้ผล test fail ได้ )

- Unit test ( เป็นการทดสอบโปรแกรมแบบ ด้านในของโปรแกรม ในมุมมองของคนเขียนโปรแกรม )

- Refactoring ( การปรับปรุงโค้ด โดยจะไม่ทำให้การทำงานของโปรแกรมเปลี่ยนแปลงไป )

    




วันเสาร์ที่ 18 มีนาคม พ.ศ. 2560

Wiki

    ในช่วงเวลา 1 สัปดาห์ในการพักผ่อน ทางผมได้ทำจัด Tutorial สำหรับสร้าง web app ledger หรือบันทึกรายรับ รายจ่าย ไว้ใน link => https://github.com/a5810067/ledger/wiki ซึ่งถ้าหากผิดพลาดประการใด ก็ขออภัยไว้ ณ ที่นี้ด้วย

วันจันทร์ที่ 27 กุมภาพันธ์ พ.ศ. 2560

Ledger (Export csv)

    ข้ามจากการตกแต่งด้วย css เป็นเรื่อง csv ก่อนละกันนะครับ เนื่องจากว่า SPN ได้ให้ลองสามารถ export ข้อมูลออกเป็นไฟล์ csv ได้ ผมเลยไปทำการค้นคว้าข้อมูล โดยได้เว็บของ
django เว็บนี้มาช่วยในการทำงานเกี่ยวกับ csv output Click โดยจะเป็นการใช้ api ของ python ในการ generate csv file หรือ ก็คือสร้าง csv ไฟล์ขึ้นมาได้เองเลย โดยโค้ดเป็นดังนี้



โดยเขาบอกว่า วิธีการ generate นี้ง่ายมากกก ก็แค่ส่งผ่าน response ให้กับ csv.writer() 
ส่วน response['Content-Disposition'] = 'attachment; filename="history.csv"' 
จะเป็นการตั้งชื่อไฟล์ที่จะดาวน์โหลด โดยผมตั้งว่า history.csv 
หลังจากนั้นก็จะ wrtiterow(.....) โดยตัวแรกผมเอาไว้เขียนหัวไฟล์ ส่วนที่เหลือก็ใช้การวน for loop ในการใส่ลงไปในไฟล์ csv โดยจะเรียงเป็น pubdate note income expenese  


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