달력

11

« 2024/11 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
2017. 2. 23. 15:33

Python 유용한 팁 모음 sbin2017. 2. 23. 15:33

Python 공부 중 기록해 놓을 만한 내용들이 있어 모아봤다.

정말 유용하다고 생각하는 사람은 1%도 안될듯...


1. 전역 변수 사용 시 주의점


Class 내 def 안에서 전역변수를 사용하고자 한다면, 각 def 별로 global 선언은 필수~


2. TKInter Button에 Image 씌우기


Stack Overflow 뒤지다가 찾은 tip인데, 나름 유용하게 쓰고 있음


from tkinter import *

root=Tk()

b=Button(root,justify = LEFT)

photo=PhotoImage(file="mine32.gif")

b.config(image=photo,width="10",height="10")

b.pack(side=LEFT)

root.mainloop()


3. cx Freeze 사용 Windows Package 생성시


  * Make Executable File : python setup.py build

  * Make MSI Installation Package : python setup.py bdist_msi


- Python interpreter 자체가 32bit/64bit를 분리하여 사용되기 때문에 1개의 build로 동시 사용이 불가함.


- 기본적으로 32bit program으로 작성시 Windows의 경우 64bit OS에서 32bit 하위 호환을 지키므로 사용은 가능하겠지만, 궁극적으로 64bit 전용 프로그램으로 build하는 것이 중요


- Python을 각 32bit / 64bit 따로 설치하여 두 번 build하는 방법이 현재로서는 가장 적합한 방법임.


- 각 Module 역시 32bit/64bit 구분하므로 각 interpreter에 동일 module을 설치해야 함. (특히 cx Freeze의 경우 해당 구분을 하여야 전용 설치 package가 출력됨)


:
Posted by [LunatiC]Simon
2017. 2. 23. 14:35

svn 누락된 파일 add하기 sbin2017. 2. 23. 14:35

command base로 SVN을 운용하다 보면, 분명 나는 모든 추가파일을 add했다고 생각했는데 누락된 파일이 생기는 경우가 있다. 특히 add해야 하는 file들이 여기저기 산개해 있는 경우라면 일일이 찾기도 쉽지 않다. 이 때 기본 명령으로 많이 사용하는 것이 status (svn st)인데, 이를 응용하여 일괄 Add하는 방법으로,


 svn st | grep '^?' | sed 's/^? *//' | xargs svn add


와 같이 grep/sed/xargs combination으로 간단히 repository에 일괄 등록이 가능하다.


단, Tortoise SVN 이나 다른 IDE의 SVN Plugin 쓰시는 분들은 PASS~

:
Posted by [LunatiC]Simon
2015. 11. 11. 09:45

[Linux초보] bashrc에서의 alias sbin2015. 11. 11. 09:45

 Linux Server에서 작업을 하다 보면 자주 쓰는 명령어들의 인자값을 Typing하거나 특정 command 조합을 일일이 Typing하는게 여간 귀찮은게 아니다. 필자처럼 성격이 급한 사람들은 정확도 보다는 빠른 typing을 추구하다 보니 오타도 종종 발생하고, 귀찮기도 하고... 업무 효율도 떨어지는 듯 하다.

자주 쓰는 command, 인자 등을 bash에 별칭으로 등록하여 사용해 보자.

필자는 아래의 명령들에 대한 별칭을 구성해 봤다.

# grep -irn : grep 쓸 일이 거의 99% Source root 내에서의 특정 단어이다 보니 거의 확정적인 옵션을 i, r, n을 쓰게 된다.

# find . -name : find 역시 특정 이름을 기반으로 찾기 때문에 다른 옵션들은 잘 사용하지 않는다.

# cd ~ : 한참 source의 Sub-directory에 들어가다 보면 최상위로 나와야 하는데, 'cd ~' typing 시간이 아깝다.

# rma : source 관리 중 삭제가 필요한 경우 거의 r, f 를 많이 쓴다.

# Removing SVN Tag : Source 추가나 SVN Tag 충돌 등을 피하고자 할 때 쓰는 find/xargs 조합은 typing하기가 너무 귀찮다.


