วันพฤหัสบดีที่ 19 ธันวาคม พ.ศ. 2556

ถ้าผมจะจับเอาประเทศไทยไว้เป็นตัวประกันบ้างล่ะ!!!

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

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

เมื่อจัดซื้อระบบเข้ามาแล้ว ก็พบว่า Video Conference นั้นเป็นแบบ Video Phone คือสามารถโทรติดต่อกันไปยังปลายทางได้ เช่น นายอำเภอ ก.ไก่ โทรไปหา นายอำเภอ ขอไข่ เอ๊ย ข.ไข่ แล้วคุยกันสองสาย ได้เท่านั้น ไม่สามารถทำ Conference room ได้ ซึ่งต่างจากระบบ ห้องประชุมเสียง ที่ Mix เสียงเข้าหากันก็ใช้ได้แล้ว Video นั้นนอกจาก Mix เสียงเข้าหากันแล้วยังต้องทำ Mosaic Video เช่นในห้องมีสี่คน ก็แบ่งสี่คนออกเป็น thumb nail 2x2 เป็นต้น

ระบบที่ว่า ปกติถ้าซื้อของต่างประเทศเช่น Tandberg, Polycom, Cisco Telepresence พวกนี้ราคาเกิน 10 ล้านทั้งสิ้น แน่ละให้ผมทำ ย่อมถูกกว่า ด้วยการพึ่งพา Asterisk ที่เก่งสุดเรื่อง VOIP สำหรับการทำ Audio mixing (ใช้ meeting room) กับ Registar server รวมถึงการส่งผ่าน RTMP packet มาที่ Server ที่ผมสร้างขึ้นสำหรับการทำ Video mixing ทำให้โครงการนี้สำเร็จในเวลา สองเดือนเศษๆ (เป็นตอนนี้คงเขียน Freeswitch module มั๊ง)

Hardware ที่ใช้ตอนนั้นเป็น Core 2 Duo RAM ใส่เต็ม 4GB รับ ผู้ใช้ได้พร้อมๆ กัน 60 Participants บอกได้คำเดียว มหัศจรรย์...!!!

ผมทำ Admin config แบบ realtime ด้วย Adobe Flex (ตอนนั้นเขียน Web App ไม่เป็น ก็เลยใช้ Flash นี่แหละ) แล้วอาศัย Flex Socket เปิด Telnet port เรียก command ผ่าน Asterisk ทำให้สามารถควบคุม Conference Room ได้แบบ Realtime เช่น

  • กำหนดรูปแบบห้องแบบ 2x2, 3x3, 4x4 ...
  • สามารถกำหนดให้ใครในห้องออกเสียง หรือเงียบได้ (เพียงปุ่มเดียว)
  • สามารถส่งข้อความไปยังผู้เข้าร่วม โดยส่งข้อความแตกต่างกันได้ (เป็นอักษรวิ่งด้านล่างจอ) อ้อ เป็นภาษาไทยนะครับ
  • และอื่นๆ อีก จำไม่ได้ละ
นอกจากนี้ ผู้เข้ารวมประชุมยังสามารถกดปุ่มที่หน้าเครื่องเพื่อร้องขอ การออกเสียง หรือขอพูดได้ ประมาณยกมือขอพูดนั่นแหละ...

Features อื่นๆ จำไม่ได้ละ แต่เยอะกว่าที่บอกมาเยอะพอสมควร Code ทั้งหมดเขียนด้วย C++ และ Adobe Flex/ActionScript สำหรับ Admin

ข้อเสียก็คือ โทรศัพท์ที่ใช้ตอนนั้นสนับสนุนแค่ h263 เลยไม่ได้ทำให้สนับสนุน h264 ตอนนี้ถ้าไม่สนับสนุน h264 ก็ต้องถือว่าห่วยแหละ :) [ใช้ libffmpeg]

