Posts

[iOS] Property Wrapper ความสามารถในการเขียน Annotation บน Swift

Image
        Property Wrapper ถ้าแปลตามชื่อก็คือการปั้นตัวแปร เพื่อให้มีค่าเริ่มต้นตามที่กำหนด หรือความสามารถพิเศษตามที่เราต้องการ โดยอาศัยการระบุ annotation นำหน้าไปเท่านั้น !!! ลองมาดูวิธีใช้งานกันครับ ก่อนอื่น ต้องสร้าง annotation ที่เราต้องการก่อน @propertyWrapper struct Capitalized { var wrappedValue: String { didSet { wrappedValue = wrappedValue.capitalized } } init(wrappedValue: String) { self.wrappedValue = wrappedValue.capitalized } }         โดย @propertyWrapper เป็น attribute ที่บังคับต้องมี โดย datatype จะต้องตรงกับ attribute ที่เราเอาไปใช้งานด้วย ซึ่งตรงนี้เรามีการเพิ่มความสามารถ capitalized เข้าไปใน didSet ด้วย ตัวอย่างการใช้งาน struct User { @Capitalized var firstName: String @Capitalized var lastName: String } // firstName = Lord, lastName = Gift var user = User(firstName: "lord", lastName: "gift") หรือเราจะประกาศพร้อม assign value แบบนี้เลยก็ได้     // he

[Android] Desugaring กับการใช้งาน Official Date Time Library

Image
          Date Time library เป็นสิ่งที่มีปัญหามายาวนาน เอาแค่ในส่วนของ java standard library เองก็มี Class ให้เลือกใช้แบบงง ๆ (และก็ยังมีต่อไป) java.util.Calendar java.util.Date java.sql.Date ...           ทำให้นักพัฒนาหลายคนเลือกที่จะใช้ 3rd-party อย่าง Joda-Time เข้ามาแทน https://github.com/JodaOrg/joda-time         หลังจากนั้น Java 8 ก็ออกสู่สาธารณชน การมาของ Java 8 สร้างความตื่นเต้นให้ Java dev. พอสมควร ประกอบด้วย major changes เช่น lambda expression stream function Java DateTime library ตัวใหม่ ( java.time.* )           ในขณะที่ฝั่ง Android ก็อยากจะใช้บ้างอ่ะ แต่ติดว่าต้อง minimum SDK ต้องมากกว่า 26 หรือก็คือ Android 8.0 Oreo ขึ้นไปเท่านั้น เลยเกิด 2 ท่าหลักๆ เพื่อให้รองรับเครื่องเก่าๆ ด้วย คือ  Jack Toolchain เพื่อใช้ Java DateTime ตัวใหม่ และ lambda expression ได้ด้วย 3rd-party library เฉพาะเรื่อง DateTime           แต่ก็ต้องบอกว่าตัวเลือกแรกข้อเสียค่อนข้างเยอะ คือบิ้วช้ามากก บวกกับตอนนั้นคนยังไม่ได้ชินกับ lambda ขนาดนั้น คนเลยเลือกใช้ 3rd-party เฉพาะเรื่อง DateTime มากกว่า เช่

Rabbit MQ เครื่องมือจัดการ Asynchronous อย่างเป็นระบบ

Image
         Synchronous / Asynchronous เข้ามามีบทบาทมากขึ้นเมื่อเรา implement Microservices เมื่อเรามี services เยอะขึ้น การคุยกันก็มีความซับซ้อนมากขึ้น ถ้าพูดในมุมของ client ก็คงต่างกันแค่ รอ และ ไม่รอ เท่านั้นเอง https://sookocheff.com/post/api/marrying-restful-http-with-asynchronous-design/          Messaging Queue (MQ) ก็เกิดมาเพื่อเป็นตัวกลางระหว่างผู้รับและผู้ส่ง และยังมี protocol เฉพาะอย่าง AMQP ที่กำหนดเป็นมาตรฐาน เพื่อการันตีข้อมูลว่าจะไม่หายระหว่างทางด้วย ซึ่งการใช้งานนั้นจำเป็นต้องอาศัยเครื่องมืออย่าง Message Broker เพื่อควบคุม queue อีกที Message Broker เป็น software ที่เราต้องติดตั้งบน server ไว้ด้วย เพื่อ tracking & monitoring รวมถึงมี console ให้สามารถทดสอบส่งข้อมูลเข้า queue โดยไม่ต้องเขียนโค้ดเอง ตัวอย่างเช่น Rabbit MQ, Apache Kafka และ อื่นๆ อีกมากมาย           Rabbit MQ เป็น Message Broker ที่ได้รับความนิยมอีกตัวหนึ่ง สามารถใช้งานได้ฟรี และมีความ lightweight กว่าเจ้าอื่น อีกทั้งยังมี web console ให้ผู้ดูแลเข้ามาใช้งานง่ายๆ ด้วย แนะตัวกันก่อน Producer / Publisher

