목록분류 전체보기 (51)
altair의 프로젝트 일기
개요 LOVE 엔진이 Lua로 작동하므로 가장 먼저 Lua에 대한 이해가 필수적이다. 이번 글에서는 LOVE 엔진과 게임에 대한 이야기는 잠시 미뤄두고 Lua에 대해 배우고 느낀 점을 소개하려 한다. Lua란? C/C++에 내장시키기 쉬운 언어로써 1993년에 개발되었다. 멀티 패러다임 언어로 C 스타일의 프로시저 방식, OOP, 함수형 프로그래밍 등을 모두 구현할 수 있다. 개인적으로 이 부분은 Rust와 매우 닮았다고 느꼈다. Lua의 데이터 타입은 다음과 같다. Nil(타 언어의 Null과 같다) Boolean Number String Table Function Userdata(C와의 호환성을 위한 자료형. Lua만 사용한다면 필요 없다) Lua의 Table 다른 것보다 테이블을 먼저 다루는 이유는..
최근 발라트로(Balatro)라는 게임을 플레이하고 있다. 구매한지 얼마 되지도 않았는데 벌써 중독적으로 빠져들었다. 한국어 번역이 부실해 관련 자료를 찾아보던 도중 문득 의문이 들었다. 이 게임은 어떤 엔진으로 만들었을까? 찾아보니 LOVE2d라는 엔진으로 만들었단다. GoBrewYourself's comment on "Trying to make a high score FEEL like a high score 🔥" Explore this conversation and more from the IndieDev community www.reddit.com LÖVE - Free 2D Game Engine Hi there! LÖVE is an *awesome* framework you can use to ma..
몇 달 전 라이브러리를 개선하는 PR이 들어온 적이 있었다. 비록 언젠가 수정하려고 생각했던 부분이지만 당시에는 학기 중에 과제가 쏟아지고 있었기에 제대로 확인하지도 못했고 내가 의도하지 않는 수정 사항도 많아서 수락하지 않았다. 1.4.1 버전까지 이미지 압축 로직은 다음과 같았다. image 라이브러리를 사용해 원본 이미지 파일을 jpeg 파일로 변환해 저장한다. 변환한 임시 파일을 다시 읽어와 주어진 비율만큼 리사이징하고 퀄리티를 낮춘다. 압축된 결과 이미지를 jpeg으로 저장하고 임시파일을 삭제한다. 이렇다보니 압축과정에서 불필요한 파일 읽기/쓰기가 추가로 발생했다. 지금까지는 일단 작동하니까 놔뒀던 방식이지만, 시간 여유가 생긴 지금, 이를 개선할 필요가 있다고 생각했다. 위에서 보다시피 원본 ..
문제 홈서버 구축기 서버 1 - 삼성 노트북 저번 글에서도 말했다시피 집에 두 라즈베리파이를 실행 중이었다. 하나는 깃랩 서버로, 하나는 나스로 말이다. 그러던 중 이모가 다른 곳으로 이사를 가시면서 오래된 노 altair823.tistory.com 저번 홈서버 구축기 글에서 어떻게 홈서버를 만들고 사용하게 되었는지 소개했다. 당시에는 우분투 서버를 설치해 그 위에 도커를 올려 여러 서비스를 사용했다. RocketChat과 Jupyter Notebook 같은 것들 말이다. 한동안 꽤 재미있었다. 어느 날 Netdata를 도커로 설치해 서버 부하를 테스트해봤다. 어찌보면 당연하게도, 주피터 노트북이 아니면 딱히 부하랄 것도 없고 주피터 노트북 마저 항상 돌리지는 않으니 서버 자체가 항상 놀고 있는 상태가 ..
개요 방학 동안 SQL에 대해 공부했다. 그동안 데이터 관리에 많은 관심이 있었지만 데이터베이스에 관해서는 깊이있게 공부하지 못했다. 그래서 일단 데이터베이스를 사용하는 방법인 SQL을 배우고 익히기 위해 프로젝트에 이를 적용해보기로 했다. 처음으로 K-MOOC에서 SQL 강의를 들었다. 강좌 | MOOC_DKUK0032 | K-MOOC www.kmooc.kr SQL의 대략적인 사용법은 강의에서 배웠지만 코드에서 데이터베이스를 사용하지 못하면 의미 없는 것이라 생각했다. 처음에는 JPA나 Hibernate 같은 추상화된 레이어를 써볼까 했지만, 데이터베이스와 SQL을 처음으로 쓰는 프로젝트이므로 일단 SQL을 내 손으로 직접 추상화하고 그 과정에서 느끼는 불편함을 나중에 다른 프레임워크들로 개선하려 했다..
먼저 구 테스트 코드를 분석해보자. 이 두 함수는 매 테스트의 처음과 끝에 실행된다. 테스트를 위해 원본 폴더, 목적지 폴더를 각각 생성하고 맨 마지막에 그 두 폴더를 삭제한다. 샘플 파일들이 담긴 폴더에서 필요한 파일을 원본 폴더에 복사한 후 테스트하는 구조로 만들어져 있다. 위 예시 테스트를 보자. jpg 이미지 하나를 압축하는 기능을 테스트하고 있다. 다른 모든 테스트들에게서 나타나는 공통적인 문제를 모두 포함한다. 파일 경로가 직접적으로 코드에 포함된다. 샘플 파일과 그 경로에 대한 종속성이 대단히 높다. 테스트할 파일 형식이 코드에 포함된다. 샘플 파일의 형식에 대한 종속성 또한 높다. 테스트 결과 중 일부를 출력한다. 유닛 테스트는 실패 또는 성공 두 상태만 존재하는 것이 좋다. 무엇보다 압축..