วันพุธ, กรกฎาคม 29, 2558

ทำยังไง...ศึกษา Spring Boot ด้วยตัวเอง

โพสนี้มีจุดประสงค์เผื่อใครที่พอจะคุ้นเคยกับ spring framework อยู่แล้ว อยากจะศึกษา Spring Boot จะได้มีแนวทาง/แหล่งศึกษาด้วยตัวเอง

สืบเนื่องจากใน facebook group THJUG คุณ Kong Jirawong จะเปิดสอนเรื่อง Spring Boot กันฟรีๆ แต่ลงทะเบียนไม่ทัน ได้แต่ course outline มาว่าจะสอนอะไรมั่ง

fb2 fb1

เลยทดลองไปค้นๆดูว่าจะเรียนเรื่องเหล่านี้ได้จากที่ไหน

Course Outline โดย คุณ Kong Jirawong (คัดลอกมาเมื่อวันที่ 29/07/2015)
https://www.eventbrite.com/e/links-day-java-spring-boot-application-tickets-17926457517

ผมแทรก link สำหรับไปศึกษาหรือทำตาม ล้อหัวข้อใน course outline ดังนี้

Course Outline

รู้จักกับ Spring Boot

  • ทำไมต้อง Spring Boot?
  • เตรียมความพร้อมก่อนเริ่ม
  • สร้าง Spring Boot Project ด้วย Maven
  • โครงสร้างของ Maven Project
  • การ Build Spring Boot Project โดยใช้ Maven

การสร้าง project ด้วย maven จะมีอยู่ในตอนต้นของทุก tutorials ใน spring.io/guides แล้ว

Web Interface and Rest Interface

  • รู้จักกับ Controller ของ Spring
  • สร้าง Web Interface ด้วย template engine Thymeleaf
  • รู้จักกับ RestController ของ Spring
  • สร้าง Rest Interface ใน Spring Boot
  • การสร้างและใช้งาน Validate ใน Spring
  • รู้จักกับ Custom Validator และการประยุกต์ใช้

Bean validator

Unit Test and Integration Test

  • รู้จักกับ Test ใน Spring Boot
  • วิธีการเขียน Unit test และดูผลลัพธ์
  • วิธีการเขียน Integration Test และดูผลลัพธ์
  • การเขียนโดยใช้ Mock Framework ด้วย Mockito และ PowerMock

Spring's bookmarks tutorilas นี้มีสอนเรื่องการทำ unit test

Integration test example

Spring Data JPA

  • รู้จักกับวิธีการเชื่อมต่อและใช้งาน Database ผ่าน JPA บน Embedded database
  • รู้จักกับ Repository วิธีการสร้างและวิธีใช้งาน
  • เรียนรู้วิธีการใช้ Query Method ของ Spring Data JPA
  • วิธีการใช้งาน JPQl ร่วมกับ Spring Data JPA
  • รู้จักกับ Query Specification กับการแก้ปัญหา Query ที่ซับซ้อน
  • เรียนรู้วิธีการเชื่อมกับ MySql Database

เชื่อมกับ mysql ยังไง? แค่เพิ่ม dependency ใน pom, เปลี่ยน driver class name.

Spring Security

  • เรียนรู้วิธีการใช้ Spring Security ร่วมกับ Spring Boot
  • สร้างหน้า Login แบบง่ายโดยใช้ Inmemory Database
  • เรียนรู้วิธีการสร้างหน้า Form Login และการ Custom Form
  • รู้จักกับ UserDetails และ UserDetailsService ใน Spring Security
  • การ Login ด้วยข้อมูลจาก Database Mysql
  • ประยุกต์การใช้งาน Spring Boot สร้างเว็บแบบง่าย

ข้อเสียของการเรียนเอง กับการให้คนที่รู้แล้วสอน คือต้องใช้เวลามากหน่อย ไม่มีคนมาตอบคำถามให้ทันทีทันใด สงสัยตรงไหน หาคำตอบเองแล้วไม่เจอ ก็เอาไปคุยกันใน facebook's group THJUG ได้ มีผู้รู้คอยช่วยเหลือ

ตามที่คุณก้องกำหนดไว้ outline เหล่านี้จะจบใน 12 ชั่วโมง แต่ถ้าเรียนเองเล่นเอง ผมว่าคงต้องใช้เวลานานกว่านั้น

