ระบบ Log ใน Java แบบเปลี่ยน implementation ได้ภายหลังด้วย SLF4J

slf4j-logo

จริงๆแล้ว จาวาเองก็มีระบบ log ของตัวเองอยู่แล้ว แต่ถ้าจะใช้งานหนักๆอย่างเช่น การเปลี่ยนรูปแบบข้อความที่จะ log นั้น ต้องสร้างคลาสขึ้นมาเพื่อปรับรูปแบบ เท่าที่สังเกต ส่วนมากจึงเลือกใช้เฟรมเวิร์ก (logging framework) แทน เช่น log4j หรือ jakarta-logging

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

SLF4J เป็นจาวาไลบรารี่ที่ทำหน้าที่เป็นหน้าด่าน (facade) ที่ทำให้นักพัฒนาใช้งานระบบ log ด้วยเอพีไอ (API) เดียวกัน แต่สามารถเปลี่ยน implementation ได้โดยไม่ต้องแก้ไขโปรแกรม เพียงแค่เปลี่ยนไลบรารี่ที่ใช้ พร้อมกับคอนฟิกของแต่ละค่ายเท่านั้น นอกจากนี้ยังสามารถเพิ่มเติมให้รองรับการทำงานมากขึ้นได้ เช่น เพิ่มระดับการ log ได้

จุดเด่นอีกอย่างของ SLF4J คือ parameterized message ซึ่งเป็นเอพีไอที่ช่วยเพิ่มประสิทธิภาพในการทำงาน เพราะไม่ต้องสร้างสตริงจากการต่อสตริงกับออบเจ็กต์ (object) ก่อน แม้ว่าจะไม่ต้อง log ก็ตาม

Continue reading

Advertisements

Test Java App Server ด้วย IntelliJ IDEA Community Edition + Tomcat

idea-tomcat

IntelliJ IDEA สนับสนุนการเทสต์กับแอพเซิร์ฟเวอร์เฉพาะบน Ultimate Edition เท่านั้น จึงทำให้ไม่สามารถใช้งานร่วมกับ Apache Tomcat บน Community Edition ได้

แต่สำหรับโปรเจคที่พัฒนาบนเมเว่น (Maven) มี 2 ทางเลือก เพื่อใช้งาน Tomcat บน Community Edition ได้ สามารถนำวิธีนี้ไปประยุกต์ใช้ทูลส์อื่นๆ เช่น Gradle ได้:

Continue reading

ใช้ phpMyAdmin เข้าถึง MySql บน Azure

featured-image-21

เมื่อติดตั้งฐานข้อมูล MySql บนแอชเชอร์ (Azure) ไมโครซอฟต์จะติดตั้งไปยัง ClearDB ซึ่งเป็นบริการฐานข้อมูลบนคลาวด์ การเข้าถึงข้อมูลจะต้องใช้งานผ่านเว็บไซต์ ClearDB แต่ผู้ใช้งานส่วนใหญ่น่าจะคุ้นเคยกับหน้าจอและเมนูของ phpMyAdmin มากกว่า

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

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

Kudu คือทูลส์ที่รวบรวมโปรแกรมต่างๆที่ช่วยให้การจัดการเว็บไซต์ทำได้ง่ายขึ้น โดยการติดตั้ง extension ซึ่งมีให้เลือกใช้มากมาย และมี phpMyAdmin เป็นหนึ่งในนั้นด้วย

สำหรับ phpMyAdmin นั้น แอชเชอร์มีเมนูสำหรับติดตั้งผ่านเว็บพอร์ทอล (portal) ได้เลย ซึ่งเบื้องหลังคือไปติดตั้งบน Kudu อีกที

Continue reading

ติดตั้ง Certificate บน Windows 7

application-certificate

การใช้งานเครือข่ายระยะไกล เช่น VPN (Virtual Private Network) หรือการเรียกใช้เซอร์วิส (Service) ผ่าน HTTP ผู้ให้บริการอาจระบุให้ติดต่อผ่านการใช้ Certificate เพื่อเพิ่มความปลอดภัยโดยการเข้ารหัสข้อมูลที่รับส่งระหว่างเครื่องของเรากับปลายทาง

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

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

วิซาร์ดที่กล่าวถึงข้างต้นในวินโดวส์ 7 จะไม่สามารถเปลี่ยนเพื่อติดตั้ง Certificate ในระดับเครื่องได้ ต้องทำผ่าน MMC (Microsoft Management Console) เท่านั้น โดยทำตามขั้นตอนดังนี้
Continue reading

ปรับโครงสร้าง URL บน Java Web Server ให้กระชับด้วย UrlRewriteFilter

การทำเว็บไซต์แบบประมวลผลที่เซิร์ฟเวอร์ อาจมีการประมวลผลตามการร้องขอของผู้ใช้ (dynamic generated content) ซึ่งในสายจาวาใช้ JSP/Servlet ในการประมวลผล

โครงสร้างของ URL จะเป็นแบบ QueryString ซึ่งยาว ทำให้จำยาก ในสาย SEO แนะนำให้ URL มีโครงสร้างที่แน่นอน และคาดเดาได้ เพื่อเหมาะกับการที่เสิร์ชเอ็นจิน (Search Engine) อย่างกูเกิลในการเก็บข้อมูล (indexing)

