Posts

Showing posts from 2018

Docker ใช้งาน Dockerfile เพื่อสร้าง Docker Image ของเราเอง

Image
          Dockerfile คือการสร้าง Docker Image ในแบบของเราเอง หรือก็คือการ custom docker image นั่นแหละ ถึงแม้ว่าเราจะใช้ CLI เข้า container ได้เลย แต่จะดีกว่าไหมถ้าเราทำเป็น Docker Image ที่พร้อมใช้งาน ไม่ต้องมาคอยคิดว่าต้องลงอะไรบ้าง Custom Image ทำไม ?          การสร้าง container จำเป็นต้องใช้ parent image เสมอ ถึงแม้ว่า Docker Hub จะมีให้เราเลือกโหลดมากมาย แต่ตัวไหนล่ะที่ตรงใจเรา ตัวอย่าง Dockerfile          Dockerfile เป็นไฟล์ที่มี syntax เฉพาะ ของ Docker ลักษณะจะปะปนกับ shell script เพื่อเป็นชุดคำสั่งแรกเมื่อมีการสร้าง container นั่นเอง คำสั่งใกล้เคียง $ docker run -p 8080:8080 jenkins การใช้งาน Dockerfile          ขั้นตอนการสร้าง container จากเดิมที่เป็นแค่การดึง image มาใช้ คราวนี้เราจะสามารถเพิ่มเติมคำสั่งบางอย่างเข้าไป สิ่งที่ parent image เตรียมมาก็สามารถใช้ได้ และเพิ่มเติมสิ่งที่เราเพิ่มไปได้อีก มาลอง Custom Docker Image กัน FROM jenkins LABEL maintainer="LordGift" USER root RUN apt-get update && apt-get install -y android-sdk ENV

Docker กับการสร้าง environment แบบ All-in-One (Docker Compose)

Image
         Docker Compose เป็นสิ่งที่จะมายกเครื่อง Docker มากยิ่งขึ้น จากเดิม ( Docker คืออะไร ? ) เราได้ทดลองใช้ Docker ผ่าน CLI กันไป แต่การจะเอา container เดิมมาใช้ ก็จะมีความลำบากเล็กๆ และยิ่งถ้ามี container หลายตัวก็ยิ่งวุ่นวายไปใหญ่ assignment docker-compose.yml          ไฟล์นี้คือหัวใจสำคัญของ docker compose เราจะต้องเขียน config ต่างๆ เข้าไปในรูปแบบ YAML ซึ่งจริงๆมันก็คือการย้ายการเขียน CLI ทีละคำสั่ง ให้อยู่ในรูปแบบไฟล์ที่สามารถอ่านได้ง่ายขึ้น ลดการเขียนคำสั่งไปได้เยอะ (ลด หมายความว่าก็ยังต้องเขียนบ้างนะ sentiment_very_satisfied ) docker-compose.yml คำสั่ง Docker Compose สร้างและ start container ตามไฟล์ docker-compose.yml docker-compose up ดู container ที่เกี่ยวข้อง docker-compose ps Name Command State Ports --------------------------------------------------------------------- my-ci_jenkins_1 /bin/tini -- /usr/local/bi ... Exit 255 my-ci_sonarqube_1 ./bin/run.sh Exit 143        

Docker คืออะไร ? แนะนำวิธีใช้งานเบื้องต้น