Source code ยังอยู่กับผม (มีน้องคนสองคน ขอไปศึกษา เมื่อสามสี่ปีที่แล้ว ให้ไปแต่ก็จำไม่ได้แล้ว) ผมไม่ได้ให้ source code ไปด้วย แสดงว่า นอกจากน้องสองคน (น่าจะ ต๋อง กับ เทพ) ก็ไม่มีใครได้เห็น source code แน่ๆ

เท่าที่ทราบ หน่วยงานไทย ยังไม่มีหน่วยงานใดทำหน้าที่ Code Review, Back door scan หรือตรวจสอบจุดเสี่ยงใดๆ ในขั้นตอนการตรวจรับงานเลย

ยิ่ง Code Reviewer ไม่น่าจะมี... 

แล้วถ้าผมแสบ เหมือนใครที่ทำอะไรไว้แสบๆ โดยหมกเม็ดไว้ใน Code ที่ผมเคยเขียนถึง (เมื่อประเทศไทยถูกจับเป็นตัวประกัน) เช่น เขียน Code ให้ Archive การประชุมไว้ใน temporary folder ที่ซ่อนไว้ แล้วทำ back door server สำหรับการ download archive นั้นกลับมา

ผมจะ...รู้การประชุมทั้งหมด รู้ความลับทั้งหมด นี่มันกระทบความมั่นคงของประเทศเลยนะ

คำถามคือ...เราควรมีกระบวนการ Code Review ในกระบวนการตรวจรับงานที่มีผลกับความมั่นคงของประเทศได้แล้ว (ที่ผ่านมากับตัว ยังไม่เคยมีกระบวนการนี้)

ไม่ทราบ....กระทรวงการคลังมีกระบวนการ Code Review แล้วหรือยังครับ... ถ้ายัง...เอ่อ...ขอไปทำด้วยได้แมะครับ ทำฟรีก็ได้นะ...


วันพุธที่ 18 ธันวาคม พ.ศ. 2556

เมื่อประเทศไทยถูกจับเป็นตัวประกัน

ไม่ใช่การเมืองครับ พอดีว่าไปพบปัญหานึงเข้า คิดไปคิดมา นี่มันเกี่ยวกับคนไทยทั้งประเทศนี่หว่า ไม่ได้เกี่ยวแค่นายจ้างมัน หรืออนาคตไอ้ห่านั่นคนเดียว

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

ผ่านไปสามปีบริษัทได้งานใหญ่เข้ามา มีระยะในการพัฒนางานตามสัญญาว่าจ้างพัฒนา 6-10 เดือนนี่แหละ (ผมไม่รู้) โปรแกรมเมอร์คนนั้น ซึ่งตอนนั้นเป็นหัวหน้าโครงการแล้ว ก็วางแผนการพัฒนา แบบเรื่อยๆ เนื่องจากนายจ้างไม่ได้เข้ามาควบคุมการพัฒนา ไว้ใจว่างั้นเหอะ ก็มันไม่มีใครนี่หว่า เมื่อใกล้เวลาส่งงาน (เหลือเดือนเดียว) ก็บอกว่า ทำไม่ทันหรอก ทีมไม่พร้อม ความสามารถไม่ถึง นู่นนี่นั่น นายจ้างไม่รู้ทำไง เลยถามไปว่า

นายจ้าง : แล้วจะทำยังไงล่ะ... มีทางออกไม๊
โปรแกรมเมอร์ : ไม่ได้หรอกพี่ ต้อง Outsource สถานเดียว ความสามารถทีมเราไม่ถึง
นายจ้าง : ...เอ๊า ตามใจลองติดต่อหาคนเลยครับ... (ก็ไม่มีทางเลือกนี่หว่า)

โปรแกรมเมอร์คนนั้นก็จัดการหา Outsource มาหนึ่งทีม แล้วเริ่มทำโครงการนั้น โดยต้องประวิงเวลาในการส่งมอบออก แน่นอนว่า นายจ้างต้องจ่ายค่าปรับเนื่องจากส่งงานล่าช้า

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

จนกระทั่ง ก่อนหมดสัญญาบำรุงรักษา โปรแกรมเมอร์คนนั้นก็เดินมาบอกนายจ้างว่า

