Tag: java
227 รายการ
Blog

แพตช์แล้วยังไม่จบ: เช็กและแก้ LiteLLM, GitLab, Python, Java และ pandas ประจำสัปดาห์
คู่มือสายเดฟจากคลิปสรุปข่าว 19–26 ต.ค. 2026: คำสั่งเช็กเวอร์ชันและร่องรอย รุ่นที่ต้องอัปตอนนี้ (หลายตัวออกรอบสองแล้ว) และขั้นตอนแก้ตามประกาศทางการ

Java Normalizer: ค้นหาชื่อไทยให้ตรงกัน เข้าใจ NFC กับ NFKC ก่อนใช้
ทำคีย์สำหรับค้นหาข้อความด้วย java.text.Normalizer พร้อมเทสต์สระอำ ลำดับวรรณยุกต์ และตัวเลขเต็มความกว้างบน JDK 21

ตัดข้อความไทยใน Java ให้สระ วรรณยุกต์ และอีโมจิอยู่ครบด้วย BreakIterator
ทำพรีวิวข้อความไทยด้วย BreakIterator บน JDK 21 พร้อมเทสต์ขอบเขตตัวอักษรและอีโมจิ เพื่อใช้กับแจ้งเตือนและหัวข้อการ์ด

Spring AI 2.1 RC1 เพิ่มด่านกดยืนยัน ก่อน AI ลงมือทำงานจริง
Spring AI ออกรุ่น 2.1.0-RC1 พร้อมระบบให้คนอนุมัติก่อน AI เรียกเครื่องมือ และความจำบทสนทนาแบบใหม่ ทีมที่ใช้จริงควรแยกแผนอัปเดต 2.0.2 ออกจากการทดลองรุ่น RC

เทียบ Java token ให้รัดกุมด้วย MessageDigest.isEqual พร้อมเทสต์และหมุนคีย์
ลดช่องข้อมูลรั่วจากการเทียบ token ด้วย MessageDigest.isEqual บน JDK 21 พร้อมแปลง hex ตรวจข้อมูลผิดรูปแบบ และรองรับ token เก่าระหว่างเปลี่ยนชุด

Micronaut 5.2.3 อุดช่องโหว่ตามประกาศ 10 รายการ ทีม Java ควรเช็กทันที
สรุปรุ่นแก้ความปลอดภัย Micronaut 5.2.3 พร้อมทางอัปเดตสำหรับสาย 4 และ 3 อธิบายผลต่อบริการที่ใช้ทุกวัน และสิ่งที่ทีมพัฒนาควรตรวจให้ครบก่อนใช้งานจริง

Spring Boot 4.1.2 และ 4.0.9 มาแล้ว ส่วน 4.2 RC1 ให้ลองก่อนใช้จริง
แยกรุ่นแก้บั๊กที่ควรอัปเดตออกจากรุ่นทดลอง พร้อมจุดเช็กเรื่องระบบล็อกอิน ฐานข้อมูล และการสร้างอิมเมจก่อนกระทบงานจริง

เช็ก Java ตอนเริ่มระบบ ให้ JVM ผ่านระดับแพตช์ขั้นต่ำก่อนรับงาน
ใช้ Runtime.Version เทียบเวอร์ชัน Java ตามตัวเลข พร้อม helper ตรวจเกณฑ์ขั้นต่ำแยกตามรุ่น และเทสต์ที่รันได้บน Java 21

Quarkus ออกแพตช์ฉุกเฉิน 3 สาย LTS ทีม Java ควรเช็กก่อนระบบสะดุด
Quarkus ออกอัปเดตฉุกเฉินแก้ช่องโหว่ในส่วนประกอบที่แอปใช้งานอยู่ สรุปรุ่นที่ควรตรวจ ความเสี่ยงระบบหยุดบริการ และข้อแตกต่างของรุ่น IBM

Oracle Java เจอช่องโหว่ 9.1 อัปเดตแล้วเมื่อ 20 ต.ค. ต้องเช็กซ้ำ
Oracle ออกแพตช์ฉุกเฉินแก้ช่องโหว่ในส่วนเชื่อมต่อปลอดภัยของ Java หลังอัปเดตรายไตรมาสไม่นาน เช็กเวอร์ชันที่กระทบ วิธีรับมือ และเงื่อนไขสิทธิ์ใช้ Java 21 ก่อนดาวน์โหลด

Google ADK Java 1.12.0: ให้ AI ลงมือทำงาน ต้องคุมสิทธิ์และการอนุมัติให้ดี
อัปเดตชุดเครื่องมือสร้างเอเจนต์สำหรับทีม Java และ Kotlin มีอะไรเปลี่ยนเรื่องการอนุมัติ งานค้าง และข้อมูลสนทนา พร้อมสิ่งที่ควรเช็กก่อนต่อระบบจริง

เช็ก SHA-256 ของไฟล์ดาวน์โหลดด้วย Java ก่อนเอาเข้าระบบ
ใช้ MessageDigest ตรวจ checksum ของไฟล์แบบอ่านทีละก้อน พร้อมเทสต์บน Java 21 และเข้าใจว่าค่าแฮชยืนยันอะไรได้บ้าง

Gatherers4j 0.15.0 เพิ่มสถิติใน Java Streams อัปเกรดแล้วต้องเช็กอะไร
Gatherers4j เพิ่มสถิติแบบช่วงล่าสุดและแบบสะสม ช่วยงานรายงานใน Java พร้อมจุดเปลี่ยนเรื่องการปัดเศษ ชื่อเมธอด และ JDK ที่ทีมควรตรวจให้งานเดิมไม่สะดุด

แสดงเงินบาทใน Java 21 ด้วย NumberFormat พร้อมเลขไทยและเทสต์
จัดรูปแบบเงินบาทให้ตรงงานด้วย Locale ไทย กำหนดทศนิยมและการปัดเศษ พร้อมตัวอย่างเลขไทยและเทสต์ที่รันได้บน Java 21

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

Apache Camel อุด 38 ช่องโหว่ รุ่น 4.14.x ต้องย้ายสาย ไม่ได้รับแพตช์
สรุปช่องโหว่ Apache Camel ที่กระทบงานเชื่อมข้อมูลหลังบ้าน พร้อมรุ่นที่แก้แล้ว สิ่งที่ AI ค้นพบ และขั้นตอนให้ทีมไอทีตรวจระบบโดยไม่ตื่นตระหนก

คำนวณวันเงินเดือนออกด้วย Java TemporalAdjusters พร้อมเทสต์วันสิ้นเดือน
แปลงกฎวันจ่ายเงินและวันครบกำหนดเป็นโค้ด Java ที่อ่านออกทันที พร้อมสร้างกฎวันทำการสุดท้ายของเดือนและเทสต์กุมภาพันธ์ปีอธิกสุรทิน

ย่อตัวเลขบนแดชบอร์ดด้วย CompactNumberFormat ใน Java 21
แสดงยอดวิวและยอดขายเป็น 1.2K หรือคำไทยด้วย Locale พร้อมกำหนดทศนิยม การปัดเศษ และเทสต์การแปลงข้อความกลับเป็นตัวเลข

JDK 27 เจอบั๊ก P1 ก่อนออกจริง ทำไมการถอยโค้ดจึงช่วยรักษาความถูกต้อง
เล่าเหตุบั๊ก C2 ทำข้อความเพี้ยนใน JDK 27 รุ่นทดสอบ เหตุผลที่ทีมถอยการแก้ไข และสิ่งที่ทีม Java ควรเพิ่มในแผนทดสอบก่อนอัปเกรด

Java คิด VAT เป็นบาทและสตางค์ให้ตรงทุกใบเสร็จ: BigDecimal, setScale และ RoundingMode
ทำไม double กับเงินถึงเพี้ยน สร้าง BigDecimal แบบไหนถึงถูก ปัดเศษ HALF_UP กับ HALF_EVEN ต่างกันยังไง ปัดต่อบรรทัดหรือปัดที่ยอดรวม และกับดัก equals ทดสอบจริงบน JDK 21

Java เรียงชื่อภาษาไทยให้ตรงพจนานุกรม: ทำไม Collections.sort ส่ง "เกศินี" ไปท้ายลิสต์ และ Collator แก้ยังไง
String.compareTo เรียงตามรหัส Unicode ทำให้ชื่อที่ขึ้นต้นด้วยสระหน้า เ แ โ ใ ไ ไปกองท้ายลิสต์ ใช้ java.text.Collator กับ Locale th-TH เรียงชื่อไทยให้ถูก ปรับ strength และใช้ให้ปลอดภัยกับหลายเธรด ทดสอบจริงบน JDK 21

Java แสดงวันที่เป็น พ.ศ. แบบไม่ต้อง +543 เอง: ThaiBuddhistDate และกับดัก withLocale
ใช้ java.time.chrono.ThaiBuddhistDate กับ DateTimeFormatter แสดงและรับวันที่ พ.ศ. ให้ถูก พร้อมจุดที่หลายคนพลาด: withLocale ไม่เปลี่ยนปฏิทิน แต่ localizedBy เปลี่ยน ทดสอบจริงบน JDK 21

