วันพฤหัสบดีที่ 19 กุมภาพันธ์ พ.ศ. 2558

มาตรฐานที่ต้องพัฒนา

มาตรฐาน Http/2 

เมื่อการพัฒนาด้านต่างๆ ก็เปลี่ยนตามกาลเวลา มาตรฐานที่ใช้กันอยู่จำต้องมีการพัฒนาให้เท่าทัน
เพื่อประสิทธิภาพที่ดีขึ้นเรื่อยๆ โพรโทคอล HTTP/2 (เดิมเรียกว่า HTTP/2.0) ถูกร่างขึ้นจาก
โพรโทคอล SPDY/2 ที่กูเกิลพัฒนามาระยะเวลาหนึ่งแล้ว ซึ่งมีการเปลี่ยนแปลงมาตรฐาน
จาก HTTP/1.1 ที่ถูกประกาศใช้งานเมื่อปี ค.ศ. 1999 เป็นจำนวนมาก โดยส่วนใหญ่เป็นการปรับปรุงประสิทธิภาพ ที่ทำให้ช่วยเพิ่มความเร็วการเชื่อมต่อ ปรับปรุงวิธีการเรียกใช้งานให้สามารถร้องขอ
ข้อมูลหลายๆ ชิ้นได้ในครั้งเดียว ทำให้ลดภาระฝั่งนักพัฒนา เช่นการรวมไฟล์ css, js หรือการทำ css sprite ฯลฯ ถึงแม้ว่าตัวร่างมาตรฐานเองไม่ได้บังคับว่าจะต้องเข้ารหัสตลอดเวลา แต่ในทางปฏิบัติ
จริงทั้งฝั่งเซิร์ฟเวอร์และเบราว์เซอร์ต่างก็ระบุว่าถ้าจะใช้ HTTP/2 ต้องทำงานผ่าน TLS/1.2 ขึ้นไปเท่านั้น เท่ากับว่าในการใช้งานจริง HTTP/2 จะถูกเข้ารหัสเสมอ


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

วันอังคารที่ 20 มกราคม พ.ศ. 2558

Project Ara

เมื่อความต้องการที่หลากหลายเกิดขึ้น สินค้าที่ตอบสนองความต้องการนั้น
เริ่มไม่เพียงพอต่อความต้องการ สายการผลิตย่อมมีข้อจำกัดในการผลิต
สินค้าที่หลากหลานเกินตลาดได้ จึงมีไอเดียเร่ิมผลิตสินค้าที่ลูกค้าสามารถเลือก
ชิ้นส่วน ( Module ) มาประกอบกัน แนวความคิดนี้เร่ิมแพร่หลายมาสู่ SmartPhone
เช่น จากการเปิดเผยล่าสุดสมาร์ทโฟน  กูเกิลยังคงจะดำเนินโครงการ Project Ara
แม้จะขายโมโตโรล่าไปเรียบร้อยแล้ว (โมโตโรล่าเป็นผู้ริเริ่ม Project Ara)  
ซึ่ง Project Ara นั้น จะทำให้เราสามารถซื้อชิ้นส่วน Smartphone มาประกอบเองได้ 
เหมือนการประกอบพีซี  ทาง Google ประกาศเดินหน้าโครงการอย่างเต็มที่ คาดดว่า
จะพร้อมจัดจำหน่ายได้จริงในปีหน้า (2015) เสนอราคาเริ่มต้นอยู่ที่ประมาณ 50 ดอลล่าร์
( 1,500 บาท ) จะได้ในส่วนของหน้าจอและชิป Wi-Fi เท่านั้น  
ส่วนฟีเจอร์ตัวอื่นๆ ต้องซื้อเพิ่มเอง


วันจันทร์ที่ 24 พฤศจิกายน พ.ศ. 2557

อนาคตที่เป็นดาบสองคม

แค่ส่องกล้องก็แปลศัพท์ได้!

Thai Dict Lens พอเปิดขึ้นมา แอพจะทำการดึงฐานข้อมูลศัพท์สักพัก สังเกตว่าจะมีแถบด้านบนที่เป็นเหมือนกล้อง ซึ่งตรงนั้นละเราจะใช้ “ส่อง” ลงไปที่ศัพท์ภาษาอังกฤษที่เราไม่รู้คำแปล แล้วอยากให้แอพช่วยแปล

