รีวีว CKAN แบบคร่าวๆ

CKAN เป็น open source data portal platform ตัวหนึ่งที่ดูจะเป็นตัวที่มีชื่อเสียงที่สุดในด้านระบบที่เน้นเรื่อง open data ถ้าบอกว่า WordPress นั้นเป็น content management system (CMS) สำหรับ CKAN คงเป็น data management system (DMS) ก็คงจะไม่ผิดอะไร

Continue reading "รีวีว CKAN แบบคร่าวๆ"

บทความเกี่ยวกับ Coding ที่ Thai Programmer (สมาคมโปรแกรมเมอร์ไทย)

บทความที่เกี่ยวกับการเขียนโค้ดหรือว่า Technical ต่างๆ ที่ผมคิดว่ามีประโยชน์ต่อชาวโปรแกรมเมอร์ไทย ผมจะไปเขียนไว้ที่ Thai Programmer (สมาคมโปรแกรมเมอร์ไทย) นะครับ

ส่วนเรื่องอื่นๆ ยังคงเขียนที่นี่ต่อไป 🙂

เริ่มทำ Unit Testing ใน JavaScript ด้วย Jasmine

หลายคนอาจจะรู้สึกไม่ชอบภาษา JavaScript อาจจะมีประสบการณ์ที่พอเขียนเสร็จแล้วก็ไม่อยากจะไปแก้ไข ได้แต่เขียนเพิ่มเข้าไปเรื่อยๆ นานๆ เข้าก็จะกลายเป็นโค้ดเทพ (legacy code) ที่ไม่สามารถแตะต้องอีกต่อไป ผมคิดว่าส่วนหนึ่งน่าจะเป็นเพราะว่าเมื่อก่อนเรายังไม่มี tool ดีๆ มาช่วยในการดูแลรักษาโค้ดของเรา แล้วก็ส่วนหนึ่งก็น่าจะเป็นเพราะเราไม่รู้ว่าจะเริ่มต้นดูแลรักษาโค้ดของเราอย่างไร

ผมเลยมาขอเสนอขั้นตอนง่ายๆ ในการเริ่มต้นเขียน unit test ในภาษานี้กัน เครื่องมือที่สามารถช่วยเราเขียน unit test ได้ จริงๆ มีเยอะมาก ในบทความนี้ผมขอใช้ Jasmine ซึ่งเป็นเครื่องมือที่มีการพัฒนาอยู่เรื่อยๆ แล้วก็เริ่มต้นได้ไม่ยากครับ

Continue reading "เริ่มทำ Unit Testing ใน JavaScript ด้วย Jasmine"

ทำความเข้าใจกับ Python Decorators

Python decorators เป็น feature หนึ่งของภาษา Python ซึ่ง feature นี้ไม่ใช่ Decorator pattern นะครับ เพียงแต่ว่าสามารถนำไปใช้ทำ pattern แบบนั้นได้

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

สมมุติว่าเรามีฟังก์ชั่น fizzbuzz ตามนี้

def fizzbuzz(number):
    if number % 3 == 0 and number % 5 == 0:
        return 'fizzbuzz'
    elif number % 3 == 0:
        return 'fizz'
    elif number % 5 == 0:
        return 'buzz'
    else:
        return number

แล้วเราอยากจะให้แสดงผลออกมาแบบมีข้อความขึ้นสักหน่อยเช่น Your input is 3, so you get fizz. ถ้าเราสะดวกเราก็เข้าไปแก้ฟังก์ชั่นของเราเลยใช่ไหมครับ เราก็จะได้ฟังก์ชั่นหน้าตาแบบนี้

def fizzbuzz(number):
    result = 'Your input is ' + str(number) + ', so you get '
    if number % 3 == 0 and number % 5 == 0:
        result += 'fizzbuzz'
    elif number % 3 == 0:
        result += 'fizz'
    elif number % 5 == 0:
        result += 'buzz'
    else:
        result += str(number)
    return result + '.'

ดูแล้วไม่ค่อยน่าทำเลยใช่ไหมครับ? เรามาลองใช้ decorator กันดีกว่า ให้เราสร้าง nested function หรือ inner function  ขึ้นมาตามนี้ (ที่ต้องทำตามนี้เพราะว่านี่เป็น syntax ของ Python decorator ครับ)

def have_nice_message(func):
    def wrap(number):
        result = 'Your input is ' + str(number) + ', so you get '
        result += func(number)
        result += '.'
        return result
    return wrap

วิธีใช้งานเราก็แค่เอาไปแปะไว้บนหัวของฟังก์ชั่นที่เราต้องการตามนี้

@have_nice_message
def fizzbuzz(number):
    if number % 3 == 0 and number % 5 == 0:
        return 'fizzbuzz'
    elif number % 3 == 0:
        return 'fizz'
    elif number % 5 == 0:
        return 'buzz'
    else:
        return number

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

เป้าหมายพัฒนาตัวเองในปี 2015 และสรุป..

ดูจากสรุปปีที่แล้วทำไว้ไม่ค่อยดีเท่าไหร่ รู้สึกเกินตัวไปหน่อย ปณิธานปีนี้เอาแค่ 3 ข้อพอ! สู้ๆ

  1. อย่างน้อยต้องเอา Verified Certificate ของ  Intro to Machine Learning ส่วนคอร์สที่เกี่ยวข้องอื่นๆ ถือเป็นโบนัส 🙂
  2. อ่าน Data Science for Business ให้จบ
  3. ปั่นจักรยานให้ครบ 3,000 km

วันนี้วันที่ 1 ม.ค. ปี 2016.. สรุปเป้าหมายของปีที่แล้วได้ว่า.. ไม่ผ่านสักอย่าง 🙂

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