티스토리에 딱히 불만이 있는 건 아닌데..
티스토리 -> 브런치 -> blogspot으로 넘어갔습니다.
이유가 딱히 있는 건 아니고..
그냥 daum계정을 잘 안쓰다보니.. 왠지 데이터를 여기에 남기기보단 자주 쓰는 id에 남기는 것이 나을 것 같았습니다.
새로운 블로그는 https://5dolstory.blogspot.com 입니다.
그럼 안녕~
뿅!
티스토리에 딱히 불만이 있는 건 아닌데..
티스토리 -> 브런치 -> blogspot으로 넘어갔습니다.
이유가 딱히 있는 건 아니고..
그냥 daum계정을 잘 안쓰다보니.. 왠지 데이터를 여기에 남기기보단 자주 쓰는 id에 남기는 것이 나을 것 같았습니다.
새로운 블로그는 https://5dolstory.blogspot.com 입니다.
그럼 안녕~
뿅!
올만에 다시 iOS 심볼리케이션 이야기..
티스토리로 글쓰면 별로 안이뻐서 대충 써도 이뻐지는 블로그를 찾다가 실패..
직접 올리기도 귀찮고..-0-;;
일단 우분투에서 ios symbolication을 하는 건 osx처럼 간단하지는 않다.
왜냐하면 심볼리케이션을 할 때 cpu의 archi type을 확인하는데 이게 osx에서는 lipo라는 명령어로 확인하고 거기에 맞는 arch type으로 심볼리케이션을 한다.
근데 lipo는 linux용이 없기 때문에 다른 걸로 archi type을 찾아야 한다.. (일단 이 부분은 현재 나도 못찾았다.. 전공이 C 디버그가 아니라서..;;)
그래서 app crash 정보 중 cpu architecture가 정확하다고 판단(실제 완전 정확하진 않음..)하고 적용해야 한다.
우분투에서 심볼리케이션을 할라면 atos를 대체 할 atosl이 필요하다.
atosl : https://github.com/facebook/atosl
페북에서 만든 것이고 내부적으로 dwarf를 이용해서 심볼리케이션을 해준다.
atosl 설치는 우분투에서 하면 쉽다.
일단 우분투에 dwarf 라이브러리를 깔자.
apt-get install libdwarf-dev binutils-dev
그리고 atols을 다운받자
압축을 풀고 atols 폴더로 간 다음
config.mk.local을 만들어야 한다
cat > config.mk.local
LDFLAGS += -L/usr/lib/
LDFLAGS += -L/usr/share/lintian/overrides
LDFLAGS += -L/usr/share/lintian/overrides/binutils
ctrl-z
이걸 만들어주고 이제 설치를 하자
make
make install
root에서 install해줘야 한다.
인스톨이 완료되었다면
atols --help 이렇게 쳐보자.
/atosl --help
atosl 1.1
Usage: atosl -o|--dsym <FILENAME> [OPTIONS]... <ADDRESS>...
-o, --dsym=FILE file to find symbols in
-v, --verbose enable verbose (debug) messages
-l, --load_address=ADDRESS specify application load address
-A, --arch=ARCH specify architecture
-g, --globals lookup symbols using global section
-c, --no-cache don't cache debugging information
-V, --version get current version
-h, --help this help
위처럼 나오면 잘 설치된거다.
이제 심볼리케이션을 한번 해보자
atosl --arch armv7 -o SampleApp.app.dSYM/Contents/Resources/DWARF/SampleApp --load-address 0x6a000 0x0037096a 0x00370a16 0x0036b6b6 0x0036b4d2 0x00369f3c 0x00366bc4 0x0035036c 0x00070bb8
-[MSLCoreDataManager createTable:datastore:] (in SampleApp) (MSLCoreDataManager.m:531)
-[MSLCoreDataManager getTable:datastore:] (in SampleApp) (MSLCoreDataManager.m:545)
__37-[MSLSyncManager datastore:snapshot:]_block_invoke (in SampleApp) (MSLSyncManager.m:928)
-[MSLSyncManager datastore:snapshot:] (in SampleApp) (MSLSyncManager.m:922)
__56-[MSLSyncManager snapshotWithDatastore:success:failure:]_block_invoke (in SampleApp) (MSLSyncManager.m:764)
__85-[MSLSyncManager processHTTPRequestWithPath:method:header:parameter:success:failure:]_block_invoke239 (in SampleApp) (MSLSyncManager.m:402)
__73-[MSLURLSessionManagerTaskDelegate URLSession:task:didCompleteWithError:]_block_invoke_276 (in SampleApp) (MSLURLSessionManager.m:184)
0x00070bb8
잘된다.
파라미터를 설명하면..
--arch : 심볼리케이션 할 아키텍쳐
-o : 심볼리케이션 할 앱의 dSYM파일
--load-address $1 : load address , $2.... : runtime address
이다
runtime address를 등록한 순서대로 아래 심볼리케이션 된 라인들이 나온다. 파싱해서 사용하면된다.
여기까진 앱 심볼리케이션이고..
시스템 심볼리케이션도 저거로 된다.
똑같이 sdk 심볼을 -o에 넣고 --load-address 설정하면 된다.
알고보면 별로 안어려운데.. 개삽질 끝에 알아낸 것들이다..ㅋㅋㅋ
페북 아저씨들은 참 똑똑한 것 같다.ㅎ
iOS symbolication dwarfdump로 하기 (0) | 2015.01.30 |
---|
iOS 심볼리케이션을 하려면 기본적으로 mac에서 debug모드로 하면 자동으로 된다.
개인 개발자면 별 문제가 없지만 nhn이나 skp, daumkakao 같이 다수의 앱을 서비스하는 회사에서는 iOS 앱의 크래쉬 정보를 서비스화 해서 전사 앱 개발을 하는데 도움을 주려고 시스템을 별도 구축한다.
몇가지를 보면 nhn의 ncrazer가 있고 skp는 crash logger라는 애고 daumkakao에는 moca crash report라는 시스템이 있다.
nhn ncrazer
저건 모두 mac에서 돌려야 돌아간다.
symbolicatecrash를 이리저리 뜯어서 속도를 빠르게 할 수 있다.
근데 두번째은 다이렉트로 해보는 방법도 있어서 그 부분을 소개해보련다.
그냥 간단히 예제를 하나 보자
앱의 bundle name은 TestApps다.
ios backtrace가 다음과 같다고 했을 때
0 libsystem_kernel.dylib 0x34d721d4 0x34d5d000 + 86484
1 libsystem_c.dylib 0x34cdbcf8 0x34cc7000 + 85240
2 libsystem_c.dylib 0x34cf7798 0x34cc7000 + 198552
3 libsystem_c.dylib 0x34d1190c 0x34cc7000 + 305420
4 TestApps 0x0034665e 0x6a000 + 2999902
5 TestApps 0x0026d99c 0x6a000 + 2111900
dwarfdump로 심볼리케이션 한 주소를 알아내기 위해서는 symbol address를 알아내야 한다.
symbol address를 알려면 일단 otool을 가지고 vmaddr의 메모리 주소를 알아내야 한다.
방법은
otool -arch armv7 -l ../TestApps.xcahive/Products/Applications/DaumApps.app/DaumApps
이런식으로 arch 명령어 주고 앱파일의 위치를 걸면
oad command 0
cmd LC_SEGMENT
cmdsize 56
segname __PAGEZERO
vmaddr 0x00000000
vmsize 0x00004000
fileoff 0
filesize 0
maxprot 0x00000000
initprot 0x00000000
nsects 0
flags 0x0
Load command 1
cmd LC_SEGMENT
cmdsize 736
segname __TEXT
vmaddr 0x00004000
vmsize 0x004d4000
fileoff 0
filesize 5062656
maxprot 0x00000005
initprot 0x00000005
nsects 10
flags 0x0
이런형태로 줄줄 뭐가 나오는데 Load command 가 LC_SEGMENT이고 segname이 __TEXT인 vmaddr이 우리가 필요한 메모리 주소다.
otool이 없어도 된다. dwarfdump로도 구할 수 있다.
방법은 dwarfdump -R /TestApps/dSYM/ 을 하게 되면
Segments
Segment Name vmaddr vmsize fileoff filesize maxprot initprot nsects flags
---------------- -------- -------- -------- -------- -------- -------- -------- --------
__PAGEZERO 00000000 00004000 00000000 00000000 00000000 00000000 00000000 00000000
__TEXT 00004000 004d4000 00000000 00000000 00000005 00000005 0000000a 00000000
__DATA 004d8000 000d0000 00000000 00000000 00000003 00000003 00000014 00000000
__LINKEDIT 005a8000 00430000 00001000 00178270 00000001 00000001 00000000 00000000
__DWARF 009d8000 012e7000 0017a000 012e637b 00000007 00000003 0000000f 00000000
이렇게 나오는데 빨간색으로 표기한게 vmaddr이다.
위에서 vmaddr은 0x00004000 이다
저 주소를 있으면 주소를 계산하자.
위에 backtrace의 4번 라인을 가지고 symbol address를 구해보자.
0x3B465E = 0x00004000 + 0x0034665e - 0x6a000
symbol address는 0x3B465E다.
이제 이걸 dwarfdump에 넣어서 돌리자.
dwarfdump --arch=armv7 --lookup=0x3B465E TestApps/dSYM/
결과를 보다보면
0x008cdb2e: TAG_subprogram [78] *
AT_name( "-[AFHTTPClient initWithBaseURL:]" )
AT_decl_file( "/Users/5dolstory/Workspace/D TestAppsIphone/TestIphone/Pods/AFNetworking/AFNetworking/AFHTTPClient.m" )
AT_decl_line( 231 )
......
Line table dir : '/Users/5dolstory/Workspace/TestAppsIphone/TestIphone/Pods/AFNetworking/AFNetworking'
Line table file: 'AFHTTPClient.m' line 288, column 0 with start address 0x00000000003b4656
.........
이렇게 Line table 이 있는데 이게 crash가 난 위치고 AT decl file이 클래스 파일 위치고 AT name이 메소드명이다.
symbolication을 ubuntu에서 하기 (0) | 2015.06.17 |
---|
오늘은 이지스 군함을 조립해 봅시다.
한번에 4개를 사서 조립하려니 진짜 빡시네요..;; 그래도 아들이 나중에 가지고 놀 걸 생각하면서 열심히 만듭니다.ㅎ
코어몰에서 제목을 이지스 군함이라고 만들었지만 케이스에는 Warship이라도 되어 있습니다.
생긴것도 이지스함이라기 보단 일반적인 구축함처럼 생겼습니다.
브릭은 950 피스 정도 되며 대형 레고 블럭이며 가격은 코어몰에서 29500원 선에 팔리고 있습니다.
상자를 열어서 브릭을 까보면 양이 엄청나다는 것을 알 수 있습니다. 이렇게 양이 많은 브릭을 조립 할 때는 가능하면 브릭을 종류 별로 분리해 놓는 것이 좋습니다. 위에는 브릭을 종류 별로 분리하려고 그릇을 가져다 둔 겁니다.
양이 많아서 그런지 브릭을 정리하는데도 시간이 꽤 걸리네요..ㅎ
회색 브릭과 매우 작은 브릭, 특수 브릭, 검은 색 브릭을 구분했습니다.
이제 구축함의 선두부터 만들어 봅시다. 처음 이야기 했지만 배가 상당히 큰 편입니다. 선두도 꽤나 크네요.
선두 조립을 끝냈습니다. 저기 뚜껑이 있는 부분이 원래 구축함들에겐 함대공 미사일이나 함대함 미사일이 발사되는 발사관입니다만...
요기에서는 한쪽은 보관함이고 한쪽은 사람이 탈 수 있는 공간으로 세팅되었습니다.
(나중에 구조를 바꿔서 안에 미사일이 발사될 수 있도록 가능하게 해봐야겠습니다. 일단 선체가 매우 크기 때문에 가능할 듯 싶네요.)
저 상태가 선두 조립이 완료된 상태입니다.
선체의 후미를 만들기 시작합니다. 후미에는 핼리패드가 장착되어있습니다. 후미의 구조는 복잡하지 않아서 시간이 얼마 안걸렸네요.
배의 중간인 마스크 부분을 만들었습니다. 사진이 몇장 없지만 마스크 부분에 작은 부품이 많이 들어가서 시간이 꽤 걸렸습니다.
지금까지 만든 선두, 선미 , 마스크의 모습입니다. 뒤에 박스는 처음 만들었던 전투함세트네요..ㅎ
마스크 부분을 좀 더 보여드리자면 아래 미사일 발사대가 3문씩 양쪽에 있습니다. 이건 느낌상 러시아의 드레드노트같은 느낌이네요. 그리고 후방에 레이더 뒤쪽에도 양쪽을 기준으로 미사일 발사대가 있습니다. 이 부분을 골키퍼로 만들었으면 더 사실적이었을 것 같네요.
마스크를 조립하다가 1x1 부품 2개가 모잘라서 일단 비워놨습니다. 크게 눈에 띄지는 않네요.
선두에 장착되는 함포입니다. 요 배에는 함포에 사람이 타고 있을 수 있습니다. 아쉽게도 4x1 브릭 2개가 모자라서 좀 어설픕니다.
이 브릭도 판매자에게 같이 보내달라고 해야겠네요.
선두, 선미, 마스크를 합친 완성본 모습니다. 참고로 저기 구명보트의 체인은 정말 플라스틱 체인으로 되어 있습니다. 매우 약하니 조심 조심 다뤄서 끼워야 합니다.
좀 더 옆면을 보여드리고 싶어서 찍었습니다. 크기를 보시면 대략 70cm 정도 됩니다. 매우 큰편입니다.
앞에 사진을 한방 더 찍어봤습니다.
보시면 요 레고는 사람이 노란색입니다. 초대형 항모에도 사람이 노란색인걸 보니 중급에는 사람이 살색이 들어가고 대형에만 노란색 사람이 들어가는 듯 싶습니다.
말씀드린 체인 부분입니다. 디테일이 꽤 좋은 편입니다.
정면을 보여드리기 위해서 찍은 사진입니다.
조립시간은 4시간 정도 소요되었습니다. 전에 프리깃 함을 조립할 때는 614피스인데도 4시간 반이 걸렸는데 얘는 970피스인데도 그때보다 시간이 적게 걸렸습니다.
이게 처음에 브릭을 분류해서 각 상자에 넣고 작업을 하면 작업시간을 상당히 단축 시킬 수 있습니다. 또한 브릭을 잃어버리지 않기 때문에 처음부터 없는 브릭이 뭔지 알 수 있습니다.
생각보다 매우 디테일하기 때문에 10살정도 되는 아이가 조립을 하면 적당해 보였습니다.
이제 마지막으로 초대형 항모가 남았네요.. 초대형 항모는.. 피스만 1500개 정도 됩니다.. 해서 블로그에 포스팅을 1,2부로 나눠서 하도록 하겠습니다.
[중국 호환레고] ENLIGHTEN 826 Aircraft Carrier (항공모함 전투단) (0) | 2015.01.20 |
---|---|
[중국 호환레고] ENLIGHTNE 820 Frigate (구축함세트) (2) | 2015.01.19 |
오늘 소개 할 호환레고는 "ENLIGHTEN 826 Aircraft Carrier (항공모함 전투단)" 입니다.
크기는 대형항모라고 보긴 좀 그렇고 경항모라고 하면 어울리겠네요. 피스는 508피스로 구성되어 있습니다.
가격은 25800원으로 역시 매우 저렴한 편입니다..ㅎㅎ
그럼 바로 조립을 해봅시다.
일단 브릭을 구분합니다. 저번 프리깃 함을 만들 때 브릭들을 마구 섞어서 작업을 하니 시간이 꽤 걸리더라고요.
그래서 이번에는 그룹을 작은거 큰거로 구분했습니다.
항모의 뼈대를 만들기 시작합니다. 경항모의 뒤에는 보트가 들어갈 수 있게 되어 있습니다. 그래서 저 가드가 있고요.
어느정도 항모의 윤곽이 나오고 있습니다. 가운데 스프링 부분은 경항모에서 미사일 발사대가 측면으로 나오게 되어 있어서 그 부분을 만든 것입니다.
호환레고를 보면 신기한 부품들이 몇개가 있습니다. 일반적으로 레고에서 볼 수 없는 것들인데 아마 구동되는 부분을 만들려고 추가한 듯 합니다.
항모가 얼추 만들어졌습니다. 덥개를 덥으니 이제 좀 그럴싸하네요.
관제탑을 만들고 비행기만 올리면 끝납니다. 완성이 되었네요..ㅎㅎ
항모에 있는 조그만 보트입니다. 원래 항모 뒤에서 꺼낼 수 있는데 제품 설명에 보면 잘 나와 있어서 따로 안찍었습니다.
이번 인현도 얼굴과 몸이 살색입니다.ㅎㅎ
브릭을 조립하면서 모자란 브릭이 생겨서 임시로 다른 브릭으로 땜빵을 했습니다.
원래 4X1 브릭이 있어야 하는데 저기에다가 신호기 같은걸 만들어서 달려고 6X1 브릭으로 끼워넣었습니다. 없는 브릭은 역시 다시 요청을 해야겠네요.
대략적으로 만든 시간은 2시간 30분 정도 걸린 듯 합니다.
일단 브릭 피스 자체가 509개정도로 전에 프리깃함보단 좀 더 적어서 맞추기가 수월합니다.
그리고 브릭을 구분해서 조립하니 브릭 찾는데 시간이 많이 단축되었네요.
대략적으로 8세 아이정도면 무난히 만들 수 있지 않을까 생각이 되네요.ㅎㅎ
중국 레고가 정말 가격대 성능비는 짱인듯 싶습니다.
[중국 호환레고] ENLIGHTEN 112 Warship (이지스 군함) (0) | 2015.01.21 |
---|---|
[중국 호환레고] ENLIGHTNE 820 Frigate (구축함세트) (2) | 2015.01.19 |
오랜만에 다시 블로그 포스팅을 하네요..
최근에 아이가 커서 레고를 사줄까 하다가 호환 레고를 알게 되어서 몇개 구매했습니다.(라고 쓰고 제가 갖고 싶어서라고 쓰지는 않습니다.;)
일반 정품 레고와 비교했을 때 가격이.. 후덜덜하게 쌉니다. 그래서 하나씩 구입 할 때마다 블로그에 포스팅하기로 마음을 먹었습니다.
첫 호환 레고 스리즈는 "ENLIGHTNE 820 Frigate 구축함 세트입니다.
가격은 24800원 (2015.01.10) 정도로 매우 저렴합니다.
저는 그냥 11번가에서 구매했는데요. 오픈마켓에서 "코어몰"이라고 치면 많이 나옵니다. 거기서 구매하시면 됩니다.
생긴건 이렇게 생겼습니다.
안에 들어있는 브릭의 피스는 650개 정도 들어있고 구성은 큰배, 구명보트, 조그만 악당 섬 이렇게 3개입니다.
한국 명칭이 구축함 세트인데 영어로는 정확하게 명칭이 되어 있습니다. 크기로 봤을 때 프리깃함이라고 보는게 맞을 듯 합니다.
ENLIGHTEN 스리즈 중에 warship이라고 명명된 스리즈가 있는데 그게 구축함에 더 가까워 보입니다.
(한국명으로 이지스함이라고 되어 있는데.. 이지스도 구축함이니.. 얼추 맞긴 합니다.)
본격적으로 조립을 시작해보겠습니다.
상자를 열면 2개 상자로 분리되어 있습니다.
(화면이 어두운 건 아내와 아기가 잘 때 혼자 만들어야 해서 불을 키지 못했습니다.ㅠ)
옆에 열쇠고리는.. 찬조입니다.(열쇠고리는 옥스포드꺼랑 비슷합니다.)
브릭의 구성은 이렇습니다. 대략 4봉지가 있고 봉지 안에 몇개 자잘한 것들이 있습니다.
브릭을 모두 상자에 쏟아 넣습니다. 작은 피스가 꽤 있기 때문에 잃어버릴 염려가 있어서 가능하면 상자에 담아놓고 작업을 하는게 좋습니다.
악당들이 지내는 조그만 섬입니다. 저기 로켓 발사대는 실제로 스프링으로 동작해서 발사가 됩니다! 0_0
이렇게 스프링으로 발사가 됩니다.
섬을 다 만들고 브릭 인형을 배치했습니다. 재미있는게.. 원래 레고는 애들이 노락색 피부를 갖는데 얘네들은 피부가 살색입니다!
정말 사람이라서 그런건지 모르겠지만.. 살색입니다.
이제 로켓포드가 달린 헬기를 조립합니다.
헬기 완성을 하였습니다. 브릭들 사이에 쌓여 있어서 구분이 잘 되지 않네요.
헬기 안에 조종사를 태웠습니다. 조종사 헬멧에 있는 안경은 너무 헐거워서 그냥 걸쳐놓는 수준입니다. 나중에 호환레고(중국)와 정품 레고간에 비교를 해야겠습니다. 전반적으로 중국산 레고는 브릭을 맞출 때 뻑뻑하거나 너무 헐겁습니다. 정품레고처럼 균일하지 않아 보입니다.
이제 구축함을 만들기 시작합니다. 구축함은 하부를 만듭니다.
하부를 만들 때 브릭 피스 1개가 모자랐습니다. (저 길다란 막대기..) 코어몰에선 모자란 브릭은 이야기 하면 따로 준다고 합니다.
일단 없는대로 3개만 껴서 시작했습니다.
얼추 골격이 만들어졌습니다.
짜잔.. 이제 완성이 되었습니다. 사진엔 없는데 파란 옷 입은 사람 두명 밑에는 구명보트가 들어갈 수 있도록 되어 있습니다.
헬기도 올려보았습니다.
한국어로는 구축함 세트인데.. 구축함은 아니고 정말 프리깃함 정도입니다.
인형이 쓰고 있는 파란 모자에는 별이 그려져있습니다.(인민군이라 그런가 봅니다..)
6세 이상이 조립하긴 어려워 보이고 6세 이상이면 가지고 놀 정도 되어보입니다.
한..10살이나 11살 정도가 조립하면 좋을 듯 합니다.
제가 조립한 시간은 4시간 정도 소요되었습니다.
[중국 호환레고] ENLIGHTEN 112 Warship (이지스 군함) (0) | 2015.01.21 |
---|---|
[중국 호환레고] ENLIGHTEN 826 Aircraft Carrier (항공모함 전투단) (0) | 2015.01.20 |
iodocs의 구조는 기본적으로 다음과 같다.
- iodocs-master |
- node_modules |
iodocs에서 사용하는 node의 모듈 디렉토리 |
|
- public |
API의 정보들을 등록하는 디렉톨리 |
|
- views |
iodocs의 문서 포멧 및 디자인을 지정 하는 디렉토리 |
|
- app.js |
iodocs 내부적으로 API를 Call할 때 사용하는 javascript |
|
- config.json |
iodocs를 띄우기 위한 기본 설정들 |
- package.json | iodocs 버전 정보 |
node_modules
이곳에는 node.js에서 사용 가능한 모듈이 있다 만약 iodocs를 커스터마이징하여 추가적인 기능을 붙이고 싶은 경우 npm으로 추가 모듈을 설치하면 된다.
public
해당 디렉토리 밑에는 총 3개의 하위 디렉토리가 있다.
I/O Docs 설치하기 (0) | 2014.08.18 |
---|---|
java로 excel 다중 sheet 만들기 (0) | 2010.06.03 |
jdbc 사용 예제 (1) | 2009.08.25 |
Struts2 + Spring2.0 엮을 때 나는 NullPointerException 해결방법 (1) | 2009.02.02 |
FTP 파일 업로드 (0) | 2008.12.01 |
Git에 보면 간단한 설명이 있다.
I/O Docs is a live interactive documentation system for RESTful web APIs. By defining APIs at the resource, method and parameter levels in a JSON schema, I/O Docs will generate a JavaScript client interface. API calls can be executed from this interface, which are then proxied through the I/O Docs server with payload data cleanly formatted (pretty-printed if JSON or XML). Basic HTML text tags are enabled in the JSON schema.
Iodocs가 좋은 점은 doc인데도 불구하고 해당 페이지에서 직접 API를 날려 볼 수 있도록 되어 있다.
설치 방법은 yum을 이용해서 간단하게 설치하는 방법도 있으나 여기서는 하나씩 설치하는 방식을 사용한다.
From the command line type in:
git clone http://github.com/mashery/iodocs.git cd iodocs npm install
해당 사이트에 가면 위 1~3번을 설치하고 나면 간단하게 iodocs를 설치 할 수 있다고 나온다.
일단은 저걸 설치하려면 Git이 서버에 설치가 되어 있어야 한다. 일단 Git을 설치하자.
OS버전은 RedHat이며 각 설치 방법은 OS별로 다르다.
[root@iaas-5dol-sandbox ~]# yum install git-core
이제 node.js를 설치해보자.
https://github.com/joyent/node/wiki/Installation 를 이용해서 직접 설치를 할 수 있으나.. 파이선을 버전에 맞게 다시 인스톨해줘야 하는 번거로움이 있어서 yum으로 인스톨을 하겠다.
필자의 경우 yum으로 install하려고 하니 nodejs가 없다고 나왔다.
그냥 바이너리를 이용해서 설치하고 환경변수에 추가해주자
[root@iaas-5dol-sandbox program] wget http://nodejs.org/dist/v0.10.30/node-v0.10.30-linux-x64.tar.gz
[root@iaas-5dol-sandbox program]# tar xvfz node-v0.10.30-linux-x64.tar.gz
[root@iaas-5dol-sandbox program]# ln -s node-v0.10.30-linux-x64 node
[root@iaas-5dol-sandbox ~]vi .bash_profile
PATH=$PATH:$HOME/bin:/daum/program/node/bin
export PATH
자 이제 redis를 설치하자. redis를 iodocs에서 사용하는 이유는 iodocs 내부적으로 문서로 만든 API 자체를 날려볼 수 있기 때문인데 api가 oauth를 사용하는 경우에 인증을 저장할 공간이 필요하고 그것을 redis에 저장한다.
만약 oauth를 사용하지 않는 경우는 redis를 제거해도 되긴 한다. 여기선 일단 redis를 적용한 버전으로 진행한다.
[root@iaas-5dol-sandbox program] wget http://download.redis.io/releases/redis-2.8.13.tar.gz
[root@iaas-5dol-sandbox program] tar xvfz redis-2.8.13.tar.gz
[root@iaas-5dol-sandbox program] make
[root@iaas-5dol-sandbox program] make install
[root@iaas-5dol-sandbox program] ln -s redis-2.8.13 redis
이제 기본적인 것은 다 설치했으니 iodocs를 설치해보자.
[root@iaas-5dol-sandbox program] git clone http://github.com/mashery/iodocs.git
[root@iaas-5dol-sandbox program] cd iodocs
[root@iaas-5dol-sandbox program] npm install
I/O Docs 구조 (0) | 2014.08.18 |
---|---|
java로 excel 다중 sheet 만들기 (0) | 2010.06.03 |
jdbc 사용 예제 (1) | 2009.08.25 |
Struts2 + Spring2.0 엮을 때 나는 NullPointerException 해결방법 (1) | 2009.02.02 |
FTP 파일 업로드 (0) | 2008.12.01 |
1. 사전작업
svn에 있는 소스를 내려받아 인텔리J에서 작업을 하고 싶다면 다음과 같이 하자.
VCS -> Browse VCS Repository -> Browse Subversion Repository -> 소스 선택 -> Checkout
그냥 잘 받아지면 문제가 없지만 초기 세팅 시 아래와 같은 문제가 생길 수 있다.
2. 에러 내용
인텔리J에서 SVN 체크아웃을 할 때 다음과 같은 에러가 발생한다면?
"Cannot load supported formats: Cannot run program "svn": CreateProcess error=2"
eclipse의 경우 svn PlugIn을 깔면 체크아웃이 잘 되지만 인텔리J는 기본적으로 SVN client을 내장하고 있지 않다. (PlugIn은 그냥 PlugIn일 뿐..) 그래서 이걸 깔아줘야 한다.
3. 해결 방법
http://www.sliksvn.com/en/download 에서 SilkSvn을 다운로드 받고 설치해주자.
(다른 것도 상관없다. 다른 것을 쓰고 싶으면 http://subversion.apache.org/packages.html 를 참조하자.)
4. 레퍼런스
http://blog.jetbrains.com/idea/2013/12/subversion-1-8-and-intellij-idea-13/
아래와 같이 pom.xml에 등록하면 됨
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- 컴파일러 설정 -->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>com.tistory.5dol.Starter</Main-Class> <!-- 실행시킬 Class 등록 -->
</manifestEntries>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
</transformers>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Hostname 과 IP 가져오기 (0) | 2010.11.18 |
---|---|
Java GC의 원리 (0) | 2010.02.18 |
How to find bottleneck in J2EE application (조대협) (0) | 2010.02.11 |
JVM GC와 메모리 튜닝 (조대협) (0) | 2010.02.11 |
Java jstat로 메모리 모니터링 (0) | 2010.02.11 |
순서
1. 포트 오픈
rlogin : 513
rsh : 514
ssh : 22
2. target 서버에서 .rhost 설정
127.0.0.1 5dolstory <- ip는 source 서버의 ip
3. 서버에서 rsh, rlogin 실행
/etc/xinetd.d/rsh, /etc/xinetd.d/rlogin
disable = yes -> no 설정
4. xinetd 재시작
/etc/rc.d/init.d/xinetd restart
5. 로그인 없이 rsh 바로 접근 하고 싶은 경우
vi /etc/pam.d/rsh
#auth required pam_rhosts_auth.so <- 주석 처리
리눅스 메모리 관리, 왜 메모리 여유공간이 없을까? (0) | 2013.08.14 |
---|---|
리눅스 history에 시간남기기 (0) | 2013.01.23 |
rcp 서버 설정하기. (0) | 2012.10.24 |
리눅스 시간 동기화 (0) | 2012.09.05 |
No space left on device (0) | 2012.06.28 |
출처 : http://eekplus.blogspot.kr/2012/03/oradiag.html
환경변수에 추가
export TNS_ADMIN=/home/eek/conf/
해당경로에 sqlnet.ora파일 생성해서
DIAG_ADR_ENABLED=off
TRACE_LEVEL_CLIENT=off
LOG_FILE_CLIENT=/dev/null
설정값을 추가하면 로그 파일이 생성되지 않음.
원본 document : http://docs.oracle.com/cd/B28359_01/network.111/b28317/sqlnet.htm#BIIDEAFI
count(1)과 count(*)의 차이점 (0) | 2013.08.21 |
---|---|
COUNT, SUM, AVG는 NULL을 어떻게 처리할까? (0) | 2013.07.17 |
Oracle session kill 하기 (0) | 2011.02.09 |
오라클에 돌고 있는 쿼리 시간 및 쿼리 확인하기 (0) | 2010.03.23 |
각 테이블 별로 용량이 어느정도 되는지 알아보는 쿼리 (0) | 2010.03.23 |
count(1)과 count(*)의 차이점은 뭘까?
결론만 말하자면 아무런 차이가 없다. 심지어 속도 차이도 없다.
Oracle Ask Tom에 보면 이런 글이 있다 : http://asktom.oracle.com/pls/asktom/f?p=100:11:0::NO::P11_QUESTION_ID:1156159920245
oradiag_<linux login id> 로그가 생성될 때 막는 법 (0) | 2013.09.27 |
---|---|
COUNT, SUM, AVG는 NULL을 어떻게 처리할까? (0) | 2013.07.17 |
Oracle session kill 하기 (0) | 2011.02.09 |
오라클에 돌고 있는 쿼리 시간 및 쿼리 확인하기 (0) | 2010.03.23 |
각 테이블 별로 용량이 어느정도 되는지 알아보는 쿼리 (0) | 2010.03.23 |
jQuery의 Ajax로 post로 날릴 때
XMLHttpRequest cannot load ...."URL" not allowed by Access-Control-Allow-Origin
이라는 에러가 나는 건 간단히 말하면 크로스브라우징 에러이다.
참조 : http://blog.iolo.pe.kr/category/hacking/web
Ajax에는 Same Origin Policy라는 원칙이 있다. 말 그대로, 현재 브라우져에 보여지고 있는 HTML을 내려준 웹서버(Origin)에게만 Ajax 요청을 보낼 수 있다.
MS가 XMLHttpRequest를 처음 만들 때만 해도 이런 제약은 당연한 것처럼 보였지만, 지금에 와서는 OpenAPI를 통한 매시업(Mashup)이 활성화되는 데 가장 큰 장애물이 되었다. 매시업이 아니더라도 여러 개의 도메인을 사용해야 하는 대규모 사이트를 개발할 때도 골치거리였다. Same Origin Policy를 우회하는 방법으로 JSONP, IFRAME IO, CrossDomain Proxy 등이 고안되었지만, 보안성이 취약하다거나, 동기 호출이 안되거나, 주고 받는 데이터 형식이 제한되거나, 직관적이지 못하거나(dirty hack), ... 등의 문제점 때문에 표준화되기엔 무리가 있었다.
(중략) 한 참 뒤에야 W3C는 (MS의 IE가 제공하는 방식을 수용하여) 크로스도메인간에도 Ajax요청을 주고 받을 수 있는 방법을 표준화 했는데, 그것이 바로 CORS다.
CORS를 한 마디로 요약하면, "요청을 받은 웹서버가 허락하면 크로스도메인이라도 Ajax로 통신할 수 있다"라는 정책이다. 기술적으로는 크로스도메인에 위치한 웹서버가 응답에 적절한 Access-Control-Allow-류의 헤더를 보냄으로써 크로스도메인 Ajax를 허용 수 있다
헤서 자신의 도메인과 post로 날리는 url이 같은지 확인해보면 알 수 있다.
만약 크로스브라우징을 지원해야 할 경우는
아래처럼 요청을 하면 되며
$.ajax({
url: 'https://www.googleapis.com/moderator/v1/series?key='+key,
data: myData,
type: 'GET',
crossDomain: true,
dataType: 'jsonp',
jsonp : 'callback',
success: function() { alert("Success"); },
error: function() { alert('Failed!'); },
beforeSend: setHeader
});
받는 형태는 아래형태여야만 한다.
callback({"key1" : "value1", "key2" : "value2"});
자바로 정렬하기 (0) | 2010.02.02 |
---|---|
Spring2.0 Dao 에러 중 setter 설정 에러 (0) | 2009.07.31 |
rlogin, rsh 설정 (0) | 2013.10.07 |
---|---|
리눅스 history에 시간남기기 (0) | 2013.01.23 |
rcp 서버 설정하기. (0) | 2012.10.24 |
리눅스 시간 동기화 (0) | 2012.09.05 |
No space left on device (0) | 2012.06.28 |
오라클에서 VARCHAR 형으로 되어있는 컬럼에 숫자만 있는 경우 이걸 어떻게 계산할까 궁금해하다가 요 블로그를 보게 되었다.
(http://blog.daum.net/why_i_am/33)
그래서 나도 테스트 해봤다.
일단 AVG를 할때 AVG하는 대상이 null이 없을 때는 아래와 같다.
보면 평균이 5가 나온다.
만약 d를 null로 하면?
평균을 d를 뺀 a,b,c만 가지고 평균을 낸다.
이건 count 함수와도 연관이 있다. 다시 d를 0으로 세팅하면..
count 가 4개이고 sum은 a,b,c,d를 모두 더한 값이다.
만약 다시 d가 null이면?
count가 3이되고 sum할 때 d를 빼고 한다.
참고로 만약 count(*)로 하면 4가 나온다.
생각해보면 sum할 때 대상 컬럼을 꼭 nvl(num,0)으로 만든 다음 할 필요가 없다.
여기서 중요한 개념은 "0 != null" 이다.
0은.. 0이지만 null은 '아무것도 없다.'라는 개념이기 때문이다.
맨 위에 있는 블로그에 다 있는 말이지만.. 간단히 정리해봤다.
oradiag_<linux login id> 로그가 생성될 때 막는 법 (0) | 2013.09.27 |
---|---|
count(1)과 count(*)의 차이점 (0) | 2013.08.21 |
Oracle session kill 하기 (0) | 2011.02.09 |
오라클에 돌고 있는 쿼리 시간 및 쿼리 확인하기 (0) | 2010.03.23 |
각 테이블 별로 용량이 어느정도 되는지 알아보는 쿼리 (0) | 2010.03.23 |
출처 : http://trouble.tistory.com/entry/bash-history%EC%97%90-%EC%8B%9C%EA%B0%84-%EB%82%A8%EA%B8%B0%EA%B8%B0
History 명령어
특수문자 | 의미 |
! | History 기능을 시작하기 위한 특수문자 |
!n | n번째로 사용된 명령어 실행 |
!-n | 현재부터 n번째 앞에 사용된 명령 실행 |
!! | 바로 전에 실행되었던 명령 실행(!-1) |
!string | 가장 최근에 string를 포함하고 있는 명령 실행 |
!?string[?] | 가장 최근에 string을 포함하고 있는 명령 실행 |
^aa^bb | 마지막으로 실행된 명령어에서 aa를 bb로 치환하여 명령 실핼, !!:s/aa/bb와 같음 |
!* | 마지막으로 실행된 명령에 사용된 모든 argument |
!$ 또는 !!$ | 마지막 명령의 마지막 argument |
!^ | 마지막 명령의 첫 argument |
Event:s^aa^bb | Event는 앞에서 !로 시작하는 history 명령. Aa를 bb로 치환. 단, ^ 대신 다른 특수문자를 사용하여도 됨. Ex) !23:s/aa/bb |
!:n 또는 !!:n | 마지막 명령의 n번째 argument |
!:n* | 마지막 명령의 b번째부터 그 이후의 argument(!:n-$와 같은 의미) |
!:0 | 마지막 명령의 명령어만 나타냄 |
!:n-m | 마지막 명령의 n번째부터 M번째 까지의 argument |
!;n- | 마지막 명령의 n번째부터 마지막 argument를 제외한 argument |
!?string?% | 가장 최근에 string을 포함하고 있는 단어를 나타냄 |
위의 명령어를 command line나 bash script에서 사용하여 history 기능을 사용할 수 있다.
modifler를 이용하여 hostiry에 저장된 명령어의 내용을 변환 시킬수도 있다.
[root@Linux ~]# vi /etc/profile |
HISTTIMEFORMAT="%Y-%m-%d_%H:%M:%S\ " export HISTTIMEFORMAT |
[root@Linux ~]# history |
2623 2006-10-17_13:48:06\ /etc/init.d/apache restart 2624 2006-10-17_13:48:06\ vi vhost_nehome.net |
rlogin, rsh 설정 (0) | 2013.10.07 |
---|---|
리눅스 메모리 관리, 왜 메모리 여유공간이 없을까? (0) | 2013.08.14 |
rcp 서버 설정하기. (0) | 2012.10.24 |
리눅스 시간 동기화 (0) | 2012.09.05 |
No space left on device (0) | 2012.06.28 |
출처 : http://uple.net/121, http://cafe.naver.com/coolkkm1/19
oracle에서 현재시간과 일자 계산
현재 시간 출력 : sysdate
SQL> select sysdate from dual;
SYSDATE
------------
29-MAR-10
현재시간을 포맷을 지정하여 출력
SQL> select to_char(sysdate,'yyyymmdd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'
-----------------
20100329 13:15:26
현재의 시간과 1일 전의 시간을 구하기
SQL> select to_char(sysdate,'yyyymmdd hh24:mi:ss'), to_char(sysdate - 1,'yyyymmdd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,' TO_CHAR(SYSDATE-1
----------------- -----------------
20100329 13:15:38 20100328 13:15:38
현재의 시간과 10일전의 시간을 구하기
SQL> select to_char(sysdate,'yyyymmdd hh24:mi:ss'), to_char(sysdate - 10,'yyyymmdd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,' TO_CHAR(SYSDATE-1
----------------- -----------------
20100329 13:15:47 20100319 13:15:47
현재 시간과 1시간전의 시간을 구하기
SQL> select to_char(sysdate,'yyyymmdd hh24:mi:ss'), to_char(sysdate - 1/24,'yyyymmdd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,' TO_CHAR(SYSDATE-1
----------------- -----------------
20100329 13:15:54 20100329 12:15:54
현재 시간과 1분전의 시간을 구하기
SQL> select to_char(sysdate,'yyyymmdd hh24:mi:ss'), to_char(sysdate - 1/24/60,'yyyymmdd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,' TO_CHAR(SYSDATE-1
----------------- -----------------
20100329 13:16:02 20100329 13:15:02
현재 시간과 1초전의 시간을 구하기
SQL> select to_char(sysdate,'yyyymmdd hh24:mi:ss'), to_char(sysdate - 1/24/60/60,'yyyymmdd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,' TO_CHAR(SYSDATE-1
----------------- -----------------
20100329 13:16:09 20100329 13:16:08
- 시간구하기
select (to_date('1800', 'hh24mi') - to_date('0900', 'hh24mi'))*(24*60*60 )
from dual;
to_date 로 계산후
(24 -- 시간표시
*60 -- 분표시
*60 ) -- 초표시
- 현재시간에 시간 추가하기
select sysdate,sysdate+1/(24*60)*10 from dual
sysdate+1은 1일 이후입니다.
그래서 1/(24*60)은 1분입니다.
10을 마지막에 곱하면 10분이죠 ^^
일 가(감) 산 SYSDATE + 1
시간 가(감) 산 SYSDATE + 1/24
분 가(감) 산 SYSDATE + 1/24/60
초 가(감) 산 SYSDATE + 1/24/60/60
-- 날자와 날짜사이의 시간 구하기
select to_date('2005050309','yyyymmddhh')-to_date('2005050409', 'yyyymmddhh'))*24
from dual;
;
-- 날짜에 시간더하기
select to_char(to_date('200305021120', 'yyyymmddhh24mi'), 'yyyymmddhh24mi'),
to_char(to_date('200305021120', 'yyyymmddhh24mi') + (115/1440), 'yyyymmddhhmi') from dual;
-- 날짜수 구하기
select
to_date('20050301', 'yyyymmdd')+1 - to_date('20050225', 'yyyymmdd')
from dual;
->여기서 하루치를 더한거는 그마지막 날을 포함하기 위해 하루를 더해야한다
-- 개월수 구하기
select months_between(to_date('20050131', 'yyyymmdd'), to_date('20010201', 'yyyymmdd')) from dual;
-- 그달의 마지막 날짜 구하기
select to_char(last_day(to_date('20040201','yyyymmdd')), 'yyyymmdd')
from dual;
select to_char(last_day(to_date('20040201','yyyymmdd')), 'mm')
from dual;
select to_char(last_day(to_date('20040201','yyyymmdd')), 'dd')
from dual;
-- 하루를 더추가하고 2달 뒤의 일자구하기
select to_char(add_months(to_date('20050201','yyyymmdd')+1, 2), 'yyyymmdd')
from dual;
-- 하루를 더추가하고 2달 앞의 일자구하기
select to_char(add_months(to_date('20050201','yyyymmdd')+1, 2), 'yyyymmdd')
from dual;
-- 해달일부터 2달 뒤의 일자구하기
select to_char(add_months(to_date('20050201','yyyymmdd'),2), 'yyyymmdd')
from dual;
- months_between : 두날짜간의 달수 구하기
select months_between (to_date('20050201','yyyymmdd'), to_date('20050101', 'yyyymmdd'))
from dual;
- next_day 특정날자에서 가장가까운 요일의 날자 찾기
select next_day(to_date('20050101','yyyymmdd'), '일') from dual
TRUNC 함수의 제2 인수에'day'를 이용하면…….
SQL> select TRUNC(SYSDATE,'day') from dual; |
리스트 4 이번 주의 주처음의 날을 취득 |
이러한 방법으로 간단하게 주의 처음의 날을 취득할 수 있습니다. 물론 SYSDATE 함수 대신에, SYSTIMESTAMP 함수를 사용할 수도 있습니다.다만, DATE형으로 변환되는 것은 기억해 둘 필요가 있습니다.
날짜 데이터로 TRUNC 함수를 사용하는 경우, 제2 인수에는'day'외에도 몇개인가 지정할 수 있습니다.메뉴얼을 확인하삼!!
TRUNC 함수를 사용한 샘플 SQL를 1개들어 둡니다.제목은 「이번 달의 제n○요일을 취득한다」
select decode(TRUNC(get_date,'mm'),TRUNC(SYSDATE,'mm'),get_date,null) |
리스트 5 이번 달의 제n○요일을 취득한다 |
- sysdate = 19950725
- round(sysdate, 'month') -> 19950801
- round(sysdate,'year') -> 19960101
- trunc(sysdate, 'month') -> 1950701
- trunc(sysdate, 'year') -> 19950101
- 형식
scc , cc : 세기 표현
year : 년도를 영어로 표현
yyyy, yyy, yy, y : 년도를 자릿수로 자른다
bc, ad : 서기 등으로 표시
q : 분기 표시
mm : 두자리로 월표시
month: 영어로 표시
mon: 영어로 3자리로 월표시
rm: 로마자로 표시 i, ii. xi
ww: 1년기준 몇째주 표시
w:한달기준 몇째주 표시
ddd: 365(1년기준 ) 의 몇째 일
dd: 날짜를 두자리로 표시
d: 요일을 숫자로 표시
dy : 요일 한자리로 표시
day: 요일 표시
am, pm, a.m. , p.m. : 오전오후 표시
hh, hh12 : 12시 기준으로 표시
hh24 : 24시 기준으로 표시
/, "of" : 날짜의 중간에 문자 표시 -> to_char(to_date('19951201', 'yyyymmdd'),'yyyy "of" mm/dd')
spth : 날짜를 영문 서수로 표시
sp : 날짜를 영문 숫자로 표시
tomcat6를 처음 설치하면(압축풀면) webapps 폴더 안에 웹페이지에서 디플로이를 관리할 수 있는
host-manager, manager 등이 디폴트로 설치되어 있다. 하지만 이것은 보안적인 측면에서 위배되므로
보통 다 지우는 게 좋다.
하지만 이것을 그냥 지우게 되면
Error Message
심각: Error starting static Resources
java.lang.IllegalArgumentException: Document base /home/msp_solution/web/tomcat/webapps/host-manager does not exist or is not a readable directory
이와 같은 에러를 만나게 된다.
Solution
conf\Catalina\localhost 밑에 context명.xml으로 생성하면, tomcat은 \webapps\context를 docBase 경로로 판단하고 찾는다. 그래서 서버 구동시 위와 같은 에러를 발생시킨다.
아래 xml들을 찾아서 삭제해주면 에러는 발생하지 않는다.
conf\Catalina\localhost\host-manager.xml
conf\Catalina\localhost\manager.xml
Apache Log에 I/O byte 나오게 하기 (0) | 2009.10.07 |
---|---|
jconsol 사용하기 (1) | 2009.08.03 |
XST 취약성 관련 GET, POST 외에 죄다 막아버리기 (0) | 2008.10.20 |
아파치 웹서버 모니터링하기 (0) | 2008.10.06 |
아파치 로그 날짜 별로 남기기 (0) | 2008.09.26 |
1.1.1.1 -> 2.2.2.2 로 rcp를 쓰고 싶은 경우..
리눅스 메모리 관리, 왜 메모리 여유공간이 없을까? (0) | 2013.08.14 |
---|---|
리눅스 history에 시간남기기 (0) | 2013.01.23 |
리눅스 시간 동기화 (0) | 2012.09.05 |
No space left on device (0) | 2012.06.28 |
Date 명령어 사용 (0) | 2011.02.16 |
리눅스에서 date 명령어로 시간을 치면 가끔 다른 시간이 나오는데 이걸 동기화 하는 방법이다.
권한은 root에서 가능하다.
]$ rdate -s time.bora.net && hwclock -w
리눅스 history에 시간남기기 (0) | 2013.01.23 |
---|---|
rcp 서버 설정하기. (0) | 2012.10.24 |
No space left on device (0) | 2012.06.28 |
Date 명령어 사용 (0) | 2011.02.16 |
VI에서 인코딩 변환해서 보기 (0) | 2010.12.02 |
Oracle 에서
nvl 함수도 있고
decode 함수도 있다.
decode 함수를 자주 쓰다보면 case when then end 함수를 쓸 때
힘들어 하는 경우가 있다.
그러니 decode도 쓰고 case when then end 함수도 번갈아 쓰는것이 좋을듯하다.
mysql 에서는
nvl 함수 대신 COALESCE 함수가 있다.
ifnull은 인자갯수가 정해져 있다면 COALESCE 는 계속 넣을수 있다.
nullif 함수는 인자 두개가 같으면 null을 그렇지 않으면 첫번째 인자를 리턴하는 함수다.
equal null else if first 의 약자로 봐야 하나.
elt 함수는 첫번째 인자가 숫자고 리턴형이 스트링이며
field 함수는 첫번째 인자는 스트링이고 리턴형은 숫자형이다.
해당사항이 없으면 null을 리턴한다.
elt는 리턴형이 스트링이므로 해당사항이 없을 경우 null을 리턴하고
field 함수는 리턴형이 해당사항없을 경우 0이 리턴된다.
case when then end 를 쓸때
비교선행자를 case와 when 사이에 두는 경우
decode와 사용 용도가 동일하며
case 와 when 사이에 공백이 있을 경우 when then 사이에 조건문이 온다.
decode(qq,'1','a','2','b');
인경우 qq의 값이 해당사항이 없으면 마지막 'b'로 설정됨에 유의 한다.
case [?] when [?] then (when then ... ) (else) end 이다.
COALESCE /쿄'[올|얼]레'(쓰)/ : 하나로되다, 합체하다., 아물어 붙다 의 뜻
case [A] when [B1] then (when [B2] then ...) (else) end 문을 이용하면
A에 값을 놓아 switch case문으로 이용 가능 하고 [A]를 비워두는 경우
B부분을 조건절로 두어 if esle문으로 이용가능하다.
[출처] Mysql 함수 COALESCE|작성자 붐업
출처 : http://blog.daum.net/99445015/25
[oracle@localhost /usr/lib/oracle/xe]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Jun 26 09:54:24 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn MONITOR/ahffk1029;
Connected.
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
CPU_USER TABLE
GRAPH TABLE
HOSTINFO TABLE
PLAN_TABLE TABLE
SERVERINFO TABLE
SESSION_USER TABLE
TTT TABLE
BIN$bSXyAHGW3yzgQAB/AQAoOQ==$0 TABLE
CONNECTINFO TABLE
ALERTINFO TABLE
10 rows selected.
SQL> drop table 'BIN$bSXyAHGW3yzgQAB/AQAoOQ==$0'
2 ;
drop table 'BIN$bSXyAHGW3yzgQAB/AQAoOQ==$0'
*
ERROR at line 1:
ORA-00903: invalid table name
SQL> drop table 'BIN$bSXyAHGW3yzgQAB/AQAoOQ==$0' cascade constraints
2 ;
drop table 'BIN$bSXyAHGW3yzgQAB/AQAoOQ==$0' cascade constraints
*
ERROR at line 1:
ORA-00903: invalid table name
SQL> drop table 'BIN*'
; 2
drop table 'BIN*'
*
ERROR at line 1:
ORA-00903: invalid table name
SQL> purge recyclebin;
Recyclebin purged.
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
CPU_USER TABLE
GRAPH TABLE
HOSTINFO TABLE
PLAN_TABLE TABLE
SERVERINFO TABLE
SESSION_USER TABLE
TTT TABLE
CONNECTINFO TABLE
ALERTINFO TABLE
9 rows selected.
SQL>
위의 실습을 보듯 Oracle 10G에는 휴지통 기능이 있다.
휴지통의 데이터 테이블은 'BIN$bSXyAHGW3yzgQAB/AQAoOQ==$0' 이다.
SQL> purge recyclebin => 이부분은 휴지통 비우기 명령어 이다.
휴지통(Recycle Bin)
오라클이 10g에서 새롭게 추가한 '휴지통' 이라는 기능.
테이블을 DROP 하더라도 언제던지 복원할 수 있게 하고자 하는 것이고요,
윈도우의 휴지통과 같다고 보시면 됩니다.
휴지통에 들은 테이블을 조회.
SQL> show recyclebin;
휴지통의 모든 내용이 비워집니다.
SQL> purge recyclebin;
삭제된 테이블을 되살리고 싶다면
SQL> flashback table 테이블명 to before drop;
만약, 특정 테이블을 휴지통에 남기지 않고 모두 삭제하려면..
SQL> drop table 테이블명 purge;
purge문 없이 그냥 drop 한 후에는
SQL> purge table 테이블명;
오라클 분석함수 사용 (0) | 2010.11.18 |
---|---|
Oracle Text를 이용한 전체 텍스트 검색 애플리케이션의 구현 (0) | 2009.03.27 |
ROWNUM의 동작 원리와 활용 방법 (0) | 2009.02.05 |
Oracle BPEL Process Manager를 이용한 PeopleSoft CRM과 Oracle E-Business Suite의 통합 (0) | 2008.06.03 |
이기종 EAI 환경에 BPEL 추가하기 (0) | 2008.06.03 |
디스크 용량이 어느정도 있는데도 불구하고 No space left on device 가 뜰 때가 있다.
이때는 i-node에 용량이 남아있는지 확인하기 위하여 df -i로 확인을 해야한다.
원인은 spool에 뭔가가 많아서 그런 것인데 해당 내용을 지우면 해결된다.
/var/spool/mqueue
/var/spool/clientmqueue
여기 안에 있는 내용을 지우자.
find . -ctime +0 -exec rm -f {} \;
rcp 서버 설정하기. (0) | 2012.10.24 |
---|---|
리눅스 시간 동기화 (0) | 2012.09.05 |
Date 명령어 사용 (0) | 2011.02.16 |
VI에서 인코딩 변환해서 보기 (0) | 2010.12.02 |
Linux screen 사용하기 (0) | 2010.11.30 |
제주 다음스페이스 출장기.
이번에 프로젝트로 서울에서 일하지 않고 제주에서 한달간 일을 하게 되었다.
그래서 제주로 오게 되었는데 옛날 GMC도 좋았지만
이번에 새로 건축한 다음스페이스도 참 마음에 들어서 간단한 사진을 올린다.
개인적으로.. 대한민국에서 이정도 퀄리티의 사무실이 있을까 싶을 정도로 사무실이 쾌적하다.
좌측 창문 뒤에는 식당이고 요긴 사무실하고 식당 사이 쉽터 같은 곳이다.
요기는 위에 사진 반대편 부분. 저기 위층은 사무실인데 창문 쪽으로 쉴 수 있도록 테이블이 있다.
ㅇ
요긴 점심시간에 놀 수 있는 놀이방(?)같은 곳이다.
포켓볼 대, 탁구대, 플스랑 액박이랑 키넥트도 있다. 무슨 보드게임같은 것도 있고 꽤나 넓다.
점심먹고 위닝 좋아하는 사람들은 여기서 위닝을 한다.
요긴 복도이다. 여느 복도랑 좀 다른 건 아래 같은 그림들이 있다.
아 그리고 계단 안에도 화장실이 있다.
계단 맨 아래 층에 보면 공간이 좀 남는 부분이 있는데 그 부분을 저렇게 인테리어로 해놨다.
꽤나 멋지다고 생각된다.
여긴 회사 내에 있는 도서관이다.
개인적으로 무지 맘에 드는 곳인데 마치 외국 도서관에 있는 느낌이다.
아직 책들이 그냥 박스채 쌓여 있어서 지금은 책이 좀 부족한 편이지만 박스에 쌓여 있는 책을 다 꺼내면
꽤나 멋진 도서관이 될 것 같다.
요긴 회사 밖 일부분인데 뭐 별건 없다..ㅎ;
사무실은 이런 형태로 만들어져 있다.
천장이 무지 높다. 한.. 2층 정도 되는 높이를 천장으로 모두 썼다.
창의성은 천장이 높은데서 많이 나온다고 해서 천장을 높게 했나보다.
여긴 지금 내가 사용하는 회의실.
난 맨발로 일하는 걸 좋아하는데 여기 바닥에 인조잔디가 깔려 있어서 너무 좋다.ㅎㅎ
여긴 밖에 미니 골프연습장이라는데 난 골프를 안치니까 패스~
일단 오늘은 플젝으로 인해 급해서 대충 사진을 찍었는데 다른 곳도 있다.
이 블로그를 보고 다음스페이스에 궁금했던 사람들이 있다면 조금은 해소 되었으리라 생각된다..ㅎ
출장은.. 아직 3주 더 남았으니..-0-;
겨울 아침엔 늘... (0) | 2009.04.06 |
---|---|
아침이란..; (0) | 2009.02.17 |
모닝콜 (0) | 2009.02.17 |
군대가는 녀석 (0) | 2009.02.17 |
우리 엄마 (0) | 2009.02.17 |