장 진희의 모든 글

Reset Mail.app on Mac

아 정말 이런것까지 알아야 된다니!

  1. Mail 앱을 끈다.
  2. Finder에서 Cmd + Shift + G를 눌러서 ~/Library/를 입력한다.
  3. 그 폴더 안에서 아래 것들을 찾아서 지워버린다.
    • Caches/com.apple.mail
    • Saved Application State/com.apple.mail.savedState
    • Application Support/AddressBook/MailRecents-v4.abcdmr
    • Containers/com.apple.mail
    • Mail
    • Preferences/com.apple.mail.plist
    • Preferences/com.apple.mail.searchhistory.plist

Mean, RMS and Covariance with computer

데이타 처리를 하면서 평균과 표준편차를 구해야 하는 경우가 많이 있다. 이 때, 평균과 표준편차의 계산을 점화식을 이용해서 하면 반복문의 수를 반으로 줄여서 빠르게 계산을 할 수 있다.

  • 증명따윈 필요없는 귀차니스트를 위한 식

평균: \(\mu_{n+1} = \displaystyle\frac{n}{n+1}\mu_n + \displaystyle\frac{a_{n+1}}{n+1},\quad(n\geq0). \)

표준편차: \(\sigma^2_{n+1}=\displaystyle\frac{n}{n+1}\sigma^2_{n}+\displaystyle\frac{(\mu_{n+1}-a_{n+1})^2}{n},\quad(n\geq1).\)

공변: \(\sigma(a,b)_{n+1}=\displaystyle\frac{n}{n+1}\sigma(a,b)_{n}+\displaystyle\frac{(\mu_{n+1}-a_{n+1})(\nu_{n+1}-b_{n+1})}{n},\quad(n\geq1).\)

  • 평균 증명
    • 점화식을 이용해서 \(n+1\)번째 항까지의 평균을 구할 때 우리가 가지고 있는 정보는 다음과 같다.
      1. \(n\)번째 항까지의 평균 \(\mu_n\)
      2. \(n+1\)번째 항의 값 \(a_{n+1}\)
    • 이 정보들만 가지고 \(n+1\)번째 항까지의 평균을 구해내야 한다.

\[\begin{align}\mu_{n+1}&=\displaystyle\sum^{n+1}_{i=1}\displaystyle\frac{a_i}{n+1},\\&=\displaystyle\sum^{n}_{i=1}\displaystyle\frac{a_i}{n+1}+\displaystyle\frac{a_{n+1}}{n+1},\\&=\displaystyle\frac{a_{n+1}}{n+1}+\displaystyle\frac{n}{n+1}\displaystyle\sum^{n}_{i=1}\displaystyle\frac{a_i}{n}.\end{align}\]

\[\therefore \mu_{n+1}=\dfrac{n}{n+1}\mu_n+\dfrac{a_{n+1}}{n+1},\quad(n\geq0).\]

 

  • 표준편차 증명
    • \(n+1\)번째 항까지의 표준편차를 구할 때에 우리가 가지고 있는 정보는 다음과 같다.
      1. \(n\)번째 항까지의 표준편차 \(\sigma^2_{n}\)
      2. \(n+1\)번째 항까지의 평균 \(\mu_{n+1}\)
      3. \(n+1\)번째 항의 값 \(a_{n+1}\)
    • 평균과 마찬가지로, 표준편차를 구할 때도 위 세 가지 값만 가지고 \(n+1\)번째 항까지의 표준편차를 구해야 한다.

\[\begin{align}\sigma^2_{n+1}&=\sum^{n+1}_{i=1}\dfrac{(a_i-\mu_{n+1})^2}{n+1},\\&=\sum^{n}_{i=1}\dfrac{(a_i-\mu_{n+1})^2}{n+1}+\frac{(a_{n+1}-\mu_{n+1})^2}{n+1}.\qquad (1)\end{align}\]

두번째 항은 알고있는 값들로만 돼 있으니 놔두고, 첫번째 항을 알고있는 값들로만 바꿔주면 된다.

