<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: uuunaja</title>
    <description>The latest articles on DEV Community by uuunaja (@uuunaja).</description>
    <link>https://dev.to/uuunaja</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F223667%2Fd2ed6991-761d-491d-941a-51173a58a800.gif</url>
      <title>DEV Community: uuunaja</title>
      <link>https://dev.to/uuunaja</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/uuunaja"/>
    <language>en</language>
    <item>
      <title>Semantic Commit Messages</title>
      <dc:creator>uuunaja</dc:creator>
      <pubDate>Tue, 06 Oct 2020 10:17:31 +0000</pubDate>
      <link>https://dev.to/ookbee/semantic-commit-messages-1ml9</link>
      <guid>https://dev.to/ookbee/semantic-commit-messages-1ml9</guid>
      <description>&lt;h1&gt;
  
  
  ปัญหาของ commit message
&lt;/h1&gt;

&lt;p&gt;โดยปกติแล้ว เวลาเรา commit code เข้า source control ถ้าไม่ได้มีการตกลงกันว่าจะใช้ commit message รูปแบบไหน ก็จะออกมาแนวตัวอย่างด้านล่าง&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;13be475b2 - 3 weeks ago : change tutorial banner
0559f19c6 - 3 weeks ago : Add hours ago for unlockerView
31f7893eb - 3 weeks ago : Fix barrier constraint
ba2a7b935 - 3 weeks ago : Update build version
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;จะเห็นได้ว่าอ่านได้ยากพอสมควร เนื่องจากแต่ละ message ไม่มีความชัดเจนว่าเป็นงานแบบไหน จึงควรมี format ที่เป็นตัวกลางสักตัวที่ทุกคนในทีมเวลา commit code จะได้เขียนเหมือนๆ กัน&lt;/p&gt;

&lt;h1&gt;
  
  
  Semantic Commit Messages
&lt;/h1&gt;

&lt;p&gt;ข้างล่างนี้จะเป็นรูปแบบของ message ที่ชื่อว่า &lt;a href="https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716"&gt;Semantic Commit Messages&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ความหมาย
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;feat:&lt;/strong&gt; feature ใหม่สำหรับผู้ใช้ เช่น เพิ่มให้ผู้ใช้เซฟรูปภาพลงเครื่องได้&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;fix:&lt;/strong&gt; แก้บั๊กต่างๆ ก็เขียนแปะไว้ว่าที่เราแก้ไปมีบั๊กเรื่องอะไรบ้าง&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;doc:&lt;/strong&gt; ใช้สำหรับอัพเดทพวก document ประกอบ ใน git เราสามารถใส่ document ของ project เราลงไปได้เช่นพวก README.md&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;style:&lt;/strong&gt; แก้พวก code style พวก spacebar ลืม semicolons หรือปรับ format ต่างของ code ที่ไม่กระทบกับการใช้งานของผู้ใช้&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;refactor:&lt;/strong&gt; refactor code รวมถึงเรื่องเปลี่ยนชื่อ function หรือตัวแปรต่างๆ&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;test:&lt;/strong&gt; ใช้เวลาแก้ code ในระบบ test ที่ไม่กระทบการใช้งานของผู้ใช้ เช่น เพิ่ม test หรือ refactor test&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;chore:&lt;/strong&gt; แก้ไข build script ต่างๆ ที่ไม่เกี่ยวกับตัว source code &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;โดยหลังจากเปลี่ยนแล้วไปใช้ format เดียวกันแล้วตาม comment ตัวอย่างข้างบนเราจะได้ออกมาตามด้านล่างนี้&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;13be475b2 - 3 weeks ago : feat: change tutorial banner
0559f19c6 - 3 weeks ago : style: Add hours ago for unlockerView
31f7893eb - 3 weeks ago : fix: barrier constraint
ba2a7b935 - 3 weeks ago : chore: Update build version
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  สรุป
&lt;/h3&gt;

&lt;p&gt;การที่เราใส่ commit message ให้เป็นไปตามรูปแบบที่ตกลงกันไว้ เวลาเราย้อนกลับมาดูหรือเวลา review code กัน มันช่วยให้ทีมสื่อสารกันได้ง่ายขึ้น จะมาหาอะไรเราก็สนใจที่หัวข้อก่อนได้เลย&lt;/p&gt;

</description>
      <category>git</category>
      <category>sourcecontrol</category>
    </item>
    <item>
      <title>Android In-App Update</title>
      <dc:creator>uuunaja</dc:creator>
      <pubDate>Thu, 08 Aug 2019 10:34:29 +0000</pubDate>
      <link>https://dev.to/ookbee/android-in-app-update-4fng</link>
      <guid>https://dev.to/ookbee/android-in-app-update-4fng</guid>
      <description>&lt;p&gt;สิ่งที่รอคอยมานาน เมื่อเดือนพฤษภา 2019 Google ได้ปล่อย API ให้ Developer สามารถทำ อัพเดทแอพ ในระหว่างการใช้งาน App ที่เรา Dev กันอยู่ได้ โดยวิธีการเรียก อัพเดท จะแบ่งเป็น 2 mode&lt;/p&gt;

&lt;p&gt;&lt;em&gt;FLEXIBLE — &lt;/em&gt;ใช้ในการเรียก Update แบบให้ User ตัดสินใจได้ว่าจะ อัพเดท หรือไม่ก็ได้&lt;/p&gt;

&lt;p&gt;&lt;em&gt;IMMEDIATE&lt;/em&gt; — ใช้ในกรณีที feature เรา impact กับการใช้งานมากๆ บังคับให้เค้า อัพเดท&lt;/p&gt;

&lt;p&gt;เราก็เลยลองเอามาใส่ใน App ดู Smooth มาก เสียอย่างเดียวคือ Call back ยังทำมาไม่ดีเราไม่รู้ว่า ไฟล์ Apk ที่ดาวน์โหลด มาแล้วมันเรียกมาจาก Flexible หรือ Immediate และตัว UI ตอนขอ อัพเดท ดาวน์โหลด ติดตั้ง มัน ปรับค่า ไม่ได้ ส่วนในหน้าของการแจ้งเตือนการ Update นั้น&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Lybm3eB6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ab_tUDB2Sh_xlo3HngZxMoQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Lybm3eB6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ab_tUDB2Sh_xlo3HngZxMoQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;มันบอกมาแค่นี้ น่าจะดึงรายละเอียดของเวอร์ชั่นนั้นๆมาให้ด้วย แต่ยังไงก็ช่างมันเถอะเราไปเพิ่ม UI ให้ ผู้ใช้ เองก็ได้ ก่อนติดตั้ง&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Wcaf8LPI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A9Qzoi6MGYwWHcMUIHe84ag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Wcaf8LPI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A9Qzoi6MGYwWHcMUIHe84ag.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ที่ดีคือโหมด &lt;em&gt;FLEXIBLE&lt;/em&gt; มันทำดาวน์โหลดให้ที่ Background และขึ้นไปแปะอยู่บน notification bar ให้เรียบร้อย User ก็เล่นๆ App ไปพอ Callback กลับมาเราค่อยแจ้งเตือน User ให้กด Install Win-Win ทั้ง Dev ผู้อยากส่ง Feature ใหม่ๆให้ และ User ก็ยังเล่น App ของเราไปได้อย่างสบายใจ หน้าตาตอน install ก็สวยงามอย่างด้านล่างนี้&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KDjbwneE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AvmL2v-pxzfPEjnuLJqWNLg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KDjbwneE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AvmL2v-pxzfPEjnuLJqWNLg.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;สรุป Feature น่าสนใจดีแต่เหมือนยังทำอะไรมากไม่ได้ เต็มที่ก็ชวนผู้ใช้ไปโหลดแอพแต่แค่นี้ก็เติมเต็มกับสิ่งที่เราต้องการแล้วหละ&lt;/p&gt;

&lt;p&gt;Reference Link&lt;br&gt;&lt;br&gt;
&lt;a href="https://developer.android.com/guide/app-bundle/in-app-updates"&gt;https://developer.android.com/guide/app-bundle/in-app-updates&lt;/a&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>joylada</category>
      <category>ookbee</category>
      <category>google</category>
    </item>
    <item>
      <title>Firebase Meeting at AIS DC Centre</title>
      <dc:creator>uuunaja</dc:creator>
      <pubDate>Sun, 07 Jul 2019 16:45:59 +0000</pubDate>
      <link>https://dev.to/ookbee/firebase-meeting-at-ais-dc-centre-10np</link>
      <guid>https://dev.to/ookbee/firebase-meeting-at-ais-dc-centre-10np</guid>
      <description>&lt;p&gt;วันนี้ได้ตั๋วฟรีจากที่ office ไปงาน meeting ของ Firebase สถานที่ ๆ จะไปอยู่ที่ห้าง The Emporium เผื่อเวลาเดินทางไว้ตั้งหนึ่งชั่วโมง แต่รถอย่างติด เอาเข้าจริงใช้เวลาขับไปตั้งชั่วโมงครึ่ง พอไปถึงเดินหลงอยู่พักหนึ่งเพราะหาที่จัดงานไม่เจอ เดินไปถาม Information เขาบอกว่าอยู่หลังโรงหนัง&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4Fa3546y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Atwc8RFISA4HpFKDaUxmuQQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4Fa3546y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Atwc8RFISA4HpFKDaUxmuQQ.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;เข้ามาถึงเห็นคนยังไม่เยอะเท่าไหร่ ที่นั่งยังว่างหลายที่อยู่ อ้าว งานยังไม่เริ่มนี่&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VIe5oda1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AepqM5nKU4j-RkZ7KyYSWQw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VIe5oda1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AepqM5nKU4j-RkZ7KyYSWQw.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Doung Stevenson
