เบื้องหลัง music48voter.com

เว็บ music48voter.com เป็นเว็บลูกของ music48project.com สร้างเพิ่มเติมขึ้นมาเพื่อเป็นช่วยในการรวบรวมคะแนนเพื่อวัดผลในการดำเนินกิจกรรมของกลุ่มแฟนคลับ Music BNK48 ต่อไป

ตัวระบบก็ปั่น “backend กึ่ง front-end” ช่วงปีใหม่ 3-4 วัน แม้ว่าจะทำเก็บมาเรื่อย ๆ แต่ว่ามันแค่โครง ๆ เป็นไอเดียในระดับ user management แล้วลองของเรื่อง .NET Core อีกหนึ่งตัว (มีอีกหลายตัวที่กำลังคิดว่าจะย้ายมาใช้ เพราะมันมีอนาคตกว่า) โดยจากการทำโครงการเล็ก ๆ ตัวนี้ เจ้า .NET Core ตั้งแต่ 2.x มาเป็นต้นมา มันเขียนสะดวก และง่ายขึ้นมาก ความสามารถต่าง ๆ ตาม .NET Framework เกือบทันแล้ว (บางจุดก็ใช้แรงหน่อย แต่รวม ๆ ก็พอไหว) เลยใช้แทน PHP ที่หลัง ๆ ยุ่งกับมันน้อยลงเยอะ

ตัวเว็บนี้ใช้ .NET Core version 2.1 ใช้ร่วมกับฐานข้อมูล MySQL version 5.7 ซึ่งตัวเดิม ๆ ที่ new project มามันไม่รองรับหรอก แต่เราใช้ Class provider อย่าง Pomelo MySql ที่เป็น Class provider ที่ on top บน Entity Framework Core มาทำงานแทน ทำให้ไม่ต้องเขียนคำสั่ง SQL จริง ๆ แต่ทำผ่าน LINQ และ ORM แทนซึ่งจบในตัว

สำหรับ background woker ใช้ Hangfire ตัว Free ก็เพียงพอ สำหรับใช้พวกส่งอีเมล เพื่อจัดคิวในการส่ง และแก้ปัญหาเรื่อง blocking UI คือกดแล้วรู้เลยว่าสมัครแล้ว ส่วนส่งอีเมลยืนยันการสมัครที่เราไปต่อ 3rd party SMTP ภายนอกที่มักทำงานช้า ในระดับหลักเกือบวินาที มันทำให้ฝั่งเว็บค้างไปแป็บนึงมาช่วยให้มันไม่ต้องรอจุดนั้น แถมยังลดปัญหา waiting ที่ thread ช่วงส่งเมล ส่วนในหน้า Ranking ตัว report เนี่ย มันใช้พลังในการ summary เยอะ ก็ใช้ schedule woker ที่อยู่ในตัว Hangfire อยู่แล้วทำ ให้มันทำงานทุก ๆ 5 – 10 นาทีเพื่อสร้างข้อมูลใหม่ใน report table แทน แล้วเวลาแสดงผลก็ให้มาดึงที่ตัวนี้แทน การแสดงผลตารางดังกล่าวจะได้ไม่หนักฐานข้อมูล

ในส่วนของ Front-end Lib ก็ใช้ Bootstrap 4 เอาง่าย ๆ โดยจะมึนหัวนิดนึงตอน upgrade มาใช้ เพราะตัว default ของ .NET Core 2.1 คือ Bootstrap 3 ก็เลยต้องใช้ bower มาช่วยในการจัดการตรงนี้ แก้ default style ที่มันค้างใน Framework อยู่เยอะพอสมควร แต่แลกกับการทำงานดีง่ายกว่ามาก สำหรับทีมออกแบบหน้าเว็บ ที่เป็นอีกทีมหนึ่ง ที่เค้าใช้ Bootstrap 4 เข้ามาช่วยกันแก้ไข และตบแต่งเพิ่มเติมให้ออกมาสวยงามขึ้นอีก ทั้ง layout และ stylesheet ถ้าใครติดตามตัวเว็บช่วงนั้นจะเห็นว่าเราปรับปรุงตลอดเวลา ยิ่งช่วงวันท้าย ๆ เรามีการปรับโทนสีของเว็บใหม่ทั้งหมด เพื่อให้เข้ากับแนวทางการทำกิจกรรมช่วงสุดท้าย

