반응형
출처 : http://bit.ly/b6rGm6



애플(Apple)이 내놓은 최초의 컴퓨터 마우스, PDA 열풍의 주역이 된 미국 팜(Palm)사의 '팜V', 폴라로이드의 즉석카메라….
기술 혁명을 이끈 이들 혁신 제품들엔 또 하나의 공통점이 있다.
바로 미국의 디자인 기업 아이디오(IDEO)가 낳은 작품들이라는 점이다.
http://www.ideo.com/

아이디오는 약관 스물일곱살의 청년이 1978년 창업했다. 카네기멜런대학에서 전자공학 학사를 따고 보잉사에서 근무하던 데이비드 켈리(Kelley)가 주인공이다. 그는 "개인의 창의성을 무시한 채 하루 10시간씩 일하는 조직에서 평생 일할 수 없다"면서 회사를 박차고 나왔다.

스탠포드 대학의 디자인 과정을 이수한 뒤 그는 실리콘밸리의 심장부인 팔로알토의 의류 상가 2층에 두 칸짜리 사무실을 얻어 창업했다. 뒤에 세계 최초로 노트북 컴퓨터를 디자인한 아이디 투(ID Two)를 비롯해 세 개의 디자인 회사와 합병하면서 지금의 아이디오가 됐다. 아이디오란 이름은 'ideology'의 앞 글자(ideo)에서 따왔다.

창립 이후 총 350개의 디자인 상을 수상했고, 1000개 이상의 특허를 갖고 있다. 2008년 3월 미국 경영 잡지 '패스트 컴퍼니(Fast Company)'는 이 회사를 구글과 애플, 페이스북, GE에 이어 세계에서 '가장 혁신적인(innovative) 기업' 랭킹 5위로 꼽았다.

창업자 데이비드 켈리는 현재 스탠퍼드대 교수이자 아이디오의 이사회 의장으로 있다. 현 CEO인 팀 브라운은 런던 왕립예술학교(Royal College of Art)에서 석사 학위를 받았고, 아이디오의 샌프란시스코 지사와 유럽 지사에서 일했다. 전 CEO인 톰 켈리는 창업자 데이비드 켈리의 동생이며, 현재 아이디오 이사로 있다. 톰 켈리는 〈유쾌한 이노베이션〉, 〈이노베이터의 10가지 얼굴〉 등 디자인 혁신에 대한 여러 책을 썼다.

출처 : http://bit.ly/b6rGm6

아디이오에서 배울 점 - 브레인스토밍의 규칙

①판단을 늦춰라(Defer judgement): 그 어떤 아이디어도 무시 마라.

②남의 아이디어를 발전시켜라(Build on the ideas of others): '그러나'라고 하지 말고 '그리고'라고 말하라.

③ 거친 아이디어라도 장려하라(Encourage wild ideas): 기존의 틀을 벗어난 아이디어에 해답의 열쇠가 있을 가능성이 높다.

④많을수록 좋다(Go for quantity): 가능한 한 많은 아이디어가 나오도록 하라.

⑤쓰고 그려라(Be visual): 벽에 쓰거나 그려가면서 회의하라.

⑥주제에 집중하라(Be focused on the topic): 토론의 주제를 벗어나지 마라.

⑦한번에 한 가지 이야기만(One conversation at a time): 중간에 끼어들거나 남의 말을 무시하지말라.


창의적인 기업은 소비자에 대해 훨씬 더 많이 알고 있어야 한다.
소비자들의 니즈를 알고, 그들과 가까우며, 시간을 함께 보낸다. 현장에 나가서 질문을 던지는 게 문화의 일부가 되어 있다.
또한 이런 기업은 문제를 프로젝트로 전환하는 데 매우 능숙하다. 여러 분야에서 팀원을 모아서 효과적으로 프로젝트를 수행한다.
그리고 프로토타입을 만드는 게 문화가 되어 있다.

디자이너가 일하는 방식?
"간단하다. 통찰력과 아이디어를 머릿속에서만 구해서는 안 되고, 실제로 밖으로 나가 세상에서 구한다. 사람을 이해해야 한다. 그러기 위해선 관찰해야 한다. 사람들이 말하는 것만으로는 잘 이해할 수 없다. 그들의 세계를 관찰하고 경험해야 한다. 이것이 위대한 디자인의 출발점이다.