Image
          Docker  คือเครื่องมือ virtualization ที่มีความยืดหยุ่นสูง, lightweight และง่ายต่อการใช้งาน เหมาะกับ developer ที่ต้องการสร้าง environment เสมือนจริง ปัจจุบัน Docker ได้รับความนิยมสูงมาก ผู้ให้บริการ Cloud หลายเจ้าก็สามารถนำ Docker ไปใช้ได้ โลโก้ปลาวาฬแบกตู้คอนเทนเนอร์ ก็หมายถึง Docker ที่ขับเคลื่อน environment ต่างๆ ที่แพ็คสำเร็จไว้แล้วนั่นเอง Container          Docker Container หมายถึงเครื่องเสมือน ซึ่งมีความใกล้เคียง Virtual Machine (VM) แบบที่เราคุ้นเคยกันอยู่มาก แต่ docker ถูกออกแบบมาให้จำลอง environment เฉพาะที่เราสนใจเท่านั้น เช่น Application Server, Build Tools, Website,... หรือจะเป็นการรวมกันหลาย ๆ อย่างก็ทำได้ โดย docker นั้นจะใช้ linux เป็นฐานในการสร้าง environment ต่างๆ ดังนั้นเราจำเป็นต้องอาศัย shell script เป็นหลัก Image          Docker Image เป็น template ของ container คือจะประกอบด้วยชุดคำสั่งสำหรับสร้าง environment เริ่มต้น การจะสร้าง container ได้นั้น จำเป็นต้องดึง image มารัน ซึ่งมือใหม่อย่างเราสามารถไปเลือกดึง image จาก image repository มาลองเล่นก่

[Java] JShell เครื่องมือใหม่ที่มาพร้อมกับ Java 9+

Image
           JShell  คืออะไร ? JShell ถือกำเนิดมาพร้อมกับ Java 9 (JDK 9) เป็นเครื่องมือใหม่สำหรับ Java Developer ที่ตามหลังชาวบ้านมาอีกตัวหนึ่ง JShell เป็นเครื่องมือที่ช่วยให้เราสามารถทดลองเขียน code แบบง่ายๆ ไม่ต้องมาสร้าง file / project ให้วุ่นวาย (แอบเล่าให้ฟังว่าเมื่อก่อนผมใช้เว็บเขียน java online เพื่อทำอะไรแบบนี้ เหอๆ)           REPL (Read-Eval-Print-Loop) เป็นคำนิยามอย่างเป็นทางการของ JShell หรือจะพูดให้ง่ายก็คือ การเขียนโปรแกรมแบบมี interaction ได้ทันที ถ้ายังไม่เข้าใจอีก ไปลองเล่นกันเลยดีกว่า http://blog.arungupta.me/jdk9-repl-getting-started/ เริ่มต้นเขียนโปรแกรมบน JShell ติดตั้ง JDK (version 9 ขึ้นไป) * JShell จะอยู่ใน JAVA_HOME/bin ถ้าอยากใช้ง่ายๆ ก็เพิ่มทำ PATH เข้า environment varible ไว้เลย เรียกใช้ jshell โดยรันคำสั่ง jshell $ jshell | Welcome to JShell -- Version 11 | For an introduction type: /help intro jshell> เมื่อเข้าสู่ jshell แล้ว เราก็สามารถเริ่มพิมพ์ code java ได้เลย jshell> System.out.println("Hello World"); Hello World

บทวิเคราะห์ Lambda Expression ปลอมของ Java เปรียบเทียบกับภาษา Kotlin

          ตั้งแต่ Java 8 ถูกปล่อยออกมา จนถึงวันนี้ Java 9, Java 10 ก็ออกกันแบบรัวๆ และยังมี Java 11 ที่บอกว่าจะเป็น LTS (Long-Term Support) มาจ่ออยู่อีก ถึงแม้ว่า Java จะเป็นภาษาอันดับ 1 (*อ้างอิงข้อมูลด้านล่าง) แต่ปัจจุบันภาษาใหม่ ๆ ก็ได้รับความนิยมอย่างรวดเร็ว ทำให้ Java ต้องพยายามปรับตัว และทำตัวลู่เข้าสู่ Functional Language อย่างที่หลายๆ ภาษาเป็น           Lambda Expression เป็นหนึ่งใน syntax ที่ได้รับความนิยมสูง แต่สำหรับ Java เพิ่งมาใน Java 8 และสร้างความสับสนให้เหล่า Java Developer เจ้าเก่าพอสมควร ซึ่งผมเองก็เคยเขียนบล็อกไว้บ้าง ( เขียน Lambda และใช้ syntax ใหม่ ๆ ,  ทำความเข้าใจให้มากขึ้นกับ Lambda Expression ) Higher-Order Function           เป็นคุณสมบัติอย่างหนึ่งของ funtional language คือ ฟังก์ชันที่สามารถรับ parameter เป็นฟังก์ชันได้ หรือถ้าจะเรียกให้เข้าใจง่ายขึ้นมันก็คือ "Lambda Receiver" เพราะเวลาเรียกฟังก์ชันเพื่อใช้งาน เราสามารถส่ง lambda expression มาได้นั่นเอง จะเห็นว่าใน Java 8 ถึง Java 10 นั้นก็ยังไม่มี syntax ส่วนนี้โผล่มาให้ได้เขียนกัน แล้วรั

