Emacs + Python


Cask


➜ .emacs.d cat Cask
...
(depends-on "yasnippet")
(depends-on "cl-lib")
(depends-on "init-loader")
(depends-on "python")
(depends-on "flycheck-pyflakes")
(depends-on "ecb")
(depends-on "flymake")
(depends-on "flymake-cursor")
(depends-on "elpy")

pip of Python


➜ ~ pip list
autopep8 (1.2.1)
Django (1.8.6)
flake8 (2.5.0)
Flask (0.10.1)
Flask-Psycopg2 (1.3)
importmagic (0.1.3)
itsdangerous (0.24)
jedi (0.9.0)
Jinja2 (2.8)
MarkupSafe (0.23)
mccabe (0.3.1)
pep8 (1.5.7)
pip (7.1.2)
pyflakes (1.0.0)
Pymacs (0.25)
rope (0.10.3)
ropemacs (0.8)
ropemode (0.3)
setuptools (18.3.1)
Werkzeug (0.11.2)
wheel (0.26.0)
yapf (0.6.2)
➜ ~

iOS 개발, CocoaPods, “.h” 파일들을 못 찾을 때 해결 방법


프로젝트에 Pods-{앱명}.[debug/release].xcconfig 이런 파일(텍스트)이 있을 것이다.

