ย้ายข้อมูลใน Firebase

ช่วงนี้เขียน mobile app ใช้บริการ Firebase เยอะมาก ทั้ง Authentication, Firestore, Firestorage ฯลฯ แต่ก็มีเหตุการณ์ที่ไม่คาดคิดเรื่องต้องย้ายข้อมูล เอาเป็นว่างานงอกกกกก หลังจากย้ายข้อมูลอยู่หลายวิิธีก็พบว่าใช้เครื่องมือหลายอย่างมาก ขอสรุปสั้นๆ ดังนี้

  • Firebase Authentication ใช้ firebase cli ในการ import/export ข้อมูลผู้ใช้
  • Firestore ใช้ gcloud cli สั่ง import/export ข้อมูลไปยัง Cloud Storage หรือใช้ node-firestore-import-export ก็ได้
  • Firebase Storage ใช้ gcloud หรือ Cloud Console ย้ายข้อมูลใน bucket ได้

ภาวะสายตายาวและพฤติกรรมคนแก่

ผมมีภาวะสายตายาวมาได้ 6 เดือนละ มีอาการมองใกล้ไม่ค่อยชัด ต้องถอดแว่นสายตาออกถึงจะมองเห็นชัด พอมองไกลออกไปหน่อยจะเห็นไม่ชัด ต้องใส่แว่นสายตาสั้นถึงจะมองเห็นชัด เป็นอาการที่น่ารำคาญและใช้ชีวิตไม่เป็นปกติเท่าไร และจะมีพฤติกรรมคนแก่ เช่น มองลอดแว่น ถอดแว่นเข้าออก เป็นต้น

คงต้องตัดแว่น progressive ใส่ละ ช่วงนี้ศึกษาเรื่องเลนส์ progressive ไปพลางๆ ก่อน ได้ความรู้เพิ่มเติมจะมาอัพเดทกันอีกรอบ อ่านเพิ่มเติมเกี่ยวกับ ความเข้าใจผิดเกี่ยวกับสายตายาว ได้ที่ MThai ครับ

Firebase Tips, Tricks และแหล่งเรียนรู้ต่างๆ

ตอนแรกว่าจะ blog เรื่องประสบการณ์เขียน Flutter กับ Firebase สักหน่อย แต่เห็น Fireship ทำ video เรื่อง 100 Firebase Tips, Tricks, and Screw-ups มาแล้ว มีเนื้อหาที่น่าสนใจหลายเรื่อง ก็เลยเอามาแปะไว้ก่อน ลองไปดูกันได้ครับ

วิดีโออืกชุดจะเกี่ยวกับ Firebase database สำหรับ SQL developer น่าสนใจดี

Wrap Omise REST API สำหรับ Flutter

ผมมีโครงการ Mobile App ที่ต้องเขียนเพื่อเชื่อมต่อกับ Omise เพื่อรับ-จ่ายเงิน ผ่านบัตรเครดิต และทำ Digital Wallet สำหรับลูกค้าในตัว แต่เนื่องจากโดนเบรคเรื่อง Wallet ไป ก็เลยไม่ได้ทำต่อ ตอนนี้ก็เอา Omise class ที่เชื่อมต่อกับ REST Api มาแปะไว้ก่อนเผื่อใครอยากทำต่อ หรือ ทำ package ที่ถูกต้องสำหรับ flutter น่ะครับ 🙂

ใครสนใจก็ไปดูกันได้ที่ github ปล.โค้ดแบบลวกๆ และทำเฉพาะ charge ด้วย token นะครับ

แนะนำ Flutter Package เผื่อได้ใช้เหมือนกัน

Flutter มีเว็บรวม package เพื่อเพิ่มความสามารถให้ app ซึ่งเราสามารถค้นหา package ที่ต้องการได้ที่ pub.dev ในเว็บนี้จะรวม package ที่ใช้งานกับ flutter, web และ dart อยากได้อะไรก็ลองไปค้นในนี้ดูก่อนได้

สำหรับ package ที่ผมใช้ มีดังนี้

  • firebase_core – firebase
  • firebase_analytics – firebase analytics
  • cloud_firestore – firebase database
  • firebase_storage – firebase cloud storage
  • firebase_messaging – firebase cloud messaging
  • firebase_auth – firebase authentication
  • google_sign_in – google sign-in
  • google_maps_flutter – google map
  • circular_profile_avatar – circular avatar
  • qr_flutter – QRCode
  • font_awesome_flutter – Fontawesome icon
  • flutter_money_formatter – Money format
  • connectivity – Check connectivity
  • double_back_to_close_app – Double press back to exit app
  • cached_network_image – Show network image + cached image
  • package_info – Read package infomation
  • url_launcher – URL launcher
  • photo_view – View photo support pitch to zoom
  • flutter_credit_card – Credit card input
  • fluttertoast – Toast
  • image_picker – Image Picker
  • flutter_local_notifications – Local notification
  • geoflutterfire – Geo-query
  • geolocator – Geolocation
  • shared_preferences – Share Preference
  • international_phone_input – International phone number input
  • pin_input_text_field – PIN input
  • flutter_masked_text – Masked Text input
  • place_picker – Place picker
  • multi_image_picker – Multiple images picker