แค่พิมพ์ก็แปลศัพท์ได้!

Official Account TH-EN Translator จะทำหน้าที่เป็นล่ามช่วยแปลเป็นภาษาอังกฤษให้โดยอัตโนมัติ

WeChat translate ซึ่งทำหน้าที่เหมือนวุ้นแปลภาษาของโดเรม่อน ไม่ว่าเราหรืออีกฝ่ายนึงจะทำการแชทมาด้วยภาษาอะไร เราก็สามารถกดแปลเป็นภาษาของเครื่องที่เราตั้งค่าไว้ได้ทันที

แค่พูดก์แปลศัพท์ได้!

Google Translate เวอร์ชันใหม่ มีฟีเจอร์สำคัญคือสามารถฟังเสียงพูดแล้วแปลภาษาออกมาเป็นเสียงพูดในอีกภาษาหนึ่งได้แล้ว

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

แค่ส่องกล้องก็วัดความเร็วได้!

App Traffy bSafe Mobile สำหรับแจ้งร้องเรียนเรื่องความปลอดภัยของการเดินทางโดยรถสาธารณะ แอพพลิเคชั่นนี้สามารถอัพโหลดรูปภาพ คอมเม้นรูปภาพ ทำการวัดความเร็วของรถแบบ real-time เป็นต้น

แค่ส่องกล้องก็วัดระยะได้! 

Smart Measure เพียงแค่ยืนขึ้นและกดชัตเตอร์ วัดระยะนี้ วัดระยะทาง, ความกว้างความสูงและพื้นที่ของเป้าหมายกับโทรศัพท์ของคุณโดยตรีโกณมิติ

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

วันเสาร์ที่ 27 กันยายน พ.ศ. 2557

สถาปัตยกรรม Deep Learning จากปัญญาประดิษฐ์ สู่ระบบต่างๆ

พัฒนาความฉลาดของเครื่องคอมพิวเตอร์ในการเรียนรู้และเข้าใจภาษาธรรมชาติและสามารถทำการตัดสินใจได้ด้วยตนเอง วิธีการฝึกฝนอุปกรณ์คอมพิวเตอร์ซึ่งเป็นส่วนหนึ่งของเทคโนโลยีสาขาปัญญาประดิษฐ์ (Artificial Intelligence) นี้ เรียกว่า “Deep-learning”
ในปัจจุบันเข้าสู่ยุคคอมพิวเตอร์ในรูปแบบอุปกรณ์ติดตัว SmartPhone มีการใส่ algorithm ผสมผสานในซอฟต์แวร์
อำนวยความสะดวกให้แก่ผู้ใช้งาน สามารถประมวลผลข้อมูลจำนวนมากๆด้วยการจำลองเครือข่ายประสาทแบบเดียวกับในสมองของมนุษย์เรา เช่น ในส่วนของระบบจดจำเสียงพูด (Speech Recognition) จะสามารถโทรออกและรับสายด้วยเสียง หรือแม้กระทั้งสนทนา (Voice function) 
อนาคตอาจจะได้เห็นอุปกรณ์ที่มีการพัฒนาด้านนี้มากขึ้นเรื่อยๆ จนอาจทำให้มนุษย์อาจไม่ยากศึกษาหาความรู้ด้วยตัวแต่จะมุ่งเน้นอาศัยระบบนี้มากขึ้น แต่ก็หวังว่าจะมีนักพัฒนาที่สร้างสรรงานให้มนุษย์มุ่งเน้นอาศัยตัวเองมากกว่าระบบที่แสนจะฉลาดด้วยน้ำมือมนนุษย์สร้างมาเอง

วันจันทร์ที่ 8 กันยายน พ.ศ. 2557

USB Connector ที่ยังไม่ใช่อนาคต













image by moddiy.com

USB 3.1 Type-C 

