Home » 분류할 수 없는 » Page 3

분류할 수 없는

WWDC의 자동 메모이제이션 코드 분석

시간이 오래 걸릴 수 있는 비싼 연산 작업이 있고, 이러한 연산을 반복해서 수행해야 하는 상황이 있을 때, 가장 손쉬운 성능 개선 방법은 연산 결과를 캐싱하는 것이다. 연산을 수행하는 함수가 입력이 같을 때 출력이 같은 것이 보장되는 순수한 함수라면, 재계산을 수행하는 것보다 캐시된 내용을 읽어와서 사용하는 것이 훨씬 빠른 것은 자명한 사실이다. 메모이제이션(Memoization) 실제로 이런 종류의 문제는 제법 흔하고 실제로도 계산 결과를 캐시해서 사용하는 것은 좋은 해결책 중 하나이다. 어떤 문제가 더 작은 부분문제들로 나뉠 수 있고, 전체 문제는 작은 부분문제들의… 더 보기 »WWDC의 자동 메모이제이션 코드 분석

유튜브 재생목록 내의 파일들을 다운로드 받기

bash 와 youtube-dl을 사용하여 유튜브 재생목록 내의 파일들을 다운로드 받는 과정을 정리했다. 여러 동영상을 모아두는 재생목록을 찾아서 동영상 리스트 페이지로 들어간다. 해당 페이지의 소스를 복사하여 편집기에 붙여둔다. 영상리스트에서 각 영상의 링크는 도메인을 빼고 /watch?v=….. 이런 식으로 주소가 구성된다. 그래서 \/watch\?v\=[a-zA-Z0-9]+ 패턴으로 모두 찾아서 이를 복사한다. 3의 주소들은 같은 주소가 모두 반복된다. 그래서 vim 등에서 한 줄씩만 남기고 지우는 작업을 거친다. 그리고 내용을 저장한다. 다음 bash 스크립트로 다운로드 받는다. $ for i in $(cat list.txt); do youtube-dl "http://www.youtube.com/$i"; done 다운로드 받은… 더 보기 »유튜브 재생목록 내의 파일들을 다운로드 받기

파이썬의 이름공간과 변수의 스코프

네임스페이스(name space, 이름공간)이란 프로그래밍 언어에서 특정한 엔티티를 이름에 따라 구분할 수 있는 범위를 말하는 것이다. 소스코드를 작성할 때 가장 어려운 일 중 하나는 변수나 함수의 이름을 정하는 것인데, 충돌이 발생하지 않도록 변수/함수의 이름을 모두 유니크하게 만드는 것은 현실적으로 불가능하다. 모든 이름을 외우고 있기도 어렵거니와, 여러 사람이 협업하는 경우에 다른 사람이 쓸 이름까지 다 알 수는 없기 때문이다.

그래서 프로그래밍언어에서는 네임스페이스라는 개념을 도입하여, 특정한 하나의 이름이 통용될 수 있는 범위를 제한한다. 따라서 소속된 네임스페이스가 다르다면 같은 이름이 다른 개체를 가리키도록 하는 것이 가능해진다.

더 보기 »파이썬의 이름공간과 변수의 스코프

[Swift] fast enumeration을 지원하는 Sequence타입

Sequence Type in Swift

Swift는 Objective-C에서 fast-enumeration이라 불리던 집합타입 내 원소 개체들을 순회하는 반복문을 지원한다. (이미 많은 언어들이 이러한 반복문 개념을 지원하고 있다.) Python의 그것과 매우 유사하게 Swift의 for..in 구문은 부적으로 시퀀스, 제너레이터라는 개념을 사용하고 있다.
Swift가 기본적으로 제공하는 Array, Dictionary는 기본적으로 for..in 구문예 적용이 가능하다. 그리고 이들은 내부적으로 SequenceType이라는 프로토콜을 따르고 있는데, 이는 다음과 같이 정의되어 있다. 더 보기 »[Swift] fast enumeration을 지원하는 Sequence타입

sed 사용법

how to use sed

sed는 “스트림 에디팅”의 약어로 sort나 grep과 유사하나 생각보다 많은 일을 할 수 있는 유틸리티이다. (일종의 자동화된 편집기라고 보면 된다.) sed의 문법은 다음의 개요를 가진다.

