วันอาทิตย์ที่ 26 มิถุนายน พ.ศ. 2559

เพิ่ม PermGen space เพื่อให้ IDE ทำงานสะดวก...และไม่สะดุด


เคยไหม...ที่ทุกครั้ง เวลาที่เราเขียน Code บน NetBean หรือ Eclipse แล้วค้างๆๆๆๆๆ หรือ Deploy แล้วค้างแล้ว Dump ขึ้นตัวแดงมาเลยย... แล้วก็อ้างว่าเครื่องเก่าบ้าง กากบ้าง ต้องไปเพิ่ม Ram ให้เยอะขึ้น

จากการที่ท๊อปได้เข้าไปอ่านตาม Blog ต่างๆ เขาสรุปสาเหตุไว้ ดังนี้...

1. ปัญหาจากช่วง Deploy และ Undeploy 

-ช่วง runtime แต่ละ application จะถูกโหลดผ่านทาง application classloader โดยทำหน้าที่ โหลดไฟล์ .class จาก jar files และเมื่อ undeploy application นั้น classloader มันจะทำการละทิ้ง class ที่ได้มีการโหลดเข้ามา แล้วจะถูกจัดการโดย garbage collector ต่อมาในภายหลังเพื่อคืนทรัพยากรสู่ระบบ

และจากเหตุการณ์ตรงนี้แหละ....

-บางครั้ง classloader อาจยังมีการเก็บบางสิ่งที่ถูกโหลดเข้ามาไว้อยู่ และปกป้องมันจาก garbage collector เนื่องจากว่ามันอาจจะถูกใช้งานอยู่ ทำให้ garbage collector ไม่สามารถเข้ามาจัดการได้ จึงเป็นเหตุทำให้เกิดข้อผิดพลาด java.lang.OutOfMemoryError: PermGen space ได้
2. ปัญหาจากการจัดการ Memory ใน VM

-เดิมที memory ที่มีอยู่ใน Virtual Machine (VM) จะถูกหารไปใช้งานโดย number of region ซึ่งหนึ่งในนั้น คือ region ที่เป็น PermGen space (permanent generation space) ซึ่งเป็นพื้นที่ของ memory สำหรับโหลด class file เข้ามา

-สำหรับ size of memory region นั้น จะมีการกำหนดไว้อย่างคงที่โดยไม่มีการเปลี่ยนแปลงเมื่อ VM ทำงานอยู่ เราสามารถกำหนด size of region โดย -XX:MaxPermSize เช่น -XX:MaxPermSize = 256m หมายความว่า เรากำหนด size of memory region สูงสุดที่ 256 MB โดยหากเราไม่มีการกำหนด โดยพื้นฐานแล้วทางจะมีการกำหนดไว้ที่ 64 MB

3. ปัญหาจาก garbage collector 

-เนื่องจาก garbage collector ไม่สามารถคืนทรัพยากรสู่ระบบได้

วิธีการที่ garbage collector จัดการ... คือ ต้องเก็บ classes ใหม่ที่กำลังโหลดเข้ามาใน memory เป็นเหตุทำให้ VM นั้นเกิดการขาดแคลน space ใน memory region จึงต้องมี JAVA heap ไว้เพื่อช่วยจัดสรร memory ให้เพียงพอต่อ size of Object ที่อาศัยอยู่บน process heap

ปัญหาที่เกิดตามมา ก็คือ... เกิด Object นั้นออกจาก process และคืน memory สู่ระบบ

-เนื่องจากว่า JAVA application จะทำงานตาม process เดี่ยวๆ ของแต่ละ process ที่ทำงานอยู่ โดยจะไม่มีการแชร์ memory ร่วมกันระหว่าง process ซึ่งแต่ละ process จะถูกจัดสรร memory ให้แต่ละ process เองโดย JVM ที่เรียกว่า process heap 

เพราะฉะนั้น... การตั้งค่าพารามิเตอร์ –Xmx นั้นไม่ได้ช่วยอะไรมาก โดยพารามิเตอร์ดังกล่าว เป็นเพียงการกำหนด size of total heap เท่านั้น และไม่ได้ส่งผลกระทบอะไรต่อ size of PermGen region เลย

