Practice/Lisp

암호 문자열 감추기 문제 풀이 : Common Lisp, Scheme

"케빈 TV 12회 (상) - 느 언어엔 이런거 없지?"에 주어진 글자수만큼 '*'를 가진 문자열을 생성하는 문제가 나왔다.

여러 언어별 구현이 나왔지만, Common Lisp와 Scheme이 없어서 여기에 적어본다.


Common Lisp:

(defun hide-password (passwd)
  (coerce (mapcar #'(lambda (x) #\*)
                  (coerce passwd 'list))
          'string))


Scheme:

(define (hide-password passwd)
  (list->string (map (lambda (x) #\*)
                     (string->list passwd))))


저작자 표시 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Theory/Unclassified

기반 기술을 어디까지 알아야 할까?

"기반 기술"을 알아야 좋은 개발자이다. 대략 맞는 말이지만 알아야 하는 기반 기술의 깊이를 논의할 필요가 있다. 개발자의 시간 자원이 유한하기 때문이다.


전산학이나 소프트웨어 엔지니어링의 진보는, 다른 분야와 마찮가지로, 이전 세대가 완성했던 토대 위에 새로운 것을 더하는 과정이다.1 어떤 기술이 기반 기술이 될 정도로 널리 인정받으면 그 위에 그것을 이용하는 다음 계층의 기술이 놓인다. 이렇게 기술은 블럭처럼 하나씩 쌓여나간다.


각 계층은 추상화로 구분한다. 새로이 추가된 층위는 하위 단계를 추상화한다. 만약, 하부 영역의 세부 구현에 의존한다면-즉, 추상화를 하지 않았다면- 아래 부분을 확장한 것이지 새로운 계층을 추가한 것이 아니다.


하위 영역를 추상화하면 문제의 범위가 현저하게 낮아진다. HTTP 프로토콜을 논할 때 TCP/IP의 구현 방법까지 끌어들이지 않는다.2 시스템콜이나 기계어를 몰라도 자바 프로그래밍을 할 수 있다.


경험적으로, 기반 기술은 하위 계층의 배경 지식과 인터페이스에 대한 명세/사용 방법을 잘 숙지하는 정도가 가장 효율이 좋다. 바꾸어 말하면, 하위 단계의 세부 구현이나 두 단계 이상 낮은 계층의 인터페이스를 굳이 알 필요는 없다. 이것이 선배/동료들이 만들어놓은 추상화라는 산물을 잘 이용하는 것이다.

  1. 가끔 그 토대 자체가 무너지는 혁명도 있긴 하다. 기반 기술을 말하는 지금은 논지를 흐트러뜨린다.
  2. 최근에는 HTTP가 기반 기술이 되어서 새로운 기술을 얻고 있다. HTTP 기반 어댑티브 스트리밍이 대표적인 예이다.
저작자 표시 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Practice/Emacs

CentOS 5 emacs-24.5 64bits RPM

터미널 환경에서 GNU Emacs1

  1. 기본 패키지의 GUI 라이브러리의 버젼이 낮아서 터미널 환경만 제공한다.
  2. cat emacs-common-24.5-1.el5.x86_64.rpm-a* > emacs-common-24.5-1.el5.x86_64.rpm
저작자 표시 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Practice/Emacs

CentOS 6 emacs-24.5 64bits RPM

GUI 환경에서 GNU Emacs


터미널 환경에서 GNU Emacs

  1. cat emacs-common-24.5-1.el6.x86_64.rpm-a* > emacs-common-24.5-1.el6.x86_64.rpm
저작자 표시 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Practice/Emacs

윈도우에서 magit을 제대로 사용하는 방법

윈도우에서 magit을 제대로 사용하려면 git-scm.com에서 받은 git을 사용하라.


윈도우에서 CLI 방식의 git을 사용하는 방법으로는 대개 아래 두가지 방식이 있다.

  • git-scm.com의 git1
  • cygwin git


첫번째 방법(git-scm.com의 git)은 언제나 잘 동작한다.
반면 두번째 방법(cygwin git)은 cygwin의 쉘에서 emacs를 기동해야 원활하게 사용할 수 있다.


두번째 방법의 이유에 대해서 부연하자면, cygwin의 쉘에서 기동하지 않으면 여러가지 문제가 발생한다.
대표적으로 magit-status 명령이 동작하지 않으며 이에 대해서는 이전 글을 참고한다.
그런데, 위 방법으로는 magit-status 명령의 오류 메시지만 제거할 뿐, 다른 모든 기능은 제대로 동작하지 않는다는 사실을 최근 발견했다.2
정리하면, cygwin git은 cygwin 환경에서만 사용해야 동작을 완전히 보장할 수 있다.


  1. http://git-scm.com/downloads
  2. 기능이 제대로 작동하지 않는 이유는 cygwin git이 인식하는 경로와 관계가 있다.
    cygwin git에서 사용하는 보조 파일은 내 시스템의 경우 "d:/cygdrive/d/Users/unipro/Documents/"로 시작하는 경로를 사용한다.
    예를 들면, 커밋 메시지를 임시로 저장하기 위해 "d:/cygdrive/d/Users/unipro/Documents/..(skip)../.git/COMMIT_EDITMSG" 파일을 사용한다.
    cygwin 환경이 아니라면 이 파일에 제대로 접근할 수 없다.
저작자 표시 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
 [ 1 ]  [ 2 ]  [ 3 ]  [ 4 ]  [ 5 ]  [ 6 ]  [ 7 ]  [ ··· ]  [ 35 ] 

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.

카운터

Today : 14
Yesterday : 105
Total : 158,502

티스토리 툴바