ตัว Binary ตอน deploy ขึ้นทำงานบน CentOS 7 ทั้งฝั่ง App และ Database โดยตัว App วิ่งผ่าน HAProxy ที่ทำหน้าที่ reverse proxy อีกที (เป็น best practice ที่ควรทำ เพื่อสำหรับ HA และทำ hot deploy ได้)

สำหรับขั้นตอนการตรวจสอบโค้ดโหวตในฝั่งแอปก็ไปแกะเอามาจาก javascript ของฝั่งเว็บโหวตเพื่อเอามาตรวจสอบอีกรอบก่อนเอาลงฐานข้อมูลเพื่อลดงานหลักบ้าน ส่วนงานตรวจสอบอีกชั้นว่าโหวต หรือไม่ก ็ทำระบบหลังบ้านให้ทีมงานมาตรวจสอบจาก screen recorder อีกที ซึ่งยุ่งยากหน่อย แต่มันเป็นทางเดียว เพราะจะให้แฟนคลับแต่ละคนมากรอก username และ password เพื่อให้เราไปดึง token ผ่าน OAuth2 แล้วเอาไปดึงข้อมูลจาก API ออกจากเว็บโหวตโดยตรงคงมีไม่กี่คนจะมาใช้

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

มีเรื่องฮา ๆ และตื่นเต้นคือ ตอนเปิดให้สมัครวันแรก คนเข้ามาเว็บค่อนข้างเยอะมาก หลักพันกว่าคน แล้วตอนนั้นหน้าลงทะเบียนดันมี bug เกิดขึ้น เลยต้อง hot deploy ใหม่ในช่วงนั้นไป ทำเอาคนสมัครตอนนั้นบ่นกัน timeline ไหม้เลย (ToT)/~~~

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

อันนี้บันทึกเท่าที่คิดออก ณ ตอนนี้ ไม่รู้ตกหล่นอะไรไหมนะ ԅ(¯﹃¯ԅ)

HTTP error ที่มักเจอบ่อย ๆ หากใช้งาน application gateway (พวก load balancer หรือ reverse proxy)

เวลาใช้ application gateway (พวก load balancer หรือ reverse proxy) ตัว error ที่พบได้บ่อย ๆ จะมี 3 ตัวหลัก ๆ (โน๊ตไว้สำหรับอธิบายในอนาคต)

1. HTTP 502 Bad Gateway
คือ request ที่เข้ามาไม่สามารถส่งต่อไปยัง back-end ได้
โดยมักจะเกิดจาก
– service ที่ handle port listening นั้นดับไป
– IP ผิด
– DNS ที่ resolve IP มาไม่ได้ IP ที่ถูกต้อง
– โดน firewall block

2. HTTP 503 Service Unavailable
คือ request ที่เข้ามาส่งต่อไปยัง back-end แล้วได้รับการตอบกลับมาเป็น Error Code ที่ถูกตั้งค่าว่าไม่ปรกติ (มักจะเป็นพวกที่ไม่ใช่ HTTP 200 OK หรือพวก HTTP 301/302 Redirect) โดยทั่วไปเกิดจากแอปส่งผลตอบกลับเป็น HTTP 500 Internal Server Error (หาก config เพิ่มเติม เราสามารถใช้การส่ง error ตัวนี้ในการปกปิด Error Code หรือ Exception Message ที่มีความเสี่ยงออกไปยัง user ได้)

3. HTTP 504 Gateway Timeout
คือ request ที่เข้ามาแล้วส่งต่อไปยัง back-end แล้ว application gateway รอการตอบกลับมานานเกินกว่าค่า timeout ที่ตั้งไว้ (ปรกติจะตั้งไว้ 30-60 วินาที) ซึ่งมักเกิดจากตัวแอปด้านหลังประมวลผลนานเกิน โดยปัญหาเกิดจากเข้าใช้งานเยอะจนตัวแอปตอบสนองต่อการใช้งานไม่ทัน (แอปอาจจะ query ข้อมูลอย่างหนัก และฐานข้อมูลก็ทำงานตอบสนองต่อตัวแอปไม่ทันอีกต่อหนึ่ง)