다음 단계는 이 관찰을 토대로 어떤 전략적인 기회가 있을 수 있는지 도출하는 것이다. 가능성을 비주얼화하는 능력이다. 아이디에이션(ideation) 단계로, 가능한 한 많은 아이디어를 신속하게 탐색한다. 이 단계에선 팀이 필요하다. 서로 다른 배경을 지닌 팀원들이 한데 모여야 한다. 사회과학·디자인·경영·기술 등 서로 다른 분야가 섞여야 한다."

"중요한 것은 스피드이다. 그래서 프로토타입이 중요하다. 단지 머릿속으로 생각하거나 스케치하는 데 머물지 않고 실제로 만들어 보는 게 결과적으로 훨씬 빠른 길이다. 아무리 조악한 것이라도 좋다. 프로토타입은 물리적 제품뿐만 아니라 서비스, 소프트웨어, 사용자 체험 등에 모두 적용된다. 프로토타입은 팀 내부에서 검토해 볼 수도 있고, 경영진과 함께해 볼 수도 있으며, 시장에 나가서 테스트해 볼 수도 있다. '손으로' 생각해 보는 게 중요하다. 디자인을 많이 다뤄보지 않은 회사의 경영진은 이를 잘 이해하지 못해서 최종 단계에서 프로토타입을 가져오길 원한다. 온갖 과정을 다 거쳐서 마지막으로 거의 완성된 제품을 가져오라는 것이다. 그러나 이렇게 할 경우 피드백을 줘도 고치기엔 너무 늦어 버리고 만다. 경영진은 초기 단계에 프로토타입을 봐야 한다. 경영진의 지혜와 지원이 초기 단계에 투입되어야 한다."

SW개발의 관점에서 보면 RAD(Rapid Application Development) 를 디자인으로 이야기하는 듯하다.
문제를 해결하기 위해서 문제를 세분화하고, 이미 있는 솔루션 가운데 해당 기업에 효과적인 것을 제시하는 분석적인 해결방법에 익숙한 우리에게 사고를 확장하기 위한 방안을 제시해주고 있으니 생각해볼 문제이다.

―당신이 리더십에 대해 배운 것 중 가장 중요한 것을 꼽는다면.

"우리가 지금 나누고 있는 이야기들은 사실 내가 처음으로 CEO가 됐을 때 매우 불안하게 생각했던 것들이다.
나는 경영학을 전공하지도 않았고, 스프레드시트나 회계 같은 것에 대해서도 잘 모른다.
하지만 나는 경영도 디자인을 다루는 것과 마찬가지로 할 수 있다는 것을 깨달았다.
비즈니스 문제를 디자인 문제처럼 다루자 매우 편안해졌다. 디자이너로서 발전시켰던 기술을 비즈니스를 운영하는 데 사용할 수 있었다.
내게 매우 중요한 교훈이었다."

그는 혁신을 위해서는 기업이 늘 프로젝트 기반으로 일하는 방법을 배워야 한다고 강조한다. "기업들이 갖는 공통적인 착각 중 하나는 마치 기계처럼 이 물건이 들어오고 저 물건이 나가고, 이것을 구매하고 저것을 판매하는 과정(프로세스)이 영원히 반복될 것이라고 생각하는 것이죠. 하지만 혁신은 이런 식으로는 생겨나지 않습니다."

그가 생각하는 혁신은 시작과 끝이 있는 단속적인 개념이다. 일정한 목적을 가지고 시작돼 그 목적이 완수되면 끝을 맺는 프로젝트와 같다. 그는 "프로세스는 연속적이지만, 프로젝트는 단속적이며, 프로세스는 효율적이어야 하지만, 프로젝트는 창의적이어야 한다"고 말했다.

그러기 위해서는 회사의 경영 방식이 달라져야 한다. 브라운 사장은 "프로세스와 프로젝트는 멘털리티(mentality)가 완전히 다르고, 관리도 달라야 하며, 예산도 다르게 짜야 한다"고 했다. 매 시즌 새로운 디자인을 내놓아야 하는 패션회사 같은 기업은 프로젝트 방식으로 일하는 데 익숙하다. 반면 금융회사나 R&D에 별 관심이 없는 제조업체는 프로세스 중심이다.

―일상적인 프로세스와 혁신을 위한 프로젝트 사이에 적절한 균형 비율이 있는가.