$ sed [-n] [-e script] [-f sfilename] [filenames]

단, -e옵션은 따로 붙이지 않아도 스크립트로 인식한다.

$ sed script filename

그 외에 몇 가지 옵션이 있다. (쓰일 것 같은 것만 기재. 전체 문서는 매뉴얼 문서 참고)더 보기 »sed 사용법

[Swift] 코어 이미지

Beginning Core Image in Swift

http://www.raywenderlich.com/76285/beginning-core-image-swift

코어 이미지는 이미지에 손쉽게 필터처리를 할 수 있는 강력한 프레임워크이다. 이는 어지간한 기본적인 사진 효과를 만들어낼 수 있는데, CPU 혹은 GPU 기반으로 프로세싱하고 있어서 매우 빠르다. 그냥 빠른 게 아니라 매우 빠르기 때문에 리얼타임으로 비디오 프레임에 적용될 수도 있다.
코어 이미지 필터는 여러 필터가 연쇄적으로 하나의 사진이나 비디오 프레임에 한꺼번에 적용될 수 있다. 이 때 여러 필터는 하나의 필터로 결합되어 이미지에 적용된다. 이런 방식은 한 번에 하나씩 이미지에 적용되는 것에 비해 훨씬 효율적이다. 더 보기 »[Swift] 코어 이미지

QuickSort in Functional Programming

일전에 포스팅하여 설명한 바 있는 퀵소트는 제자리정렬 (추가적으로 메모리를 사용하지 않고 배열 내 원소들의 위치를 바꿔가며 정렬)이지만 함수형 프로그래밍 언어에서는 모든 ‘값’이 상수이므로 변경이 불가하여 이를 적용할 수 없다. 결국 퀵소트를 구현하려고하면 제자리 정렬을 하는 대신 계속해서 부분집합의 사본을 만들게되는데, 그럼에도 불구하고 함수형 언어의 문법들은 수학적 표현과 관련이 깊기 때문에 더 간단하게 표현되는 경우가 많다.더 보기 »QuickSort in Functional Programming

Mingw-bash에서 chocoloatey 패키지 전체 재설치하기

윈도에서 여러 프로그램을 패키징하여 명령줄에서 설치하고 있는 Chocolatey가 요즘 업데이트를 제대로 못하고 있는 거 깉아서 설치된 패키지를 강제로 최신버전으로 재설치하도록하는 한방 스크립트. 더군다나 패키지 리스트 출력시에 그지같은 문구를 추가로 삽입하고 있어서 sed1를 쓰지 않을 수 없었음. #!/bin/sh # force reinstall all installed Chocoatey packages for p in $( choco list -lo | sed -n -e "/\ [0-9\.]*$/p" | sed "s/\ [0-9\.]*//g"); do choco install $p -force done view raw choco_update_all.sh hosted with ❤ by GitHub 윈도에서 cmd를 쓰는 경우 차라리… 더 보기 »Mingw-bash에서 chocoloatey 패키지 전체 재설치하기

버블 정렬 (Bubble Sort)

버블정렬은 정렬 중에서 가장 기본적이고 쉬운 알고리듬이다. 버블정렬은 배열의 앞에서부터 큰 원소를 뒤쪽으로 보내는 작업을 반복적으로 시행하여 배열 전체를 정렬한다. 이 때 큰 값들이 물속에서 거품이 떠오르는 것처럼 움직이기 때문에 ‘버블’이라는 이름이 붙었다.

간단한 예를 통해서 버블 정렬이 어떻게 작동하는지 살펴보자. 아래와 같은 배열이 있다고 가정하자.

더 보기 »버블 정렬 (Bubble Sort)

분산 계산법

원래 분산의 계산 법은 각 개별 값이 평균으로부터 떨어진 거리의 제곱의 평균을 의미하며 다음과 같이 정의한다. $$ Var(X) = \frac{\displaystyle \sum_{k=1}^n ( N_k – E(X) )^2 }{n} $$ 결국 이 식은 “제곱의 평균 – 평균의 제곱”으로 귀결된다. $$ V(X) = E(X^2) – (E(X))^2 $$ 이걸 학교 다닐 때 배웠나 안배웠나 기억이 안난다….