사용 버전: 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(...
사용 버전: Kicad 5.1.4 저번 시간에 이어서 Freeroute를 사용해보겠습니다. 각 PCB 제조사마다 디자인 룰이란 것이 존재합니다. 우리는 그것에 맞추어서 선이나 구멍을 만들어줘야 합니다. 디자인 룰 설정을 합시다. 우선 PCB Layout Editor을 실행합니다. 파일 - Board Setup을 누릅니다. Design Rules - Net Classes를 누릅니다. 위의 창에서 디자인 룰을 설정합니다. '+'를 눌러 디자인 룰을 새롭게 만들든지, 기존의 Default를 변경하든지 편하신 대로 조정해줍니다. 유격: 선과 선 사이 간격 트랙 두께: 선 굵기 Via Size: Via 납 지름 비아 드릴: Via 구멍 지름 uVia Size: 모름 uVia Drill: 모름 dPair Width: 모름 dPair Gap: 모름 저는 Power Class를 추가하여, +5V와 GND에 Assign To Selected Nets로 한꺼번에 적용시켰습니다. 나머지 전선은 Default Class 적용을 받고, +5V와 GND만 Power class 적용을 받습니다. Ctrl + S로 저장을 한 번 해줍니다. 파일 - 내보내기 - Specctra DSN... 을 눌러줍니다. 적당한 위치에 dsn 파일을 저장합니다. NetBeans에서 Autoroute를 실행합니다. Open Your Own Design을 눌러, 아까 저장한 dsn 파일을 불러옵니다. Autorouter를 눌러줍니다. 전선 긋기, 최적화하기 순으로 진행되고, 완료가 되면, Postroute completed라는 문구가 나옵니다.전선 긋기나 최적화 중 마우스 왼쪽 버튼을 누르면, 그 상태로 정지됩니다. 최적화가 필요 없으면, 정지 후 바로 PCB에 사용하셔도 됩니다. File - Export Specctra S...
사용 프로그램 : MuseScore 3 총보와 파트보에 대해서 알아보겠습니다. 총보는 모든 악기들의 보표가 표시된 악보입니다. 보표의 악기 순서는 다음과 같습니다. 목관악기, 금관악기, 타악기, 독주 악기(피아노, 하프), 현악기 파트보는 자신이 연주하는 악기에 대한 보표만 존재하는 악보입니다. 총보(score) 파트보(part) 위의 악보에서 Flute 1은 첫마디를 한 뒤, 31마디는 아무 음도 없습니다. 그래서 뒤에 31로 숫자 적힌 긴 막대로 표시됩니다. Flute 2의 경우는 앞 2마디를 쉬고, 연주하고, 뒤 29마디를 쉽니다. 끝. 카테고리: Music
사용 버전: Python 3.7 운영 체제: Windows 10 Home x64 1909 사용 도구: Uncompyle6 포렌식 .pyc 파일 .py로 복구하기에 대해서 알아보겠습니다. 만약 여러분이 파이썬 파일을 지워버렸는데, .pyc 파일은 남아있다면 다시 복구할 수 있습니다. 보통 .pyc 파일은 수동으로 만들지 않는 이상 main 함수가 남아있지는 않습니다. 자동 생성되는 경우는 다른 python script를 참조할 때, 참조한 script가 pyc로 생성합니다. uncompyle6를 설치합니다. python -m pip install uncomply6 저는 해당 .pyc 파일을 사용하겠습니다. 아래 git에 들어가면 동일한 파일을 사용할 수 있습니다. https://github.com/shwoghk14/mnist_tensorflow/tree/master/Start%204/__pycache__ 사용법은 다음과 같습니다. cmd 창을 엽니다. uncompyle6 [복구할 .pyc 파일 이름] 완료되면, 다음과 같이 원본 py 내용이 나옵니다. uncompyle6 version python bytecode 버전 python 버전 file name compiled 날짜 Size 등의 중요한 정보와 함께 원본 python script가 출력됩니다. 해당 파일의 원본은 mnist_util.py입니다. 비교해 보시면 좋을 것 같네요. https://github.com/shwoghk14/mnist_tensorflow/tree/master/Start%204 끝. 카테고리: forensic [계수기] 앱 광고 외국: Hand Counter https://play.google.com/store/apps/details?id=starlight.jaehwa.handcounter 계수기 앱. 하나씩 개수를 셀 때 사용해보세요. ...
사용 버전 : KiCad 5.1.0 kicad 새로운 소자 추가하기에 대해서 알아보겠습니다. 추가할 소자는 시멘트 저항을 추가해 보겠습니다. 'Symbol Editor'를 눌러줍니다. 아래와 같은 화면이 나옵니다. 파일 - 'New Library...' 적당한 위치에 저장합니다. 만든 라이브러리를 KiCad의 어떤 프로젝트든 적용하고 싶다면, 전체 적용을 눌러주고, 이번 KiCad 프로젝트에만 적용하고 싶다면, Project를 눌러줍니다. 라이브러리에 추가된 것을 확인할 수 있습니다. 클릭 후, 'Create new symbol'을 눌러줍니다. 이름과 레퍼런스 이름을 적어주고, 확인을 누릅니다. 입력한 문구가 나타났습니다. 라이브러리에 수정 중인 상태는 색깔과 '*'문자가 생성됩니다. 우리가 추가할 시멘트 저항은 핀이 2 개입니다. 그리고, 네모난 형태를 가지고 있습니다. '키보드 M'으로 적당히 이동시켜줍니다. 'Add graphic rectangle to symbol body'를 눌러줍니다. 다음과 같이 네모를 그려줍니다. 네모 위에 마우스를 대고, '키보드 E'를 눌러줍니다. background를 선택해주고, 확인 누릅니다. 다음과 같이 네모에 색깔이 채워졌습니다. '키보드 P'를 눌러, 핀을 추가해줍니다. 저항이라, 'Pin name'은 안 적으셔도 상관없습니다. 'Pin number'은 'footprint'와 연결되기 때문에 잘 적어주셔야 합니다. 적당한 위치에 놔둡니다. 동일하게 한 번 더 합니다. 핀 회전은 '키보드 R'입니다. 저장해줍니다. 'Save a...
사용 버전: Python 3.6.8, Kivy 1.11.1 사용 프로그램: Atom 1.43.0 x64 기획: URL 소스 자료를 내 컴퓨터에 저장하는 앱. 파이썬 파일을 exe 파일로 만들어 보겠습니다. PyInstaller를 사용합니다. pip로 설치합니다. pip install pyinstaller 설치가 다 되었으면, 확인해봅니다. 잘 설치되었네요. 자, 만들어 봅시다. Shift + 마우스 오른쪽을 눌러 프로젝트가 있는 창에 PowerShell을 엽니다. cmd를 쳐서 cmd를 실행합니다. python -m PyInstaller --name [exe 파일 이름] [메인 python 파일 위치] 다시 명령어 창이 뜨면, 진행이 다 된 것입니다. dist와 build 폴더가 생기고, spec 파일이 생깁니다. URL Download.spec 파일을 열어줍니다. coll 부분을 다음과 같이 수정합니다. 저장 후, 다시 pyinstaller를 사용합니다. 기존의 파일이 사라진다는 경고문이 나오는데, y를 눌러줍니다. 완료되면, dist 폴더로 가서 Download.exe를 실행합니다. 실행이 됩니다. 하지만 Location을 누르면, 정상 작동하지 않고 꺼집니다. 이를 해결하려면, 다시 만들어야 합니다. cmd로 실행해보면, 이러한 문구가 나옵니다. 모듈 win32timezone이 없다. spec에 추가해줍니다. hiddenimports에 적어줍니다. 다시 pyinstaller로 exe 파일을 만듭니다. 잘 작동되는 것을 확인할 수 있습니다. 끝. 앱: https://play.google.com/store/apps/details?id=starlight.jaehwa.one 코드: https://github.com/shwoghk14/Kivy_for_Starter 카테고리: BlackSmith,...
딩기 요트 명칭을 알아보겠습니다. 딩기 요트(Dinghy Yacht)란 엔진이 없고 바람으로 가는 작은 요트(1~3 인승)를 말합니다. 돛단배랑 비슷하다고 보면 되는데, 돛단배와의 차이점은 바람을 거슬러 올라갈 수 있다는 점입니다. 엔진이 없는데 바람을 거슬러 올라간다? 신기하죠? 어떤 장치가 있기 때문인데요. 아래 명칭을 보면서 어떤 장치가 바람을 거슬러 오를 수 있게 해주는 지도 알려드릴게요. 고화질 참고 자료를 기대하셨다면 아쉽게도 그런 거 없습니다. 위에가 대략적인 딩기 요트의 명칭을 적은 그림입니다. 메인 세일: 주 동력원입니다. 바람이 요트를 움직일 수 있게 만들어 줍니다. 마스트: 메인 세일을 다는 기둥입니다. 붐: 메인 세일 밑에 자리하며 메인 세일을 펼쳐지게 만드는 막대기입니다. 붐뱅: 붐과 마스트를 연결해 주는 시트(밧줄)입니다. 블록(도르래)들이 달려 있습니다. 바우: 배의 앞 부분을 말합니다. 대거보드: 바람을 거슬러 오를 수 있게 해줍니다. 옆으로 뒤집히면 요트를 세우는 역할도 합니다. 완전히 빠지지 않는 것은 센터보드라고 부릅니다. 메인시트: 메인 세일의 각도를 조정할 수 있는 시트(밧줄)입니다. 러더: 배의 방향을 조정하는 부위입니다. 틸러: 러더를 조작할 수 있는 조정장치입니다. 대략 이 정도가 있는 것 같아요. 위에서 말한 바람을 거슬러 갈 수 있게 해주는 게 바로 대거보드 였습니다. 돛단배는 이 대거보드가 없기 때문에 바람을 거슬러 갈 수 없답니다. 끝. 카테고리: Yacht
사용 언어: 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...
사용 언어: Kotlin 1.5.10 사용 버전: Android Studio 4.1.2 안드로이드 Default background color setting을 해보겠습니다. 기본적으로 안드로이드 화면의 색깔은 하얀색입니다. 이 색깔을 한 화면에서만 변경할 수 있지만, 일관성을 위해서 모든 화면의 배경 색깔을 동일하게 변경해야 할 경우가 있습니다. 화면이 100 개가 있다면 하나씩 변경하기 힘들 겁니다. 그래서, 기본 화면 색깔을 변경해 줍니다. res - values 폴더에 themes.xml이나 styles.xml로 갑니다. themes와 styles의 차이점은 themes에는 colorPrimary 같은 의미적인 문구를 적는 곳이고, Styles에는 android:textColor 같은 View의 속성들을 적는 곳이라고 하는데, 그냥 둘 다 똑같습니다. 아무렇게나 쓰고 있습니다. <item name="android:colorBackground">[원하는 색상]</item> 을 적어줍니다. 저는 @color/teal_200을 사용했습니다. 원하는 색상은 color resource에 저장되어 있는 것을 써도 되고, #ffffff와 같이 직접 수치를 표기해도 됩니다. 결과를 볼까요? 이제, 새로운 화면을 만들어도 배경 색상이 동일하게 적용될 겁니다. 끝. 카테고리: Android
안드로이드 App architecture: State holders and UI state를 알아보겠습니다. 출처: https://developer.android.com/topic/architecture/ui-layer/stateholders UI(유아이) layer(레이어) 지침에서 논의했던 unidirectional data flow (UDF, 단방향 data 흐름)은 UI State(상태)를 생산하고 관리하는 것을 의미합니다. 또한 UDF를 관리하는 특별한 class를 state holder(홀더)라고 합니다. 당신은 state holder를 ViewModel 또는 일반 class에 적용할 수 있습니다. 이 문서에서는 좀 더 가까이에서 state holders 공부하고 UI layer에서의 역할을 다룹니다. 이 문서의 마지막에서 당신은 앱의 state를 어떻게 UI layer에서 다루는지 이해하게 됩니다. 이것은 UI state의 생성 pipeline(과정)을 다룹니다. 당신은 아래의 사항들을 이해하고 알게 됩니다. • UI layer에 존재하는 UI state의 type(타입) 이해 • UI layer에 있는 UI state의 logic(논리) type 이해 • ViewModel이나 일반 class 같은 state holder를 적정하게 선택하여 사용하는 방법 습득 ⊙ Elements of the UI state production pipeline: UI state 생성 과정의 요소; UI state와 logic이 UI layer를 정의합니다. • UI state: UI 상태; UI state는 UI를 설명하는 property(소유물)입니다. 여기에는 두 가지 종류의 UI state type이 있습니다. - Screen UI state(화면 유아이 상태)는 화면에 표시를 위해 필요한 것입니다. 예를 들면, NewsUiState class(클래스)에는 뉴스 기사와 UI를 표현하기 위한 다른 정보들이 있을 겁니다. 이 state는 보통 다른 la...
댓글
댓글 쓰기
궁금한 점은 댓글 달아주세요.
Comment if you have any questions.