"업종에 따라 다르다. R&D 기업이라면 90%를 프로젝트에 쓰고 10%를 일상적인 프로세스에 배정하지만, 일반 제조업체라면 60~70%를 프로세스에 쓸 것이고, 회계 파트라면 10% 정도만 프로젝트에 배정할 것이다. 하지만 어떤 경우에도 최소한 10%는 혁신을 위한 프로젝트에 써야 한다. 프로세스를 더 효율적으로 만들기 위해서라도 이를 위한 이노베이션적 프로젝트는 필요하다.".

프로세스와 프로젝트에 대한 이해.
그리고 숙련된 SW개발능력을 경영에 접목할때의 기회

반응형

'개발도 하냐?' 카테고리의 다른 글

데이터에서 배우자  (0) 2010.07.14
RAD(Rapid Application Development)  (0) 2010.07.08
PHP 코딩 규약 - PEAR  (0) 2010.06.25
mod_security AND fckeditor  (0) 2010.06.21
Prototype URL encode, decode  (0) 2010.06.19
반응형
파이어폭스 확장기능 Wired-Marker
http://rockyourfirefox.com/2010/06/wired-marker/

이 확장기능은 브라우저에서 읽은 콘텐츠에 내가 원하는 색깔을 표시해두고,
다음에 방문하면 내가 지정한 표기가 그대로 남는 방식이다.
(중요한 내용을 읽을때 밑줄 쫘악 긋는 기능을 떠올리면 된다)

어디에 쓰일까?
글을 읽었는데 중요한 부분을 표시해두고 싶을때 (pdf 를 읽은 경우도 가능)

사용법
http://www.wired-marker.org/en/update.html



설치 후 브라우저 메뉴의 Wired-Marker 를 누르면 사이트바로 실행되고.

웹페이지에서 색상을 입히고 싶은 부분을 선택한 후 사이드바로 드래그하면 지정한 색상이 칠해진다.

드래그 할때마다 자꾸 묻는 설정이 귀찮다면 아래의 내용처럼 옵션을 변경하자
변경 후에는 더이상 대화창을 띄우지 않는다.



설정된 하일라이트를 제거할때는

사이드바의 마크를 선택해서 list view 를 선택하면
미리 설정된 리스트가 나타나고 선택해서 제거하면 된다.


반응형

'오픈소스SW' 카테고리의 다른 글

MySQL Transaction  (0) 2010.07.14
공개SW - 오픈소스 도입시 고려사항  (0) 2010.07.13
yui-compressor  (0) 2010.06.29
php 어플리케이션 로그 - log4php  (0) 2010.06.29
phpDocument 를 이용한 문서생성  (0) 2010.06.25
반응형
브라우저에 캐쉬되는 파일의 압축을 통해서 성능을 향상시키는 방법.

개발중에는 필요없지만, 배포를 위해서라면 성능을 향상시킬 필요가 있을경우
야후에서 BSD라이센스로 제공하는 compress 를 사용할 수 있다.

홈페이지 링크 : http://developer.yahoo.com/yui/compressor/

다운로드 : http://yuilibrary.com/downloads/#yuicompressor


사용을 위해서 사용자 환경에 java가 설치되어있어야 한다.
java 설치가 되어있는 환경이라면 아래와 같이 사용가능하다.

java -jar yuicompressor-x.y.z.jar myfile.js -o myfile-min.js

Global Options
-h, --help Displays this information
--type <js|css> Specifies the type of the input file
--charset <charset> Read the input file using <charset>
--line-break <column> Insert a line break after the specified column number
-v, --verbose Display informational messages and warnings
-o <file> Place the output into <file>. Defaults to stdout.

JavaScript Options
--nomunge Minify only, do not obfuscate
--preserve-semi Preserve all semicolons
--disable-optimizations Disable all micro optimizations


css파일과 js파일이 많은 경우에 한번씩 실행시키기 위해서..
editplus에 약간의 수정을 가했다.

다운받은 yuicompressor-2.4.2.jar 파일을 임의의 곳에 옮긴 후
(나의 경우는 아래보는것처럼 C:\xampp\yuicompressor-2.4.2.jar에 있다)
editplus 메뉴 중 도구 > 사용자도구 구성을 추가해서 아래와 같이 설정해준다.

메뉴제목
YUI COMPRESSOR

명령
C:\Program Files\Java\jre6\bin\java.exe

인수
-jar C:\xampp\yuicompressor-2.4.2.jar --charset utf-8 --line-break 100 -v --preserve-semi $(FilePath) -o $(FileDir)/$(FileNameNoExt)-min.$(FileExt)

출력내용캡쳐에 체크.

