Machine Learning ด้วย Javascript แบบง่ายๆ – การเลือกสีตัวอักษร ตอนที่ 2

ในตอนที่แล้ว Machine Learning ที่ผมสร้างขึ้นมานั้นยังเอ๋อๆ อยู่เพราะว่าข้อมูลที่นำมา Training นั้นน้อยเกินไป ซึ่งความฉลาดของ Machine Learning นั้นขึ้นอยู่กับข้อมูลเหล่านี้ด้วย นี่คือประโยชน์ของ Big Data เลยทีเดียว ในที่นี่ผมขอไม่ทำให้มันฉลาดขนาดนั้น แค่พอเอาไปประยุกต์ใช้ คราวนี้ผมจะนำผลลัพธ์ที่ได้นั้นนำไปใช้งานในเว็ปจริงๆ คือเป็นหน้าเว็บที่มี Color Picker และเมื่อเลือกสี ก็จะทำการเปลี่ยนสีพื้นหลัง จากนั้นก็นำผลลัพธ์ที่ได้จากตัว Machine Learning นี้ไปคำนวณค่าสีตัวอักษรออกมา

Continue reading “Machine Learning ด้วย Javascript แบบง่ายๆ – การเลือกสีตัวอักษร ตอนที่ 2”

Advertisements

Machine Learning ด้วย Javascript แบบง่ายๆ – การเลือกสีตัวอักษร ตอนที่ 1

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

Continue reading “Machine Learning ด้วย Javascript แบบง่ายๆ – การเลือกสีตัวอักษร ตอนที่ 1”

เขียน AI ให้เกมส์ด้วย Minimax Algorithm

ในการเล่นเกมที่มีผู้เล่นสองฝ่ายแล้วผลัดกันเล่นอย่างเช่นหมากรุก หมากฮอส หรือว่า XO (Tic Tac Toe) การเดินหมากแต่ละครั้งสิ่งที่ผู้เล่นต้องดูคือ การที่เราวางหมากนั้นลงไปแล้วจะทำให้เรามีโอกาสชนะหรือไม่ ถ้าไม่ทำให้เกิดโอกาสเราได้เปรียบในตาถัดไปก็ต้องดูว่าจะกันฝ่ายตรงข้ามไม่ให้มีโอกาสชนะได้อย่างไร ซึ่งเรื่องนี้ต้องอาศัยประสบการณ์ของผู้เล่นเป็นอย่างมากถึงจะคาดเดาไปจนถึงขั้นจบกระดานด้วยการเดินแค่หมากเดียว ซึ่งหากเราจะเขียน AI ก็ไม่จำเป็นที่จะต้องจำรูปแบบการเล่นนั้นไว้ เราสามารถเขียนให้มันทดลองเดินหมากทุกรูปแบบ ทุกความเป็นไปได้ แล้วหาว่างมันมีหนทางที่จะชนะหรือป้องกันอีกฝ่ายไม่ให้ชนะก็ได้ หนึ่งในวิธีการตะบี้ตะบันเดินหมากให้ครบทุกความเป็นไปได้นี้นั่นก็คือ Minimax Algorithm ซึ่งสรุปได้ง่ายๆ ว่า

เอากระดานปัจจุบันเป็นที่ตั้งแล้วทดลองเดินดูว่า

  • แล้วพบรูปแบบหมากที่พาเราไปชนะ ก็ให้จำทางนั้นไว้แล้วให้คะแนนเป็นบวก
  • ถ้าเดินไปสุดทางแล้วเราแพ้ให้จำไว้แล้วให้คะแนนเป็นลบ
  • ถ้าเสมอก็ให้จำแล้วให้คะแนนเป็นศูนย์

ทำอย่างนี้ไปเรื่อยๆ จนกว่าจะครบทุกความเป็นไปได้แล้วเอาทุกรูปแบบมาเปรียบเทียบแล้วหาค่าที่ดีที่สุด
Continue reading “เขียน AI ให้เกมส์ด้วย Minimax Algorithm”

รันโค้ดจากระยะไกลด้วยช่องโหว่ของ Struts2

การ Hack ที่สวยงามที่สุด คือการที่ Hacker มามือเปล่า มีเพียงแค่ Browser แล้วได้ข้อมูลที่ไม่สามารถประเมินค่าได้กลับไปด้วย

เป็นประโยคที่ผมชอบมากที่สุดตอนสมัยเริ่มศึกษาเรื่องการเจาะระบบตอนเรียนอยู่มหาลัยช่วงปีหนึ่ง ซึ่งหนึ่งในเทคนิคที่ผมชอบก็คือการรันโค้ดจากระยะไกล หรือ Remote Code Execution (RCE)

ก่อนที่จะไปดู RCE ผมจะพาไปดูการรันโค้ดใดๆ ก็ได้บนเครื่องตัวเองก่อน แล้วค่อยไปดูการรันโค้ดใดๆ จากระยะไกล

Disclaimer: บทความนี้สอนให้รู้จัก Web Security เบื้องต้นเพื่อเป็นความรู้ในการป้องกันระบบเท่านั้น และช่องโหว่ที่ใช้ในการทดสอบนี้ได้มีการประกาศอย่างเป็นทางการและได้รับการ patch แล้วจึงสามารถเผยแพร่ได้ หากมีความเสียหายที่เกิดจากการเจาระระบบแล้วอ้างถึงบทความนี้ ทางผู้เขียนบทความขอไม่รับผิดชอบต่อความเสียหายใดๆ ที่เกิดขึ้น

Continue reading “รันโค้ดจากระยะไกลด้วยช่องโหว่ของ Struts2”

พื้นฐาน Web Application Security

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

มีน้องคนหนึ่งอยากให้ผมช่วยสอนเรื่องนี้ ก็เลยอยาก draft ไว้ให้เบื้องต้นเพื่อเป็นแนวทางในการศึกษาต่อไป

ประตูที่มีกุญแจล็อคไว้ไม่ได้หมายความว่าห้องของเราจะปลอดภัย เราเคยได้ยินเรื่องแนวนี้หรือไม่?

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

Continue reading “พื้นฐาน Web Application Security”

Functional Programming คือ?

ถ้าใครชอบคณิตศาสตร์ (ผมตกเลข) คงจะคุ้นเคยกับคำว่า function กันมาบ้าง หน้าตามันประมาณนี้ f(x) = x2 หรือ f(x, y) = 2x + y เวลาใช้งานเราก็ต้องแทนค่าตัวแปรใน function เช่นกำหนดให้

x = 5

f(5)
= 5 x 5
= 25

หรือส่งเป็นสมการเข้าไปได้เช่น

x = 5
y = x + 4

f(x, y)
= f(5, x + 4)
= f(5, 9)
= 2 x 5 + 9
= 10 + 9
= 19

แล้วมันเกี่ยวอย่างไรกับการเขียนโปรแกรม???
Continue reading “Functional Programming คือ?”

การทำงานของตัวแปร serialVersionUID บทที่ 2

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

  • Bean มีฟิลด์ไม่เท่ากันและไม่ได้มีการประกาศตัวแปร serialVersionUID
  • Bean มีฟิลด์ไม่เท่ากันแต่มีการประกาศตัวแปร serialVersionUID

Continue reading “การทำงานของตัวแปร serialVersionUID บทที่ 2”