วันพฤหัสบดีที่ 8 พฤศจิกายน พ.ศ. 2561

[Review] ไหว้วานให้แม่ใช้ยาหม่องนํ้า 8 จระเข้ เพื่อแก้ปวด


สวัสดีค่ะทุกคน ขอเล่าแบบไวๆ ด้วยแม่เราอายุเยอะแล้ว และมีความปวดเมื่อยตามตัว มีอะไรให้ใช้แล้วไม่ค่อยอยากใช้ เพราะคิดว่าใช้แล้วไม่หาย อ่ะแม่ ฝากลองนี่หน่อย ดีกว่าแม่ไม่ได้ลองนะ

เรายื่นสเปรย์ยาหม่องน้ำตรา 8 จระเข้ หรือเรียกอีกชื่อหนึ่งว่า 8CC Herbal Oil เป็น ยาหม่องสมุนไพร แก้ปวดเมื่อย และบรรเทาอาการปวดหลังด้วย

แม่เรามีอาการปวดเข่า ปวดไหล่ ปวดแขน ตามประสาคนแก่
ส่วนเรามีปวดเมื่อยบ้าง ก็ต้องลองใช้ให้แม่ดูก่อนอ่ะ

แกะกล่องกันเถอะ ก็กล่องมาแบบสวยงาม น่าจะถูกใจนักท่องเที่ยวชาวจีนที่มาเที่ยวไทยนะ

ตัวกล่องโชว์ product ออกมาเลย ด้านหลังบอกวิธีการใช้ ส่วนผสม สถานที่ผลิต และภาพปวดเมื่อยต่างๆ แอบเสียดายนิดนึงที่ว่า มันไม่ได้เขียนสรรพคุณเลย ไม่สิ ว่าทำไมต้องถู นวด ตามบริเวณที่ต้องการ เพื่ออะไรกันหล่ะ


ด้านข้างมีภาษาจีน เขียนว่า made in Thailand แน่นอนว่าฝาด้านบนมีสติกเกอร์ใหญ่ๆปิดไว้ เพื่อให้เรารู้สึกว่ามันไม่ได้ถูกแกะมาใช้ก่อนนะ


เมื่อแกะกล่องออกมาแล้ว พบว่าขวดมันก็จับถนัดมืออยู่นะ



วิธีการใช้ ก่อนอื่น เปิดกล่อง แกะซีลออกก่อน ซึ่งไม่รู้ว่าเราจะเขียนบอกตรงนี้ทำไม 555


จากนั้นก็กดฉีดสเปรย์ ตอนแรกกดแล้วมันไม่ออก ต้องกดซํ้าๆพักนึงอ่ะถึงจะออก มันไม่เหมือนแบบปกติที่เป็นละอองอ่ะ มันเป็นนํ้ามันที่ถูกพ่นออกมาจากหัวฉีดสเปรย์อ่ะ



สีของสเปรย์ยาหม่องนํ้านั้น สีออกนํ้าตาลเหลืองๆ กลิ่นเป็นยาหม่อง แต่มันก็หอมเย็นๆ หลังฉีดสเปรย์ยาหม่องน้ำผิวสัมผัสมันเป็นนํ้ามันอะเนอะ แต่แห้งเร็ว ไม่เหนอะหนะมือเหมือนแบบเปิดฝาแล้วทา





เราลองฉีดเนื่องจากออกไปทำกิจกรรมนอกบ้านแล้วปวดเข่ามากกกก เลยลองดูก่อนว่าเป็นยังไง
หลังจากเราฉีดเสร็จแล้วก็ไปนอน ตอนเช้าตื่นมาสักพักพบว่า

มือเราแสบร้อนมากอ่ะ แบบแสบแดงเลย แต่ถ่ายรูปไม่ทันก็หายไปเสียก่อน บรรเทาอาการปวดเมื่อยได้บ้างนะ

--------

งั้นให้แม่ลองใช้บ้างดีกว่า โดยเราก็ฉีดเจ้าสเปรย์ยาหม่องนํ้าเข้าไปที่เข่าของแม่




