'팁'에 해당되는 글 7건
PHP로 쉘 스크립트를 작성할 때 아래와 같이 공통헤더를 덧붙여 사용하면 대부분의 환경에서 PHP를 실행할 수 있다.
#!/bin/sh # Find PHP PHP=`which php` # Total Line Count TLC=`grep -c "^" $0` # Run Line Count RLC=`expr $TLC - 16` # Execute PHP tail -$RLC $0 | $PHP # Exit Shell Script exit 0 <?php echo "Hello, PHP!\n"; ?>
C프로그래밍을 할 때 메인함수의 인수 중 쉘에서 입력한 문자열이 들어있는 argv의 형이
char** argv와 char* argv[] 두 형태가 있다. 이 차이는 다음과 같다.
먼저
char** argv는 문자 포인터의 포인터이다. 문자 포인터란 문자열이며 따라서 문자 포인터의 포인터는 문자열의 포인터, 문자열(string)의 배열처럼 사용할 수 있다. 여기서 문제는 argv = ptr와 같이 중간이 변경될 위험이 있다. 물론 주의 깊게 코딩한다면 그러지 않겠지만 사람이 하는 일에는 실수가 있기 마련이다.
반면
char* argv[]는 문자열(char*)의 배열([])이다. 이 크기는 첫 번째 인수인 int argc에 저장되어 있다. argv는 배열이기 때문에 위에서 말한 argv = ptr 이와 같은 코드는 컴파일에러가 나서 오류를 미연에 방지할 수 있다.
2008-07-14 수정 : 파일 경로 변경. 예제 코드 추가
.metadata\.plugins\org.eclipse.core.runtime\.settings\org.eclipse.jdt.ui.prefs
semanticHighlighting.SYNTAX.enabled=true|false
semanticHighlighting.SYNTAX.color=%D,%D,%D
.metadata\.plugins\org.eclipse.core.runtime\.settings\org.eclipse.jdt.ui.prefs
semanticHighlighting.SYNTAX.enabled=true|false
semanticHighlighting.SYNTAX.color=%D,%D,%D
semanticHighlighting.annotation.color=255,128,0 semanticHighlighting.autoboxing.enabled=true semanticHighlighting.autoboxing.underline=true semanticHighlighting.class.color=0,0,255 semanticHighlighting.class.enabled=true semanticHighlighting.enum.color=0,128,192 semanticHighlighting.enum.enabled=true semanticHighlighting.interface.color=0,128,255 semanticHighlighting.interface.enabled=true semanticHighlighting.localVariable.color=0,128,128 semanticHighlighting.localVariable.enabled=true semanticHighlighting.localVariableDeclaration.color=0,128,128 semanticHighlighting.localVariableDeclaration.enabled=true semanticHighlighting.method.color=128,0,0 semanticHighlighting.method.enabled=true semanticHighlighting.methodDeclarationName.bold=false semanticHighlighting.methodDeclarationName.color=255,0,0 semanticHighlighting.methodDeclarationName.enabled=true semanticHighlighting.staticMethodInvocation.color=128,0,0 semanticHighlighting.typeParameter.bold=false semanticHighlighting.typeParameter.enabled=true java_keyword_return_bold java_keyword_bold=false
회사 프로젝트에서 쓸 일이 있어서 "대충대충" 정리한 것.
첨부 파일의 내용은 아래 URL에서 확인이 가능하다.
http://spreadsheets.google.com/pub?key=pvqd8DGX2zNErXuOhoq8xXg
첨부 파일의 내용은 아래 URL에서 확인이 가능하다.
http://spreadsheets.google.com/pub?key=pvqd8DGX2zNErXuOhoq8xXg
자바스크립트 라이브러리 중 단순 함수 모음이 아니라 바로 적용해서 쓸만한 것들을 추려보았습니다.
첨부한 파일은 각 라이브러리(프레임워크)별 기능 비교 표입니다.
별표는 특별히 뛰어나다는 뜻이메 세모는 좋지 않다는 뜻입니다.
라이브러리 기능 비교는 크게 Ajax와 자바스크립트 자체 언어 확장, 이벤트 처리, UI로 나눠서 살펴봤습니다.
라이브러리를 통해 HTML 엘리먼트를 조정할 것이기 때문에 DOM 자체 지원은 제외했습니다.
(YUI(Yahoo UI Library)는 확장판이 있어 제외했습니다)
- prototype
URL : http://www.prototypejs.org/
자바스크립트 프레임워크라 불리는 prototype니다.
UI 쪽은 라이브러리는 전혀 없으나 프로토타입 언어 특성을 최대한 활용하여
자바스크립트 자체 기능을 확장하고 간편하게 사용할 수 있도록 되어 있습니다.
prototype 자체만을 사용하기도 하지만 다른 라이브러리의 기본 토대가 되는 경우도 많습니다.
추천도 : ☆☆☆☆☆ - mootools
URL : http://mootools.net/
demo : http://demos.mootools.net/
UI 외에도 이벤트 처리에 강점을 보이는 라이브러리입니다.
단순한 UI 구성보다는 이벤트에 따른 다이내믹한 GUI를 구축하는 데 좋을 듯합니다.
실제 구현된 것을 보면 가볍고 빠른데다 깔끔합니다.
추천도 : ☆☆☆☆ - yui-ext
URL : http://www.yui-ext.com/
demo : http://www.yui-ext.com/deploy/yui-ext/docs/
YUI 기반의 라이브러리입니다. 역시 UI 라이브러리 답게 깔끔하고 예쁩니다.
다만 컨틀롤이 그렇게 다양하지는 않은게 아쉬운 점입니다.
정확하게 파악하지는 못했는데 extjs로 확장된 것 같습니다.
추천도 : ☆☆☆ - extjs
URL : http://extjs.com/
demo : http://extjs.com/deploy/ext/docs/index.html
yui-ext의 확장판으로 보입니다.(거의 확실)
테마 기능이 지원되며 기반 라이브러리가 YUI 하나만 있는 게 아니라
jQuery와 prototype + scriptaculous 등 총 세가지 중 선택할 수 있습니다.
비교한 UI 라이브러리 중 가장 많은 컨트롤을 가지고 있으며
속도도 보통 정도를 유지합니다.
추천도 : ☆☆☆☆ - scriptaculous
URL : http://script.aculo.us/
demo : http://wiki.script.aculo.us/scriptaculous/show/Demos
제일 나중에 알게된 라이브러리라서 첨부파일에는 빠져있습니다.
YUI 처럼 직접 쓰기보다는 extjs 등을 통해 사용하는 게 나을 듯 합니다.
컨트롤도 많지 않고 주로 이펙트와 드래그앤드랍 쪽으로 구현이 되어 있습니다.
추천도 : ☆☆☆ - DHTML Suite
URL : http://www.dhtmlgoodies.com/
demo : http://www.dhtmlgoodies.com/packages/dhtml-suite-for-applications/demos/demo-pane-splitter.html
그다지 좋아 보이지 않는 라이브러리입니다.
데모페이지가 별로여서 그런지는 모르겠으나 그렇게 깔끔하지도 않고 무거운데다
구현된 컨트롤도 기능이 다채롭지 않습니다.
한마디로 비추;
추천도 : ☆☆ - qooxdoo
URL : http://qooxdoo.org/
demo : http://demo.qooxdoo.org/current/showcase/
예쁘고 아기자기하게 구현된 라이브러입니다.
구현된 컨트롤이 그렇게 많지는 않으나 컨트롤 하나하나의 완성도가 상당한 편입니다.
테마와 아이콘을 변경할 수 있는 기능이 있습니다.
필요한 컨트롤이 많지 않다면 고려해볼만 합니다.
추천도 : ☆☆☆ - lightbox
URL : http://www.huddletogether.com/projects/lightbox/
비교적 초반에 나온 라이브러리가 아닌가 합니다.
사실 가지고 있는 기능은 이미 보여주기 하나 뿐이지만
이 기능 하나를 충실히 구현하고 있고
또한 적용하기도 매우 간편해 널리 사용되고 있습니다.
추천도 : ☆☆☆☆
이 외에 (큰 문제는 없겠지만) 라이센스도 확인을 해봐야 하고
실제 코드로 구현을 했을 때 얼마나 간편하게 할 수 있는가도 확인해봐야 합니다.
이상입니다.
100여 군데 가까운 고객 사이트 중 WebtoB에서 PHP를 돌리는 곳은 딱 두 군데 있다. 그런데 우연의 일치인지 그 두 군데가 어제 오늘 사이로 모두 문제가 생겼다. 한 군데는 WebtoB 실행 계정이 변경되면서 오라클 환경 변수(TNS_ADMIN과 NLS_LANG)를 가져오지 못해서 일어나는 DB 접속 오류였고 나머지 하나는 PHP 페이지에 접근하면 무조건 500 internal error 뿌리면서 죽는 증상이었다.
첫 번째 경우는 오류메시지가 브라우저까지 ORA-12154메시지가 친절하게 뿌려져서 쉽게 증상을 잡을 수 있었지만 두 번째 경우는 모든 경우에 무조건 500 메시지만 보여져서 도무지 원인을 파악할 수 없었다.
오랜시간 브라우저를 통해서만 증상을 파악하다가 테스트의 편의를 위해 커맨드라인 상에서 해당 PHP 파일들을 실행해 보다 우연히 500이 뜨는 페이지는 모두 Notice 이하 각 오류 메시지가 나오는 걸 확인했다. 혹시 이것인가 해서 phpinfo()의 error_reporing을 확인해 보니 E_ALL로 되어 있었고 이 상태에서 Notice를 발생시키는 테스트 페이지를 생성해보니 역시 500이었다. error level을 조절해보니 아무 이상없이 잘 실행되었다.
즉 해결책은 php.ini에서 error_reporting = 0 로 설정하기였다.
오라클 오류가 난 기관은 Warning도 브라우저에 잘도 뿌려줬는데 여긴 왜 이랬는지 모르겠다. 내일 tmax 담당자한테 전화해서 물어봐야겠다.
첫 번째 경우는 오류메시지가 브라우저까지 ORA-12154메시지가 친절하게 뿌려져서 쉽게 증상을 잡을 수 있었지만 두 번째 경우는 모든 경우에 무조건 500 메시지만 보여져서 도무지 원인을 파악할 수 없었다.
오랜시간 브라우저를 통해서만 증상을 파악하다가 테스트의 편의를 위해 커맨드라인 상에서 해당 PHP 파일들을 실행해 보다 우연히 500이 뜨는 페이지는 모두 Notice 이하 각 오류 메시지가 나오는 걸 확인했다. 혹시 이것인가 해서 phpinfo()의 error_reporing을 확인해 보니 E_ALL로 되어 있었고 이 상태에서 Notice를 발생시키는 테스트 페이지를 생성해보니 역시 500이었다. error level을 조절해보니 아무 이상없이 잘 실행되었다.
즉 해결책은 php.ini에서 error_reporting = 0 로 설정하기였다.
오라클 오류가 난 기관은 Warning도 브라우저에 잘도 뿌려줬는데 여긴 왜 이랬는지 모르겠다. 내일 tmax 담당자한테 전화해서 물어봐야겠다.
Spring IDE plugin을 사용하면 빈 사이의 관계를 다이어그램으로까지 보여주는 것 같은데 일단 우리 개발환경과 맞지 않으므로 패스.
대신 MyEclipse를 사용하면 프로젝트 프로퍼티의 MyEclipse 항목 아래에 Spring 메뉴가 생긴다. 자세한 사용법은 좀 더 들여다봐야겠다.
대신 MyEclipse를 사용하면 프로젝트 프로퍼티의 MyEclipse 항목 아래에 Spring 메뉴가 생긴다. 자세한 사용법은 좀 더 들여다봐야겠다.
Ruby 1.8.5 (185-21)에서 fxruby를 require 했더니 워닝이 주루륵 뜬다.
증상을 찾아보니 '조금' 알려진 버그이고 트래킹도 되어 있는데 아직 배포판의 최신판의 빌드번호는 21에 머물고 있어서 간단한 패치를 만들었다.
루비버전과 배포일을 확인하여 문제가 있는 버전이면 첫번째 load path에 fox16.rb 파일을 생성하여 verbose를 끄고 fox16.so를 require한 다음 verbose를 원래도로 복구한다.
c:/program files/ruby/lib/ruby/gems/1.8/gems/fxruby-1.6.3-mswin32/ext/fox16/fox16.so: warning: already initialized constant TRUE
...
...
증상을 찾아보니 '조금' 알려진 버그이고 트래킹도 되어 있는데 아직 배포판의 최신판의 빌드번호는 21에 머물고 있어서 간단한 패치를 만들었다.
#
# Ruby 1.8.5 UNOFFICIAL patch
# for fxruby require warning
#
# created by gihwan.ryu (at) gmail.com @ 2006-11-22
#
patch = <<-EOH
if $VERBOSE
$VERBOSE = nil
require "fox16.so"
$VERBOSE = true
else
$VERBOSE = nil
require "fox16.so"
$VERBOSE = false
end
EOH
version = '1.8.5'
date = '2006-08-25'
if RUBY_VERSION == version and RUBY_RELEASE_DATE == date
File.open($:[0] + '/fox16.rb', 'w') { |f|
f.write patch
}
else
File.unlink($:[0] + '/fox16.rb')
end
# Ruby 1.8.5 UNOFFICIAL patch
# for fxruby require warning
#
# created by gihwan.ryu (at) gmail.com @ 2006-11-22
#
patch = <<-EOH
if $VERBOSE
$VERBOSE = nil
require "fox16.so"
$VERBOSE = true
else
$VERBOSE = nil
require "fox16.so"
$VERBOSE = false
end
EOH
version = '1.8.5'
date = '2006-08-25'
if RUBY_VERSION == version and RUBY_RELEASE_DATE == date
File.open($:[0] + '/fox16.rb', 'w') { |f|
f.write patch
}
else
File.unlink($:[0] + '/fox16.rb')
end
루비버전과 배포일을 확인하여 문제가 있는 버전이면 첫번째 load path에 fox16.rb 파일을 생성하여 verbose를 끄고 fox16.so를 require한 다음 verbose를 원래도로 복구한다.