ใครสนใจตัวไหนก็ไปลองเล่นกันดูได้

พิมพ์ชิ้นงาน 3D หลายสีด้วยเครื่องหัวพิมพ์เดียว

Cura รุ่นใหม่ๆ มีเครื่องมือ Post Processing ทำให้เราสามารถแก้ไข g-code ที่สั่ง slide มาได้ โดยการเพิ่มคำสั่งที่เราต้องการลงไปได้ วิธีการเพิ่มคำสั่งก็ง่ายมาก แค่คลิกเลือกคำสั่งที่ต้องการได้เลย ตัวอย่าง เช่น เราต้องการพิมพ์ชิ้นงานหลายสีด้วยเครื่องหัวพิมพ์เดียว ก็สามารถทำได้ วิธีการก็ง่ายมากๆ สั่งแค่ pause ที่ layer ที่ต้องการเปลี่ยนเส้น ง่ายๆ แค่นี้เอง 🙂

แปะวิดีโอไว้นิดนึง

ชีวิตบน Flutter เป็นยังไง เริ่มต้นเขียน Flutter ยังไง

ผมทำงานด้าน Backend มาตลอด ทำทั้งด้าน System Admin, CI/CD, Build Automation และ Release Management ที่ต้องทำเองก็เพราะว่าไม่มีคนทำให้​ ชีวิตก็เลยไปอยู่ฝั่ง Backend เยอะมาก แต่จริงๆ ผมเป็น Developer นะ ผมกลับมาเขียน Mobile Front-end อีกรอบ คิดไปคิดมาอยู่หลายรอบว่าจะเขียนด้วยอะไรดี React Native หรือจะเขียน Flutter สุดท้ายก็มาทาง Flutter เพราะโดนป้ายยามา 😛

ช่วงแรกที่หัดเขียน Flutter ก็พบว่า “นี่มันบ้าอะไรกันเนี่ย” เพราะเขียน Android Native มาตลอดยังปรับตัวไม่ค่อยได้ แต่ความรู้เก่าๆ ที่เขียน Android Native มาก็ปรับใช้ได้ แต่ก็มีสิ่งที่ประหลาดๆ ใน Flutter เช่น Future และ Asynchronous นี่แหละ เพราะรู้สึกว่าเหมือนมันไม่มีอะไรที่แน่นอนกับชีวิตแปลกดี แต่ก็เป็นความรู้ใหม่ที่เลี่ยงไม่ได้ อีกอย่างคงเป็น Widget แปลกๆ อีกมากมายที่รู้สึกว่ามี Widget เยอะจัง อีกเรื่องก็เป็น State ซึ่งไม่เหมือน Life Cycle บน Android เท่าไร

สำหรับเรื่อง UI บน Flutter ใช้ Widget ต่างๆ มาประกอบกัน ซึ่งก็คล้ายกับเขียน Layout บน Android ก็เลยปรับตัวไม่ยาก แต่ต้องไปดู Widget ต่างๆ ว่ามีอะไรให้ใช้งานได้บ้าง ถ้ามีคนถามว่าจะเริ่มเขียน Flutter ยังไง ผมคิดว่าต้องมีความรู้ Mobile App Dev สักตัวจะเป็น Android หรือ iOS ก็ได้ เพราะ Dart จะคล้าย Java หน่อยๆ เขียนโค้ดไปมันจะค่อยๆ พิศดารขึ้นเรื่อยๆ และจะทะยอย optimized ไป

เครื่องมือที่ใช้เขียนโค้ด หลายคนแนะนำ Visual Studio Code ผมคิดว่าถ้าใครถนัด Visual Studio Code ก็ใช้ครับ ผมว่าก็สะดวกดี ถ้าใช้ sublime มาจะสนุกนะ แต่พอจะต้องใช้เครื่องมืออัตโนมัติอย่างเช่น generator ต่างๆ ก็คงต้องกลับไปใช้ Android Studio เหมือนเดิม ช่วงแรกผมก็ใช้ Visual Studio Code แต่ระยะหลังๆ ก็กลับมาใช้ Android Studio เหมือนเดิม เพราะต้องใช้เครื่องมือ generator นี่แหละ ผมทำ locale ภาษาอื่นๆ ด้วย เลยต้องใช้เครื่องมือช่วยสร้าง code จากไฟล์ locale ด้วย

ถ้าอยากจะเริ่มเขียน Flutter คงแนะนำให้อ่านจากเว็บ Flutter ก่อน ถ้ามีประสบการณ์เขียน Mobile App มาบ้าง ไปดูหัวข้อ Cookbook ได้เลย จะทำให้ศึกษาได้เร็วมากขึ้น สำหรับ Widget คงต้องค่อยๆ ลองใช้ดู เพราะเยอะมาก ลองไล่ศึกษาจาก Widget Catalog ช่วยชีวิตได้เหมือนกัน เพราะเวลางงๆ ก็กลับมาอ่านทุกครั้งสำหรับ Tutorial มีเยอะมากในอินเตอร์เน็ต ลองไปค้น Youtube กันดูได้ครับ 🙂 เกือบลืมไป ผมทำรายการ package ที่ใช้ไว้ใครสนใจก็เอาไปลองเล่นดูได้ครับ

