프로그래밍 354

[lxc] 인스턴스 생성 실패 Failed detecting root disk device: No root device could be found 해결방법

ubuntu@:~$ sudo lxc launch ubuntu:22.04 manager1 Creating manager1 Error: Failed instance creation: Failed creating instance record: Failed initialising instance: Invalid devices: Failed detecting root disk device: No root device could be found lxc 인스턴스 생성시에 No root device could be found 오류가 떴을 경우, profile에 root disk에 대한 storage 설정을 해주어야한다. storage 목록이 만약에 비었다면, $ lxc storage ls +------+--------..

[CI/CD] Firebase Test Labs UI Test 자동화하기

CI/CD Tool로 Bitrise (CLI)를 사용하고 있는데, Workflow에 UI Test 단계를 추가해보려고한다. gn_test Workflow를 살펴보면, git pull 로 프로젝트를 땡겨오고, 이전에 만든 test용 apk를 제거한다. UI Test용 빌드를 생성하고, Firebase Test Lab으로 기기에 테스트 한다. gn_test: steps: - script@1: inputs: - content: "bash $ROOT/scripts/gitpull.sh" - script@1: inputs: - content: "bash $ROOT/scripts/delete_test_apk.sh" - android-build-for-ui-testing@0: inputs: - project_locat..

Android Studio 이전 릴리즈 다운받는 방법

오늘 Dolphin으로 업데이트 했다가 완전 버그로 고생했다. ㅠㅠ 다운그레이드 해보려고 했는데 구글에서 제공하는 Android Studio 다운로드 자료실에는 버전이 몇 개 없었다. https://developer.android.com/studio/archive?hl=ko 1. 버전정보 복사하기 아래 JetBrain 사이트에서 확인하면 모~~~든 Release 리스트가 나온다. 여기에서 다운로드 할 버전 번호를 복사해둔다. https://plugins.jetbrains.com/docs/intellij/android-studio-releases-list.html#2021 예를들면 Chipmunk Patch 2를 다운받고 싶다면 "2021.2.1.16"을 복사한다. 2. 자료실에서 다운로드 링크 복사 자료..

[해결방법] UnityPlayerActivity.java uses or overrides a deprecated API

UnityPlayerActivity.java uses or overrides a deprecated API Unity 안드로이드 aar파일을 추가/변경시 UnityPlayerActivity.java uses or overrides a deprecated API 오류가 뜨는 경우가 있다. Assets/Plugins 내의 Android 폴더를 삭제 후 빌드하면 제대로 작동한다. 만약에 이렇게 해도 안된다! 그 경우엔, 원래는 aar C:\Program Files\Unity\Hub\Editor\2021.3.10f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes 내의 classes.jar 를 사용하고 있었다면, mono\R..

[안드로이드] 예제로 보는 NavigationComponent

Navigation Component란? 기존의 안드로이드에서는 여러 단계의 Fragment 진행을 추적하고, 다루기 어려웠다. Jetpack의 Naviagtion Component는 이러한 문제를 개선하기 위해서 등장했는데, iOS의 스토리보드처럼 여러 화면 이동을 그래프(Graph)로 시각화하여 보여주고 NavController를 이용해 한 곳에서 전환을 관리할 수 있도록 도와준다. “오~좋은건 알겠는데, 다음 프로젝트에 써야지^^”라는 생각이 스친다! 당장 레거시 코드에서 어떻게 활용하면 좋을지 막막할 것이다. (내가 그랬기때문) 그래서 회원가입을 예로 들어서, 현재 진행중인 프로젝트에 Navigation Component를 사용하는 방법을 포스팅해보겠다. # 간단한 개념 3가지 NavGraph: ..

NGINX 서브 도메인 설정하기 (feat.CloudFlare)

