발생일: 2013.03.05 문제: 맥으로 넘어와서 가장 많이 사용하는 커맨드 중의 하나가 curl 이다. 커맨드라인에 익숙치 않았던 때엔, '오른쪽 버튼 > 다른 이름으로 저장 > 다운로드 폴더에 가서 복사 > 원하는 폴더에 붙여넣기'가 얼마나 귀찮은 일인지 몰랐더랬다. 얼마 전엔 비슷한 패턴의 주소를 가진 파일들을 한꺼번에 다운로드 받을 일이 있었는데,curl 을 이용해서 노가다 없이 가뿐하게 받을 수 있었다. 그치만 사실,..스크립트를 짜느라 하나 하나 클릭해서 다운로드 받는 것보단 오랜 시간이 걸리긴 했다. -_-a ㅎㅎㅎ 여튼, 이번에 스크립트를 짜보면서 curl 에 좀 더 익숙해졌다.유용한 몇 가지 기능을 메모해둔다. 해결책: 먼저, curl 은 커맨드 라인에서 URL 형태의 리소스를 요청/응..
발생일: 2013.03.05 문제: 압축 파일을 다운로드 받아주는 간단한 쉘 스크립트를 작성하고 있다.아래와 같이 사용자 입력을 받아서, 다운로드 후 압축을 풀어주고 싶다. 압축을 해제할까요~? (y/n) 쉘 스크립트에서 프롬프트 입력은 어떻게 처리하면 될까? 해결책: read 커맨드를 사용하면 되고,위처럼 프롬프트 문자열 후에 한 글자만 받고 싶다면 아래와 같이 사용하면 된다. $ read -n 1 -p "Unzip all files? (y/N)" -n 옵션은 입력받을 캐릭터 수를 의미하고,-p 옵션은 프롬프트 전에 출력할 문자열을 의미한다. read 커맨드로 읽어온 문자열은 REPLY 변수에 저장된다.입력받은 문자열은 아래와 같은 방식으로 분기할 수 있다. $ [[ $REPLY == [yY] ]] &..
발생일: 2013.02.25 문제:다음 달부터 다른 팀 분들을 대상으로 작은 자바스크립트 스터디의 강사를 맡기로 했는데,좀 걱정(?)이 된다.(무식이 탄로날까봐... -_-a ㅎㅎ) 이번을 기회 삼아,설명하려고 하면 이것 저것 떠올라 횡설수설하게 될 것 같은 개념들을 자세히 정리해보려고 한다. 제목이 좀 거창하지만, 첫 번째로 eval()을 주제로 삼았다. 해결책: eval(string)은 문자열로 넘어온 자바스크립트 구문을 실행하는데,호출하는 위치와 방식에 따라 eval의 실행 컨텍스트와 범위(scope)가 달라진다. 기본적으로, eval 은 실행 시점의 함수 범위(scope)에서 실행되며,eval()의 실행 컨텍스트(this) 또한 실행 시점의 함수의 것과 동일하다. 아래 코드를 보면 쉽게 이해할 수..
발생일: 2013.02.25 문제: 맥으로 꿋꿋이 생활해보려고 했으나, 역시 무리였다. -_-;결국 윈도우를 설치할 수 밖에 없는 상황이 왔다. 예전 윈도우 기반의 데스크탑에서 VirtualBox 로 여러 버전의 윈도우를 돌렸던 적이 있어,맥에도 VirtualBox 기반으로 돌리기로 마음 먹었다. 사실, 어떤 걸 설치할까 좀 고민하기도 했지만 버추어박스를 선택했다.- 부트캠프는 부팅을 따로 하니 패스-- 패러럴즈는 유료인데다, 다들 좋다고 해서 한 번 써보고 싶었다. 회사에서 쓰는 거라 구매신청하려고 했으나, 구매신청 메뉴가 IE에서만 된단다. -_- 어쩔 수 없이 패스...- 버추어박스는 무료니까!! 윈도우 때엔 별 문제 없이 잘 설치했는데,맥에 설치하면서 꽤 삽질을 했다. -_-; 삽질했던 내용 몇 ..
발생일: 2013.02.22 문제:요새 HTML5 Web Audio API를 파보고 있다. 스펙을 살펴보다 보니 deprecated 된 메서드가 있는데,튜토리얼의 대부분은 스펙이 변경되기 이전에 작성된 것들이 많아 이전 메서드를 기반으로 소개하고 있다. 당장 사용하는 데 있어서는 문제가 될 것 같지 않지만, 참고 차 정리해둔다. 해결책: 아래는 각 노드에서 변경된 메서드 목록이다. AudioBufferSourceNode noteOn() ---> start() noteGrainOn() ---> start() noteOff() ---> stop() AudioContext createGainNode() ---> createGain() createDelayNode() ---> createDelay() creat..
발생일: 2013.02.18 문제: 우리 부부는 주말마다 커피숍에 가서 책을 읽는데,어제는 날이 좋아서 남양주에 있는 고당이라는 카페로 나들이를 갔다. 작년에 한 번 다녀왔던 곳인데, 한옥 카페이고 분위기도 괜찮다.좀 비싼 데다 오래 기다려야 하는 게 흠이긴 한데, 딱 드라이브하기 좋을 만큼의 거리라 즐겁게 다녀왔다. 그치만, 거리도 있고 해서 오래 앉아있을 것도 아니어서, 가볍게 후딱 읽을 셈으로 책장에서 가장 얇은 '손에 잡히는 정규 표현식'을 뽑아 들고 갔다. 정규식은 나름 잘 알고 있다고 생각해서 그닥 읽을 계획이 없던 책이었는데,읽어보니 어려운 개념도 아주 쉽게 잘 설명해놓아서 많이 배울 수 있었다. 예전에 먼저 읽었던 아내가,단어의 경계를 나타내는 \b 메타 문자의 예제 부분에 물음표를 쳐둬서..
발생일: 2013.02.17 문제: 얼마 전 맥의 커맨드라인 svn을 업데이트 했다. 맥의 패키지 매니저 중의 하나인 Homebrew를 이용해서 인스톨했고,기존 버전은 1.6.18, 새로 받은 버전은 1.7.8이었다. 헌데, 업데이트 받은 후에도 svn이 기존 버전을 그대로 유지하고 있는 거다. $ svn --version svn, version 1.6.18 ... 혹시나 해서 type을 확인해보니, 기존 경로의 바이너리가 호출되고 있었다. $ type svn svn hashed (/usr/bin/svn) (type 커맨드로 파일의 타입을 확인할 수 있고, 실행 파일일 경우 경로를 알 수 있다) 새로 받은 svn은 /usr/local/bin 에 넣어뒀지만,PATH 변수에서 /usr/bin 이 /usr/l..
발생일: 2013.02.17 문제: PATH 정보를 조회해보니, git과 관련된 bin 디렉토리가 경로의 마지막에 포함되어 있다. $ echo $PATH ..(중략)..:/usr/local/git/bin 얼마 전 .bash_profile을 정리하면서,추가적으로 정의하는 PATH 경로는 아래처럼 PATH의 앞 부분에 추가하도록 했었다. $ export PATH=새패스:$PATH 어딘가에서 추가되었다면 앞 부분에 있는 게 당연한데,마지막에 정의되어 있는 것이 이상해 어디서 정의됐는지 파일을 뒤적여봤다.그리고, /etc/paths.d/git 파일에 정의되어 있는 걸 발견했다. /etc/paths.d 는 처음 들어 생소한 데다,/etc/paths 도 자세히 확인해본 적이 없어 잘 모르겠다. /etc/paths와..
발생일: 2013.02.16 문제: 맥을 사용하다 아래와 같은 얼럿창이 뜨면, 엔터를 입력해도 닫히지가 않는다. 그닥 귀찮은 일도 아니어서 평소에는 별 관심 없이 마우스로 클릭하곤 했었는데,오늘은 집안일을 좀 했더니 -_-; 유난히 손목 움직이기가 거슬린다. 분명 키보드로 컨트롤 할 수 있을 텐데~ 한 번 찾아보자. 해결책: 일단 심플한 해결책! "Command + 첫글자" 아... 이걸 몰랐다니... -..- ㅎㅎ 더 나아가서, Keyboard 설정에서 Full Keyboard Access 값을 All Controls로 바꿔주면,대화창 뿐만 아니라 모든 윈도우와 다이얼로그를 키보드로 네비게이팅할 수 있다. 버튼 그룹 간 이동은 Tab과 Shift + Tab 으로,항목 간 이동은 커서로,선택은 Space..
발생일: 2013.02.12 문제: 연휴에 시골에 다녀오던 길에 Maintainable JavaScript(읽기 좋은 자바스크립트 코딩 기법)을 읽었다.원래는 책읽기 스터디를 하려고 샀던 책이었는데, 가볍게 읽을 수 있을 것 같아 챙겨갔더랬다. 제목만 봐서는 컨벤션 이야기나 코딩 기법에 대한 것만 있을 것 같았는데,의외로 배포 자동화까지 폭넓은 주제를 다루고 있다.무엇보다, 저자의 경험을 기반으로 꼼꼼하게 설명하고 있어 더 유익했던 것 같다. 기억할 만한 내용을 메모해 옮겨둔다. 해결책: p.41: null은 객체(object)를 대신한다고 생각하는 것이 좋으며, 다음과 같이 사용한다.- 나중에 "객체"의 값을 할당할 변수를 초기화할 때- 인자 값으로 객체를 넘기는 함수를 호출할 때- 함수를 호출한 곳에..