[Java] Spring Framework กับความสามารถ Dependency Injection

Image
          "Spring" ประกอบด้วย  Spring Projects  มากมายให้เราได้เลือกใช้งาน ซึ่งการที่จะพูดว่า "ใช้ Spring" คงจะแคบเกินไปแล้ว ซึ่งในส่วนของโพสนี้ก็จะเล่าถึง Spring Framework ที่เกี่ยวข้องในการทำ Web Application แบบง่ายๆ กันครับ           เราสามารถเริ่มต้น Web Application Project ที่ใช้ Spring Boot ได้ง่ายๆ ถ้ายังไม่รู้จักแนะนำให้ไปทำความรู้จักกันก่อนครับ >>  รู้จัก Spring Boot ฉบับมือใหม่ Dependency Injection           สิ่งที่ยิ่งใหญ่ที่สุดของ Spring คือเรื่องความสามารถในการทำ dependency injection (DI) ซึ่ง DI นี้เองที่จะสามารถเชื่อมโยง spring framework ต่างๆ เข้าด้วยกัน และมีประโยชน์อย่างมากในการออกแบบ architecture ของ project @Autowired           Autowired เป็น annotation ที่ทำให้เราสามารถ 'Inject' object ขึ้นมาใช้งานได้ โดย object ดังกล่าวจะต้องถูกประกาศไว้ก่อนหน้า และเป็น object ที่มีความเป็น Spring หรือมีชื่ออย่างเป็นทางการว่า "Spring Bean"           Spring Bean คือ class ที่ถูกเพิ่มความสามารถเข้าไป โดยมีคุณสมบัติรองรับ DI ซึ่ง

[Java] รู้จัก Spring Boot ฉบับมือใหม่

Image
          Spring Boot หน้าที่หลักๆ คือจัดเตรียมโปรเจคให้เรามี library ที่เกี่ยวข้องอย่างครบครัน และมี embedded application server ติดมาให้ เป็นประโยชน์ในการ test มากๆๆ            Spring Initializr  เหมาะสำหรับผู้เริ่มต้นโปรเจค Spring Boot เป็นเว็บไซต์ที่จะช่วยสร้างโปรเจคอย่างง่ายขึ้นมา โดยจะต้อง download มาเป็น *.zip หรือในบาง editor ก็สามารถสร้างโปรเจคในลักษณะเดียวกันได้เลย(ไม่ต้องผ่านเว็บก็ได้) ในเคสนี้ผมลองสร้างผ่านเว็บครับ เอาแบบ clean สุดๆ ไม่ได้ใส่อะไรเพิ่มเลยนะครับ โหลดมาแล้วจะเห็นว่าเป็น maven project ตามที่ได้เลือกไว้ และนี่คือสิ่งที่ maven dependency ดูดมาให้เรา mvn dependency:tree [INFO] --- maven-dependency-plugin:3.0.1:tree (default-cli) @ SpringBoot2Tutorial --- [INFO] th.in.lordgift:SpringBoot2Tutorial:jar:0.0.1-SNAPSHOT [INFO] +- org.springframework.boot:spring-boot-starter:jar:2.0.0.RELEASE:compile [INFO] | +- org.springframework.boot:spring-boot:jar:2.0.0.RELEASE:compile [INFO] | | \- org.springframework:spring-context:jar:5.0.4.RELEASE:compile [INFO] | |

