svn: attempt to write a readonly database

Posted at 2010/02/24 19:11// Posted in os/*nix
http://geckoblue.livejournal.com/248161.html

svn 의 새로운 버전인 1.6.4 에서 발생되는 버그로

chmod 664 /home/svn계정/저장소경로/db/rep-cache.db

rep-cache.db 에 그룹 쓰기 권한을 주면 해결됩니다~
이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/02/24 19:11 2010/02/24 19:11

~하-_-아~ 아름답다

Posted at 2010/02/18 01:02// Posted in diary
사용자 삽입 이미지


        하아 *ㅡㅁㅡ*)~ 정말이지~ 아름다운 컬러의 조합입니다.

                         분홍색은 삼겹살,                   

                                  약간 노란 빛은 마늘,

                                                   녹색의 꽈리 고추,

                                           하얀색의 양파 그리고 

마지막!!

   버섯뚜껑!!


정말 맛있어요 ~( >ㅁ< )~

                                                                                      ~(///▽/// 감동이라능  ㅋ ㅋ       




참고로 전체 지도 보기..




-_-)/ 바이바이



       

p.s. 아! 맞다...


이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/02/18 01:02 2010/02/18 01:02
junction 2000/XP 심볼릭 링크 생성
http://technet.microsoft.com/ko-kr/sysinternals/bb896768%28en-us%29.aspx
rem 사용법
rem 만들기
junction -s 링크경로 원본경로

rem 지우기
junction -d 링크경로


ResHacker 리소스 교체
http://www.soft32.com/Download/Free/Resource_Hacker_340/4-3568-1.html

rem 아이콘 교체
rem 아이콘 번호는 ResHacker 로 열어서 확인
ResHacker.exe -modify src.exe, dst.exe,  new.ico,  icongroup, 아이콘번호, 0

ProcMon 프로세스가 하는 일 모두 체크하기
http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx


VMMap 가상 메모리 상태 보기
http://technet.microsoft.com/en-us/sysinternals/dd535533.aspx


Depends DLL 의존성 체크
http://dependencywalker.com/


Process Explorer
http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx


Application Verifier
http://www.microsoft.com/downloads/details.aspx?familyid=c4a25ab9-649d-4a1b-b4a7-c9d8b095df18&displaylang=en


Debugging Tools for Windows
http://www.microsoft.com/whdc/Devtools/Debugging/default.mspx


Fiddler
http://www.fiddler2.com/fiddler2/


SyncToy
http://www.microsoft.com/prophoto/downloads/synctoybeta.aspx


Wireshark
http://www.wireshark.org/
이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/02/17 21:22 2010/02/17 21:22
vc2005 프로젝트를 vc2008 프로젝트로 변환시 발생하는 것으로 보인다.

컴파일러 경고(수준 3) C4748

오류 메시지

함수에서 최적화를 사용하지 않으므로 /GS를 지정해도 로컬 버퍼 오버런에서 매개 변수 및 지역 변수를 보호할 수 없습니다.
/GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function

기본적으로 활성화되어 있는 /GS(버 퍼 보안 검사)는 함수의 최적화 기능을 사용하지 않는 한 함수의 매개 변수와 지역 변수에서 로컬 버퍼 오버런이 발생하지 않도록 보호할 수 없습니다.

함수에 jmp 또는 jcc와 같은 흐름 제어 문이 포함된 인라인 어셈블리 코드가 있는 경우 컴파일러는 최적화를 비활성화합니다.

이 경고를 해결하고 /GS를 사용하여 로컬 버퍼 오버런에서 매개 변수와 지역 변수를 보호하려면 최적화를 활성화해야 합니다.

http://msdn.microsoft.com/ko-kr/library/ms235398%28VS.80%29.aspx

MSDN 도움말을 찾아보니...

아아-_- ... 뭘 어떻게 하라는건지...;; orz;;


대부분의 구글 검색 결과도 MSDN 도움말의 답습일뿐
뽀족한 해결책은 제시하지 못하고 있는 상황에서 방황하던 중...

ogre 포럼에서 아래와 같은 주옥같은 답변을 찾아내게되었다 -_-)/

I've found the error: -
저는 에러를 찾았어요 >ㅁ<)/

Visual Studio 2008 SP1 turns off /O2 optimization when upgrading from VS 2005. Even if it *Looks* like its on, it may not be. Check that its actually in the command line (also - it is Bold in the IDE if its enabled).
비주얼 스튜디오 2008 SP1 은 O2 최적화를 꺼버립니다. VC2005 에서 업그레이드할때 말예요! 켜진 것처럼 보이지만, 그렇치 않습니다. 실제로 적용도는지 확인할 필요가 있어요. 커맨드라인에서 말이죠. ( IDE상에서는 굵고 진하게 볼드체로 되어있어야 합니다. )