โปรแกรมเมอร์ : "พี่...ผมลาออก..."
นายจ้าง : ทำไมล่ะ... คุยกันก่อนสิ... แล้วจะไปทำอะไรที่ไหน
โปรแกรมเมอร์ : ไปทำบริษัท.... ครับ

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

เขาทำได้ยังไง....
จำ Outsource ได้ไหมครับ บริษัท Outsource  ที่เขาหามานั้น บริษัทที่เขาจดทะเบียนเอง โดยมีทีมพัฒนาเป็นคนสนิทส่วนตัวทั้งหมด โหดไหมล่ะ

แล้วไม่มีสัญญาเหรอ Source code น่าจะเป็นของบริษัทเก่า
ใช่ครับ Source code อยู่ที่บริษัทเก่า แต่มันได้ถูกวางแผนมาเป็นอย่างดี คือตลอดระยะเวลาในการบำรุงรักษา นอกจากการพัฒนา ปรับปรุง แก้ไข แล้ว code ชุดนั้นยังได้ถูกเขียนให้เกิดความสลับซับซ้อน ซ่อน code ต่างๆ ไว้มากมาย

เวลาไปบอกกับเจ้าของโครงการที่ผ่านมาจะได้บอกว่า ไม่มีใครทำระบบนั้นได้หรอกนอกจากทีมผม... จ้างผมสิ ไอ้บริษัทนั่นมันทำกันไม่ได้หรอก

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

แล้วทีมพัฒนาเก่าล่ะ ทำไม่ได้รึ
ลืมเล่าไปอีกนิด นอกจากที่เขาจะลาออกไปแล้ว เขายังพาทีมงานที่ทำงานกันมาตลอดโครงการออกไปอีกหลายสิบคน แน่นอนทีมพัฒนาเกือบหมดทีมด้วย

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

มาถึงตรงนี้บางคนอาจบอกว่า แบบนี้เขาเรียก "จับนายจ้างเป็นตัวประกัน" ต่างหาก

แล้วถ้าผมบอกว่า ไอ้โครงการที่ว่า มันเป็นโครงการพื้นฐานของภาครัฐที่ประชาชนคนไทยเราต้องใช้ล่ะ ไม่ให้เรียกว่า "ประเทศไทยถูกจับเป็นตัวประกัน" โดยไอ้ห่าโปรแกรมเมอร์นั่น จะให้ผมเรียกว่าอะไร


วันอังคารที่ 17 ธันวาคม พ.ศ. 2556

เผชิญหน้ากับ ISO8601

วันนี้เจอโจทย์ใหม่ จากต้อง parse XML แล้วเอา XML ใส่เข้า Oracle แต่พบว่าใน XML transaction, DateTime ที่ส่งมาเป็น format ISO8601 ถ้าเป็นเจ้าอื่นคงไม่มีปัญหาหรอก แต่นี่ Erlang!!!

ทำยังไงล่ะ....

ค้นเจอมีคนทำ iso8601 สำหรับ Erlang ไว้ที่ github เลยเพิ่ม dependencies ของ iso8601 ใน rebar.config

{'iso8601', ".*", {git, "https://github.com/seansawyer/erlang_iso8601.git", {tag, "1.1.1"}}}

จากนั้น

$ rebar compile

เรียบร้อยเรียกใช้ iso8601 ได้แล้ว 
วิธีใช้ก็ง่ายมาก

1>iso8601:parse(<<"2013-09-26T11:46:14.0003863+07:00">>).
{{2013,9,26},{4,46,14}}

ทีนี้ก็ใช้ oci utilities convert ให้เป็น oracle date

1> DateTime = iso8601:parse(<<"2013-09-26T11:46:14.0003863+07:00">>).
{{2013,9,26},{4,46,14}}
2>oci_util:edatetime_to_ora(DateTime).
<<120,113,9,26,4,46,14>>

Rebar นี่ช่วยได้เยอะจริงๆ