มีผู้พัฒนาไลบรารี่เพื่ออำนวยความสะดวกในการนี้โดยเฉพาะคือ UrlRewriteFilter ซึ่งหลักการคล้ายๆกับ mod_rewrite ใน Apache web server คือจับรูปแบบของ URL ด้วยเรกกูลาร์เอ็กซ์เพรสชัน (regex: Regular Expression) แล้วเปลี่ยนให้อยู่ในรูปแบบที่เซิร์ฟเวอร์เข้าใจคือ QueryString เช่น จาก /category/mobile แปลงเป็น /index.jsp?category=mobile เป็นต้น

ในเว็บไซต์ของผู้พัฒนาได้สรุปขั้นตอนสั้นๆในลักษณะ Quick Start Guide ที่ทำตามได้อย่างง่ายดายอยู่แล้ว ในที่นี้จะใช้ Maven ซึ่งมีขั้นตอนดังนี้

Continue reading

เขียนโปรแกรมสร้างลายน้ำบนรูปใน Android App

Turn-Off-Safe-Mode-on-Android-Step-13-Version-3

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

ในแอนดรอยด์ สามารถเขียนโปรแกรมเพื่อสร้างลายน้ำโดยอาศัยพื้นฐานของบิตแมพ (bitmap) ร่วมกับแคนวาส (canvas) เทียบได้กับการวางรูปภาพแล้วเอาข้อความ หรือกราฟิกใดๆวางซ้อนกันบนผืนผ้านั่นเอง ในที่นี้ขอพูดถึงการวางข้อความเหนือรูปภาพ

Continue reading

ติดตั้ง IntelliJ IDEA ให้เขียนโปรแกรม Android ได้

intellijidea_android

กูเกิล (Google) ประกาศให้แอนดรอยด์สตูดิโอ (Android Studio) เป็นไอดีอี (IDE: Integrated Development Environment) หลักในการพัฒนาแอพสำหรับแอนดรอยด์ ซึ่งพื้นฐานมาจาก IntelliJ IDEA Community Edition นั่นเอง

เราจึงใช้ IntelliJ เขียนโปรแกรมแอนดรอยด์ได้ แต่ต้องติดตั้ง Android SDK และโปรแกรมเสริมผ่าน SDK Manager อยู่พอสมควร ประกอบไปด้วย

  1. Android SDK Tools
  2. Android SDK Platform-tools
  3. Android SDK Build-tools
  4. เลือก Android Platform อย่างน้อย 1 เวอร์ชัน เช่น Android M (API 23) โดยให้เลือกรายการย่อยดังนี้
    • SDK Platform
    • System Image อย่างน้อย 1 ตัว ควรเลือก Google APIs Intel x86 Atom เพื่อความเร็วในการทดสอบกับ AVD (Android Virtual Device) ซึ่งอิมเมจนี้จะมีเอพีไอ (API) ของกูเกิลติดมาด้วย Intel x86_64 นั้น อาจต้องใช้เครื่องที่แรงๆ ส่วน ARM ทางกูเกิลไม่แนะนำให้ใช้แล้ว เพราะทำงานช้ากว่า Intel x86 ประมาณ 10 เท่า
  5. Extras
    • Android Support Repository: ไลบรารี่จาวาในรูปแบบเมเว่นเรโพสิทอรี่ (Maven Repository) ซึ่งไม่มีอยู่ในทั้ง Maven Central และ Jcenter จำเป็นต้องติดตั้ง เพราะตัวช่วยสร้างโปรเจคของ IntelliJ ใช้ไลบรารี่เหล่านี้ ถ้าไม่มีจะคอมไพล์ไม่ผ่าน
    • Google USB Driver: ใช้เพื่อดีบัก (debug) กับโทรศัพท์มือถือโดยตรง
    • Intel x86 Emulator Accelerator (HAXM installer): ตัวติดตั้งไดรเวอร์เพื่อเร่งความเร็วในการทำงานของ AVD ใช้ร่วมกับอิมเมจ Intel x86 จากข้อ 4 ไม่ต้องติดตั้งถ้าใช้ ARM

HAXM ในข้อ 5 เป็นเพียงตัวติดตั้ง ต้องทำการติดตั้งเองโดยเข้าไปยังไดเรกทอรี่ที่ติดตั้ง Android SDK โดยปกติจะอยู่ที่ C:\Users\<ชื่อ user>\AppData\Local\Android\android-sdk จากนั้นเข้าไปที่ไดเรกทอรี่ย่อย extras\intel\Hardware_Accelerated_Execution_Manager ให้ติดตั้งผ่านโปรแกรม intelhaxm-android.exe ซึ่ง HAXM นั้นจะต้องมีแรม (RAM) เหลืออย่างน้อย 2GB โดยไม่รวมกับโปรแกรมอื่นๆที่เปิดอยู่ในขณะเดียวกัน

จากนั้นเปิด IntelliJ ให้เพิ่ม Android SDK ผ่าน settings ก่อน แล้วจึงสร้างโปรเจคแอนดรอยด์ได้ทันที การออกแบบหน้าจอแอพนั้น อาจตามแอนดรอยด์สตูดิโอไม่ทัน ให้ถอยเวอร์ชันของตัวเรนเดอร์ (rendering layout) ลง ขณะที่เขียนนี้เป็น Android N (API 24) ให้ถอยมา Android M (API 23) แทน

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

ปัญหาเกี่ยวกับ Android Support Repository ที่เจอ แก้ได้โดยคำตอบที่ไม่ได้เป็น Accepted answer ของ Stackoverflow:

สแลช (Slash)