บทความ

กำลังแสดงโพสต์จาก ธันวาคม, 2024

สอนการใช้งาน A* Algorithm ด้วยภาษา Java

A* Algorithm คืออะไร A  (A-Star) Algorithm เป็นอัลกอริธึมที่ใช้สำหรับการค้นหาเส้นทางที่มีประสิทธิภาพที่สุดระหว่างสองจุดในกราฟ โดยพิจารณาทั้งค่า  g(n)  (ค่าเส้นทางจากจุดเริ่มต้นถึงจุดปัจจุบัน) และ  h(n)  (ค่าประมาณระยะทางจากจุดปัจจุบันถึงจุดปลายทาง) ซึ่งค่าทั้งสองจะรวมกันเป็น  *f(n) = g(n) + h(n) ขั้นตอนของ A* Algorithm เริ่มต้นจากจุดเริ่มต้น (Start Node) และเพิ่มเข้าไปใน  Open List เลือก Node ที่มีค่าฟังก์ชัน  f(n)  ต่ำที่สุดใน Open List  ย้าย Node ดังกล่าวไปยัง  Closed List ตรวจสอบเพื่อนบ้าน (Neighbor Nodes) ของ Node ที่เลือก  หาก Node เพื่อนบ้านยังไม่เคยอยู่ใน Open หรือ Closed List ให้เพิ่มเข้า Open List และคำนวณค่า  g(n) ,  h(n)  และ  f(n) หาก Node เพื่อนบ้านเคยอยู่ใน Open List แต่เส้นทางใหม่ดีกว่า ให้ปรับปรุงค่า  g(n) ,  h(n) , และ  f(n) ทำซ้ำจนกว่าจะถึงเป้าหมาย (Goal Node) หรือ Open List ว่าง  การเขียนโค้ด A* Algorithm ด้วย Java ตัวอย่างนี้เป็นการหาเส้นทางในกราฟ 2 มิติ (Grid)  i...

สอนสร้าง Cron Job ด้วย Spring Boot (ต่อ)