วิธีการติดตั้ง PHP + Xdebug เพื่อให้สามารถ debug บน VSCode ได้

Image
         การเขียนโปรแกรมภาษา PHP นั้น developer จำเป็นจะต้องติดตั้ง PHP พร้อมกับ extension สำหรับ debug เอง เพื่อให้สามารถ debug โปรแกรมได้ ต่างจากภาษาอื่นๆ ที่มักจะ bundle มากับ IDE เลย แต่กับ PHP ถึงแม้จะเป็น IDE เจ้าใหญ่ ๆ ก็ยังไม่เห็นเจ้าไหน integrate มาให้พร้อมใช้เลย ติดตั้ง PHP install ผ่าน homebrew % brew install [email protected] กำหนด PHP Home % echo 'export PHP_HOME="/usr/local/opt/[email protected]/bin"' >> ~/.zshrc กำหนด PHP Home (สำหรับ macos Monterey ขึ้นไป ***) % echo 'export PHP_HOME="/opt/homebrew/Cellar/[email protected]/7.4.27/bin"' >> ~/.zshr set PATH ให้รู้จัก php  % echo 'export PATH="$PHP_HOME:$PATH"' >> ~/.zshrc % source ~/.zshrc ติดตั้ง Xdebug   install xdebug ด้วย pecl % pecl install xdebug ซึ่งคำสั่งด้านบนจะลง xdebug และ config กับ php ของเราให้เลย แต่เราจะแก้ไขมันนิดหน่อยที่ไฟล์ php.ini % nano /usr/local/etc/php/7.4/php.ini สำหรับ macos Monterey ขึ้นไป *** % nano /opt/homebrew/etc/p

Cast คืออะไร ใช้ดูหนังบนทีวียังไง

Image
         การมาของ Disney+ ทำให้หลายคนสงสัยว่าทีวีที่มีอยู่ สามารถดูได้หรือไม่ ? "Cast" ก็กลายเป็นเทคโนโลยีที่ถูกกลับมาพูดถึงอีกครั้ง เพราะเป็นทางเลือกที่ทำให้ดูบนทีวีได้โดยประหยัดเงินมากที่สุด เพราะปัจจุบันหลายบ้านก็มีอุปกรณ์ที่รองรับอยู่แล้ว           Google Cast เป็นเทคโนโลยีจาก Google เพื่อแชร์ภาพและเสียงแบบไร้สาย เพื่อมอบประสบการณ์ smart tv โดยที่ไม่ต้องซื้อ tv รุ่นแพงๆ ก็ได้ การใช้งาน  ต้องมีอุปกรณ์ที่รองรับ Cast ก่อน เช่น Chromecast, Android Box หรือทีวีรุ่นใหม่ๆ ที่มักจะมี Chromecast built-in ติดมาในตัว ต้องเชื่อมต่อ wifi เดียวกัน ทั้งอุปกรณ์และ smartphone  มองหาสัญลักษณ์  cast  (ถ้าไม่ขึ้นแปลว่าไม่รองรับ หรือต่อ wifi คนละวงกัน) กดสัญลักษณ์  cast  ดูบนจอได้เลย https://www.google.com/chromecast/built-in/ ข้อดี ระหว่างดูไม่จำเป็นต้องเปิดมือถือไว้ รองรับหลายแอปฯ เช่น Youtube, Netflix, Facebook (vdo), Spotify, Disney+ หรือแม้กระทั่ง vdo player บน web หลาย ๆ ค่าย ตรวจสอบแอปฯ มือถือที่รองรับ   setup เพียงครั้งเดียว เพื่อนมาบ้านแค่ต่อ wifi บ้านเราก็ cast ได้แล้ว ( แย่งกันเปิด