인수의 내용은 파일을 연 디렉토리에 파일명-min 이라는 이름으로 압축된 파일을 생성하라는 뜻이다.
반응형
반응형
php 어플리케이션의 로깅을 위해서 사용 가능한 공개sW


http://logging.apache.org/log4php/

이름에서 느껴지는 것처럼 lo4j와 유사한 사용법이므로 직관적인 사용이 가능하다.

기본출력에 보이도록 설정하는 경우 - log4php.properties
#### 기본출력 stdout
log4php.appender.default = LoggerAppenderEcho
log4php.appender.default.layout = LoggerLayoutSimple

#DEBUG < INFO < WARN < ERROR < FATAL.
log4php.rootLogger = WARN, default

log4php.logger.mylogger = INFO, default
log4php.additivity.mylogger = "false"

파일에 남기도록 설정하는 경우 - log4php.properties
#### 파일에 남기는 경우

log4php.rootLogger=debug, stdout, R

log4php.appender.stdout=LoggerAppenderConsole
log4php.appender.stdout.layout=LoggerLayoutPattern

# Pattern to output the caller's file name and line number.
log4php.appender.stdout.layout.ConversionPattern=%5p %t %F:%L - %m%n

log4php.appender.R=LoggerAppenderRollingFile
log4php.appender.R.File=C:/xampp/htdocs/log4php/viralphp.log

log4php.appender.R.MaxFileSize=100KB
# Keep one backup file
log4php.appender.R.MaxBackupIndex=1

log4php.appender.R.layout=LoggerLayoutPattern
log4php.appender.R.layout.ConversionPattern=%p %d{Y-m-d H:i:s.u} %t [%c] [%F:%L] - %m%n



php 에러로 나타나도록 설정하는 경우 - log4php.properties
### Log events using the php function: trigger_error
log4php.appender.default = LoggerAppenderPhp
log4php.appender.default.layout = LoggerLayoutPattern
log4php.appender.default.layout.conversionPattern = "%d{Y-m-d H:i:s.u} %-5p [%t] %c: %m%n"
log4php.rootLogger = DEBUG, default


syslog를 사용하도록 설정하는 경우 - log4php.properties
### Syslog 사용
log4php.appender.default = LoggerAppenderSyslog
log4php.appender.default.layout = LoggerLayoutSimple
log4php.appender.default.ident = log4php-test
log4php.appender.default.facility = LOG_LOCAL0
log4php.rootLogger = DEBUG, default

그외 db에 저장하는 pdo 사용법, 네트워크로 전송하는 소켓사용법등이 있으니
상세한 내용은 매뉴얼을 참고하자.


사용법

/**
 * log4php setting
 *
 * 웹서버 루트의 log4php/viralphp.log 파일에 로그 남기기
 *
 * @package    ViralMarketing
 * @author     Kim Hyeong Chae <hckim@abydos.co.kr>
 * @filesource
 * @todo       pdo를 이용한 변경 테스트
 *
 */

require_once $_SERVER["DOCUMENT_ROOT"]."/log4php/src/main/php/Logger.php";
Logger::configure($_SERVER["DOCUMENT_ROOT"] . '/log4php/log4php.properties');
$logger = Logger::getLogger("main");

/**
 * 접속자 아이피 로그파일에 남기기
 */
$logger->debug("접속자 아이피: " . $_SERVER["REMOTE_ADDR"]);


로그파일 내용

DEBUG 2010-06-29 13:39:18.216 4064 [main] [C:\xampp\htdocs\index.html:28] - 접속자 아이피: 127.0.0.1



반응형

'오픈소스SW' 카테고리의 다른 글

firefox 확장기능 Wired-Marker  (0) 2010.06.30
yui-compressor  (0) 2010.06.29
phpDocument 를 이용한 문서생성  (0) 2010.06.25
php 속도 증가를 위한 eAccelerator 설치  (0) 2010.06.24
오픈소스는 무료인가  (0) 2010.06.24
반응형

문서생성을 위한 문법
http://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html#basics.starting

설치
pear install PhpDocumentor


사용

Windows
-------
You need the cli version of PHP (php-cli.exe or cli/php.exe in 4.3.0+).
Either run phpDocumentor from the directory that PHP resides in, or put
php.exe in your DOS PATH enviroment variable.  The simplest usage of phpDocumentor is:

C:\>php.exe "C:\Path\To\phpdoc" -t targetdir -o HTML:default:default -d parsedir


