IntelliJ [IntelliJ] Kotlin to Java 디컴파일 kotlin 스펙에는 문제가 없으나 java 컴파일 과정에서 문제가 있는 경우가 있다. 예를 들면 제네릭의 경우 Type erasure 때문에 함수명 등이 겹칠 수 있다. 이런 경우 IntelliJ에서 디컴파일을 해보면 문제를 파악하기 쉽다. fun List<Int>.avg(): Double = this.sum().toDouble() / this.size fun List<Double>.avg(): Double
grafana [Grafana] variable 상단 고정시키기 그라파나 대시보드 상단에 variable이 있는데, 스크롤을 하면 보이지 않아 대시보드가 긴 경우 위아래로 왔다갔다 해야되는 불편함이 있다. Sticky variable 같은 기능이 있나 좀 찾아봤다. Dashboard: Fixed template variables in top of windows as you scroll · Issue #11166 · grafana/grafanaUI Feature request When scroll down page to view extra graphs, fixed
unity [Unity, C#] Collision, Trigger 일어나는 조건 유니티에서 Collision(콜리전, 충돌)과 Trigger(트리거)는 물리적 충돌 처리와 관련된 두 가지 주요 이벤트 타입이다. 각각의 특징과 사용 방법은 다음과 같다. 1. Collision (충돌) 1. 두 개의 collider(콜라이더)가 서로 물리적으로 충돌하는 상태를 의미한다. 2. 충돌 이벤트가 발생할 때, 물리적 힘이 작용하고 물체들은 서로 밀려난다. 3. 적과
redis [Redis] ACL Redis ACL(Access Control List, 액세스 컨트롤 리스트)을 사용해 커넥션이 실행할 수 있는 명령과 액세스할 수 있는 키를 제한할 수 있다. 예를 들어 FLUSHALL같은 위험한 명령어는 실수로라도 입력될 수 없도록 막을 수도 있으며, 여러 부서나 모듈이 공유하는 Redis에서 차이니즈월을 만드는 것도 ACL로 할 수 있다. ACL은 Redis 6 이상부터
prometheus Prometheus operator를 이용한 Memcached 지표 수집 예제 이번 글에서는 prometheus에 대해 가볍게 소개하고, Prometheus operator를 이용해 memcached의 지표를 수집하는 예제를 만들어보겠다. Prometheus 소개 프로메테우스(Prometheus)는 모니터링 시스템으로, 메트릭 정보를 주기적으로 수집해 시계열 DB(TSDB, TimeSeries DB)에 저장하고, PromQL(Query Language)을 이용한 시각화 및 추출을 지원한다. 기본 구성은 이렇게 생겼고, 기본적으로는 메트릭을 긁어가는(scraping) 방식으로
unity [Unity, C#] 제일 가까운 아이템 줍기 유니티에서 아이템 줍기 기능을 구현하려면, 1) 플레이어가 아이템을 인식할 조건을 추가하고 2) 해당 조건을 만족할 때 아이템을 줍는 기능을 구현하면 된다. 1. 플레이어의 자식으로 빈 GameObject를 추가한다. 2. 추가한 GameObject의 컴포넌트로 Circle Collider(콜라이더)를 추가해준다. 해당 Collider의 Is Trigger를 체크해준다. 3. 추가한 GameObject의 컴포넌트로 스크립트를 추가해준다. (OnTriggerEnter) 💡 Trigger? GameObject끼리
jenkins [Jenkins] ws-cleanup_{timestamp} 폴더 지우기 Jenkins(젠킨스) slave worker 용량이 부족해 Offline 상태가 되었는데, 확인해보니 ws-cleanup_{timestamp} 형식의 폴더가 계속 쌓여서 용량이 가득 찬 것이었다 Workspace Cleanup 이라는 플러그인을 쓰고 있는데, 과거 버전에 삭제가 제대로 안되는 버그가 있다고 한다 (비슷한 현상이 나타나는 유저의 질문글: https://stackoverflow.com/q/44364044/4295499) 일단 아래처럼 crontab을 추가하는 식으로
unity [Unity, C#] Raycast를 사용해 벽 통과 방지하기 유니티로 게임 개발을 하다 보면, 플레이어와 벽에 모두 collider(콜라이더)를 넣었음에도 불구하고 플레이어를 벽으로 계속 돌진시키면 플레이어가 벽을 통과하는 현상이 발생한다. 이는 Transform.Translate가 이동 전 위치와 이동 후 위치만을 고려하고, 그 사이에 collider가 있는지는 고려하지 않기 때문이다. 아래 그림처럼 A가 플레이어의 이동 전 위치, B가 플레이어의 이동 후
telegram 텔레그램으로 공탐지수 봇 만들기 BotFather(https://t.me/botfather)를 이용해 텔레그램 봇을 쉽게 만들 수 있다. 공탐지수를 매일 메시지로 보내주는 봇을 만들어보자 BotFather 친구추가 및 봇 추가 만드는건 쉬우니 넘어간다. HTTP API 토큰은 유출되면 안되니 조심하자. bot api는 https://core.telegram.org/bots/api 여기서 확인할 수 있고, 이중에서 sendMessage를 이용해보자 # 기본 형식
mariadb MariaDB 11 도커 이미지 헬스체크 이슈 2023/6/27부터 MariaDB 11.0 도커 이미지에 mysqladmin이 빠져 docker compose에서 헬스체크가 실패하는 문제가 있다 mariadb: image: mariadb restart: always volumes: - './mariadb/:/var/lib/mysql/' healthcheck: test: ["CMD", "mysqladmin", "ping", "--silent"] 기존에는 보통 mysqladmin ping으로 헬스체크를 했다 mysqladmin을
unity [Unity, C#] 몹을 랜덤한 경로로 순찰(patrol)시키기 토이 프로젝트로 좀비 TPS 게임을 만들고 있다. 순찰(patrol)이란 몹이 일정한 지점들을 돌아다니는 것을 이야기한다. 좀비 게임을 생각해보면, 좀비가 가만히 있기만(idle) 하면 난이도가 너무 쉬울 것이다. 좀비가 idle/patrol 상태에 있다가 플레이어를 발견하면 추적(chase) 모드로 전환되어 플레이어를 쫓아간다. 이때 빠르게 도망가지 못하고 좀비와의 거리가 일정 값 이하가
C++ doxygen 사용법, github pages로 배포하기 doxygen(독시즌)은 소스코드 주석으로 문서를 만드는 프로그램이다. 설정은 Doxyfile(독시파일)로 관리가 가능하며, 옵션이 다양하지만 이번 포스트에서는 기본 설정으로 C++ 프로젝트를 github actions을 이용해 github pages에 배포하는 것까지만 해보도록 하겠다. Doxygen 설치 및 설정 brew install doxygen 설정 추가와 테스트를 위해 로컬에 doxygen을 설치한다 # 문서 만들기 doxygen # Doxyfile 생성
pnpm npm/yarn에서 pnpm 마이그레이션 방법 npm의 여러 문제를 해결하고 drop-in replacement로 사용될 수 있는 pnpm으로 이주해보자. pnpm의 장점은 이곳에 잘 나와있다. 설치환경 * macOS * nvm: 노드 환경 관리를 위해 사용 마이그레이션 방법 1) nvm 설치 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash * 설치 스크립트: https://github.com/nvm-sh/nvm#
linux grep 사용법 grep은 파일에서 패턴에 맞는 라인을 출력하는 유틸리티다. 사용법 grep [OPTION...] PATTERNS [FILE...] grep [OPTION...] -e PATTERNS ... [FILE...] grep [OPTION...] -f PATTERN_FILE ... [FILE...] 기본적으로 정규표현식을 사용하며, 옵션에 따라 확장 정규식(Extended Regular Expression), 펄 호환 정규식(PCRE, Perl-Compatible Regular Expression) 등을 쓸 수 있다. grep을 쉘에서 사용할 때, 패턴은 일반적으로
c# [C#] Delegate, Func, Action 이해하기: 차이점 및 사용 사례 C#의 Delegate, Func, Action은 C/C++의 함수 포인터와 비슷한 개념으로, 이벤트 처리 및 비동기 프로세스 처리 등을 위해 유연하고 재사용 가능한 코드를 작성하는 데 필수적인 요소다. 본 포스팅에서는 Delegate, Func, Action 각각의 개념, 차이점, 사용 사례에 대해 설명한다. 1. Delegate Delegate는 특정 메서드 시그니처(입력 매개변수와 반환 타입)
kubernetes [k8s] kind metrics-server 설치 metrics-server는 HPA, VPA 등의 Autoscale을 위한 메트릭 수집 서버다. 각 노드의 kubelet을 이용해 node, pod의 CPU, memory 메트릭을 수집하며, 이를 kube-apiserver로 전달한다. kind로 만든 클러스터에 metrics-server를 helm으로 설치해보자. 간단한 설치 및 사용법은 이전 글을 참고하자 * https://blog.joe-brothers.com/macos-local-kubernetes-cluster-with-kind/ YAML manifest 또는 공식 helm chart로 설치할 수 있다 helm을
kubernetes [k8s] macOS kind 로컬 클러스터 구성 kind(kubernetes in docker)는 로컬에서 쿠버네티스 클러스터를 쉽게 구성할 수 있게 해주는 도구다. 노드 이미지(kindest/node)를 사용해 도커 컨테이너 하나당 노드 하나로 구성하는 식으로 되어 있으며, 멀티 노드로 구성된 클러스터도 간단히 만들 수 있다. 설치 * docker * kubectl * kind 사용법 $ kind create cluster Creating cluster "kind"
dbeaver DBeaver에 저장된 커넥션 정보 확인 방법 DB 클라이언트중 하나인 디비버(dbeaver)를 사용하던 중 옛날에 저장해놓은 DB 커넥션 패스워드 정보가 기억이 안났다. 커넥션 정보는 로컬에 있으며, 암호화 키는 소스코드에 있기 때문에 복호화를 해서 저장된 정보를 확인할 수 있다. * https://github.com/dbeaver/dbeaver/blob/d69a75e63bf0a00e37f6b4ab9c9aa4fcaa0ded23/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/
jenkins [Jenkins] slave offline 상태 확인하는 Job 만들기 우리 부서에서는 여러 용도로 젠킨스를 이용하고 있는데, jenkins slave agent가 여러 이유로 종종 offline이 되어서, 배치가 제대로 실행되지 않는 경우가 생겼다. 근본적인 해결책은 jenkins worker를 k8s pod로 동적 생성한다든가, k8s native cicd 툴을 쓴다든가, 아무튼 self healing이 되는 것으로 이전하는 것이다. 하지만 젠킨스의 수많은 plugin들과 groovy pipeline들을 타 플랫폼으로 옮기는
zx 더 나은 스크립팅, google zx A tool for writing better scripts - zx GitHub - google/zx: A tool for writing better scriptsA tool for writing better scripts. Contribute to google/zx development by creating an account on GitHub.GitHubgoogle 개발, 운영시 스크립트를 많이 만들어 쓴다. 해 본 사람은 알겠지만 bash 스크립트 만들어 쓰는건 굉장히
insomnia [Insomnia] Response 변수로 저장 및 재사용 하는 방법 Postman에는 request시 특정 스크립트를 실행할 수 있고, 그 중 pm.environment를 사용해 environment에 변수를 설정하고 Header, Body 등에서 템플릿을 이용해 이 값을 가져올 수 있다. 예를 들면 로그인 API를 호출하면 자동으로 응답을 파싱해서 리프레시 토큰(refresh token)과 액세스 토큰(access token)을 환경 변수에 넣고, 각종 API 호출 시에는
dart [Dart] analyzer에서 특정 파일 제외하기 플러터 개발을 하다 보면 build_runner 결과물로 생성되는 코드(generated code)를 많이 사용하는데, 이런 파일에는 사실 정적 분석이 필요하지는 않다. 약간의 스타일 불일치나 작은 warning이 있다고 해도, 수동으로 generated code를 변경하는 것은 권장되지 않는다. 또한 generated code를 배포 파이프라인에서만 만들고, 버전 관리에는 추가하지 않는 경우도 많다. include: package:flutter_
lens Featured Lens 오픈소스 대체, OpenLens 맥북 사용자라면 kubernetes GUI 클라이언트 중, Lens를 많이 사용할텐데, 2023년 1월 2일부터 기업 유저는 Pro 구독($199/1년)을 해야 사용 가능하다. 오픈소스 버전의 Lens 소스코드는 MIT 라이센스로 깃허브에 공개되어 있어 직접 빌드해서 써도 되고, 빌드한 바이너리를 올려둔 OpenLens 리파지토리에서 받아서 써도 된다. * Source: https://github.com/lensapp/lens * Binary