\[\begin{align}\sum^{n}_{i=1}(a_i-\mu_{n+1})^2-\sum^{n}_{i=1}(a_i-\mu_n)^2&=\sum^{n}_{i=1}(\mu_n-\mu_{n+1})(2a_i-\mu_{n+1}-\mu_n),\\&=(\mu_n-\mu_{n+1})(2n\mu_n-n\mu_{n+1}-n\mu_n),\\&=n(\mu_{n+1}-\mu_n)^2.\qquad(2)\end{align}\]

이제 식 (2)를 식 (1)에 넣어 정리하면,

\[\begin{align}\sigma^2_{n+1}&=\sum^{n}_{i=1}\dfrac{(a_i-\mu_n)^2}{n+1}+\dfrac{n}{n+1}(\mu_{n+1}-\mu_n)^2+\dfrac{(a_{n+1}-\mu_{n+1})^2}{n+1},\\&=\dfrac{n}{n+1}\sigma^2_{n}+\dfrac{n}{n+1}(\mu_{n+1}-\mu_n)^2+\dfrac{(a_{n+1}-\mu_{n+1})^2}{n+1}.\qquad(3)\end{align}\]

\(n\)번째 항까지의 평균값은 \(n+1\)번째 항까지의 평균값을 구하면서 없어졌으므로, 평균의 점화식 공식을 이용해서 \(n\)번째 항까지의 평균값을 없애버리자. 점화식을 다시 정리하면

\[\mu_n=\dfrac{n+1}{n}\mu_{n+1}-\dfrac{1}{n}a_{n+1}\]

가 되므로, 이 식을 식 (3)의 두번째 항에 대입하면, 두번째 항은 다음과 같이 된다.

\[\begin{align}\dfrac{n}{n+1}(\mu_{n+1}-\mu_n)^2&=\dfrac{n}{n+1}\left(\mu_{n+1}-\dfrac{n+1}{n}\mu_{n+1}+\dfrac{1}{n}a_{n+1}\right)^2,\\&=\dfrac{1}{n(n+1)}(a_{n+1}-\mu_{n+1})^2\end{align}\]

\[\therefore \sigma^2_{n+1}=\dfrac{n}{n+1}\sigma^2_{n}+\dfrac{(\mu_{n+1}-a_{n+1})^2}{n},\quad(n\geq1).\]

  • 공변 증명은 표준편차 증명과 똑같은 방식이므로 생략한다.
  • 각 값의 가중치가 같지 않을 때의 평균과  공변 식

평균: \(\mu_{n+1} = \displaystyle\frac{W_n}{W_n+w_{n+1}}\mu_n + \displaystyle\frac{w_{n+1}a_{n+1}}{W_n+w_{n+1}},\quad(n\geq0). \)

표준편차: \(\sigma^2_{n+1}=\displaystyle\frac{W_n}{W_n+w_{n+1}}\sigma^2_{n}+\displaystyle\frac{w_{n+1}(\mu_{n+1}-a_{n+1})^2}{W_n},\quad(n\geq1).\)

공변: \(\sigma(a,b)_{n+1}=\displaystyle\frac{W_n}{W_n+w_{n+1}}\sigma(a,b)_{n}+\displaystyle\frac{w_{n+1}(\mu_{n+1}-a_{n+1})(\nu_{n+1}-b_{n+1})}{W_n},\quad(n\geq1).\)

위 식들에서 \(W_n=\displaystyle\sum^n_{i=1}w_i\)이고, \(w_n\)은 \(n\)번째 값의 가중치이다.

  • Acknowledgement
    • 이정우님이 가중치가 있을 때의 계산 오류에 대해 지적해 주어 바로고침

Compiling ROOT v5.34.10 on OSX Mavericks with Xcode 5.0.1 (Partially solved in ROOT v5.34.11)

  1. Open config/Makefile.macosx64 file in the root source folder with any text editor.
  2. add -stdlib=libstdc++ to the variables CXXFLAGS, CFLAGSCINTCXXFLAGSCINTCFLAGS, and LDFLAGS.
  3. If Fortran is compiled and environment variables for it are set, then you should copy LDFLAGS to F77LDFLAGS before you add -stdlib=libstdc++.
  4. That’s it!
  • Finally, when you compile your code using ROOT library, -stdlib=llibstdc++ should be added as an argument to the compiler.
  • Reference
  1. https://github.com/mxcl/homebrew/pull/22259