ปล. back-end อาจจะเป็น Web Server หรือ Application Server ก็ได้

Ref: List of HTTP status codes

 


GOV.UK voter registration – 504 Gateway Time-out error

สุนทรพจน์โดย สัตยา นาเดลลา ซีอีโอ ไมโครซอฟท์ ในงาน Thailand Developer Day

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

Satya Nadella - Keynote

คำแปลสุนทรพจน์โดย สัตยา นาเดลลา ซีอีโอ ไมโครซอฟท์ ในงาน Thailand Developer Day

วันพุธที่ 25 พฤษภาคม 2559 ณ ห้องแอทธินี คริสตัล ฮอลล์ ชั้น 3 โรงแรมพลาซ่า แอทธินี รอยัล เมอริเดียน, กรุงเทพฯ, ประเทศไทย


Satya Nadella in Thailand | Satya Nadella in Thailand | Channel 9 

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

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

ในวันนี้ ผมอยากพูดถึงโอกาสครับ เหมือนกับสมัยปี 1981 ที่ผมโตขึ้นมากับการปฏิวัติวงการพีซี ในฐานะผู้ประกอบการและนักพัฒนา พวกคุณทุกคนจะมีโอกาสได้ทำอะไรอีกบ้างในอนาคต?

เรามาเริ่มต้นกันกับสิ่งที่ผมเรียกว่า โลกยุคโมบายและคลาวด์ (mobile-first, cloud-first world) เรามีมุมมองที่เฉพาะเจาะจงมากครับว่าคำว่าโมบายในที่นี้หมายถึงอะไร เราไม่ได้พูดถึงเพียงแค่ดีไวซ์สักเครื่องหนึ่งที่พกพาไปไหนมาไหนได้นะครับ แต่เราพูดถึงอะไรที่กว้างขวางกว่านั้น เรามองไปที่ประสบการณ์การใช้ชีวิตที่โลดแล่นไปบนอุปกรณ์คอมพิวเตอร์แต่ละชิ้นที่เราได้สัมผัส ลองนึกดูสิครับ อีก 5 ปีข้างหน้า คุณจะมีจออะไรต่างๆ ให้ใช้งานอีกมากมาย ทั้งจอเล็ก จอใหญ่ เซนเซอร์ในห้องแบบนี้ที่สามารถจดจำตัวคุณได้ และคุณก็จะอยากให้แอพและข้อมูลของคุณทั้งหมดถ่ายโอนข้ามกันระหว่างอุปกรณ์ทุกชิ้นในชีวิตของคุณด้วย ทั้งหมดนี้จะเกิดขึ้นได้ด้วยเทคโนโลยีคลาวด์ครับ การเคลื่อนที่และขยับขยายของประสบการณ์ที่ว่านี้ เกิดขึ้นได้เพราะการควบคุมของระบบคลาวด์

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

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

เรามีระบบโครงสร้างพื้นฐานคลาวด์ที่ยืดหยุ่นและเปิดกว้างที่สุด เพื่อรองรับการพัฒนาแอพพลิเคชันทั้งหมดนี้ คุณสามารถเขียนแอพด้วย .NET หรือจาวาก็ได้ทั้งนั้น คุณสามารถสร้างแอพได้ทั้งบนวินโดวส์และลินุกซ์ คุณสามารถนำเครื่องมือและเฟรมเวิร์กที่คุณคุ้นเคยมาใช้งานบนอาชัวร์ แพลตฟอร์มที่พร้อมรองรับเทคโนโลยีเหล่านี้อย่างเต็มที่ เราอยากทำงานร่วมกับคุณทุกคน ไม่ว่าคุณจะใช้เครื่องมือหรือเฟรมเวิร์กใดอยู่ก็ตาม

นอกจากนี้แล้ว เรายังให้ความสำคัญกับศักยภาพในการสร้างสรรค์ผลงาน ซึ่งเป็นหัวใจหลักของบริษัทเรามาโดยตลอด หากกล่าวถึง Visual Studio แล้ว ผมพูดได้เลยว่าไม่มี IDE (Integrated Development Environment) ไหนที่ดีกว่า Visual Studio ในการสร้างสรรค์ผลงานแอพออกมา ถ้านำ Visual Studio ไปจับคู่กับ TFS หรือ Visual Studio Online คุณจะสามารถทำงานได้คล่องตัวและต่อเนื่องกว่าที่เคย

