Skip to main content

Posts

Showing posts with the label programming

ลองเล่น SonarQube คลื่นโซนาร์ช่วยตรวจสอบคุณภาพของ code

SonarQube  คือเครื่องมือช่วยตรวจสอบคุณภาพของ source code ช่วยหาข้อบกพร่องใน source code ไม่ว่าจะเป็น Bug ที่น่าจะเกิดขึ้น ช่องโหว่ทางด้านความปลอดภัยหรือกลิ่นไม่ดีใน source code ของเรา (Code Smell) และ ช่วยตรวจสอบเราเขียน code ทดสอบครอบคลุมหรือดีแล้วยังยัง (code coverage) Code Smell ไม่ได้ใช้วัดว่า source code นี้สามารถทำงานได้ถูกต้อง มี bug หรือช่องโหว่หรือไม่ แต่ Code Smell ใช้วัดถึงคุณภาพของการออกแบบ เพื่อตรวจสอบว่า source code ที่เป็นอยู่ในปัจจุบันจะสามารถต่อเติม แก้ไขหรือทดสอบได้ง่ายหรือไม่ โดยหลักเกณฑ์ที่นำมาใช้วัดในส่วนของ Code Smell คือ ความซ้ำซ้อนของ code มี code แบบเดียวกันไปซ้ำกันในไฟล์ไหนบ้าง ตรวจสอบเงื่อนไขใน if ให้ ว่าเงื่อนไขตรงนี้มันมีโอกาสเป็นไปได้ไหม เพราะบางทีเงื่อนไขที่เราเขียนขึ้นมาเพื่อดักไว้ในบางครั้งมันแทบจะไม่มีโอกาสที่เวลามันทำงานแล้วเข้าเงื่อนไขในส่วนนั้น เป็นต้น สามารถไปอ่านรายละเอียดเพิ่มเติมได้ที่นี่ http://www.somkiat.cc/code-smell-internal-class/ นอกจาก SonarQube จะสามารถบอกถึงคุณภาพของ source code เราได้แล้ว ยังสามารถใช้ในการแจกแจงงานให

ลองเล่นและเรียนรู้พื้นฐานขั้นต้นของ Spring Framework

** สำหรับใครที่ไม่เคยเรียนรู้ในด้านของ Java EE หรือ J2EE อาจจะมึนงงกับศัพท์หน่อยครับ ทำไมต้อง Spring Spring เป็น framework ที่นิยมมากในการนำไปสร้างระบบในระดับ enterprise ในเริ่มแรกที่ Spring เกิดมา มีจุดมุ่งหมายเพื่อที่จะมาแทนที่มาตรฐานของ Java อย่าง J2EE (Java 2 Enterprise Edition) ที่มันทั้งหน่วงทั้งอืดและยุ่งยาก โดยเฉพาะในส่วนของ EJB (Enterprise Java Bean) ที่ถือว่าเป็นฝันร้ายของนักพัฒนา ทำให้กูรูสาย Java ในช่วงนั้นถึงกับแนะนำว่า ถ้าจำเป็นที่ต้องพัฒนาระบบด้วย J2EE จงอย่าใช้ EJB ถึงขั้นถึงกับมีหนังสือแนะแนวทางการพัฒนาระบบ J2EE โดยไม่ใช้ EJB อย่างไรก็ตามทาง Sun ผู้เป็นเจ้าของ Java ในสมัยนั้น ถึงกับต้องมาล้างระบบ J2EE ใหม่ในปี 2006 จัดการใน EJB ให้ใช้ง่ายขึ้น มีประสิทธิภาพมากขึ้น และมีการเปลี่ยนชื่อจาก J2EE เป็น Java EE (Java Enterprise Edition) เพื่อลบภาพอันเลวร้ายของเดิมให้หมด และได้มีการนำฟีเจอร์เด็ดๆ ของ open source framework หลายๆ ตัว อย่างเช่นแกนหลักของ Spring อย่าง IoC (Inversion of Control) หรือ OR Mapping (Object Relational Mapping) ที่เป็นที่นิยมอย่าง Hibernate แต่ก็ไ

Inversion of Control และ Dependency Injection