HEADER_SEARCH_PATHS = ${SRCROOT}/Pods/Headers/**

를 추가해 준다.

Xcode 의 “Build Settings” 쪽에 보면 “Header Search Paths” 항목에 “…./Pods/Headers/**” 가 추가 되있는 것을 볼 수 있다.

참고 : http://guides.cocoapods.org/using/troubleshooting.html

ObjC, NSString, multi-line quated string


>>> a="""a
... b
... c
... d
... """
>>> a
'a\nb\nc\nd\n'
>>>

Python 에서 여러 줄을 편하게 따옴표 3개로 묶는 것 처럼 혹시 NSString 도 있을까? 하고 찾아 봤는데 못 찾고 대신 아래 링크를 발견했다.

http://multilineobjc.herokuapp.com/

입력 :
<code>
<html>
<body>
<h1>It works!</h1>
<p>This is the default web page for this server.</p>
<p>Test Test The web server software is running but no content has been added, yet.</p>
</body>
</html>

출력 :

@" \
<html> \
<body> \
<h1>It works!</h1> \
<p>This is the default web page for this server.</p> \
<p>Test Test The web server software is running but no content has been added, yet.</p> \
</body> \
</html> \
";

wpid-featuredImage.png

Mac, Android Studio, Find Word at Caret & ⌘ + G


Xcode 개발에서 잘 사용했던 단축키가 있다.

⌘+E, ⌘+G

⌘+E는 현재 커서 위치의 단어를 찾을 단어로 등록하고,

⌘+G를 누르면 현재 문서에서 단어 찾기가 진행된다.

계속 누르면 다음, 다음으로 찾기가 진행되고

맨 아래까지 가면 다시 위에서부터 찾기가 진행된다.

 

Find Word at Caret 메뉴에는 있지만,

단축키는 기본으로 지정 돼 있지 않고

⌘+E는 최근 문서 열기 단축키로 맵핑 돼 있어서 단축키 수정을 했다.

 

이제 Android Studio에서 ⌘+E, ⌘+G 를 사용할 수 있게 되었다. ^.^

이미지

 

OS X, Dash의 Integration 기능


Dash는 DocSets 등 개발 문서를 단축키 등으로 편하게 볼 수 있는 프로그램이다.
무료로 사용할 수 있지만, 유료를 구매하면 가끔씩 보이는 Timer를 없앨 수 있는 것 같다.

Dash URL : http://kapeli.com/dash

searches offline documentation sets for 80+ APIs

개발 문서를 쉽게 다운받을 수 있고 업데이트도 쉽게 관리가 된다.
시스템에 있는 문서도 검색을 해주고 인터넷에 있는 레퍼런스 문서도 80개 이상 설치 할 수 있다.

나는 Xcode, Eclipse 도 Integration 기능을 켜서 사용하고 있다.
Integration 기능을 설정 혹은 설치하기 위해서 Preferences의 Integration 탭을 보면 된다.
Integration 탭에 대표적인 앱들의 아이콘이 크게 자리잡고 있다.


Preferences 의 Integration

앱 아이콘을 클릭하면 설명 혹은 해당 Integration 웹 페이지로 이동하게 된다.

오늘은 터미널에서 Dash를 호출하는 것에 대해서 소개하려고 한다.

Dash_Preferences_Integration002Integration에서 Terminal을 클릭 화면

설명을 보면 알 수 있듯이 “open dash://php:{query}” 형식으로 호출 하면 된다는 것을 볼 수 있다.
그래서, dm.sh 스크립트를 아래와 같이 하나 만들고 manpages 를 호출 하도록 했다.

Doohyuns-MacBook-Pro@x% ls -al ~/bin/dm
lrwxr-xr-x 1 x staff 5 5 14 16:35 /Users/x/bin/dm@ -> dm.sh
Doohyuns-MacBook-Pro@x% cat ~/bin/dm.sh
#!/usr/bin/env bash
open dash://manpages:$1
Doohyuns-MacBook-Pro@x% dm tcpdump

Dash_dm_tcpdump
Terminal에서 dm 스크립트 실행 화면

Dash_Search_tcpdump
Dash에서 tcpdump manpage가 실행된 화면

– 끝 –

iOSDev, ImageOptim, 이미지 최적화, 앱 속도 크기 향상.


“iOSdev, PNG 최적화 스크립트.( pngcrush + advpngidat )” https://lum7671.wordpress.com/2011/11/16/iosdev-png-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-pngcrush-advpngidat/
글에 이여서 2탄으로 ImageOptim 앱에 대한 사용법이다.

1. 설치

http://imageoptim.com 에서 ImageOptim.app 을 다운 받고 /Applications 에 Drag & Drop 으로 설치를 한다.

2. 사용법

맥에서 앱을 실행하면 아래와 같은 윈도우 창이 뜬다.
이미지 파일을 Drag & Drop 으로 올려 놓으면 동작을 하며
자동으로 처리 이미지는 최적화된 새 이미지로 바꿔지게 된다.

또는

open -a ImageOptim.app *.png

와 같이 터미널에서 편리하게 실행 할 수도 있다.

3. 스크립트


#!/usr/bin/env bash
# -*- coding: utf-8 -*-
#
# 작성자 : 장두현
# 버 전 : 1.1
# 작성일 : 2012-03-08
# 수정일 : 2012-08-21
#
# * 맥 GUI용 : ImageOptim ( http://imageoptim.com/ )
#
# 사용법 :
# ./run_imageoptim.sh
# - 현재 디렉토리 이하 디렉토리 안의 모든 png 를 변환한다.
#
# 참고 : https://github.com/scribd/Xcode-OptimizePNG
#

cust_echo() {
echo -e "$1 $2"
}

APP_IMAGEOPTIM="/Applications/ImageOptim.app"

if [ ! -d "$APP_IMAGEOPTIM" ];then
cust_echo "요구사항체크:" "\nImageOptim.app 이 /Applications 디렉토리에 없습니다.\nImageOptim ( http://imageoptim.com/ ) 에서 어플리케이션을 받아서 설치하세요."
exit 0
fi

process_png()
{
cd $1
open -a ImageOptim.app *.png
}

DIR_PWD=$(pwd)

for directory in $(find $DIR_PWD -type d -print)
do
process_png $directory
done

4. 스크립트 사용법

이하 디렉토리에 있는 모든 png 파일을 ImageOptim.app 으로 최적화 한다.

예) Resource/Images/ 디렉토리 안의 png 파일을 최적화 하려면,
cd Resource
./run_imageoptim.sh

하면 된다.

※ 스크립트는 참고 용 임. 좀 더 다듬으면 거나 자신의 환경에 맞게 고치시길… 🙂

추가 Apple Developer 관련 링크 :
https://developer.apple.com/library/ios/qa/qa1681/_index.html#//apple_ref/doc/uid/DTS40009883

$ xcrun -sdk iphoneos pngcrush \
-revert-iphone-optimizations -q Local.png Local-standard.png

iOSDev, CoreData, Warning, Receiver ‘NSManagedObjectContext’ is a forward class and corresponding @interface may not exist


Receiver ‘NSManagedObjectContext’ is a forward class and corresponding @interface may not exist

해결 :

Supporting Files / ProjectName-Prefix.pch 에 #import <CoreData/CoreData.h> 추가

예)
#ifdef __OBJC__
    #import <Foundation/Foundation.h>
    #import <CoreData/CoreData.h>
#endif

Xcode 4.2, TODO, FIXME, ???, !!! 등등 개발 예약어 활용


출처 : http://stackoverflow.com/questions/5891193/xcode-using-fixme-todo

Xcode 개발에서 TODO, FIXME 같은 예약어를 잘 사용하는 것도
버그를 줄이고 실수를 반복하지 않으면서 개발 할 수 있는 한가지 방법일 것 같다.
개인이 개발할때도 유용하지만 여러명이서 협업을 할때 꼭 필요하지 않을까? 생각한다.

Xcode 3.x 대에서는 FIXME가 메소드 안에서도 작동을 했지만,
Xcode 4.x 대로 올라가면서 메소드 안에서는 버그(?)로 바로가기(점프?) 목록에 표시되지 않는다.

여기서 설명은 3가지로 하겠다.

  1. 기본적인 예약어 쓰임.
  2. Xcode 4.2 버전에서 예약어 사용을 위한 스크립트.
  3. #warning, #error 사용.

1. 기본적인 예약어 쓰임.

다음은 프로그램 하면서 쓸 수 있는 예약어 이다.
(이게 전부 인지는 모르겠지만 이정도면 충분하지 않을까?)

[주의] 예약어를 맞게 잘 쓰자!
주석 예약어 : “//TODO:”, “//FIXME:”, “//???:” …
주의깊게 보셔야 할것은 띄어쓰기가 없고 뒤에 콜론이 있는 것입니다.
이것을 보고 메소드 점프 메뉴에 표시되게 됩니다.
형식을 맞춰서 사용하세요.

//MARK: "#pragma mark" 와 비슷
//TODO: 언젠간 하고 말꺼얌!
//FIXME: 이거 고쳐주삼!
//???: 이게 뭘까?

위 스샷을 보면 알겠지만, 메소드 밖에 있는 FIXME는 잘 보여지지만
메소드 안에 있는 FIXME는 보이지 않음을 볼 수 있다.

2. Xcode 4.2 버전에서 예약어 사용을 위한 스크립트.

스크립트 :
KEYWORDS="TODO|FIXME|\?\?\?:|\!\!\!:"
find ${SRCROOT} \( -name "*.h" -or -name "*.m" \) -print0 | \
xargs -0 egrep --with-filename --line-number --only-matching "($KEYWORDS).*\$" | \
perl -p -e "s/($KEYWORDS)/ warning: \$1/"

2.1 설정 #1

2.2 설정 #2

2.3 컴파일 후 결과

3. #warning, #error 사용.

#warning TODO: 언젠간 하고 말꺼얌!
#error FIXME: 이거 고쳐주삼!

컴파일 시 워닝이 보이거나 컴파일 에러를 일으킴.

추가, #progma mark 도 쓰자.

Xcode 4.2, How to use Subversion 1.7 in Xcode 4.2


I have used MacPorts (http://www.macports.org/).
Currently, MacPorts Suversion is a version 1.7.x.
% LANG=C svn --version
svn, version 1.7.2 (r1207936)
...

With version 1.7 or later, there are compatibility issues with earlier versions 1.6.
Then this is one way to solve the problem.

1. Backup
I changed the original file by appending the suffix “-1.6”.
% mv /Developer/usr/bin/svn /Developer/usr/bin/svn-1.6

2. Symbolic link
from /opt/local/bin
% ln -s /opt/local/bin/svn /Developer/usr/bin/svn
% ls /Developer/usr/bin/svn
/Developer/usr/bin/svn@ -> /opt/local/bin/svn

Done.

Simple Script :

#!/usr/bin/env zsh
cd /Developer/usr/bin

# Backup
sudo mv svn svn-1.6
sudo mv svndumpfilter svndumpfilter-1.6
sudo mv svnserve svnserve-1.6
sudo mv svnversion svnversion-1.6
sudo mv svnadmin svnadmin-1.6
sudo mv svnlook svnlook-1.6
sudo mv svnsync svnsync-1.6

# Symbolic link
sudo ln -svf /opt/local/bin/svn
sudo ln -svf /opt/local/bin/svndumpfilter
sudo ln -svf /opt/local/bin/svnrdump
sudo ln -svf /opt/local/bin/svnsync
sudo ln -svf /opt/local/bin/svnadmin
sudo ln -svf /opt/local/bin/svnlook
sudo ln -svf /opt/local/bin/svnserve
sudo ln -svf /opt/local/bin/svnversion

Check the results :

% ls /Developer/usr/bin/svn*
svn@
svnlook@
svnserve@
svndumpfilter@
svnversion@
svnadmin@
svnrdump@
svnsync@
svn-1.6*
svnadmin-1.6*
svnsync-1.6*
svnlook-1.6*
svnserve-1.6*
svndumpfilter-1.6*
svnversion-1.6*

svnX(OSX), merge 툴로 kdiff3 사용하기.


맥(OS X 10.6)에서 Subversion을 사용하면서
맥용 Merge 툴을 찾게 되었다.

kdiff3

잘 만들어진 Merge 툴 중 kdiff3가 나는 쓰기 편하다.
3way-merge 도 맘에 들고…

kdiff3 : http://kdiff3.sourceforge.net/

svnX

많은 소스를 버전 관리 하기 위해서는 터미널 코멘드로는
좀 어렵게 느껴지는 부분이 있다.

한꺼번에 비교를 하거나, 자동적으로 해줬으면 하는 부분 등등.

어쨌든 GUI용 Subversion 클라이언트로
내가 선택한 것은 svnX 이다.

svnX : http://code.google.com/p/svnx

svnX에서 kdiff3 를 호출해서 diff 또는 merge를 할 때 버그가 있다.
svnX 1.3.1버전은 뜨기는 하나 파일을 못 불러오는 버그가 있고,
svnX 버전관리 2011년 11월 30일 버전은 아예 kdiff3가 뜨지를 않는다.

이에 프로젝트 싸이트에 버그레포팅을 했고,
오늘 아침(12월 1일) 답변을 받았다.

해결방법 1)

“svnX – help의 3.11 Diff” 에 설명이 되있다.

3.11. Diff

In a working copy window, click the Diff icon to compare the selected items with their pristine copies (BASE revisions).
Click while pressing the shift key to compare the selected items with their previous (PREV) revisions.
Clicking while pressing the alt key displays a sheet that allows you to compare any two revisions of a single item.
In the general preferences, you can choose between:
FileMerge (requires Xcode installation or, at least, /usr/bin/opendiff & FileMerge.app)
TextWrangler (requires /usr/bin/twdiff)
BBEdit (requires /usr/bin/bbdiff)
CodeWarrior
Araxis Merge (requires /usr/local/bin/araxissvndiff)
DiffMerge (requires /usr/local/bin/diffmerge.sh)
Changes (requires /usr/bin/chdiff)
Guiffy (requires /usr/local/bin/guiffy)
KDiff3 (requires a symbolic link in ~/bin to the app’s binary:
execute `cd ~/bin; ln -s/Contents/MacOS/kdiff3`).

※ 관련 내가 이전에 쓴글 : svnX for Mac OS X 에서 KDiff3 사용하기.

해결방법 2)

이건 버그레포팅에서 내가 제시했던 것.

주의할 것은,
답변으로 OS X 10.5 (이하?) 버전 에서는 “--args” 옵션이 안된다고 한다.


/Applications/svnX.app/Contents/Resources/svndiff.sh

– “kdiff3” ) ~/bin/kdiff3 “$file1” “$file2” &> /dev/null ;;
+ “kdiff3” ) open -a kdiff3 --args “$file1” “$file2” &> /dev/null ;;

간단하다.

다음은 버그레포팅 내용이다.

http://code.google.com/p/svnx/issues/detail?id=151

Reported by dh.j…@gmail.com, Today (14 hours ago)
What steps will reproduce the problem?
What is the expected output? What do you see instead?

>> kdiff3 is not open problem.

What version of the product are you using? On what operating system?

>> OS : Mac( OS X 10.6.x )
>> svnX Version : subversion repository version & 1.3.1

Please provide any additional information below.

>> look below a patch.
>> and please apply them. 🙂

@@ -65,7 +67,7 @@
“changes” ) /usr/bin/chdiff “$file1” “$file2” ;;
“guiffy” ) DIFF=’/usr/local/bin/guiffy’; if [ $isWorkingCopy ]
then “$DIFF” -m “$file1” “$file2” “$file2”; else “$DIFF” “$file1” “$file2”; fi ;;
– “kdiff3” ) ~/bin/kdiff3 “$file1” “$file2” &> /dev/null ;;
+ “kdiff3” ) open -a kdiff3 --args “$file1” “$file2” &> /dev/null ;;
“filemerge” | * ) DIFF=’/usr/bin/opendiff’; if [ ! -x “$DIFF” ]; then DIFF=”/Developer$DIFF”
if [ ! -x “$DIFF” ]; then DIFF=’opendiff’; fi; fi
if [ $isWorkingCopy ]; then “$DIFF” “$file1” “$file2” -merge “$file2” &> /dev/null

Comment 1 by project member chr…@lavabit.com, Today (8 hours ago)
Please open svnX’s Help window & read section “3.11. Diff”.

The `open` command does not accept `--args` on OSX 10.5, so your patch won’t work there.

Delete comment Comment 2 by dh.j…@gmail.com, Today (20 minutes ago)
Ok. thanks to rapidly reply.

– 끝 –