Mac – Command 툴 Ditto 폴더 합치기

날씨가 갑자기 쌀쌀해졌네요. 다들 감기 조심하시고!
Ditto Command Tool에 대해서 알아보겠습니다.
출처는 How-To Geek!


같은 구조로 다 덮어버리고 싶을 때가 있다! 그러면 아래의 명령어를 이용해주세요.

ditto ~/Desktop/Test ~/Downloads/Test

참 쉽죠잉?

Emacs – Run Daemon on OS X

tell application "Terminal"
    try
        -- we look for <= 2 because Emacs --daemon seems to always have an entry in visibile-frame-list even if there isn't
        set frameVisible to do shell script "/Applications/Emacs.app/Contents/MacOS/bin/emacsclient -e '(<= 2 (length (visible-frame-list)))'"
        if frameVisible is not "t" then
            -- there is a not a visible frame, launch one
            do shell script "/Applications/Emacs.app/Contents/MacOS/bin/emacsclient -c -n"
        end if
    on error
        -- daemon is not running, start the daemon and open a frame     
        do shell script "/Applications/Emacs.app/Contents/MacOS/Emacs --daemon"
        do shell script "/Applications/Emacs.app/Contents/MacOS/bin/emacsclient -c -n"
    end try
end tell

-- bring the visible frame to the front
tell application "Emacs" to activate

FB SDK – 페이스북 에러 핸들링

대략 한달이라는 기간이 지났고 어느정도 목업 버전이 나왔다. 하지만 아직 처리되지 않은 부분이 많으며, Facebook SDK를 이용한 개발 과정에서 현재 필요한 작업 내용은 아래와 같다.

이 내용들은 sdk error 관련 문서를 번역/정리한 내용이다.
링크 페이지의 모든 내용들이 정리되지 않았음을 알린다.


우리의 앱은 아래와 같은 상황에 대해서 처리되어야 한다.

  • Facebook 설정에서 우리의 앱이 지워졌을 때
  • Facebook 설정에서 우리의 앱 권한이 지워졌을 때
  • iOS 설정에서 Facebook 계정이 허용되지 않을 때
  • Facebook 비밀번호가 변경되었을 때
  • Facebook 계정이 확인되어지지 않았을 때
  • 요청 시 우리의 앱에서 퍼미션 요청이 거절되었을 때
  • 로그인 또는 퍼미션 요청 진행 중 앱을 종료했을 때

또한 아래와 같은 환경에서도 처리를 해주어야 한다.

  • 접근 토큰이 만료되었을 때
  • Facebook 서버로부터 요청이 제한되었을 때
  • Facebook 서비스가 다운되었을 때
  • Facebook 점검이 시작되었을 때
  • Open Graph 실행 환경으로부터 에러가 발생되었을 때

에러가 발생되었을 때 대한 처리를 설명하고자 한다.
FBErrorUtility 클래스 메서드 들은 각 스텝에서 필요한 정보를 출력하는 기능들을 제공한다. 일단 shouldNotifyUserForError:를 호출함으로 써 그 에러가 유저에게 필요한 에러인지 아니면 또 다른 액션을 취해야 하는 건지 판단한다. 만약 유저에게 필요한 정보다라고 하면 YES, 아니면 NO를 반환하게 된다.

YES로 반환될 경우 userMessageForError: 메서드를 호출함으로써 정보를 파싱하여 보여준다.
NO 일 경우 errorCategoryForError: 메서드를 호출함으로써 좀 더 많은 정보들을 얻을 수 있다. 이에 대한 정보들은 너무 방대함으로 따로 설명하지 않겠다. 링크를 참조하기 바란다.

주석의 중요함….과 그외 일어났던 일들을 정리하며

필자는 얼마전에 개인적인 사정으로 회사를 그만두게 되었다.
그와 동시에 이전에 작업하였던 내용을 인수인계했고 문제는 인수인계하면서 발생하였다. 난 이전에 많은 코드들을 아래와 같이 수정하였다.
– 사용되지 않은 코드들을 삭제 (사실 사용되지 않는 코드들을 내비두는 것은 발전에 도움이 되지 않는다. 이전 코드를 사용함에 따라 이전에 문제점을 발견할 수 없고, 더 좋은 코드를 작성 할 수 없다)
필요에 따라 소스 버전 관리(Git, SVN 등)를 이용하여 참조하는 것이 더 좋다.
– 특정에 맞지 않는 코드 삭제 (필자는 이전 프로젝트에서 이러한 경우를 확인 한적이 있다. 뷰의 간격을 주기 위해 또 다른 뷰를 사용. 현 시대에 상황에서는 처리 능력보다 메모리 점유를 더 신경써야 한다. 또한 뷰라는 컴퍼넌트는 자체 Margin 또는 Padding이라는 속성을 가지고 있기 때문에 이를 적극사용해야 한다.)
– 연산보다는 메모리 점유를 줄이자. 위와 같은 상황
– static 사용을 최대한으로 줄이자. static은 프로세스 종류 전에 해제되지 않는다.(물론 수동으로 해제가 가능하다.) 또한 유지보수 시 프로세스 흐름을 파악하는데 어렵게 만든다.
– 객체지향의 특성을 살려 코딩,필요하지 않은 부분에서의 선언을 피하라. (자바 같은 경우 어느 지점에서나 선언이 가능하다. pre-define, 언어 C의 경우 사용에 필요한 변수들은 선언부에 작성되어야함. 그러나 객체지향의 언어나 요즘의 언어들은 그때그때 선언이 가능) 이는 프로세스 흐름을 파악할때 불편하다.
– 전역 변수를 피하라. (프로세스 중간에 값이 변경될 수 있다. 흐름을 파악하는데 어려움을 주며, 많은 디버깅 단계를 거치게 된다.)
– 각 기능들은 함수화 시켜라. (디버깅이 편해지며, 유지보수 또한 쉽다.)
– 주석을 필히 자세히 작성하여라. (필자는 인수인계 당시 너무 많은 코드들을 변경하여, 전달하고자 하는 핵심포인트를 놓친적이 있다. 나는 이때 알았다 내가 천재가 아니란것을.. :)