Push Notification คืออะไร มีวิธีทำอย่างไร (No Code)

Image
Push Notification           Push Notification หรือ การแจ้งเตือน คือ การที่แอปพลิเคชันนำข้อมูลมาแสดงในแถบแจ้งเตือนของระบบปฏิบัติการนั้นๆ กำหนด ไม่ว่าจะเป็น Mobile(iOS, Android) หรือ Computer ทั่วไปซึ่ง modern browser ในปัจจุบันก็สามารถแสดงแถบแจ้งเตือนได้แล้ว Notifications Overview           เราสามารถแบ่งการแจ้งเตือนออกเป็น 2 แบบ ดังนี้ Local Notification            คือ การที่ app. แสดง notification เอง ไม่มีอะไรเกี่ยวข้องกับ server ใดๆ ปกติแล้วจะแยกได้อีก 2 แบบย่อย คือ แจ้งเตือนตามเวลาที่กำหนด และแจ้งเตือนเป็นรอบๆ เช่น แอปนาฬิกาปลุก แอปแจ้งเตือนนัดหมาย เป็นต้น Remote Notification            คือ การที่ app. รับข้อมูลมาจาก server แบบไม่จำเป็นต้อง request ไปก่อน ตัวอย่างที่ยกมาได้ชัดที่สุดคงหนีไม่พ้น โปรแกรมแชท ต่างๆ ของเครื่องเรานี่แหละครับ เมื่อเราส่งข้อความไปหาเพื่อน           สิ่งที่คนทั่วไปเข้าใจ...           สิ่งที่ developer ควรรู้           จะเห็นว่า จริงๆ แล้ว mobile จะต้องเรียกไปที่ server เพื่อให้ server เป็นตัวจัดการข้อมูลก่อน จากนั้นก็ส่งของไปให้ p

[Java] สร้าง Hibernate Entity ด้วยวิธี Reverse Engineering ผ่าน Maven

          การสร้าง Hibernate Entity ผ่าน Eclipse ( สร้าง Hibernate Entity ด้วยวิธี Reverse Engineering ) นั้นอาจจะดูยุ่งยาก เพราะมีขั้นตอนค่อนข้างเยอะ อีกทั้งยังไม่สามารถ share code ร่วมกัน หรือจะเก็บไว้ใช้ในโปรเจคอื่นก็ลำบาก โพสนี้ผมจะมาแชร์วิธีการที่สะดวกมากขึ้น เพราะเราจะ generated Entity ด้วย maven กัน           Maven ไม่ได้เป็นแค่ dependency สำหรับ library เท่านั้น แต่ยังมี dependency ประเภท plugin ทำให้เพิ่มความสามารถของ maven เข้าไปอีก( Maven Plugin ) เช่น เราสามารถดึง application server มาใช้ทดสอบโดยไม่ต้องโหลดมาติดตั้งแยก ( Wildfly Maven Plugin ) หรือ เราจะทำ war file ที่มี configuration สำหรับ production แบบพร้อมใช้งาน ( Maven WAR Plugin ) เป็นต้น           สำหรับโพสนี้เราจะมาใช้  Maven AntRun Plugin  สำหรับ generate Hibernate Entity แบบ pure code กัน ไม่ต้องยุ่งกับเครื่องมือของ editor อะไรอีก และได้ใช้ความสามารถของ Hibernate Reverse Engineering ด้วย ทีนี้เราก็สามารถส่งต่อ config ไปใช้กันภายในทีม หรือจะเผื่อใช้ในโปรเจคอนาคตก็ได้เช่นกัน ก่อนจะเริ่มทำตามตัวอย่าง อยากให้แน