หลักๆ คือ ... 

-PermSize ไม่เพียงพอต่อการโหลด class file มาเก็บไว้ใน memory PermGen space 

สิ่งที่ต้องทำ คือ ...

-กำหนดค่า PermGen space และ heap size ให้เพียงพอต่อความต้องการใช้งาน

โดยทั่วไปเราจะกำหนด Environment Variables จาก JAVA_OPTS ซึ่งเป็น variable name ไว้กำหนดค่าต่างๆ ดังนี้

JAVA_OPTS="–Xms256m  -Xmx512m  -XX:PermSize=256m -XX:MaxPermSize=512m "

–Xms (initial java total heap size) ในกรณีที่เกิดปัญหาทำงานช้า
-Xmx : maximum java total heap size
-XX:PermSize : initial permanent  generation  space
-XX:MaxPermSize : maximum permanent generation space

นอกจากนี้ ยังมีพารามิเตอร์ตัวอื่นที่น่าสนใจ เช่น

-Xss128m เป็นการกำหนด stack size เท่ากับ 128MB
-ในแต่ละ thread ใน VM นั้น จะมี stack อยู่ โดย stack size จะจำกัดจำนวนของ thread ไว้ตามที่เราจะสามารถมีได้
ดังนั้น ถ้าจำนวนของ thread > stack size จะทำให้ขาดแคลน memory ตามที่แต่ละ thread มันต้องการ

-Xmn100m เป็นการกำหนด size of the heap สำหรับ young generation เท่ากับ 100MB
-memory ที่ถูกใช้งานโดย JVM จะถูกจัดเป็น generation

-ขั้นที่ 1 : generation จะแบ่งตามช่วงเวลาที่ memory pool นั้นได้ถือครอง object ในช่วงเวลาแตกต่างกันออกไป  โดย object ใหม่ที่ถูกเรียกเข้ามาใช้งานนั้นจะมีการจอง memory เพื่อใช้งานใน young generation region (บางครั้งอาจจะเรียกว่า new generation region) เมื่อไม่ได้ใช้งานจะถูกนำไปเก็บไว้ที่ memory old generation region 

-ขั้นที่ 2 : หาก memory young generation region เต็มแล้ว garbage collector จะทำการเรียกคืนหน่วยจำส่วนหนึ่ง ที่ไม่ได้มีการใช้งานแล้ว จาก old generation region แบ่งไปให้กับ young generation region

เดิมทีนั้น จะมีการแบ่ง generation ของ total heap size ต่อมาได้มีการแบ่ง old generation ออกมาเป็น tenured generation หลังจากที่ generational memory system นั้นได้ทำการหาร heap เข้าไป ใน sized partitions ที่ถูกแบ่งไว้อย่างระมัดระวังจะถูกเรียกว่า generation

–Xmn จะกำหนด size of the heap ที่ถูกจัดสรรสำหรับ Eden generation of the heap เพราะเริ่มแรก object ที่มีการใช้งานจะจอง memory เบื้องต้นบน Eden ก่อนที่จะถูกนำไปเก็บบน memory ทั้ง 2 spaces ระหว่าง survivor spaces จนกระทั่งมันไม่ได้ถูกเรียกใช้งาน และถูกนำไปเก็บไว้ยัง old generation region

older  generation = (ขนาดของ -Xmx) – (ขนาดของ -Xmn) 
-ดังนั้น... –Xmn จะต้องมีค่าต่ำกว่า –Xmx เสมอ

โดยทั่วไปเราไม่ต้องการ Eden ที่ใหญ่เกินไป หรือใช้มากกว่าที่ garbage collector จะเรียกคืนสู่ระบบได้ จึงไม่จำเป็นต้องตั้งค่าให้กับพารามิเตอร์ -Xmn เพิ่มก็ได้ 

-นอกจากนี้ ก็มีการแนะนำต่ออีกว่า... ควรเลือก JDK ให้เหมาะสมกับ OS เพราะ OS 64 bit  จะมี heap size default มากกว่า OS 32 bit เพื่อรองรับ size of object ที่ใหญ่ขึ้น

