pinslog/Log.daily()

    [Kotlin] tailrec 꼬리재귀<img src=">

    [Kotlin] tailrec 꼬리재귀

    알고리즘 문제를 풀다가 알게 된 녀석 문제 : 콜라츠추측 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이 문제의 키워드는 '오버플로 Overflow' 이다. 오버플로 Overflow 넘쳐 흐른다는 뜻으로, 컴퓨터의 메모리가 8비트의 데이터를 저장할 수 있다고 하고, 편의상 부호는 없는 양수인 경우만 고려해 보자. 가장 작은 값은 0000 0000 (=0) 이며, 1씩 증가시키면 0000 0001 (=1)을 거쳐 최댓값인 1111 1111 (=255)에 도달하게 된다. 여기에서 1을 다시 한번 더하게 되면 최댓값의 범위를 넘어서게 되고, 최솟값인 0000..

    [IDE] VSCode 에서 Kotlin 시작하기 (feat. MAC OS)

    [IDE] VSCode 에서 Kotlin 시작하기 (feat. MAC OS)

    1. Java 설치하기 brew install --cask adoptopenjdk 나는 이미 설치가 되어 있었다. 확인하려면 java —version 을 입력한다. 2. Kotlin 설치하기 brew install kotlin 설치가 끝나면 제대로 설치되었는지 확인한다. kotlinc -version 3. VSCode 셋팅하기 1) Code Runner 설치 2) Kotlin Language 설치 4. 사용해보기 TroubleShooting 코드를 입력하고 실행했는데 아래와 같은 문구가 뜨며 결과를 출력해주지 않았다. HelloWorld.jar에 기본 Manifest 속성이 없습니다. 저장을..안해서..그랬다 ㅎ 이렇게 해서 사용하고 있었는데 그래도 인텔리제이를 따라올 순 없어서 그냥 교육용 인텔리제이를..

    [Git] 머지 취소하기

    [Git] 머지 취소하기

    실수로 다른 브랜치와 머지 해버린 적이 있었다. 이럴 때 머지를 취소하기 위한 명령어는 다음과 같다. git reset --merge [이전 커밋 해시] References Git에서 머지 되돌리기 - 마지막 머지를 취소하는 방법 브랜치는 이미 프로덕션에 있는 코드를 함부로 변경하지 않으면서 작업할 수 있도록 해주는 깃의 필수적인 부분입니다. 다른 브랜치에서 작업을 마친 후 main 브랜치에 병합(merge, 이하 머지)하여 www.freecodecamp.org

    [Flutter] iOS 디바이스 개발자 옵션 및 연결 관련 문제 해결하기

    [Flutter] iOS 디바이스 개발자 옵션 및 연결 관련 문제 해결하기

    iOS 디바이스에서 앱 실행하기 개발자 모드 켜기 [설정] - [개인정보 보호 및 보안] - 보안 섹션 [개발자 모드] 켬 신뢰하는 디바이스 설정 처음 앱을 디바이스에서 실행하려고 하면 신뢰할 수 없는 어쩌고...하면서 대화창이 뜬다. 이때 신뢰하는 디바이스 설정을 해주어야 앱을 정상적으로 빌드할 수 있다. [설정] - [일반] - [VPN 및 기기관리] - 개발자 앱 선택 - 신뢰 TroubleShooting - 사이닝 관련 flutter 프로젝트에서 처음으로 실제 iOS 디바이스에서 실행을 하려면 Xcode 상에서 최초 연결이 필요하다. 그러기 위해서 개발자 모드를 켜줘야 하고… 그리고 사이닝 관련 설정에서 팀을 지정해줘야 한다. Runner 탭 클릭 - Signing & Capabilities 에서..

    [Android] Activity 스택 관리 (feat. Intent와 Flag)

    [Android] Activity 스택 관리 (feat. Intent와 Flag)

    Case1. 특정 액티비티를 상단에 띄우기 A - B - C 순으로 스택이 쌓였다고 할 때, C가 사용자의 화면에 떠있을 것이다. 이때 C에서 A로 이동하면서 B, C를 스택에서 제거하고 싶다면 Intent의 Flag 중 FLAG_ACTIVITY_CLEAR_TOP 을 사용하면 된다. Intent intent = new Intent(this, AActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); finish(); 이동하려는 액티비티가 스택에 이미 존재하면 그 위에 쌓여있는 모든 스택을 제거하고 해당 액티비티가 다시 상단에 오르게 되는 것이다. Case2. 스택을 모두 제거하고 싶을 때 스택에 이동하려..

    [Java, Kotlin] SimpleDataFormat 밀리세컨까지 나타내기

    [Java, Kotlin] SimpleDataFormat 밀리세컨까지 나타내기

    밀리세컨드까지 나타내야할 때가 있다. 찾아다니다 까먹지 않기 위해 기록한다. val sdf = SimpleDateFormat("yyyy.MM.dd HH:mm:ss.SSS", Locale("ko", "KR")) val dateString = sdf.format(System.currentTimeMillis()) println(dateString) // 2023.11.30 23:14:26.975 패턴은 yyyy.MM.dd HH:mm:ss.SSS 인데 여기서 주의할 점은 뒤의 SSS는 반드시 대문자로 써주어야 한다는 점이다. yyyy.MM.dd HH:mm:ss.sss 로 입력할 경우 결과는 2023.11.30 23:15:47.047 와 같다.

    [Android] onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState)

    [Android] onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState)

    화면을 그리기 위해 여느 날과 다름 없이 onCreate()를 호출했다. 그러나 아무것도 그려지지 않았다. 아니 도대체 왜....? 그래서 열심히 화면을 들여다 봤다. 보통 화면이 create될 때 호출되는 함수는 잘 알겠지만 onCreate(@Nullable Bundle savedInstanceState) 이다. onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) 하지만 나는 다른 onCreate(위)를 호출하여 이러한 문제가 생긴 것인데, 이 onCreate는 도대체 뭐하는 친구이며, 언제 호출될까? 하는 일은 화면은 생성하는 것으로 동일하지만 파라미터부분에서 알 수 있듯 savedInsta..

    [NCP CSR] 기능 구현을 하며 만난 에러와 대응방안

    [NCP CSR] 기능 구현을 하며 만난 에러와 대응방안

    음성인식 기능 구현을 위해 네이버 클라우드 CSR(CLOVA Speech Recognition) SDK 를 사용하고 있는데, 기능을 구현하며 만난 에러와 그에 대한 대응방안에 대해 정리하려고 한다. (검색을 해봐도 나오지 않아 남긴다..정확한 방법이 아닐 수 있다.)음성인식 기능 사용중 onPause() 호출시 에러음성인식 중에 홈버튼 또는 최근작업 버튼을 눌러 앱이 pause - stop 상태였다 다시 돌아오면 앱이 아예 재시작이 돼버리는 현상을 발견했다. (process가 아예 다시 시작됨) 음성 관련 예외는 제대로 로그도 남지 않아 디버깅이 힘들어 아주 난감하다. CSR의 가이드대로 onStart()에서 음성인식 관련 자원을 초기화하고, onPause()에서 음성인식 즉, 음성 녹음이 진행중이면 멈..

    [Google Play Console] 개발자 계정 확인 기한

    [Google Play Console] 개발자 계정 확인 기한

    WW가 출시되고 나서, 하루에 한번씩 플레이스토어 콘솔에 들어가본다. 오늘은 들어갔더니 메인화면에 이런 것이 떠있었다.기한이 선착순이라니 당장 시작하기를 눌러 들어갔다. 그리고 완료하지 않으면 프로필과 앱이 삭제된다니 너무 무시무시한 것 아닌가... 계정 확인 시 제공해야 하는 항목을 보니 신원 확인을 위한 공문서...라는 항목이 마음에 턱하고 걸린다. 비즈니스 (조직) 계정이라면 조직 인증을 위한 공문서를 제공해야하다니.... 뭐가됐든 귀찮은 일임에는 틀림없다. 기한 선택을 눌러보니 가장 빠른 일자가 24년 8월이었다. 도대체 몇달이나 남은거얏 지금 하라고 해도 할 수 있을 것 같아 가장 빠른 걸로 신청해두었다. 다음주에 회사가면 신청해둬야겠다.

    [Android Studio] Live Template으로 JavaDoc 쉽게 작성하기

    [Android Studio] Live Template으로 JavaDoc 쉽게 작성하기

    코드를 보다보면 위와 같은 형식의 주석을 만난 적이 있을 것이다. 편집창에서 /** 를 입력하면 자동으로 주석의 색이 변하면서 아래와 같이 되는데, 이를 JavaDoc이라고 한다. Java 소스 파일에서 API 문서의 HTML 페이지를 생성합니다. JDK가 설치되어있다면 JavaDoc을 사용할 수 있다고 한다. JavaDoc을 작성하고 해당 클래스에 커서를 갖다대면 위와 같이 주석의 내용을 확인할 수 있다. 주석을 생활화(?)해야하는 개발자에게 아주 중요한 것이 아닐 수 없다. 그런데 클래스를 생성할 때 마다 위의 정보를 하나하나 일일이 작성하는 것은 너무 귀찮다. 좀 더 쉽게 할 순 없을까? 그때 필요한 것이 바로 IntelliJ에서 제공하는 Live Template이다. 라이브 템플릿을 사용하여 루프..

    [Android Studio] 내가 몰랐던 단축키

    [Android Studio] 내가 몰랐던 단축키

    IDE를 잘 쓰면 생산성이 굉장히 높아진다. 예전에 메소드 시그니처를 변경해주는 기능을 몰라서 메소드를 하나하나 찾아가서 변경해주던 기억이 난다... 이름 변경하는 건 또 어떻고... (메소드 시그니처는 윈도우 기준 ctrl + F6, 이름 변경은 shift + F6 이다.) 애석하게도 삽질을 한번 해야 땅파는 법을 체득하고만다 아무튼 우리 가족보다 자주 보는 안드로이드 스튜디오 좀 더 쉽고 간편하게 사용하기 위한 단축키에 대해 알아보려고 한다. 함수 블록 설정 공식문서에 따르면 정확한 명칭은 '계속 증가하는 코드 블록 선택' 이다. 아래 예시를 보면 내가 뭘 말하고자 하는지 알기 쉬울 것이다. 맥에서는 option + 위쪽 화살표 윈도우에서는 ctrl + w 반대로 설정 해제는 맥은 option + 아..

    [Android] Thread.UncaughtExceptionHandler()  와 Firebase Crashlytics

    [Android] Thread.UncaughtExceptionHandler() 와 Firebase Crashlytics

    [Android] 전역적인 예외처리하기 | Thread.setDefaultUncaughtExceptionHandler상황 앱 사용 중 앱이 픽 죽어버리거나 응답 없음 창(ANR)이 뜨는 것을 경험한 적 있을 것이다. 한두번이야 왜이래~~ 하면서 다시 앱을 실행해 사용하겠지만 이러한 상황이 지속된다면? 끔찍한 사www.pinslog.com전역적인 예외 (정확하게는 잡아내지 못한 예외)를 처리하기 위해 사용중이던 Thread.UncaughtExceptionHandler() 앱이 갑자기 픽 죽어버리는 것을 방지하기 위해 해당 핸들러를 통해 오류가 발생하였음을 알리고 앱을 재시작할 수 있도록 처리를 해두었다. 그리고 원인을 파악하여 해결하기 위해 Firebase Crashlytics를 이용해 크래쉬 로그를 수집..