CI/CD คืออะไร จะเอามาใช้กับงาน Developer ได้อย่างไร ?

Image
         CI/CD เป็นลำดับขั้นตอนที่ Developer ต้องทำเป็นประจำอยู่แล้ว แต่จะมีการออกแบบให้ใช้งานได้ง่ายขึ้น เป็นขั้นเป็นตอนมากขึ้น รวมถึงอาจให้ทำงานโดยอัตโนมัติ โดยอาศัย "ผู้ช่วย" ซึ่งส่วนใหญ่จะเป็นลักษณะ Pipeline-as-a-Code ตามสไตล์ยุคของ DevOps พูดถึง CI/CD กันก่อน CI = Continuous Integration เป็นขั้นตอนที่มักจะอยู่ใน phase Dev จะทำค่อนข้างถี่ เพื่อให้เห็น progress report ต่าง ๆ เช่น Unit Test, Coverage, UI Test รวมถึงการเก็บ version ต่าง ๆ ไว้อาจเป็นลักษณะ nightly build, weekly build ก็ได้ CD = Continuous Delivery เป็นขั้นตอนที่พร้อมให้ Tester ทดสอบระดับนึง ก็จะมีการส่ง version ที่เก็บไว้ไป deliver บน environment ใช้งาน เช่น  SIT, UAT หรือ PROD * SIT = System Integrate Test, UAT = User Acceptance Test, PROD = Production Pipeline           จริง ๆ แล้ว pipeline ก็คือขั้นตอนที่ developer ทำอยู่เสมอนั่นแหละ เมื่อเราจะทำเป็น CI/CD เราก็จะต้องออกแบบว่าจะทำอะไรบ้าง (Design Pipeline) โดยต้องค

รู้จักกับ Kubernetes (K8s) เครื่องมือที่ DevOps พลาดไม่ได้

Image
          Kubernetes (K8s) เป็นเครื่องมือที่จะมาช่วยให้การมองโลกของ infrastructure เปลี่ยนไป จริง ๆ บางคนมองว่า Kubenetes เป็นการต่อยอดจาก Docker ต้องเป็น Docker ก่อนถึงจะเข้าใจ Kubenetes ได้ สำหรับคำตอบของคำถามนี้คงจะตอบได้ทั้ง ใช่ และ ไม่ใช่ ครับ           หากใครคุ้นเคยกับการมีแผนก Infrastructure (Operation) เตรียมของเตรียม Tools ให้ เช่น การติดตั้ง application server, การตั้งค่า load balance, การเปิด-ปิด port หรืออื่น ๆ สิ่งเหล่านี้จะมีการขยับเข้ามาใกล้ฝั่ง Developer มากขึ้น เพื่อใช้งานในลักษณะ Infrastructure-as-a-Code (IaaS) ซึ่งเป็นการรวมกันของฝั่ง Developer และ Operation หรือที่เรียกกันว่า ​DevOps นั่นเอง          Virtualization คงจะเป็นคำที่เหมาะสมสำหรับโครงสร้างแบบนี้ ซึ่งเราไม่ได้รู้จักกับมันเป็นครั้งแรก ไม่ว่าจะ Cloud ที่สามารถสร้างเลือกสร้างเครื่องเสมือน หรือ Docker ที่เป็น containerize platform อย่างชัดเจน ก็ล้วนแต่ไม่ใช่ physical hardware ทั้งสิ้น มาลองใช้งานกันเลยดีกว่า 1. ติดตั้ง Kubenetes          สำหรับการทดสอบ ถ้าเราติดตั้ง Docker Desktop อยู่แล้ว เราสามารถเปิด Kube

Facebook Comment

Recent Posts

Popular

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ

[Android] เปิดเครื่องไม่ได้ โลโก้ค้าง (Boot Loop)

ความเร็วเน็ตที่แท้จริง Mbps MBps ???

Portal คืออะไรกันนะ???

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

[Java] Java Static Variable และ Static Method

Push Notification คืออะไร มีวิธีทำอย่างไร (No Code)

เรื่องของ ++i กับ i++

[Java] Spring Framework กับความสามารถ Dependency Injection

มาตรฐานการตั้งชื่อตัวแปร (Naming Convention)