– Solved on 2013/10/31 in ROOT v5.34.11

– Added on 2013/10/22

  • I’m not sure this happens only to me, but after I updated to Mavericks GM 2 (13A603), the ROOT is not compiled on it. So, I have to find out the way to resolving this.
  1. Open core/base/inc/RConfig.h
  2. Find AvailabilityMacros.h
  3. Add path /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include
    in before the filename.

– Added on 2013/11/04

  • Maybe the command below will solve the all problems.

xcode-select –install

dos2unix

가끔 “^M”문자가 텍스트 파일 안에 들어가 있을 때가 있다. 윈도우 엔터문자 유닉스 엔터문자 어쩌구 저쩌구 하지만, 리눅스에서는 대체로 기본으로 깔려있는 dos2unix라는 프로그램을 이용해서 유닉스 형태의 엔터문자로 바꿔줘서 정상적인 문서로 만들 수 있다.

맥에는 이게 기본적으로 없는데, dos2unix 하나 쓰자고 요상한걸 막 깔긴 기분이 나쁘니까 아래 스크립트를 만들어서 실행 권한을 주고, PATH가 지정된 폴더에 집어 넣어 주거나 특정 폴더에 집어넣은 후 PATH를 지정해주면 어디서나 쉽게 사용할 수 있다.

#!/bin/sh

SOURCE=$1
TEMP=$1.dos2unix.temp

echo "Converting DOS file to UNIX file!"
cat $SOURCE | col -b > $TEMP
mv $TEMP $SOURCE

LaTeX에 새로운 클래스 추가하기

학회에 페이퍼를 내거나 논문을 쓰거나 할 때, 새로운 클래스를 등록해야 할 때가 있다. 이 때, 새로운 클래스 파일을 다운받은 후, 아래 경로에 넣어준다. (2013년 MacTeX 기준)

  • /usr/local/texlive/texmf-local/tex/latex/local

그 다음 다음 명령어를 쳐 준다.

  • texhash

이제 바로 다운받은 클래스를 사용할 수 있다.

라고 위처럼 써놨는데, cls파일 내부에 ProvidesClass에 어떤게 써있는지 보고 그 클래스를 사용하면 그냥 같은 폴더에 넣어놓는 것 만으로도 사용이 가능한 것 같다. – 2013/08/06 추가

Multi-Architecture Compiling

아주 가끔가다 32 bit와 64 bit에서 동시에 사용가능한 라이브러리를 컴파일해야 할 필요가 있다. 이 때에,

  • CFLAGS+=”-arch i386 -arch x86_64″
  • CXXFLAGS+=”-arch i386 -arch x86_64″
  • LDFLAGS+=”-arch i386 -arch x86_64″

위 세개를 컴파일과 링크시에 잘 넣어주면 된다. 물론 make할 때 넣어줘도 된다.

컴파일 중간에

  • -E, -S, -save-temps and -M options are not allowed with multiple -arch flags

이런 에러가 난다면, configure 시에

  • –disable-dependency-tracking

옵션을 추가해서 하면 에러가 안난다.

참고:
사실 이게 라이브러리를 벗어나서 실행파일에도 되는지는 확실히 모르겠다. Mac에서 Xcode를 이용해서는 32 bit와 64 bit에서 동시에 사용가능한 바이너리를 만드니까 안될 것 같지는 않지만….

참고문헌

  1. http://blog.omega-prime.co.uk/?p=102

Static, Shared & Dynamic Libraries

내가 이해한대로 적자면, 라이브러리라는건 문자 그대로 “도서관”이라고 보면 된다. A라는 코드에서 B라는 것을 썼는데, B에 대한 정의가 A에 나와있지 않을 때, 다른 라이브러리를 참조해서 B를 가져온다.