เป็นเทคโนโลยีที่จะมารองรับการทำงานส่งผ่านข้อมูลได้รวดเร็วกว่าถึงเท่าตัวคือ 10 Gpbs 
นอกจากนี้ ยังรองรับเทคโนโลยี USB Power Delivery ที่ใช้ในการรับส่งกระแสไฟฟ้า 100 วัตต์
และยังสามารถเสียบสลับด้านได้โดยไม่มีปัญหา
 ** เทคโนโลยีในลักษณะเพ่ิมความเร็วเพิ่มกำลังมีออกมามากก็เพราะแหล่งข้อมูลต่างๆมีหน่วยวัด
ที่สูงมากขึ้นเรื่อยเช่น รูปภาพมีความละเอียดมากก็จะมีหน่วยจัดเก็บที่มากประมาณ 1 Gbyte ถ้ามี
จำนวนรูปหลายรูปเวลาโอนถ่ายก็จะกินเวลานานจึงต้องมีการพัฒนา Connector

วันพฤหัสบดีที่ 24 กรกฎาคม พ.ศ. 2557

พัฒนาการกับวิธีพัฒนาซอฟท์แวร์สำหรับปัจจุบันและอนาคต

Agile Method

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

กรณีศึกษาใช้ Agile Method

Scrum
Scrum เป็นรูปแบบการจัดการแบบที่แต่ละคนต่างผลักดันซึ่งกันและกันสามารถนำไปปรับ ใช้ในการบริหารจัดการและควบคุมทั้งโครงงานแบบทำซ้ำและแบบเพิ่มราย ละเอียดในแต่ละขั้นตอน การพัฒนาแบบ Scrum ผู้ใช้ระบบจะต้องทำงานร่วมกับทีมพัฒนาอย่างใกล้ชิด เพื่อที่จะระบุและจัดลำดับความสำคัญก่อนหลังของหน้าที่ของระบบ แล้วเก็บรวบรวมไว้ในรูปแบบที่เรียกว่า Product Backlog ข้อมูลที่อยู่ภายใน Product Backlog ประกอบด้วยลักษณะเด่น การแก้ไขข้อผิดพลาดต่างๆ และความต้องการของผู้ใช้ในส่วนอื่น ๆ เป็นต้น การส่งมอบงานของวิธี scrum จะเป็นชิ้นงานที่ทำงานได้บางส่วนที่เกิดจากการแบ่งงานทั้งงานออกเป็นส่วน ย่อยๆ โดยระยะเวลาระหว่างการส่งมอบงานจะอยู่ในช่วงประมาณ 30 วัน  ดังนั้น Scrum จึงเป็นกระบวนการพัฒนาที่อยู่บนพื้นฐานของ Sprint หมายถึงวิธีการที่ให้เราทำงานเป็นช่วง ๆ คือ ออมแรงไว้ก่อน แล้ว sprint เป็นช่วงๆตามหลักการ คือ 2-4 สัปดาห์

Scrum ประกอบไปด้วยสาระสำคัญ 3 อย่างคือ

1. ทีมงาน มีลักษณะที่สำคัญ 3 ประการคือ

- Scrum Team คือกลุ่มบุคคลที่ปฏิบัติงานจริงประมาณ  5 - 9 คน  แต่ละคนไม่ได้กำหนดงานตายตัว สามารถทดแทนกันได้เสมอ นอกจากนี้แต่ละคนในทีมงานมีหน้าที่ประเมินเวลาของงานที่ต้องทำ แบ่งงานและส่งงานกันเอง
 - Product Owner คือผู้ที่ทำหน้าที่จัดการเรื่อง product backlog   คิด รวบรวม เผยแพร่ให้ทุกคนรับรู้ ได้เห็น เพื่อให้คนในทีมเห็นแนวปฏิบัติในอนาคตว่ามีงานอะไรบ้าง ซึ่งบุคคลคนนี้จะเป็นคนเขียนรายละเอียดและความต้องการของผู้ใช้ด้วย
- Scrum Master คือผู้ที่ทำหน้าที่ดูแลทีมงาน เป็นโค้ชของทีมงาน เป็นคนที่รับ ผิดชอบคุณภาพของผลงาน จัดลำดับความสำคัญของงาน แตกงานให้ที่ประชุมตัดสินใจตามความเหมาะสม

2. กระบวนการทำงาน มีลักษณะที่สำคัญ 3 ประการคือ