จากนั้นก็ก็นวดๆเข่า แม่บอกมันไม่เห็นจะร้อนเลย ทาไปแล้วก็เฉยๆ อ้าว เพราะเขาบอกว่าเข่าไม่ดี ทาไปก็ไม่หาย ฮือออออออออ แต่แม่บอกว่ากลิ่นมันหอมมากเลยนะ เขาน่าจะใช้ได้เรื่อยๆแหละนะ ...

--------

ใครอยากลอง ยาหม่องน้ำสูตรร้อน ตรา 8 จระเข้ สามารถหาซื้อได้ที่ King Power, Booth, ห้างสรรพสินค้าบิ๊กซี ร้านขายยาเพียว (Pure Pharmacy) นะจ๊ะ

--------

ป้ายกำกับ:

วันพฤหัสบดีที่ 1 พฤศจิกายน พ.ศ. 2561

มาทดลองทำ Firestore Codelab ที่บ้านให้เหมือนไปทำที่งาน Android Bangkok 2018

สวัสดีค่ะทุกคน ในนี้ดูไม่ค่อยได้มาเขียนเลยแหะ ส่วนใหญ่สิงที่ medium เพราะเขียนง่ายดี bookmark ได้ด้วย เขียนยาวๆก็ดองได้งี้ 555 ก่อนเราจะเขียนบทความสั้นๆ (เหรอ) เรามาท้าวความนิดนึงแบบสั้นๆก่อนนะ

session นี้มีอยู่รูปเดียว แปะวนไปจ้า

เราได้ไปเป็น speaker งาน Android Bangkok 2018 พูดเรื่อง ExoPlayer เป็นงานใหญ่งานแรกที่ได้ไปพูดต่อหน้าประชาชน ซึ่งวันนั้นก็จะสวมหมวก speaker ด้วย สวมหมวกคนฟังด้วย เนื่องจากเราต้องขึ้นไปพูด session ตัวเองหลัง session codelab ทำให้เรายังไม่ได้ลอง codelab ที่ว่านี้ ที่หลายคนได้รับเสื้อ Firebase กลับบ้านไป ว่าจะทำยากง่ายเพียงใด

ปล. น้องในทีมเราเขียนเป็น web ส่งมาเลยแหะ ฮ่าาๆๆ

สามารถอ่านบล็อก session ของเรา และเกี่ยวกับงานได้ที่นี่
Playing video by ExoPlayer

ไม่รอช้า มาเปิด codelab ที่นี่ https://codelabs.developers.google.com/codelabs/firestore-android/#0 และทำไปพร้อมกันเลยค่ะ

1. Overview 
เตรียมเครื่องให้พร้อมเน้อ โดยรวมทำแอปเชื่อมต่อข้อมูลกับเจ้า Firestore นี่แหละ และคิดว่า Android Developer ที่เจอบล็อกนี้ คงจะใช้ Android Studio 3 กันบ้างแล้ว จริงๆให้ใช้ 2.3 ขึ้นไปแหละ และมีมือถือแอนดรอยด์อยู่แล้ว ใช่ป่ะ ถ้าไม่ก็ Emulator ก็ได้ก๊าาา

2. Set up the sample project
- โคลนมันออกมาซะ : git clone https://github.com/firebase/friendlyeats-android
- เปิด Email Authentication ในโปรเจก Firebase ของเรา

ตอนแรกไปที่ Authentication โปรเจกเรายังไม่มีเนอะ กดปุ่ม SET UP SIGN-IN METHOD เลยจ้า


แล้วก็เปิดเจ้า Email/Password ซะ


จริงๆเจ้า Authentication มีหลายตัวนะเออ


จากนั้นไปที่ Firestore ใส่ไปแบบนี้

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth.uid != null;
    }
  }
}


- ใส่ไฟล์ google-service.json ในแอปเราก่อนค่อย build นะ
ส่ิงที่ขาดไม่ได้ คือ google-service.json นั่นเองงง ไม่มีเหมือนขาดใจเลยทีเดียว ได้ไฟล์นี้โดยการเพิ่มแอปแอนดรอยด์ของเรา แล้วก็ download มา


จากนั้นรันแอปดูจ้า เป็นอันจบขั้นตอนที่สองงงง


