2007년 4월 10일 화요일
짝 프로그래밍의 비밀
실버 플래터 소프트웨어(Silver Platter Software)란 회사에서 재미있는 논문을 발표했다. 「Promiscuous Pairing andBeginner」s Mind」란 글이다. 번역하자면 「빈번한 짝교환과 초심」정도 되겠다.
그 회사에서는 다양한 방식으로 짝 프로그래밍을 실험하면서 팀의 개발속도(한 이터레이션에 얼마만큼의 일을 했는가 하는 생산성 지표)의 변화를 추적했다.
하루 종일 한 번도 짝을 바꾸지 않은 기간과 90분 정도마다 짝을 바꾼 기간을 비교해 보면 후자가 전자에 비해 팀 전체 속도는 두 배 이상 높았다.
또한, 일을 개발자들에게 나누어 줄 때, 세 가지 다른 방법으로 실험해 보았는데(모두 짝 프로그래밍과 병행), 하나는 가장 적합한 사람(most qualified person)에게 일을 주는 것, 또 하나는 능력에 상관없이 일을 주는 것, 마지막은 가장 부적합한 사람(leastqualified person)에게 일을 주는 것이었다.
아니 가장 부적합사람이 가장 효율이 높다면 가장 적합한 사람 아닐까???
www.rubyonrails.org
재미있는 것은 루비 온 레일의 성공으로 인해 최근 들어 각광을 받고 있는 루비가 1993년에 고안되었다는 사실이다. 이는 자바와 PHP가 발표된 1995년보다 2년이나 긴 역사를 가졌다는 얘기이다. 그렇다면 10년이 넘는 세월동안 그렇게 좋은 스크립트언어가 왜 찬밥 신세를 면하지 못하다가 최근에서야 인기를 끌게 된 것일까? 그 문제의 중심은 바로 루비가 스크립트 언어라는 점이다.
스크립트 언어는 사용하기 쉽다는 장점이 있기는 하지만, 다른 프로그램의 도움을 받아야만 동작할 수 있는 탓에 간단한 작업을 반복적으로 수행하는 등의 가벼운 프로그래밍에만 사용되었다. 하지만 10년의 세월을 거치면서 비약적인 발전을 거듭한 하드웨어가 루비의 버팀목이 되어준 것이다.
빨라진 프로세서와 값싼 메모리 덕에 이제는 최적화된 프로그램이 아니더라도 충분히 빠르게 실행되기 때문에 굳이 어렵고 복잡한 프로그래밍을 할 필요가 없어진 것이다.
그리하여 사용법이 간단한 루비가 각광을 받고 있는 데다가 개발 생산성을 높이는데 그만이라는 루비 온 레일이라는 프레임워크까지 나왔으니 개발자들에게는 노칠 수 없는 매력이었던 것이다.
루비는 그저 그런 스크립트 언어가 아니라 10년의 세월 동안 상업적 이해관계에 휘둘리지 않은 채로 개발자 커뮤니티에서 축적된 성과를 함축하고 있는 언어이다. 그 결과 사용하기 쉬우면서도 자바와 C, 닷넷 언어보다 훨씬 뛰어난 생산성을 자랑하는 언어이니 관심 있는 독자들은 한번 사용해 보자.
루비 온 레일에 대한 자세한 정보는 루비 온 레일 홈페이지(www.rubyonrails.org)에서 확인할 수 있다.
2007년 4월 7일 토요일
우리나라에도 맘에 드는 디자인 가구 회사가 있네..
얼리어댑터의 일상적인 멜을 받고 당연 북유럽의 회사라 생각했는데.
원산지가 한국 이었다.
맘에 든다.
http://www.casa.co.kr/shopping/main.jsp 덩달아 이런데도 알게 됐는데..
흠...나름 주제를 잘 잡은듯.
http://www.koondesign.com/
2007년 4월 6일 금요일
perl에서 excel처리 만들어 내는 파일의 version이 좀 낮은게 흠이랄까?
perl에서 excel처리
Spreadsheet::ParseExcel 의 사용
#---------------------------------------------------------
use strict;
use Spreadsheet::ParseExcel;
my $excel = Spreadsheet::ParseExcel::Workbook->Parse($file);
foreach my $sheet (@{$excel->{Worksheet}}) {
printf("Sheet: %s\n", $sheet->{Name});
$sheet->{MaxRow} ||= $sheet->{MinRow};
foreach my $row ($sheet->{MinRow} .. $sheet->{MaxRow}) {
$sheet->{MaxCol} ||= $sheet->{MinCol};
foreach my $col ($sheet->{MinCol} .. $sheet->{MaxCol}) {
my $cell = $sheet->{Cells}[$row][$col];
if ($cell) {
printf("( %s , %s ) => %s\n", $row, $col, $cell->{Val});
}
}
}
}
#---------------------------------------------------------
GE 인사관리의 7대 비법... 차별화, 높은 업무기준, 단순화
잭 웰치는 업무 능력이 떨어지는 하위 10%를 잘라내야 한다는 유명한 말을 남겼다. 후계자인 이멜트는 웰치처럼 숫자로 퇴출기준을 정하지는 않고 있지만 차별화가 회사에 활력을 높여주는 요인은 것만은 분명하다.
동료들과 함께 평가를 받는다는 불안감이 능력을 발휘하게 만든다. GE는 늘 조직에 그런 불안감을 조성해왔다. 조직에 가장 적게 기여하는 사람이 누구이고,조직은 그 사람을 어떻게든 해야 한다는 생각을 가져야 한다.
===================================
흠 그렇구나.
잭 웰치와 제프리 이멜트의 GE. 이 유명한 CEO들과 함께하며 13년 동안 GE의 인사관리를 총지휘했던 윌리엄 코너티 인사담당 수석 부사장.
그가 담당 업무를 인계하고 은퇴를 준비하면서 'GE의 7대 인사관리 비법'을 비즈니스위크에 공개했습니다. 그가 밝힌 GE 인사관리의 7가지 비법은 다음과 같습니다.
① 직원을 능력별로 과감하게 차별화하라
② 끊임없이 업무 기준을 높여라
③ 인사담당자는 CEO의 친구가 되지말라
④ 후계자 육성계획을 세워라
⑤ 흡수한 외부 조직에 대해 포용력을 가져라
⑥ 맡은 업무에만 집중할 수 있도록 배려하라
⑦ 업무 지시를 단순화하라
코너티가 가장 강조한 것은 '능력에 따른 과감한 차별화'였습니다. 직원들을 끊임없이 평가하고 등급을 매겨 그에 따라 보상하고 처벌해야 기업이 활력을 유지할 수 있고 성공할 수 있다는 겁니다. 잭 웰치는 업무 능력을 기준으로 '하위 10%'는 잘라내야 한다는 정책을 사용했습니다.
끊임없이 업무 기준을 높여야한다는 것도 중요한 정책이라고 생각합니다. CEO는 자신은 물론 다른 직원들이 업무능력을 높일 수 있도록 만들어야 합니다. GE에서 실패한 간부는 업무능력을 높이기 위한 학습을 멈춘 사람들이라고 합니다.
단순하고 분명한 의사소통도 중요합니다. 많은 구성원들을 혼란스런 메시시로 이끌어갈 수는 없습니다. 리더는 일관성 있고 단순한 몇개의 메시지를 통해 조직을 이끌어야 혼선을 막을 수 있습니다.
능력에 따른 차별화, 높은 업무기준, 단순하고 분명한 커뮤니케이션... GE에서 배울만한 리더십, 조직운영 방법입니다.
2007년 4월 5일 목요일
ie->request를 사용한 dynamic parameter sample
#=============================================
# 객체 생성
my $cj = HTTP::Cookies->new(file => "cookie_cymarket.txt", autosave => 1);
my $ie = WWW::Mechanize->new( cookie_jar => $cj, agent=>'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET C
LR 1.1.4322)' );
#=============================================
# request
my $res = $ie->request (
POST 'https://cyxso.cyworld.com/login.jsp',
Content => [
email => $id,
passwd => $pass,
safechk => "on",
loginstr => "direct",
],
);
#=============================================
# form을 가져오기
my @webforms = HTML::Form->parse( $res->content, $res->base );
my $form = $webforms[0];
my @inputs = $form->inputs;
# request를 사용한 dynamic parameter sample
use HTTP::Request::Common; # 중요
foreach my $input ( @inputs )
if ( $input->name eq "excel_name" )
{
$params{ $input->name } = $m_transFile2;
}
else
{
$params{ $input->name } = $input->value;
}
}
my $res = $ie->request (
POST 'http://seller.gsestore.co.kr/selling.registerMultiDlvInfoTemp.smp',
Content_Type => 'form-data',
Content => \%params,
);