ฝึกงานที่ Pronto Tools

ลองนึกย้อนกลับไปว่าตอนเราเรียนอยู่ปี 3 แล้วทาง ม. ให้เราออกไปฝึกงาน คำถามมากมายจะเข้ามาในหัวทันที ว่าบริษัทไหนดี? บริษัทชื่อดังๆ บริษัทใหญ่ๆ น่าจะดีกว่าไหม? เข้าไปเราจะได้เรียนรู้งานของเค้าจริงๆ หรือเปล่า? ไม่จบไม่สิ้น และสุดท้ายก็จะมีคำถามที่เราจะถามตัวเองบ่อยๆ ว่า เราได้อะไรจากการฝึกงานนี้บ้างนะ?

ฟังจากเสียงบ่นส่วนใหญ่แล้ว.. หลายคนเลยจะเข้าไปนั่งว่าง เล่นเนท แชท ตบยุง ชงกาแฟ ปริ้นท์หนังสือ ฯลฯ ใช่ไหม? เหตุผลหนึ่งที่ทำให้เป็นแบบนี้ก็น่าจะเพราะว่าเค้า "ไม่เชื่อใจเด็กฝึกงาน" แต่นั่นเป็นสิ่งที่พวกเรามองต่างออกไป เรามองว่าเค้าเชื่อใจเรา เค้าคาดหวังกับเรา เค้าถึงมาฝึกงานกับเรา เราก็ต้องเชื่อใจเค้าเช่นกัน และให้ทุกอย่างแก่เค้าเท่าที่เราให้ได้ ไม่มีกั๊ก 🙂

ที่นี่ Pronto Marketing กับทีม Research & Development (ตอนนี้เปลี่ยนเป็น Pronto Tools) เราเปิดโอกาสให้น้องๆ ทุกคนได้เรียนรู้ ได้ร่วมทีมกับเรา และได้ทำงานจริงๆ ที่นี่เราทำงานกันแบบ Agile เรามี Agile Coach ประสบการณ์สูง เรามีทีมที่ดี เรามี work-life balance เราเฮฮา เราสนุกกับงาน ลองอ่านบล็อกของน้องๆ ที่น่ารักที่เคยมาฝึกงานกับเราดูสิ 😀

อยากลองสมัครดูไหม? เชิญที่ Junior Software Engineer Intern

หลักการทำงานของ MapReduce และตัวอย่างการใช้

มีโอกาสได้เริ่มอ่านหนังสือ Hadoop: The Definitive Guide เขียนโดย Tom White แบบจริงๆ จังๆ เพราะในอนาคตจะได้ใช้แน่ๆ กะว่าอ่านไปแล้วก็มาเขียนบล็อกแปลไปจะได้เข้าใจได้มากขึ้น โพสต์นี้จะกล่าวถึงหลัการทำงาน และตัวอย่างการใช้ MapReduce เพื่อประมวลผลข้อมูลจำนวนมหาศาล

MapReduce คือ programming model ที่จะแบ่งส่วนการทำงานเป็น 2 ขั้นตอน คือ ขั้นตอน map และ ขั้นตอน reduce โดยแต่ละขั้นตอนจะมีคู่ key-value เป็น input และ output ซึ่งเราจะเป็นคนกำหนดเอง ส่วนนี้อาจจะต้องอาศัยประสบการณ์เล็กน้อย และความเข้าใจในข้อมูลนั้นๆ ถึงจะออกแบบคู่ key-value ในแต่ละขั้นออกมาได้ สำหรับคนที่ยังมองไม่ออกก็ไม่เป็นไร ค่อยๆ ศึกษาไปเรื่อยๆ เดี๋ยวจะรู้เองครับว่าเราควรจะออกแบบออกมาแบบไหนถึงจะดี นอกเหนือจากการออกแบบแล้ว เรายังจะต้องกำหนดฟังก์ชั่น map และฟังก์ชั่น reduce อีกด้วย ว่าจะให้ทำงานอย่างไร

Continue reading "หลักการทำงานของ MapReduce และตัวอย่างการใช้"

วิธีแก้ปัญหา buildbot create-master master แล้วเจอ ImportError

ถ้าเวลารันคำสั่ง buildbot create-master master แล้วเจอ error 3 บรรทัดสุดท้ายเป็นประมาณนี้

  File "/home/zkan/.virtualenvs/ci/local/lib/python2.7/site-packages/migrate/versioning/schema.py", line 10, in <module>
    from sqlalchemy import exceptions as sa_exceptions
ImportError: cannot import name exceptions

ให้ไปหาไฟล์  schema.py ที่ขึ้น error นั้น (ลองดู path จาก error บนเครื่องตัวเองเอานะครับ เพราะแต่ละเครื่องคงจะไม่เหมือนกัน) แล้วให้เปลี่ยนบรรทัดด้านล่างนี้

from sqlalchemy import exceptions as sa_exceptions

เป็น