이 내용들을 .bashrc 내 alias로 구성해 보았다.

# .bashrc


# Source global definitions

if [ -f /etc/bashrc ]; then

        . /etc/bashrc

fi


# Uncomment the following line if you don't like systemctl's auto-paging feature:

# export SYSTEMD_PAGER=


# User specific aliases and functions

alias ll='ls -lash'

alias test_echo='echo $1'

alias grepp='grep -irn $1'

alias delsvntag='find . -name ".svn" | xargs rm -rf'

alias rma='rm -rf'

alias ~='cd ~'

alias findd='find . -name $1'

 bold 부분이 기본 생성되어 있는 .bashrc 내에 alias를 추가한 부분이다.

 안타까운 것은, 인자값을 alias 중간에 구성이 불가능하다는 것이다. $1을 만나면 escape되는 특성 때문에 사용하고자 하는 인자는 1개여야 하고 문장의 가장 마지막에 위치하여야 하는 제약사항이 생긴다.

 .bashrc의 수정이 다 되었다면 간단히 source 명령으로 바로 적용해 보자

# source ~/.bashrc

 이후 개인별 별칭 동작을 확인하면 된다.

 인간은 망각의 동물이라 필자는 간혹 본인이 만들어 놓고도 기억하지 못하는 경우가 종종 발생한다. 이에 해당 alias들에 대한 usage를 아예 profile에 printing하여 login 할 때 마다 볼 수 있게 하곤 한다.

~/.bash_profile 내에 echo 문으로 추가하여 Usage를 작성해 보았다.

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

        . ~/.bashrc

fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH

echo "==============================="

echo "      Simon's Alias List"

echo "==============================="

echo 'll : ls -lash'

echo 'grepp : grep -irn'

echo 'delsvntag : Delete all SVN Tag'

echo 'rma : rm -rf'

echo '~ : change directory to home'

echo 'findd : find . -name'

echo "==============================="



'sbin' 카테고리의 다른 글

Python 유용한 팁 모음  (0) 2017.02.23
svn 누락된 파일 add하기  (0) 2017.02.23
Eclipse에서 SVN 사용하기(6)- Delete  (0) 2012.12.20
Eclipse에서 SVN 사용하기(5)- Commit  (0) 2012.12.19
Eclipse에서 SVN 사용하기(4)- Check Out  (0) 2012.11.28
:
Posted by [LunatiC]Simon
2012. 12. 20. 11:10

Eclipse에서 SVN 사용하기(6)- Delete sbin2012. 12. 20. 11:10

이미 Commit된 File을 삭제하고자 하는 경우, 주저없이 delete 후 commit을 진행하면 된다.

 

 

 

 

해당 Delete는 Local Workspace에서만 삭제된 상태이며, SVN Server에서 완전히 삭제하기 위해서는 반드시 Commit을 해야 한다.

 

 

Commit 후 삭제한 파일의 상위 Category의 Update Mark가 모두 사라진 것을 확인할 수 있다.

 

파일이 Local에서만 삭제된 경우 다시 원복하려면 간단히 Revert 기능을 사용하자.

삭제된 파일의 상위 Category에서 Mouse Right Click -> Team -> Revert  선택 후

 

 

SVN Server에서부터 원복하고자 하는 deleted file을 선택하면 바로 원복이 가능하다.

 

실수로 파일이 SVN Server에서 삭제된 경우(Delete 후 Commit한 상태)에는 Merge 기능으로 이전 해당 파일이 삭제되기 전 Revision에서 다시 Add할 수 있으니 당황하지 말고 Merge 기능을 활용하자.

Mouse Right Click -> Team -> Merge를 선택하면,

 

 

상기와 같이 Merge Input에 대한 여러 selection이 존재한다. 구미에 맞게 선택하면 되겠으며, 여기서는 간단히 특정 Revision에서 원복해 보도록 하겠다. "Merge a range of revisions" 선택 Next 클릭하면

 

"Select revisions on next page" 선택 후 Next

 

 

 