Unix
----
Make sure that the cgi/cli version of PHP is in your path.  The simplest usage
of phpDocumentor is:

phpdoc -t targetdir -o HTML:default:default -d parsedir


웹UI제공

phpDocumentor Tags
 * @abstract
 * @access       public or private
 * @author       author name <author@email>
 * @copyright    name date
 * @deprecated   description
 * @deprec       alias for deprecated
 * @example      /path/to/example
 * @exception    Javadoc-compatible, use as needed
 * @global       type $globalvarname or
 * @global       type description of global variable usage in a function
 * @ignore
 * @internal     private information for advanced developers only
 * @param        type [$varname] description
 * @return       type description
 * @link         URL
 * @name         procpagealias or
 * @name         $globalvaralias
 * @magic        phpdoc.de compatibility
 * @package      package name
 * @see          name of another element that can be documented,
 *                produces a link to it in the documentation
 * @since        a version or a date
 * @static
 * @staticvar    type description of static variable usage in a function
 * @subpackage    sub package name, groupings inside of a project
 * @throws       Javadoc-compatible, use as needed
 * @todo         phpdoc.de compatibility
 * @var        type    a data type for a class variable
 * @version    version


반응형
반응형

들여쓰기와 줄 길이
공백 4개의 들여쓰기를 사용하되 탭은 사용하지 않습니다.
탭 대신 공백을 사용해야 글씨체에 상관없이 일정하게 보입니다.
(개인이 같은 에디터 툴, 폰트를 사용한다면 탭을 사용해도 상관 없습니다만 소스 코드 공유, 호환을 위해 공백을 사용하는 것을 권장합니다.)


제 어 구조

제어 구조에는 if, for, while, switch 등이 있습니다. 아래는 if 예제입니다.
<?php
if ((condition1) || (condition2)) {
    action1;
} elseif ((condition3) && (condition4)) {
    action2;
} else {
    defaultaction;
}
?>