ปล. อย่าเพิ่ง update gradle instant run อะไรสักอย่างหลังจากโคลนนะ ไม่งั้น import ของเราพังอย่างไร้สาเหตุ

3. Write data to Firestore
จริงๆทำตามนั้นแหละ บนไฟล์ MainActivity.java จะมี TODO อยู่ เพิ่มส่วน init firebase ลงไป

private void initFirestore() {
        mFirestore = FirebaseFirestore.getInstance();
}

และใส่ model Restaurant ลงไป

    private void onAddItemsClicked() {
        // Get a reference to the restaurants collection
        CollectionReference restaurants = mFirestore.collection("restaurants");

        for (int i = 0; i < 10; i++) {
            // Get a random Restaurant POJO
            Restaurant restaurant = RestaurantUtil.getRandom(this);

            // Add a new document to the restaurants collection
            restaurants.add(restaurant);
        }
    }

ตอนแรกใน Firestore จะเป็นว่างๆอยู่แบบนี้

reuse project ก่อนแปปนึงนะ

พอรันแอปจะพบหน้า sign-in email มาแบบนี้ ให้เราสมัครสมาชิกก่อน



หลังจากลงทะเบียนแล้ว ก็พบกับหน้าหลัก ลองกดเลือกดูเล่นๆ แต่ มันไม่ได้ query data มาให้เรานะ




และสุดท้ายหน้า Firestore จะมีข้อมูลแบบนี้ มาจาก RestaurantUtil ตอนที่เราเพิ่มที่ onAddItemsClicked() นั่นเอง


4. Display data from Firestore

สุดท้ายจะได้ data ขึ้นมาแบบนี้ แต่ยัง sort ไม่ได้นะเออ


5. Sort and filter data

แน่นอนเราขาดส่วนนี้เนอะ ใส่โค้ดลงไป ลอง query ดู อ้าวทำไมไม่ออกหล่ะ


ไปดู log มันบอกว่าให้ไป create index ก่อนนะ จิ้ม link สิ รอไร


สร้าง index สิออเจ้า


และ Firebase ก็จะสร้าง index ให้เรา


ทำไมหล่ะ...

กลับไปจิ้มดู ได้แย้วววววๆๆๆๆๆๆ



6. Organize data in subcollections

เราลองมาให้ rating ดูกันเถอะ ปรากฎว่านางว่าเราแหะ add ไม่ได้จ้าาาา


หลังจากเพิ่มโค้ดไป เราก็สามารถเพิ่ม rating ร้านได้แล้ว เย้



7. Secure your data

จะจบแล้ววววว ลองดูความปลอดภัยกันสักนิด แอปเรานั้นต้องปลอดภัยมากๆเลยเนอะ ไม่งั้น user โวยวาย ดังนั้นปรับแต่ง rule สักนิดนึง โดยให้สิทธิการแก้ไขข้อมูลให้คนที่ log-in เข้ามาเท่านั้น

การแก้ไข rule มีผลใน 1-5 นาทีนะเออ แต่เรากดไปบอกไม่เกิน 10 นาทีนะ

service cloud.firestore {
  match /databases/{database}/documents {
        // Restaurants:
        //   - Authenticated user can read
        //   - Authenticated user can create/update (for demo)
        //   - Validate updates
        //   - Deletes are not allowed
    match /restaurants/{restaurantId} {
      allow read, create: if request.auth.uid != null;
      allow update: if request.auth.uid != null
                    && request.resource.data.name == resource.data.name
      allow delete: if false;
      
      // Ratings:
      //   - Authenticated user can read
      //   - Authenticated user can create if userId matches
      //   - Deletes and updates are not allowed
      match /ratings/{ratingId} {
        allow read: if request.auth.uid != null;
        allow create: if request.auth.uid != null
                      && request.resource.data.userId == request.auth.uid;
        allow update, delete: if false;
        
        }
    }
  }
}

เรียบร้อยจ้า จบพิธีกรรมการลองทำ Codelab ชดเชยหลังจากที่ได้เสื้อไปก่อนหน้านี้ในฐานะ speaker แล้ว 555

และที่ทำไปนั้นอยู่ในนี้จ้า

ป้ายกำกับ: ,