해당 file이 삭제되기 전 Revision을 선택하자. 각 Revision 선택 시 하단 Changes에 해당 Revision History List가 표기되는데, 우측  "Show file content changes pane" Icon을 클릭하면 세부 변경 내역에 대한 compare 화면을 볼 수 있다.

Next로 이동하여 해당 Merge process에 대한 특정 Option 정의도 가능하며, Finish로 간단히 복구도 가능하다.

 

 

Merge Result에 대한 Summery가 표기되고, Package Explorer 상에 해당 삭제되었던 파일이 re-add된 상태("+" mark)로 추가되었음을 확인할 수 있다. 주의할 점은, 해당 re-add 파일은 아직 SVN Server에는 commit되지 않은 상태라는 점을 명심하자.

:
Posted by [LunatiC]Simon
2012. 12. 19. 17:59

Eclipse에서 SVN 사용하기(5)- Commit sbin2012. 12. 19. 17:59

Eclipse의 GUI Base에서 사용하는 SVN이다 보니 console에서 사용할 때 보다는 조금 편한 control을 제공한다.

 

Commit에는 Add/Modify의 의미가 같이 포함되어 있다. console command에서는 Add시 반드시 svn add 후 commit을 해야 하겠으나, Subclipse에서는 이러한 action 없이 commit 하나로 수행할 수 있도록 구성되어 있다.

또한 해당 Project 에서 Commit시 선택적인 Add/Modify가 가능하니 참고하자.

 

현재 Revision 상태에서의 Package Explorer를 보면 각 icon 하단에 주황색 mark를 확인할 수 있다.

 

 

해당 Source에서 1개의 Class source를 추가하고, 1개의 modify를 해보자.

 

 

새로운 Class GenType.java를 생성한 후의 Package Explorer의 모습이다. 새로 추가된 GenType.java 파일이 SVN Server에는 존재하지 않는 New file이므로 icon에 "?" mark되며, Revision History 표기 란에는 아무런 정보가 없다.

 

 

이번에는 GameType.java를 수정하여 Local에 저장한 상태이다. 수정된 file에는 "*" mark되며, 해당 project category 모두 "*" mark된다.

이제 SVN Server에 해당 수정/추가 사항들을 적용하기 위해, Mouse Right Click -> Team -> Commit을 선택한다. 해당 Action은 adding/modifying file에서 직접 선택할 수도 있고, 그 상위 Category 혹은 전체 Project에서도 수행할 수 있다. 또한 몇몇 파일만을 Select도 가능하다. 단, Project 전체에서 선택하는 경우 Build시 생성된 Temporary File들도 모두 선택되니, 되도록 commit하고자 하는 항목만을 진행하는 것이 Team working에 혼란을 초래하지 않을 것이다.

 

 

Commit을 선택하면 해당과 같이 commit 가능한 항목이 아래쪽에 출력된다. 이 때, "Show unversioned file"을 uncheck하면 add가 필요한 항목이 제외된다.

 

OK 버튼을 클릭하면 SVN Server에 해당 commit 을 수행하며, 이후 Package Explorer에 commit된 file에 대한 Revision History 및 commit user 정보가 갱신됨을 확인할 수 있다.

 

:
Posted by [LunatiC]Simon
2012. 11. 28. 10:35

Eclipse에서 SVN 사용하기(4)- Check Out sbin2012. 11. 28. 10:35

SVN Server에 Source를 Import 했으므로 이제 SVN과 연동된 source를 workspace에 Checkout하고 control해 보자.

 

Package Explorer 에서 Mouse Right-Click하고 Import를 선택하자 (여기에서의 Import는 외부에서 Eclipse로의 Import이다. SVN Import와 헷갈리지 말자)

 

* 혹은 New -> Project에서 Create할 때에도 아래와 같이 SVN Checkout이 가능하니 참고하자.

 

 

Eclipse의 Import 창 안에 SVN Categore가 추가되어 있는 것을 볼 수 있다.

 

 

Checkout Projects from SVN을 선택하고 Next~

 

 