เท่านั้นยังไม่พอครับ แม้แต่ใน Visual Studio เรายังเปิดกว้าง พร้อมรองรับชุดเครื่องมืออื่นๆ เรารองรับ Git อย่างเต็มที่ โดยคุณสามารถดึงโค้ดจาก GitHub หรืออัพโหลดขึ้นสู่ GitHub ได้ทันที แนวคิดของเราก็คือ คุณจะต้องมีเครื่องมือที่ยอดเยี่ยมที่สุดไว้ใช้งาน เพื่อให้คุณสามารถมุ่งเป้าไปที่การพัฒนาแอพพลิเคชันได้ตามเป้าหมาย นี่คือหัวใจหลักในแนวทางการพัฒนาอาชัวร์ของเราครับ

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

ผมเพิ่งได้พบกับทีมชนะเลิศจากการแข่งขัน Imagine Cup ในประเทศไทยทีมหนึ่ง ที่กำลังสร้างแอพสำหรับสอนภาษาอังกฤษให้กับเด็กนักเรียนไทย โดยพวกเขานำเอา API สำหรับการตีความคำพูดและการสื่อสารในรูปแบบธรรมชาติของเรามาปรับใช้ในแอพพลิเคชัน ในอนาคต เราจะได้เห็นการพัฒนาแอพแบบนี้กันอีกครับ

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

นอกจากนี้ ผมยังได้พบกับผู้ก่อตั้ง Ookbee ซึ่งผมประทับใจมากที่ได้เห็นว่าประเทศไทยมีคู่แข่งของ Amazon Kindle ที่มีส่วนแบ่งตลาดถึง 85% และมีฐานผู้ใช้รวม 10 ล้านคน ขณะนี้ Ookbee กำลังขยายธุรกิจออกไปทั่วเอเชียตะวันออกเฉียงใต้ และทางผู้ก่อตั้งก็ได้บอกกับผมว่าเขามีสตาร์ทอัพอีกหนึ่งบริษัทที่ตั้งเป้าหมายว่าจะแข่งขันกับ Airbnb ในเมืองไทย เป็นเรื่องที่น่ายินดีจริงๆ ครับ

อีกหนึ่งบริษัทที่ผมได้พบกับผู้ก่อตั้งในโอกาสนี้คือ Buzzebees ที่นำเอาแนวคิดธุรกิจแบบ business to business to consumer (B2B2C) มาปรับใช้กับข้อมูลในรูปแบบดิจิทัลทั้งหมด เพื่อนำมาสร้างโปรแกรมสำหรับมัดใจลูกค้า หรือเท่ากับเป็นระบบหลังบ้านสำหรับการทำธุรกรรมในเศรษฐกิจดิจิทัลทุกภาคส่วนของเมืองไทยนั่นเอง ทั้งหมดนี้ถือเป็นเป้าหมายที่ยิ่งใหญ่มาก แต่เท่านี้ยังไม่พอนะครับ ผู้ก่อตั้งบริษัทนี้มีเป้าหมายที่จะทำงานร่วมกับเรา และขยายธุรกิจต่อยอดออกไปให้ทั่วภูมิภาคเอเชีย และประเทศอื่นๆ ทั่วโลก เขามาถามผมด้วยว่าไมโครซอฟท์จะช่วยเขาขยายธุรกิจต่อไปได้อย่างไรบ้าง

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

แพลตฟอร์มถัดไปที่เรากำลังพัฒนาอยู่คือแพลตฟอร์ม Office 365 ครับ เราต้องการเสริมประสิทธิภาพในการทำงาน และพลิกโฉมรูปแบบการดำเนินธุรกิจด้วยคลาวด์ ปัจจุบัน มีธุรกิจขนาดใหญ่หลายรายในประเทศไทยที่เลือกใช้งาน Office 365 ซึ่งเป็นแพลตฟอร์มที่มีกระแสแรงมาก ในตอนนี้ เราไม่ได้หยุดอยู่เพียงแค่การย้ายจาก Exchange Server หรือ SharePoint Server ไปสู่คลาวด์ หรือจาก Lync ไปสู่ Skype for Business นะครับ การย้ายระบบงานไปสู่คลาวด์เป็นเรื่องที่ยิ่งใหญ่กว่านั้นมาก