ถ้าอ่านมาจนถึงนี้ คงคิดเหมือนกันสิ่นะครับว่า น่าจะได้ไปเรียนสดๆกับผู้รู้เนอะ

วันพุธ, กรกฎาคม 22, 2558

Tools น่าใช้สำหรับ Android developer (LeakCanary, Fresco) และความเปลี่ยนแปลงของ String API ใน Android M

เมื่อเช้านี้อ่าน blog น่าสนใจ 3 เรื่อง

LeakCanary  เครื่องมือตรวจจับ memory leaked ใน android app ของเรา

Fresco facebook ทำ tools สำหรับการแสดงภาพในแอพ android ของเรา ไม่ต้องกังวลเรื่อง OOM 

Dude, Where's My char[]? เรื่องที่ว่า String API source code ใน Android M ไม่เหมือนกับแต่ก่อน ไม่มี char array แล้ว การ optimize นี้เป็นประโยชน์ ทำให้การทำงานกับ String เร็วขึ้น(แอพก็ใช้ String มากมายอยู่แล้ว)

แต่ตอนนี้ไม่ได้พัฒนา Android เลย คงยังไม่ได้ใช้ tools 2 ตัวนี้ -_-

วันจันทร์, กรกฎาคม 20, 2558

แก้ปัญหา ส่ง parameter ภาษาไทยด้วย RESTful GET กับ tomcat-maven-plugin

ปัญหามันเกิดจากค่า default uriEncoding ของ tomcat จะเป็น ISO-8859-1 (ตัวอักษรอังกฤษเท่านั้น) ถึงเราจะใช้ servlet filter เช่น org.springframework.web.filter.CharacterEncodingFilter กำหนดไว้ที่ web.xml แล้วก็ตาม เราจะต้องกำหนด uriEncoding ของ tomcat connector เป็น UTF-8 ด้วย

วิธีแก้ไข คือบอก tomcat ให้ใช้ uriEncoding เป็น UTF-8 ด้วย property นี้ maven.tomcat.uriEncoding

ซึ่งทำได้หลายวิธีดังนี้

วิธีที่ 1. ใส่ property เวลา execute mvn tomcat:run

 $ mvn tomcat:run -Dmaven.tomcat.uriEncoding=UTF-8  

วิธีที่ 1 มันเปลืองพลังงานการพิมพ์ นำมาสู่วิธีที่ 2

วิธีที่ 2. ใส่ไว้ที่ pom.xml ในส่วนที่เราประกาศใช้งาน tomcat-maven-plugin

<project>
  ...
  <build>
    ...
    <plugins>
      ...
    <plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
  <uriEncoding>UTF-8</uriEncoding>
</configuration>
   </plugin>
    ...
    </plugins>
    ...
  </build>
  ...
</project>

ข้อสังเกต หากทำแล้วก็ยังใช้งานไม่ได้อีก ให้สังเกตดูที่ console เวลา log มันวิ่งไป ว่า maven มันใช้งาน tomcat-maven-plugin ตัวไหนกันแน่

[INFO] <<< tomcat-maven-plugin:1.1:run (default-cli) @

ซึ่งหากเป็นแบบนี้ คือมันดันไปเอา tomcat plugin version 1.1 มาใช้ แทนที่จะเอา version 2.2 ตามที่เรา config เอาไว้ใน pom ข้างต้นแล้วล่ะก็ มันก็เท่ากับว่าเรา config ผิดตัวน่ะสิ่ -_-” แสดงว่ามันมี dependencies บางตัวที่ไปดึงเอา tomcat คนละตัวมา

ถ้าไม่อยากแก้ไข pom เรายังมีไม้สุดท้าย วิธีที่ 3

วิธีที่ 3. กำหนด properties เป็น global ไปเลย

<project>
  …
<properties>
…
<maven.tomcat.uriEncoding>UTF-8</maven.tomcat.uriEncoding>
…
</properties>
  ...
</project>

หากสังเกตดูจะพบว่าการที่เรากำหนด configuration ต่างๆใน properties tag เนี่ย จะเหมือนกับที่เราใส่ตอนที่ execute ใน command line แล้วใส่ -D เลย

ฉะนั้นหากจะต้องมาพิมพ์ใส่ -D หลายๆตัวใน command line มันก็ดูเยอะ เลอะเทอะ ย้ายเอามาใส่ใน properties tag นี้ ได้นะเออ