&lt;/h4&gt;

&lt;p&gt;เริ่มมาถึงจะฟังไม่ค่อยทันเขาพูดถึงอะไร แต่หลักๆเลยเขาเอา sample project มาให้ดู ซึ่งจะทำงานของ Firebase ได้ครบ Loop ตามนี้&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QKbDMLWv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ajj2r0A7TmNx57Ozbuq7jrQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QKbDMLWv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ajj2r0A7TmNx57Ozbuq7jrQ.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ซึ่งเราจะได้เห็นเขาใช้ cloud storage เก็บไฟล์ และ Firestore ในการทำ API สำหรับเก็บข้อมูลเหมือน Database รวมไปถึง Translate API แปลภาษาด้วย ซึ่งโค้ดที่เขาแสดงให้ดูคือ มันจะรับ Input ภาษาเข้าไปแล้วแปลออกมาหลาย ๆ ภาษา ทดสอบให้ดูมันเจ๋งมาก แปลออกมาทุกประโยคตรงหมดเลย เขาเลยหาอาสาสมัครในห้องมาลองใช้กับภาษาไทยดู คนแรกพูดว่า “ เมื่อไหร่ Remote Config จะมีให้ใช้บนเว็บบ้าง” ผลที่ได้คืออ่านตรงหมดยกเว้นคำว่า “Remote Config” ได้ผลออกมาเป็นคำอื่นแทน เสียดายถ่ายรูปเก็บไว้ไม่ทัน สาเหตุที่ผลออกมาไม่ตรง น่าจะเพราะคำนี้มันเป็นคำที่ไม่ได้ใช้ทั่วไปหละมั้ง มันเลยออกมาแปลกๆ&lt;/p&gt;

&lt;p&gt;คนที่สองเลยอยากลองบ้าง ขึ้นไปพูดใส่ไมค์ที่ใช้รับ Input ว่า “ไก่ จิก เด็ก ตาย เด็ก ตาย บน ปาก โอ่ง” ภาษาไทยตรงหมด ภาษาอังกฤษ output ออกมารู้สึกจะเป็นคำคาราโอเกะให้นะ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ndum80ww--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AVPcP_A7EsxmDDx71OOUSLg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ndum80ww--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AVPcP_A7EsxmDDx71OOUSLg.jpeg" alt=""&gt;&lt;/a&gt;เผื่อมีคนอยากได้เอาไปลองเล่นบ้าง&lt;/p&gt;

&lt;h4&gt;
  
  
  Aziz Yusupov
&lt;/h4&gt;

&lt;p&gt;วิทยากรคนต่อมาสอนเกี่ยวกับ Remote Config ใช้กับ A/B Testing ส่วนตัวชอบอยู่ สไลด์หนึ่งที่เขาพูดว่าการทำหรือไม่ทำ Remote Config มันมีข้อดีและข้อเสียยังไง เราเห็นด้วยนะที่ว่าการทำอะไรขึ้นมาอย่างหนึ่งมันต้องมีได้มีเสียอะไรบ้าง มันไม่มีอะไรได้มาฟรี ๆ หรอก อย่างน้อยที่สุดที่ต้องแลกกับการทำอะไรเพิ่มขึ้นมาคือ “เวลา” อย่างที่เขาบอก ทำ Remote Config ข้อดีของมันคือเรารู้ว่า user ต้องการอะไร แก้ไขข้อมูล app โดยไม่ต้องส่ง Store Review หรือจะเปิด Feature ที่อยู่ใน App เราเมื่อไหร่ก็ได้&lt;/p&gt;

&lt;p&gt;ส่วนข้อเสียคือ App มีขนาดใหญ่ขึ้น โค้ดเยอะขึ้น ดูแลยากขึ้น ซับซ้อนขึ้น บางทีหา บัคแสดงผลไม่เจออีก (อันนี้จากประสบการณ์จริง XD)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9pp77dgl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A58FHKUSBv-Qy1Lyk2Ny7Jg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9pp77dgl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A58FHKUSBv-Qy1Lyk2Ny7Jg.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1VmiJUN7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AbQcBiB02Fh8oOW-YNxmVLA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1VmiJUN7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AbQcBiB02Fh8oOW-YNxmVLA.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;เดี๋ยวจะออกนอกเรื่องไปไกล เข้าประเด็นเลยดีกว่า วิทยากรคนนี้เอา sample project มาโชว์การทำงานให้ดู หลัก ๆ คือแสดงคำว่า “สวัสดี” ตามภาษาของเครื่องนั้น ๆ แล้วก็เปิด Emulator มา 3 เครื่อง ตั้งค่า 3 ภาษา จบ….&lt;/p&gt;

&lt;h4&gt;
  
  
  Hiranya Jayathilaka
&lt;/h4&gt;

&lt;p&gt;คนนี้มาสอน Integrate Infrastructure ที่มีอยู่แล้วเข้ากับ Firebase เขายกตัวอย่างการทำ Login Authentication 2 Level และแบ่ง Permission ให้ user 2 ประเภทนี้&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CB7b5n1i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AouvCDGUJ2V5iEmOVzbAtrQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CB7b5n1i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AouvCDGUJ2V5iEmOVzbAtrQ.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;และแล้วก็ได้เจอความรู้ใหม่ ว่า Authen Token Firebase มันมี header, body กับ signature มาด้วย&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--p6ckFnxF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AS6yUmLuW68yhQqn-DimdVg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p6ckFnxF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AS6yUmLuW68yhQqn-DimdVg.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;และที่ชอบสุดในงานเลย คืออันนี้สอนการตั้ง rule ของ Firebase ซึ่งเราไปหาอ่าน เอกสารก็มีน้อยมากไม่มีบอกแพทเทิร์นที่ชัดเจน ปัจจุบันก็ตั้งมั่ว ๆ แล้วลองเทสต์ดู&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--B856zyDE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AsygC_0P5IKprAI5nl8pgnQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B856zyDE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AsygC_0P5IKprAI5nl8pgnQ.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JCLqqST9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A9gxPg_foNgGnJOQHvpujlw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JCLqqST9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A9gxPg_foNgGnJOQHvpujlw.jpeg" alt=""&gt;&lt;/a&gt;ความลับไขกระจ่างแล้ว&lt;/p&gt;

&lt;p&gt;ส่วน sample project เขาก็โชว์ login และไปโพสต์ Twitter ผลจะได้หรือไม่ได้ขึั้นอยู่กับเลเวลของ user&lt;/p&gt;

&lt;p&gt;สรุป งานนี้ที่มาสำหรับเราได้ความรู้ใหม่ๆเรื่อง Firebase rules อย่างเดียว แต่สำหรับคนอื่นๆอาจจะได้อะไรมากกว่านี้ เผื่อใครสนใจ Firebase เขาก็มีจัดงาน Meeting อยู่เรื่อยๆไม่แพ้ Android&lt;/p&gt;

</description>
      <category>firebase</category>
    </item>
    <item>
      <title>Up skill Gradle Mastery &amp; Upgrade Speed Build</title>
      <dc:creator>uuunaja</dc:creator>
      <pubDate>Tue, 29 May 2018 16:32:38 +0000</pubDate>
      <link>https://dev.to/ookbee/up-skill-gradle-mastery-upgrade-speed-build-dmd</link>
      <guid>https://dev.to/ookbee/up-skill-gradle-mastery-upgrade-speed-build-dmd</guid>
      <description>&lt;p&gt;ระหว่างทำงานมาหลาย ๆ ปีนี้ feature เราก็งอกเงยขึ้นเรื่อย ๆ เป็นดอกเห็ด ทำให้ การ build code กินเวลานาน ยิ่งมีใครดีลกับพวกโฆษณาเข้ามาด้วยนี้ library ครอบจักรวาล หรือเอาจริง ๆ implement google-playservice มันก็เริ่มกินเวลา build นานขึ้นแล้ว จากกดปุ๊บมาปั๊บ เดี๋ยวนี้กดไปรอ 4 นาทีบ้างหรือหนักหน่อยก็ 7 นาที ตามรูป&lt;/p&gt;

&lt;p&gt;// insert image so long builing&lt;/p&gt;

&lt;p&gt;ล้อเล่นนะ มันบัคไปแล้วแต่เลขยังวิ่งอยู่เฉย ๆ&lt;/p&gt;

&lt;p&gt;ปัญหา build time งอกแบบนี้ เป็นการเผา resource ไปโดยเปล่าๆ เราเลยหาวิธีแก้ไขมันอยู่พักใหญ่ ๆ ล้มลุกคลุกคลานและเผาเวลาของเราไปพักนึงแล้ว เลยได้ข้อสรุปประมาณนี้ สิ่งที่ช่วยให้ build ได้เร็วขึ้นหลัก ๆ เลยคือ&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;1.Remove Unused Resource&lt;/p&gt;