try:
    from sqlalchemy import exceptions as sa_exceptions
except ImportError:
    from sqlalchemy import exc as sa_exceptions

ใส่คำสั่ง try-catch ไว้นั่นเอง เพื่อให้มัน import ตัวโมดูล exc มาแทน ถ้าไม่มี exceptions พอเสร็จแล้วก็ลองรันคำสั่งสร้าง master ใหม่อีกรอบดู น่าจะรันได้แล้ว

รู้สึกเหมือนกับว่าเวอร์ชั่นของ SQLAlchemy มันไม่ compatible กับ Buildbot เวอร์ชั่น ณ ตอนนี้เลยทำให้เกิดปัญหา

ด้านล่างนี้เป็น environment ที่ผมลง Buildbot (เวอร์ชั่น 0.8.7p1) ไว้ ทำตามวิธี Installation นี้

(ci)zkan@vgl:~$ pip freeze
Jinja2==2.7
MarkupSafe==0.18
SQLAlchemy==0.8.2
Tempita==0.5.1
Twisted==13.1.0
argparse==1.2.1
buildbot==0.8.7p1
decorator==3.4.0
python-dateutil==1.5
sqlalchemy-migrate==0.7.2
wsgiref==0.1.2
zope.interface==4.0.5

มาร่วมสร้าง Agile66 Stack เว็บตอบคำถามเกี่ยวกับ Agile ภาคภาษาไทย

Agile66 Stack invitationรูปจากกลุ่ม Agile66

บล็อกนี้ขอเชิญชวนทุกคนในวงการ IT มาร่วมกันสร้างสังคม Q&A ออนไลน์ Agile66 Stack กันครับ ซึ่งจะเป็นเว็บถามตอบคำถามทุกปัญหาเกี่ยวกับการพัฒนาซอฟต์แวร์แบบ Agile ภาคภาษาไทย ซึ่งตอนนี้ตัวเว็บยังอยู่ในส่วนของ Area 51 อยู่

Continue reading "มาร่วมสร้าง Agile66 Stack เว็บตอบคำถามเกี่ยวกับ Agile ภาคภาษาไทย"

เป้าหมายพัฒนาตัวเองในปี 2013

ปณิธาน 12 ข้อของปีนี้ ยกยอดบางข้อมาจากปีที่แล้วด้วยเพราะทำไม่สำเร็จ

  1. Learn Hadoop MapReduce.
    ปีนี้ขอศึกษา Hadoop และ MapReduce แบบจริงๆ จังๆ ต้อนรับ Big data 🙂
  2. Embrace the uncomfortable.
    ปีที่แล้วลองงดใช้เม้าส์ไป 1 เดือน ผลออกมาเป็นที่น่าพอใจ สามารถพิมพ์งานได้เร็วขึ้นด้วยเพราะไม่ต้องเอื้อมมือไปจับเม้าส์ แต่สำหรับปีนี้มีสิ่งที่อยากทำเพิ่มคือ เลิกใช้ gedit ไปเลย แล้วใช้ vim แทน!
  3. Publish at least one paper in an international conference.
    ขออย่างน้อยสัก 1 งานตีพิมพ์ เพื่อยังคงสถานะใน Academia ไว้
  4. Learn more mathematics.
    เพื่ออนาคตที่อยากจะเป็น Data scientist ที่ดีให้ได้ เรื่องที่จำเป็นต้องเรียนให้ถึงแก่นคือ Probability และ Statistics
  5. Learn more theory.
    ปีนี้จะเน้นทางด้าน Algorithms and data structures
  6. Learn a new programming language.
    ปีที่แล้วเรียนภาษา Python ไป ปีนี้ขอ Ruby on Rails
  7. Complete a personal project.
    ผลต่อเนื่องมาจากข้อ 6 แน่นอนว่าคงใช้ Ruby on Rails พัฒนา
  8. Go analog.
    จะปั่นจักรยานให้มากขึ้น และจะลองทำกับข้าวอย่างน้อยสัก 1 อย่าง 🙂
  9. Stay healthy.
    เพราะโปรแกรมเมอร์ต้องมี Six Pack
  10. Read at least one fiction or autobiography book.
    ปีนี้จะอ่าน Obama: From Promise to Power ฉบับแปลไทยให้จบ! (น่าจะถือว่าเป็น autobiography?)
  11. Learn new software or tool.
    คงจะเกี่ยวกับ Data visualization ที่เล็งไว้คือ Tableau กับ D3
  12. Automate.
    จะพยายามใช้ cron ให้เป็นจริงๆ แล้วก็จะใช้ shell scripts ทำสิ่งต่างๆ ที่เราทำบ่อยๆ แทนเรา แล้วก็จะใช้ช่วยในการเขียนบทความต่างๆ

ซึ่งต้องขอบคุณท่าน อ. Matt Might อีกครั้งที่เป็นแรงบันดาลใจเสมอมา Orz