-
깃털처럼 가벼운 Emacs인 mg의 키바인딩Programmer/Emacs 2021. 10. 25. 11:26
기본 키 바인딩 Category Key Binding Command Leaving Mg C-z suspend-emacs C-x C-c save-buffers-kill-emacs Files C-x C-f find-file C-x C-s save-buffer C-x s save-some-buffers C-x C-q toggle-read-only Getting Help C-h C-h help-help C-h a apropos C-h b describe-bindings C-h c describe-key-briefly Error Recovery C-g keyboard-quit C-x u undo C-_ undo C-l recenter Incremental Search C-s isearch-forward C-r i..
-
러스트로 MPEG-4 파일 시스템 라이브러리를 만들어보자.Streaming Media/Media Tech 2021. 7. 12. 13:33
스푼라디오에 재직하던 시절 작성한 "러스트로 MPEG-4 파일 시스템 라이브러리를 만들었던 경험"을 소개합니다. ISO BMFF를 구현한 순수한 러스트 크레이트는 전부 인큐베이팅 수준에 불과했습니다. 미디어 데이터를 읽어서 재생할 수도 인코딩된 데이터를 저장할 수도 없었습니다. 새로운 크레이터를 만들까 고민하다가, 약간이라도 진행된 mp4rs를 선택하여 사용 가능한 수준으로 개선하기로 했습니다. https://medium.com/spoontech/rust로-mpeg-4-파일-시스템-라이브러리를-만들어보자-4dd73e3bf77b 전체 내용은 원문으로 확인하세요. 추가 mp4rs에서 mp4-rust로 이름이 바뀌었다. 코드는 https://github.com/alfg/mp4-rust에서 문서는 https:/..
-
원자적(atomic) 연산과 순서(ordering) 제약Programmer/Computer Science 2021. 7. 12. 12:37
스푼라디오에 재직하던 시절 작성한 "원자적 연산과 순서 제약"에 관한 글을 소개한다. 멀티코어, 멀티쓰레드 환경의 고성능 병렬(parallel) 프로그래밍에는 여러가지 함정이 있다. 그중에 하나는 프로그래머의 의도와는 상관없는 시스템의 최적화이다. 이 글은 시스템 최적화에 프로그래머의 의도를 전달하는 두가지 기법, 원자적(atomic) 연산과 순서(ordering) 제약을 소개한다. https://medium.com/spoontech/원자적-atomic-연산과-순서-ordering-제약-ed25e39c4646 전체 내용은 원문으로 확인하자.
-
언어별 형식 출력 함수 비교Programmer/Programming 2021. 7. 9. 12:50
언어별 형식 출력 함수와 형식 변환 지정자 C Go C++ fmt Rust Python Javascript ES6 Template literals Common Lisp 표준출력 printf( "%d", 3) fmt.Printf( "%d", 3) fmt.print( "{}", 3) print!( "{}", 3) print( "{}".format(3)) let n = 3; console.log( `${n}`) (format t "~d" 3) 파일출력 fprintf( fh, "%d", 3) fmt.Fprintf( fh, "%d", 3) fmt.print( fh, "{}", 3) write!( fh, "{}", 3) print( "{}".format(3), file = fh) let n = 3; fs.write..
-
강화도 루지는 위험해요Life/Society 2021. 2. 15. 23:48
강화도에서 루지를 타고 내려온 막내 아이의 얼굴이 사색이 되었다. 어깨를 움켜쥐고 아프다고 했다. 이유를 물었더니 루지가 뒤집혀져서 다쳤고, 속도를 조절하지 못해서 무서웠단다. 꽤나 긴 거리를 무서운 속도로 질주하며 중간 중간 속도에 못이겨 뒤집어지기도 했다는 말이다. 어떻게 된 일인가? 그림과 글로 설명하겠다. 루지의 레버는 아래 그림과 같다. 당기지 않으면 ①의 위치에 있다. 여기에 레버가 위치하면 바퀴가 움직이지 않는다. 말하자면, 주차 상태인 셈이다.레버를 힘있게 당겨서 ② 위치로 가다가보면, 어느 지점에서 주차 브레이크가 풀린다. 루지는 브레이크 없이 자유롭게 가속하며 비탈길을 내려갈 수 있다. ②에서 ③으로 당기면 자동차의 풋브레이크 처럼 서서히 제동이 걸린다. ①(주차 브레이크)와 다르게 ③..
-
여러가지 데이터 표현 양식 비교Programmer/Computer Science 2020. 3. 11. 11:11
XML - 과거의 찬란했던 데이터 교환 양식(라떼는 말이야~). 지금은 JSON에 밀려... XML XML은 EXtensible Markup Language의 약어로써, 데이타를 저장하거나 주고받는데 사용하는 마크업(markup) 언어이다. 특징과 장단점 뛰어난 호환성을 제공한다. 많은 프로그램 언어와 웹, 소프트웨어에서 XML을.. unipro.tistory.com 유연함 시스템이 읽고/쓰기 쉬움 유효성 검증(Validation) 주석 IDE의 지원 사람이 읽고 쓰기 어려움 장황함 유연하고 시스템 친화적이며 데이터 검증에 매우 강력하다. 따라서, 엔터프라이즈에서는 여전히 강한 면모가 있다. 하지만, 개발과 디버깅은 사람이 한다. 사람이 읽고 쓰기 어려다는 것은 치명적인 단점이다. JSON - "왕위를 ..
-
너는 왜 A 드라이브 하나 밖에 없니?Life/Miscellaneous 2019. 12. 30. 17:47
내 어린 시절, IBM XT란 기종의 컴퓨터가 대중화 되었고 IBM AT가 새롭게 등장하던 시기의 이야기이다. 당시 XT에는 5.25인치 플로피 디스크 드라이브를 하나 또는 두 개를 달았다. 좀 괜찮은 컴퓨터는 2개의 드라이브가 달려 있어서, 첫번째 드라이브에 부팅 디스켓을 꼽았고, 다른 드라이브에 응용 프로그램이나 데이터를 저장하는 디스켓을 넣었다. 하나만 달려 있으면 부팅 후에 작업 디스켓으로 갈아 끼워야 했다. 플로피 디스크는 하드 디스크가 대중화되지 전에 사용하던 저장 매체이다. 하드 디스크와 비교하면 용량이 적을 뿐만 아니라 읽고 쓰는 속도가 매우 느렸다. 이 시절을 상상하기 힘들다면, 초기 버전의 USB 포트만 존재하는 컴퓨터와 8MB 메모리 스틱만 존재하는 세상을 떠올려보자. OS 부팅용 메..
-
함수적 프로그래밍 작성하기Programmer/Programming 2019. 12. 3. 16:14
모든 조건과 결과는 함수 내부에서 시작하고 내부에서 끝난다면 함수적(functional)이다. 조건과 결과를 제외하고는 외부에 영향을 받지도 주지도 않는다. 조건은 인자(arguments)로 주어지고 결과를 반환값(return value)으로 돌려준다. 수학에서 함수를 처음 배울 때 위와 아래가 열려있는 상자 그림을 소개한다. 이 상자는 위 구명으로 값을 넣으면 아래 구멍으로 결과가 나온다. 위/아래 구멍을 제외하고 비밀스러운 다른 구멍이 없다. 즉, 출력값은 오직 입력으로만 결정된다. 좀 더 세련되게 표현하면 정의역의 임의의 x에 대해서 사상된 단 하나의 y가 치역에 존재한다. 프로그래밍의 함수는 종종 함수적이지 않다. 위 함수 정의에 부합하려면 인자와 반환값으로만 소통해야 한다. 반면 프로그래밍 함수..