Java Math.clamp: บีบค่าให้อยู่ในช่วงในบรรทัดเดียว และแปลง long เป็น int แบบไม่ล้น
เลิกเขียน Math.max(min, Math.min(max, x)) ซ้อนกัน ใช้ Math.clamp ของ Java 21 คุมค่าเปอร์เซ็นต์ หน้า และขนาดหน้า พร้อม Java assertions ที่รันจริง

JetBrains ปล่อย Java and Kotlin by IntelliJ IDEA 1.0 LSP ใช้ใน VS Code และ Cursor ได้แล้ว
น้องกายสรุปข่าว JetBrains เปิดตัวเวอร์ชัน stable 1.0 ของ extension ที่เอาเทคโนโลยี Java และ Kotlin จาก IntelliJ IDEA มาใช้ใน VS Code และ Cursor ผ่าน LSP ทดลองฟรี 30 วัน หลังจากนั้นต้องมี subscription IntelliJ IDEA Ultimate พร้อมจุดที่ทีมไทยควรเช็คก่อนใช้

อังคารหน้า 20 ต.ค. Oracle ปล่อยแพตช์ Java รอบไตรมาส: เตรียมคิวอัปเดตตั้งแต่วันนี้
Oracle จะปล่อย Critical Patch Update วันอังคารที่ 20 ตุลาคม 2026 ตามกำหนดทุกไตรมาส พร้อมอัพเดท GraalVM หลายเวอร์ชัน เรื่องนี้กระทบธนาคาร หน่วยงานรัฐ ระบบ ERP และเซิร์ฟเวอร์ Minecraft โดยตรง มาดูว่าต้องเตรียมตัวอย่างไรเพื่อไม่ให้ระบบล่ม

JEP 547 Lazy Constants ขยับเป็น Candidate รอบ Preview ที่ 4 — ยังไม่ล็อกเข้า JDK 28
JEP 547 เปลี่ยนสถานะเป็น Candidate แล้ว โดยเสนอ preview ครั้งที่ 4 โดยไม่เปลี่ยนแปลงอะไรจากเดิม ช่วยลดเวลาเปิดแอป ลดการสร้าง logger, config, DB pool ที่ไม่จำเป็น เหมาะกับนักพัฒนา Java ที่อยากให้โปรแกรมเร็วขึ้นและปลอดภัยใน multi-thread

Spring Boot 4.0 หมดซัพพอร์ต OSS 31 ธ.ค. 2026: วางแผนย้ายไป 4.1 ตั้งแต่ตอนนี้
ทีมไทยที่ยังใช้ Spring Boot 4.0 เหลือเวลาไม่ถึง 3 เดือนก่อนการสนับสนุนแบบ open-source สิ้นสุด 31 ธันวาคม 2026 ต้องรีบวางแผนย้ายไป 4.1.1 ที่ยังได้รับการอัปเดตเต็มที่

TornadoVM 7.0 เพิ่ม TileContext API: อีกทางเขียนงาน GPU จากโค้ด Java
TornadoVM 7.0.0 เปิดตัว TileContext API ใหม่ ช่วยให้เขียนโค้ด Java แล้วรันบน GPU ได้ง่ายขึ้น เหมาะกับนักพัฒนา Java ที่ทำ ML inference, ประมวลผลภาพ หรือคำนวณการเงิน batch ใหญ่ๆ มาดูกันว่ามันช่วยเรื่องงานและเงินยังไง

Apache Groovy 6.0 ออกแล้ว: มี async/await แบบทดลอง ทีมที่ใช้ Groovy ควรเช็กอะไรก่อนอัปเกรด
Groovy 6.0.0 เปิดตัวพร้อมฟีเจอร์ใหม่ที่ทำให้เขียนโค้ด concurrent ง่ายขึ้น เหมือนเขียนโค้ดธรรมดา ไม่ต้องวน callback อีกต่อไป ทีมที่ใช้ Gradle, Jenkins หรือ Grails ควรรู้ก่อนอัพเกรดเพราะมีของเก่าถูกลบและ performance ดีขึ้น

Micronaut 5.2.2 อัปเดต Netty 4.2.19.Final อุด 16 ช่องโหว่ใหญ่: ผู้ใช้ต้องรีบอัปเดต
Micronaut Framework 5.2.2 อัปเดต Netty 4.2.19.Final อุดช่องโหว่ความปลอดภัย 16 รายการ รวมถึง HTTP/2/3 smuggling และปัญหาการใช้ทรัพยากรไม่จำกัด ส่งผลต่อแอปพลิเคชันที่ใช้ Micronaut ทุกเวอร์ชันล่าสุด แนะผู้ใช้รีบอัปเดต

GlassFish 8.0.5 อัปเดตใหม่: ดีพลอยเร็วขึ้น รองรับ ZIP64 เต็มรูปแบบ—แอดมินองค์กรต้องรู้
GlassFish 8.0.5 เพิ่มความเร็วดีพลอยแอปทั้งเล็กและใหญ่ พร้อมรองรับไฟล์ ZIP64 ตามมาตรฐานใหม่ ช่วยองค์กรลด downtime และปัญหาไฟล์ใหญ่

LangChain4j 1.22.0 ส่งงาน AI เป็นชุดได้ แต่ต้องเช็กบิลก่อนใช้
ทีม Java มีทางเลือกส่งงาน AI แบบชุดผ่าน Bedrock และรองรับ OpenAI Decisions API แล้ว อธิบายว่าคนทำงานได้อะไร และทีมต้องตรวจค่าใช้จ่ายกับสิทธิ์เข้าถึงอะไรบ้าง

Java เตรียมอ่านไฟล์ PEM ง่ายขึ้น แต่ทีมงานยังต้องวางแผนอัปเกรด
JEP 542 เตรียมทำ PEM API เป็นฟีเจอร์ถาวรใน JDK 28 ช่วยงานคีย์และใบรับรอง อ่านว่าลดงานตรงไหน และทำไมยังไม่ควรถอดเครื่องมือเดิมทันที

Grails 8 ออกแล้ว ระบบเก่าต้องเตรียม Java ก่อนย้าย
Grails รุ่นพร้อมใช้ทั่วไปยกขั้นต่ำ Java และเครื่องมือสร้างแอป อธิบายผลต่อระบบงานเดิม พร้อมรายการที่เจ้าของงานและทีม IT ควรตรวจ ก่อนตัดสินใจอัปเกรด

Netty แก้ช่องโหว่ 16 รายการ แต่เครื่องสแกนอาจเงียบเพราะยังไม่มีเลข CVE
ระบบ Java หลังร้านควรเช็ก Netty แม้เครื่องสแกนไม่เตือน อธิบายแพตช์ ความต่างของสองสายรุ่น และคำถามที่คนใช้ระบบควรถามผู้ให้บริการ
Java Duration.parse: รับ timeout แบบมีหน่วยโดยไม่เดาว่าเลขคืออะไร
ใช้ Duration.parse อ่านค่า ISO-8601 จาก config พร้อม Java assertions ตรวจค่าถูกต้อง รูปแบบผิด และเพดาน timeout
Java Collections.frequency: เช็กของซ้ำก่อนรับ batch
ใช้ Collections.frequency นับค่าที่เท่ากันตาม equals พร้อม Java assertions และข้อจำกัดเมื่อข้อมูลใหญ่หรือ equality ซับซ้อน
Java Map.getOrDefault: อ่าน fallback โดยไม่เผลอเพิ่ม key
ใช้ Map.getOrDefault สำหรับ lookup ที่ไม่แก้ map พร้อม Java assertions แยก missing key ออกจาก key ที่ map ไป null
Java StringJoiner: ต่อรายการด้วยตัวคั่นโดยไม่เหลือคั่นห้อยท้าย
ใช้ StringJoiner กำหนด delimiter / prefix / suffix เวลาประกอบข้อความจากรายการที่ความยาวไม่รู้ล่วงหน้า
Java Optional.ifPresentOrElse: แยกทางมีค่ากับไม่มีค่าให้ชัด
ใช้ ifPresentOrElse ทำ side-effect สองทางโดยไม่ต้อง if (opt.isPresent()) แล้ว get()
Java Files.writeString: เขียนไฟล์ข้อความสั้นให้ครบชุด
ใช้ Files.writeString กับ Charsetชัดเจน และเขียนลงไฟล์ชั่วคราวแล้ว atomic move เมื่อต้องการอัปเดตคอนฟิกอย่างปลอดภัย
Java Optional.orElseGet: เรียก fallback เฉพาะตอนค่าหลักหาย
เปรียบเทียบ orElseGet กับ fallback ที่มีต้นทุนหรือ side effect พร้อม Java 17 assertions ตรวจ lazy evaluation
Java Map.replaceAll: normalize ค่าใน map โดยรักษาชุด key เดิม
ใช้ Map.replaceAll ปรับค่าทุก entry แบบ in-place อธิบาย null, mutability และ atomicity พร้อม Java 17 assertions
Java removeIf: ล้างสมาชิกใน collection โดยไม่แก้ระหว่าง for-each
ใช้ Collection.removeIf ลบ record หมดอายุแบบ in-place อธิบาย mutability และ side effect พร้อม Java 17 assertions