제어 구조에서는 함수 호출과 구별하기 위해서 키워드와 ( 사이에 공백을 1개 둡니다.
블록을 감싸는 { 는 끝에 입력합니다. 또한 아래와 같이 블록 내용이 한줄이라도 { 로 감싸는 것이 좋습니다.
if(condition)
    action1;
이 아닌
if(condition) {
    action1;
}
으로 입력합니다.


switch 문장의 경우는 다음과 같이 합니다.
<?php
switch (condition) {
case 1:
    action1;
    break;

case 2:
    action2;
    break;

default:
    defaultaction;
    break;
}
?>

함수 호출
함수명과 (및 최초의 파라미터 각각의 사이에는 공백을 두지 않고, ,(쉼표)와 파라미터 사이에는 공백을 두며, 마지막 파라미터와 ); 사이에는 공백을 두지 않습니다.
<?php
$var = foo($bar, $baz, $quux);
?>

위와 같이 함수의 리턴 값을 변수에 대입할 때에 사용하는 =(등호)의 좌우에는 공백을 1개씩 둡니다. 아래와 같이 관련된 문장은 가독성을 향상시키기 위해 여러 공백을 두면 좋습니다.
<?php
$short             = foo($bar);
$long_variable = foo($baz);
?>


함 수 정의
함수 정의는 아래와 같이 "one true brace" 로 불리는 표기에 따릅니다.
<?php
function fooFunction($arg1, $arg2 = '')
{
    if (condition) {
        statement;
    }
    return $val;
}
?>

기 본값을 가지는 인수는 목록의 마지막에 둡니다. 특별한 경우를 제외하고는 함수가 리턴값을 돌려주도록 합니다. 아래 예제를 봅시다.
<?php
function connect(&$dsn, $persistent = false)
{
    if (is_array($dsn)) {
        $dsninfo = &$dsn;
    } else {
        $dsninfo = DB::parseDSN($dsn);
    }
    if (!$dsninfo || !$dsninfo['phptype']) {
        return $this->raiseError();
    }

    return true;
}
?>


주석
주석 기호는 C언어 형식의 /**/ 와 표준 C++ 주석인 //를 사용합니다.
Perl 형식의 #는 사용하지 않습니다.
<?php
/* comment */

/**
* comment
*
* comment
*
* comment
* comment
*/


// comment
?>


코드 연결
어디든지 클래스 파일을 무제한으로 연결을 하려면 require_once를 사용합니다.
팩토리 메소드등의 클래스 파일을 제한적으로 연결하려면 include_once를 사용합니다.
어디든 클래스 파일을 오직 한번만 연결하게 될 것입니다. 같은 파일을 공유하므로 중복될까봐 걱정하지 않아도 됩니다. require_once로 연결된 파일은 include_once에 의해 다시 연결되지 않을 것입니다.


PHP 코드 태그
PHP 코드 범위는 항상 <?php ?>을 사용합니다. <? ?>같 은 짧은 태그는 안됩니다.
그 래야 다른 운영체제와 환경에서도 PHP 코드를 옮겨 사용할 수 있습니다.


헤더 주석 블록
주 석의 자세한 설명은 생략


명명
클래스에는 내용을 이해할 수 있는 이름을 지정해야 합니다. 단축어의 사용은 가능한 한 피합니다. 클래스명은 항상 대문자로 시작해야 합니다. 상위 클래스의 확장 클래스는 _(언더 스코어)로 연결 합니다. 아래는 클래스 명의 예제입니다.
Log
Net_Finger
HTML_Upload_Error


함수와 메소드
함 수와 메소드는 "studly caps" 형식을 사용해 이름을 붙여야 합니다. 함수는 패키지 이름의 충돌을 피하기 위해서 접두사로 패키지명을 추가해야 합니다. 이름의 첫글자는 소문자로, 새로운 단어를 시작할 때의 각 첫글자는 대문자로 합니다. 아래 예제가 있습니다.
connect()
getData()
buildSomeWidget()
XML_RPC_serializeData()

내부에서 사용되는 클래스 멤버는 _(언 더 스코어) 1개를 앞에 붙입니다. 아래 예제가 있습니다.
_sort()
_initTree()
$this->_status


상수
상 수는 항상 모두 대문자로 단어의 끝에는 _(언더 스코어)를 사용해야 합니다. 예를 들면 DB:: 패키지로 사용하는 상수는 모두 DB_ 로 시작합니다.
주의: true, falsenull 은 예외로, 항상 소문자여야 합니다.
상수 정의 예제
define('ROOT_DIR', './');


전역 변수

패 키지에서 전역 변수를 정의할 필요가 있는 경우, 그 이름은 _(언 더 스코어)를 앞뒤에 붙인 패키지명으로 시작해야 합니다. 예를 들면, PEAR 패키지는 $_PEAR_destructor_object_list 이라는 이름 의 전역 변수를 사용합니다.
정의되어 있는 전역 변수 예제
$_COOKIE
$_SERVER
$_REQUEST

파일 형식
아스키 텍스트로 저장 합니다.
ISO-8859-1 문자 인코딩을 사용합니다.
PHP 태그를 닫는 ?> 아래에 1개의 줄이 있어야 합니다.


에러 처리
PHP를 실행하면 예기치 않은 에러가 발생할 수 있습니다. 어떤 에러가 왜 발생했는지 알기 위해 에러 처리 코드를 삽입합니다. 아래는 오류발생시 메시지를 보여주는 예제입니다.
<?php
function connectDB($dsn) {
    $this->db =& DB::connect($dsn);
    if (DB::isError($this->db)) {
        throw new Example_Datasource_Exception(
                "$dsn에 연결할 수 없습니다:" . $this->db->getMessage()
        );
    }
}
?>

원문: http://pear.php.net/manual/en/
번 역: © simulz

반응형

'개발도 하냐?' 카테고리의 다른 글

RAD(Rapid Application Development)  (0) 2010.07.08
디자이너에게 배우다.  (1) 2010.07.07
mod_security AND fckeditor  (0) 2010.06.21
Prototype URL encode, decode  (0) 2010.06.19
정규표현식(regular expressions)  (0) 2010.06.16
반응형

eAccelerator is a free open-source PHP accelerator & optimizer.

홈페이지 : http://www.eaccelerator.net/http://www.eaccelerator.net/

다운로드 : http://bart.eaccelerator.net/source/0.9.6.1/


checksum
c95e87229a6e674b4994d4fc13278e516ea314f9 eaccelerator-0.9.6.1.tar.bz2
0ef91fb7579c3bf5c0e94d5ec2521c389de91ba8 eaccelerator-0.9.6.1.zip 


설치

소스 압축풀고 디렉토리로 이동해서

phpize
./configure
make
make install


php.ini 설정 추가(eaccelerator.so 파일의 경로가 맞도록)

extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

캐쉬 디렉토리 생성 및 권한부여

mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator

웹서버 재시작 후 확인

php -v 또는 페이지로 phpinfo 찍어본다.

확인

ab -n1000 http://mydomain.com/


다른 종류의 PHP Accelerator 소개 : http://www.ducea.com/2006/10/30/php-accelerators/

드루팔 환경의 속도비교 : http://2bits.com/articles/benchmarking-apc-vs-eaccelerator-using-drupal.html





반응형
반응형



[출처 http://www.w3c.or.kr/~hollobit/presentation/20100623-smartphone-r2.pdf]

스마트폰 os의 현황을 보면 안드로이드와 아이폰이 쌍벽을 이루고 있는 실정.
그렇다면, 앱스토어의 20만개, 구글마켓의 7만5천개 어플들이 각각 늘어갈 것인가..
아마도 당연히 두 운영체제사이의 추상계층(Abstrac Layer)이 발생하게 될것이고, OS의 종류에 상관없는 개발이 가능해지겠죠.

벌써 준비해서 진행되고 있지 않을까?
구글링을 해보았지만 아직 그런것은 안보이는걸보면 누군가 몰래 준비하고 있나봅니다.

아무튼 해야할 일들이 늘어만 가네요 ㅎㅎㅎ

반응형

'취미 그리고 생각' 카테고리의 다른 글

기술의 고마움 - 다음 로드뷰  (0) 2010.08.24
g를 c로 바꾸면...  (0) 2010.07.14
케이지 세그표  (0) 2010.01.28
읽어볼책 - Free  (0) 2010.01.25
하나노케이지  (0) 2010.01.11
반응형

어제 미팅이 있어서 이야기하던 중 이런 질문이 나왔습니다.

공개SW는 공짜다라는데 어떻게 이야기해야 하느냐?

정답부터 말하자면 오픈소스가 공짜인 기업도 있고, 그렇지 않은 기업도 있습니다.

이 문제는 비용의 관점을 어떻게 보느냐에 따라서 달라지는 것이 아닐까요

만일 오픈소스기반의 개발방법론이 정착된 환경의 기업이라면, 공짜입니다.
이런 경우라면 오픈소스라이선스에 대한 검토가 있을것이고,
참여과 기여를 통한 SW의 질적향상에 대한 경험, 오픈소스의 자유로운 배포정신 등을 이해하고 있을테니까.
좋은 SW를 무료로 사용하면서 비지니스를 창출할 수 있습니다.
자신이 좋은SW들을 패키징해서 제품으로 판매할 수도 있고(redhat, suse 등), IT서비스를 컨설팅할 수도 있으며(openlogic), 다른 IT서비스 카테고리를 선택할 수도 있고(blackduck), 하드웨어와 접목한 융합기기를 만들어 낼 수도 있습니다(embeded).

하지만, 오픈소스에 대한 이해와 학습이 없는 기업이라면 공짜가 아닙니다.
SW구매이후 발생될 여러가지 비용을 포함해야 하는 기업환경에서
소스코드의 자유로운 배포를 기본으로 하며(gpl,lgpl,mpl,bsd등), 적합한 라이센스를 검토해야 하고,
해당 SW에대한 기술지식, SW에 대한 유지보수 능력등이 필요한 오픈소스 SW를 공짜라고 판단하는것은  잘못된 생각입니다..

공개SW를 사용해야 할까요?

기업의  CTO가 오픈소스철학을 이해하고 있다는걸 전제한다면, 오픈소스는 기업의 EA에 많은 이익을 가져다 준다.
수 많은 SW의 리펙토링이 가능하고, 글로벌에 적용되는 SW개발방법론을 기업의 인적자원에게 숙련시킬수도 있으며
다양한 SW를 통해서 창의적인 아이디어를 획득할 기회도 증가합니다.

참여와 공유를 통해서 집단지성이 제공되는 최근의 흐름을 생각해볼때,
세상이 스마트해지면 해 질수록 오픈소스에 대한 이해는 더욱 필요합니다.






반응형
반응형

프로파일링이 왜 필요할까
[원문보기] [한글]

소프트웨어를 설계하고 코딩을 하다보면 프로그램을 최적화할 때가 있다.
대부분의 프로그램은 80:20 법칙을 따른다. 전체 코드의 20%가 전체 시간의 80%를 차지한다.

그래서 프로그래머가 해당 컴퓨터 아키텍쳐의 세세한 부분보다는 논리에 집중하여 프로그래밍 시간을 줄여주는
자바나 C#같은 언어가 인기를 얻었다.
프로그램의 실행시간은 길어지지만, 프로그래머의 시간은 절약된다.

그러나 프로그램을 더 빨리 실행하기위한 최적화가 필요하지 않다는 말은 아니다.
많은 컴파일러는 알아서 최적화를 한다.
예를 들어, GCC 컴파일러는 (대문자 주의) -O 옵션으로 최적화 수준을 지정한다.

프로파일링(profiling)은 프로그램의 성능을 높이기위해 최적화할 코드및 함수의 위치를 발견하도록 도와준다.
프로그램에서 10번만 호출하는 함수보다 1000번 호출하는 함수를 최적화하는게 당연하다고 생각하지 않는가.
프로그램을 프로파일링하면 코드의 어떤 부분을 자주 사용하고 어떤 함수가 CPU 시간을 많이 잡아먹는지 알 수 있다.
이 두 정보는 최적화할 대상을 정하는데 유용하다.
실제 프로그램을 실행하면서 정보를 모으기때문에 감춰진 버그를 찾는데도 유용하다.
실행중에 예기치않게 어떤 함수를 1000번 호출한다면 설계상 문제이거나 버그일 수 있다.
또, 크고 복잡한 프로젝트에서 코드를 살펴볼때도 유용하다.

프로파일링 정보에는 두가지 종류가 있다 :-

    * Flat Profile
      함수별로 사용하는 CPU 시간과 호출 횟수를 보여준다. 수집한 전체 프로파일링 정보의 간단한 요약이다. 성능을 높이기위해 어떤 함수를 다시 작성하거나 수정할지 알려준다.

    * Call Graph
      모든 함수에 대해 자신을 포함하여 다른 함수가 호출한 횟수를 보여준다. 그래서 어떤 함수 호출을 없애거나 다른 효율적인 함수로 대체할지 제안한다. 이 정보는 함수들간의 관계를 드러내고, 감춰진 버그를 알려주기도 한다. 호출그래프를 본 후에 특정 코드 경로를 최적화하고 싶을 것이다.



Xdebug 설치하기
http://www.xdebug.org/docs/install
- xampp 패키지로 개발환경을 구축했다면 xdebug가 포함되어 있으므로 별도로 디버거를 설치할 필요없이 php.ini의 설정만 변경해주면 된다.

Xdebug 프로파일링을 통해 얻어진 파일의포멧은 cachegrind 의 포멧을 따르고 있다.
Xdebug에서 프로파일링된 파일을 생성하도록 설정해 주었다면 아래의 도구들 중 하나를 골라서 분석 가능하다.

Xdebug 프로파일링을 위한 웹기반 분석도구 webgrind
http://code.google.com/p/webgrind/downloads/list

Xdebug 프로파일링을 위한 설치형 분석도구 WinCacheGrind
http://sourceforge.net/projects/wincachegrind/

리눅스용 분석도구
kcachegrind
http://kcachegrind.sourceforge.net/html/Home.html


Xdebug 설정 관련한 참고문서
http://www.ibm.com/developerworks/opensource/library/os-php-xdebug/


php.ini 설정
; xdebug
zend_extension = C:\xampp\php\ext\php_xdebug-2.1.0RC1-5.3-vc6.dll
xdebug.default_enable = On
xdebug.show_exception_trace = On
xdebug.show_local_vars = 1
xdebug.max_nesting_level = 50
xdebug.var_display_max_depth = 6

xdebug.dump_once = On
xdebug.dump_globals = On
xdebug.dump_undefined = On
xdebug.dump.REQUEST = *
xdebug.dump.SERVER = REQUEST_METHOD,REQUEST_URI,HTTP_USER_AGENT,SCRIPT_NAME

xdebug.remote_enable=true
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp

;모든 파일에 대하여 자동으로 프로파일링할때
;xdebug.profiler_enable = 1
; 특정파일만 프로파일링 하고 싶을때 XDEBUG_PROFILE 을 get으로 실행한다.
; ex : http://example.com/sample.php?XDEBUG_PROFILE
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_dir ="C:\xampp\tmp"
;cachegrind 포멧으로 설정
xdebug.profiler_output_name = cachegrind.out.%t.%p


http://localhost/test.php?XDEBUG_PROFILE 처럼 호출하면 프로파일링이 시작되고, 설정한 디렉토리에 파일이 생성된다.

분석결과를 webgrind 로 본 화면


분석결과를 WinCacheGrid로 본 화면


반응형

+ Recent posts