Erlangian is erlanging.

วันอาทิตย์ที่ 15 ธันวาคม พ.ศ. 2556

List Comprehensions ใน Erlang

List comprehensions เป็น Features เล็กๆ ใน functional programming ยุคใหม่ ที่มีแนวคิดคล้ายกับ ZFC (ทฤษฏี Zermelo–Fraenkel)โดยมี Syntax ตามนี้

[Expr || Qualifier1,...,QualifierN]

เวลาใช้งาน

1> [{A} || A <- "A"].
[{65}]

รูปแบบการใช้อื่นๆ เช่น

1> [A*2 || A <- [2,3,4]].
[4,6,8]

2> [{ I, 2, I} || I <- "1"].
[{49,2,49}]

3> [{A,B,C} || A <- "1", B <- "2", C <- "3"].
[{49,50,51}]

4> [{A,B,C} || A <- [1], B <- [2], C <- [3]].
[{1,2,3}]

มีประโยชน์มาก เช่นเวลาทำ expression binding สำหรับ SQL statement เช่น

-define(INSERT, <<"insert into tbl_info (title, data) values (:title, :data)">>).
-define(INFO_BIND_LIST, [{<<":title">>, 'SQLT_STR'}, {<<":data">>, 'SQLT_STR'}]).
.
.
.
Statement = OciSession:prep_sql(?INSERT),
StatementRes = Statement:bind_vars(?INFO_BIND_LIST),
Statement:exec_stmt([ {Title, Data} || Title <- retrieveTitle(Args), Data <- retrieveData(Args)]),
.
.
.


Erlangian is erlanging.




วันพฤหัสบดีที่ 12 ธันวาคม พ.ศ. 2556

ผมเป็นกบฏ!!!

เห็นกำลังนิยมคำนี้กันน่ะ คือย้อนไปเมื่อห้าเดือนที่แล้ว มีบริษัทญี่ปุ่นมาว่าจ้างให้ผมพัฒนาเวป eCommerce แนว Social Shopper โดยเปิดโอกาสให้ใช้ทุกอย่างที่อยากใช้เต็มที่ "เสร็จโจร"