IntelliJ มาอยู่ใน VS Code แล้ว แต่ใช้ฟรีมีวันหมดอายุ
ส่วนขยาย Java และ Kotlin ของ JetBrains ถึงขั้น RC แล้ว ช่วยตรวจโค้ดใน VS Code และ Cursor ได้ แต่ต้องเช็กช่วงทดลองและสิทธิ์ Ultimate ก่อนใช้ทั้งทีม

Java เสนอปรับแรมเองใน JDK 28 เริ่มไวขึ้น แต่บิลคลาวด์จะลดจริงไหม
ข้อเสนอ ZGC ช่วยแอป Java เริ่มไวและปรับหน่วยความจำตามงาน อธิบายผลทดลอง เงื่อนไขเปิดใช้ และสิ่งที่ทีมระบบกับคนคุมงบควรวัดก่อนหวังลดบิลคลาวด์

Java เตรียมจบยุคทดลอง Structured Concurrency แต่แอปยังไม่หายค้างทันที
ข้อเสนอทำให้งานพร้อมกันใน Java มีจุดจบร่วมกัน กำลังมุ่งสู่ API ถาวร อ่านผลต่อแอปที่ใช้ทุกวันและสิ่งที่ทีมพัฒนาควรทดสอบก่อนย้าย
LeetCode #394 Decode String: แกะวงเล็บซ้อนด้วย stack
เทียบ 3 วิธีถอดข้อความ k[encoded] พร้อม parser, stack, Python, Java, complexity และ decision table
LeetCode #73 Set Matrix Zeroes: ใช้แถวแรกเป็นสมุดจด
เทียบ 3 วิธีทำแถวและคอลัมน์ให้เป็นศูนย์ พร้อมวิธี O(1), Python, Java, edge cases และ decision table
LeetCode #2 Add Two Numbers: บวก linked list ด้วย carry ทีละหลัก
เทียบ 3 วิธีบวกเลขที่เก็บกลับหลักใน linked list พร้อม Python, Java, complexity, edge cases และ decision table
Java String.indent: จัดย่อหน้าข้อความหลายบรรทัดโดยรู้เรื่อง line ending
ใช้ indent เพิ่มและลดช่องนำหน้าอย่างสม่ำเสมอ พร้อมอธิบาย newline normalization และ Java 17 tests
Java YearMonth.atEndOfMonth: ปิดรอบบิลโดยรู้ leap year
ใช้ YearMonth แทนการเดาจำนวนวัน แยกวันที่ธุรกิจจาก timezone และทดสอบ Java 17
Java Collections.disjoint: ตรวจสิทธิ์สองชุดว่าไม่ทับกัน
ใช้ disjoint แสดง intent ของ overlap check พร้อม normalize input และ Java 17 assertions

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

Java ใน VS Code อัปเดตใหม่ หยุดดูโค้ดได้ละเอียด แต่ต้องเช็ก JDK ก่อนเรียน
Oracle Java Extension รุ่นใหม่ช่วยหยุดดูโค้ดย่อยและปรับเครื่องมือ Java แต่มีเงื่อนไข JDK สำหรับเปิดส่วนเสริม อธิบายวิธีแยกจากรุ่นของงานเรียน พร้อมรายการตรวจสำหรับนักเรียน ครู และทีม IT

Oracle Java เริ่มปีละ 100 ดอลลาร์ แต่ SME ต้องนับพนักงานทั้งบริษัท
Oracle ปรับราคา Java สำหรับองค์กรเล็ก อ่านตารางให้ถูกก่อนตั้งงบ เพราะคิดตามจำนวนพนักงาน พร้อมรายการที่ควรถามฝ่าย IT ผู้ขาย และบัญชี

Open Liberty รองรับ Java 27 แล้ว แอปบนคลาวด์กล่องเล็กต้องเช็กแรม
อัปเดตครั้งนี้มีทั้งการแก้ช่องโหว่และการเปลี่ยนตัวจัดการหน่วยความจำ อ่านให้รู้ว่าทำไมทีม IT ควรทดสอบแรมและเวลาตอบสนอง ก่อนตัดสินใจเพิ่มงบคลาวด์

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

Spring AI รุ่นใหม่จัดแชตเป็นลำดับ แต่ความจำถาวรยังตามไม่ทัน
บริษัทที่ทำแชตบอตด้วย Java ได้เครื่องมือจัดลำดับข้อความและเชื่อม OpenAI แบบใหม่ อ่านประโยชน์ ข้อจำกัดของความจำ และสิ่งที่ควรทดสอบก่อนใช้กับลูกค้าจริง
Java String.formatted: ให้ template อยู่หน้าค่าที่นำมาเติม
ใช้ String.formatted สร้างข้อความที่อ่านจากซ้ายไปขวา พร้อม Locale, validation, logging และข้อห้ามนำ user input มาเป็น format string
Java Arrays.mismatch: หา index แรกที่ข้อมูลสองชุดต่างกัน
ใช้ Arrays.mismatch ทำ diff checkpoint และ binary payload พร้อมตีความ -1, ความยาวต่าง และช่วงย่อยให้ถูก
Java Objects.checkIndex: ตรวจ index ก่อนแตะ array และ ByteBuffer
ใช้ Objects.checkIndex รวม boundary check แบบ fail-fast พร้อมแยก index จาก from-to range และแปลง exception ที่ API boundary

LangChain4j 1.21.0 ให้ AI คัดงานก่อนตอบ บิลจะลดจริงไหม
ทีม Java มีทางเลือกใหม่สำหรับคัดอีเมล เลือกโมเดล และตรวจคำตอบก่อนส่งลูกค้า แต่คำว่าเร็วและถูกยังต้องวัดเอง พร้อมวิธีเริ่มทดลองโดยมีคนรับช่วงเมื่อ AI ไม่แน่ใจ

ADK Java พักงาน AI รอคนอนุมัติได้ ทีมองค์กรต้องเตรียมอะไร
ADK for Java เพิ่มการพักแล้วทำงานต่อ พร้อมปรับประวัติเซสชันให้รองรับงานพร้อมกัน อ่านผลต่อขั้นตอนอนุมัติและสิ่งที่ทีม Java ควรทดสอบก่อนใช้จริง

Java ซ่อมช่องโหว่กว่า 400 จุด แต่ระบบที่คุณใช้ปลอดภัยแล้วหรือยัง
IBM และ Red Hat ประกาศซ่อมช่องโหว่ในไลบรารี Java ผ่าน Lightwell ทำความเข้าใจว่าทำไมการซ่อมรุ่นเก่าจึงสำคัญ และคนใช้แอปกับทีม IT ควรทำอะไรต่อ
Java Duration.truncatedTo: ปัดช่วงเวลาเป็น bucket โดยไม่ใช้เลขหารเอง
ใช้ truncatedTo กับ ChronoUnit, ค่าติดลบ และข้อจำกัดของหน่วย ผ่าน Java 17 assertions
Java Scanner.tokens: เปลี่ยน token stream เป็น pipeline ที่ปิด resource ชัดเจน
ใช้ Scanner.tokens กับ delimiter, filter และ try-with-resources พร้อม Java 17 assertions
Java Collections.rotate: หมุนลำดับโดยไม่สร้าง list ใหม่
เข้าใจ distance บวก/ลบ, modulo, mutable list และ edge cases ผ่าน Java 17 assertions

JobRunr 9 เปิดทางดูงานค้าง ใบเสร็จช้าตรงไหนไม่ต้องเดา
งานส่งใบเสร็จและงานหลังบ้านติดตรงไหน JobRunr 9 เพิ่มกราฟให้ทีมตามรอยได้ อ่านข้อจำกัดของการทำต่อหลังล้มเหลว ฟีเจอร์ฟรีกับ Pro และสิ่งที่ต้องเช็กก่อนอัปเกรด

Jakarta EE 12 วางวันปล่อยแล้ว ทีม Java ไทยควรเผื่ออะไร
Core Profile มีเป้าหมาย 1 ธันวาคม แต่วันปล่อยมาตรฐานยังไม่ใช่วันพร้อมใช้ของทุกค่าย อ่านข้อจำกัดของกำหนดการและเตรียมงบทดสอบก่อนเปลี่ยนระบบ

Java เตรียมลดเวลารอหลังเปิดระบบ ด้วย JEP 544 ใน JDK 28
Java เตรียมเก็บโค้ดที่ปรับให้เร็วไว้ใช้ตั้งแต่เปิดระบบ อ่านว่าคนใช้บริการได้อะไร และทีม IT ต้องตรวจอะไร ก่อนเชื่อผลทดสอบหรือคาดหวังว่าค่าเครื่องจะลดลง
Java Collectors.toUnmodifiableMap: ปิดการแก้โครงสร้างหลัง stream
ใช้ toUnmodifiableMap สร้างผลลัพธ์ที่เพิ่มหรือลบไม่ได้ พร้อมทดสอบ duplicate key, null และ mutable value
Java Collections.checkedList: กันชน type ตอนรับ List จาก legacy boundary
ใช้ checkedList ตรวจ element ตอนเขียนเข้าคอลเล็กชัน พร้อมทดสอบ raw alias และอธิบายว่ามันไม่แทน validation ของข้อมูลเดิม
Java Clock.fixed: หยุดเวลาใน test โดยไม่แตะนาฬิการะบบ
ฉีด Clock เข้า business logic แล้วใช้ Clock.fixed ทดสอบวันหมดอายุแบบ deterministic พร้อมแยก wall clock จาก elapsed time