ความเปลี่ยนแปลงที่เราได้เห็นในจุดนี้ ครอบคลุมถึงข้อมูลทั้งหมดของทุกองค์กร ไม่ว่าจะเป็นธุรกิจขนาดเล็กหรือขนาดใหญ่ ผู้คน ความสัมพันธ์ระหว่างแต่ละบุคคล หรือระหว่างบุคคลกับโครงการ เอกสาร และตารางเวลา ทุกสิ่งทุกอย่างนี้ได้ถูกแปรรูปไปเป็นกราฟและ API สำหรับนักพัฒนา ในช่วงเช้าวันนี้ ผมได้พบกับเจ้าของธุรกิจผู้สร้างสรรค์แอพพลิเคชัน SaaS สำหรับบริหารจัดการงานก่อสร้าง แน่นอนว่าใครก็ตามที่กำลังสร้างแอพพลิเคชันแบบนี้จะต้องอยากนำฟังก์ชันการบริหารจัดการโครงการและตารางเวลาของ Office 365 มาใช้ ซึ่งการผสมผสานฟังก์ชันเหล่านี้เข้าไปก็ทำได้อย่างราบรื่น เป็นธรรมชาติ ทุกวันนี้ การผนึกเอาฟังก์ชันเหล่านี้ไว้ในแอพได้กลายเป็นเรื่องง่ายกว่าแต่ก่อนมาก ด้วยศักยภาพของชุดเครื่องมือบนคลาวด์ และการที่ Office 365 เปิดให้นักพัฒนาสามารถเข้าถึงข้อมูลทั้งหมดเพื่อนำไปใช้งานได้อย่างสะดวกสบาย

เราไม่ได้หยุดอยู่เพียงเท่านี้ครับ ผมรู้สึกตื่นเต้นมากๆ กับนวัตกรรมคลื่นลูกใหม่ที่กำลังจะมาถึง ซึ่งจะพลิกโฉมเทคโนโลยีคอมพิวเตอร์ไปอย่างสิ้นเชิง เราเรียกนวัตกรรมนี้ว่า “conversations as a platform” ครับ สิ่งที่เชื่อมโยงมนุษย์ทุกคนเข้าถึงกันได้คือภาษา ลองนึกดูสิครับว่าจะเกิดอะไรขึ้น ถ้าเราสามารถสอนให้อุปกรณ์คอมพิวเตอร์รอบตัวเราสามารถนำพลังของภาษามาใช้งานได้ ทุกอย่างจะเปลี่ยนไปครับ ทุกๆ คนทั่วโลกจะสามารถเข้าถึงเทคโนโลยีคอมพิวเตอร์ได้โดยปราศจากอุปสรรค เพราะทุกวันนี้ ยังมีอีกหลายคนที่สับสนกับไอคอนมหาศาลบนหน้าจอสมาร์ทโฟน และเว็บแอพต่างๆ ที่มีโครงสร้างเมนูแตกต่างกันไปทุกแอพ

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

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

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

“Conversations as a platform” จะทำให้การโต้ตอบในรูปแบบต่างๆ เหล่านี้เป็นไปได้ครับ มาถึงตรงนี้แล้ว ผมขอเปิดคลิปวิดีโอสักคลิปหนึ่งให้ชมกัน เพื่อให้คุณได้เห็นภาพว่าเทคโนโลยีทั้งหมดนี้จะมีหน้าตาเป็นอย่างไร มาชมกันเลยครับ

เรารู้สึกตื่นเต้นมากๆ ครับกับความเป็นไปได้ใหม่ๆ สำหรับนักพัฒนากับเทคโนโลยีนี้ และเราได้ประสานงานกับนักพัฒนาหลายทีมทั่วโลกเพื่อใช้เฟรมเวิร์กของบอทมาพัฒนาบอทใน Skype, LINE เฟซบุ๊ค และช่องทางอื่นๆ เรามองว่าแพลตฟอร์มนี้จะเปิดกว้างมาก จนบอทเพียงตัวเดียวสามารถเข้าถึงได้จากทุกหนแห่ง