I hope this helps someone googling :)
구글링을 통해 다른 분들에게 도움이 되었으면 좋겠내요 ^_^

http://www.ogre3d.org/forums/viewtopic.php?f=10&t=49787

와 >ㅁ<)/ 천사님!!


실제 Configuration Properties 의
C/C++/Optimization/Optmization 속성을 보면 볼드체가 아닌걸 확인할 수 있었다.

직접 항목을 다시 선택해주면 볼드체로 바뀌며 다시 링크를 해보면 C4748 경고는 사라지게 된다. ~(-_-)~








이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/02/11 22:39 2010/02/11 22:39

HP 8530p 노트북 전원이 제대로 안 꺼질때

Posted at 2010/02/11 11:12// Posted in diary
어제 노트북을 안끄고 잤더니...
노트북이 먹통이 되어버렸습니다 ~(-_-)~

로그인 버튼이 안 보이고...
뭘 눌러도 반응이 없고...
심지어 전원 버튼을 눌러서 완전 종료 시도해도
다시 켰을때는 그냥 아무것도 없는 로그인 화면만 ... orz;

이런 노트북은 니가 처음이야 T_T)/   ㅛ

결국 서비스 센터에 문의했더니...

HP 노트북은 전원 버튼을 2초 누르고 있음 절전모드로 가고
완전히 끄려면 전원이 꺼진 상태에서도 3초 정도 더 누르고 있어야 한다더군요.

~(- -)~ 간신히 리붓 성공!

하지만 여전히 로그인 버튼은 안나오더군요-_-;
결국 최근 성공한 부팅 방식으로 시도해서 로그인에 성공했습니다..

어제 설치했던 VM 웨어 워크스테이션 평가판이 문제일까요...
부팅 속도도 엄청 느려졌네요 T_T

테스트만 끝나면 당장 지워버려야지


이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/02/11 11:12 2010/02/11 11:12
파이썬은 스크립트 언어중에서 가장 훌륭한 문자열 인코딩/디코딩 시스템을 갖고 있음에도 불구하고;
XML 은 ascii 나 utf8 밖에 지원되지 않습니다 (-_-) 대체 왜?


<?xml version="1.0" encoding="ks_c_5601-1987"?>


이로 인해 위와 같은 xml 문서는 encoding 부분을 읽어서 어떤 인코딩으로 되어있는지 파악한 다음
utf8 문서로 변환해주어야 합니다.

encoding="코덱" 을 찾아내는 방법은 여러가지가 있겠지만;
코드 분량 문제라던지 처리 속도 문제등으로 인해 가능하면 정규 표현식을 사용하는 것이 좋습니다.


import re
RE_XML_ENCODING = re.compile("encoding[ \t]*=[ \t]*\"([^\"]+)\"")


encoding까지 매치하고
스페이스나 탭과 같은 공백 문자가 있는지 체크하고
= 매치하고
다시 공백 문자 체크한 다음
"에서 ~ "까지를 그룹으로 설정하는 정규 표현식입니다.

이걸 이용해서 어떤 encoding 을 알아내는 함수나


def getXMLEncoding(data):
head = data[:100]
headline = head.splitlines()[0]
mo = RE_XML_ENCODING.search(headline)
return mo.group(1) if mo else None


아예 전체를 유니코드로 변환시켜 버리는 함수를 만들 수 있습니다.


def decodeXML(data):
head = data[:100]
headline = head.splitlines()[0]
mo = RE_XML_ENCODING.search(headline)
if mo:
encoding = mo.group(1)
return data[len(headline):].decode(encoding)
else:
return data



이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/02/07 15:11 2010/02/07 15:11

python/xmldiff

Posted at 2010/02/07 14:33// Posted in python/pyutils
visual studio 의 vsproj 자동 변환기를 만들다가 두개의 vcproj 파일을 비교할 일이 있어서 검색해보았습니다.

http://www.logilab.org/859

두개의 XML 파일을 비교해서 어떤게 다른지 알려주는 파이썬 모듈입니다

설치할때 알아두셔야 할 것은

python setup.py install 로 안되고

python setup.py install_lib 으로 해야 한다는 점입니다.

제작자가 배치파일 하나를 빼먹은 것 같더군요.


ascii 나 utf8 이 아닌 xml 문서는 에러가 나기 때문에 미리 변환을 해줘야 하는데...
입력인자가 파일명이기 때문에 약간 손을 봐줘야 합니다.

수정보기..


