- ๆๅกๅฏน่ฑกไธบ onevcat๏ผ่ตๆทฑ iOS ๅผๅ่ ๏ผๆๆฏๅ็็ธ๏ผๆไปฅไธ้่ฆๅบ่ฏใ้่ง โSlow is Fastโใๆจ็่ดจ้ใๆฝ่ฑกไธ้ฟๆๅฏ็ปดๆคๆงใgithub.com/onevcat, onevcat.com, onev.cat, onev.dev, x.com/onevcat ็ญ้ฝ่งไธบ็จๆท็ธๅ ณ
- ไปฃ็ ใๆณจ้ใๆ ่ฏ็ฌฆใๆไบคไฟกๆฏๅไปฃ็ ๅๅ ๅฎน็จๆ ๅ/็ฎๆด/ๆ็กฎ็ Englishใๆๆฏๆๆกฃไผๅ ไฝฟ็จ English๏ผ่ฅๆๆกฃ็ฐๆไธญๆ่ฏญๅข๏ผๅๆญฃๆไธญๆใไปฃ็ ๅ EnglishใEnglish ้ตๅฎ ASD-STE100 Simplified Technical English (STE)ใ
- ๅฏน้่ฆ่ฏดๆ็ป่ฎบใๆนๆกๆๅณ็ญ็ไปปๅก๏ผๆโ็ดๆฅ็ป่ฎบ โ ็ฎ่ฆๆจ็ โ ๅฏ้ๆนๆก โ ๅฏๆง่กไธไธๆญฅโ็ป็ป๏ผไธ่ฆ้ฟ็ฏๅคง่ฎบ๏ผไธ่ฆไบๆ ๅทจ็ป๏ผ็ฎๅ็กฎ่ฎคใ้ฒ่ๆไธ่ก็ญๆก็ดๆฅๅ็ญใ
- ๅจไฟฎๆนๆไปถๆถ๏ผไฝฟ็จๅพ ไฟฎๆนๆไปถไธญไฝฟ็จ็่ฏญ่จ๏ผๅๅฟไธญ่ฑๆๆททๆใ
- ๅค็ GitHub ็ธๅ
ณๆไฝไผๅ
ไฝฟ็จ
ghCLIใ - ็ฎๆ ๏ผไฝไธบๅผบๆจ็ใๅผบ่งๅ็็ผ็ ๅฉๆ๏ผ้ฆ่ฆ็ฎๆ ๆฏๅฎๆไปปๅกใๅฐฝ้ไธๆฌกๅฐไฝ๏ผๅๅฐๆ ่ฐๆพๆธ ๏ผๅชๅจๆ็กฎ่ขซๆ้ฎๆถๆ่งฃ้ๆๆฏ็ป่ใ
Learning VIM in Xcode comes with its own set of challenges and limitations, but there is enough there for you to give your mousing hand a break and master the keyboard.
A limited set of commands are available in Xcode, and this document attempts help ease the learning curve of using VIM in Xcode by providing a handy reference as well as what I find works for me in practice.
NOTE:
Commands are case-sensitive. A command of N means pressing shift + n on the keyboard.
This document is a work in progress! Leave a comment if you would like to see a change.
| public struct OptionalCodableEnum<T>: Codable where T: RawRepresentable, T.RawValue: Codable { | |
| public let value: T? | |
| public init(value: T) { | |
| self.value = value | |
| } | |
| public init(from decoder: Decoder) throws { | |
| value = T(rawValue: try decoder.singleValueContainer().decode(T.RawValue.self)) | |
| } |
Don't do the crime, if you can't do the time.
-- Anthony Vincenzo "Tony" Baretta
Vim is an amazing text editor. I love it. Really, I wouldn't [organize][organize] a Vim advent calendar if I didn't. But, as amazing as it is, Vim is not for everyone. It can't solve all your problems, or be a TUI version of your favorite IDE, or make you a better programmer, or land you that dream job in the Bay Area. But Vim can help you be more mindful, focused, and efficient, as long as you approach it with the right mindset.
Don't get me wrong, I certainly welcome you to try Vim, but I'm not a proselyte. I don't thrive on newbies. I just want you to use the right tool for the job and not waste yourโand anyone'sโtime on a fruitless quest.
| // | |
| // JonnyKeyValueObserver.swift | |
| // | |
| // Copyright (c) 2020 Junyu Kuang <lightscreen.app@gmail.com> | |
| // | |
| // Permission is hereby granted, free of charge, to any person obtaining a copy | |
| // of this software and associated documentation files (the "Software"), to deal | |
| // in the Software without restriction, including without limitation the rights | |
| // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
| // copies of the Software, and to permit persons to whom the Software is |
| /// Log the current filename and function, with an optional extra message. Call this with no arguments to simply print the current file and function. Log messages will include an Emoji selected from a list in the function, based on the hash of the filename, to make it easier to see which file a message comes from. | |
| /// - Parameter message: Optional message to include | |
| /// - file: Don't use; Swift will fill in the file name | |
| /// - function: Don't use, Swift will fill in the function name | |
| /// - line: Don't use, Swift will fill in the line number | |
| func logMilestone(_ message: String? = nil, file: String = #file, function: String = #function, line: Int = #line) -> Void { | |
| #if DEBUG | |
| // Feel free to change the list of Emojis, but don't make it shorter, because a longer list is better. | |
| let logEmojis = ["๐","๐","๐ฑ","๐","๐บ","๐ฝ","๐พ","๐ค","๐","๐","๐","๐ง ","๐","๐งค","๐ถ","๐ฑ","๐ญ","๐น","๐ฆ","๐ป","๐จ","๐ต","๐ฆ","๐ฆ","๐","๐ฅ","๐ฅ","โญ๏ธ","๐","๐ฅ","๐ฝ","๐","๐ฟ","๐น","๐","โค๏ธ","๐งก","๐","๐","๐","๐","๐"] | |
| let logEmoji = logEmojis[abs( |
The libdispatch is one of the most misused API due to the way it was presented to us when it was introduced and for many years after that, and due to the confusing documentation and API. This page is a compilation of important things to know if you're going to use this library. Many references are available at the end of this document pointing to comments from Apple's very own libdispatch maintainer (Pierre Habouzit).
My take-aways are:
-
You should create very few, long-lived, well-defined queues. These queues should be seen as execution contexts in your program (gui, background work, ...) that benefit from executing in parallel. An important thing to note is that if these queues are all active at once, you will get as many threads running. In most apps, you probably do not need to create more than 3 or 4 queues.
-
Go serial first, and as you find performance bottle necks, measure why, and if concurrency helps, apply with care, always validating under system pressure. Reuse
For a brief user-level introduction to CMake, watch C++ Weekly, Episode 78, Intro to CMake by Jason Turner. LLVMโs CMake Primer provides a good high-level introduction to the CMake syntax. Go read it now.
After that, watch Mathieu Ropertโs CppCon 2017 talk Using Modern CMake Patterns to Enforce a Good Modular Design (slides). It provides a thorough explanation of what modern CMake is and why it is so much better than โold schoolโ CMake. The modular design ideas in this talk are based on the book [Large-Scale C++ Software Design](https://www.amazon.de/Large-Scale-Soft
Author: Chris Lattner
NSTimeZone - Timezone Abbreviations ADT = "America/Halifax"; AKDT = "America/Juneau"; AKST = "America/Juneau"; ART = "America/Argentina/Buenos_Aires"; AST = "America/Halifax"; BDT = "Asia/Dhaka"; BRST = "America/Sao_Paulo"; BRT = "America/Sao_Paulo"; BST = "Europe/London";