อีกอันจะเป็น The Boring Flutter Development Show แต่ละตอนอาจจะยาวหน่อยเพราะเป็น live code และเป็น pair programming ด้วย เราจะได้เห็นแนวคิดและการแก้ปัญหาต่างๆ ผ่านรายการนี้ ได้ประโยชน์มากๆ

รีวิวปากกาหมึกซึม Paili 031 หรือ Wingsung 3031 และแนะนำวิธีการสูบหมึก

ผมได้ปากกา Paili 031 หรือ Wingsung 3031 หน้าตาเหมือนกันไม่รู้ว่าใครก็อปปี้ใคร ขนาดหัวปากกา 0.38 (EF) ปากการุ่นนี้มีที่สูบหมึกอยู่ในตัวไม่ได้มีหลอดหมึกแยกออกมา วิธีการสูบหมึกออกจะแปลกกว่าการสูบหมึกแบบหลอดหมึกทั่วไป

วิธีการสูบหมึกก็ง่ายๆ แบบนี้เลย

ซ่อมเครื่อง DeltaBot

ผมย้ายของจากกรุงเทพฯ มาโคราชมีของหลายอย่างพังไป ของที่อ่อนไหวที่สุดคงเป็น 3D Printer ซึ่งแน่นอนว่าย้ายมาแล้วต้องจูนเครื่องกันใหม่อยู่หลายรอบ ส่วนที่แตกหักก็ต้องซ่อมกัน เครื่อง Delta ที่ย้ายมา effector หักไปส่วนนึง

ก็เลยต้องพิมพ์ใหม่

ครั้งนี้ก็เลยใส่ BL Touch ไปด้วย แต่ซื้อมาจาก shopee ได้ 3D Touch มาซะงั้นไม่ตรงปกและร้านเอาสินค้าออกจากร้านอย่างรวดเร็ว ไม่ต้องรอรีวิวกันเลยทีเดียว T_T

ยึดกับ effector แบบนี้

จากนั้นก็เปลี่ยนถาดยึด Arduino Mega

พยายามไล่สายกันใหม่

จูนอีกนิดหน่อย ก็ได้ผลลัพท์ที่พอใช้ได้

โอ่งแมว

มาบล็อกเรื่องแมวๆ ที่บ้านกันบ้าง เรื่องมีอยู่ว่าคุณแฟนต้องไปซื้อไก่ไปปล่อยที่อยุธยา ก็เลบได้มีโอกาสเดินทางไปที่ด่านเกวียนเพื่อไปหาซื้อไก่ ครั้งนี้ก็เป็นครั้งแรกที่ผมเคยไปด่านเกวียนอ่ะนะ รู้สึกตื่นเต้นดีเหมือนกัน พอไปถึงที่ก็พบว่ามีเครื่องปั้นดินเผาเยอะมาก มีหลายอย่างให้เลือก แต่ผมไม่ค่อยมีไอเดียเรื่องเครื่องปั้นดินเผาเท่าไร นอกจากอยากได้โถกังไส ที่เอาใส่รถกลับบ้านไม่ได้ก็ยังนึกไม่ออกว่าจะซื้ออะไร พอคุณแฟนเลือกซื้อไก่เสร็จแล้ว คุณแฟนก็ไปหาซื้อครกหินต่อ ที่ร้านครกหินมีเจ้าสิ่งนี้วางอยู่ โอ้ว มันสุดยอดมาก มันคือโอ่งแมว เล็ก กลาง ใหญ่

รู้สึกอยากได้ขึ้นมาทันที ก็เลยสอบถามราคาจากคนขาย ซึ่งคนขายก็ใจดีลดราคาให้อีกต่างหาก เพราะเป็นทาสแมวเหมือนกัน ผมเลือกโอ่งแมวขนาดกลางเพราะว่าน่าจะใส่รถคันเล็กได้พอดี ผมเอาโอ่แมวกลับมาตอนดึกๆ แก๊งแมวก็สงสัยกันใหญ่ว่ากล่องอะไร มาดมๆ มองๆ อยู่หลายรอบ พอตอนเช้าแกะโอ่งออกมา ผลก็เป็นอย่างนี้

นวลจอง ใครห้ามแย่ง โอ่งนวล 555

เจ้าคดนอนนอกโอ่งเพราะตัวใหญ่กว่าโอ่งมาก สำหรับขาวก็มานอนที่เก้าอี้ทำงานเหมือนเดิม

พอได้โอ่งใหม่ก็เห่อกัน แก๊งแมวมีแย่งกันนอน เวลามีใครมาแย่งนอนในโอ่ง นวลก็ไม่ยอม มาร้องแมวๆ ฟ้องว่าโดนแย่งโอ่ง ขำดี