전체 글 498

덤벙대는 개발자를 위한 글 : 내가 버그 발생률을 획기적으로 낮춘 방법

나는 어떤 사람인가? 학창시절 필통도, 샤프도, 지우개도 반년 이상 들고다녀 본적이없다. 모두 잃어버렸다. 우산은 말할 것도 없지, 이젠 아예 유치원생이 들고다닐 것 같은 샛노란 우산을 사서 까먹지 않게 한다. 본가에 내려가서 다시 올라올때도 노트북 충전기나 뭐 하여튼 중요한 것을 꼭 하나씩 빠뜨리고 올라와서 부모님이 택배로 다시 보내주신다. 장기 기억력은 남들보다 뛰어나지만 초 단기 기억력은 아주 나쁘다. 34 + 23과 같은 간단한 암산을 하다가도 중간에 까먹어버린다. ADHD일까? 검사는 받아보지 않아서 모르겠다. 슬프지만 이런 나를 받아들이는 중이다. 영화 를 보면 주인공은 단기 기억상실증을 앓고있어 온 몸에 문신을 하고 다닌다. 내가 다음에 할일, 이미 했던 일들을 기억해야하기 때문이다. 어렸을..

CloudFlare KV로 앱 점검시간 관리하기

왜 Cloudflare Worker? 개발중인 앱 실행시 스플래시 화면에서 진입점(Entrypoint)을 결정하고 간단한 정보들을 내려주는 API가 있다. 포함되는 데이터는 API 서버 URL, 앱 버전 업데이트 정보, 점검시간 정보 등 앱 실행을 위한 필수정보들이다. 이는 CloudFlare Worker 로 구현되어있는데, 아래와 같은 이유로 채택하게 되었다. 앱 API 서버와 별개로 동작할 것: 서비스 점검 등으로 서버가 다운되었을때도 정보를 전달할 수 있다. 빠르고 안정적인 응답을 내려줄 것: Cloudflare 전역 네트워크 위에서 돌아가서 50ms 이내 응답이 가능하다. 수정 및 배포가 용이할 것: JS를 써서 언어적 장벽도 낮고 Wrangler라는 CLI를 제공해서 배포가 편리하다. 요구사항:..

[AppsScript] 스프레드 시트 Row 업데이트한 날짜 자동으로 적는 법

행에 수정이있을경우, 수정한 날짜를 자동으로 기록하는 방법을 소개한다. AppsScript는 여러 트리거들을 제공하는데, 몇몇 함수들이 예약되어있다. 그 중에서도 셀의 편집때 자동으로 트리거되는 onEdit(e) 함수를 사용해서 셀의 변화가 일어날때마다 업데이트 날짜를 찍어주는 만들어 보았다. 구글 스프레드시트 > 확장 프로그램 > Apps Script 메뉴에 들어가, 아래 코드를 붙여넣고 저장한다. HTML 삽입 미리보기할 수 없는 소스 사진의 시트를 기준으로 작성된 코드이므로 하나하나 뜯어서보자면, UPDATED_COLUMN은 날짜를 적을 컬럼의 위치다. 그리고 HEADER_ROW_LENGTH는 헤더부분의 길이를 나타내는데, 헤더를 수정했다고해서 업데이트 날짜가 찍히면 안되니 그 이상의 Row에서 수..

마인크래프트 서버 튕길때 해결방법 (SocketException: Connection reset)

InternelException: java.net.SocketException: Connection reset 마인크래프트 멀티 서버를 플레이할때 위와같은 메세지를 뱉으면서 자주 튕기는 경우 해결방법이다. 청크거리조정, 방화벽설정 이런거 다 해보셨을테니 아니고... 1. 명령프롬프트를 켠다. 2. "netsh interface tcp show global"을 입력한다. 3. 수신측 배율 상태가 disabled되어있다면, "netsh interface tcp set global rss=enabled"를 입력하고 Enter를 친다. 4. 수신 창 자동 조정 수준이disabled 되어있다면, "netsh interface tcp set global autotuninglevel=normal" 입력 Enter를 ..

Docker로 마인크래프트 서버 관리하기 - 고급편

⚠️ 들어가며 서버를 여는 방법은 초급편글에 있습니다. 초급편과는 달리, 약간의 컴퓨터 지식이 필요할 수 있습니다. 하지만 끈기와 의지가 있으신 분들이라면 충분히 따라할 수 있으실겁니다. 주제가 광범위하기 때문에 Q&A 형식으로 포스팅했습니다. ⛔️ docker: Error response from daemon: Conflict 오류가 떠요 이미 동일한 내용의 docker container가 올라가서 그렇습니다. 아래 명령어로 마크 서버 컨테이너를 삭제하고 다시 시도해보시면 될겁니다. docker stop mc && docker rm mc 🧾 Server.properties를 바꾸고 싶어요 ex) 최대 플레이어 수 늘리기 최대 플레이어 수를 늘리려면 vim으로 server.properties를 직접 수정..