Java ขยับแพตช์สู่รายเดือน ทีม IT ต้องเปลี่ยนตารางงานก่อนเป้าหมาย 17 พฤศจิกายน
Oracle เตรียมเพิ่มรอบแก้ความปลอดภัย Java เพราะ AI เร่งการค้นหาช่องโหว่ สรุปปฏิทิน สิ่งที่ยังไม่ยืนยัน และขั้นตอนจัดงานทดสอบให้ทันโดยไม่ลืมแอปที่พ่วง Java มาเอง

Oracle JDK 21 อัปเดตฟรีวงกว้างจบแล้ว บริษัทไทยต้องเลือกระหว่างย้ายกับจ่าย
อัปเดต Oracle JDK หลังกันยายนเปลี่ยนเงื่อนไขสำหรับงานจริง แยกให้ชัดว่าใครยังใช้ฟรีได้ และบริษัทไทยควรย้ายรุ่น เปลี่ยนผู้จัดทำ หรือซื้อสิทธิ์อย่างไร
Java Cleaner: มี fallback cleanup แต่ยังต้องปิด resource แบบ explicit
ใช้ java.lang.ref.Cleaner เป็น safety net โดยไม่จับ owner ค้าง พร้อม Java 17 assertions และขอบเขตที่ห้ามพึ่งเวลาของ GC
Java PathMatcher: คอมไพล์ glob ครั้งเดียวแล้วตรวจ path ตาม filesystem
ใช้ FileSystem.getPathMatcher กับ glob ตรวจไฟล์หลายเส้น พร้อมแยก matching จาก path containment และทดสอบ Java 17 จริง
Java Stream.iterate แบบมี hasNext: สร้างลำดับมีขอบเขตโดยไม่พึ่ง limit เดา ๆ
ใช้ Stream.iterate(seed, hasNext, next) สร้างช่วงตามเงื่อนไข พร้อม Java 17 assertions และขอบเขต overflow กับ non-progressing step
Java ProcessHandle.Info: อ่านคำสั่งและเวลาเริ่มของโปรเซสแบบ snapshot
ใช้ info() ดู command, user, startInstant อย่างปลอดภัยเมื่อค่าอาจว่าง พร้อมทดสอบ Optional
Java Matcher.results: เก็บทุกแมตช์เป็น Stream โดยไม่วน find เอง
ใช้ results() ดึง MatchResult ทั้งก้อน แล้ว map เป็นข้อมูลธุรกิจ พร้อมทดสอบจำนวนแมตช์
Java Currency.getAvailableCurrencies: ตรวจรหัสเงินก่อนรับจากฟอร์ม
ไล่ชุด Currency ที่ JVM รู้จัก เพื่อ validate รหัส ISO 4217 พร้อมทดสอบ THB และรหัสปลอม
Java IdentityHashMap: เมื่อ key ต้องเป็น object เดิม ไม่ใช่ object ที่ equals กัน
ใช้ IdentityHashMap เฉพาะงาน topology และ graph traversal พร้อมทดสอบความต่างจาก HashMap และข้อห้ามใน business data
Java BitSet.nextSetBit: เดินเฉพาะตำแหน่งที่เปิดโดยไม่สแกนทุกช่อง
ใช้ BitSet.nextSetBit วน sparse flags พร้อมหลีกเลี่ยง off-by-one และแยก index set จาก business identity
Java ClassValue: ผูก cache กับ Class โดยไม่สร้าง static map ถือ class loader ไว้
ใช้ ClassValue คำนวณ metadata ต่อ Class แบบ lazy พร้อม remove, concurrency contract และ Java 17 assertions
Java ConcurrentHashMap.newKeySet: ทำ concurrent set โดยไม่ใส่ Boolean หลอก
ใช้ key set สำหรับ dedup ข้ามหลาย thread พร้อมทดสอบ add semantics และแยกจาก map ที่ต้องเก็บ metadata
Java NavigableMap.subMap: เปิดหน้าต่างช่วงคีย์แบบ live view
เลือกข้อมูลตามขอบเขต inclusive/exclusive โดยไม่ copy พร้อมทดสอบการแก้ผ่าน view และการปฏิเสธคีย์นอกช่วง
Java Pattern.asMatchPredicate: ใช้ regex แบบตรงทั้งข้อความใน Stream
แยก full match จาก find semantics ให้ชัด พร้อมทดสอบ filter ของรหัสงานและกรณีมีข้อความเกิน
Java Exchanger: นัดแลกข้อมูลระหว่างสองงานแบบเจอกันพอดี
ใช้ Exchanger ทำ two-party handoff พร้อม timeout และแยกจาก queue ที่รองรับหลาย producer/consumer
Java SynchronousQueue: ส่งต่อแบบไม่มีชั้นวางพัก
เข้าใจ zero-capacity handoff, fairness และ timeout สำหรับ producer-consumer ที่ต้องเจอกันจริง
Java OptionalInt.stream: ต่อค่าที่อาจไม่มีเข้ากับ IntStream
แปลงผล parse แบบ zero-or-one ให้เข้ากับ primitive stream โดยไม่ใช้ sentinel หรือ boxing เกินจำเป็น
Java Arrays.compareUnsigned: เรียง byte array แบบข้อมูลไบนารี ไม่ใช่เลขติดลบ
ใช้ Arrays.compareUnsigned เปรียบเทียบ byte array ตามค่า 0–255 พร้อมเห็นความต่างจาก signed comparison
Java collectingAndThen: เก็บข้อมูลก่อน แล้วล็อกผลลัพธ์ตอนจบ
ใช้ Collectors.collectingAndThen เพิ่ม finishing step เช่น unmodifiable list โดยไม่กระจาย post-processing นอก stream
Java String.transform: ตั้งชื่อ pipeline แปลงข้อความแทนการซ้อนเมธอด
ใช้ String.transform ส่งข้อความเข้า Function ที่ตั้งชื่อได้ พร้อมทดสอบการ normalize และ validation บน Java 17
Java EnumSet.range: สร้างช่วงสถานะแบบ type-safe และประหยัด
ใช้ EnumSet.range เมื่อ enum มีลำดับโดเมนชัด พร้อมระวังการผูก logic กับ ordinal
Java LocalDate.datesUntil: เดินช่วงวันแบบไม่พลาดขอบเขตท้าย
สร้าง Stream ของวันที่แบบ end-exclusive พร้อม step และป้องกัน off-by-one ในรายงาน
Java Pattern.asPredicate: เปลี่ยน regex เป็นตัวกรองที่ประกอบกับ Stream ได้
ใช้ Pattern.asPredicate กับ Stream โดยแยก find ออกจาก matches และคอมไพล์ regex เพียงครั้งเดียว
Inside Java: JDK 27 เร็วขึ้นจากอะไร — Compact Headers และ G1 เป็นค่าเริ่มต้น
สรุปบทความ Inside.java 28 ก.ย. 2026 เรื่องผลงาน JDK 27: Compact Object Headers และ G1 default ทั่วเครื่อง, HashMap.putAll เร็วขึ้น, และคำแนะนำวัดผลตอนอัปเกรด
Spring Boot 4.2.0-M2: LDAPS SSL bundle และ OpenTelemetry ชุดเดียวกัน
ไมล์สโตนสองของ Spring Boot 4.2 (ราว 25 ก.ย. 2026) เพิ่ม SSL bundles สำหรับ LDAPS, เซิร์ฟเวอร์ LDAP ฝังตัว, และ property ร่วมของ OpenTelemetry — พร้อมคลื่น M2 ทั้งพอร์ตโฟลิโอ
Gradle 9.8.0 รองรับ Java 27 แล้ว — และยืมค่า mirror จาก Maven ได้
Gradle 9.8.0 (24 ก.ย. 2026) รัน daemon/toolchain บน Java 27, เปิดใช้ Maven mirror settings, เร่งบน Windows ที่นาฬิกาเครื่องช้า และปรับ Copy destinationDirectory แบบ lazy
Java Map.ofEntries: สร้าง immutable map หลายคู่โดยไม่เปิดช่องให้แก้ทีหลัง
ใช้ Map.entry กับ Map.ofEntries สำหรับตารางคงที่ พร้อมข้อจำกัด null, duplicate key และ Java 17 assertions
Java delayedExecutor: หน่วงการส่งงานโดยไม่สร้าง scheduler ใหม่ทุกจุด
ใช้ CompletableFuture.delayedExecutor ประกอบ async pipeline พร้อมแยก delay ออกจาก timeout และทดสอบบน Java 17
Java Duration parts: แยกวัน ชั่วโมง นาที วินาทีโดยไม่คำนวณ modulo เอง
ใช้ toDaysPart และเมธอด part อื่นของ Duration เพื่อแสดงช่วงเวลา พร้อม Java 17 assertions
Java completeOnTimeout: ใส่ค่าสำรองเมื่องานช้าเกินเวลา
ใช้ CompletableFuture.completeOnTimeout กันอนาคตค้าง พร้อมทดสอบว่าค่าสำรองเข้าเมื่อหมดเวลาและค่าจริงชนะถ้าเสร็จก่อน
Java CyclicBarrier: นัดพบครบจำนวนแล้วค่อยไปต่อด้วยกัน
ใช้ CyclicBarrier ให้หลาย thread รอจนครบ parties แล้วผ่านเฟสร่วม พร้อมทดสอบว่า barrier รีเซ็ตใช้ซ้ำได้
Java ReentrantLock.tryLock: ลองคว้ากุญแจ ถ้าไม่ได้ก็ไม่ยืนรอ
ใช้ tryLock และ tryLock(timeout) ลดการค้างรอเมื่อต้องแย่งทรัพยากร พร้อมทดสอบว่า thread ที่พลาดล็อกเดินต่อได้
Java Predicate.not: ปฏิเสธเงื่อนไขโดยยังอ่านเป็นประโยค
ใช้ Predicate.not กับ method reference ใน stream พร้อมแยก null policy ให้เห็นชัด
Java LongAccumulator: รวมสถิติที่มีคนอัปเดตพร้อมกัน
ใช้ accumulator แบบ associative ลด contention พร้อมเข้าใจว่า get ไม่ใช่ snapshot สำหรับ coordination
Java ExecutorCompletionService: รับผลตามงานที่เสร็จก่อน
แยกคิวส่งงานจากคิวผลลัพธ์ เพื่อไม่ให้งานช้าตัวแรกบังผลที่เสร็จแล้ว
Java CompletableFuture.orTimeout: ตั้งเวลาตายให้งานอะซิงก์
ใช้ orTimeout (Java 9+) ให้ Future ล้มด้วย TimeoutException เมื่อช้าเกิน — ตัวอย่างรันจริง
Java Stream.dropWhile: โยนคำนำหน้าทิ้ง แล้วเก็บหางที่เหลือ
คู่กับ takeWhile — dropWhile ตัดหัวที่ไม่ผ่านเงื่อนไข พร้อมตัวอย่างรันจริง
Quarkus 3.39.5: แพตช์บำรุงชุดใหญ่ รวม Hibernate JSON path และ Netty
สรุป 24 ก.ย. 2026 — maintenance 3.39.5 แก้ CVE หลายรายการใน ORM, JWT, WebSockets, Netty, RESTEasy, Qute
Quarkus 3.33.3.3 LTS emergency: แพตช์ CVE ชุดใหญ่บนสตรีม LTS
สรุป 22 ก.ย. 2026 — Quarkus ออก 3.33.3.3 แก้ CVE ใน Hibernate/JWT/HTTP/Netty/zstd ฯลฯ พร้อมคำสั่ง update สตรีม 3.33
Java ConcurrentHashMap.compute: อัปเดตค่าต่อคีย์แบบ atomic
ใช้ compute เพื่อนับเคาน์เตอร์โดยไม่แข่ง get+put พร้อมตัวอย่างรันจริง
Java Stream.takeWhile: ตัดคำนำหน้าตามเงื่อนไข แล้วหยุดทันที
เทียบ takeWhile กับ filter/dropWhile พร้อมตัวอย่างรันจริง
Java String.stripIndent: ตัดเยื้องร่วมของบล็อกข้อความ
ใช้ stripIndent กับ text block หรือสตริงหลายบรรทัดเพื่อตัดช่องว่างนำหน้าต่ำสุดร่วมกันโดยคงเนื้อหาสัมพัทธ์
Java thenCompose: ต่อ Future แบบแบน ไม่ซ้อน CompletionStage
ใช้ CompletableFuture.thenCompose เมื่อขั้นตอนถัดไปคืน Future อีกชั้น พร้อมเทียบ thenApply ที่ซ้อน
JDK 28 Rich JavaDoc: แท็ก @note ไฮไลต์คำเตือนในเอกสาร API
สรุป Inside.java 23 ก.ย. 2026 (Billy Korando) — Quality Outreach ชวนลองแท็ก @note ใน JavaDoc สำหรับ JDK 28 พร้อม attribute header/kind/id
Java Optional: ใช้ filter+map เป็นท่อ แทน if ซ้อน
สอนสั้น ๆ — แปลงค่าที่อาจว่างด้วย Optional.filter และ map ให้โค้ดอ่านเป็นเส้นตรง พร้อมตัวอย่างรันได้
Helidon 4.5.5: แพตช์ Tail สำหรับทีมที่ยังอยู่ Java 21
สรุป Helidon 4.5.5 (15 ก.ย. 2026) — แพตช์บั๊กสำคัญของสาย LTS/Tail ขั้นต่ำ Java 21 แนะนำคู่กับคนไม่พร้อมกระโดด Helidon 27
Helidon 27.0.0: ติด Tip ของ JDK 27 แล้ว — ต้องใช้ Java 27 ขึ้นไป
สรุป Helidon 27.0.0 (22 ก.ย. 2026) — รุ่น Tip ตามจังหวะ JDK 27 ต้องใช้ Java 27+ ส่วน Helidon 4 ยังเป็น LTS/Tail
Java summarizingInt: เก็บ count, min, max, sum และ average ใน pass เดียว
ใช้ IntSummaryStatistics สรุปข้อมูลจาก stream พร้อมจัดการ empty input และ overflow ของ mapper
Java Pattern.quote: ค้นข้อความผู้ใช้แบบ literal โดยไม่เปิด regex แฝง
ห่อ input ด้วย Pattern.quote ก่อนประกอบ regex และแยกกรณีที่ควรใช้ String.contains ให้ง่ายกว่า
Java Files.move กับ ATOMIC_MOVE: เผยแพร่ไฟล์เมื่อเขียนเสร็จทั้งก้อน
เขียนลงไฟล์ชั่วคราวบน filesystem เดียวกันแล้ว atomic move พร้อมวาง fallback อย่างไม่กล่าวเกินจริง
DelayQueue: ดึงงานเมื่อครบเวลาโดยไม่ busy-wait
ใช้ DelayQueue กับ Delayed เพื่อให้ take/poll คืนเฉพาะงานที่หมดเวลารอแล้ว
CopyOnWriteArrayList: อ่าน snapshot ปลอดภัยตอน listener เยอะ
ใช้ CopyOnWriteArrayList เมื่ออ่านบ่อย เขียนน้อย และต้องการ iterator ที่ไม่สะดุดจาก concurrent modification
Java SequencedMap: first/last entry โดยไม่ต้องไล่ iterator เอง
ใช้ SequencedMap ของ LinkedHashMap เพื่อ putFirst/putLast และอ่าน firstEntry/lastEntry อย่างชัดเจน
Java LongAdder: ลดการแย่ง counter ใน metrics แต่ห้ามใช้แทนเลขลำดับธุรกิจ
ใช้ LongAdder กับ counter ที่เขียนพร้อมกันสูง พร้อมขอบเขตของ sum ที่ไม่ใช่ atomic snapshot
Java NavigableMap: หาเพดานและพื้นของช่วงเวลาโดยไม่วนทั้งตาราง
ใช้ floorEntry และ ceilingEntry เลือกค่าที่ใกล้ boundary พร้อมจัดการค่าว่างและคีย์ซ้ำ
Java EnumMap: ทำตารางสถานะให้คีย์ครบและไม่รับ null key
ใช้ EnumMap กับคีย์ enum เพื่อเก็บค่ากะทัดรัด พร้อมตรวจ missing state อย่างชัดเจน
Java Files.readString: อ่านทั้งไฟล์เป็น String พร้อม Charset ชัด ๆ
ใช้ Files.readString / writeString แทนวน BufferedReader เองเมื่อไฟล์เล็ก — ระบุ UTF-8 เสมอ
Java StampedLock: อ่านแบบ optimistic แล้ว validate ก่อนเชื่อค่า
ใช้ tryOptimisticRead + validate ของ StampedLock เมื่อรอบอ่านเยอะและเขียนน้อย — พร้อมตัวอย่างทดสอบ
Java CountDownLatch: ประตูเปิดครั้งเดียวสำหรับรอ N งานให้เสร็จ
ใช้ CountDownLatch เป็นเกตเริ่มต้นหรือรอ worker ให้ครบ — ตัวอย่างที่รันด้วย Java และ assert ผล
Java Semaphore: จำกัดงานพร้อมกันด้วย permit ที่คืนเสมอ
ควบคุมจำนวนงานที่เข้าทรัพยากรพร้อมกันด้วย try/finally และเข้าใจ fairness ของ Semaphore
Java Instant.truncatedTo: จัด event ลง bucket นาทีโดยไม่ปัดผิดเขตเวลา
แยกเวลา UTC ของ event จากวันท้องถิ่น และทดสอบการตัดวินาทีด้วย ChronoUnit
Java ArrayDeque: คิวงานสองด้านโดยไม่ต้องใช้ LinkedList
ใช้ addLast/removeFirst เป็น FIFO และ addFirst/removeFirst เป็น stack พร้อมข้อห้ามเรื่อง null และ thread safety
JDK 27: JSON thread dump ใช้ตัวเลขจริง + formatVersion 2
สรุปการเปลี่ยน JSON thread dump ใน JDK 27 — tid/counts/pid เป็น number และมี formatVersion สำหรับพาร์เซอร์
JDK 27: jcmd VM.security_properties — ดู security properties ตอนรันจริง
สรุปคำสั่ง jcmd ใหม่ VM.security_properties จาก Inside.java สำหรับวินิจฉัยคอนฟิกความปลอดภัยของ JVM ที่กำลังทำงาน
JDK 27 JEP 536: JFR แดงacted รหัสผ่าน/API key ในโปรเซสเป็นค่าเริ่มต้น
สรุป JEP 536 จาก Inside.java — Flight Recorder ปกปิดอาร์กิวเมนต์/env ที่ละเอียดอ่อน พร้อม redact-key / redact-arguments
Java ProcessHandle.onExit — รู้เมื่อโปรเซสลูกจบโดยไม่บล็อกเธรดหลัก
ใช้ ProcessHandle.onExit() ได้ CompletableFuture เมื่อโปรเซสจบ — เหมาะกับเฝ้า CLI/agent ลูก พร้อมตัวอย่าง verified บน JDK 21
Java String.isBlank / strip — เช็กช่องว่าง Unicode ให้ถูก ไม่ใช่แค่ trim()
สรุปความต่าง isBlank, isEmpty, strip, trim ใน Java — กันบั๊กฟอร์มว่างและช่องว่าง Unicode พร้อมตัวอย่างบน JDK 21
Java List.copyOf — สแนปช็อตลิสต์แบบอ่านอย่างเดียวในคำสั่งเดียว
ใช้ List.copyOf สร้างสำเนา immutable จาก Collection — กัน caller แก้ลิสต์ต้นทางโดยไม่ตั้งใจ พร้อมตัวอย่าง verified บน JDK 21
Stream.gather(Gatherers.windowFixed): หั่นสตรีมเป็นหน้าต่างขนาดคงที่ (Java 24+)
ใช้ Gatherers.windowFixed / windowSliding เป็น intermediate operation บน Stream API พร้อมตัวอย่างแนวคิดจาก JDK docs
Scoped Values ขึ้น final ใน JDK 25: ส่ง requestId แบบอ่านอย่างเดียวข้ามเธรดลูก
สรุป JEP 506 — ScopedValue เป็นฟีเจอร์สมบูรณ์ใน Java 25 ต่างจาก ThreadLocal อย่างไร และเมื่อไหร่ควรใช้กับ virtual threads
StructuredTaskScope.open + Joiner: รวมงานย่อยแบบ structured (JDK 25 preview)
สรุป JEP 505 — เปิด scope ด้วย open() และเลือก Joiner แทนคอนสตรัคเตอร์เก่า พร้อมแนวคิด all-success / any-success
Java Objects.checkFromToIndex: ตรวจช่วงครึ่งเปิดก่อนแตะ Array
ใช้ Objects.checkFromToIndex รวมกฎ from-inclusive/to-exclusive ลด off-by-one และคืน error ให้สม่ำเสมอ พร้อม Java 17 test
Java Optional.or: ต่อ Fallback แบบ Lazy โดยไม่แกะ Optional กลางทาง
ใช้ Optional.or จัดลำดับ cache, database และ default supplier พร้อมพิสูจน์ว่า fallback ไม่ถูกเรียกเมื่อมีค่าหลัก
Java RandomGenerator: เปลี่ยนอัลกอริทึมสุ่มโดยไม่ผูก Business Logic กับ Random
ใช้ RandomGenerator และ RandomGeneratorFactory บน Java 17 เลือกกลยุทธ์ สร้าง seed ทำซ้ำได้ และไม่เผลอใช้ PRNG กับ secret
Java Collectors.groupingBy + counting: นับรายการตามกลุ่มในพาสเดียว
ใช้ groupingBy คู่ counting นับความถี่ตามคีย์ พร้อมตัวอย่างรันจริง
Java Optional.orElseThrow: บังคับมีค่าที่ขอบเขตแทนคืน null
ใช้ orElseThrow เมื่อค่าต้องมีจริง พร้อมแยกจาก orElse และตัวอย่างรันจริง
Java Duration.between: วัดเวลาที่เหลือถึงเดดไลน์อย่างตรงไปตรงมา
ใช้ Duration.between กับ Instant เพื่อคำนวณช่วงเวลาถึงกำหนด พร้อมตัวอย่างรันจริงบน Java
Java CompletableFuture.handle: รวมทางสำเร็จและล้มเหลวไว้ที่ boundary เดียว
ใช้ handle แปลงผล async เป็น outcome แบบชัดเจน พร้อมแยกจาก exceptionally และ whenComplete
Java Collectors.flatMapping: รวมสมาชิกย่อยต่อกลุ่มโดยไม่เก็บ List ซ้อน
ใช้ flatMapping downstream ของ groupingBy เพื่อรวม tag ต่อทีม พร้อมจัดการ stream ย่อยและค่า null ให้ชัด
Java Collectors.filtering: กรองสมาชิกแต่ยังเก็บกลุ่มที่ผลลัพธ์เป็นศูนย์
วาง filtering ไว้ downstream ของ groupingBy เพื่อรักษา key ของกลุ่ม พร้อมเทียบกับการ filter stream ก่อนจัดกลุ่ม
JDK 27: JEP 536 ให้ JFR ปกปิดอาร์กิวเมนต์และค่าเริ่มต้นในโพรเซส
Flight Recorder แดงacted อาร์กิวเมนต์คอมมานด์ไลน์ ค่าเริ่มต้น env และ system properties ก่อนออกจากโพรเซส — ลดการรั่วในไฟล์วินิจฉัย
JDK 27: JEP 534 เปิด Compact Object Headers เป็นค่าเริ่มต้น
หลัง GA — เฮดเดอร์อ็อบเจ็กต์บน 64-bit เหลือ 64 บิตเป็นค่าเริ่มต้น ลดฮีปและเพิ่ม locality; ปิดด้วย -XX:-UseCompactObjectHeaders ถ้าจำเป็น
JDK 27 GA: JEP 523 ทำให้ G1 เป็น GC เริ่มต้นทุกสภาพแวดล้อม
มุมปฏิบัติหลัง GA 15 ก.ย. 2026 — เมื่อไม่ระบุ GC จะได้ G1 เสมอ รวมเครื่องเล็กที่เคยได้ Serial; ทีมควรไล่เช็กสคริปต์ที่สมมติ Serial
Java exceptionallyCompose: fallback แบบ async โดยไม่ซ้อน CompletableFuture
กู้ future ที่ล้มด้วยงาน async อีกชุด พร้อมแยก recovery จากการแปลงผลปกติและทดสอบบน Java 17
Java Optional.stream: แบนค่าที่อาจหายโดยไม่แตก pipeline เป็น if
ใช้ Optional.stream รวมผล lookup หลายรายการเป็น Stream เดียว พร้อมรักษาความหมายของค่าที่ไม่พบ
Java Stream.mapMulti: คืนศูนย์หรือหลายผลลัพธ์โดยไม่สร้าง Stream ย่อยทุกครั้ง
ใช้ mapMulti แทน flatMap เมื่อแต่ละ input อาจไม่คืนค่า หรือคืนหลายค่า พร้อมตัวอย่าง Java 17 ที่รัน assertions จริง