Keywork : JAVA Performance Tuning, Java Concurrency in Practice

Refference : 

-เรื่อง Dealing with “java.lang.OutOfMemoryError: PermGen space” error
http://stackoverflow.com/questions/88235/dealing-with-java-lang-outofmemoryerror-permgen-space-error

-เรื่อง Tomcat – java.lang.OutOfMemoryError: PermGen space
http://www.mkyong.com/tomcat/tomcat-javalangoutofmemoryerror-permgen-space/

-เรื่อง java.lang.OutOfMemoryError: Permgen space
https://plumbr.eu/outofmemoryerror/permgen-space

วันเสาร์ที่ 25 มิถุนายน พ.ศ. 2559

Google I/O 2016 : Android Studio 2.2 , Espresso , Firebase , PWA , VR


วันที่ 25 มิถุนายน 2559 ที่ผ่านมา ท๊อปก็ได้ไปงาน Google I/O 2016 ที่ Siam Pavalai (Siam Paragon) ตอนลงทะเบียน ก็ได้เจ้า Google Cardboard มาเป็นของที่ระลึก...



เข้างานแล้ว... ก็มาแจกของกัน !!!


Google Cardboard รุ่นแรก 5555++


ซึ่งภายในงานก็มีสิ่งที่น่าสนใจมากมาย อาธิเช่น การเปิดตัว Android Studio 2.2 Preview 4 , Google Play Service , Firebase (พระเอกในงานเลย ตัวนี้) , Progressive Web Apps (PWA) แล้วก็ VR 360 องศา ซึ่งยังไม่เปิดตัวอย่างเป็นทางการในประเทศไทย อดใจรอสักนิสนึง...


โดยส่วนตัวผม ไปงานนี้ ถือว่าคุ้มนะ มีน้องที่บริษัทเดิมส่งรายละเอียดงานนี้มา ก็ลองไปดู ยอมรับว่า แรกๆ ตามไม่ค่อยทัน เนื่องจากไม่ได้จับ Android มาเกือบ 2 ปีและ แต่ได้มีโอกาสไปดาวโหลดมาเล่นบ้าง ลองสร้างโปรเจคเล่นๆ ศึกษา Coding แล้วก็เรียนรู้การทำงานกับ Genemotion ซึ่งก็ยอมรับว่า ตามไม่ทันจริงๆ แต่ในมุมมองของ Speaker ที่เป็น Expert ทางด้านนี้ หรือพวก Mobile Application Developer ทั้งหลาย ก็จะมองว่า ปีนี้ไม่ค่อยมีอะไรเปลี่ยนแปลงเท่าไหร่ อันนี้ถือว่าเป็นความคิดที่ดีกับตัวผมนะ เพราะผมเป็น Web Developer มา 2 ปี แต่สุดท้าย ก็ตามทันนะ เพราะหลังๆ เนื้อหาเริ่มสนุกขึ้น

....ตอนนี้ผมตามพวก Mobile Application Developer ทันแหละ 5555++

สำหรับการพูดของเหล่า Speaker ก็จะมีหัวข้อ ดังนี้

หัวข้อแรก : What's New in Android N (โดยพี่เนย GDG Thailand) : ก็จะพูดถึงคุณสมบัติที่ Android  N คือ เรื่องของการออกแบบ App ด้วยหลัก Constraint Layout (น่าสนใจมากๆ เพราะมันปฏิวัติการออกแบบหน้าจอในลักษณะลากวางอย่างสวยงาม ผมตั้งใจฟังเรื่องนี้เป็นพิเศษ... เพราะผมมีปัญหากับการออกแบบหน้าจอมาก จนเลิกเล่น Android ไปพักนึง) และส่วนหัวข้ออื่นๆ ก็จะมี เรื่อง การออกแบบให้หน้า App Split ไปมาด้วยหลัก Multi-window , การสร้าง Notification, การขยายหน้าจอ, Multi Locale, Data saver mode , การกำหนดการเข้าถึงของ Hardware, การ Support VR (อันนี้ก็น่าสนใจนะ)