แพลตฟอร์มต่อไปที่ผมจะพูดถึงในวันนี้คือวินโดวส์ 10 ครับ วิสัยทัศน์ของเราสำหรับวินโดวส์ 10 คือการสร้างแพลตฟอร์มหนึ่งเดียวสำหรับทุกสิ่ง นับตั้งแต่ Internet of Things ไปจนถึงโฮโลเลนส์ แพลตฟอร์มนี้มี API และรันไทม์เพียงหนึ่งเดียว มีหน้าร้านแอพเพียงหนึ่งเดียว และในวันนี้ เรามีดีไวซ์กว่า 280 ล้านเครื่องทั่วโลกที่ใช้งานวินโดวส์ 10 ในแต่ละวัน สำหรับนักพัฒนาแล้ว การสร้างแอพพลิเคชันที่สามารถเข้าถึงฐานผู้ใช้ทั้งหมดนี้ได้ ถือเป็นโอกาสที่ยิ่งใหญ่ทีเดียว

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

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

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

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

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

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

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

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

ผมขอเชิญชมคลิปวิดีโออีกคลิป เพื่อให้ทุกท่านเห็นว่ามีแอพพลิเคชันแบบไหนบ้างที่พัฒนาขึ้นสำหรับเทคโนโลยีนี้ครับ

ผมชอบมากๆ เลยกับคำอธิบายของเทคโนโลยี holographic computing หรือ mixed reality ที่บอกว่า เมื่อคุณเปลี่ยนวิธีการมองโลกแล้ว คุณก็จะเปลี่ยนโลกที่คุณมองเห็นไปด้วย ทั้งหมดนี้จะเกิดขึ้นได้ด้วยจินตนาการและพลังสร้างสรรค์ของนักพัฒนา และแอพพลิเคชันใหม่ๆ จากฝีมือของพวกเขาในโลกของคอมพิวเตอร์ยุคใหม่นี้ครับ

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

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

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

ที่โรงเรียนมีชัยพัฒนา เราไม่เพียงแต่นำทักษะการใช้งานคอมพิวเตอร์และอุปกรณ์คอมพิวเตอร์เข้าไปมอบให้กับเด็กนักเรียนเท่านั้น แต่ยังเปิดโอกาสให้พนักงานไมโครซอฟท์ในประเทศไทยได้เข้าไปทำงานในฐานะอาสาสมัคร เพื่อสอนทักษะการใช้คอมพิวเตอร์ พร้อมด้วยเนื้อหาวิชาวิทยาศาสตร์คอมพิวเตอร์และภาษาอังกฤษให้กับเด็กๆ ในท้องที่

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

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

ขอบคุณมากๆ ครับ

PHP 5.4 กำลังจะหมด Security support และ End of Life ในเดือนกันยายน 2015 นี้

เมื่อปีก่อน PHP 5.3 นั้นก็หมดช่วง Security support  และ End of Life ไปตั้งแต่เดือนสิงหาคม 2014 แล้ว โดย version สุดท้ายคือ 5.3.29

มาปีนี้ PHP 5.4 ก็ตามมาติดๆ โดยจะหมด Security support และ End of Life ในเดือนกันยายน 2015 ที่จะถึงนี้เช่นกัน โดยใครที่จะอัพเกรดไป version ใหม่ในตอนนี้จากทั้ง PHP 5.3 หรือ PHP 5.4 ขอแนะนำให้อัพเกรดไปใช้ PHP 5.6 ไปเลย เพราะ PHP 5.5 จะหมดช่วง Security support  และ End of Life ในปีหน้านี้แล้วเช่นกัน ฉะนั้น อัพแล้วได้ support ยาวๆ ซึ่ง PHP 5.6 ยังคง support ไปอย่างน้อยๆ ก็ 2 ปี (End of Life ในสิงหาคมปี 2017)