JDK 27 ตามตาราง GA 15 ก.ย.: หน้า RI มีบิลด์ 27+35 และระบุผ่าน JCP แล้ว
อ่าน openjdk.org/projects/jdk/27 และ jdk.java.net/java-se-ri/27 — ตาราง GA วันนี้ มีดาวน์โหลด RI 27+35; หน้า jdk.java.net/27 อาจยังโชว์ RC/EA อย่าสับสนกับมาร์เก็ตติ้ง Oracle commercial

Java CompletableFuture.orTimeout: ตัดงานช้าด้วยหมดเวลาในตัว
สอนใช้ CompletableFuture.orTimeout เพื่อล้มอนาคตที่ค้างเกินกำหนด พร้อม java-test ที่รันบน JDK ของเครื่อง

Quarkus 3.39.3: แพตช์บำรุง REST/native และ context propagation
สรุป GitHub release Quarkus 3.39.3 (10 ก.ย. 2026): แก้ REST native, Range 206, context propagation, Redis leak และอื่น ๆ ในสายบำรุง
Java Files.walk: เดินต้นไม้ไฟล์แล้วปิด Stream ให้ทัน
ใช้ Files.walk ใน try-with-resources เพื่อไม่ค้าง directory handles พร้อมตัวอย่างนับไฟล์ที่สร้างและล้างเองได้
Java Comparator.nullsLast: วางค่าที่หายไว้ท้ายตารางโดยไม่เขียน if ซ้อน
ประกอบ Comparator ที่รองรับ null แล้วต่อ tie-breaker อย่างอ่านง่าย พร้อมอธิบายขอบเขตระหว่างข้อมูลหายกับข้อมูลผิด
Java Collectors.toMap: กำหนดชะตา key ซ้ำก่อน pipeline พังกลางทาง
ใช้ merge function ของ Collectors.toMap รวมข้อมูล key ซ้ำอย่างตั้งใจ พร้อมแยกกรณี sum, keep-first และข้อมูลผิด schema

