목록개발 (37)
비트와 자장가

터미널 창을 여러 개 쓰다보면 (한 창만 쓰는 사람은 이해 못하겠지만...) 맥에서는 (리눅스에 비해) 창 전환이 좀 불편합니다--물론 윈도우즈는 논외로--. ⌘⇥(커맨드 탭)으로 앱을 전환하거나, ⌘`(커맨드 백틱)으로 동일 앱 내 창 전환을 하거나 iterm같은 앱의 자체 단축키를 이용하는 방법 뿐입니다. 이를테면 터미널과 웹페이지를 마우스 없이 왔다갔다 하기가 불편합니다. 검색과 코딩을 수시로 오가야 하는 플로우에서 방해가 아닐 수 없기 때문에 반 년 전 이 앱을 만들었습니다. 간단할 줄 알았지만, 공식적으로 지원하는 기능이 아니기에 많이 API를 우회해야 했습니다. 개발하는 동안 개척자가 된 기분을 느꼈죠... 놓아뒀다가 다시 다듬고, 이 참에 앱스토어에까지 올리려 했는데, 글로벌 키 인풋을 받는..
Understanding a few concepts of macOS applications by building an agent-based (menu bar) app With advances in the frameworks and tools we use to develop software, creating a new app seems like magic. We just click a few buttons, and everything is created for us. I enjoy magic, but I think that sometimes we end up being Framework rderik.com 메이크파일만 사용해 간단한 에이전트 앱을 만들어보는 실습 자료다. 엑스코드를 안 쓰고 싶은 마음을 제..

고도의 물리엔진을 갖고 이리저리 굴려보는 중인데 rigid body와 physical bones이 별개로 구현된 점이 무척 아쉽습니다. 사실을 말하자면 통탄스러울 정도였습니다. 너무 괴로워 유니티를 깔짝대던 중 유튜브 알고리즘이 하사한 twisted ik 2 플러그인을 만났습니다. 여차저차 해서 어쨋든 답을 찾았습니다. 이것이 세계 최초 고도로 만든 active ragdoll입니다.

블렌더나 고도 같은 오픈 소스 && 커뮤니티 주도 프로젝트들을 저는 무척 좋아해요. 마지막까지 비교했던 유니티는 고도에 비하면 너무 무겁고 (어려운 건 아니지만) 뒤죽박죽 복잡합니다.
아래는 시스템콜 write를 호출해 "hello world"와 개행문자를 출력하는 간단한 C 프로그램이다: #include int main() { write(1, "hello world\n", 12); } gcc hello.c && ./a.out 위를 맥용 어셈블리어로 바꾸면 아래와 같다: globalstart section.text start: movrax, 0x02000004;write() movrdi, 1 movrsi, string movrdx, 12 syscall movrax, 0x02000001;exit() xorrdi, rdi syscall section.data string: db"hello world",10;"hello world\n" nasm -f macho64 hello.s && ld ..

CPU 멀티쓰레드로 BVH 같은 최적화 없이 실시간 (비스무리하게) 돌아가도록 만든 광선 추적기다. CPU 광선 추적기 실시간성(?)의 핵심은 다음과 같다: voidmulti_record(void) { pthread_tthread[THREAD]; unsigned longid; id = 0; while (id < THREAD) { if (pthread_create(&thread[id], NULL, thread_record, (void *)id)) quit(MALLOC); id++; } while (id--) pthread_join(thread[id], NULL); record_(screen, light, accumulated); } voidpress_key(void) { camera = camera_(se..

논리회로란 입력이 출력을 결정하는 회로이다. 논리회로는 기호로 추상화되지만, 부품이라기보단 실제로는 베이스에 전류가 들어오는지의 여부에 따라 전류의 흐름을 바꿔주는 부품인 트랜지스터와 저항만으로 만들어진 간단한 회로 구성이다. (TTL 7400/7402 같이 네 개의 낸드/노어 게이트를 하나의 칩으로 묶은 부품을 흔하게 구할 수 있고, 대개는 칩 안의 나노미터 단위의 로직 셀로서 접하게 된다) 만드는 방법은 다음과 같다. 영상에서 LED는 전류가 흐르는지(출력이 1인지)를 보여주기 위해 추가된 것이라는 점을 참고하자. 논리 게이트 중 낸드nand 게이트와 노어nor 게이트는 유니버셜 게이트이다. 그 말인즉슨, 낸드나 노어만 있으면 어떤 논리게이트든 만들 수 있다는 것이다. 더보기 실제로, 우리가 사용하는..
이전 글에서 말했던 것처럼, 프로그램 언어의 기초 모든 프로그램은 순차, 분기, 반복의 집합체로서 동작한다. 1. 순차sequence 프로그램은 줄마다 순서대로 실행된다. 사람이 물을 컵에 받아 마시는 것을 의사코드pseudo-code(프로그래밍언어의 구조를 eastriver-today.tistory.com 컴퓨터에서는 모든 것을 숫자로 나타낸다. 프로그래밍 언어는 컴퓨터가 아닌 사람을 위한 것인데, 사람은 숫자로 생각하지 않으므로, 모든(실용적인) 프로그래밍언어는 자료형data type을 가지고 있다. 자료형을 한 마디로 정의하자면 이진숫자를 특정 형태로 묶은 것이다. 프로그래밍 언어에서 자료형은 사용의 관점에서 항상 명시적으로 선언해야 하거나, 추론해주거나, 내부적으로만 존재하는 세 가지 경우로 나뉜..