[Java] สร้าง Hibernate Entity ด้วยวิธี Reverse Engineering

Image
          Hibernate ประกอบด้วยหลายส่วน ซึ่งผมได้เขียนไว้แล้วก่อนหน้านี้ ( รู้จัก OR-Mapping และ Hibernate เบื้องต้น ) ในโพสนี้เราจะมาสร้าง ORM ภาคปฏิบัติกัน **คำเตือน ภาพประกอบเยอะมาก**           การ mapping ระหว่าง database กับ class นั้น เรารู้แล้วว่า Entity Class เป็นตัวกลางที่ตอบโจทย์การใช้งาน การที่เราจะสร้าง Entity Class ได้นั้น เราต้องรู้โครงสร้าง database ก่อน ซึ่งเราสามารถตั้งค่า connection และ generated Entity Class โดยอัตโนมัติได้ โดยวิธีการดังกล่าวเรียกว่าวิธีการทำ.. "Hibernate Reverse Engineering"           Hibernate Reverse Engineering ยังมีหัวใจสำคัญอีกอย่างหนึ่งคือ การทำ Type Mapping เพื่อกำหนดว่าถ้าเจอ Database data type ต้องแปลงเป็น Java data type อะไร            Eclipse  ยังคงเป็น editor ที่มีเครื่องมือในการสร้าง Hibernate Entity Class ที่ดีตัวหนึ่งอยู่ ถึงแม้ว่าตอนนี้ผมแทบจะหนีไปใช้ editor จากค่าย  JetBrains  ถึงแม้ว่า  IntelliJ IDEA  สามารถสร้าง Entity Class ได้เช่นกัน แต่ปัญหาคือ Mapped Type จะถูกกำหนดไว้แล้ว (default) ซึ่งบางครั้งเราอ

[Java] รู้จัก OR-Mapping และ Hibernate เบื้องต้น

Image
           Hibernate  คือ Java library ที่เพิ่มความสะดวกสะบายในการใช้งาน database เป็นอย่างมาก เป็นที่รู้จักของ Java Developer เป็นอย่างดี อีกทั้งมี community กว้างขวางมาก ๆ แบบไม่ต้องกลัวว่าถ้าติดปัญหาจะถูกทิ้งให้โดดเดี่ยวเดียวดายกันเลย      ORM           หรือ OR-Mapping หรือชื่อเต็มๆก็คือ Object-Relational Mapping เป็นเทคนิคการใช้ฐานข้อมูลผ่าน Object แทนการใช้ SQL ซึ่งเพิ่มความสะดวกมาก ๆ ให้เหล่าโปรแกรมเมอร์ ซึ่งบางคนก็เรียก Entity บางคนก็เรียก DTO (Data Transfer Object) สุดแล้วแต่ถนัดเลยครับ           ปกติแล้วการใช้งาน Relational Database เราจะต้องรู้จัก TABLE, COLUMN เป็นคำคุ้นหูอยู่แล้ว ซึ่งแน่นอนว่า Class ที่จะนำมาใช้เป็นตัวแทนฐานข้อมูลนั้น ก็มีความใกล้เคียงกันด้วย (พื้นฐาน ต้องอย่าทิ้ง) Relational Database Java Class Table Class Column Attribute ลองมาดูตัวอย่างเต็ม ๆ กัน จากตัวอย่าง ผมตั้งข้อสังเกตให้ 3 อย่าง คือ TABLE, COLUMN จะถูก mapping เข้ากับ class, attribute ผ่าน annotation  data type มีความหมายอย่างเดียวกันแต่ไม่ใช่ตัวเดียวกัน ความสัมพัน

[Java] การนำ jar file library มาใช้กับ Maven Project