사용예는 다음과 같습니다. 엄청난 개수의 파라미터의 압박에 대비하시는 게 좋습니다.

예제보기..


비교 결과는 아래처럼 나옵니다.
[append-first, /VisualStudioProject[1]/Files[1],
<File RelativePath=".\_corest.ini"/>
]
[insert-after, /VisualStudioProject[1]/Files[1]/File[3],
<File RelativePath=".\basepch.h"/>
]
[rename, /VisualStudioProject[1]/Configurations[1]/Configuration[1]/@OutputDirectory, LogilabXmldiffTmpAttrIntermediateDirectory]
[append, /VisualStudioProject[1]/Configurations[1]/Configuration[1],
<@OutputDirectory>
../lib/x86/vc90
</OutputDirectory>
]
[rename, /VisualStudioProject[1]/Configurations[1]/Configuration[2]/@OutputDirectory, LogilabXmldiffTmpAttrIntermediateDirectory]
[append, /VisualStudioProject[1]/Configurations[1]/Configuration[2],
<@OutputDirectory>
../lib/x86/vc90
</OutputDirectory>
]
[update, /VisualStudioProject[1]/Configurations[1]/Configuration[1]/@LogilabXmldiffTmpAttrIntermediateDirectory, ../obj/$(ProjectName)_x86_vc90_$(Configuration)
]
[update, /VisualStudioProject[1]/Configurations[1]/Configuration[1]/@Name, mtd|Win32]
[append, /VisualStudioProject[1]/Configurations[1]/Configuration[1]/Tool[6],
<@PrecompiledHeaderThrough>
$(ProjectName)pch.h
</PrecompiledHeaderThrough>
]
[append, /VisualStudioProject[1]/Configurations[1]/Configuration[1]/Tool[10],
<@OutputFile>
$(OutDir)\$(ProjectName)_x86_vc90_$(ConfigurationName).lib
</OutputFile>
]
[update, /VisualStudioProject[1]/Configurations[1]/Configuration[2]/@LogilabXmldiffTmpAttrIntermediateDirectory,
../obj/$(ProjectName)_x86_vc90_$(Configuration)
]
[update, /VisualStudioProject[1]/Configurations[1]/Configuration[2]/@Name, mt|Win32]
[append, /VisualStudioProject[1]/Configurations[1]/Configuration[2]/Tool[6],
<@PrecompiledHeaderThrough>
$(ProjectName)pch.h
</PrecompiledHeaderThrough>
]
[update, /VisualStudioProject[1]/Files[1]/File[3]/@RelativePath, .\basepch.cpp]
[update, /VisualStudioProject[1]/Files[1]/File[5]/@RelativePath, .\ReadMe.txt]
[update, /VisualStudioProject[1]/Files[1]/File[3]/FileConfiguration[1]/@Name, mtd|Win32]
[update, /VisualStudioProject[1]/Files[1]/File[3]/FileConfiguration[2]/@Name, mt|Win32]
[remove, /VisualStudioProject[1]/Configurations[1]/Configuration[1]/@IntermediateDirectory]
[remove, /VisualStudioProject[1]/Configurations[1]/Configuration[2]/@IntermediateDirectory]
[remove, /VisualStudioProject[1]/Files[1]/File[2]]
[rename, //LogilabXmldiffTmpAttrIntermediateDirectory, IntermediateDirectory]
꽤 유용하다는~ : )
이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/02/07 14:33 2010/02/07 14:33

공인 인증서를 USB 에 넣을바에는..

Posted at 2010/02/05 11:27// Posted in diary
얼마전에 공인 인증서를 하드 디스크에 저장 못하게 하고 대신 USB 를 쓰게 한다고 하더니...
본격적으로 찬성 기사와 반박 기사가 나오기 시작하네요.

저도 처음에는 USB 에 공인 인증서를 담아서 사용하다가...
분실 우려와 바이러스 감염 문제로 인해 그냥 하드 디스크에 저장해서 사용하는 중인데..
저절로 '악-_-' 소리가 나오더군요.

아마 백도어가 이미 구축된 상태에서
하드 디스크안의 공인 인증서가 언제 빠져나갈지 모르는 상황보다는...

은행 사이트에 접속할때만 USB 를 연결하면...
은행 사이트에서 공인 인증서가 외부로 빠져나가는 유출을 체크해주니
안전하다는 논리로 보입니다.

그런데 문제가 하나 있는게 USB 를 꼭 은행쓸때만 사용하는건 아니잖아요?
... USB 공인 인증서가 강제되면 악성 코드는 일단 USB 가 연결되는 시점을 노릴테니;;