นิสัยเสีย... ผมเริ่มจากอะไรที่เขาไม่ใช้กันอีกแล้ว ใช่ครับ Erlang เพราะปีกว่าๆ ที่ผ่านมาตาม Framework อยู่ตัวนึงชื่อ Chicago Boss (http://www.chicagoboss.org) Evan Miller คนพัฒนามีแนวคิดว่า Agile framework สุดเจ๋งอย่าง Rails มันมีข้อเสียในการ Deployment เรื่อง Scallability วุ่นวายแถมบริโภค resource เยอะเกินไป แกเลยใช้ Erlang พัฒนา Framework เลียนแบบ Rails ขึ้นมา



แต่อย่างที่รู้ Community ของ Erlang ไม่ได้ใหญ่โตอะไรมากนัก (นั่นแหละของโปรด) เท่าที่รู้สึกได้ คนที่มาช่วยเหลือโครงการนนี้น่าจะหลักหน่วย เมื่อเทียบกับ Rails แล้ว มันคนละเรื่องเลย

ผมกับน้องโปรแกรมเมอร์ (คนที่ใช้ Erlang ทำ Project จบ ป.โท) เราเริ่มใช้ CB ในการพัฒนาเวป eCommerce ที่ว่า กันประมาณหนึ่งเดือนเราพบว่า 
  • มันคือ Rails ดีๆ นี่เอง แต่เขียนด้วย Erlang แทน ใช้ RoR เป็นก็ใช้ ChicagoBoss เป็นนะ (แต่อาจยังเขียน Erlang ไม่เป็น แหะๆ )
  • มี Abstract layer สนับสนุนฐานข้อมูลหลายตัว ได้แก่ 
    • Tokyo Tyrant (แต่ไม่มี Kyoty Tycoon)
    • Mnesia (Default database ที่ติดมากับ Erlang : ผมอ่านว่า เอ็มนีเซีย)
    • MySQL (อะไร? ไม่รู้จัก)
    • PostgreSQL (นี่ก็ไม่รู้จัก)
    • MongoDB (อันนี้รู้จักดีเลย)
    • Riak : อันนี้น่าสนใจมาก เป็น Key/Value server ของบริษัท Basho คนพัฒนา Rebar : Erlang management tool เดี๋ยวมีเวลาค่อยมาว่ากัน
  • มี MQ ติดมาเลย (Highlight)
  • มี SMTP module สำหรับ ส่งเมล์อัตโนมัติ มาให้ 
  • ใช้ Rebar จัดการทุกส่วน : คิดง่ายๆ Rebar ก็เหมือน Gem + Bundler
  • มี DTL (Django's Templating Library) รู้จักตอน "โดม" แนะนำให้ทำ Django ประมาณปี 2007

ข้อเสีย
  • ทำอะไรเกินกว่าที่ให้มา ไม่ง่ายเลย
  • เขียน OTP server module (Open Telecom Platform เป็น generic server module ของ Erlang ไว้เขียนเล่าให้อ่านว่า มันคืออะไรต่อไปนะครับ) ส่วนตัวไม่ได้ โครงสร้าง Folder ไม่เอื้ออำนวย (ยังไม่ได้ตามไล่ดู)
  • พอ Community เล็ก จะหาอะไรมาเพิ่ม ก็ไม่ง่าย เช่น อยากได้การสนับสนุน OCI (Oracle Call Interface) ก็ไม่มี ต้องเขียนเอง (เขียนแล้วด้วย แต่ยังไม่เสร็จ)
  • NoSQL แบบ Relational : บางคนอาจโอเค แต่ผมว่า มันไม่สุดว่ะ NoSQL มันน่าจะ Nested elements array ในตัว document มันเลย แต่ CB ทำได้แต่ Document Relational พอมีคำว่า Relational ปุ๊ป ขัดใจปั๊ป, แก้ปัญหาโดย Direct call MongoDB ก็ได้ ผ่าน Connection Pool.

สุดท้าย เราก็ตัดสินใจว่า ใช้ RoR เหอะ หาของง่ายกว่า อนาคตจะได้ไม่อยู่ในสภาพจมน้ำ แต่ก็ไม่วายจะใช้ CB สำหรับส่ง Mail ตอบรับการลงทะเบียน :)

เป็นอันว่า โครงการ eCommerce เวปที่ทำก็กลายเป็น RoR ไปแต่สิ่งที่ได้จาก CB คือ
  • สำหรับ Erlang แล้ว Rebar นี่มันสุดยอดจริงๆ ทำ EUnit ได้ด้วย
  • ใช้ CB ทำอะไรได้อีกเยอะ เช่น Mobile push services ที่รับ User ได้เป็นแสนๆ ใช้ MQ นี่แหละ 
  • Riak น่าสนใจมาก
  • Tokyo Tyrant ก็น่าสนใจ
  • แต่ Kyoto Tycoon น่าสนใจกว่า (เชื่อผม...  เชื่อโดมด้วยก็ได้)
  • ได้ลอง OCI กับ Erlang แล้ว วุ่นวายดีจัง (แล้วก็ได้เอามาใช้กับโครงการปัจจุบัน ไว้เล่าต่อไปครับ)
ต่อไปจะเล่าโครงการปัจจุบันที่ทำครัช (WebMachine + OTP Generic Server + OCI + MongoDB) 

Erlangian is Erlanging

ซ้าย ขวา หน้า หลัง Erlang หมดเลย....

ย้อนกลับไป เมื่อปี 2007 ผมรู้จัก Erlang ครั้งแรก จาก blog สนธนาที่ไหนสักแห่ง ตอนนั้น ต้องเขียน Server Game Online โดยมีเป้าหมายว่า ต้องรับคนได้แบบไม่จำกัดจำนวน คือต้องสามารถ Scale แนวนอน ไปได้เรื่อยๆ (เพิ่มเครื่องเพิ่ม connection)

ตอนแรกว่า จะใช้ Python เพราะตอนนั้นมี Game Casual ของเกาหลีเขามาเสนอขายในไทย ใช้ Python เขียนทั้ง Client และ Server เลย แต่ก็มาสะดุดที่ Erlang อาจเพราะ.... ไม่มีคนใช้มั๊ง ไม่ขอบทำอะไรตามใคร แต่ชอบทำอะไรตามอำเภอใจ สุดท้าย น้องๆ ในทีม ที่ผมกำหนดให้เขียน Server ทั้งหมด 4 คน (รวมผมเป็น 5 คน) หลังจากเขียน Erlang กันไปได้พักใหญ่ ผลคือ ลาออกหนึ่งคน สองคนไม่น่าจะได้อะไรมาก อีกคนนึงเอา Erlang ไปทำ Project จบ ป.โท ลาดกระบังเป็นที่เรียบร้อย <<ตอนส่ง Project ตอบอาจารย์ว่า ใช้ Erlang ทำ Server (ทำเกม หมากฮอสออนไลน์) อาจาย์ตอบว่า ภาษาอะไร? มีภาษานี้ในโลกด้วยเหรอ?>>

Source code อยู่นี่ครับ https://github.com/nanusorn/SMO

พอแยกย้ายไม่ได้ทำ Game online ต่อ เคยคิดจะเอา Erlang มาทำอะไรเปรี้ยวๆ เล่น เหมือนกันเช่น เอา ETS, DETS Mnesia มาทำ memory database อ้าวทำเป็นเล่นนะครับ ตอนนั้น ยังไม่มี Couchbase เลย แต่ก็ต้องไปทำอย่างอื่นก่อน

พอปี 2011 กลับมาทำ Facebook game ก็คิดจะเอา Erlang มาทำ Server อีกเหมือนกัน แต่เวลากระชั้นมาก น้องในทีมเลยใช้ PHP แทน (เห้อ...)

ข่าวการใช้ Erlang แทบไม่มีให้เห็นในไทย แม้แต่ต่างประเทศ ผู้คนใน Community เองก็บ่นๆ กันว่า โดน Node.JS ดึง Developer ไปเยอะ แน่ล่ะ JavaScript เข้าใจง่ายกว่าเยอะนี่

จนปีนี้ ในที่สุด ความสุขสันต์ก็มีจริง มีโครงการที่สามารถใช้ Erlang ได้ และที่สำคัญ ผมลองเสนอ Erlang เข้าที่ประชุม ที่ประชุมเห็นด้วยกับการใช้ เสียด้วยสิ ทั้งๆ ที่บอกก่อนแล้วนะ Erlang คือ Prolog นะครับ เขาตอบกลับมาว่า "ผมชอบ Lisp คุณป้อลอง Clojure เลยไม๊" (แนวกว่าเราอีกอะ)

ผมกลับมาอยู่กับ Erlang ได้หลายเดือนแล้ว โครงการนี้ ใช้ Erlang ในแนวทางที่ผมไม่เคยใช้มาก่อน เช่น

  • WebMachine สำหรับ HTTP protocol
  • MongoDB สำหรับ เก็บ Transaction LOG
  • XML parser (เรื่องใหญ่โฮ๊ก) Parse incoming transaction log
  • OCI Oracle C Interface สำหรับ เก็บ data ของ Transaction 
  • Rebar Tools สุดเจ๋งสำหรับ จัดการทุกๆ ส่วนของ Erlang

ทำให้ได้เรียนรู้อะไรใหม่ๆ มากกว่าที่เคยเห็น เลยคิดจะเขียนเป็นบล็อคเก็บไว้เผื่อจะมีประโยชน์กับผู้ต้องการศึกษา Erlang


ผมจะทะยอย Blog ประสบการณ์ Erlang ให้มากที่สุดและบ่อยที่สุดต่อไป

Erlangian is Erlanging