Happy Coding ^ ^

วันพฤหัสบดี, กรกฎาคม 16, 2558

ติดหนึบ vi มาใส่สีให้ vi กันเถอะ (Editing file with vi in colors)

ใช้งาน terminal บ่อยๆ เวลาเปิดแก้ไขไฟล์ด้วย vi หรือ vim แล้วมันเป็นสีเดียวกันหมด มันก็ดูลำบาก

ภาพเดิม

อ่อๆ คำสั่งและภาพเป็นการทำบน Ubuntu นะครับ OSX ก็ใช้ได้ น่าจะมีทั้ง vi, git มาแล้วซะด้วยไม่ต้อง download แล้ว

ไม่พูดมากแล้ว เรามาลงมือใส่สีให้ vim กันเลย

เราจะต้องใช้ git client ด้วย ถ้าไม่มีก็ติดตั้งก่อน

$ sudo apt-get install git -y

คนที่ใจดีทำแจกก็นายคนนี้ chriskempson opensource เอาไว้ที่ github

ตัวถาดสีของ vim จริงๆก็มีหลายเจ้าที่ทำเอาไว้ แต่ผมถูกใจของคนนี้ที่สุด ถ้าสนใจจะลองตัวอื่นก็ลอง google ดู vim colors ที่นิยมกันมากๆ ก็มี solarized

อ่าว ถ้าจะใช้ vi แต่ยังไม่มีก็ไม่ได้ใช่มั้ย ติดตั้งก่อน ถ้าเกิดยังไม่ได้ลง

$ sudo apt-get install vim -y

ต่อมาเตรียม directory .vim/colors

$ mkdir -p ~/.vim/colors

change dir เข้าไปเลย

$ cd ~/.vim/colors

ทำการ download ชุดสี base16

$ git clone git://github.com/chriskempson/base16-vim.git base16

ถ้าเอาเร็วก้อ copy มันทุกสีเลย