Subclipse에 기등록된 Repository에서 가져올 수도 있고, 혹은 새로운 Repository를 생성할 수도 있다. 지금은 앞 글에서 Import한 project를 가져오고자 하는 것이므로 "Use existing repository location"에서 해당 Repository를 선택하자.

 

 

 해당 Repository 내의 Remote Folder List를 확인할 수 있다. 앞 글에서 올린 TabNum Project를 땡겨와 보자.

 

 

SVN Server에서 가져온 정보대로 기본 setting되는데, 특정 revision의 Checkout이나 Depth등을 설정할 수 있다.

주의할 점은, Project Name이 최초 Import한 Source의 설정 대로 되어 있는데, 만약 본인의 Package Explorer에 동일 이름의 Project가 있다면 동일 Package에 덮어쓰기 하게 된다는 점이다. 필자는 TabNumber_svn으로 바꿔서 Checkout해 보겠다.

 

 

Project Checkout Location을 설정한다. 그냥 default로 쓰는게 가장 편하다고 보지만, 본인이 편한 대로 선택한다.

 

 

Server에서 Checkout되면 위와 같이 Package Explorer에서 확인할 수 있다. Project 에는 해당 Remote Folder Name이, 각 파일에는 현재 Revision Number 및 Date가 표기되는 것을 확인할 수 있다.

 

:
Posted by [LunatiC]Simon
2012. 11. 28. 10:09

Eclipse에서 SVN 사용하기(3)- Source Import하기 sbin2012. 11. 28. 10:09

이제 Eclipse 내에서 연결된 SVN Repository를 볼 수 있다.

Source Import를 해 보자.

(Clean History 관리를 위해 Import 하기 전, source folder 내에 예전 SVN TAG가 있는지 확인해 보고, 가능하면 삭제하고 Import하자)

 

Source를 올리고자 하는 Remote Folder를 Repository에 하나 생성하고~

 

 

 

Commit Comment를 작성하자. 필자와 같이 1 Repo.에서 여러 개의 source를 관리하는 경우라면 Remote Folder 생성 때의 comment도 필요할 때가 있다.

 

 

Finish button을 누르면 갱신된 Repository에 새로 만든 Remote Folder가 생성된 것을 볼 수 있다. 해당 Folder에서 Mouse Right-Click하여 Import를 선택하자.

 

 

Import Window에 Import하고자 하는 Directory를 선택하고, Comment를 작성해 넣자.

 

 

 

OK button을 누르면 SVN Server로 source가 import된다.

 

 

완료된 후 Refresh하면 아래와 같이 Listup을 확인할 수 있다.

 

:
Posted by [LunatiC]Simon
2012. 11. 26. 23:03

Eclipse에서 SVN 사용하기(2)- SVN Repository 연결 sbin2012. 11. 26. 23:03

Eclipse에 Subclipse가 설치되었으면, 우선 Repository를 연동해 보자.

Windows - Show View - Other... 에서 SVN Category를 열고 SVN Repositories를 선택하면~

 

 

SVN Repositories 항목이 View Window에 추가되는 것을 볼 수 있다.

오른쪽 활성화된 버튼 중에 Add SVN Repository를 click하거나, Mouse Right Click - New - Repository Location을 선택해 보자.

 

 

URL에 사용하고자 하는 SVN Repo URL을 입력하면 ,

 

 

해당과 같이 SVN Credential 입력 화면이 나온다(물론 Anonymous Allowed Repository의 경우 credential이 필요 없겠지만, 필자가 진행하는 모든 Project는 Anonymous Allowed 가 하나도 없다. 본인의 Source 관리 및 Project 관리를 위해서는 진짜 Open Source Project가 아닌 이상 SVN Credential을 설정하고 사용하기를 권장한다). 입력하고 진입해 보면,

 

 

입력한 Repository가 뜨는 것을 볼 수 있다.

SVN Repository를 create해 보면 위의 그림과 같이 branches, tags, trunk가 생성되고, 보통은 trunk에 source를 넣어 사용하는데, 필자는 그게 무진장 싫다. 회사 SVN 내에도 본인이 create할 때는 꼭 sub directory를 추가해서 사용하곤 한다(예를 들면 A사 chipset source를 등록할 때 Main Repo Name을 정하고, 하위에 sub directory를 해당 chip name으로 만들어 구분하는...). Test를 위한 Naver Server에도 여지없이 내 방식대로 설정하겠다.

 

 