1. 서브도메인 추가하기 (CloudFlare) CloudFlare > DNS > Add record에서 서브 도메인 레코드를 추가한다. Type은 CNAME, name에 해당 서브도메인이 들어간다. test.com에 api 서브도메인을 추가하고 싶을때 설정은 다음과 같다. 2. NGINX 설정파일 작성 새로운 nginx 설정파일을 추가한다. 내용은 다음과 같다. server { listen 80; listen [::]:80; server_name api.test.com; // 서브도메인 rewrite ^ https://api.test.com/$request_uri; // https로 보내기 } server { listen 443 ssl; server_name api.test.com; // 서브도메인 s..

[안드로이드] HiltWorker 오류 Could not create Worker 해결방법

HiltWorker로 Worker에 의존성 주입받기 우선 필요한 dependency는 다음과 같다. Coroutine은 예시에서 CoroutineWorker를 만들 것이기때문에 넣어주었다. implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.1" implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.1' implementation "com.google.dagger:hilt-android:2.38.1" kapt "com.google.dagger:hilt-android-compiler:2.38.1" implementation("androidx.hilt:hilt-work:1...

[안드로이드] WorkManager Worker 디버깅하기

AndroidStudio의 App Inspector > Background Task Inspector에서 현재 돌아가고있는 Background Task 목록과 상태를 확인할 수 있다. 하지만 사진처럼 Status가 Failed가 떴을때는 정확한 원인을 진단하기가 힘든데, 이때 Worker에 생긴일을 디버깅하는 방법을 소개한다. adb logcat | grep -e "WM-WorkerWrapper" 터미널에서 위 명령어를 사용하면 WorkerManager 관련 로그들이 필터링된다. adb가 낯설다면 이 포스트(adb 개념과 사용방법)를 참조하면된다. 아니면 AndroidStudio내 logcat에서 로그 수준을 Info로 낮추고 찾아도된다! 09-13 16:54:01.737 14800 14838 I WM-..

프로그래밍을 위한 수학 - 마찰력 모델링

마찰력(Friction)은 두 물체의 접촉면 사이에서 물체의 운동을 방해하는 힘이다. 그림에서처럼, 썰매와 눈이내린 언덕사이의 마찰력때문에 이 썰매는 언젠가 멈추게 될 것이다. 그러면 프로그래밍에서 이 썰매를 어떻게 멈추게 할 것인가? 이 글에서는 두 물체가 상대적으로 움직이면서 문질러질때 발생하는 운동 마찰력만을 다루려고 한다. 마찰력의 공식은 다음과 같다. 이제 마찰력을 크기와 방향 두 성분으로 나누어 어떻게 계산하면 되는지 살펴볼 것이다. 먼저 방향이다. 마찰력의 방향은 물체에 작용하고 있는 힘과 반대로 작용한다. 공식에서 v는 속도 벡터를 의미하는데, 속도 벡터에 -1을 곱해 방향을 반대로 틀었다. // 벡터의 크기 구하기 function getMagnitude(x, y) { return Math..

김래일의 애니캐 테스트 - 첫 React 프로젝트 회고

https://rail-otaku.nooks-list.com/ 시작은 충동적으로 나는 웹 개발을 가장 싫어했다. 왜냐면 도전적인 부분이 없어서였다. 모바일 앱 개발을 하다보면 부족한 메모리와 씨름하고, 멀티 스레딩을 하고, 필요에 따라 캐시해둘것도 많이 만나게 된다. 백엔드는 말할 것도 없다. 웹에서는 좀 다르게 느껴진다. 물론 웹도 최적화 같은건 필요하겠지만, CDN쓰냐 마냐나, 파일 용량부분에서 싸우는게 많다. 나는 React, Vue.js 같은 웹 프론트엔드 프레임워크가 만들어지기 전에 웹을 개발하는 방법을 배웠다. jQuery로 DOM element들을 직접 움직이는 방식인데, 지금은 패러다임이 완전히 바뀌었다. 웹을 Component 단위로 조각 조각 나누고, 각 Component들은 상태의 변..