Posts

Showing posts from 2022

Git clone บน SSH ทำยังไง ดีกว่า HTTPS ไหม ?

Image
        Programmer หลายคนที่ใช้ Git เป็น version control คงจะคุ้นเคยกับการ clone source code จาก repository ไม่ว่าจะเป็น GitHub หรือ Gitlab หรือเจ้าอื่นๆ ก็มีวิธีเดียวกันคือ ใช้ URL ประมาณนี้ https://github.com/lordgift/test-project.git  % git clone https://github.com/lordgift/test-project.git         การ clone แบบนี้คือ ช่องทาง HTTPS ซึ่งไม่ว่าจะใช้ cli หรือ tool อื่น ก็จะต้องการให้เรา authentication ก่อนในครั้งแรกเสมอ เช่น การกรอก username, password หรือการใช้ single sign-on จากผู้ให้บริการต่างๆ 👇🏻👇🏻👇🏻👇🏻👇🏻         เมื่อยุคสมัยเปลี่ยนไปเรื่องความปลอดภัย (Security) ก็มีความสำคัญมากขึ้น การใช้งานเพียง username, password ดูมีความเสี่ยงมากขึ้น คอนเซป 2 factors authentication (2FA) ก็เข้ามา ทำให้การแค่ clone ก็ดูยุ่งยากเพิ่มขึ้นมาอีก          การ clone ผ่าน SSH           คือท่าที่ผู้ให้บริการ git repository ต่างๆ เพิ่มความสะดวกให้เหล่า Programmer มากยิ่งขึ้น เพียงแต่...

[iOS] PHPickerViewController เครื่องมือสำหรับหยิบรูปจาก Photo Library ของใหม่บน iOS 14+

Image
         PHPickerViewController  เป็น class สำหรับเรียกใช้งาน Photo Library ซึ่งมีความสามารถเพิ่มเติมจาก UIImagePickerController ที่เป็นของเดิมที่น่าจะคุ้นเคยกันอยู่แล้ว สิ่งที่เหนือกว่าของ  PHPickerViewController รองรับการเลือกหลายไฟล์ (Muli-selection) รองรับ livePhoto  เป็นการทำงานแบบ async ไม่มีการขอ permission  การใช้งานก็ไม่ได้ยุ่งยากมากมายไปกว่ากันซะเท่าไร import PhotosUI ตั้งค่าและเรียกใช้งาน  PHPickerViewController var configuration = PHPickerConfiguration() configuration.filter = .any(of: [.images, .livePhotos, .videos]) configuration.selectionLimit = 2 let picker = PHPickerViewController(configuration: configuration) picker.delegate = self self.present(picker, animated: true)         และแน่นอนว่า การ handle response จำเป็นจะต้องใช้ delegate ตัวใหม่ เราจะต้อง implement protocol  PHPickerViewControllerDelegate ตัวใหม่ด้วย func picker(_ picker: PHPickerViewCo...

[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 v...

[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           แต่ก็ต้องบอกว่าตัวเลือกแรกข้อเสียค่...

Facebook Comment

Recent Posts

Popular post of 7 days

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

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

Deeplink, Universal Links คืออะไร ทำงานร่วมกับ Mobile App ได้ยังไง

Popular

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

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

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

Port Forwarding สำหรับคนใช้ AIS Fibre

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

Android Auto & Apple Carplay คืออะไร ใช้งานยังไง

Deeplink, Universal Links คืออะไร ทำงานร่วมกับ Mobile App ได้ยังไง

วิธีการสมัคร Apple Developer Program และ Enterprise Program ฉบับลงมือเอง

พิมพ์ซองจากรายชื่อ excel ด้วยวิธี Mail Merge

ทดสอบ Mobile App แบบ Automated ด้วย Appium ทำยังไงกันนะ