이 도서관이 3가지 종류가 있는데, 프로그램을 통째로 이사가 가능한 대학이라고 치면

  • Static Library
    • 도서관이 붙어있는 대학. 대학이 이사갈때마다 도서관도 같이 딸려간다.
  • Shared Library
    • 도서관이 있지만 붙어있진 않은 대학. 대학과 도서관이 독립적으로 존재하지만, 대학 문을 열때마다 도서관 문도 같이 연다.
  • Dynamic Library
    • Shared Library와 대부분 같지만, 대학에서 특별히 요청하지 않는 한 도서관 문을 열지 않는다. 필요할때만 도서관 문을 여는 대학.

참고: Dynamic Library 파일은, 최종본이기 때문에 링킹이 되질 않는다!

참고문헌

  1. http://blog.naver.com/xogml_blog?Redirect=Log&logNo=130138049704

몸을 찔렀을 때, 어디가 아픈지 어떻게 알까?

  • 궁금점

    • 예를들어 엄지손가락 가운데를 바늘로 찌른다고 하자. 그럼 이 신호는 뇌에 어떻게 전달되고 처리될까?
  • 생각

    1. 엄지손가락 가운데를 찌르면, 엄지손가락 가운데 있는 통점과 압점이 자극이 된 후, 전기신호를 발생시킬 것 같다.
    2. 중·고등학교때 배운 생물지식에 따르면, 자극된 통점과 압점에서 발생한 전기신호는, 한쪽 방향으로(손에서 뇌로)만 흐를 것이다.
    3. 뇌로 전달된 신호는 뇌에서 “엄지손가락 끝이 눌렸다”와 “아프다”로 해석된 후, 합쳐져서  “엄지손가락 끝이 눌려서 아프다”가 될까?
    4. 3번 처럼 된다면, 압점이 있는 모든 부분은 뇌에 1대1 대응으로 위치가 맵핑 돼있다는 말인가?
  • 알아봐야 할 것 같은 것들

    1. 중·고등학교 수준 이상의 신경에 관한 내용

awk & grep

리눅스랑 맥에 기본적으로 깔려있는 awk랑 grep을 이용해서 파일 리스트를 원하는 형태로 조작하는 연습을 하며 이 두 프로그램에 대해 알아보자. 먼저 주어진 리스트는 다음과 같다.

2013-07-20_22-38-44여기서 raw라는 확장자를 가진 파일만 추려서 확장자를 떼고, rawToROOT라는 실행파일의 인자로 넘겨주는 형태로 rawToROOT파일을 실행시키는 문장을 만들려고 한다. 물론 아무생각 없이 ls > run.sh 로 ls 내용을 run.sh에 입력한다음 vi를 이용해서 손으로 하나하나 혹은 매크로로 입력해주는 방법도 있다. 그게 편한 사람은 그걸 그냥 써도 된다. 일단 해보고 생각해보자.

먼저 raw 확장자를 가진 파일만 추려내보자.

ls | grep .raw$

2013-07-20_23-10-47

위 명령어는 ls에서 나온 결과에서 “.raw”로 끝나는 문자를 가진 결과만 출력한다. “$”가 문장의 끝을 의미한다. 결과는 다음과 같다.

이제 이 결과에서 “.raw”확장자를 가진 파일만 추려서 .raw를 떼버리고 앞쪽에 “./rawToROOT ”를 붙이면 완성이다.

ls | grep .raw$ | awk -F.raw ‘{printf(“./rawToROOT %s\n”, $1)}’

2013-07-20_23-11-28끝! awk를 이용해서 “ls | grep .raw$”에서 나온 결과를 편집해서 출력한 것이다. awk의 “-F.raw”옵션은 “.raw”를 기준으로 결과에 있는 문자열을 자른다. 순서대로 자르는 기준의 앞쪽 문자열은 $1에, 뒷쪽 문자열은 $2에 할당된다. 자르는 기준의 문자가 “.”이나 “,”여서 잘리는 위치가 여러군대라면 순서대로 “$숫자”형태로 저장된다. (10 이상까지 되는지는 모르겠다. 한번 해보길….)
그 다음 자른 문자를 printf를 이용해서 “./rawToROOT ”라는 문자를 붙여서 출력한다. printf 문법은 다들 아시시라 생각하고 생략한다.

이제 적당히 뒤에 “> run.sh”를 붙여서 결과를 파일로 출력한다음 실행시켜주면 끝!