ใน Spring Boot การดึงค่าจาก  Entity  เพื่อใช้เป็นค่าใน  Cron Expression สามารถทำได้โดยการปรับแต่งโค้ดให้มีความยืดหยุ่นขึ้น ซึ่งต้องใช้  Dynamic Scheduling  แทนการกำหนดค่าแบบคงที่ใน  @Scheduled  เนื่องจาก  @Scheduled ไม่รองรับการกำหนดค่าแบบไดนามิกโดยตรง  วิธีดึงค่าจาก Entity เพื่อใช้ใน Cron Expression 1. สร้าง Entity และ Repository สมมติว่าเรามี Entity ที่เก็บค่า cron expression ไว้:  Entity: import jakarta.persistence.Entity; import jakarta.persistence.Id; @Entity public class CronConfig { @Id private Long id; private String cronExpression; // Getter and Setter public Long getId() { return id; } public void setId( Long id) { this .id = id; } public String getCronExpression() { return cronExpression; } public void setCronExpression(String cronExpression) { this .cronExpression = cronExpression; } } Repository: import org.springframewo...

สอนสร้าง Cron Jobs ด้วย Spring Boot

Cron Jobs  คือเครื่องมือที่ช่วยให้สามารถกำหนดตารางเวลาสำหรับการทำงานของระบบได้ โดยใน Spring Boot เราสามารถใช้ความสามารถของ  @Scheduled จาก Spring Framework เพื่อจัดการงานที่ต้องการรันตามเวลาที่กำหนดได้ง่าย ๆ  ขั้นตอนการสร้าง Cron Jobs ใน Spring Boot 1. เพิ่ม Dependency ใน  pom.xml  ของโปรเจกต์ Spring Boot ให้ตรวจสอบว่ามี dependency ดังต่อไปนี้  < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter </ artifactId > </ dependency > 2. เปิดใช้งาน Scheduled Tasks เพิ่มคำสั่ง  @EnableScheduling  ในคลาสหลักของโปรเจกต์  import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @EnableScheduling public class CronJobApplication { public static void main(String[] args) { SpringApplicatio...

สอนสร้าง Line Chatbot ด้วย Spring Boot

การพัฒนา Line Chatbot ด้วย Spring Boot เป็นเรื่องที่น่าสนใจและสามารถช่วยให้ธุรกิจหรือโครงการต่างๆ สามารถตอบสนองความต้องการของผู้ใช้งานได้อย่างมีประสิทธิภาพ บทความนี้จะช่วยให้คุณเข้าใจวิธีการสร้าง Line Chatbot โดยใช้ Spring Boot ได้อย่างง่ายดาย 1. เตรียมความพร้อม สิ่งที่ต้องมี: บัญชี LINE Developers สมัครและสร้าง  Messaging API Channel  เพื่อเชื่อมต่อกับ LINE Platform  URL:  https://developers.line.biz/ Spring Boot Framework ติดตั้ง Spring Boot และตั้งค่าโปรเจกต์เบื้องต้น Ngrok (หรือ Reverse Proxy อื่นๆ) ใช้เพื่อเปิดให้ LINE Webhook เข้าถึงเซิร์ฟเวอร์ที่รันในเครื่องของคุณได้ JDK และ Maven สำหรับจัดการ dependencies และรันโปรเจกต์ 2. สร้างโปรเจกต์ Spring Boot เริ่มต้นโปรเจกต์ด้วย Spring Initializr เข้าไปที่  Spring Initializr เลือก dependencies:  Spring Web  และ  Spring Boot DevTools ดาวน์โหลดโปรเจกต์แล้วนำมารันใน IDE ที่คุณใช้ (เช่น IntelliJ IDEA หรือ Eclipse) เพิ่ม dependencies สำหรับ LINE Messaging API แก้ไขไฟล์  pom.xml : < dependency ...

Stairway to Heaven สร้างบันไดสู่สวรรค์

ใน Roblox Studio คุณสามารถสร้างประสบการณ์แบบอินเตอร์แอคทีฟที่น่าสนใจได้ด้วย Lua สคริปต์ หนึ่งในไอเดียที่น่าสนใจคือการสร้าง "บันไดเสียงเพลง" ซึ่งเมื่อผู้เล่นเหยียบแต่ละขั้น จะเกิดเสียงเพลงขึ้น และบันไดจะสร้างขั้นใหม่ที่สูงขึ้น แต่ถ้าผู้เล่นเหยียบขั้นเดิมอีกครั้ง จะเล่นเสียงเพลงเท่านั้นโดยไม่สร้างขั้นใหม่อีก บทความนี้จะแสดงวิธีการสร้างบันไดเสียงเพลงด้วย Lua Script บน Roblox Studio ขั้นตอนการสร้างบันไดเสียงเพลง 1. การเตรียมโครงสร้าง สร้าง Part เพื่อเป็นขั้นบันไดแรก เพิ่ม Sound เข้าไปใน Part เพื่อใช้สำหรับเสียงเพลง จัดการ Anchor เพื่อให้บันไดไม่เคลื่อนที่ 2. เพิ่มสคริปต์เพื่อควบคุม ใส่ Script ลงใน Part และเขียนโค้ดดังนี้: local part = script.Parent local sound = part:FindFirstChild( "Sound" ) local stepHeight = 5 -- ความสูงของแต่ละขั้น local stepForward = 2 -- ระยะที่ขั้นใหม่จะเลื่อนไปข้างหน้า local isStepped = false -- สถานะการเหยียบ -- ฟังก์ชันที่ทำงานเมื่อเหยียบ local function onStepped (other) if other:IsA( "Player" ...

สอนสร้างไม้กายสิทธิ์ด้วย Android Application: เปลี่ยนการเคลื่อนไหวเป็นเสียง

ในยุคที่เทคโนโลยีสมาร์ทโฟนมีความก้าวหน้า การนำเซ็นเซอร์ต่าง ๆ ที่มีอยู่ในสมาร์ทโฟนมาใช้งานอย่างสร้างสรรค์สามารถสร้างประสบการณ์ที่น่าทึ่งได้ หนึ่งในแนวคิดที่น่าสนใจคือการสร้าง "ไม้กายสิทธิ์ดิจิทัล" ที่สามารถเปลี่ยนการสั่นหรือการเคลื่อนไหวเป็นเสียงได้ ผ่านการพัฒนาแอปพลิเคชัน Android ในบทความนี้ เราจะสำรวจแนวคิดและวิธีการพัฒนาแอปพลิเคชันที่ใช้เซ็นเซอร์ตรวจจับการเคลื่อนไหวและสร้างเสียงตามความเร็วของการเหวี่ยงไม้กายสิทธิ์  หลักการทำงาน เซ็นเซอร์ตรวจจับการเคลื่อนไหว (Accelerometer และ Gyroscope): เซ็นเซอร์นี้จะช่วยวัดความเร็วและทิศทางของการเคลื่อนไหว เช่น การเหวี่ยงไม้หรือการสะบัด  การคำนวณความเร็ว: ใช้ข้อมูลจากเซ็นเซอร์ Accelerometer ในการคำนวณความเร็ว (Magnitude of Acceleration) เพื่อกำหนดระดับเสียง  การสร้างเสียง: ใช้ Android SoundPool หรือ AudioTrack เพื่อสร้างเสียง โดยกำหนดความถี่ (Pitch) ให้สัมพันธ์กับความเร็วการเหวี่ยง  ขั้นตอนการพัฒนา 1. การตั้งค่าโปรเจกต์ ใช้  Android Studio  ในการพัฒนา  เพิ่มสิทธิ์การใช้งานเซ็นเซอร์ใน  AndroidManifest.xml : ...

ระบบ Cool Down ใน Roblox Studio: การใช้งานและประโยชน์

ใน Roblox Studio การพัฒนาระบบเกมให้มีความสมดุลและสนุกสนานมักต้องการเครื่องมือที่ช่วยควบคุมการกระทำของผู้เล่นอย่างเหมาะสม หนึ่งในเครื่องมือสำคัญที่นักพัฒนานิยมใช้งานคือ  "ระบบ Cool Down"  ซึ่งสามารถนำไปประยุกต์ใช้ในหลากหลายสถานการณ์เพื่อเพิ่มประสบการณ์การเล่นที่ดีขึ้น  ระบบ Cool Down คืออะไร? Cool Down คือช่วงเวลาที่ผู้เล่นต้องรอหลังจากดำเนินการบางอย่างในเกม เช่น การใช้ทักษะพิเศษ การยิงกระสุน หรือการเปิดใช้งานวัตถุ ก่อนที่พวกเขาจะสามารถทำซ้ำการกระทำนั้นได้อีกครั้ง ระบบนี้มักออกแบบให้มีระยะเวลาที่กำหนดไว้ล่วงหน้า เช่น 5 วินาที หรือ 10 วินาที  ประโยชน์ของระบบ Cool Down เพิ่มความสมดุลของเกม (Game Balance) ระบบ Cool Down ช่วยลดการกระทำที่ซ้ำซ้อนและอาจทำให้เกิดความไม่ยุติธรรม เช่น การสแปมทักษะที่มีพลังสูงหรือการโจมตีที่รวดเร็วเกินไป  ช่วยให้ผู้เล่นทุกคนมีโอกาสที่เท่าเทียมกันในสถานการณ์แข่งขัน  สร้างความตื่นเต้นและความท้าทาย (Challenge and Strategy) เมื่อมีการจำกัดเวลาการใช้ทักษะ ผู้เล่นจะต้องวางแผนและคิดให้รอบคอบก่อนที่จะกดใช้งาน  ส่งเสริมการเล่นที่มีความคิด...

Force และ Velocity

 ใน  Roblox Studio  เราสามารถใช้ภาษา  Lua  เพื่อสร้างสคริปต์ที่ควบคุมการเคลื่อนไหวของวัตถุต่างๆ ได้ โดยการใช้  Force  และ  ความเร็ว (Velocity)  ถือเป็นหัวข้อพื้นฐานสำคัญในการพัฒนาเกมเกี่ยวกับฟิสิกส์ เช่น การยิงกระสุน การเคลื่อนย้ายวัตถุ หรือแม้แต่การสร้างเกมแข่งรถ ในบทความนี้ เราจะพูดถึงการใช้งาน  BodyForce  และ  Velocity  พร้อมตัวอย่างโค้ดที่ใช้งานได้จริง 1.  พื้นฐานของ Force และ Velocity Force (แรง)  คือการกระทำที่ทำให้วัตถุเคลื่อนที่หรือเปลี่ยนแปลงความเร็ว เช่น การผลักหรือดึง Velocity (ความเร็ว)  คือการเปลี่ยนตำแหน่งของวัตถุในแต่ละช่วงเวลา โดยกำหนดเป็นเวกเตอร์ (X, Y, Z) ใน  Roblox Studio  เราสามารถใช้  Body Movers  เช่น  BodyForce ,  BodyVelocity , และ  LinearVelocity  เพื่อควบคุมวัตถุ 2.  การใช้ BodyForce เพื่อสร้างแรง BodyForce  ใช้สำหรับการเพิ่มแรงให้กับวัตถุในทิศทางที่กำหนด ตัวอย่างเช่น การผลักลูกบอลไปข้างหน้า ตัวอย่างโค้ด: ผลักลูกบอลด้วย BodyForce loc...

สอนสร้าง Slot Machine ด้วย JavaFX

วิธีการตั้งค่า pom.xml สำหรับโปรเจ็กต์ Slot Machine ด้วย JavaFX สร้างไฟล์ pom.xml สำหรับโครงการ Maven และใส่การตั้งค่าดังนี้: < project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > < modelVersion > 4.0.0 </ modelVersion > < groupId > com.example </ groupId > < artifactId > slot-machine </ artifactId > < version > 1.0-SNAPSHOT </ version > < properties > < java.version > 17 </ java.version > < javafx.version > 20 </ javafx.version > </ properties > < dependencies > <!-- JavaFX Dependencies --> < dependency > < groupId > org.openjfx </ groupId > < artifactId > javafx-controls ...

การใช้งาน TweenService ด้วย Lua บน Roblox Studio

TweenService เป็นบริการที่มีประโยชน์ใน Roblox Studio ซึ่งช่วยให้เราสามารถสร้างการเคลื่อนไหวที่ลื่นไหล เช่น การเปลี่ยนตำแหน่ง การเปลี่ยนสี หรือการปรับคุณสมบัติต่างๆ ของวัตถุในเกมได้อย่างง่ายดาย โดยไม่ต้องเขียนโค้ดที่ซับซ้อนเกี่ยวกับการคำนวณค่าในแต่ละเฟรม พื้นฐานของ TweenService Tween หมายถึง การเปลี่ยนแปลงคุณสมบัติของวัตถุจากค่าเริ่มต้นไปยังค่าปลายทางในระยะเวลาที่กำหนด โดยมีการกำหนดรูปแบบ (easing style) และพฤติกรรม (easing direction) ของการเคลื่อนไหว โครงสร้างของ TweenService: เรียกใช้บริการ TweenService ด้วย game:GetService("TweenService") กำหนด TweenInfo เพื่อกำหนดระยะเวลาและรูปแบบการเคลื่อนไหว ระบุคุณสมบัติที่ต้องการเปลี่ยนแปลงในรูปแบบตาราง (table) เรียกฟังก์ชัน TweenService:Create() เพื่อสร้าง Tween เรียกใช้งาน Tween ด้วย Tween:Play() ตัวอย่างการใช้งาน TweenService ตัวอย่างที่ 1: การเคลื่อนย้ายวัตถุ -- เรียกใช้ TweenService local TweenService = game:GetService("TweenService") -- กำหนดวัตถุที่ต้องการเคลื่อนไหว local part = workspace.Part -- กำหนด Tw...

การใช้งาน Task กับ RunService ใน Lua บน Roblox Studio

 Roblox Studio เป็นเครื่องมือที่ทรงพลังสำหรับการพัฒนาเกมบนแพลตฟอร์ม Roblox โดยใช้ Lua เป็นภาษาสคริปต์หลัก หนึ่งในคุณสมบัติที่น่าสนใจของ Lua คือการจัดการงาน (tasks) และการแสดงผล (renderer) ที่สามารถช่วยเพิ่มประสิทธิภาพและความสวยงามของเกมได้ ในบทความนี้ เราจะมาดูกันว่าคุณสามารถใช้งาน task และ RunService ใน Roblox Studio ได้อย่างไร Task ใน Lua คืออะไร? ใน Lua บน Roblox Studio คุณสามารถใช้โมดูล  task  เพื่อจัดการการทำงานแบบอะซิงโครนัส (asynchronous) เช่น การหน่วงเวลา การทำงานเป็นลูป หรือการจัดการงานที่ต้องการเวลาในการประมวลผล ตัวอย่างฟังก์ชันที่สำคัญได้แก่: task.wait(seconds)  — ใช้หน่วงเวลาเป็นวินาที (seconds) task.spawn(callback)  — สร้างงานใหม่แบบอะซิงโครนัส task.defer(callback)  — สร้างงานใหม่แต่รันหลังจากสคริปต์ปัจจุบันเสร็จสมบูรณ์ ตัวอย่าง: -- ใช้ task.wait เพื่อสร้างหน่วงเวลา print ( "เริ่มต้นงาน" ) task.wait( 2 ) -- หน่วงเวลา 2 วินาที print ( "งานเสร็จสิ้น" ) -- ใช้ task.spawn เพื่อรันงานแบบอะซิงโครนัส local function heavyTask () for i = 1 ,...

สอนการใช้ Java Neuroph Auto Encoder แทรก Prompt เพื่อช่วยสร้างผลลัพท์

ตัวอย่างการใช้งาน Java Neuroph ด้วยการประยุกต์แทรก Prompt ไปผสมกับ Latent Vector เพื่อใช้เป็นตัวกำหนดผลลัพท์ร่วมนะครับ โดยยกตัวอย่าง Prompt สำหรับงาน Graphic เช่น GrayScale และ Sepia import org.neuroph.core.Layer; import org.neuroph.core.Neuron; import org.neuroph.core.input.WeightedSum; import org.neuroph.nnet.comp.neuron.InputNeuron; import org.neuroph.nnet.comp.layer.InputLayer; import org.neuroph.nnet.comp.layer.FullConnectedLayer; import java.util.Arrays; public class AutoencoderWithMiddlePrompt { public static void main (String[] args) { // Step 1: Define input and prompt layers InputLayer inputLayer = new InputLayer( 4 ); // Example: 4 features for the main input InputLayer promptLayer = new InputLayer( 2 ); // Example: 2 features for the prompt // Step 2: Encoder layer FullConnectedLayer encoderLayer = new FullConnectedLayer( 3 ); // Latent representation // Step 3: Middle layer with combined latent ...

สอนใช้ java Neuroph สร้าง Autoencoder เพื่อย่อยหาคีย์ฟีเจอร์ของข้อมูล

 Autoencoder เป็นโครงข่ายประสาทเทียมที่ใช้สำหรับการลดขนาดข้อมูล (Dimensionality Reduction) หรือการเรียนรู้คุณสมบัติแฝง (Feature Learning) โดยโครงสร้างพื้นฐานของ Autoencoder ประกอบด้วยสองส่วนหลักคือ  Encoder และ  Decoder  ซึ่งทำหน้าที่ดังนี้: Encoder : แปลงข้อมูลขนาดใหญ่ (100 ตัวในที่นี้) ให้มีขนาดเล็กลง (20 ตัว) Decoder : แปลงข้อมูลที่ถูกลดขนาดกลับไปยังรูปแบบเดิม ประโยชน์ของการใช้ Autoencoder ได้แก่: ลดมิติข้อมูลเพื่อประหยัดพื้นที่จัดเก็บและเพิ่มประสิทธิภาพการประมวลผล เรียนรู้คุณสมบัติสำคัญของข้อมูลโดยไม่ต้องการข้อมูลป้ายกำกับ ใช้เป็นส่วนหนึ่งของกระบวนการเตรียมข้อมูลสำหรับงานอื่น เช่น การจัดกลุ่มหรือการวิเคราะห์ข้อมูลเชิงลึก Use Cases ของ Autoencoder: การลดขนาดข้อมูลสำหรับการแสดงผล : ลดมิติข้อมูลที่มีความซับซ้อนสูงให้สามารถแสดงผลได้ง่ายขึ้น เช่น การลดมิติของข้อมูลภาพหรือข้อมูลเสียง การตรวจจับความผิดปกติ (Anomaly Detection) : Autoencoder สามารถตรวจจับข้อมูลที่ไม่เหมือนกับรูปแบบปกติได้ เช่น การตรวจจับการโกงทางการเงินหรือข้อผิดพลาดในกระบวนการผลิต การบีบอัดข้อมูล (Data C...

สอนสร้าง MLP จำลองการทำงานแบบ RNN ด้วย Java Neuroph

Recurrent Neural Networks (RNNs) เป็นรูปแบบหนึ่งของโครงข่ายประสาทเทียมที่มีความสามารถในการจัดการข้อมูลที่มีลำดับ เช่น ข้อมูลเวลา (time series) หรือข้อความ (text sequences) อย่างไรก็ตาม Neuroph ซึ่งเป็นเฟรมเวิร์ก Java สำหรับสร้างและฝึกโครงข่ายประสาทเทียม ไม่มีการสนับสนุน RNN โดยตรง แต่สามารถปรับ Multilayer Perceptron (MLP) ให้ทำงานแบบ RNN ได้ด้วยการเพิ่มการจัดการสถานะ (state) ภายนอก แนวคิดหลัก ใช้  MLP  เป็นฐานของโครงข่ายประสาทเทียม เพิ่มกลไกการวนกลับ (feedback) โดยจัดเก็บผลลัพธ์ของเลเยอร์ซ่อน (hidden layer) และนำกลับมาใช้ใหม่ในลำดับถัดไป จัดการการทำงานที่คล้าย RNN ผ่านการเขียนโค้ดควบคุมภายนอก ขั้นตอนการจำลอง RNN ด้วย MLP ใน Neuroph เตรียมข้อมูล : จัดการข้อมูลสำหรับการเรียนรู้แบบลำดับ เช่น การพยากรณ์ค่าถัดไปในลำดับตัวเลข (เช่น ลำดับ Fibonacci) สร้างโครงข่าย MLP : สร้างโครงข่าย MLP ด้วยเลเยอร์อินพุต เลเยอร์ซ่อน และเลเยอร์เอาต์พุต เพิ่มกลไก Feedback : เก็บค่าผลลัพธ์ของเลเยอร์ซ่อนในแต่ละลำดับ และรวมค่าดังกล่าวกับอินพุตใหม่ การฝึกโครงข่าย : ใช้ค่าความผิดพลาด (error) ในการปรับน้ำหนั...