Image
          Dependency ทำให้เราสามารถใช้งาน source code จาก repository ได้ ทำให้ชีวิตโปรแกรมเมอร์อย่างเรา ๆ สะดวกสะบายพอสมควร อีกทั้งยังสามารถ share dependency ให้ทีมสามารถใช้งานได้เหมือนกัน           แต่ !! โลกก็ไม่ได้สวยงามเสมอไป บางทีโปรเจคเก่า ๆ ที่เป็นแบบ editor based ก็อาจทำร้ายเราได้ โดยเฉพาะ library ที่ทำกันขึ้นมาเอง (*.jar) ซึ่งไม่ได้ download มาจาก dependency ทำให้เมื่อมีคนใหม่เข้ามาในทีมก็อาจเสียเวลา setup กันอีก แทนที่จะเปิดขึ้นมาแล้วสามารถเริ่มทำงานได้เลย วิธีการที่ผมใช้และคิดว่ามัน work สุดคือ การทำ local repository ในโปรเจคซะเลย อันดับแรก เอา *.jar ไฟล์มาทำให้เป็น maven based ซะก่อน mvn install:install-file -Dfile=mylib1.0.jar -DgroupId=th.in.lordgift -DartifactId=MyLib -Dversion=1.0 -Dpackaging=jar -DlocalRepositoryPath=local-libs file - ระบุ *.jar ของเรา ไม่จำเป็นต้องอยู่ในโปรเจค localRepositoryPath - ระบุ directory ปลายทางที่ต้องการให้เป็น local repository (ในโปรเจค) groupId, artifactId, version - เป็นค่าที่กำหนดเอง สามารถใส่อะไรก็ได้ แต่ควรตั

[Java] รู้จัก Maven ให้มากขึ้น เพื่อก้าวสู่ java professional

Image
          ถึงวันนี้คงไม่มี java dev คนไหนไม่ยอมใช้ maven กันอีกแล้ว แต่คงต้องอธิบายกันหน่อยเผื่อบางท่านมาจากภาษาอื่น ไม่ว่ากันครับ :D maven คือ ??           maven เป็น build tool ที่มีคลัง java source code หรือเรียกอีกอย่างว่า dependency เป็นของตัวเองอย่าง maven repository ( https://mvnrepository.com/ ) ซึ่งประกอบด้วย library, plugin, archetype ให้เลือกใช้มากมาย ซึ่ง editor ส่วนใหญ่ก็รองรับกันอยู่แล้ว บางตัวก็มีติดมาในตัวเลย ไม่ต้องติดตั้ง maven เองเพิ่ม แต่ผมก็แนะนำให้ download แยกต่างหากนะ ตัวอย่างโครงสร้าง maven project บน IntelliJ IDEA *.idea, *.iml เป็นไฟล์เฉพาะของ IntelliJ project ไม่ต้องสนใจ            pom.xml คือ ส่วนสำคัญที่สุดของ maven project เราจะต้องระบุการเรียกใช้งาน dependency, plugin จะถูกเขียนไว้ที่ไฟล์นี้ ในรูปแบบ xml ตัวอย่าง pom.xml <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/mav

Facebook Comment

Recent Posts

Popular post of 7 days

Portal คืออะไรกันนะ???

มาตรฐานการตั้งชื่อตัวแปร (Naming Convention)

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

Popular

[Java] Java 8 DateTime ใหม่ ไฉไลกว่าเดิม

Portal คืออะไรกันนะ???

มาตรฐานการตั้งชื่อตัวแปร (Naming Convention)

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

เรื่องของ ++i กับ i++

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ

[Java] Java Static Variable และ Static Method

Push Notification คืออะไร มีวิธีทำอย่างไร (No Code)

พิมพ์ซองจากรายชื่อ excel ด้วยวิธี Mail Merge

[Android] เปิดเครื่องไม่ได้ โลโก้ค้าง (Boot Loop)