และการพูดในส่วนอื่นๆ ก็จะมีเรื่อง...
-Vector Drawable (VD)
-RecyclerView
-Design Support Library
-Chrome Custom Tab
-Instant App

หัวข้อที่ 2 : Android Studio 2.2 และ New UI Design (โดยพี่ตี๋ GDG Thailand) : หัวข้อนี้พี่เขาได้แบ่งการพูดเป็น 4 หัวข้อหลัก คือ Design, Develop, Build และ Test

ก่อนที่จะเริ่ม เรามา Setup Android Studio 2.2 Preview 4 กันก่อนนะ... โดยให้เข้าไปที่ http://tools.android.com/download/studio เพื่อทดสอบของดีของ Google กัน




หลังจาก Download ลงมาเสร็จ ให้ไปที่ C:\Users\admin\...\android-studio\bin และคลิ๊กที่ studio64.exe เพื่อติดตั้ง SDK

กด Next เพื่อติดตั้ง


เลือก Standard


ตรวจสอบ Path และ SDK Component ก่อนที่จะติดตั้งลงไป





หลังจากติดตั้งเสร็จแล้ว ลองสร้างโปรเจคเองได้เลย....







คุณสมบัติของ Android Studio 2.2

1.) Design :
ข้อดี : 
-เลิกใช้ XML แล้วหันมาใช้ Layout Editor, Constraint Layout และ Layout Inspector
-สะดวกและรวดเร็ว แค่ลากวาง รู้จักการ join
-สร้างการทำงานของ App แบบ Responsive
-สร้าง Performance เนื่องเลิกใช้วิธีการซ้อน Component หลายๆ ชั้น เนื่องจากมองว่าทำให้ APK มีขนาดใหญ่ขึ้น ต่อไปจะมีวิธีที่ดีกว่านี้แล้ว เยี่ยมมากๆ
ข้อเสีย :
-Constraint Layout ตอนนี้อาจจะมี Bug เล็กน้อย แต่ถ้าเวอร์ชั่นนี้สมบูรณ์กว่านี้ ก็จะเป็นเครื่องมือที่ใช้จัด Layout ของ Android Apps ที่เยี่ยมมากๆ

2.) Develop :
-สอนการใช้งาน Firebase : https://firebase.google.com/

ต่อไปจากก็ไม่ต้องจ้าง Back-end Developer และนะ... เพราะมี Firebase ช่วยจ้า... 

-สอนการใช้งานจาก Sample Code : https://github.com/googlesamples
-สอนการใช้งานจาก Codelab : https://firebase.google.com/docs/test-lab/

3.) Build : 
-สอนเรื่อง Instant Run : เพิ่มประสิทธิภาพการ Build โดยไม่ต้อง Deploy APK ทุกครั้งที่ทำการเปลี่ยน Code แล้ว Run ทดสอบที่ Emulator
Reference : http://tools.android.com/tech-docs/instant-run

-Merge Manifest Viewer : สามารถตรวจสอบ Dependency ที่เพิ่มเข้าไปได้ ซึ่งจะแสดงการใช้งานไว้
-การใช้ Jack compiler เพื่อเพิ่มประสิทธิภาพการ Build

4.) Test :
-พูดเรื่อง Android Emulator มีลักษณะหน้าจอและการทำงานที่ใกล้เคียงกับของจริง

-การทดสอบ UI ด้วย Espresso
Reference : https://developer.android.com/training/testing/ui-testing/espresso-testing.html

-การ Monitor เพื่อดูขนาดของ APK สำหรับทดสอบ Performance ด้วย APK Analyzer