이외 많이 수정하였지만 정확한 인수인계를 위해서 보다 정확한 코멘트 작성이 필요하다. 코드에서나 소스 버전관리에서…

Java > Command line에서 jar파일 실행하기

ref : http://samindaw.wordpress.com/2008/11/04/specifying-the-main-class-to-run-in-a-jar-file-from-command-line/

JAR파일은 JVM 위에서 돌릴 수 있다.

eg

foo.class 파일을 가지고 있다고 가정하자. (물론 static main 메서드도…) 

이 파일은 jar file이고. bar.jar라는 파일에 내장되어있다.

static main메서드를 사용하여 아래와 같이 실행시킬 수 있다.

# java -cp bar.jar foo

위에 클래스와 네임스페이스는 정확해야 한다. 그리고  “:” 콜론을 이용하여 추가적인 패스를 등록할 수 있다.

 

English > computer Lab Dictation

This is what I recommend you to study english.

When i was in Canada, i used to study english at the following site. 

Instructions.

1. Go to the website

http://englishclub.com/listening/dictation.html

2. Begin with “Short on-line dictations.”

  • Click A to listen first at normal speed. Do not write anything yet.
  • Click B Listen at slow speed and type what you hear in Box C.
  • Click D to listen @ normal speed again and make corrections in Box C.
  • Click F to see the transcript and correct your dictation.

Finish all the Short dictations.

3. Do the “medium on-line dictations.”

Mac > MacPorts에서 Homebrew로

Ref : http://bitboxer.de/2010/06/03/moving-from-macports-to-homebrew/

왜 MacPorts를 사용하는가?

* 정말로 한번쯤은 Homebrew로 옴기는걸 생각해야 한다.

  • Homebrew는 자기가 원하는 곳에 설치가 가능하며, 심볼릭 링크로 사용할 수 있다.
  • 따로 perl, openssl, x11, 등등 맥에서 찾을 수 있는 것들을 사용하여 이미 존재하는 것들을 사용하기 때문에 설치할 필요 없다. 시간과 디스크 공간을 낭비할 필요 없다.
  • Command Line으로 더 편하게 사용이 가능하다.
  • Homebrew와 설치 스크립트는 Github에서 참조한다.
  • 설치 스크립트와 Homebrew는 Ruby로 작성되었다.

MacPorts에서 Homebrew로 옴기는 것은 약간은 이상하게 들릴 수 있지만 MacPort는 너무 많은 것들이 시스템에 설치 된다.

자 그럼 이전에 설치된 MacPorts를 지워보자.

sudo port -f uninstall installed

위 명령으로 MacPorts 통해 설치된 파일은 지워지지만 정작 MacPorts와 의존되었던 파일들은 지워지지 않는다. 아래와 같이 지워주자! (확인!! /opt/local 폴더에 MySQL이나 그외 다른게 있는지 확인)

살짝 겁이 난다면 아래의 디렉토리를 다른 디렉토리로 옴긴 후 이상이 없을 때 삭제하여도 무방하다.

sudo rm -rf /opt/local
sudo rm -rf /Applications/DarwinPorts
sudo rm -rf /Applications/MacPorts
sudo rm -rf /Library/LaunchDaemons/org.macports.*
sudo rm -rf /Library/Receipts/DarwinPorts*.pkg
sudo rm -rf /Library/Receipts/MacPorts*.pkg
sudo rm -rf /Library/StartupItems/DarwinPortsStartup
sudo rm -rf /Library/Tcl/darwinports1.0
sudo rm -rf /Library/Tcl/macports1.0
sudo rm -rf ~/.macports 

이제 Homebrew를 설치하자.

brew install wget

아래와 같이 조금 주의해야 할 상황이 있다.

만약 MacPorts 디렉토리에 ruby gems과 의존된 라이브러가 있다면, 다시 재 컴파일 해주어야한다.