Java Collectors.teeing: สรุปสตรีมสองมุมในครั้งเดียว
ใช้ Collectors.teeing รวมผล average กับ count จากสตรีมเดียว พร้อมเมธอด main และการ assert

Helidon 4.5.4: แพตช์บั๊ก/ประสิทธิภาพ — ขั้นต่ำ Java 21 แนะนำ Java 25
สรุปปล่อย helidon-io/helidon 4.5.4 เมื่อ 28 ส.ค. 2026 สำหรับผู้ใช้ Helidon 4

Spring Boot 4.1.1: Gradle เลิกผูก gRPC อัตโนมัติเมื่อใส่ Protobuf — ต้อง opt-in
สรุป attention note ใน v4.1.1 เรื่อง protobuf extension ต้องมีบล็อก grpc ว่าง และระบุว่ารองรับ Java ถึง 26 ตาม system requirements
Java requireNonNullElseGet: สร้าง Default แบบ Lazy และห้าม Supplier คืน null
เลือก fallback ที่แพงเฉพาะเมื่อจำเป็นด้วย Objects.requireNonNullElseGet พร้อมทดสอบว่า supplier ไม่ถูกเรียกเมื่อมีค่าหลัก
Java Map.merge: รวม Counter และลบค่าศูนย์ด้วยกฎเดียว
ใช้ Map.merge อัปเดต inventory แบบ atomic ต่อ operation พร้อมเข้าใจความหมายของ null และกรณี concurrent map
Java CompletableFuture.allOf: รอครบได้ แต่ผลลัพธ์ต้องประกอบเอง
รวมงาน async หลายชิ้นด้วย allOf โดยรักษาลำดับผลลัพธ์และทำให้ failure path ชัด พร้อมตัวอย่าง Java 17 ที่รันจริง