ข้อมูลอื่นๆ

  • PHP 5.2 นั้น End of Life ไปตั้งแต่เดือนมกราคม 2011 (version สุดท้ายคือ 5.2.17)
  • PHP 5.3 นั้น End of Life ไปตั้งแต่เดือนสิงหาคม 2014 (version สุดท้ายคือ 5.3.29)
  • PHP 5.4 ในตอนนี้อยู่ในช่วง Security support เท่านั้น จะหมด support ในเดือนกันยายน 2015 นี้แล้ว (version ล่าสุด ณ วันที่โพสนี้คือ 5.4.40)
  • PHP 5.5 ยังอยู่ในช่วง Active support แต่จะหมดช่วง Active support ในเดือนมิถุนายน 2015 นี้ แล้วจะเข้าสู่ช่วง Security support เท่านั้น และจะหมด support ในเดือนมิถุนายน 2016 หรือปีหน้า (version ล่าสุด ณ วันที่โพสนี้คือ 5.5.24)
  • PHP 5.6 ตัวล่าสุด อยู่ในช่วง Active support แต่จะหมดช่วง Active support ในเดือนสิงหาคม 2016 (ปีหน้า) แล้วจะเข้าสู่ช่วง Security support เท่านั้น และจะหมด support ในเดือนสิงหาคมม 2017 หรือ 2 ปีข้างหน้า (version ล่าสุด ณ วันที่โพสนี้คือ 5.6.8)
  • PHP 7.0 จะออก RC version ในเดือนหน้า (มิถุนายน 2015) และ GA/Release ในเดือนตุลาคม 2015 นี้ โดยอ้างอิงจากแผนใน php.net

อ้างอิง

ส่วนใครยังอยากใช้ตัวที่ End of Life ไปแล้ว หรือเปิด options ใน php.ini ที่มีผลต่อความปลอดภัยของระบบ เอาตามที่สบายใจครับ

คำแนะนำในการเก็บรหัสผ่านในระบบสำหรับนักพัฒนาซอฟต์แวร์ และผู้ดูแลระบบไอที

คำแนะนำนี้เหมาะสำหรับนักพัฒนาซอฟต์แวร์ และผู้ดูแลระบบไอทีเป็นสำคัญ สำหรับบุคคลทั่วไปแนะนำให้อ่าน ตั้งรหัสผ่านอย่างไรให้ปลอดภัย แทนนะครับ

จริงๆ เจอเคสในการเก็บรหัสผ่านเป็นแบบ plaintext หรือเก็บรหัสผ่านแล้วสามารถย้อนกลับเป็น plaintext เดิมๆ ได้โดยง่าย ซึ่งผมเจอเคสแบบนี้บ่อยค่อนข้างมาก และคิดว่าควรจะเขียนเรื่องนี้สักครั้งหนึ่ง

หลักของการเก็บรหัสผ่านในฐานข้อมูลนั้น

1. ไม่ใช่การเก็บตัวรหัสผ่านจริงๆ ลงไป

2. ไม่ควรใช้การจัดเก็บรหัสผ่านที่สามารถย้อนกลับมาเป็นรหัสผ่านต้นทางได้ ไม่ว่าจะทางใดก็ทางหนึ่ง

