목록분류 전체보기 (257)
Joonas' Note
SOLID 원칙들은, 소프트웨어 작업에서 프로그래머가 소스 코드를 읽기 쉽고 확장하기 쉽게 될 때 까지 리팩토링하여 코드 냄새를 없애기 위해 쓰기 좋은 지침이다. 정의 Single Responsibility Principle (SRP; 단일 책임 원칙) 하나의 클래스나 모듈은 단 하나의 책임만 가져야 한다. 하나의 함수가 여러 개의 일을 한다는 뜻은 예측 불가능하다는 의미이다. 예시 아주 단적인 예시로, 끝 원소를 제거를 하는 함수가 삭제되는 원소를 반환할 이유는 없다. 제거만 하면 된다. Element pop() { if (size < 1) throw "Empty"; size = size - 1; return array[size + 1]; // ? } 삭제되는 값을 얻고 싶다면, pop 하기 전에 끝자..
Proximal Policy Optimization (PPO, 2017) 목적 함수를 완성하기 위한 gradient 식은 아래와 같다. ∇θJθ≅∞∑t=0∫st,at,st+1∇θlnpθ(at|st) At pθ(st,at) p(st+1|st,at) dst,at,st+1 여기서 At는 n-step TD error 인데, At의 정의에 따라서 아래와 같이 달라졌었다. $$ A_t = \begin{cases} G_t & \longrightarrow REINFORCE \\ Q(s_t) & \longrightarro..

A3C (Asynchronous A2C, 2016) 샘플 사이의 상관 관계를 비동기 업데이트로 해결 리플레이 메모리를 사용하지 않음 on-policy 개념적으로는 A2C 를 여러개 두고, 각 에이전트마다 아래와 같이 gradient를 계산해서, 그걸 글로벌 네트워크에 반영하는 방식이다. Q(1)(st,at)(−∑yilogpi)→gradient(1)Q(2)(st,at)(−∑yilogpi)→gradient(2)⋮ 배경 A2C는 샘플 간 상관 관계에 문제가 있었다 시간의 흐름에 따라, 샘플을 수집했기 때문 또한 샘플에 따라 정책(π)이 업데이트 되고, 업데이트 된 정..

책을 읽다가 행렬식(determinant)에 대한 노트를 읽었는데, 기하학적으로 설명된 부분에 궁금한 점이 생겨서 정리해보고자 한다. 2X2 행렬 책에서는 2X2 행렬에 대해서 det(A) = a11a22−a12a21 을 이렇게 설명하고 있었다. 행렬 A = (a11a12a21a22) 의 행렬식은 두 개의 열 벡터 (a11a21) 와 (a12a22) 를 두 변으로 하는 평행사변형의 면적이다. 그럼 행렬 \(\begin{pmatri..

참고한 원문 Put your Android Studio on a diet How to make a deep clean of your Android Studio & Gradle junk files to fix up the mess. engineering.backmarket.com aar 내에 있는 클래스를 자꾸 인덱싱을 못 하길래 검색하다가 찾은 방법인데, 생각보다 유용해서 블로그로 옮긴다. 참고로 위 문제는 해결 못 했다. 🤔 요약 1) "Build -> Clean Project" 로 먼저 빌드된 파일들 삭제 2) "File -> Invalidate Chaces / Restart" 로 캐시 제거 (안드로이드 스튜디오가 다시 시작되면 gradle을 다시 읽고 처리하는 데 일단은 무시) 3) .gradle ..
함수의 실행 속도를 측정하는 코드이다. 다음과 같이 함수들을 미리 선언해둔다. import time def measure(func): """ Returns milliseconds how much time takes to run given func """ start = time.time() func() end = time.time() diff = end - start return diff * 1000 def bench(func, k: int = 1, params: list = [{}], title: str = ''): pcnt = len(params) pstr = f" x {pcnt} params" if pcnt > 1 else '' print(f"[run x {k}{pstr}] {title}") t = ..

최근에 회사에서 간단하게 파이썬으로 스크립트를 작성하다가 데이터베이스를 사용해야할 일이 있었다. 간단한 목적이라 단순한 연산들만 있으면 되는데, 불필요하게 거대한 사이즈의 패키지들(SQLAlchemy, PyMongo 등)을 설치해야하는 게 불편했다. 왜냐하면 경험상 이것들은 초기에 별도로 설정해야하는 작업이 굉장히 많기 때문이다. 그래서 in-memory 여도 좋으니 간단한 설정으로 마치 json 객체처럼 사용할 수 있는 패키지가 있는 지 찾아보았는데, 이 당시에는 찾지 못했다. 개발을 꽤 마친 이후에 tinyDB 라는 아주 비슷한 동작의 패키지를 발견했다. (지금와서 보면 dict 호환성 측면에서 아주 미묘하게 다르다.) 그럼 패키지를 사용하지 않고 built-in 패키지인 json 으로 커버하자니, ..
삼바 연동은 정상적으로 되고 있었고, 서버쪽 설정도 변경이 없었다. 특히 다른 IP와 PC에서는 되는 데 한 컴퓨터에서만 유독 계속 안되고 있었다. 인터넷에 나오는 방법들은 전부 해봤는데 모두 안됐고, CMD 로 실행하니까 그나마 오류 코드라도 알 수 있었다. CMD> net use \\ /user:joona 시스템 오류 1219이(가) 생겼습니다. 동일한 사용자가 둘 이상의 사용자 이름으로 서버 또는 공유 리소스에 다중 연결할 수 없습니다. 서버나 공유 리소스에 대한 이 전 연결을 모두 끊고 다시 시도하십시오. 해결 방법은 CMD를 관리자 권한으로 실행하고, 아래 커맨드를 순서대로 입력하면 된다. sc stop netlogon sc stop sessionenv sc stop lanmanworkstati..