Temurin จะไม่ปล่อย JDK 27 บน macOS Intel (x64)
สรุปประกาศ Adoptium วันที่ 2 ก.ย. 2026: Eclipse Temurin JDK 27 ไม่มีบิลด์ macOS x64 เพราะฮาร์ดแวร์และพอร์ตอัปสตรีม — ให้ใช้ aarch64 แทน

Quarkus 4 ยกระดับขั้นต่ำเป็น Java 21 — อ่านเหตุผลจากทีมก่อน RC
สรุปบล็อก quarkus.io วันที่ 10 ก.ย. 2026 ของ Clement Escoffier ว่าทำไม Quarkus 4 เลือก Java 21 เป็น baseline และระบุว่า RC แรกเป้าปลายกันยายน

Micronaut Framework 5.1.3: แพตช์รวม Core, Data, AWS และอื่นๆ
สรุปบล็อกทางการ Micronaut วันที่ 31 ส.ค. 2026 ว่า 5.1.3 รวมอัปเดต Core, SQL, Micrometer, OpenAPI, Data, AWS และโมดูลที่เกี่ยวข้อง
Java String.lines: อ่านข้อความหลายบรรทัดแบบ Stream โดยไม่ทิ้งท้ายด้วยช่องว่างปลอม
ใช้ lines แทน regex split เมื่อต้องประมวลผลบรรทัดตามนิยาม line terminator ของ Java
Java HexFormat: แปลง byte กับ hexadecimal แบบมาตรฐานและเทสต์ round trip
เลิกเขียนลูป String.format ทีละ byte แล้วใช้ API ที่กำหนดตัวพิมพ์และ delimiter ได้
Java Collectors.partitioningBy: แบ่ง Stream เป็นสองฝั่งด้วย predicate เดียว
ใช้ partitioningBy เมื่อต้องการทั้งกลุ่ม true และ false พร้อมเทียบกับ filter สองรอบ

Sealed interface ใน Java 17: ปิดชุดชนิดย่อยและบังคับพฤติกรรมร่วม
ใช้ sealed interface กับ permits ใน Java 17 และวาง method contract ให้ชนิดย่อยทุกแบบอธิบายผลลัพธ์ได้

Java Record compact constructor: ตรวจค่าตอนสร้างโดยไม่เขียนฟิลด์ซ้ำ
อธิบาย compact constructor ของ record ตั้งแต่ Java 16 พร้อมตัวอย่าง Main ที่รัน assertion ได้

Quarkus 4 ยกระดับเบสไลน์เป็น Java 21 — ทำไมทีมที่ยังติด 17 ต้องวางแผนย้าย
สรุปจากบล็อกทางการของ Quarkus วันที่ 10 ก.ย. 2026 ว่า Quarkus 4 จะใช้ Java 21 เป็นขั้นต่ำ พร้อมเหตุผลเรื่อง virtual threads และ Jakarta EE 12
LinkedHashMap แบบ Access Order: ทำ LRU Cache เล็กให้เข้าใจได้
ใช้ accessOrder และ removeEldestEntry สร้าง bounded LRU พร้อมอธิบาย thread safety, null และเหตุผลที่ production cache อาจต้องใช้ library
Java Flow: ให้ Consumer กำหนดจังหวะด้วย Backpressure
เข้าใจ Publisher, Subscriber, Subscription และ request(n) พร้อมตัวอย่าง SubmissionPublisher ที่ขอข้อมูลทีละชิ้น
Java Phaser: Barrier ที่เพิ่ม–ลด Worker ระหว่างทางได้
ใช้ Phaser ประสานงานหลายช่วงเมื่อจำนวน participant เปลี่ยนได้ พร้อมทดสอบ phase advance และ deregistration ด้วย Java 17
ExecutorService.invokeAll: ส่งงานหลายชิ้นแล้วรอผลพร้อมกัน
อธิบาย invokeAll บน ExecutorService พร้อมตัวอย่าง java-run ที่รอ Future ครบและตรวจผล
Stream.toList(): ได้ลิสต์ immutable โดยไม่ต้อง collect
อธิบาย Stream.toList ใน Java ที่คืน List แบบ unmodifiable พร้อมตัวอย่าง java-run เปรียบเทียบกับ Collectors.toList
JDK 27 ใกล้ GA: เช็กลิสต์ JEP 527 PQ hybrid TLS ก่อน 15 ก.ย.
สรุปสถานะ RC ของ JDK 27 และสิ่งที่ทีมควรเช็กเรื่อง Post-Quantum Hybrid Key Exchange สำหรับ TLS 1.3 ตาม JEP 527
Java Files.mismatch: หาตำแหน่งต่างแรกก่อนเปิด diff ใหญ่
เปรียบเทียบไฟล์แบบคืน byte offset แรกที่ต่าง พร้อมจัดการไฟล์เท่ากัน prefix และ TOCTOU ในระบบจริง
Java computeIfAbsent: สร้างค่าตอนจำเป็นโดยไม่ซ่อน side effect
ใช้ Map.computeIfAbsent สำหรับ grouping และ lazy cache พร้อมข้อควรระวัง null การแก้ map ซ้อน และ concurrency
Java Collectors.teeing: สรุปสองค่าใน stream pass เดียว
ใช้ teeing จับคู่ collector สองตัวโดยไม่ traverse stream ซ้ำ พร้อม trade-off ด้าน readability และ parallel reduction

SequencedCollection: เข้าถึงหัว-ท้ายและมุมกลับในชุดที่มีลำดับ
แนะนำ SequencedCollection / SequencedSet / SequencedMap ตั้งแต่ Java 21 พร้อมตัวอย่าง public class Main ที่รันได้

Temurin 26 ใกล้ EOL 15 ก.ย. คู่กับ JDK 27 GA — ย้ายหรือล็อก LTS ให้ทัน
Eclipse Temurin 26 (non-LTS) สิ้นสุดการสนับสนุน 15 กันยายน 2026 วันเดียวกับกำหนด GA ของ JDK 27

Oracle JDK 17: Premier Support จบ 30 ก.ย. 2026 แต่ Java 17 ทั้งโลกไม่ได้ตาย
แยกให้ชัดว่าวันที่ 30 กันยายน 2026 คือจุดจบ Premier ของ Oracle JDK 17 ไม่ใช่จุดจบของทุกดิสทริบิวชัน Java 17

ExecutorService: ส่งงาน แล้วปิดพูลให้สะอาด
อธิบายการใช้ ExecutorService แบบพูลคงที่ พร้อมตัวอย่างรันได้บน JDK ที่ CI ใช้ และเทียบแนวคิด virtual-thread-per-task บน JDK 21+

JDK 27 ใกล้ GA 15 ก.ย.: เช็กลิสต์สำหรับทีมที่ยังล็อก LTS
สรุปสิ่งที่ทีม LTS ควรรู้ก่อน JDK 27 GA วันที่ 15 กันยายน 2026 โดยไม่ต้องรีบอัปเกรดทันที

Quarkus 3.39.2: แพตช์ CVE ชุดบำรุงรักษาสำหรับสาย 3.39 และ LTS
สรุป Quarkus 3.39.2 พร้อม LTS 3.33.3.2 และ 3.27.5.2 ที่แก้ CVE หลายรายการเมื่อ 7 ก.ย. 2026

Quarkus Flow 1.0: เวิร์กโฟลว์ในแอป Java ไม่ต้องตั้ง worker แยก
สรุป Quarkus Flow 1.0 ที่รันเวิร์กโฟลว์ใน Quarkus runtime รองรับ YAML/Java DSL และเชื่อม agentic AI ผ่าน LangChain4j