หลักง่ายๆ ก่อน 2 ข้อนี้ ทำให้เกิดวิธีคิดในการเก็บรหัสผ่านเพียงแค่ hash (หรือบางเอกสารเรียก fingerprint หรือค่า message digest) ของรหัสผ่านนั้นๆ กล่าวคือ การกระทำใดๆ ในตัวระบบ ต้องไม่มีความสามารถที่สามารถย้อนกลับวิธีการได้มาซึ่งข้อมูล hash ได้ (Non-invertibleเพื่อเป็นการป้องกันรหัสผ่านที่แท้จริงจากการนำไปใช้งานได้ทันทีหลังจากระบบถูก hack แล้วถูก dump ข้อมูลเหล่านี้ออกไป เพราะแม้ว่ารหัสผ่านที่ถูกนำออกไปจะเป็นเพียงแค่ hash ของข้อมูล แต่การโจมตีแบบ rainbow table attacks ก็สามารถถอดรหัสผ่านใดๆ ที่เป็นเพียงแค่ค่า hash ย้อนกลับมาเป็นรหัสผ่านเดิมได้ไม่ช้าก็เร็ว เพราะแม้มีความเป็นไปได้น้อยมากๆ แต่ก็ถือว่ามีความเสี่ยง

หลักการขอ rainbow table attacks คล้ายๆ การ brute force รหัสผ่านโดยทั่วไป แต่เป็นการกระทำต่อ hash เป็นหลัก โดยสุ่มชุดข้อมูลที่คิดว่าเป็นรหัสผ่าน มาเข้าขั้นตอน hash ที่เป็นที่นิยมใช้ให้ได้ซึ่งค่า hash แล้วเอาชุดข้อมูลดังกล่าว ใส่ลงในฐานข้อมูล rainbow tableไว้ แล้วเมื่อมีการ hack ระบบเกิดขึ้นแล้วได้ชุดข้อมูล hash ที่ dump ออกมา ก็เอาไปทดสอบเทียบกับชุดข้อมูลในฐานข้อมูลที่สร้างไว้ก่อนหน้านี้ ก็จะย้อนกลับมาได้ว่า ข้อมูล plaintext ที่เป็นส่วนย้อนกลับของ hash มีค่าใด

หากแต่การปรับปรุงและใช้ขั้นตอนของการใดมาซึ่งค่า hash ที่ยาวขึ้น มีความซับซ้อนมากขึ้น ไม่ใช้ขั้นตอนตามมาตรฐานเพียงอย่างเดียว มีการผสมชุดข้อมูลอื่นๆ ที่สร้างขึ้นจากระบบด้วยแล้วการถูก rainbow table attacks ก็มีความเสี่ยงน้อยลงไปอีก

โดยด้านล่างเป็นลักษณะของฟังค์ชั่นโดยทั่วไปที่มักใช้กัน

[hash] = [salt] + [hash_function([salt] + [password])]

[salt] = เป็นการสุ่มจากวิธีการสุ่มใดๆ ที่ปลอดภัยที่สุดเท่าที่ทำได้ คำแนะนำคือควรใช้วิธีการสุ่มจากฟังค์ชั่นแบบ Cryptographically Secure Pseudo-Random Number Generator (CSPRNG)

[hash_function] ก็เลือกว่าจะเอาตัวไหนก็ได้ แต่ที่ใช้ๆ กันก็ แต่พวก MD5 หรือ SHA-1 ที่มันหาง่าย แต่มันก็แข็งแรงน้อยลงมากๆ ไม่แนะนำ และเดี่ยวนี้มันพูดกันที่ระดับ SHA-2 กันไปแล้ว (SHA-2 = SHA-256 หรือ SHA-512)

จริงๆ สูตรฟังค์ชันด้านบนนั้น มีชุดคำสั่งสำเร็จรูปที่นิยมกันที่ชื่อ PBKDF2 เพราะมีการกำหนดชุดการฟังคัชันในการ hash, จำนวนรอบในการสุ่ม และกำหนดความยาวของ hash ได้หลากหลาย ทำให้ยากมากขึ้นในการได้มากซึ่ง plaintext ที่แท้จริงจาก rainbow table

hash= PBKDF2(hash_function_name, password, salt, iterations, length)

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

โดยการทำแบบนี้ “ช่วยให้ผู้ใช้งานทั้งระบบยังพอมีเวลาในการปรับเปลี่ยนรหัสผ่านชุดใหม่ได้ใน ระยะเวลาที่น่าจะปลอดภัยมากที่สุด” เพราะหากว่ากันตามความเป็นจริงแล้ว ในวงการด้านการเข้ารหัสข้อมูลนั้น ทราบกันดีว่า ไม่มีวิธีการใดอะไรที่สามารถเข้ารหัสข้อมูลได้ปลอดภัยที่สุดไปตลอดกาล เพราะเทคโนโลยีด้านการคำนวนของ CPU/GPU นั้นเร็วมากขึ้นทุกวัน การจัดเก็บข้อมูลที่ปลอดภัยในช่วงเวลาหนึ่งอาจไม่ปลอดภัยในอีกไม่กี่ปีต่อมา เพราะเราสามารถแกะ และคำนวนหาค่าต่างๆ หรือสุ่มชุดข้อมูลต่างๆ ได้เร็วและหลายหลากขึ้น ตาม CPU/GPU ที่เร็วขึ้นเพื่อมาสร้าง rainbow table ได้ทุกขณะ

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

อ้างอิง

Ref: https://www.flickr.com/photos/nyuhuhuu/4443886636