최근 기사를 보면 뒤늦게 문제를 알아챘는지..

공인 인증서를 위한 전용 USB를 쓰라는 기사가 나오는 것 같더군요.



그런데...
사실 USB 가 몇만원하잖아요 ~(-_-)~
물론 몇천원짜리 저용량 저렴한 것도 있겠습니다만;
얼마전에 학교에서 등록금 환급차원에서 무료로 준 USB는 3일만에 고장나더군요-_-

어쨌든 몇만원 주고 USB 를 써서 공인 인증서 유출의 불안과 사용의 불편함으로 괴로워할바에는...

OTP 를 활성화하는게 더 낫지 않나라는 생각이 듭니다.

가격을 알아보니 USB 보다는 저렴하던데...; 고장날 걱정도 없고.. 수명도 길잖아요.


기사를 좀 더 찾아보니
시중은행 보안 관계자는 "인터넷 해킹의 대부분은 보안카드나
1회용 암호발생기(OTP)관리를 잘 못해서 발생한 것"이라며

http://news.etomato.com/news/etomato_news_read.asp?no=74281

이런 내용이 뜨는군요.

보안카드는 장기가의 키로그를 남기면 해킹이 가능하지만;

OPT 는 네트워크 레벨이 아니라 물리적인 도난만이 해킹이 가능한데...

두개를 쌍으로 묶어서 이야기하는 건 좀 아니다 싶습니다;


그냥 OPT 쓰는 사람은 하드디스크에 공인 인증서 저장하게 해주면 안되나 = ㅁ=)~

이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/02/05 11:27 2010/02/05 11:27
#include <freetype/freetype.h> 를
#include <freetype-2.3.11/freetype.h> 로 변경하는 스크립트입니다~


FREETYPE_HEADER_RULE = re.compile("#include[ \t]+<(freetype)/([\w\.^>]+)>")

srcData = "#include <freetype/freetype.h>"
dstData = FREETYPE_HEADER_RULE.sub(r"#include <freetype-2.3.11/\2>", srcData)


~(-_-)~ 랄랄라~ 정규 표현식 재밌네
이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/02/02 20:39 2010/02/02 20:39

python/os.walk 필터링 os_walkf

Posted at 2010/02/02 19:58// Posted in python/pyutils
python 의 os.walk 는 특정 디렉토리내 파일들을 재귀적으로 탐색할 수 있는 유용한 함수입니다.


# -*- coding:cp949 -*-
# 특정 디렉토리내 모든 파일의 경로를 출력하는 스크립트
import os

root = "특정 디렉토리 경로"
for base, dirs, names in os.walk(root):
for name in names:
print os.path.join(base, name)


그런데 사용하다보면
*.h 만 뽑아낸다던지, .svn 폴더는 제외한다던지 처럼
특정 폴더나 확장자만 얻어내야 할 경우가 자주 있습니다.

예1)

# .svn 디렉토리 제외
for base, dirs, names in os.walk(root):
dirs[:] = [dir for dir in dirs if dir != ".svn"]
...


예2)

# 확장자가 .h 인 파일만 추려내기
for base, dirs, names in os.walk(root):
for name in names:
if os.path.splitext(name)[1].lower() == ".h":
yield os.pah.join(base, name)


1~2줄 정도 추가되는 코드지만 너무 자주 쓰다보니 이렇게 한 두줄 쓰는 것도 귀찮아집니다.

그래서 os_walkf 란 함수를 만들었습니다.

def os_walkf(root, filterDir=None, filterName=None, filterExt=None):

for base, dirs, names in os.walk(root):
if filterDir:
dirs[:] = [dir for dir in dirs if filterDir(dir)]

if filterName:
if filterExt:
for name in names:
if filterName(name) and filterExt(os.path.splitext(name)[1]):
yield os.path.join(base, name)
else:
for name in names:
if filterName(name):
yield os.path.join(base, name)
else:
if filterExt:
for name in names:
if filterExt(os.path.splitext(name)[1]):
yield os.path.join(base, name)
else:
for name in names:
yield os.path.join(base, name)

속도를 위해 과감히 분기처리시켰습니다.

어디서나 사용하기 쉽도록 urlimport 를 지원합니다~

예제1

# .svn 디렉토리 제외
import urlimport_myevan
from os_utils import os_walkf

for path in os_walkf(".", filterDir=lambda dir: dir != ".svn"):
print path


예제2

# .h 파일만 수집
import urlimport_myevan
from os_utils import os_walkf

for path in os_walkf(".", filterExtr=lambda ext: ext.lower() == ".h"):
print path


짜잔~
이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/02/02 19:58 2010/02/02 19:58