[무료] 마인크래프트 서버 쉽게 열고 관리하기 - 초급편 (자바, 베드락)

⚠️ 들어가며 이글은 GCP로 마인크래프트 서버여는법 Step 6부터 시작합니다. 컴퓨터에 관한 지식이 거의 전무해도 따라할 수 있는 정도를 목표로합니다. 🐳 1. Docker 설치하기 Docker는 쉽게 말하면 컴퓨터안에 가상으로 컴퓨터를 띄울 수 있도록 해주는 프로그램입니다. 우리는 Docker로 마인크래프트 서버를 띄울 것입니다. 무슨말인지 모르셔도 상관없습니다! 앞선 글을 따라 Step6까지 진행하셨다면 터미널을 띄운 상태일 것입니다. * Ubuntu OS를 기준으로 합니다. sudo apt-get update && \ sudo apt-get install ca-certificates curl gnupg lsb-release -y && \ sudo mkdir -p /etc/apt/keyrings ..

[Kotlin] CompletableDeferred의 개념과 활용

Promise가 그리울때 이벤트 기반으로 통신하는 프로토콜을 구현중에, JS의 Promise나 Dart의 Completer와 비슷한 역할을 하는 Kotlin 친구가 없을까하다 찾게되었다. 완벽한 대체재다! CompletableDeferred는 public function을 이용해 완료하거나 취소할 수 있는 Deferred이다. 이를 활용하면 내가 원하는 시점까지 기다렸다가 값을 받을 수 있다. 그럼 SuspendableCoroutine이랑 뭐가 다르냐? 라는 생각이 들 수 있다. SuspentableCoroutine은 해당 블록 안에서만 complete/cancel을 제어할 수 있지만, CompletableDeferred는 그런 제약이 없다. CompletableDeferred : Functions ab..

Kotlin coroutine : async vs launch 차이

async vs launch async 결과를 반환하는 코루틴을 시작하는데 사용 예외(Exception)가 발생할 경우 결과를 반환에 포함한다. 결과 또는 예외를 포함하는 Deferred를 반환 launch 결과를 반환하지 않는 코루틴을 시작하는데 사용 본인 혹은 자신 코루틴의 실행을 취소하기위해 사용할 수 있는 Job을 반환 Job: Fire and forget Job Job은 생성될때 기본적으로 자동 시작된다. 하지만, 이를 자동시작 되지 않게하려면 CoroutineStart.LAZY를 사용할 수 있다. Job join() vs start() join: Job을 완료할때까지 대기한다. start: 애플리케이션이 Job이 완료될때까지 기다리지 않는다. Job의 라이프 사이클 New: 생성됨 Active..

[프로그래밍] 마인크래프트로 알아보는 랜덤이 랜덤이 아닌 이유

컴퓨터의 랜덤 술 먹고, 같이 먹은 사람들의 카드를 부채꼴로 펼치면서 식당 종업원에게 카드를 골라달라고 해본적있는가? 고를 확률은 랜덤이라고 할 수 있을까? 식당 종업원이 좋아하는 디자인 취향, 왼손잡이인지 오른손잡이인지에 따라 결과는 치우쳐질 수 있다. 이까지는 누구나 인지하는 사실이다. “그래! 이건 완전한 랜덤이 아니야!” 계산할 사람을 지목하는데에 네이버 사다리 타기를 이용하기로 했다. 흔히 이렇게 “랜덤성”을 컴퓨터 프로그램에 의존하고는 한다. 뭔가…뭔가 객관적이어 보이니까? 하지만 컴퓨터는 결정론적으로 동작하고, 어떻게 보면 랜덤과는 가장 거리가 멀다. 모든 프로그래밍 언어에는 random()이라는 함수가 있다. 그러면 이들은 어떻게 구현이 된걸까? 만약에 내가 구현한다면 어떻게 랜덤성을 부여..

UX 이야기 : 있어야 할 곳에 있다는 것

갤럭시에 윈도우즈 컴 쓰는중입니다 나는 안드로이드 개발자의 사명으로(?) 아이폰 7을 마지막으로, 아직까지도 갤럭시를 쓰고 있다. 심지어 이제는 노트북마저 윈도우즈 노트북이다. 완벽하게 불편한 것이 없는 지금도 언제나 애플 제품을 쓰고 싶은 생각이 든다. 그래서 이번에 에어팟3와 아이패드 미니6세대를 구매했다. 홈 버튼이 사라지고 수 년만에 애플 제품을 써보는데 적응이라는게 필요가 없었다. 내가 생각하는 애플의 강점은 이거다. "있어야 할 곳에 있다" 사실 내가 생각하는 디자인의 의미기도 하다. 프로그래밍만이 문제를 푸는 것이 아니다. 디자인의 본질 역시 문제를 푸는 거다. 생각할 거리를 던져주는, 더듬더듬 재시도하게 하는 디자인은 잘못된 디자인이다. *애플도 실패한 디자인이 없는 것은 아니다. 매직 마..