-
기본 값(default value)을 언제 사용할까?Programmer/Programming 2018. 1. 2. 18:57
매번 값을 특정하는 것은 꽤 귀찮은 일이다. 가령, ssh 접속할 때 포트 번호 22를 항상 입력하는 것은 불편하다. 기본 값은 이런 불편함을 덜어준다. 이는 곧 개발의 생산성과 사용의 편의성으로 이어진다. 반면, 사용의 편의성은 대게 위험성을 불러들인다. 임의로 기본값을 남발하면 낭패를 볼 수 있다. 컴파일이나 실행 직후 문제없이 돌아가는 코드가 기본값 때문에 문제를 일으키곤 한다. 기본 값에는 명백하고 합리적인 이유가 반드시 있어야 한다. 예를 들면, HTTP 클라이언트를 개발한다면, HTTP 프로토콜의 기본 포트인 80을 기본 값으로 사용할 수 있다. 여기서는 스펙이 합리적인 이유가 된다. 그런데, HTTP 프로토콜의 기본 포트인 80이 아닐 수도 있다. 사내 HTTP API 서버들의 포트가 다양할..
-
'T'자형 폴리글랏 프로그래밍Life/Software Engineer 2017. 12. 29. 17:37
초보 기능인과 장인 개발자는 기능인이다. 초보 기능인에서 장인으로 거듭나기 위해서 끊임없는 공부와 훈련으로 기술을 갈고 닦아야 한다. 초보 기능인이 "할 줄 안다." 정도의 수준이라면 장인은 "훌륭히 잘 해낸다."라고 말할 수 있다. 장인은 작업 효율도 뛰어나지만, 무엇보다도 완성도가 매우 높다. 'T'자형 인간 예전에는 하나만 잘해도 괜찮은 시대였다. 요즘엔 하나만 잘해서는 힘들다. 자기 전공 이외에도 다방면으로 두루두루 알아야 한다. 이런 사람들을 소위 'T'자형 인간이라고 부른다. 다만, 'T'자의 머리처럼 넓고 얕은 지식만 중요한 것이 아니라, 수직의 몸통처럼 깊이도 필요하다는 것을 잊으면 안된다. 자신의 전문 분야에 대해서 깊은 경지에 도달해야 하는 것은 예나 지금이나 마찮가지이다. 'T'자형 ..
-
멀티미디어 서비스를 위한 얕은 지식Streaming Media/Media Tech 2017. 12. 21. 10:56
멀티미디어의 특징 데이터가 매우 크다. 문자 데이터와 비교하면 비디오나 오디오 데이터는 엄청나가 크다. 24-bit, 1080p @ 60 fps: 24 × 1920×1080 × 60 = 2.98 Gbit/s. 출처 : Wikidepia, Uncompressed video 방대한 분량의 자료를 저장하고 전송하는 기술이 요구된다. 시간에 민감하다. 멀티미디어 정보의 유효성은 시간과 밀접하다. 시간내에 처리되지 않으면 정보의 품질이 급격히 떨어진다. 실시간 처리와 네트워크 서비스 품질(QoS)이 필요하고 각 매채간의 상호 동기를 해결해야 한다. 인간의 오감으로 수용하는 데이터이다. 멀티미디어는 궁극적으로 인간의 오감(대부분 시각과 청각)으로 수용된다. 이로 인해 약간의 오류를 허용하는 특징이 있다. 이를 활용..
-
Emacs의 Python3 개발 환경Programmer/Emacs 2017. 12. 14. 15:10
emacs의 python 개발 환경은 크게 두 가지가 유명하다. 하나는 elpy 나머지 하나는 anaconda이다. 이 두가지 중에 하나를 선택해서 사용한다. elpy 한마디로, emacs에서 python 개발을 위한 all in one 패키지이다. 설치와 설정이 매우 쉬운면서 여느 IDE와 견주어도 꿀리지 않는 강력함이 있다. (use-package elpy :ensure t :config (elpy-enable) (setq elpy-rpc-python-command "python3") (setq elpy-rpc-backend "jedi") (elpy-use-cpython (or (executable-find "python3") (executable-find "/usr/bin/python3") (exe..
-
Emacs의 Programming 관련 공통 설정Programmer/Emacs 2017. 12. 14. 13:50
elpa (require 'package) (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/")) (add-to-list 'package-archives '("melpa-stable" . "http://melpa-stable.milkbox.net/packages/")) (setq package-enable-at-startup nil) (setq package-archive-priorities '(("melpa-stable" . 1))) (package-initialize) use-package (unless (package-installed-p 'use-package) (package-refresh-contents) (pack..
-
Emacs의 Scala 개발 환경Programmer/Emacs 2017. 12. 14. 11:25
sbt 설치 Ubuntu에서 sbt 0.13.15 설치하기 curl -L -o sbt.deb http://dl.bintray.com/sbt/debian/sbt-0.13.15.deb sudo dpkg -i sbt.deb sudo apt-get update sudo apt-get install sbt sbt 설정하기 ~/.sbt/0.13/plugins/plugins.sbt 파일을 편집한다. addSbtPlugin("org.ensime" % "sbt-ensime" % "1.12.14") 프로젝트 만들기 편의상, 프로젝트 디렉토리를 '~/my-project'로 가정한다. '~/my-project/project/build.properties' 파일에 프로젝트에 sbt 버젼을 명시한다. sbt.version=0.1..
-
C++에서 언제 어떻게 struct를 사용하는가?Programmer/Programming 2017. 9. 25. 16:03
C++로 코딩할 때에 class와 struct 중에 무엇을 사용할 지 고민을 할 때가 있다. 내가 C++에서 struct를 선택하는 기준은 다음과 같다. 분해하면 모든 멤버 변수가 scala data type이다. 멤버 변수 중에 union, struct 또는 고정 길이 array를 만나면 재귀적으로 분해한다. 모든 말단이 scala data type으로 이루어졌다면 struct를 사용한다. 즉, 분해하는 과정에서 포인터나 가변 길이 배열, 클래스를 만나면 struct를 사용하지 않는다. 구조체를 이진 데이타로 고스란히 pack/unpack 해야 한다. struct는 메모리 형태 그대로 데이터로 상호 변환 가능함으로 개발하기 편하다. 굳이 별도의 pack/unpack 함수를 작성할 필요가 없다. 단, 데..
-
Lisp 비교 : Emacs의 개발 환경Programmer/Emacs 2017. 7. 11. 03:36
Emacs의 Programming 관련 공통 설정 Lisp 공통 설정 (use-package paredit :ensure t :diminish paredit-mode :init (use-package paredit-everywhere :ensure t)) Common Lisp Common Lisp의 major-mode는 'lisp-mode'이다. 보통 확장자 '*.lisp'나 '*.l'와 연결되어 있다. SLIME이라는 강력한 REPL 도구가 있다. Common Lisp 설정 예: (add-hook 'lisp-mode-hook (lambda () (setq indent-tabs-mode nil) (paredit-mode t) (helm-gtags-mode 1))) (use-package slime :en..