หัวข้อที่ 3 : Play Store Best Practise โดยคุณ Aun จาก GDG Thailand ฝ่าย Marketing ก็ได้มา Review วิธีทำการตลาดกับ Google Play เช่น
-เรื่องการเก็บเงินผ่านผู้ให้ผู้บริการ
-สร้างจุดเด่นและลบจุดด้อยของ App ตัวเอง
-การทำ Retention
-การออกแบบ Screen Shot, การกำหนดความน่าสนใจของ App, การสร้าง Contents, การสร้าง Ads
-การทดสอบการใช้งานของ App ด้วยวิธีแบบ Soft Launch
-การใช้ Keyword เพื่อส่งเสริมการ Search

หัวข้อที่ 4 : Advanced Espresso โดย Inaki Villar : บินมาจากสเปนเลยนะคนนี้
เขาก็ได้พูดถึงการทดสอบ UI ด้วย Espresso Framework ซึ่งประกอบด้วย จาก...
Link : Android Testing Support Library : https://google.github.io/android-testing-support-library/

ประกอบด้วย...

1. Android Junit Runner : https://developer.android.com/reference/android/support/test/runner/AndroidJUnitRunner.html
2. Espresso : https://google.github.io/android-testing-support-library/docs/espresso/cheatsheet/


3. UIAutomator : https://google.github.io/android-testing-support-library/docs/uiautomator/

หัวข้อที่ 5 : Firebase โดยพี่เนย พี่ตี๋ และพี่เอก จาก GDG Thailand : ได้มานำเสนอการใช้ Firebase ซึ่งต่อไปจะเข้ามาเป็นส่วนหนึ่งในเทคโนโลยี Back-end Server ทำหน้าที่ในการเก็บข้อมูลการ Login, การวิเคราะห์การใช้งาน Application และการใช้เทคโนโลยี Real Time Database โดยพี่เนย ก็ได้เกริ่นหลักการทั่วไปของ Firebase โดยเราสามารถสมัครเข้าใช้งานได้ ฟรี !!! และเรายังสามารถเข้าไปใน Console เพื่อทำเรื่องต่างๆ ได้ เช่น
-การเข้าถึงข้อมูล หรือ Authentication : เราสามารถเข้าไป set และ reset ข้อมูลการ login ของ User ได้
-การทำพวก DNS หรือ Hosting : เราสามารถใช้ NPM ในการจัดการเรื่องนี้ได้
-การเข้าไปที่ firebase.google.com เพื่อเอา Firebase มาใช้ในโปรเจคโดยใส่ SHA1
-เราสามารถเชื่อมต่อ Firebase กับ Android Studio เพื่อเรียกใช้ Service ที่เราต้องการได้ เพียงแค่ Click เดียว Code ทุกอย่างก็จะ Generate มาที่โปรเจคของเราเลย สุดยอดปะหละ !!!
-ลดการเขียน Code เพื่อเรียกใช้ Service ลงไปมาก เพราะ Firebase จัดการ Service ให้หมด
-การเก็บข้อมูลลง Database ใช้หลัก key-value
-เรื่องของ Cloud Messaging ที่จะเป็น Feature ไว้เพื่อส่ง Message และจะส่ง Notification ไปแสดงที่โทรศัพท์ของเราเพื่อรับส่งข่าวสาร ซึ่งหลักการทำงาน จะสามารถยิง Service ได้ 2 ทาง คือ ผ่านทาง Console ของ Firebase และผ่านทาง Application ที่ได้สร้างขึ้น และ Firebase ยังสามารถสร้าง Group เพื่อส่งข่าวสารได้ด้วย แถมยังสามารถส่งข่าวสารแบบ Stand Alone ได้อีกด้วยอะ เจ๋งมากๆๆๆ
-การทดสอบพวก Crash Reporting : พวกการตรวจสอบการทำงาน หรือ การ Error ของ Application
-การทำ Test Report และ การทำ Screen Shot อันนี้ยังเป็น Option ที่ยังเสียเงินอยู่ ไม่ฟรีนะจ๊ะ !!!
-การทำ Dynamic Link เพื่อส่งเสริมเรื่องการ Invite เพื่อนมาโหลด App ตัวเอง
-เรื่องการส่งข้อมูล เป็น Option นี้น่าสนใจ !!! ถ้า App ยังไม่ Online ข้อมูลก็จะเก็บไว้ที่เครื่องเราก่อน เมื่อ App Online แล้ว ข้อมูลทุกอย่างก็จะส่งไปที่ Server ทันที ว้าวววว... เจ๋งฝุดๆ