우선 해당 Repository에 Mouse Right Click - New - New Remote Folder를 선택하면, 하기와 같은 Create a new remote folder 창이 뜬다.

 

 

Folder Name을 "test1"이라고 설정하고 Next Click.

 

 

해당 folder에 적절한 comment를 달아주자. 아래쪽에 보면 "Configure Comment Templates..."가 있는데, 자주 사용하는 comment를 등록해 놓고 필요할 때 사용할 수 있게 해준다(필자는 그냥 그때 그때 typing하는 스타일이다...)

혹시 Credential Window에서 Save Password 항목을 체크해 놓지 않으면, SVN Server에 접근할 때마다 해당 Credential 입력 창이 뜨니, 불편하다면 Save Password 항목을 체크해 놓고 사용하자.

 

생성한 new remote folder가 Repository Tree에 보이는 것을 확인할 수 있다.

:
Posted by [LunatiC]Simon

현재 Eclipse Juno 버전을 사용중인데, CVS는 기본 지원하면서 SVN은 포함되어 있지 않는 것을 확인하였다.

흠... CVS 사용해 본게 언제더라... 2006년에 잠깐 사용했었나... 하여간 SVN이 더 친숙하고, SVN Server Control도 가능한지라(CVS는 Server 구경도 못해봤다), Eclipse에서도 SVN 으로 사용하고자 한다.

Eclipse를 실행하고~ Windows - Show View - Other... 를 선택하거나 Alt+Shift+Q,Q를 누르면(이상하게 내 Notebook에서는 단축키가 잘 동작하지 않는다)

 

 

와 같이 View List가 뜨는 것을 볼 수 있다. 여섯 번째에 CVS는 있는데, SVN은 보이질 않는다. (혹시 이미 설치되어 있다면, SVN Category가 Team 위에 있을 것이다...)

 

SVN 관련 S/W를 설치해 보자

우선, Help - Install new Software... 를 선택하여

 

 

상기와 같은 창을 볼 수 있다.

Work with: 에 http://subclipse.tigris.org/update_1.8.x 를 입력하고 Add 버튼 클릭~!

 

 

Name에는 적당한 이름을 입력하자. 필자는 SVN for Eclipse라고 넣었으나, 공식 project 명칭은 subclipse라고 한다.

Ok를 누르면,

 

 

상기와 같이 SVN관련 Tool의 category가 보인다. Category를 열어보면 여러 가지 tool이 나오는데, 일단 Select All하고 Next - Finish하여 Install을 진행하자.

(이미 Eclipse에 설치해 버린 관계로 Install 화면은 생략한다)

Install이 완료되면 Eclipse를 다시 시작하고, 다시 Windows - Show View - Other... 에 가면

 

 

해당과 같이 SVN View들을 선택할 수 있다.

 

 

 

 

:
Posted by [LunatiC]Simon
2012. 11. 21. 12:28

Android 화면 자동 회전 방지 sbin2012. 11. 21. 12:28

Android에서 기본 Project를 확인해 보면, 화면 자동 회전을 설정하고 device를 돌리면 바로 인식되어 Activity의 OnCreate를 다시 타게 된다.

개발자 편의를 최대한 생각한 부분이라 생각되지만, 한 방향으로 고정된 App을 작성하기에는 여간 귀찮은 부분이 아닐 수 없다.

하기와 같이 Manifest에서 설정하면 더 이상 화면 회전 이벤트를 Activity 상위에서 처리하지 않고, Activity 안에서 처리하게 할 수 있다.

1. <activity> Tag 내 android:configChanges="keyboardHidden|orientation" 추가

2. <activity> Tag 내 android:screenOrientation="portrait (or landscape)" 추가

 

단, Activity가 여러개인 경우라면 각 Activity마다 설정해 줘야 한다.

:
Posted by [LunatiC]Simon