사용 버전: Python 3.6.8 사용 프로그램: Atom 1.40.1 x64 파이썬 urllib.parse.quote()에 대해서 알아보겠습니다. 괄호 안에는 string, safe, encoding, errors 인자가 들어갑니다. urllib.parse.quote()는 아스키코드 형식이 아닌 글자를 URL 인코딩 시켜줍니다. String 인자에는 string, bytes 형식이 들어갑니다. String 형식. Bytes 형식 Safe 인자에는 URL encoding에서 제외할 문자를 넣습니다. 기본으로 '/'이 설정되어 있습니다. Encoding 인자에는 인코딩 이름이 들어갑니다. string에 들어가는 문자와 맞지 않으면 오류가 나옵니다. 기본적으로 'utf-8'이 들어갑니다. Error 인자에는 'strict', 'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace', 'namereplace', 'surrogateescape', 'surrogatepass'가 들어갑니다. 기본적으로 strict가 설정되어 있습니다. unicode 오류를 알려줍니다. Ignore의 경우 오류는 무시하고, 변환할 수 있는 것만 변환합니다. Replace는 에러 글자를 '?'로 변환해줍니다. 그리고 quote(...
사용 버전 : 5.1.0 kicad 기존 회로도 수정 및 추가에 대해서 알아보겠습니다. 'Schematic Layout Editor'를 눌러줍니다. 아래의 화면이 나옵니다. '키보드 A'를 누릅니다. 우리가 추가한 소자가 보입니다. 적당한 위치에 놓습니다. 전원을 연결할 커넥터도 추가해줍니다. 적당한 위치에 놓습니다. 시멘트 저항을 지나는 LED 회로를 추가하겠습니다. LED를 복사합니다. '키보드 C' 이번엔 직접 전선 연결 말고, 레이블 기능을 사용해 보겠습니다. '키보드 L'을 누릅니다. 적당한 이름과 크기를 설정하고, 확인을 누릅니다. 다음과 같이 놔둡니다. '키보드 C'로 복사를 해서, 맞은편 LED에도 붙여줍시다. '키보드 R'로 회전 가능합니다. 'Label'기능은 같은 이름을 가진 것끼리 전선으로 연결해줍니다. 선이 복잡하게 있으면, 보기 힘들기 때문에 Label을 많이 사용합니다. 나머지 부분은 다음과 같이 똑같이 만들어주세요. 'Assign PCB footprints to schematic symbols'를 눌러줍니다. 'Annotate'를 누릅니다. 다음과 같은 창이 나옵니다. 'View selected footprint'를 누르면, footprint를 미리 볼 수 있습니다. 적당한 footprint를 설정해줍니다. 확인을 눌러줍니다. 'Perform electrical rules check'를 눌러줍니다. 'Run'을 누릅니다. 이상이 ...
사용 언어: Kotlin 1.9.0 사용 버전: Android Studio Hedgehog 2023.1.1 안드로이드 컴포즈 Coil library를 알아보겠습니다. Coil은 Kotlin Coroutines를 사용하는 이미지 불러오는 라이브러리입니다. 이미지 URL 주소를 넣으면 그것을 불러오고 Cache(캐시) 처리까지 해줍니다. 이것을 수동으로 구현하려면 코드가 양이 많은데, Coil을 쓰면 간단하게 사용할 수 있습니다. 아래는 공식 사이트입니다. https://coil-kt.github.io/coil/ Coil은 Glide와 많이 비교되는데요. Glide 또한 이미지를 불러오는 라이브러리입니다. 아마 Glide는 Java로 이루어져 있고, Coil은 Kotlin으로 이루어져 있을 겁니다. 요즘은 앱들이 대부분 kotlin으로 만들기 때문에 라이브러리도 kotlin 쪽으로 옮기는 추세로 보입니다. Coil에는 이러한 장점이 있다고 하네요. Compose에서 사용법을 알아봅시다. 앱 용 build.gradle에 implementation("io.coil-kt:coil-compose:2.5.0")를 적어줍니다. Sync now를 눌러주세요. AsyncImage를 사용하는데요. 아래처럼 여러 속성들을 정의할 수 있습니다. 아래처럼 정의를 해봤습니다. 어랏. onLoading에 진행 바를 넣고 싶은데, 넣어지지 않는군요. 그렇다면 SubcomposeAsyncImage를 사용합니다. 최종 형태입니다. 실행해 볼까요? 참고 프로젝트: https://github.com/Jaehwa-Noh/Practice-Amphibians/tree/compose-amphibians-app 끝. 카테고리: Android, Compose
사용 버전 : KiCad 5.1.0 kicad 회로도 만들기에 대해서 알아보겠습니다. 우선, 프로젝트를 만듭니다. 파일 - 새 파일 - Project... 'Create a new directory for the project'를 눌러주면, 폴더도 같이 생성됩니다. 'Schematic Layout Editor'를 눌러줍니다. 맨 처음 실행하면, 라이브러리 설정이 나옵니다. 추천(recommended) 하는 항목을 선택합시다. 위와 같은 화면이 나옵니다. '키보드 A'를 눌러줍니다. led와 저항이 있는 간단한 회로를 그려보겠습니다. 적당한 위치에 '마우스 좌 클릭'을 합니다. 화면 이동은 '마우스 휠 버튼'입니다. 같은 과정으로 저항도 추가합니다. 소자의 회전은 '키보드 R'입니다. '키보드 P'를 눌러줍니다. 5V를 넣어줍니다. GND도 넣어줍니다. 사이에 전선을 넣어줍니다.'키보드 W'입니다. 저항과 LED 위에 '?'가 있습니다.이것은 소자가 확정되지 않았다는 뜻입니다. 확정해줍니다. Annotate schematic symbols를 눌러줍니다. Annotate를 눌러줍니다. complete(완료) 되면, 닫기를 눌러줍니다. 아래 그림과 같이 '?'가 사라지고, 숫자가 자리 잡은 것을 볼 수 있습니다. 저항 위에 있는 'R'을 저항값으로 변경해봅시다. 위와 같이, 마우스를 올리고 '키보드 E'를 눌러줍니다. 변경 창이 나옵니다. 5k로 변경하고, 확인을 눌러줍니다. R이 5k로 변경된 것을 확인할 수 있습니다. 다음은 풋프...
사용 버전: Android Studio 4.1.1 사용 언어: Kotlin 1.4.20 안드로이드 Notification with Full Screen을 알아보겠습니다. 알람이나 전화 같은 경우 사용자에게 큰 화면으로 Notification을 보여줘야 합니다. 이때 사용하는 게, FullScreenIntent입니다. 기본 Notification이 필요합니다. https://shwoghk14.blogspot.com/2020/09/android-notification.html FullScreen으로 띄울 Activity를 하나 만듭니다. 저는 FullScreenNoonActivity로 만들었고 모습은 아래와 같습니다. 위의 Activity를 이용하여 NotificationCompat.Builder가 있는 곳에 fullScreenIntent를 만듭니다. setContentIntent는 설정할 필요 없습니다. setFullScreenIntent를 설정합니다. priority는 PRIORITY_HIGH가 필요합니다. 그리고 Android 10 이상의 경우 권한이 필요합니다. AndroidManifest.xml에 USE_FULL_SCREEN_INTENT를 추가합니다. 실행해봅시다. 분명 FullScreenIntent로 실행했음에도 Heads-up Notification이 나옵니다. 눌러봅시다. ...
사용 언어: Swift 5 사용 버전: Playgrounds 4.4.1 iOS 스위프트 callAsFunction을 알아보겠습니다. callAsFunction은 struct를 함수처럼 부를 수 있게 해줍니다. 즉, 긴 함수 이름을 적을 필요 없이 바로 부를 수 있게 되어 편합니다. 공식 문서입니다. https://docs.swift.org/swift-book/documentation/the-swift-programming-language/declarations#Methods-with-Special-Names 예시로 이런 게 있네요. Playground에서 한 번 테스트해 봅시다. CallableSumTest라고 struct를 만든 다음에 callAsFunction을 정의해 줍니다. 짜잔! 1과 2를 더한 3이 나왔네요. 물론 callAsFunction을 직접 불러도 됩니다. 하지만 이럴 경우에는 callAsFunction을 쓸 이유가 없지요. 끝. 카테고리: iOS
사용 버전: Android Studio 4.0 사용 언어: Kotlin 1.3.72 안드로이드 Custom IME(Input method editor) 만들기를 해보겠습니다. IME를 간단히 설명하면 키보드입니다. 키보드를 만들어봅시다. 키보드로 사용할 Custom View가 필요합니다. https://shwoghk14.blogspot.com/2020/07/android-custom-view.html Class를 하나 만듭니다. 저는 MyIMEservice로 만들었습니다. 아래와 같이 수정합니다. res 우 클릭 - New - Android resource File을 누릅니다. File name, Resource type을 설정합니다. 다음과 같이 적습니다. 그리고, manifests로 갑니다. <application> </application> 사이에 service를 넣습니다. 앱을 설치하고 실행합니다. 달라진 게 없습니다. 우리가 강제로 설정할 수 없습니다. 그 이유는 보안 문제 때문에 구글에서 막았습니다. 자, 이제 키보드를 설정해봅시다. 설정 - 언어 및 입력 가상 키보드 키보드 관리 우리가 만든 inAppKeyboard가 보입니다. Manifest의 label이 이름으로 사용되고, xml의 imeSubtypeLocale이 아래 작은 설명으로 사용됩니다. 다시 돌아와서 키보드 관리로 들어갑니다. ...
사용 언어: Swift 5 사용 버전: Xcode Version 16.4 (16F6) iOS 오류 Undefined symbol Testing.Trait를 알아보겠습니다. Xcode를 최신 버전으로 업데이트해서인지, OS를 최신 버전으로 업데이트해서 인지, 잘 되던 빌드가 갑자기 안되었습니다. 오류 내용은 다음과 같습니다. Showing Recent Messages Could not find or use auto-linked framework 'CoreAudioTypes': framework 'CoreAudioTypes' not found Could not find or use auto-linked framework 'Testing': framework 'Testing' not found Could not parse or use implicit file '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks/SwiftUICore.framework/SwiftUICore.tbd': cannot link directly with 'SwiftUICore' because product being built is not an allowed client of it Undefined symbol: associated type descriptor for Testing.Trait.TestScopeProvider Undefined symbol: protocol descriptor for Testing.SuiteTrait Undefined symbol: method descriptor for Testing.SuiteTrait.isRecursive.getter : Swift.Bool Undefined sym...
사용 언어: Kotlin 2.0.20 사용 버전: Android Studio Ladybug | 2024.2.1 Patch 3 Android Compose automation for getting localized images to use on Play Store app image를 알아보겠습니다. 저는 앱을 전 세계에 출시하고, 여러 언어로 제공해 주고 있습니다. 무려 67개 언어인데요. 사실 맞게 번역한 건지는 모르겠습니다. 이렇다 보니, 스토어의 앱 이미지를 변경할 때, 같은 이미지라도 언어를 달리하여 여러 장 찍어야 하는 노력이 필요하며, 여기에 들어가는 시간이 상당합니다. 2~3일 넘게 걸리는 것 같네요. 그래서 지금 앱 이미지가 옛날 이미지인 상태로 두었습니다. 스토어 이미지 현재 앱 이미지 엄청나게 다른데요. 오늘은 이것을 자동화해보겠습니다. Android에는 Screenshot test라는 것이 존재합니다. Screenshot을 비교해서 앱이 어떻게 달라졌나 확인하는 테스트인데요. 이것을 이용해서 Screenshot을 마구 찍어볼 겁니다. 오늘 사용할 기술입니다. Compose Screenshot Testing. https://developer.android.com/studio/preview/compose-screenshot-testing 자세한 사용법은 다루지 않겠습니다. libs.versions.toml에 다음과 같이 버전을 넣어줍니다. Plugin도 같이 넣어줍니다. screenshotVersion = "0.0.1-alpha07" android-screenshot = { id = "com.android.compose.screenshot", version.ref = "screenshotVersion" } gradle.properties에 다음을 적어줍니다. android.experimental.enableScreenshotTest=true 모듈용 build.gradle.kts에도 androi...
댓글
댓글 쓰기
궁금한 점은 댓글 달아주세요.
Comment if you have any questions.