และสุดท้าย...พี่เขายกตัวอย่าง App Chat Room ที่ทำขึ้นมา เพื่อให้เห็นถึงความเก่งกาจของ Firebase ที่ทำงานแบบ Realtime สุดๆ (สามารถ Create Update Delete ได้เร็วฝุดๆ)

หัวข้อที่ 6 VR at Google โดยพี่วิทยา จาก GDG Thailand : หัวข้อนี้ก็ไม่ค่อยมีอะไรมาอัพเดตมาก ก็ได้พูดถึงที่มาของ VR ว่า มีการคิดมานานแล้วโดย NASA ตั้งแต่ปี 1990 แต่ยังไม่สำเร็จ จนกระทั่ง Google ได้นำมาพัฒนาต่อจนเกิด VR รุ่นแรก ซึ่งเป็นรุ่นเดียวกับที่ได้แจกในงาน Google I/O 2016 นั้นแหละ หลังจากนั้นก็ได้กล่าวถึงว่า ปัจจุบันก็มีบริษัทต่างๆ ทำ SDK มาให้ใช้พัฒนา เช่น Unity แต่ก็จะต้องมีการไป Convert เพื่อใช้งานอีก และในอนาคต VR ก็จะมีการพัฒนาให้มาคู่กับโทรศัพท์ของเราแล้วนะ โดยพี่เขาก็ได้เปิดงานของ Daydream ให้ดูกัน


Daydream Labs: Lessons Learned from VR Prototyping - Google I/O 2016


และอีกเรื่อง คือ Progressive Web App : ก็จะมีการพูดถึง การใช้งาน Toolkit : Web + Mobile Web App
นั่นคือ AngularJS 2, Polymer, SW-Toolbox, SW-Prefetch, Push notification, Service Worker

reference :
-Progressive Web Apps : https://developers.google.com/web/progressive-web-apps/
-AngularJS : https://angularjs.org/
-Polymer : https://www.polymer-project.org/1.0/
-Ionic Framework : http://ionicframework.com/

สุดท้าย !!! แหล่งข้อมูลจากทาง GDG Thailand ซึ่งจะมี Code Lab และ Slide สรุปให้ของทั้งงาน
https://github.com/Google-IO-extended-bangkok

What's new in aNdroid :
http://www.slideshare.net/nuuneoi/whats-new-in-android-google-io-extended-bangkok-2016

Advanced Espresso :
https://speakerdeck.com/cdsap/espresso-io-extended-bangkok

What's new in Android Studio 2.2 : https://docs.google.com/presentation/d/1XWvLcV1XlcB4llJri6agY3X6BsvT9p7N0QfzItjWvXg/edit?usp=sharing

Introduction to Firebase :
http://www.slideshare.net/nuuneoi/introduction-to-firebase-google-io-extended-bangkok-2016

Firebase Cloud Messaging : https://docs.google.com/presentation/d/1HPLk1PXaGUjqTlPB6RHsgrTunJNo10kbGZ-JX_7JELw/edit?usp=sharing

และนี่ก็คือสรุปเนื้อหาทั้งหมดในงาน Google I/O 2016 โดยพี่เนย GDG Thailand ครับ...


วันศุกร์ที่ 24 มิถุนายน พ.ศ. 2559

Welcome to Codelabs! : แหล่งเรียนรู้ Coding สำหรับชาว Geek จากงาน Google I/O 2016

สวัสดีครับ ในปี 2016 ช่วงกลางๆ ปีที่ผ่านมา ก็มีข่าวว่า Google จะจัดงานสัมมนาที่ใหญ่ที่สุดของนักพัฒนาที่รวมหัวข้อบรรยายและวิทยากรแนวหน้าจากไทยและนานาชาติ I/O Extended Bangkok 


แหล่งข้อมูล : https://events.google.com/io2016/