Inversion of Control (IoC) คืออะไร IoC เป็นทฤษฏีที่ว่าด้วย การลดความผูกมัด (dependency) กันในระหว่าง module เพื่อให้ application ของเราแก้ไข (maintain) ต่อเติม (extensible) หรือทดสอบ (test) ได้ง่ายขึ้น ซึ่งเอาจริงๆ IoC เป็นอะไรที่ทำให้เราสับสนและงุนงงมากๆ ว่ามันคืออะไร หลายๆ คนจึงยกให้ว่า IoC คือ Dependency Injection (DI) ซึ่งจริงๆ มันก็ไม่ถูกซะทีเดียว  Dependency คืออะไร Dependency คือการผูกมัดที่เกิดขึ้นในระบบ เมื่อ module นึงมีการเรียกใช้อีก module นึงด้วยการอ้างอิง (reference) ตรงๆ แล้วอะไรที่เรียกว่าการ อ้างอิง (Reference) แบบตรงๆ   อย่างภาพ diagram ด้านบน class LogEngine มีการเรียกใช้ ConsoleLog โดยตรง ซึ่งมองผ่าน diagram อาจจะไม่เห็นภาพลองดู code กัน public class ConsoleLog { public void openLog(){ //do something to open log } public void log(String message){ //do something to log } public void closeLog(){ //do something to close log } } public class LogEngine { private ConsoleLog log; public LogEngine(){

ลองเล่น Lambda Expression ฟีเจอร์เด่นใน Java 8

ประวัติความเป็นมาของ Lambda expression Lambda expression ไม่ใช่สิ่งแปลกใหม่ในวงการ ภาษาโปรแกรม ( Programming Language ) เพราะ lambda มันเป็นแกนหลักของ การเขียนโปรแกรมเชิงฟังก์ชัน ( Functional Programming ) ซึ่งมีอายุมานานมากแล้ว แต่ Java เพิ่งนำเอาคุณสมบัตินี้เอามาใส่ลงในเวอร์ชัน 8 หากจะกล่าวถึงที่มาของ lambda คงต้องไปดูที่ถึงที่มาของ lambda calculus ซึ่งถูกสร้างขึ้นมาตั้งแต่ปี 1930 โดยนักคณิตศาสตร์ชาวอเมริกัน  Alonzo Church  เพื่อใช้ในการแก้โจทย์ปัญหาทางคณิตศาสตร์ที่มีความซับซ้อน ในบางครั้งสมการทางคณิตศาสตร์ที่ยาวไปอาจจะทำให้เกิดความซับซ้อนโดยใช่เหตุ lambda calculus จะทำการยุบบางส่วนของสมการนั้นออกมาเป็นฟังก์ชันย่อยๆ เพื่อทำให้สมการนั้นเข้าใจง่ายขึ้น ต่อมาหลักการของ lambda calculus ได้ถูกนำไปใช้ใน Turing Machine ซึ่งเป็นแบบจำลองในอุดมคติของ Alan Turing  ที่ต่อมากลายเป็นต้นแบบที่ถูกนำไปใช้ในการผลิต  Von Neumann Machine  ซึ่ง Von Neumann Machine ตัวนี้ได้กลายเป็นต้นแบบของคอมพิวเตอร์เครื่องแรกของโลกในเวลาต่อมา ท้ายที่สุดแนวคิดของ lambda calculus ก็ถูกนำมาแปลงเป็นภาษาโปรแกรมท

Apache Ant

Apache Ant Apache Ant เป็น project opensource ของ Apache ที่จะช่วยให้ในการ build ในการ compile และทำให้งานของ programmer นั้นง่ายมากขึ้น ซึ่งใน project ในระดับ enterprise ของ java มักจะใช้ ant ช่วยในการ build ยัน deploy และใน IDE Java แทบทุกตัวของ Java ก็ใช้ Apache ant ในการ build, compile, หรือ pack เป็น archive file ซึ่งผมจะเกริ่นเครื่องของ ant คร่าวๆดังดังนี้ครับ การจะใช้ Apache Ant ได้ต้องติดตั้งดังนี้ครับ Apache Ant : load here Java RE(แนะนำติดเป็น SDK ไปเลย) 1.4 ขึ้นไป การติดตั้ง java นั้นขอข้ามไปเลยมาพูดเรื่องติดตั้ง apache ant กันเลย ก่อนอื่นนำ apache ant ที่เราโหลดมานำมา extract มาวางไว้ที่ไหนก็ได้แต่ถ้าจะให้สะดวกให้มาวางไว้ที่ drive C: จากนั้นก็ต้อง set environemnt variable ครับ ใน windows ลองตาม link นี้ไปดูครับว่าตั้งยังไงโดยที่สำคัญที่ต้อง set มีสองค่าครับ set ANT_HOME=C:apache-ant-1.7.0 set PATH=%PATH%;%ANT_HOME%bin;.;

Ajax เรียก Cross Domain ไม่ได้

ไม่มีอะไรสำหรับ entry นี้ไม่มีอะไรนอกจากบอกตัวเองว่า Ajax ยิง request ข้าม Domain ไม่ได้ เพราะมันไม่ได้ออกแบบมาเพื่อ request ข้ามเครื่องได้ต้องเรียกในเครื่องตัวเองเท่านั้น ดังนั้นกรณีจะใช้ Ajax ยิง Webservices เป็นไปไม่ได้ ต้องสร้าง servlet หรือ jsp ที่ call webservices และใช้ Ajax ไปเรียก servlet หรือ jsp นั้นๆแทน ref: http://www.simple-talk.com/dotnet/asp.net/calling-cross-domain-web-services-in-ajax/

HTML 5

ผมมีเหตุต้องศึกษา HTML 5 เพื่อนำมันมาใช้ใน project ใหม่ วันนี้เลยมาจด log สิ่งที่ได้เรียนรู้ไป (ทำความรู้จักกับ HTML 5 มากกว่า) ซึ่งอาจจะดูล้าหลังไปหน่อย เพราะเป็นเรื่องที่คนอื่นเค้าพูดกันมาตั้งแต่ปีมะโว้แล้ว แต่ผมเพิ่งรู้จักกับมัน เพราะก่อนหน้านั้นพยายามทำตัว "ยินดีที่ไม่รู้จัก" ไม่อยากจะยุ่งกับส่วน design ซึ่งมันเป็นหน้าที่ของ designer เราเขียน web application ก็เขียนไป แต่วันนี้เลี่ยงไม่ได้ ก็เลยเกิดมี content นี้เกิดขึ้น HTML 5 มันประมาณว่าเอา HTML + CSS + JS(javascript) APIs ดังรูปด้านบนนั้นแหละครับ มันดูเหมือนไม่ใช่สิ่งใหม่เลย เป็นสิ่งที่เรารู้ๆกันหมดแล้วอย่าง HTML, CSS หรือ javascript เพียงแต่ W3C นำเอาสิ่งที่เรารู้จักอยู่แล้วมาเพิ่มความสามารถลงไป แล้วมา pack ใหม่จนกลายเป็น HTML5 นั่นเอง เรามาดูกันดีกว่าแต่ละส่วนที่เพิ่มเข้ามามีอะไรบ้าง HTML Semantics (New tags, Link Relations, Microdata) มันถูกออกแบบมาใหม่ให้จัดวาง layout ได้ง่ายขึ้น ซึ่งแต่ก่อนเราใช้ <div> หรือไม่ก็ <span> (ตัวนี้ไม่ค่อยมีคนใช้หรอก) แล้วเราก็กำหนด id เอาว่ามันจะชื่ออะไร มันเป็

Tableless design

Tableless design เป็นการออกแบบ layout ของ HTML โดยไม่ใช้ table มาช่วยเลย โดยการที่ไม่ใช้ table ไม่ได้หมายความว่าจะตัด table ออกจาก html ไปเลย เพียงแต่ไม่ใช้ table ในการ design layout ส่วน table ก็ไปทำหน้าที่ในตอนแสดงข้อมูลออกมาในตารางเท่านั้น ถ้าไม่ใช้ตารางจะใช้อะไรแทนหละ คำตอบตือใช้ <div> และ <span> ช่วยในการวาง Layout แทน โดย <div> ใช้ในออกแบบเกี่ยวกับ layout ในส่วนที่ไม่มีตัวอักษร เช่นการแบ่งโครงสร้างต่างๆของ web เช่นส่วนของเมนู ส่วนของ Banner ส่วนของ content ส่วนของ footer เป็นต้น ส่วน <span> จะเอามาใช้ในการจัดโครงสร้างของข้อความต่างๆ ไปดูเหตุผลพวกนี้ที่ http://www.divland.com/blog/2007/03/23/div-or-span/ แล้วเราจะออกแบบยังไง เราก็ออกแบบโดยมองว่า 1 <div> แทนโครงสร้างในส่วนหนึ่ง อย่างเช่น <div id="banner">Banner</div> อาจจะยังไม่เห็นภาพรวมของมันเราลองดูกันเต็มๆว่าถ้าใช้ <div>เต็มๆแล้วจะเป็นยังไง