Home » 21세기소년 » Page 5

21세기소년

21세기소년 / IT / 정보기술 / 인터넷 / 프로그래밍 / 미래 / 과학 / 과학지식 / 물리 / 화학 / 천문 / 생물학 / 이과생이나 관심가질 법한 자질구레한 이야기들

BASH의 문자열 확장에 관해

셸 스크립트를 사용하면서, 가장 헷갈리는 부분 중 하나가 문자열 값들이 어떻게 확장되는가 하는 점이다. 여기서는 조금 자세하게 엔터키를 누르는 그 순간에 어떤 ‘마법’이 벌어지는지 보려고한다. 몇 가지 간단한 예제들에서도 이 현상은 우리가 알지 못하는 사이에 쓰고 있는 셈인데, 이를테면 echo 같은 명령에서 이것이 일어난다.

확장 (expansion)

명령을 입력하고 엔터를 누르는 매 순간에 bash는 우리의 명령을 수행하기 이전에 몇 가지 텍스트 관련 처리를 먼저 하게 된다. 이미 echo * 등의 명령에서 어떻게 단순한 글자가 변경되는지를 본 적이 있다. 예를 들어 *는 쉘에서 여러가지 의미를 가지게 된다. 이것이 실제로 벌어지는 것을 우리는 확장(expansion)이라 부른다. 확장을 통해 우리가 무언가를 입력하고, 그것은 다시 다른 무언가로 확장된 후, 실제 명령은 그것을 통해 수행된다. 이를 들여다보기 위해 echo 명령을 좀 더 살펴보자. 이는 아주 단순한 빌트인 명령으로 그저 텍스트를 화면에 출력한다.

$ echo this is a test
this is a test

간단하다. 넘겨지는 모든 인자가 출력된다. 다음은 어떤가?

$ echo *
Desktop Document ls-output.txt Music Pictures Public Templates Videos

더 보기 »BASH의 문자열 확장에 관해

클로저 내부에서 self를 캡쳐하는 방법 – Swift

항상 [unowned self]를 써야 할까요?

http://stackoverflow.com/questions/24320347/shall-we-always-use-unowned-self-inside-closure-in-swift 의 내용중 일부를 번역하였습니다.

아니오, 분명히 [unowned self]를 쓰지 말아야할 상황이 존재합니다. 특정한 클로져가 호출되었을 때에 그 시점까지 self가 파괴되지 않고 살아있음을 보장할 필요가 있을 때가 있단 말이죠. 예를 한가지 들어봅시다. 비동기 네트워크 요청을 하고, 요청에 대한 응답을 받았을 때 self로부터 어떤 무언가를 호출해야 한다고 가정해봅시다. 비동기 요청이 끝나는 시점 이전에 해당 객체가 해제되어 사라졌다면
프로그램이 뻗고 말겁니다.
그렇다면 언제 unowned selfweak self를 써야하는가? 바로 강한 참조 사이클이 만들어질 때입니다. 이는 두개 이상의 객체가 서로 순환하면서 서로를 순서대로 참조해나갈 때 생길 수 있습니다. 이 경우 사이클 내의 객체들은 어떤 경우에도 항상 참조수 1 이상을 갖기 때문에 파괴되지 않고 리소스를 낭비하게 됩니다.더 보기 »클로저 내부에서 self를 캡쳐하는 방법 – Swift

grep 간단 사용법🔍

grep은 주어진 파일(들)이나 표준입력에서 주어진 패턴과 매칭되는 라인들을 필터링하여 출력해주는 유틸리티로 여러 파일에서 특정한 문자열을 한 번에 찾을 수 있게하는 도구이다.

grep의 사촌쯤 되는 fgrep, egrep도 있는데 이들은 각각 grep의 -F, -E 옵션으로 통합되었으며 현재는 오래된 스크립트에서 호출하는 상황을 위해호환성 유지 측면으로만 남겨져 있다고 생각하면 된다.

더 보기 »grep 간단 사용법🔍

Swift의 프로퍼티에 대한 이해

프로퍼티(property)는 직역하자면 “재산”, “소유물” 등으로 번역되는데, 보통은 속성이라고 번역하여 쓰는 것이 일반적이다. (“속성”이라는 의미의 attribute와 혼동이 있을 수 있지만, 일단 언어의 기능으로 한정했을 때에는 크게 상관은 없을 것 같다.) 프로퍼티는 클래스나 구조체 혹은 열거체(enum 타입)의 객체 인스턴스가 그 내부에 가지고 있는, 객체의 상태에 관한 정보를 말한다. 이렇게 말하면 Swift의 프로퍼티는 마치 C 구조체의 멤버 변수와 다름 없다고 생각될 수 있는데, 조금 차이가 있다. Swift의 프로퍼티 개념은 Objective-C의 선언 프로퍼티의 개념을 이어 받은 것이라 볼 수 있다. 따라서 프로퍼티에 대해 생각할… 더 보기 »Swift의 프로퍼티에 대한 이해

예제 – Todo 앱 만들어보기

mithril 프레임 워크를 사용해서 간단한 Todo 앱을 만들어 보겠습니다. 입력필드와 Add버튼이 있어서, 할일을 입력하고 Add 버튼을 클릭하면 새 할일이 생성됩니다. 할일들은 목록으로 표시되며, 각각의 할일은 체크 박스를 포함합니다. 체크박스에 체크하면 완료한 항목이 되어 취소선이 그어지게 됩니다. 앱을 크게 세 개의 컴포넌트로 구성하고자 합니다. App – 메인 앱 컴포넌트로 할일의 배열과 새 일의 제목이 될 텍스트 값을 가지고 있습니다. Inputs – 입력 필드 부분을 표현합니다. Lists – 할일 목록 부분을 표현합니다. 먼저 개별 작업을 표현할 클래스를 정의합니다. 제목과 완료 여부 정도만… 더 보기 »예제 – Todo 앱 만들어보기

컴포넌트와 가상노드 – mithril

mithril 앱은 기본적으로 가상 DOM을 사용하여 웹페이지 상의 UI를 생성합니다. 기본적으로 m.render() 함수를 사용해서 페이지 내의 DOM Element 내에 어떤 UI를 그려내거나, m.mount()를 사용해서 해당 DOM Element가 가상 DOM으로 구성되는 UI를 관리할 수 있도록 합니다. 이 두 함수는 UI를 구성하는 방법으로 사용되지만, 그 기능이나 용도가 조금 다릅니다.

더 보기 »컴포넌트와 가상노드 – mithril

정수 배열의 최대 부분합 (연습문제)

배열의 연속된 부분집합의 최대합 정수 배열이 주어질 때 배열내의 연속된 원소를 더한 부분합의 최대값을 구하는 문제이다. 구간이 아닌 최대값 자체를 구하면 되는 문제이다. 간단히 생각하면 0부터 1, 2, 3 … n 까지의 합 중 최대인 값, 그 다음은 1부터 2, 3, 4 .. n 까지의 값 중 최대인값 이렇게 비교해나갈 수 있는데 그러면 반복계산이 너무 많다. 따라서 DP를 이용한다. 0번 인덱스까지의 최대합은 0번 값 그 자체이다. i번 인덱스까지의 최대 부분합은, (i-1) 번 까지의 최대 부분합과 i번 값의 합이다. 이 때… 더 보기 »정수 배열의 최대 부분합 (연습문제)