ซึ่งในปีนี้จัดเต็มกับหัวข้อใหม่ล่าสุดส่งตรงจากงาน Google I/O เช่น Android, Progressive Web App, Firebase และ VR ครบทั้งฝั่งแอนดรอยด์และเว็บแพลตฟอร์ม

และภายในงาน...ทาง Google ก็ได้นำเสนอแหล่งเรียนรู้ของ Geek ที่มีใจรักในการเขียน Code ในรูปแบบใหม่ๆ ด้วยเทคโนโลยีใหม่ๆ ที่ทันสมัย และสนุกมากกว่าเดิม โดยแหล่งเรียนรู้นี้มีชื่อว่า Codelab นั้นเอง...





แหล่งข้อมูล : https://codelabs.developers.google.com/

โดย Google Codelabs จะนำเสนอวิธีการเรียนการสอนด้วยวิธีสร้างกิจกรรม Lab และจับเวลาการทำ Lab เพื่อสร้างเสริมประสบการณ์ ซึ่งภายใน Codelabs จะมีการสร้างกระบวนการเรียนรู้ไว้เป็น Lab เล็กๆ
โดยการเพิ่มเทคโนโลยีหรือ Feature ใหม่ๆ เข้าไป เช่น เทคโนโลยี Android Wear, Google Compute Engine, Project Tango และการใช้ Google APIs บน iOS





สำหรับใครที่สนใจอยากจะฝึกปรือฝีมือตัวเอง อยากจะลองเข้าไปทดสอบเทคโนโลยีต่างๆ ของ Google ก็สามารถติดตามได้ที่... https://codelabs.developers.google.com/io2016 นะครับ...




แหล่งข้อมูลอ้างอิง :
Google Developer Groups (GDGs) : Community สำหรับนักพัฒนาที่มีความสนใจในเทคโนโลยีของ Google เช่น Android, Chrome, Drive, Google Cloud platforms, Maps API, YouTube API
http://www.gdg.in.th/
http://www.gdg.in.th/2016/io2016bkk

วันพฤหัสบดีที่ 23 มิถุนายน พ.ศ. 2559

JSON : J2EE Development

-JSON (JavaScript Object Notation)
http://crunchify.com/what-is-json-javascript-object-notation/

-JSON Manipulation
http://crunchify.com/json-manipulation-in-java-examples/

-การเขียน JSON object ไปสู่ File ใน Java
http://crunchify.com/how-to-write-json-object-to-file-in-java/

-การอ่าน JSON Object จาก File ใน Java
http://crunchify.com/how-to-read-json-object-from-file-in-java/

-การแปลง JSON ไปเป็น HTML table ด้วย Converter Script
http://crunchify.com/crunchifyjsontohtml-js-json-to-html-table-converter-script/

-การ Iterate (looping) JSONArray ใน JavaScript
http://crunchify.com/how-to-iterate-through-jsonarray-in-javascript/

-การส่งค่า (Parse) JSONObject และ JSONArrays
http://crunchify.com/java-how-to-parse-jsonobject-and-jsonarrays/

-การ Merge/Concat Multiple JSONObjects ใน Java
http://crunchify.com/how-to-merge-concat-multiple-jsonobjects-in-java-best-way-to-combine-two-jsonobjects/

-JSON Processing API และ การใช้ Pretty Print JSON Output (Gson + Jackson)
http://crunchify.com/java-jsongenerator-json-processing-api-and-how-to-enable-pretty-print-json-output-gson-jackson/

-Escape Character Utility สำหรับ URL และ JSON data
http://crunchify.com/escape-character-utility-for-url-and-json-data-free-to-use-in-your-project/

วันพุธที่ 22 มิถุนายน พ.ศ. 2559

Java Method : J2EE Development


-การใช้งาน Java Method Hiding และ Overriding (Override Static Method ใน Java)
http://crunchify.com/java-method-hiding-and-overriding-override-static-method-in-java/

-ตัวอย่างและวิธีการใช้งาน Java Method Overriding
http://crunchify.com/java-method-overriding-examples-and-concepts-overriding-rules/