- Backlog เป็นรายการของคุณลักษณะที่ต้องทำซึ่งรวมถึงความต้องการจากผู้ใช้  การแก้ไขข้อผิดพลาด และกำหนดคุณลักษณะพิเศษเฉพาะของตัวผลงานโดยคนที่ทำคือ product owner ซึ่งจะจัดลำดับคุณลักษณะตามความสำคัญ จัดรายการเพื่อนำเข้า sprint และจัดการกับรายละเอียดต่างๆของคุณลักษณะเหล่านั้น
- Sprint phase คือช่วงที่จะต้องทำงานซ้ำๆโดยมีกำหนดไม่เกิน 30 วัน ก่อนเริ่ม sprint ก็จะมีการนำ product backlog มาจัดลำดับความสำคัญเพื่อเลือกมาเป็น sprint backlog จากนั้น scrum team จะดู backlog และแตกเป็นงานย่อยๆออกมาและทำการประมาณเวลาที่ใช้ในแต่ละงาน หลังจากได้เวลาและต่อรองกันระหว่างทีมงานแล้ว ก็จะได้รายการของงานและรายการของ backlog
- Daily scrum มีลักษณะเป็นการประชุมอย่างไม่เป็นทางการ อาจเป็นการยืนคุยกัน โดยทุกๆวัน scrum master และ scrum team จะพบปะพูดคุยกันเพื่อทบทวนว่าเมื่อวานทำอะไรไปบ้าง และวันนี้จะทำอะไร มีการถกกันเพื่อแก้ไขปัญหาที่พบเมื่อวาน และจัดการกำหนดงานให้กับทีมงานแต่ละคน
- การสาธิตและการประเมินผลงาน จุดเด่นของ Scrum คือสามารถวัดผลการทำงานได้ มีผังการทำงานที่เรียบง่าย และธรรมดา แต่ทำให้เห็นภาพของ sprintได้อย่างชัดเจนโดยหลักการแล้วก็คือกราฟของงานโดยแกน y แทนจำนวนงานที่เหลือ ส่วนแกน x แทนวันแต่ละวันของ sprint โดยในแต่ละรายการจะมีการปรับเปลี่ยนกราฟ เพื่อแสดงให้เห็นภาพความคืบ หน้าของงาน หลังจากจบ sprint ก็จะเอากราฟนี้มาประเมินผลงานของทีมงาน
(เนื้อหาบางส่วนจาก ฝ่ายพัฒนาระบบคอมพิวเตอร์ ส่วนเทคโนโลยีสารสนเทศ มจร และ http://thumbsup.in.th/ )

จากเนื้อหาข้างบน ยังมีวิธีอีกมากมายสำหรับ software developer ที่จะหยิบจับเลือกวิธีการที่
เหมาะสมกับงานที่เราจะพัฒนาซอฟต์แวร์ให้สำเร็จลุล่วงไปได้ อาจจะใช้วิธีผสมผสานหลายๆ วิธี
เข้าด้วยกันเพื่อเกิดประสิทธิภาพและประสิทธิผลของเป้าหมายที่จะดำเนินก็เป็นได้

วันพุธที่ 11 มิถุนายน พ.ศ. 2557

การเข้ารหัสทางเดียว (HASHING)

การ crack password ที่ถูกเข้ารหัสไว้แบบทางเดียว (hashing) เช่นพวก md5, sha1, sha256 ฯลฯเดี๋ยวนี้เวลาจะเก็บ password ของสมาชิก ก็มักจะ hash มันด้วย md5 ก่อน แล้วค่อยยัดลง database
แม้แต่ผู้ดูแลระบบเองก็ไม่เห็นว่า password ของสมาชิกคืออะไร
นั่นหมายความว่ามันถอดกลับมาเป็น password จริงๆ ไม่ได้  เพราะฉะนั้นเวลาที่เราต้องการตรวจสอบว่าสมาชิกกรอก password ถูกหรือเปล่า เราก็จะเอาสิ่งที่เขากรอกมา hash ด้วย md5 แล้วก็เอาไปเทียบกับสิ่งที่อยู่ในฐานข้อมูลว่าตรงกันหรือเปล่า ถ้าตรงกันก็แสดงว่ามันคือ password เดียวกันกับที่ตอนสมัคร
Hash function คือ การนำเอาข้อมูลอิเล็กทรอนิกส์ต้นฉบับที่จะส่ง มาผ่านกรบวนการทางด้านคณิตศาสตร์ที่เรียกว่า Hash Function เพื่อให้ได้ข้อมูลที่สั้น ที่เรียกว่า Digest หรือ ข้อมูลย่อย ก่อนที่จะทำการเข้ารหัส เนื่องจากข้อมูลต้นฉบับมักจะมีความยาวมาก ซึ่งจะทำให้กระบวนการเข้ารหัสใช้ระยะเวลานาน
คูณสมบัติ
1. ควรมีความจำเพราะเจาะจงในแต่ละข้อมูล
2. หากมีการเปลี่ยนแปลงข้อมูลเล็กแล้วค่าที่ Hash ออกมาจะต้องมีความแตกต่างกันอย่างสิ้นเชิง
3. หาได้ง่ายและใช้เวลาน้อย ควรเป็นฟังก์ชันที่ไม่ซับซ้อน สามารถสร้างโดยฮาร์ดแวร์และ
    ซอฟต์แวร์ได้ง่าย
4. ไม่ควรเป็นฟังก์ชันที่ย้อนกลับได้ คือ เมื่อทราบผลลัพธ์แล้วไม่มีทางทราบข้อมูลเลย
5. ข้อมูลที่ได้ต้องมีการซ้ำกันน้อยหรือไม่มีเลย
ในบรรดาฟังก์ชัน Hash ทั้งหลาย ฟังก์ชัน SHA-1 จัดว่าเป็นฟังก์ชันหนึ่งที่เป็นมาตรฐาน และมีการใช้งานกันอย่างกว้างขวาง ฟังก์ชัน SHA-1 จะใช้บล็อกข้อมูลขนาด 512 บิต โดยสร้างผลลัพธ์ MD ความยาว 160 บิตคงที่
ทีนี้แล้วเจ้า MD5 ละ
MD5 ย่อมาจาก Message-Digest algorithm 5 คือ รูปแบบการเข้ารหัสแบบ Hash ชนิดหนึ่ง
การเข้ารหัสแบบ Hash  (Cryptographic hash) คือ การแปลงรูปแบบของข้อมูลที่รับเข้ามาไม่ว่าขนาดเท่าใดก็ตาม ให้อยู่ในอีกรูปแบบหนึ่งที่มีขนาดคงที่ เพราะฉะนั้น จะไม่สามารถเรียกดูข้อมูลต้นฉบับได้ (Decrypt) ทำได้เพียงตรวจสอบว่าข้อมูลที่ให้มาแต่ละครั้งเหมือนกันหรือไม่ ความปลอดภัยจึงค่อนข้างสูง ในที่นี้ MD5 เป็นการเข้ารหัสแบบ 128-bit ให้ค่าเป็นตัวเลขฐาน 16 (0123456789abcd) ขนาด 32 ตัวอักษร แต่ก็มีบางประเภทที่ให้ค่าเป็น binary และ base64

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

การแปลงค่า MD5  ทำได้โดย วิธีการที่เรียกว่า Brute-Force (หาค่าตั้งแต่ a-z และนำไปเปรียบเทียบ จากนั้นก็เป็น aa-zz และต่อไปเรื่อยๆ) นอกเหนือไปจากนี้ยังมีวิธีการที่เรียกว่า Hash Collision (การชนกันของ Hash)  นอกจากการเข้ารหัสแบบ MD5 แล้วยังใีการเข้ารหัสแบบอื่น เช่น Encryption และ bytecode เป็นต้น
       จากข้อมูลเบื้องต้น เราสามารถสร้างความปลอดภัยได้ทั้งในโปรแกรมบนเครื่องคอมพิวเตอร์
และสมาร์ทโฟน เพียงแต่เราต้องศึกษาใหืท่องแท้และลึกซึ้ง ถึงข้อมูลการประยุกต์ใช้งานด้านต่างๆ
แหล่งที่มา : kokiuki,mairai.wordpress.com,mindphp.com