&lt;p&gt;2.Fix Min SDK, Fix Resource and Disable multiple CPU build&lt;/p&gt;

&lt;p&gt;3.Cache Gradle&lt;/p&gt;

&lt;p&gt;4.Instant Run&lt;/p&gt;

&lt;p&gt;5.Fix Warning Comment and Remove Unused Import Class&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;#Unused Resource&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Unused resource ลบ ๆ มันไปบ้างไฟล์ไหนไม่จำเป็นก็ลบมันออกไป APK size มหึมา install ทีเสียเวลาชิบ ใครไม่ใช้อะไรก็ลบ ๆ ทิ้งมันไปเถอะ เตือนนิด ก่อนลบคุยกับเพื่อนก่อนนะ เดี๋ยวไปลบไฟล์ที่เตรียมจะเอาไปทำ feature ไม่รู้ด้วย&lt;/p&gt;

&lt;p&gt;หรือให้ Android Studio ช่วยก็ได้ Refector -&amp;gt; Remove Unused Resource&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;#&lt;/strong&gt; Fix Min SDK, Fix Resource and Disable Multiple CPU Build
&lt;/h4&gt;

&lt;p&gt;อันนี้ทีเด็ดเลยใส่เข้าไปที speed พุ่งเพราะมันทำให้ไม่ต้องไปกวาดหา SDK เก่า ๆ มา build ให้แอพเรา แต่ระวังมีปัญหาเรื่อง method บางตัวมันใช้ได้แค่เวอร์ชันใหม่นะดูดี ๆ แนะนำให้เขียน API พื้น ๆอย่าเล่นท่าพิศดารเยอะ อยากเติมอะไรค่อยมาลงตอน feature เสร็จ “แล้วไงต้องมานั่งแก้ไปแก้มาเหรอ เวลาจะ release ทีต้องมาแก้กลับที ถ้าลืมแก้นี่ งานงอกนะ” ใจเย็น ๆ ได้ใช้ Skill Gradle Mastery แล้ว คืองี้ มันสามารถตั้งได้ว่าเราจะ build productFlavors อะไรแบบไหน&lt;/p&gt;

&lt;p&gt;debugFlavor, release, alpha, internal หรือจะตั้งชื่อเป็น for you จีบ tester ก็ได้นะ&lt;/p&gt;