$ cp base16/colors/*.vim .

หรือ จะเลือกเฉพาะตัวที่ชอบก็ได้ (อย่างผมเอาแค่สองตัวนี้)

$ cp base16/colors/base16-tomorrow.vim .
$ cp base16/colors/base16-google.vim .

แก้ไข ~/.vimrc ถ้าไม่มีก็สร้างซะครับ จะใช้ text editor อะไรก็ได้ ผมใช้ vi นี่แหละ

$ vi ~/.vimrc 

เพิ่ม 2 บรรทัดนี้เข้าไป ข้างหลัง colorscheme ก็เลือกเอาตามชื่อไฟล์ที่อยู่ใน base16/colors/ แล้วตัด .vim ออก

set background=dark
colorscheme base16-tomorrow

ณ ตอนนี้มีให้เลือกตามนี้ หรือจะไปดูแบบ online ได้ที่นี่เลย

base16-3024.vim base16-brewer.vim base16-google.vim base16-ocean.vim base16-apathy.vim base16-bright.vim base16-grayscale.vim base16-paraiso.vim base16-ashes.vim base16-chalk.vim base16-greenscreen.vim base16-pop.vim base16-atelierdune.vim base16-codeschool.vim base16-harmonic16.vim base16-railscasts.vim base16-atelierforest.vim base16-colors.vim base16-isotope.vim base16-shapeshifter.vim base16-atelierheath.vim base16-default.vim base16-londontube.vim base16-solarized.vim base16-atelierlakeside.vim base16-eighties.vim base16-marrakesh.vim base16-summerfruit.vim base16-atelierseaside.vim base16-embers.vim base16-mocha.vim base16-tomorrow.vim base16-bespin.vim base16-flat.vim base16-monokai.vim base16-twilight.vim

กด :wq ออกมา ทดลองเรียกใช้งาน vi ใหม่

$ vi ~/.bashrc 

ทะด๊า..า

ภาพใหม่ หลากสีเลย

Happy Coding!

วันพุธ, กรกฎาคม 08, 2558

วิธีอัพ HTC One กลับเป็น ROM ศูนย์ 100% (ลบ tampered, relocked จาก hboot 1.54)

Imgur

เผยแพร่ครั้งแรก ที่ droidsans.com

เนื่องจากจะต้องเอาเครื่อง htc one ไปเคลมกล้อง ไอ่เราก็ไม่คิดว่าจะมีวันนี้
และสืบเนื่องจาก ศูนย์บริการ HTC Thailand เคยบอกผมว่า

ถ้าเครื่องคุณ bootloader ขึ้น TAMPERED, RELOCKED แบบนี้
จะถือว่า rooted และหมดประกัน (จะซ่อมแบบเปลี่ยน mainboard เท่านั้น)

เครื่องผมตอนนี้ hboot เป็น version 1.54 ซึ่งจะใช้ revone มาแก้ tempered, relocked ไม่ได้

วิธีทำสำหรับ HBOOT 1.44 คุณ rakyim เขียนไว้ ที่นี่
[updated] ท่านที่ทำ superCID ไปด้วย มีวิธีทำกลับให้เป็น HTC__044 ให้ดู โพสของคุณ rakyim (บรรทัดข้างบน)

ขอบันทึกขั้นตอนไว้ที่ droidsans แห่งนี้ เผื่อมีคนต้องการจะทำบ้าง แล้วไม่รู้จะไปทางไหนดี smile

คำเตือน! อ่านและศึกษาให้เข้าใจก่อนลงมือทำ การกระทำขั้นตอนตามโพสต์นี้จะทำให้ข้อมูลของคุณ ในเครื่องหายหมด (เหมือนใหม่แกะกล่อง จะมีก็แต่ของที่ htc ให้มา)

เครื่องมือที่ใช้

RUU เลือกตัวนี้
RUU Zip M7 U JB 50 HTC Asia WWE 1.29.707.4 R Radio 4A.14.3250.13 10.33.1150.01 Release 312087 Signed 2 4 Decrypted

File Size: 1005.8 MiB - Downloads: 4656
MD5: 9b1c26b17e5ebabff176e18caeb13190

TL;DR ขั้นตอนแบบคร่าวๆ

  • ทำ S-OFF
  • Reset bootloader เพื่อลบคำว่า TAMPERED, RELOCKED
  • Flash RUU (ROM ศูนย์)
  • ทำ S-ON

ขั้นตอนการทำ

  1. วิธีทำกลับ ROM ศูนย์ที่ง่ายที่สุดคือ flash RUU กลับ แต่ว่าถ้าเครื่องเราเป็น S-ON มันจะทำไม่ได้ แล้ว
    เครื่องเรา มี HBOOT version 1.54 จะทำ S-OFF ด้วยวิธีง่ายโดยใช้ revone ไม่ได้อีกเช่นกัน เราจะใช้ rumrunner
  2. โหลด rumrunner มาให้พร้อมครับ, ตอนที่ใช้นี้เป็น version universal 0.5
  3. การจะใช้ rumrunner ได้
    ต้องมี internet ที่ใช้งานได้
    เครื่องจะต้อง OEM unlock หรือ rooted ก่อน และ Window ของเราจะต้องใช้ คำสั่งพวก adb, fastboot ได้ด้วย
    เปิด USB debugging ที่เครื่อง HTC One
    Fast boot disabled ที่เครื่อง HTC One settings -> Power-> un-check "fast boot”
    วิธี rooted ไม่บอกแล้วนะครับ (สำหรับอ้างอิง: ผมใช้ TWRP 2.6.3.3 กับ SuperSU v1.65 ของ clockworkmod)
  4. ข้อสำคัญของการรัน rumrunner เครื่อง window ต้องปิด firewall และ ปิด antivirus ในระหว่างที่เรียกมันทำงาน
  5. Double click soju.exe เพื่อเป็นการเรียกทำงาน
  6. เมื่อทำ S-OFF ด้วย rumrunner สำเร็จ ต่อไปเราจะ reset bootloader กัน
  7. Flash Guru_Bootloader_Reset_1.0.zip ด้วย TWRP recovery *ดูหน้าจออย่างละเอียดได้จากเวบต้นทางนะครับ
  8. ตอนเลือก option ให้เลือก remove TAMPERED กับ LOCK Bootloader
    Imgur
    *ภาพจาก htc1guru
  9. เมื่อเสร็จแล้วลอง boot เข้า bootloader ตรวจสอบได้ TAMPERED จะหายไปและมีคำว่า LOCKED (ไม่ใช่ RELOCKED) แล้ว

ต่อไปเราจะ Flash RUU เพื่อกลับ ROM ศูนย์แล้ว

  • เตรียมไฟล์ RUU Zip M7 U JB 50 HTC Asia WWE 1.29.707.4 R Radio 4A.14.3250.13 10.33.1150.01 Release 312087 Signed 2 4 Decrypted.zip เอาไว้
    *เราอาจจะเปลี่ยนชื่อยาวๆนี้เป็น RUU.zip สั้นๆก็ได้

เรียกคำสั่ง

adb reboot-bootloader

พอเข้าหน้า fastboot แล้ว เราจะสั่ง

fastboot oem rebootRUU

ทีนี้เราจะเห็นหน้าจอพิ้นสีดำ ตัวหนังสือ htc สีเงิน

fastboot flash zip RUU.zip

จะเห็นคำว่า FAILED อย่าตกใจครับ เราจะต้องสั่งคำสั่งเดิมอีกครั้ง

fastboot flash zip RUU.zip

สังเกตที่ตัวเครื่อง ปรอทสีเขียวจะเพิ่มขึ้นเรื่อยๆ พอมันทำเสร็จ สังเกต prompt ใน cmd มันจะกลับมาให้พิมพ์ได้อีกครั้ง

เราจะสั่ง reboot ได้แล้ว

fastboot reboot

reboot กลับมา จะใช้เวลา boot นานหน่อยครับ อย่าตกใจ wink

เราจะได้ ROM ศูนย์ เหมือนตอนซื้อแกะกล่อง เหมือนเมื่อตอนมันออกวางตลาดเดือนแรกแล้วครับ (android 4.1.2)

สั่งคำสั่ง เข้า bootloader อีกครั้ง

adb reboot-bootloader

เราจะเห็นว่า HBOOT เรากลับมาเป็น version 1.44 แล้ว เยส..ส joy

ถ้าทำ super CID ไว้ด้วย หลังจากได้ HBOOT 1.44 มาแล้ว ก็น่าจะทำตามโพสคุณ rakyim เพื่อทำกลับมาเป็น cid ของบ้านเราได้ หลังจากทำ CID กลับมาแล้วค่อยทำขั้น 13 ต่อไป

  1. สั่งคำสั่งเพื่อเปลี่ยน S-OFF เป็น S-ON
    fastboot oem writesecureflag 3
  2. ทดลอง reboot เข้า bootloader อีกครั้ง เพื่อดูว่า S-OFF กลับเป็น S-ON แล้ว
    เรียบร้อยเสร็จพิธีครับ พาเครื่องไปใช้งาน หรือเข้าศูนย์เพื่อเคลมได้เลย
    เมื่อเรา boot เข้าใช้งานปกติ ก็มาเริ่ม update ROM ผ่านทาง OTA เพื่อ upgrade เป็น 4.2.2 ได้

ถ้าสงสัยตรงไหนหรืออยากปรึกษา ทิ้งข้อความไว้ หรือ hangout มาคุยกันได้ครับ
contact

วันพฤหัสบดี, กรกฎาคม 02, 2558

ประโยคที่ใช้อักษรภาษาไทยครบทุกตัว - Thai pangram




ประโยคที่ผมพาดหัวไว้มีชื่ออย่างเป็นทางการคือ pangram คำกรีกแปลว่า อักษรทุกตัว
ที่มา wikipedia
สำหรับประโยคภาษาอังกฤษ อาจจะคุ้นๆตากันอยู่ พวก software จัดการฟอนต์นำมาใช้กัน
The quick brown fox jumps over the lazy dog
ภาษาไทย มี 2 แบบ
แบบที่ 1 คำกลอน
เป็นมนุษย์สุดประเสริฐเลิศคุณค่า กว่าบรรดาฝูงสัตว์เดรัจฉาน
จงฝ่าฟันพัฒนาวิชาการ อย่าล้างผลาญฤๅเข่นฆ่าบีฑาใคร
ไม่ถือโทษโกรธแช่งซัดฮึดฮัดด่า หัดอภัยเหมือนกีฬาอัชฌาสัย
ปฏิบัติประพฤติกฎกำหนดใจ พูดจาให้จ๊ะๆ จ๋า น่าฟังเอยฯ
แบบที่ 2
นายสังฆภัณฑ์ เฮงพิทักษ์ฝั่ง ผู้เฒ่าซึ่งมีอาชีพเป็นฅนขายฃวด ถูกตำรวจปฏิบัติการจับฟ้องศาล ฐานลักนาฬิกาคุณหญิงฉัตรชฎา ฌานสมาธิ