-การใช้ Primitive Types Instead ของ Wrapper Classes
http://crunchify.com/java-tip-wherever-possible-try-to-use-primitive-types-instead-of-wrapper-classes/

-การใช้งาน Reflection เพื่อเรียก Java Method ขณะ Runtime
http://crunchify.com/java-reflection-how-to-use-reflection-to-call-java-method-at-runtime/

อะไร คือ Abstract Class และ Abstract Method ใน Java? และเราจะมีวิธีใช้งานอย่างไร
http://crunchify.com/what-is-an-abstract-class-and-abstract-method-in-java-when-should-i-use-it/

-Instance Fields ของ Class Public
http://crunchify.com/java-tips-never-make-an-instance-fields-of-class-public/

-ความแตกต่างระหว่าง throw กับ throws ใน Java
http://crunchify.com/what-is-a-difference-between-throw-vs-throws-in-java/

Reference : http://chimera.labs.oreilly.com/books/1234000001805/ch06.html#learnjava3-CHP-6-SECT-6.2

Java HTTP : J2EE Development



-การส่งข้อความ URL ด้วย HTTP request GET/POST ใน Java
http://crunchify.com/java-url-example-getting-text-from-url/

-วิธีการรับ HTTP Response Header ใน Java
http://crunchify.com/simple-way-to-get-http-response-header-in-java/

-การส่ง HTTP Request และการรับ Response ใน Java
http://crunchify.com/how-to-send-http-request-and-capture-response-in-java/

-การรับ Entity ContentType ใน HttpClient
http://crunchify.com/java-how-to-get-entity-contenttype-in-httpclient/

-การ Ping Status ของ HTTP End Point ใน Java
http://crunchify.com/how-to-get-ping-status-of-any-http-end-point-in-java/

-การรับค่า Server IP Address และ Hostname ใน Java
http://crunchify.com/how-to-get-server-ip-address-and-hostname-in-java/

-การ Encode หรือ Decode URL String หรือ Form Parameter
http://crunchify.com/java-how-to-encode-or-decode-url-string-or-form-parameter/

-Embedded HTTP Jersey server ระหว่างที่ Java Application เริ่มทำงาน
http://crunchify.com/how-to-start-embedded-http-jersey-server-during-java-application-startup/

-Enable HTTPS หรือ SSL ของ Apache Tomcat Server – Port 8443
http://crunchify.com/step-by-step-guide-to-enable-https-or-ssl-correct-way-on-apache-tomcat-server-port-8443/

-Social Sharing URLs
http://crunchify.com/list-of-all-social-sharing-urls-for-handy-reference-social-media-sharing-buttons-without-javascript/

Java Collections : J2EE Development


-ความแตกต่างระหว่าง HashSet และ TreeSet ใน Java
http://crunchify.com/java-hashset-vs-treeset/

-อะไร คือ Java Collections Framework
http://crunchify.com/what-is-java-collections-framework-benefits-of-collections-framework/

-Java Collections (hashCode() และ equals())
http://crunchify.com/how-to-override-equals-and-hashcode-method-in-java/

-Java Synchronized Collections (java.util.Collections)
http://crunchify.com/java-synchronized-collections-examples-java-util-collections/

-วิธีการใช้ Map กับ Values (Map Interface)
http://crunchify.com/java-how-to-sort-a-map-on-the-values-the-map-interface-java-collections/

-เปรียบเทียบ Performance และความแตกต่างระหว่าง IdentityHashMap และ HashMap
http://crunchify.com/in-java-what-is-a-difference-between-identityhashmap-and-hashmap-performance-comparision/

-HashMap Vs. ConcurrentHashMap Vs. SynchronizedMap
http://crunchify.com/hashmap-vs-concurrenthashmap-vs-synchronizedmap-how-a-hashmap-can-be-synchronized-in-java/

-ตรวจสอบด้วย Key/Value ที่อยู่ภายใน Map ด้วย Java Hashmap (containsKey(Object key) และ containsValue(Object value))
http://crunchify.com/java-hashmap-containskeyobject-key-and-containsvalueobject-value-check-if-key-exists-in-map/