Scoped Values เบื้องต้น: ส่งบริบทแบบ immutable ในขอบเขตเดียว
สรุปแนวคิด ScopedValue สำหรับแทนที่ ThreadLocal ในงาน request context พร้อมตัวอย่าง static-only ที่อ่านเป็นแนวคิดได้แม้ยังไม่รันบนทุก JDK

Virtual thread pinning เบื้องต้น: อะไรเคยพิน และอะไรยังพินอยู่
อธิบาย pinning ของ virtual threads แบบสั้น ๆ สำหรับทีมที่เพิ่งย้ายจาก JDK 21 มาสายใหม่ พร้อมตัวอย่าง Main ที่แยกงานบล็อกใน virtual thread

อีกหนึ่งสัปดาห์สู่ JDK 27 GA: ดีฟอลต์ที่ควรรู้ก่อนอัป
สรุปสั้นก่อน General Availability 15 ก.ย. 2026 จาก openjdk.org/projects/jdk/27 และ jdk.java.net/27 โฟกัสดีฟอลต์อย่าง G1 และ compact object headers
Java HttpClient: ตั้ง request timeout ไม่ให้ค้างรอปลายทาง
ใช้ java.net.http.HttpClient กับ timeout ต่อคำขอ พร้อม java-test ที่ยืนยัน Duration และพฤติกรรมหมดเวลา
นับถอยหลัง JDK 27 GA 15 ก.ย.: เช็กลิสต์เตรียมโดยไม่ทบทวน JEP ทั้งชุด
จุดตรวจสั้น ๆ ก่อน General Availability 15 กันยายน 2026 จากหน้า OpenJDK JDK 27 สำหรับทีมที่ยังอยู่ LTS หรือรุ่นสั้น
JDK-8390590: ถอย intrinsic C2 ก่อน GA JDK 27
สรุป backout ฉุกเฉินของแก้ memory รอบ intrinsic ในคอมไพเลอร์ C2 จาก OpenJDK bug tracker โดยไม่ขยายสเปกที่แหล่งไม่ยืนยัน
Java CompletableFuture.orTimeout: ตั้งเส้นตายได้ แต่ไม่ได้หยุดงานเบื้องหลังให้
แยกเวลารอของ future ออกจากการยกเลิก I/O พร้อม test สำเร็จและ timeout บน Java 17
Java Map.copyOf คือ Snapshot แต่ unmodifiableMap ยังมองเห็นต้นฉบับเปลี่ยน
แยก immutable copy ออกจาก read-only view พร้อม assertions ที่เผย aliasing ของ map ต้นทาง
Java Optional: orElse สร้างค่าทิ้งได้ ส่วน orElseGet ทำเมื่อจำเป็น
เห็นผลของ eager กับ lazy fallback ชัด ๆ พร้อม assertion ที่กัน side effect เกิดทั้งที่มีค่าอยู่แล้ว

JEP 539 Strict Field Initialization (Preview): ฟิลด์ที่ต้องตั้งก่อนอ่าน
สรุป JEP 539 ใน JDK 28 ที่ให้ JVM บังคับฟิลด์แบบ strictly-initialized ไม่ให้เห็นค่า default และทำให้ final เชื่อถือได้มากขึ้น

JEP 535: Shenandoah เปลี่ยนค่าเริ่มต้นเป็นโหมด Generational
สรุป JEP 535 ใน JDK 28 ที่ตั้ง ShenandoahGCMode เป็น generational เป็นค่าเริ่มต้น และ deprecate โหมด satb แบบไม่แบ่งรุ่น

JEP 401 Value Objects (Preview) ใน JDK 28: อ็อบเจ็กต์ไม่มี identity
สรุป JEP 401 ที่เพิ่ม value class/object ใน JDK 28 แบบพรีวิว ให้เปรียบเทียบด้วยค่าฟิลด์และเปิดทาง JVM จัดวางหน่วยความจำได้กะทัดรัดขึ้น

JEP 541: เลิกสนับสนุนพอร์ต macOS/x64 เพื่อเตรียมถอดในอนาคต
สรุป JEP 541 ที่ Integrated ใน JDK 28 ให้ configure บน macOS/x64 ล้มโดยค่าเริ่มต้น เว้นแต่ใส่ --enable-deprecated-ports

JEP 537: Vector API รอบที่สิบสองใน JDK 27
สรุป JEP 537 ที่ re-incubate Vector API ใน JDK 27 โดยไม่เปลี่ยน API และอัปเดตไลบรารี SLEEF

JEP 540: Simple JSON API แบบ incubator มุ่ง JDK 28
สรุป JEP 540 Targeted สำหรับ JDK 28 ที่จะให้ API JSON มาตรฐานในแพลตฟอร์มโดยไม่ต้องพึ่งไลบรารีภายนอก

JEP 538: API แปลง PEM สำหรับคีย์และใบรับรองใน JDK 27
สรุปพรีวิวรอบสามของ PEMEncoder และ PEMDecoder ที่แปลงระหว่างข้อความ PEM กับอ็อบเจ็กต์คริปโตมาตรฐาน

JEP 532: แพทเทิร์นชนิดพื้นฐานใน instanceof และ switch รอบห้า
สรุปพรีวิวครั้งที่ห้าของ primitive type patterns ที่ให้ instanceof และ switch ทำงานกับชนิดพื้นฐานอย่างปลอดภัยผ่าน exact conversion

JEP 531: Lazy Constants พรีวิวรอบสามใน JDK 27
สรุป LazyConstant ที่ init เมื่อถูกใช้ ได้ constant folding หลังตั้งค่า พร้อม List/Map/Set แบบ ofLazy และเตือนว่า JDK 27 ยังอยู่ RC
Java Try-with-resources: ปิด Resource ย้อนลำดับแม้กลางทางมี Exception
ใช้ AutoCloseable และ try-with-resources ใน Java 17 เพื่อรับประกัน cleanup พร้อม assertions ของลำดับปิด
Java Switch Expressions: ให้ทุกเส้นทางคืนค่าและหยุด Fall-through โดยไม่ตั้งใจ
ใช้ switch expression และ yield ใน Java 17 เพื่อทำ mapping ให้ครบทุกกรณี พร้อม self-contained assertions
Java Helpful NullPointerExceptions: อ่าน Chain ที่ขาดให้เจอจุด null เร็วขึ้น
ใช้ข้อความ NPE ที่ละเอียดขึ้นใน Java 17 ควบคู่กับการลด method chain และเพิ่ม boundary checks

JEP 536: JFR ปิดบังข้อมูลลับในโปรเซสก่อนเขียนไฟล์บันทึก
สรุป JEP 536 ที่ให้ JDK Flight Recorder แทนค่าอาร์กิวเมนต์และตัวแปรแวดล้อมที่ละเอียดอ่อนด้วย REDACTED เป็นค่าเริ่มต้น

JEP 534: Compact Object Headers เป็นค่าเริ่มต้นใน JDK 27
สรุป JEP 534 ที่ทำให้ compact object headers เป็นค่าเริ่มต้นใน HotSpot ของ JDK 27 พร้อมวิธีปิดถ้าจำเป็น

JEP 533: Structured Concurrency รอบพรีวิวที่เจ็ดใน JDK 27
สรุป JEP 533 ที่พรีวิว StructuredTaskScope อีกรอบใน JDK 27 พร้อมแนวคิดงานลูกและ join เป็นหน่วยเดียว
Java Sealed Classes: ปิดขอบเขต hierarchy ให้ compiler ช่วยเฝ้า
ใช้ sealed interface จำกัด implementation และออกแบบผลลัพธ์แบบปิด พร้อม Java 17 assertions
Java Records: ทำ value object ให้สั้น แต่ยังตรวจ invariant ได้
ออกแบบ immutable data carrier ด้วย record และ compact constructor พร้อม self-contained Java 17 test
Java Pattern Matching for instanceof: ตรวจชนิดและผูกตัวแปรโดยไม่ cast ซ้ำ
ลด cast ที่ซ้ำและใช้ flow scoping อย่างปลอดภัยด้วย pattern matching ที่พร้อมใช้ใน Java 17

JEP 527: TLS 1.3 แบบ hybrid กันควอนตัมใน JDK 27
อธิบาย JEP 527 ที่เพิ่ม hybrid key exchange ให้ javax.net.ssl ใน JDK 27 โดยค่าเริ่มต้นชอบ X25519MLKEM768 โดยไม่ต้องแก้โค้ดเดิม

JEP 523: G1 เป็น GC ค่าเริ่มต้นทุกสภาพแวดล้อมใน JDK 27
สรุป JEP 523 ที่ทำให้ HotSpot เลือก G1 เสมอเมื่อไม่ระบุ GC แม้ในเครื่องทรัพยากรจำกัดที่เคยได้ Serial

JDK 27 เข้า RC แล้ว: ฟีเจอร์ล็อก กา 15 ก.ย. 2026
สรุปหน้า OpenJDK JDK 27 ว่ารุ่นอยู่ใน Release Candidate ชุดฟีเจอร์ถูกแช่แข็ง และกำหนด General Availability วันที่ 15 กันยายน 2026