Mac 기본 세팅하기.

개발툴 2015. 9. 15. 21:07

처음으로 맥OS 노트북을 구매하게 되면서 ( Mac book Pro ! ) 

관련 기본 설정들을 진행하고 있다. 


1. 터미널 세팅

기본 터미널은 yosemite 기준 응용프로그램 > 유틸리티에 있다. 

.bash_profile 을 다음과 같이 수정하는 것으로 컬러풀한 터미널을 맞이할 수 있다 ..

( 처음에는 파일이 없으므로 생성하자. ) 

저장하고 터미널을 재시작을 하는 것으로 요정도..



2. XCode 설치 

별도 설명이 필요 없다. AppStore 에서 ...

다만 생각보다 설치에 시간이 조금 소요된다. 

git 도 함께 설치된다. 


3. SublimeText 설치 

vim 에 익숙하지가 않아서 .. 어쩔수 없이 서브라임을 설치했다. 나름 서브라임에서 만족하면서 개발하며 지내고 있기 때문에 ...ㅎㅎ

package install 도 잊지 않도록 ..

command + `

로 콘솔창을 띄우고 다음 코드 삽입


import urllib2,os,hashlib; h = '2915d1851351e5ee549c20394736b442' + '8bc59f460fa1548d1514676163dafc88'; pf = 'Package Control.sublime-package'; ipp =sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else None; urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler()) ); by = urllib2.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); open( os.path.join( ipp, pf), 'wb' ).write(by) if dh == h else None; print('Error validating download (got %s instead of %s), please try manual install' % (dh, h) if dh != h else 'Please restart Sublime Text to finish installation')


4. brew install 설치 

1 line 을 터미널에 입력하는 것으로 완료. 


5. Scheme 설치

스터디 시에 활용 (잘 들고 다닐지는 모르겠지만) 하고자 하는 용도로 구매한것이기 때문에, SICP 스터디에서 사용하는 Functional Language Scheme 을 설치한다. 

4를 진행하였기 때문에, 이를 활용하여 컴파일러를 설치한다. 단, dependency 가 있는 패키지를 먼저 설치하고 진행한다.



기타 editing 설정관련은 이제 관련 포스팅을 따라 진행.

http://nolleh.tistory.com/152


6. .Net Core

다음에 따라 진행


http://dotnet.github.io/getting-started/

'개발툴' 카테고리의 다른 글

[MacOSX] Wine  (0) 2015.11.24
[SVN] change list  (0) 2014.08.19
python 콘솔등에서 출력 텍스트 컬러  (0) 2014.07.25
Mac Os Terminal Color  (0) 2014.07.24
정규식 - 기본 구문  (0) 2014.07.03

2.5 System with Generic Operations

제네릭 연산의 체계


하나의 데이터 객체를 다른 방법으로 표현하여 디자인하는 시스템을 살펴보았다. 

중요한 아이디어는, 제네릭 인터페이스 프로시저들을 통해, 데이터 연산들을 몇몇의 표현에 연결하는 것이었다. 

이제 우리는 이러한 아이디어를 다른 표현에 이용하는데 그치지 않고 다른 인자들에도 접목하도록 한다.

우린 산술 연산들의 다양한 패키지를 이미 살펴보았다: 기본 산술 연산자들, (+, -, *, /) 

유리수 산술 연산 (add-rat, sub-rat, mul-rat, div-rat), 복소수 산술 연산들이 바로 그 것.


우리는 이제 데이터기반 테크닉을 산술연산의 패키지를 생성하는데 사용할 것이다.


누군가 "숫자"를 산다는 관점에서, add 연산이 제공된다. ADD 는 제네릭인터페이스의 일부인데, 별개의 일반적인 산술, 유리수 산술, 복소수 산술 패키지들이 일관된 형태로 접근 된다. 

어떤 별개의 산술연산 패키지는 제네릭 프로시져를 통해 접근되며, 이 프로시져는 패키지를 다른 표현으로 디자인된 패키지에 결합 (retangluar / polar ) 한다. 더 나아가, 이 시스템은 추가가 간편해서, 개별의 산술 패키지를 추가하고 제네릭 산술 시스템을 생성하도록 결합하는 것이 가능하다. 


2.5.1 제네릭 산술연산 

제네릭 산술 연산을 디자인 하는것은 제네릭 복소수 연산을 만드는 것과 유사하다. 예를 들면, 제네릭 프로시저 add 는 일반적인 수에는 + 를 적용하고, 유리수에는 add-rat 을 동작케하는 것과 같다. 다른 제네릭 산술 연산을 추가하기위해 2.4.3 에서 보았던 복소수를 위한 제네릭 선택자를 구현하는 것과 같은  전략을 사용하면 된다.

tag 를 추가하고 제네릭 프로시져가 적절한 패키지를 그것의 인자에 따라 디스패치하도록 한다.



제네릭 산술 연산은 다음과 같이 정의 된다.


(define (add x y) (apply-generic 'add x y))

(define (sub x y) (apply-generic 'sub x y))

(define (mul x y) (apply-generic 'mul x y))

(define (div x y) (apply-generic 'div x y))


일반 수에 대해서부터 시작해보자. tag 는 scheme-number


(define (install-scheme-number-package)

(define (tag x)

(attach-tag 'scheme-number x))

(put 'add '(scheme-number scheme-number)

(lambda (x y) (tag (+ x y))))

(put 'sub '(scheme-number scheme-number)

(lambda (x y) (tag (- x y))))

(put 'mul '(scheme-number scheme-number)

(lambda (x y) (tag (* x y))))

(put 'div '(scheme-number scheme-number)

(lambda (x y) (tag (/ x y))))

(put 'make 'scheme-number

(lambda (x) (tag x)))

'done)


scheme-number 패키지의 사용자는 다음 프로시져를 통해 숫자를 생성한다.


(define (make-scheme-number n)

((get 'make 'scheme-number) n))


제네릭산술체계의 틀이 잡혔으므로, 쉽게 새로운 종류의 수를 추가할 수 있다. 

추가가 손쉽다는 이점을 살려, 2.1.1 의 유리수 코드의 교체 없이 추가할수 있다.


(define (install-rational-package)

;; internal procedures

(define (numer x) (car x))

(define (denom x) (cdr x))

(define (make-rat n d)

(let ((g (gcd n d)))

(cons (/ n g) (/ d g))))

(define (add-rat x y)

(make-rat (+ (* (numer x) (denom y))

 (* (numer y) (denom x)))

   (* (denom x) (denom y))))

(define (sub-rat x y)

(make-rat (- (* (numer x) (denom y))

 (* (numer y) (denom x)))

   (* (denom x) (denom y))))

(define (mul-rat x y)

(make-rat (* (numer x) (numer y))

   (* (denom x) (denom y))))

(define (div-rat x y)

(make-rat (* (numer x) (denom y))

   (* (denom x) (numer y))))

;; interface to rest of the system

(define (tag x) (attach-tag 'rational x))

(put 'add '(rational rational)

(lambda (x y) (tag (add-rat x y))))

(put 'sub '(rational rational)

(lambda (x y) (tag (sub-rat x y))))

(put 'mul '(rational rational)

(lambda (x y) (tag (mul-rat x y))))

(put 'div '(rational rational)

(lambda (x y) (tag (div-rat x y))))

(put 'make 'rational

(lambda (n d) (tag (make-rat n d))))

'done)

(define (make-rational n d)

((get 'make 'rational) n d))


유사한 패키지를 complex 태그를 사용하여 복소수를 다루는데 추가할 수 있다. 


(define (install-complex-package)

;; imported procedures from rectangular and polar packages

(define (make-from-real-imag x y)

((get 'make-from-real-imag 'rectangular) x y))

(define (make-from-mag-ang r a)

((get 'make-from-mag-ang 'polar) r a))

;; internal procedures

(define (add-complex z1 z2)

(make-from-real-imag (+ (real-part z1) (real-part z2))

   (+ (imag-part z1) (imag-part z2))))

(define (sub-complex z1 z2)

(make-from-real-imag (- (real-part z1) (real-part z2))

   (- (imag-part z1) (imag-part z2))))

(define (mul-complex z1 z2)

(make-from-mag-ang (* (magnitude z1) (magnitude z2))

  (+ (angle z1) (angle z2))))

(define (div-complex z1 z2)

(make-from-mag-ang (/ (magnitude z1) (magnitude z2))

(- (angle z1) (angle z2))))

;; interface to rest of the system

(define (tag z) (attach-tag 'complex z))

(put 'add '(complex complex)

(lambda (z1 z2) (tag (add-complex z1 z2))))

(put 'sub '(complex complex)

(lambda (z1 z2) (tag (sub-complex z1 z2))))

(put 'mul '(complex complex)

(lambda (z1 z2) (tag (mul-complex z1 z2))))

(put 'div '(complex complex)

(lambda (z1 z2) (tag (div-complex z1 z2))))

(put 'make-from-real-imag 'complex

(lambda (x y) (tag (make-from-real-imag x y))))

(put 'make-from-mag-ang 'complex

(lambda (r a) (tag (make-from-mag-ang r a))))

'done)


이 패키지 외부의 프로그램은 복소수를 rectangluar form / ploarform 모두를 사용할 수 있다. 

바탕이 되는 프로시져가 (실제로는 어느한쪽의 패키지에 정의되어있는) 복소수 패키지 바깥으로 보여지고 있으며, 외부세계로 exported 하고 있다. 


(define (make-complex-from-real-imag x y)

((get 'make-from-real-imag 'complex) x y))

(define (make-complex-from-mag-ang r a)

((get 'make-from-mag-ang 'complex) r a))


여기서는 2단계의 태그 시스템을 가지고 있다. 어떤 표현방식 ( rec / pol ) 인지, 어떤 수인지 ( complex ) .

크고 복잡한 시스템에서는 많은 단계를 가지고 있을수 있으며, 다음을 위한 인터페이스들은 제네릭연산으로 인터페이스를 갖게 된다. 데이터 객체들이 "하위로" 전달됨에 따라, 바깥의 태그는 적절한 패키지로 방향을 잡고 contents 를 정요하여  이를 떼어내어 다음 단계의 태그가 앞으로의 dispatch 대상이 되도록 한다.


위의 패키지에서 add-rat / add-complex 를 완전히 예전에 썼던 코드를 그대로 사용하였다. 일단 각 인스톨 프로시져의 내부로 들어가게되면, 더이상 각각을 구분하기위한 이름은 필요없으므로, 단순한 이름을 사용하여도 된다. 




'SICP > 2. Building Abstractions with Data' 카테고리의 다른 글

2.5.3 Example: Symbolic Algebra  (0) 2015.11.01
2.3.4 Huffman Encoding Trees  (3) 2015.08.05
2.1.3 데이터란 무엇인가 ?  (0) 2015.02.07

Sublime Repl with scheme

개발툴/SubmlimeText 2015. 8. 10. 14:54

관련 파일들은 

https://github.com/nolleh/env

에서 다운로드 가능


Repl 을 이용하여 scheme 을 세팅한다.

서브라임의 packageInstall 을통해 먼저 SublimeRepl 을 설치. 


먼저 CLI 가 존재하는 스킴컴파일러를 적절히 (여기서는 SCM) 설치한다. 


http://people.csail.mit.edu/jaffer/SCM.html

(in windows)


다음 파일에서 scm 을 이용하도록 수정

%AppData%\Sublime Text 2\Packages\SublimeREPL\config\Scheme\Main.sublime-menu



"cmd": {"linux": ["scheme"],

          "osx": ["scheme"],

          "windows": ["scm"]},


혹은, ["scm", "-f", "$file_basename"] 을 지정하여 파일을 바로 넘길수 있다. 이때에는 repl 창이 계속해서 생성되는 불편함이 있지만.. #<unspecified> 같은 불편한 문자가 반복되지 않는다.. 


편의를 위해 단축키 설정. 같은 경로에 Default.sublime-keymap 생성, 적당한 단축키를 repl 프롬프트를 열기위한 값으로 설정한다.


[

{ "keys": ["alt+,"], "command": "run_existing_window_command", "args": {"id": "repl_scheme", "file": "config/Scheme/Main.sublime-menu"}}

]



서브라임이 구문분석을 할 수 있게 하기위해, Scheme.tmLanguage 파일을 생성한다. (경로는 main.sublime-menu 에 지정되어 있다. 기본값은 다음과 같음)


Packages\sublime-scheme-syntax\Scheme.tmLanguage




같은 경로에, 코멘트 처리를 위해 Scheme.tmPreferences 를 추가하자. 



추가로 프롬프트가 실행이 안될 경우, scm 의 경로를 지정한다.

preferences > Package Settings > SublimeRepl > Setting - default


"default_extend_env": {"PATH":"{PATH};c:\\Program Files (x86)\\scm"}


파일의 syntax 를 scheme 으로 설정하여 toos > evel in repl 을 통해 평가.

기본 단축키는 

ctrl + ,,F

( ctrl 과 ,를 함께 누르고 뗀후 f )



'개발툴 > SubmlimeText' 카테고리의 다른 글

설정값  (0) 2016.01.13
[Sublime Text 2] C# 에서 주석처리가 되지 않을때  (0) 2014.08.18
SublimeText Tabs > space  (0) 2014.08.13