&lt;p&gt;ตัวอย่าง&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;debugFlavor{
 minSdkVersion 27
 applicationId 'com.ookbee.joyapp.android'
 targetSdkVersion 27
 resConfigs (“en”, “xxhdpi”)
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;เอานี่ไปใส่ไว้ใน buildTypes{} ที่ Gradle ของ App ตั้ง min SDK ให้มันเท่ากับเครื่องที่เราจะ build และตั้งให้มัน build ที่ en กับ DPI xxhdpi อย่างเดียว หลัก ๆ มีเท่านี้ก็เร็วและ&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;config อื่น ๆ search หากันเอาเองมีคนสอนเต็มเลย&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;แต่ปัญหายังไม่หมดไป คนแบ่ง code ออกเป็น Module ProductFlavor มันก็จะเยอะตาม หรือคนทำหลาย ๆ ProductFlavor ในเน็ตก็มีคนบอกมันทำให้ build ช้า&lt;/p&gt;

&lt;p&gt;ไม่เป็นไรเรามีอีกทาง ไม่ต้องใช้ Product Flavor ให้แยก BuildTypes ออกจากกันแล้วเขียน variable ของ Gradle แทนแบบนี้&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def computeMinSdkVersionGloble() {
 return project.hasProperty('devBuild') ? project.ext.currentMinSDK : 16
}

allprojects {
 project.ext{
 currentMinSDK = 24
 flavorGlobleMinSDK = computeMinSdkVersionGloble()
 }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;เอาไปสร้างใน build.gradle ของตัว Project&lt;/p&gt;

&lt;p&gt;จากโค้ดเราสร้าง function ชื่อ computeMinSdkVersionGloble() โดยที่จะอิงกับ property ตัว ‘devBuild’ ซึ่งถ้ามันมีตัวนี้จะเป็น build แบบ debug นั่นเองถ้าเป็น dev จะให้ property flavorGlobleMinSDK เป็น version 24 ถ้าไม่ใช่จะให้เป็น 16 เลขในที่นี้เท่ากับตัวที่จะปล่อยให้ user ของแอพเราใช้หนะ&lt;/p&gt;

&lt;p&gt;ส่วนของตัว app-&amp;gt; build.gradle ให้เขียนแบบนี้&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;defaultConfig {
 ...
 minSdkVersion project.ext.flavorGlobleMinSDK
 targetSdkVersion 27
 ...
 }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;คือตัว Gradle มันสามารถสร้างตัวแปลหรือเขียน function ลงไปได้ หรืออยากจะเขียน class ลงไปเลยก็ได้นะ ตอนแรกเราว่าจะเขียนให้มันส่ง mail มาหาเราเวลามัน build ตัว relaese เสร็จ แต่ยังไม่สำเร็จ ฮา&lt;/p&gt;

&lt;h4&gt;
  
  
  #Cache Gradle
&lt;/h4&gt;

&lt;p&gt;ใส่นี่ไว้ใน gradle.propertis ของ project&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;org.gradle.deamon=true
org.gradle.parallel=true
org.gradle.caching=true
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;เช่นเดิมส่วนอื่น ๆ ไปหาอ่านเอา blog อื่นๆ มีเขียนให้ค่อนข้างเยอะ&lt;/p&gt;

&lt;h4&gt;
  
  
  #Instant Run
&lt;/h4&gt;

&lt;p&gt;เปิด Instant Run อันนี้ช่วยได้เยอะ version หลัง ๆ เค้าทำมาดีแล้วหละ&lt;/p&gt;

&lt;h4&gt;
  
  
  #Fix Warning Comment and Remove Unused Import Class
&lt;/h4&gt;

&lt;p&gt;Comment or Unused Function เผื่ออยากใช้ในอนาคต หน้าที่พวกนี้เป็นของ Source Control เลิก comment โค้ดทิ้งไว้ได้แล้ว หรือพวก Class import ที่ไม่ได้ใช้ลบ ๆ มันไปเถอะ compiler จะได้เลิกฟ้อง warning สักที สงสารมันไม่ต้องคอยมาปริ้น Log แจ้งเรา&lt;/p&gt;

&lt;p&gt;หรือคลิกขวาที่ Project -&amp;gt; Optimize Imports&lt;/p&gt;

&lt;p&gt;ก่อนจบ Run command ข้างล่างนี้ ดูก่อนก็ได้ จะรู้ว่า task ไหนมันทำงานนาน&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./gradlew assembleDebug --profile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;เราว่าปัญหานี้มันค่อนข้างใหญ่นะ สมมุติเราทำคนเดียวเลยลดเวลา build จาก 4 นาทีลงไปเหลือ 1 นาทีได้คุณกด build ไป 10 ครั้ง คุณประหยัดเวลาไปแล้ว 30 นาทีนะ ยิ่งพอคุณมีทีมงานอย่างในทีมเราตอนนี้มี 4 คน ประหยัดเวลาในการ build ลงไปเยอะ build ทีนึง อาจเอาเวลา build ไปนั่งคิด logic ต่อไปที่จะเขียนเลยก็ได้นะ แต่ก่อนก็แนะนำให้คนในทีมทำแบบนั้น แต่เอาเข้าจริงการทำแบบนี้อาจทำให้เราลืมสิ่งที่เราจะทดสอบใน build ก่อนหน้านี้ ซึ่งสมัยรุ่น ๆไฟแรงไม่เคยมีปัญหาหลงลืมเลย พอเริ่มมีอายุเยอะขึ้นมันกลับลืม ซึ่งทำให้เราคิดได้ว่ามีโอกาสที่คนอื่นจะเป็นแบบนี้เหมือนกันแหละ ถึงแม้ตั้งใจทำงานแค่ไหนก็ตาม เดี๋ยวนี้เลยต้องหาหนังสือมาจดบ้างแล้ว สุดท้ายมันก็เจองานที่แก้ไม่ได้ มาเจองานจัดแบบ UI มันอาจจะต้องรันบ่อย ๆ เปิดหลายเครื่องหลายจอมาเช็ค การ build นาน ๆ ไม่ใช่ผลดีแน่นอน&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;สุดท้ายหาเวลามา optimize project ที่เรารักกันเถอะ&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;เอ๊ะ แต่บางคนบอกไม่มีเวลา แค่ทำงาทำ feature ก็ไม่ทันแล้ว ใช่ครับ หน้าที่ Developer สำหรับผม ผมคิดว่าคุณคิดถูกแล้ว ผมก็นั่งทำงานคนเดียวมาก่อน การ optimize build ไม่ได้ช่วยให้บริษัทมีกำไรมากขึ้นถ้าในทีมมีคุณคนเดียว build feature กับแก้บัคก็พอแล้วครับ แต่อย่าลืมการบริหาร Resource ในการทำ Program เป็นหน้าที่ของ Developer อย่างเรา ๆ นี่แหละ เพราะงั้นอย่างน้อยๆทำข้อ 1 และข้อ 2 สักหน่อยก็ดีนะ&lt;/p&gt;

</description>
      <category>developer</category>
      <category>androidstudio</category>
      <category>config</category>
      <category>android</category>
    </item>
    <item>
      <title>Android Conference BKK 2018</title>
      <dc:creator>uuunaja</dc:creator>
      <pubDate>Mon, 09 Apr 2018 16:20:29 +0000</pubDate>
      <link>https://dev.to/ookbee/android-conference-bkk-2018-5943</link>
      <guid>https://dev.to/ookbee/android-conference-bkk-2018-5943</guid>
      <description>&lt;p&gt;ได้ตั๋ว VIP มาจากที่ Office ดีใจตอนแรกเห็นราคาว่าจะไม่ไปแต่ได้ตั๋วฟรีมาจะรออะไรอยู่หละไปสิ&lt;/p&gt;

&lt;p&gt;เรามาไม่ทัน register มาถึงคุณโอ๋ก็เริ่มพูดไปประมาณ 10 นาทีแล้ว&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Welcome Remarks : Wittaya Assawasathian&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;จำไม่ค่อยได้สมองยังไม่สต๊าทขาดกาแฟในเส้นเลือดที่พอจดและจำไว้ได้ เค้าเล่าว่า ประเทศไทยคนใช้เวลาอยู่บน Internet เป็นลำดับต้นๆเทียบกับประเทศอื่น และประเทศไทยได้รับเงินสนับสนุน startup เยอะมากๆ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W4gNA264--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AHp8NODM665AB_ifsa5y5Ng.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W4gNA264--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AHp8NODM665AB_ifsa5y5Ng.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kZ8pGACs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A-L1J2vY--XuG_iTkYUReMw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kZ8pGACs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A-L1J2vY--XuG_iTkYUReMw.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Opening Remarks : Bok Thye Yeow
&lt;/h4&gt;

&lt;p&gt;เค้าเล่าว่า Android จะไปอยู่ในทุกๆที่&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Android most inside every where&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;เราว่ามันก็จริงนะ ปัจจุบัน มือถือ Google home TV นาฬิกา ยิ่งมา IOT เข้ามาอีก เราจะครองโลกแล้วเว้ย&lt;/p&gt;

&lt;p&gt;ต่อมาเค้าก็เปิดประวัติ Android ชื่อรุ่นต่างๆที่ผ่านมา&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q-jSAa2U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2APxQYdRh5EX6cVf6YrcoDww.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q-jSAa2U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2APxQYdRh5EX6cVf6YrcoDww.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ปีนี้ Android มีตัวย่อเป็น Android P เราว่า Pancake&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--d-r8G2Ij--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ASguUIkVYws5ZkTrnHG_Ocw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d-r8G2Ij--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ASguUIkVYws5ZkTrnHG_Ocw.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YgpRQ3Pu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ArkMTtkd6pkVYLCvkPzsl2A.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YgpRQ3Pu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ArkMTtkd6pkVYLCvkPzsl2A.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Android Thing (IOT) ที่เริ่มอะไรมากขึ้น ใช้ Raspberry Pi 3 ในการ Dev IOT google ตอนนี้ก็มี Cloud support ด้วยน่าลองเล่นมาก&lt;/li&gt;
&lt;li&gt;Android Go : platform ใหม่เป็น Android version minimal&lt;/li&gt;
&lt;li&gt;AR Core 1.0 มี platform ให้บิ้ว AR ได้แล้ว เราจะบิ้ว AR โดยไม่ต้องเพิ่ง Unity แล้วสินะ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---OOoAqYj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AhkqAbmG9DvlehSQhkg48IA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---OOoAqYj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AhkqAbmG9DvlehSQhkg48IA.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flutter : UI mobile framwork สำหรับสร้าง UI App ทั้ง Android และ IOS Dev สายตกแต่ง UI ได้ลองอะไรใหม่ๆแล้วนะ&lt;/li&gt;
&lt;li&gt;Agency Program ทำไรได้บ้าง ดูตามภาพเลย&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---OOoAqYj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AhkqAbmG9DvlehSQhkg48IA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---OOoAqYj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AhkqAbmG9DvlehSQhkg48IA.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  A Tale of Two Companies : Dr Thadpong Pongthawornkamol from KBTG
&lt;/h4&gt;

&lt;p&gt;มาถึงแชร์ journal ที่เค้าผ่านมาว่าเค้าประสบความสำเร็จยังไงบ้าง เค้าศึกษา Android มานานตั้งแต่ Android รุ่นแรกๆแล้วก็โชว์รูปไอ้เครื่อง Android ที่มัน slide ได้มี keyboard หลายคนอาจยังไม่รู้ว่าแต่ก่อน Android มี keyboard แยกนะจ๊ะ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VWw1voBC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/376/1%2AMdYVG13GUxm87BPMLFEmyA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VWw1voBC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/376/1%2AMdYVG13GUxm87BPMLFEmyA.jpeg" alt=""&gt;&lt;/a&gt;ยืมภาพมาจาก Google&lt;/p&gt;

&lt;p&gt;ต่อๆ แล้วเค้าก็ Present ว่า KBTG ทำอะไร มีทีมทำแอพนู้นนี่นั่น รับพนักงานหลายตำแหน่ง แล้วยังบอกอีกด้วยเค้าทำงานร่วมกับ Google มา 5 ปีแล้วแล้วก็เปิดภาพเปรียบเทียบ Google กับ KBTG ให้ดู&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DahM-Cvw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AoD5X3vVj1MZGaLtTudCR0A.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DahM-Cvw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AoD5X3vVj1MZGaLtTudCR0A.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--t4-PeIuk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AXNpSPUMtQ20S2l49B933pQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--t4-PeIuk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AXNpSPUMtQ20S2l49B933pQ.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ct3n46p1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AhW2dbSmtzkgV8zJa63WhZQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ct3n46p1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AhW2dbSmtzkgV8zJa63WhZQ.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gsZRUAxA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AcrI_wqjBb6LwfpsIrB3AzQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gsZRUAxA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AcrI_wqjBb6LwfpsIrB3AzQ.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IcdYDq81--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AzKBnUIgDBeIehGd4bZwlQg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IcdYDq81--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AzKBnUIgDBeIehGd4bZwlQg.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Build your app faster and smaller than ever : Somkiat Wongkitwattana (Ake)&amp;amp; Jirawat Karanwittayakarn (Tee)
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Faster than โดย คุณเอก&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Custom log color เค้าแนะนำให้ตั้งสี log เวลาดู log มันจะดูง่ายขึ้น&lt;/li&gt;
&lt;li&gt;Using template own template แนะนำให้ตั้ง short key เวลาจะพิมพ์อย่าง Toast ให้มันขึ้น complete มาแล้วแล้วเราพิมพ์ใส่แต่ value อย่าง message แต่โดยส่วนตัวเราชอบพิมพ์โค้ดอยู่แล้วนะ อันนี้เราเฉยๆ&lt;/li&gt;
&lt;li&gt;On the fly open auto import เปิด Auto import ไว้มันจะเอา class ที่จำเป็นเข้ามาให้และเอาออกถ้าเราไม่ใช้ (แต่มันจะฉลาดแค่เฉพาะใน package เดียวกัน)&lt;/li&gt;
&lt;li&gt;Use Parcelable instade Serilize (kotlin have parcel)&lt;/li&gt;
&lt;li&gt;Use Tab หลายคนอาจยังไม่รู้เราสามารถ autocomplete โดยกด Tab ทีนึง&lt;/li&gt;
&lt;li&gt;Use style for finish design quickly : ใช้ Style เวลามีแก้ UI เราจะแก้ได้เร็วขึ้น&lt;/li&gt;
&lt;li&gt;Update gradle : พูดทุกครั้งที่เจอ 555 เอากราฟมาให้ดูทุกทีว่าอัพล่าสุดแล้วมันจะบิ้วเร็วขึ้น ล่าสุดนี่กลับมาอัพดูบ้าง พังเลยจ้า lib Appodeal มีปัญหาไม่แน่ใจว่าเกิดจากอะไร และเจอปัญหาดู error ยาก ต้องไปกดเองบ้างคนอาจจะชอบก็ได้แต่เราไม่ชิน&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AnotzSoN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ahzn08bZ2Nb5pktIfxF5u9w.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AnotzSoN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ahzn08bZ2Nb5pktIfxF5u9w.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  เสริมได้มาจากน้องที่ออฟฟิศ กด fn+f2 ที่คราสที่มัน error มันจะ jump ไปจุดที่มัน error ให้เลย window ไปหาเอาเองนะ :D
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Pq5h8YrS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A3EMwtrTSW2D5i796GfmeXg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Pq5h8YrS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A3EMwtrTSW2D5i796GfmeXg.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oDpK3GRl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Arjzio5q4WPH0KLWEIc1k6A.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oDpK3GRl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Arjzio5q4WPH0KLWEIc1k6A.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Smaller APK โดย คุณตี๋&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;ปรกตินักพัฒนาทั้งส่วนใหญ่ก็ใช้มือถือ mid &amp;gt; high จะเรียกตัวท๊อปก็ได้นะ เราจะไม่รู้สึกหรอกว่าขนาดพื้นที่ของ App มีค่ากับ User มากแค่ไหนเค้าเลยมาสอนการลดขนาด App ให้&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use APK analytic&lt;/li&gt;
&lt;li&gt;Remove unused resource&lt;/li&gt;
&lt;li&gt;Adjust dependencies you need เอาไอพวก 3rd party ที่ไม่ใช้ ออกนั่นแหละ&lt;/li&gt;
&lt;li&gt;Build app multiple screen densities exclude ldpi and mdpi&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M-wmi7nq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AjuVVJ-mc2eNXd0mimv0PJw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M-wmi7nq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AjuVVJ-mc2eNXd0mimv0PJw.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build config language of use&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4QkG3dhH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AQilpKTqVG-5LvscxdMIciA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4QkG3dhH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AQilpKTqVG-5LvscxdMIciA.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ShrikResource (not sure I try this it crash on some device)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bP_6XJVS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ApPEjPbjmRFmIQlX92YiVkw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bP_6XJVS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ApPEjPbjmRFmIQlX92YiVkw.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use Webp instade PNG&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kLJvzv1c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AFQbexk1JM6KZZ3VCC17Yfg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kLJvzv1c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AFQbexk1JM6KZZ3VCC17Yfg.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using D8&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KWaQ4o6U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AQxF40ZeTIQNRI1D52C5q9Q.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KWaQ4o6U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AQxF40ZeTIQNRI1D52C5q9Q.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;เอาจริงๆสุดท้ายเราก็ทำได้ระดับนึงแหละ แต่ถ้าอยากแก้ปัญหาให้ตรงจุด อยากให้ประสบการณ์ User ดี เราควรออก App Light อีกเวอร์ชั่นจะตอบโจทย์สุด จากประสบการณ์เวลามีคนสั่งทำแอพเค้ามีแต่จะเพิ่ม feature ไปเรื่อยยังไงขนาดมันก็ไม่ลง แต่อยากว่าเวลาจะทำอะไรเพิ่มอย่างนึงมันคุ้มมั้ยที่จะทำก็ต้อง weight cost weight time ดีๆ&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;หัวข้ออื่นหลังๆเรารู้สึกเฉยๆและไม่ตื่นเต้นอะไร&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Cloud Firestore Workshop : Kalyan Reddy from Google
&lt;/h4&gt;

&lt;p&gt;สอน setup Firebase🔥 เค้าเปิดหน้า Firebase แล้วสอน setup ตาม Document T^T เสียเวลาชีวิตเราสุดๆ&lt;/p&gt;

&lt;h4&gt;
  
  
  Exoplayer : Monthira Chayabanjonglerd from Fungjai
&lt;/h4&gt;

&lt;p&gt;สอน exo เบื้องต้น ก็ดีนะ exo มันค่อนข้างซับซ้อนสำหรับคนเริ่ม Dev ใหม่ๆ ส่วนตัวเคยเล่นกับ lib ตัวนี้เมื่อ 2–3 ปีที่แล้ว แล้วงานปัจจุบันก็ไม่ค่อยมีอะไรเกี่ยวกับ player ก็เลยไม่ได้จดอะไรมา&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Iqz2sjuC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AcKy8xhJJe4z0ZXb8VKWq1A.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Iqz2sjuC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AcKy8xhJJe4z0ZXb8VKWq1A.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Building Google Assistant App : Warat Wongmaneekit
&lt;/h4&gt;

&lt;p&gt;มาชวน Dev Google Assistance อยากให้&lt;/p&gt;

&lt;p&gt;Support payment in future&lt;/p&gt;

&lt;p&gt;Action Google&lt;/p&gt;

&lt;h4&gt;
  
  
  Connect your Android Things with Firebase : Doug Stevenson
&lt;/h4&gt;

&lt;p&gt;เขามาอธิบายการทำงานของ Android Thing และแนะนำการอัพโหลดไฟล์ ขึ้น Cloud&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s6AX5qzu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AMFWgrSPycbRNMe2C0D17vA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s6AX5qzu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AMFWgrSPycbRNMe2C0D17vA.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Android CI with Kubernetes : Anton Malinskiy Agoda
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iJY7UOka--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AREFDSSjz5RipJzpt8RFDTg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iJY7UOka--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AREFDSSjz5RipJzpt8RFDTg.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ไม่ได้ฟัง ฟังอาจารย์ใหญ่เล่า pattern Programming แทน สอน VIPER อาจารย์เล่าว่าทีม Agoda ใช้ VIPER pattern ในการ Dev ทีม Dev เค้าค่อนข้างใหญ่ เบาลงมาหน่อยปัจจุบันใช้มากกว่า MVC,MVP ก็ใช้ MVVM แทนส่วนตัวอยากลองอะไรใหม่ๆอยู่บ้างแต่ในทีม Dev อยู่ 2 คนแค่จะทำ feature ก็หมดเวลาแล้วนี่ยังไม่มีเวลา cover บัคกับทำ unit test เลย&lt;/p&gt;

&lt;h4&gt;
  
  
  Homo Kotlin: A brief History of Kotlin in Agoda : Inaki Villar Agoda / GDE Android
&lt;/h4&gt;

&lt;p&gt;Verachad Wongsawangtham Kotlin Thailand Community&lt;br&gt;&lt;br&gt;
Tipatai Puthanukunkit Kotlin Thailand Community&lt;/p&gt;

&lt;p&gt;Kotlin Homo เล่าประวัติศาสตร์มนุษย์ เล่าเป็น Theme การวิวัฒนาการของมนุษย์ ร่วมไปกับ Kotlin&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vEG__XfP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A7hyQkBLN6dcW1BfQ6cq8_Q.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vEG__XfP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A7hyQkBLN6dcW1BfQ6cq8_Q.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PHjdD2dI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AX1BFqy2udnzGG7-_sIsDjQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PHjdD2dI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AX1BFqy2udnzGG7-_sIsDjQ.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;High order function ความดีของ Kotlin ปรกติ Java เราใส่ Parameter หรือ return ได้แต่ Object หรือ Primitive Data ใช่มะ แต่ Kotlin เราสามารถ return เป็น function ได้หรือโยน function เป็น Parameter ได้&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EGsu_R_J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A4MdljjcSgk8zGMmMOZWjOQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EGsu_R_J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A4MdljjcSgk8zGMmMOZWjOQ.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;แล้วเค้าก็เปรียบเทียบ code java กับ kotlinเรื่อยๆ&lt;/p&gt;

&lt;h4&gt;
  
  
  Tensor Flow for mobile poets : Enrique Manas GDE Android
&lt;/h4&gt;

&lt;p&gt;อันนี้ลืมเก็บอะไรมา ลืมไม่ไหวตื่นเช้าไป&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6P9-nxXT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AKRw1VYC-xuRwGVv8FLe-GQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6P9-nxXT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AKRw1VYC-xuRwGVv8FLe-GQ.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>google</category>
      <category>android</category>
      <category>androidbkk2018</category>
    </item>
    <item>
      <title>Building App for Global Audiences at Hubba-to</title>
      <dc:creator>uuunaja</dc:creator>
      <pubDate>Sun, 21 Jan 2018 16:26:50 +0000</pubDate>
      <link>https://dev.to/ookbee/building-app-for-global-audiences-at-hubba-to-2ah9</link>
      <guid>https://dev.to/ookbee/building-app-for-global-audiences-at-hubba-to-2ah9</guid>
      <description>&lt;p&gt;ไปงานสัมมนา private meeting มารอบนี้ไปฟังเกี่ยวกับ Grow to Global บริษัทเราได้ invite มาจากคนเวียดนามของ Appota Agenda แค่ invite ก็น่าไปแล้ว ต้อนรับ meeting แรกของปี&lt;/p&gt;

&lt;p&gt;Agenda:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;13:00:&lt;/strong&gt; Check-in&lt;br&gt;&lt;br&gt;
&lt;strong&gt;13:30:&lt;/strong&gt; Kick-off, Welcome speech&lt;br&gt;&lt;br&gt;
&lt;strong&gt;14:00:&lt;/strong&gt; Go Global with AdMob (Aksara Om Sumethkul — Google)&lt;br&gt;&lt;br&gt;
&lt;strong&gt;14:30:&lt;/strong&gt; Go Global from Local Insights (Wittaya Assawasathain — GDG Thailand)&lt;br&gt;&lt;br&gt;
&lt;strong&gt;15:00:&lt;/strong&gt; App Ads Revenue Optimization using Firebase Analytics (Loan Nguyen — AppotaX)&lt;br&gt;&lt;br&gt;
&lt;strong&gt;15:20:&lt;/strong&gt; Tea Break and Networking&lt;br&gt;&lt;br&gt;
&lt;strong&gt;15:45:&lt;/strong&gt; Panel Discussion&lt;/p&gt;

&lt;p&gt;มาถึง Habito บ่ายโมงแต่เข้าไปจริงบ่ายโมงครึ่งเนื่องจากเค้าเลื่อนเวลา&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Speaker คนแรกเป็น CEO ชื่อ Tran Quoc Toan&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;มาเล่าเกี่ยวกับบริษัทเค้าให้ฟัง ว่าเปิดมากี่ปีประวัติที่เป็นยังไงทำอะไรมาบ้าง โดยสรุปแล้วทาง Appota มีบริษัทย่อยทำเกี่ยวกับ Ads , Game และ Payment เค้าเล่าเรื่องสำคัญมาอย่างนึงที่เวียดนามคนมี credit card ยังน้อยมากและการที่เราจะทำให้ App เราไป Globle ได้คุณ Tran Quoc Toan ได้พูดว่า&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;if you have go to the new marker the user have new behavior and new culture&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Speaker : Om Channel Partner Manager from Google Thailand&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;เค้าเล่าว่า Google จับมือกับ Appota เริ่มที่เวียดนามได้ 2 ปีแล้ว&lt;/li&gt;
&lt;li&gt;จากตลาดทั่วโลก User ใช้เวลาอยู่กับ App มากขึ้นเรื่อยๆ&lt;/li&gt;
&lt;li&gt;Revenue ที่จีน,อินเดีย,บราซิล ให้ค่าตอบแทนดีตามลำดับ&lt;/li&gt;
&lt;li&gt;Time คนใช้เวลาในการเล่น App มากที่สุดคือที่ Brazil&lt;/li&gt;
&lt;li&gt;Revenue จาก Ads Growth ขึ้นทุกปี&lt;/li&gt;
&lt;li&gt;ใน Admob มีฟังค์ชั่นไว้ใช้ Promote App ฟรีโดยที่เราไม่เสียค่าใช้จ่าย แต่ต้องพึ่งแต้มบุญของ App เก่า&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;เค้าว่ากราฟ public ให้ไม่ได้ ตัวเลขเราไปหาดูกันเอาเองนะ แต่เราก็สงสัยเลยลองกดเข้าดู Stat App โง่ๆของเรา&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A4xAXJ26q2-8w7nNHTOJWkw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A4xAXJ26q2-8w7nNHTOJWkw.jpeg"&gt;&lt;/a&gt;มีคนโหลดไปแถบๆนั้นด้วย&lt;/p&gt;

&lt;h4&gt;
  
  
  *&lt;em&gt;Speaker *&lt;/em&gt; : Oo Wittaya from GDG Thailand
&lt;/h4&gt;

&lt;p&gt;ก่อนเข้าเรื่องมีแนะนำเวป website ตัวเองเผื่อพวก Dev หรือ Graphic อยากหางาน &lt;a href="http://dev.wi.th" rel="noopener noreferrer"&gt;dev.wi.th&lt;/a&gt; ของ บริษัทเราก็เปิดรับคนอยู่นะ &lt;a href="https://www.ookbee.com/jobs" rel="noopener noreferrer"&gt;Ookbee Job&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;แนะนำ Certification Google Developer / Udacity ปีนี้เราจะสอยมาให้ได้&lt;/li&gt;
&lt;li&gt;South East Asia มี User ใหม่เกิดอยู่ตลอด&lt;/li&gt;
&lt;li&gt;ประเทศไทยมีตัวเลขการท่องเที่ยวเป็นอันดับ 3 ของโลก แบบนี้ทำแอพเก่ียวกับการท่องเที่ยวก็ดูน่าสนใจดีนะ&lt;/li&gt;
&lt;li&gt;Google Assistant สามารถ implement ลงใน App ได้แล้วในไทย ยังไม่ค่อยมี dev ทำ&lt;/li&gt;
&lt;li&gt;Google มี API สำหรับทำ chat bot ให้เล่นลองเข้าไปที่ &lt;a href="https://api.ai" rel="noopener noreferrer"&gt;Api.ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;แนะนำเรื่อง Localize ภาษา Ad Promotion Campaign ต่างๆความชอบตัวอักษรของ font ไม่เหมือนกันในแต่ละประเทศ&lt;/li&gt;
&lt;li&gt;แนะนำให้ทำ Test version ก่อน Launch จริง&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Speaker : Lala Project Manager from Adsota&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;เล่าให้ฟังว่าทีมเค้า Strong ที่เวียดนามและ US กำลังจะเริ่มที่ Indo ต่อ&lt;/p&gt;

&lt;p&gt;แนะนำให้ทำ A/B Testing เพิ่งแอบใส่ลงไปในแอพเราอยู่แม๊ปๆฮาฮ่า&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Last Section : เชิญ คุณพงษ์พัฒน์ จาก Super Score มานั่งคุยกันที่ด้านหน้า 4 คนแบบนี้&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A1lCyReH1-Z-xUBQecxoW5w.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A1lCyReH1-Z-xUBQecxoW5w.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;คำข้อที่คุยกันมีประมาณนี้&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Super Score เริ่มต้น Th/En ก่อน go globle&lt;/li&gt;
&lt;li&gt;มีแปลภาษาสเปน,โปตุกีส&lt;/li&gt;
&lt;li&gt;แต่สุดท้าย user บ้างส่วนต้องการให้แปลในระดับ Content เช่นพวกชื่อนักเตะ&lt;/li&gt;
&lt;li&gt;เริ่มทำ Suggest match&lt;/li&gt;
&lt;li&gt;สมัยก่อน Analytic ต้องเก็บเองเค้าต้องจัดตั้ง Server มาเก็บ Analytic อย่างเดียวโดยเฉพาะ ในสมัยนี้มตัวช่วยหลากหลายให้เลือกใช้สบายๆ Firebase , Flurry , Fabric ฯลฯ&lt;/li&gt;
&lt;li&gt;Appota มี Report ที่ UI สวยๆลองเข้าไปเล่นดู&lt;/li&gt;
&lt;li&gt;ถ้าไม่มี Market Research ลองติดต่อ Appota ดู&lt;/li&gt;
&lt;li&gt;เรื่องการแปลภาษา User ควรเลือกภาษาเองได้&lt;/li&gt;
&lt;li&gt;Appota ช่วย Optimize Ads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;สุดท้าย&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;คำตอบที่ดีของเราอาจไม่ใช่คำตอบที่ดีของคนอื่น&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;ทั้งหมดนี้ก็เป็นคำแนะนำจาก Google , Appota และคนที่มีประสบการ์ณเกี่่ยวกับการทำ App ไปลงในประเทศอื่นตกหล่นอะไรขออภัยด้วยนะ&lt;/p&gt;

&lt;p&gt;ตอนจบออกมานั่งคุยกับ Tran Quoc Toan คุยแผนรีวิวแอพให้ดูสุด นึกไรไม่ออกเค้าถาม Tap เพื่อนในที่ไปด้วยกัน&lt;/p&gt;

&lt;p&gt;Tran Quoc Toan : อายุเท่าไหร่แล้ว&lt;/p&gt;

&lt;p&gt;Tap : 31&lt;/p&gt;

&lt;p&gt;Tran Quoc Toan : แต่งงานยัง&lt;/p&gt;

&lt;p&gt;Tap : ยัง&lt;/p&gt;

&lt;p&gt;Tran Quoc Toan : เรา 33 แล้วมีลูก 2 คน , ในไทยแบบนี้ถือว่าช้าไปมั้ย&lt;/p&gt;

&lt;p&gt;Tap : ไม่นะ ส่วนใหญ่เรามีความเห็นว่าน่าจะพร้อมก่อนค่อยแต่ง&lt;/p&gt;

&lt;p&gt;Tran Quoc Toan : ที่เวียดนาม 24–27 ผู้หญิงอยากแต่งงานแล้ว แต่ผู้ชายเฉยๆ&lt;/p&gt;

&lt;p&gt;Tap : ที่ไทยจริงๆ ก็ประมาณนั้นแหละ&lt;/p&gt;

&lt;p&gt;คุณพ่อลูกสองคนนี้ก็แนะนำกว่าแผนเค้า ที่มีลูก 2 คนเพื่อให้เค้าเป็นเพื่อนคุยกัน บางทีพ่อแม่อาจไม่มีเวลามากมาใกล้ชิดกับลูก&lt;/p&gt;

&lt;p&gt;จบ~&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A4uDlqpQUSmM2OsOwwS19gA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A4uDlqpQUSmM2OsOwwS19gA.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>meetings</category>
      <category>monitoring</category>
      <category>appota</category>
      <category>ookbee</category>
    </item>
    <item>
      <title>Kotlin @ Pronto</title>
      <dc:creator>uuunaja</dc:creator>
      <pubDate>Sun, 20 Aug 2017 17:35:01 +0000</pubDate>
      <link>https://dev.to/ookbee/kotlin-pronto-152</link>
      <guid>https://dev.to/ookbee/kotlin-pronto-152</guid>
      <description>&lt;p&gt;มาเล่าอีกแล้ว รอบนี้ เราไปงาน Workshop Kotlin มา งานนี้ Ookbee เป็น sponsor ใหญ่ญ่ญ่ญ่ ได้ยินเค้าบอกว่าเป็นระดับ gold diamon ฟังๆแล้วอย่างกะขายตรงมาหา downline อ่านแล้วทำเสียงกล้องในหัวด้วยนะ จริงๆวันนี้น้องที่ออฟฟิศสองคนต้องมา แต่โดนเท T.T น้อยใจ คนนึงป่วยอีกคนติดธุร เราติดธุระตอนเช้า กว่าจะไปถึงถนนรัชดาเส้นที่เลี้ยวสายปิดอ้อมแล้วอ้อมอีก บ่นอีกและ skip… เรา เริ่มเลยดีกว่า assume ว่าทุกคนอ่านโปรแกรมเป็นกันหมดแล้วละกัน ใครเขียนไม่เป็นอ่านไปก็ไม่รู้เรื่องเราแนะนำกดปิดไปเลย feature เผือกทำงานไถลลงไปอ่านต่อได้เลยฮะ&lt;/p&gt;

&lt;h4&gt;
  
  
  Session 1 : Air from Agoda
&lt;/h4&gt;

&lt;p&gt;เรามาถึงก็ใกล้จบ session แล้วแต่แอบกลับไปอ่านใน Slide ให้&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;เริ่มจากการประกาศตัวแปร &lt;strong&gt;var/val&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Java ​Syntax เวลาเราจะสร้างตัวแปรไว้เก็บค่าสักตัวก็จะเขียนประมาณนี้ใช่มะ&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;private String name = “Hello World”;

Love people = new Love();
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;จากนี้ไม่ต้องประกาศให้มันยุ่งยากแล้วหรือเราจะบอก type อยู่ก็ได้&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var name: String = “Hello World”

var name = “HelloWorld”

var people = Love()
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;จบนะวิธีประกาศตัวแปรสั้นๆง่ายๆ เดี๋ยวยัง.. มีเพิ่มเติม ถ้าอยากให้มันแก้ไขไม่ได้ของ Java เราจะใช้ final ใช่มะเพื่อทำให้มันเป็น immutable&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;final String name = “Hello World”;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;เราจะแก้ไข name เป็นอย่างอื่นไม่ได้ Kotlin ใช้&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;val name : String = “Hello World”;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;lateinit ตรงตัวใส่ข้อมูลที่หลัง&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;class TestNaja{&lt;/p&gt;

&lt;p&gt;var person : Person&lt;/p&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;พังแน่นอนข้อดีของ Kotlin คือเราจะดีลกับ Null PointerException ที่น้อยลง&lt;/p&gt;

&lt;p&gt;แก้โดยการใช้ lateinit&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class TestNaja{

lateinit var person : Person

@SetUp fun setup(){

person = Person()

}

}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;ในส่วนนี้เราไม่รู้ทำไม Setup ถึงหน้าไม่เจอใน ide เรา&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;​lazy not easy&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;ยังไม่เข้าใจ concept เท่าไหร่ แต่เท่าที่อ่านที่ฟังมา หมายถึงฟังถ้ายังไม่มีการเรียกใช้มันจะไม่ทำงานเค้ายกตัวอย่างแบบนี้&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Test{

val database by lazy { Database()

}

fun saveToDatabase(name: Person) { database.save(name)

……

}

}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;คือ database จะไม่ถูก create จนกว่าจะมีการเรียก saveToDatabase&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Nullable type null ได้ ข้ามไม่ได้&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;อย่างที่บอก Kotlin ค่อยเตือนเรื่อง null ให้เราเสมอแต่ถ้าเราอยากจะเล่นกับ null เราสามารถใส่เครื่องหมาย ? หรือเรียกว่าเครื่องหมายเอลวิสก็ได้ ให้ตัวแปรนั้นได้ เช่น&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var x: String = “Hello”
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;x = null &amp;lt; compiler จะไม่ยอมให้ค่านี้เป็น null เด็ดขาด เราเลยต้องแก้ใส่ ? ให้มัน&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var x: String? = “Hello”
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Session 2 : Dew from Yesmom
&lt;/h4&gt;

&lt;p&gt;เข้ามาสอนแปลง code จาก java มาเป็น Kotlin รู้สึกชอบนะการอธิบายดูซอฟดี&lt;/p&gt;

&lt;p&gt;เริ่มมาเค้าให้ clone project ลงมาก่อนซึ่งใน project จะแบ่งเป็น 2 Activity หลัก เป็นหน้า List ของข้อมูล ส่วนอีกหน้าเป็น Detail ของข้อมูลนั้นๆ&lt;/p&gt;

&lt;p&gt;ต่อมาก็สอนวิธีแปลง class จาก java ไป Kotlin หลังจากนั้นก็อธิบายถึง Kotline REPL เป็น short cut ไว้เขียน test program สั้นๆ ดีจังไม่ต้องไปนั่งสร้าง class test ละ เสร็จเค้าก็เล่า List vs Mutable ซึ่ง list ธรรดามาจะแก้ไขอะไรไม่ได้ แต่ถ้าเป็น mutable list เราจะสามารถแก้ไขข้อมูลได้&lt;/p&gt;

&lt;p&gt;function ลอยๆไม่ต้องคอยใคร ข้อดีของ Kotlin อีกอย่างคือเราสามารถสร้าง function นอก class ได้ ก็คือพิมพ์ขึ้นมาลอยๆได้เลย!!&lt;/p&gt;

&lt;p&gt;แล้วก็สอน Apply กับ Lambda ต่อ&lt;/p&gt;

&lt;p&gt;Apply function เอาไว้แก้ไขการเรียก ชื่อ object ซ้ำกันยกตัวอย่างให้ดู&lt;/p&gt;

&lt;p&gt;เช่นถ้าเราจะเขียนว่า&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TextView textView = new TextView(context);

textView.setText(“Hello”);

textView.setColor(Color.RED);

textView.setTextSize(18);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;เขียนอะไรยืดยาวอะไรเถือกนี้ เรามาแก้เป็น Kotlin ดีกว่าโดย&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var textView = TextView(context)

textView.apply{

setText(“Hello”)

setColor(Color.RED)

setTextSize(18)

}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;แหนะสั้นลงมั้ยหละ ก็คือบอก object นั้น .apply ได้เลยหลังจากนั้นใน block {…} จะมี textView. ให้แบบเรามองไม่เห็นอยู่หรือเรียกอีกอย่างว่าด้านใน block จะก้าวถึงตัว object นี้ทั้งหมด&lt;/p&gt;

&lt;p&gt;ต่อมา Lambda หน้าตาแบบนี้ -&amp;gt; เหมือน java 8 เด๊ะเลย มันสามารถสร้าง anonymus funciton ได้&lt;/p&gt;

&lt;h4&gt;
  
  
  Session 3 : POP from Shopspot , Ju from Agoda
&lt;/h4&gt;

&lt;p&gt;session นี้เค้าพูดเร็วไปบวกกับเราหาที่ clone โปรเจ็คไม่ได้เลยนั่งฟังเอาอย่างเดียว&lt;/p&gt;

&lt;p&gt;ในแง่ของ block ที่ให้อ้างอิงถึงตัวแปรสั้นๆแบบ apply จริงๆมันจะมีอีกสามแบบ&lt;/p&gt;

&lt;p&gt;Apply,Also,With&lt;/p&gt;

&lt;p&gt;โดนที่วิธีเรียกต่างกันนิดหน่อยคือ&lt;/p&gt;

&lt;p&gt;Also ใช้ it แทนตัว object เช่น&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var textView : TextView(context)

textView.also{

it.setText(“Hello”)

}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;with โยนตัวที่จะอ้างถึงให้มัน&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;with(textView){

it.setText(“Hello”)

}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;ต่อมาเค้าก็ให้ทำ แก้โจทย์ที่เค้าสร้างไว้ เราไม่มี code เลยนั่งดูอย่างเดียว&lt;/p&gt;

&lt;h4&gt;
  
  
  Session 4 : Christopher Ng at Genxas
&lt;/h4&gt;

&lt;p&gt;มาเล่าถึง ว่า Kotlin มันแปลงได้หลายภาษา แล้วก็เอา code มารันใส่ IOS ให้ดู!!!&lt;/p&gt;

&lt;p&gt;อันที่จริง Syntax ของ Kotlin ก็ใกล้เคียง IOS เอามากๆอยู่นะ อนาคตเราคงเขียน Kotlin รันมัน 2 platform เลยแต่ที่แน่ๆจากที่เห็นเค้าทำเราอาจจะเอา logic ของฝั่ง ios มาใช้บน androidได้แหละฮีๆ&lt;/p&gt;

&lt;p&gt;ต่อมาเค้าก็เล่าถึง Kolin บน java script&lt;/p&gt;

&lt;p&gt;ในความเห็นส่วนตัวเราว่า ยังไงถ้าทำฝั่งเวปน่าจะเสร็จ C# ของ microsoft เราเลยรู้เฉยๆ แต่ที่ชอบคือ รันใส่ IOS เนี่ยแหละ 5555&lt;/p&gt;

&lt;p&gt;จบจำได้แค่นี้ แต่ที่ดูอนาคต kotlin น่าจะแทนที่ java ของ android แน่ๆเตรียมตัวกันไว้ก็ดี&lt;/p&gt;

</description>
      <category>android</category>
      <category>kotlin</category>
      <category>kotlinthailand</category>
      <category>ookbee</category>
    </item>
    <item>
      <title>Google IO Bangkok Extension 2017</title>
      <dc:creator>uuunaja</dc:creator>
      <pubDate>Tue, 11 Jul 2017 18:16:07 +0000</pubDate>
      <link>https://dev.to/ookbee/google-io-bangkok-extension-2017-15e1</link>
      <guid>https://dev.to/ookbee/google-io-bangkok-extension-2017-15e1</guid>
      <description>&lt;p&gt;ไปงาน Geek มาก็อยากเอามาเล่า จะได้ทวนความจำไปด้วย&lt;br&gt;&lt;br&gt;
ปรกติ ชอบไปงานแบบนี้อยู่และเลยชวนน้องๆที่ ookbee ไปด้วย ไปถึงก่อนเวลา ฮาฮาฮา เตรียมตัวมาอย่างดี แต่ดันลืมสมุดจดไว้ในรถไม่เป็นไรนะ เราเลยถ่ายรูปมากับจำเท่าที่จำได้มาเขียนให้แหละ&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Assume ว่าคนที่หลงเข้ามาเป็น Developer ละกัน&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;ถ้าไม่ใช่เลื่อนไปดูแต่ภาพตอนสุดท้ายละกัน :D&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;มี CIO ของ Set มาเล่าบรรยายประวัติอันยาวเหยียด ตอนแรกเข้าใจว่าจะซ้อมหนีไฟ video มีแต่อธิบายวิธีหนีไฟ แต่ตอนแกพรีเซ้นก็ได้ข้อคิดมาหนึ่งอย่างที่ตรงกับที่เค้านำเสนอมา อุอุไว้เล่าอีก story นึงหละกัน ในนี้เราจะเล่าแต่เรื่อง IO Bangkok แบบเน้นๆ&lt;/p&gt;

&lt;p&gt;งานนี้เข้าจะแบ่งออกเป็น 2 ห้องอะนะพูดแล้วให้เราเลือกว่าเราสนใจอะไรก็เข้าไปห้องนั้น&lt;/p&gt;

&lt;h4&gt;
  
  
  Keynote : Bok Thye Yeow
&lt;/h4&gt;

&lt;p&gt;มางาน IO ที่ผ่านมาแบบสั้นๆให้เรา อะเอาไปดูว่ามีไรบ้าง&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R-_HyBaK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AR1MKW1ReElrnP7MDtAOmAw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R-_HyBaK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AR1MKW1ReElrnP7MDtAOmAw.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1XDHiEmn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A1Ac8wkjOyGRNrtsigodEug.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1XDHiEmn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A1Ac8wkjOyGRNrtsigodEug.jpeg" alt=""&gt;&lt;/a&gt;Android Instant App เปิดให้ลองใช้แล้ว เย้ๆ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bdT10lJn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AvO2ZxVl8JknP8nHxJMAtSw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bdT10lJn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AvO2ZxVl8JknP8nHxJMAtSw.jpeg" alt=""&gt;&lt;/a&gt;อันนี้เหมือนเราไม่ให้เห็นในตอน ดู Google IO ที่ผ่านมาแบบ Online ส่งสัยเผลอหลับไป 55555&lt;/p&gt;

&lt;h4&gt;
  
  
  What’s new Android Studio 3.0 : Inaki Villar
&lt;/h4&gt;

&lt;p&gt;มาอธิบาย Android 3.0 ให้ฟัง หลักๆก็มาขาย Kotlin แหละกับวิธีทำงานของ compile ของ android studio ที่ต่างไป&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ej5LCZGT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A7Wwe3UA-RGyIByX94U8wqg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ej5LCZGT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A7Wwe3UA-RGyIByX94U8wqg.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Image Classification with Deep Learning : Virot Chiraphadhanakul
&lt;/h4&gt;

&lt;p&gt;เค้าอธิบายหลักการของ machine learning ให้ฟังเล็กน้อย แล้วแนะนำ engine ไว้ 2 ตัว Google Vision และ TensorFlow ต่อมาเค้าก็ลองให้ดูเอารูปจาก App Wongnai มาเล่นแล้วให้บอทมันแยกว่ารูปที่ได้มามันเป็น สภาพแวดล้อม หรืออาหาร หรืออะไร&lt;br&gt;&lt;br&gt;
บอทตอบถูกค่อนข้างดี น่าสนใจดีนะ อยากเอาไปลองเล่นเลย&lt;/p&gt;

&lt;h4&gt;
  
  
  Introduction to Kotlin : Travis Subannaphong
&lt;/h4&gt;

&lt;p&gt;มาสอน Kotlin เบื้องต้นแหละ จริงๆวันนี้เรามาเพื่อมาดู Kotlin เลยนะ แต่ดูไม่ค่อหวือหว่าสักเท่าไหร่ เดี๋ยวเราไปเปิด document ดูเองดีกว่า&lt;/p&gt;

&lt;h4&gt;
  
  
  Speeding up your Android Gradle builds : Jirawat Karanwittayakarn
&lt;/h4&gt;

&lt;p&gt;Section นี้เจ๋งมากตอนกลับมารีบเอากลับไปลองเลย ได้ผลจริงจัง ไ่ม่ได้ capture ภาพเก็บไว้ไป เปิดดู slide หน้าตาเหมือนในงาน Google IO เลยฮะ 5555 ไม่เป็นไรนะ เราปลื้มใจกับมุกคุณตี๋ให้อภัยได้ จาก project เราบิ้ว 2 นาทีกว่า setup ตามพี่แก เหลือ นาทีนึง ทำยังไง??&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“มาเริ่มเลยดีกว่า”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;ก่อนอื่นเปิดสูตรตามนี้เลย&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H2wtqf9K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AlQel2D6RRIkfDotKrywxHw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H2wtqf9K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AlQel2D6RRIkfDotKrywxHw.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;org.gradle.deamon = true&lt;/p&gt;

&lt;p&gt;org.gradle.parallel=true&lt;/p&gt;

&lt;p&gt;org.gradle.configureondemand=true&lt;/p&gt;

&lt;p&gt;org.gradle.caching=true&lt;/p&gt;

&lt;p&gt;ต่อมาตั้ง resConfigs (“en” ,”xxhdpi”) ปัญหาคือเวลาพวก support library ของ android มันมีทุกภาษาเลย เราควรเลือก แค่ภาษาที่เราจะ test build&lt;/p&gt;

&lt;p&gt;ที่ช่วยได้เยอะพอๆกันเลย อันนี้ min SDK ตั้ง version สูงๆไปเลยเราตั้งไว้ที่ 21 ตอนสำหรับ build แนะนำให้ตั้งเป็น flavor ไว้จะได้ไม่ต้องเปลี่ยนเวลาจะปล่อย release app จริงๆ&lt;/p&gt;

&lt;p&gt;ใครอยาก config ได้เพิ่มเติมก็ไปตามนี้เลยนะไปอ่านต่อตามนี้โลด&lt;br&gt;&lt;br&gt;
&lt;a href="https://developer.android.com/studio/build/optimize-your-build.html"&gt;https://developer.android.com/studio/build/optimize-your-build.html&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Recommender systems with TensorFlow : Sorawit Saengkyongam
&lt;/h4&gt;

&lt;p&gt;แอบง่วงอยู่นิดนึงไม่ใช่อะไรเราไม่ knowledge เกี่ยวกับ machine learning หนะเลยไม่ได้เก็บอะไรมาให้เท่าไหร่ หลงเข้ามาตอน section เช้า น่าสนใจดี อยากจะกด skip แต่ไม่มีปุ่มคนอ่านอยู่ก็เลื่อนไปนะ&lt;/p&gt;

&lt;h4&gt;
  
  
  Increasing download with the new Google Play : Aun Taraseina
&lt;/h4&gt;

&lt;p&gt;ทำยังไงให้คน download app เรามากขึ้นว้าวๆ หลักๆเลยให้ ทำ size app เราให้เล็กที่สุดเท่าที่จะทำได้ แล้วเค้าบอก Google Play ตอนนี้มีระบบ sign app แบบใหม่ จะปรกติ signing key จะอยู่แค่ในมือ developer ตอนนี้ Google Play มีอีก key แล้วเวลา APK ที่เราเอาขึ้นไปเนี่ยมันจะมีมันจะทำการ signing ใหม่ ตามที่เราเข้าใจนะ&lt;/p&gt;

&lt;p&gt;กลับมาเรื่อง APK Size เค้าอ้างอิงจาก App เพิ่มยอดดาวโหลดได้จริง user พอเห็น App size ใหญ่ๆแล้วก็ขี้เกียจโหลด บางประเทศ bandwidth แพงมาก App Size เล็กๆเลยได้เปรียบ วิธีทำง่ายๆสำหรับคนที่เข้าใจ Multi APK แล้วก็ตามนั้น เราอยากแยก Resource เพื่อ support ในแต่ละ device ตอนนี้ Google play สามารถแยก resource APK เราเพื่อส่งให้ device ในแต่ละแบบผลก็คือเวลามีคนดาวโหลด App ที่เราอัพขึ้นไปขนาดจะไม่เท่ากัน&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;สุดท้ายๆ เราไปยื่นตอบคำถามมาได้ของรางวัลมา 2–3ชิ้น&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MESEQ9Vw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Al0DxbY_BKAuL9Jgn2Br8yw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MESEQ9Vw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Al0DxbY_BKAuL9Jgn2Br8yw.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_ZKNh7XI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ArvGrxbzpzznNFylI2f3glA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_ZKNh7XI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ArvGrxbzpzznNFylI2f3glA.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OaHzm4Md--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AJqozxlnExcAtPD4WJzZsvA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OaHzm4Md--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AJqozxlnExcAtPD4WJzZsvA.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--afsiD9Kg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ao3F1cy6k4EI7YGVEZ4H01Q.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--afsiD9Kg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ao3F1cy6k4EI7YGVEZ4H01Q.jpeg" alt=""&gt;&lt;/a&gt;Android Developer Gang&lt;/p&gt;

</description>
      <category>googleio2017</category>
      <category>android</category>
      <category>io2017bangkok</category>
    </item>
  </channel>
</rss>
