2022년 4월 29일 금요일

스프린트 정리

스프린트

스프린트는 프로토타입을 제작하고 고객과 함께 아이디어를 테스트하여 중요한 문제들에 대한 답을 찾는 독특한 5일 짜리 과정이다. 스트린트는 업무 전략, 혁신 행동과학, 디자인 그 외 여러 분야의 최고 히트작을 어떤 팀에서라도 사용할 수 있게 단계별 절차를 모아놓은 것이다.


스프린트 과정

  • 과제 선택
  • 월요일: 지도 그리기 & 타깃 선택
  • 화요일: 서로 경합을 벌리는 솔루션들 스캐치
  • 수요일: 가장 좋은 솔루션 결정
  • 목요일: 진짜같은 프로토타입 제작
  • 금요일: 표적 고객과 테스트
  • 학습

출처: https://www.thesprintbook.com/the-design-sprint

스프린트 준비하기

  • 적절한 과제 선택
  • 적임자들로 팀 구성
  • 스프린트들 진행할 시간 및 장소 확보

  • 과제
    • 힘든 과제일수록 스프린트의 효과가 높아진다.
      • 중대한 이해관계가 걸려 있을 때: 전력 질주 전 방향 조정
      • 시간이 충분하지 않을 때: 전력 질주
      • 곤경에 빠졌을 때: 새로운 문제 해결 방식 제공
    • 그 기업이 안고 있는 가장 중요한 문제를 스프린트에서 다루도록 한다.
    • 먼저 외양을 해결하라: 제품이나 서비스가 고객을 만나는 접점
    • 결정권자 한두 명을 꼭 참여시켜라(안되면 대리인이라도..)
      • 주요 단계는 꼭 참여 시킨다.
      • 월요일: 스프린트에서 다룰 문제에 대한 견해
      • 수요일: 테스트할 적절한 아이디어 선택
      • 금요일: 프로토타입에 대한 고객의 반응 관찰
    • 각 분야 전문가 또는 담당자
    • 팀구성
      • 7인 이하로 구성
      • 결정권자
      • 재무 전문가
      • 마케팅 전문가
      • 고객 전문가
      • 기술/실행계획 전문가
      • 대자인 전문가
    • 말썽쟁이 (기발한 아이디어, 반대 의견 등)
    • 전문가 추가
    • 진행자 선택: 결정권자는 제외..
  • 시간과 장소
    • 5일이라는 시간 확보
    • 기기 금지 (회의실 밖에서만 허용)
    • 화이트보드 두개
    • 적절한 용품 (포스트잇, 보드 마커, 펜, 타이머, 프린트 용지, 사무용품, 간식 등)

월요일

: 체계적인 논의를 통해 스프린트의 방향을 잡는 날
  • 도착점에서 출발하기
    • 장기적인 목표 설정 (지침, 신호등)
    • 스프린트 핵심 질문 열거하기 (가정과 장애물을 질문으로)
  • 지도
    • 고객 중심적
    • 핵심 행위자를 왼쪽에 열거
    • 단어, 화살표, 상자 등으로 업무가 진행되는 단계/방향 간단히 기술
    • 지도 그리기 (빠르게 작성 후 지속적으로 업데이트)
      • 행위자 열거하기 (왼쪽)
      • 결말 쓰기 (오른쪽)
      • 단어와 화살표 (중간 중간)
      • 단순해야 한다 (5~15 단계가 적절)
      • 도움을 청하라
  • 전문가들에게 의견 구하기
    : 지식은 여러 사람에게 분산되어 있다
    • 모든걸 아는 사람은 없다
      : 정보는 회사 전체에 산발적으로 흩어져 있다. => 이 정보를 모아서 이해해야 한다
      • 전략: 결정권자
      • 고객의 소리: 영업팀, 고객 지원
      • 일이 어떻게 이루어 지는가? : 디자이너, 엔지니어, 마케팅 담당자
      • 이전의 노력: 
    • 전문가에게 의견 구하기, 인터뷰 절차 => 전문가는 내가 알지 못하는 것을 알려주기 위해왔다.
      • 스프린트를 소개한다
      • 화이트보드를 검토한다
      • 전문가에게 말할 기회를 준다
      • 질문한다
      • 화이트보드에 적힌 내용을 수정한다
    • 어떻게 하면 ~할 수 있을까? 메모 쓰기
      : 전문가를 인터뷰 하면서 메모를 작성한다, 벽에 붙인다
    • 어떻게 하면 ~할 수 있을까? 메모 정리
      : 비슷한 주제끼리 모은다 (분류, 제목도 적는다)
    • 어떻게 하면 ~할 수 있을까? 메모 투표하기 (점투표)
      : 많은 표를 받은 메모를 지도에서 알맞은 곳에 붙인다
  • 타깃
    : 당신 회사의 가장 중요한 고객은 누구인가?
    그 고객이 당신 회사와 함께 겪는 경험에서 가장 중요한 순간은 언제인가?
    • 타깃 선택하기
      결정권자는 타깃이 될 하나의 고객과 사건을 선택해야 한다
      • 결정권자에게 결정하도록 요청한다.
      • 여론 조사 (결정권자가 도움을 원할 경우)

  • 진행자 팁
    • 팀원들에게 허락을 구한다
    • 기본 임무: 항상 포착하라
      • 화이트보드에 핵심 아이디어를 기록하라
    • 뻔한 질문을 던져라
      • 뻔한 문제도 짚고 넘어가자. 오해의 위험을 없앤다. 뻔한 질문이 진짜 문제일 수 도..
    • 사람들을 돌보라
      • 휴식 시간을 자주 가진다
      • 점심을 늦게 먹는다
      • 가볍게 자주 먹어라
    • 결정을 내리고 다음으로 넘어가라
      • 비생산적인 논쟁을 피하라

화요일

: 솔루션을 생각하는 날
  • 조합하고 발전시키기
    : 위대한 혁신은 기존 아이디어를 새로운 시각으로 바꿨을 때 이루어진다
    • 번개불 데모 (Lightening Demo)
      : 팀원들이 다른 제품, 다른 분야, 다른 회사에서 자신이 가장 좋아하는 솔루션을 돌아가면서 3분간 소개하는 시간이다. (솔루션을 찾기 위한 재료를 수집하는 것으로 경쟁제품 모방이 아님)
      • 목록 만들기
        • 도움이될 만한 것으로 검토한 후 수집
      • 3분간 데모 시행하기
      • 좋은 아이디어 포착하기
    • 뭉치느냐, 흩어지느냐
      • 타깃이 확실하면 전체가 한부분에 집중
      • 다루어야 할 부분이 여러가지 라면 분담 (가능하면 원하는 방향으로..)
  • 스케치
    : 솔루션을 떠올리는 시간
    • 스케치의 힘
      : 스케치는 추상적인 아이디어들을 구체적인 솔루션으로 바꾸는 가장 빠르고 쉬운 방법이다
    • 함께 혼자 일하기
      : 혼자 일하되 모든 사람이 집중하고 일을 진척시키도록 돕는 단계
    • 4단계 스케치
      • 메모 (20분)
        : 메모를 기억을 되살린다
        • 화이트보드를 보면서 메모한다
        • 전자기기기 참조 가능
        • 예전 아이디어 재검토
      • 아이디어 (작성 20분 + 검토 3분)
        : 생각을 나타내는 것들로 종이를 채워 아이디어를 표현
      • 크레이지 에이트 (8분)
        : 각자 가장 효과적이라고 생각하는 아이디어를 8분만에 8가지로 변형하여 재빨리 스케치
      • 솔루션 스케치 (30분)
        : 가장 좋은 아이디어를 종이에 상세히 옮긴다
        • 따로 설명하지 않아도 이해할 수 있어야 한다
        • 익명으로 해야 한다
        • 그림이 서툴러도 괜찮다
        • 글은 중요하다
        • 귀에 쏙 들어오는 제목을 붙여라

  • 진행자 팁
    • 금요일에 테스트를 진행할 고객을 찾아라 (진행자 이외)
    • 크레이그리스트를 이용해 고객 모집하기 (벼룩신문 등 광고 게재, 사례 포함)
      • 예) 8월 2일, 100달러를 받을 수 있는 고객 조사 인터뷰
    • 설문지 만들기 (의도는 파악 못하게..)
    • 인맥을 통해 고객 모집하기
    • 적임자 5명

수요일

: 목표 성취에 가장 도움이 될만한 솔루션 결정 후 스토리 보드 작성 (프로토타입을 만들기 위한 단계별 설계도)
  • 결정
    : 솔루션을 한꺼번에 평가하고 한꺼번에 비판한 뒤 한꺼번에 결정을 내린다. => 프로토타입으로 만들 솔루션을 결정
    • 끈적끈적 결정
      : 스티커를 사용하면 불필요한 언쟁 없이 의견을 정하고 표현할 수 있다.
      • 미술관: 솔루션 스케치들을 마스킹 테이프로 벽에 붙인다.
      • 히트맵(heat map): 흥미 있는 부분에 스티커를 붙인다. (인당 20~30장)
      • 스피드 비판: 스티커가 많은 부분을 신속하게 논의하고 포스트잇으로 중요한 아이디어를 기록한다. (유망한 아이디어를 기록하는 과정으로 입씨름하지 말자)
      • 여론 조사: 각자 하나의 솔루션을선택하여 스티커를 붙인다. (인당 1표, 1분간 선택 이유 설명)
      • 슈퍼의결권 행사: 결정권자가 최종 결정을 내린다. (결정권자는 3장의 스티커, 선택 받지 못한 스케치는 다음 기회에 검토할 아이디어들이다)
  • 혈투
    • 혈투냐, 올인이냐
      : 선택된 솔루션이 두개 이상일 경우, 혈투를 벌일 것인지 하나의 프로토타입에 결합할 것인지 논의가 필요하다
    • 기록하고 투표하기
      : 혈투에 사용할 아이디어들을 정한다.
  • 스토리보드
    : 스토리보드를 이용해 완성된 프로토타입을 머리속에 그린다. 프로토타입을 실제로 제작하기 전에 문제점과 혼란스러운 점을 찾을 수 있다.
    • 격자판 그리기
    • 시작 화면 선택하기 
      : 테스트하고 싶은 솔루션이 시작되는 시점에서 한두 단계 거슬러 올라간 상황을 시작 화면으로..
    • 스토리보드 채우기
      : 선택한 솔루션의 포스트잇으로 단계별로 작성, 빈공간 발생 시 반드시 채울 필요는 없지만, 빈공간을 채울때는 기존 제품이나 선택받지 못한 스케치 등을 사용한다. (즉석으로 새 솔루션을 떠올리는 것은 피한다)
      • 지금 가지고 있는 것들로 일한다
      • 문구 작업을 다같이 하지 않는다
      • 세부사항을 충분히 포함한다
      • 결정권자가 결정을 내린다.
      • 확실하지 않을 땐 모험을 해본다
      • 스토리는 15분 이하로 만든다

  • 진행자 팁
    • 팀원들의 기운이 바닥나지 않도록 조심!

목요일

: 프로토타입을 구현한다 (진짜처럼 보이게..)
  • 진짜처럼 보이게 만들기
    : 90% 진짜처럼 보이게 빠르게 테스트 준비, 시간을 많이 쓸수록 그 일에 애착이 커져서 테스트 결과가 부정적으로 나왔을 때 쉽게 받아들이지 못한다.
    • 프로토타입 사고방식 (완벽추구 -> 그저 충분한 수준)
      • 어떤 것이든 프로토타입을 만들 수 있다
      • 프로토바입은 한 번 쓰고 버릴 수 있어야 한다
      • 테스트에서 무언가 배울 수 있을 정도로만 구축하라, 더 이상은 금물
      • 프로토타입은 진짜처럼 보여야 한다
        => 테스트에서 고객의 상상력을 동원하게 해서는 안된다. 진짜처럼..
        피드백이 아닌 진짜 반응이 필요하다
    • 골리락스 품질
      : 너무 높지도 낮지도 않은 딱 적절한 수준
  • 프로토타입 (책에서는 키노트를 추천함, 전용 SW는 thesprintbook.com 참조)
    • 적절한 도구 선택하기
      : 키노트, 파워포인트, 문서작성 SW, 대본, 물리적 공간, 3D 프린터 등
    • 나누어서 정복한다
    • 모두 연결하기
    • 시범운영


금요일

: 고객들을 인터뷰하고 고객들이 프로토타입에 어떻게 반응하는지 지켜보면서 학습한다
  • 소규모 데이터
    • 마법의 숫자 5
      : 85%의 문제가 단 다섯 명을 인터뷰한 뒤에 발견된다
  • 인터뷰
    : 두개의 방에서 진행, 스프린트 회의실에서 실시간으로 인터뷰 영상 확인(고객 허락하에 녹화 및 재생), 실제 인터뷰를 진행하는 '면접실'
    • 5막 인터뷰
      • 1막 친근한 환영
      • 2막 고객의 배경에 관한 질문
      • 3막 프로토타입 소개
      • 4막 작업과 자극
      • 5막 간단한 정리
    • 진행자 팀
      • 좋은 초대자 노릇을 해라
      • 주관식 Open ended으로 질문한다
        : 유도신문/질문 X, 객관식 질문 X, n지 선다형 질문 X, 예/아니오 질문 X
        육하원칙으로 질문한다
      • 어정쩡한 Broken 질문을 던진다
      • 호기심 어린 마음가짐
  • 학습
    • 함께 지켜보고 함께 배우기
    • 함께 인터뷰를 기록한다
    • 패턴 찾기
    • 미래 여행
    • 항상 승리자
    • 사람들에게 도움이 되는 일

이륙

: 질문을 생각하고 프로토타입을 만들고 테스트하는 것
  • 천천히 문제를 정하고 초기 목표에 합의하라 (처음에는 천천히..)
  • 각자 혼자서 잠재 솔루션을 스케치하라
  • 투표, 결정권자 우선순위 반영
  • 외관만 마련, 프로토타입 마음 가짐
  • 표적 고객과 프로토타입을 테스트하고 정직한 반응을 얻어라

2021년 1월 12일 화요일

C++에서 Lvalue와 Rvalue

표준 C언어의 관점에서 Lvalue와 Rvalue는 Left Value와 Right Value를 의미한다.

대입 연산자(=)를 기준으로 왼쪽에만 쓸 수 있는 값(variable)을 Lvalue라 하고, 오른쪽에만 쓸 수 있는 값(보통 상수) Rvalue라 한다.


하지만 C++ 표준에서는 Left/Right를 의미하지 않고, Lvalue/Rvalue를 그 자체로 보는 것이 맞다.


C++에서 Lvalue와 Rvalue의 의미는 다음과 같다.

  • Lvalue
    단일 표현식 이후에도 없어지지 않고 지속되는 객체
  • Rvalue
    표현식이 종료된 이후에는 더 이상 존재하지 않는 임시적인 값

  • 예시
    int x = 3;
    const int y = x;
    int z = x + y;
    int *p = &x;
    cout << string("one");
    ++x; // 증가된 x 자신을 리턴
    x++; // 증가된 복사본을 리턴


Lvalue 참조자 &와 Rvalue 참조자 &&
  • Lvalue 참조자 &
    Lvalue만 참조할 수 있음
  • Rvalue 참조자 &
    Rvalue만 참조할 수 있음

  • 예시
    int x = 10;
    int& a = x;
    //int& b = 10; => error: cannot bind non-const lvalue reference of type 'int&' to an rvalue of type 'int'
    int&& c = 5;
    //int&& d = a; => error: cannot bind rvalue reference of type 'int&&' to lvalue of type 'ini'


 

 

 
 
 

C++ Type Casting 연산

C언어의 형변환(Type Casting)의 경우, 타입 체크를하지 않아서 버그를 유발할 수 있어
컴파일 단계에서 Warning이 뜨거나 에러가 발생하는 경우가 많고, 
실제로 원치 않는 데이터 유실이 발생할 수도 있다.

C++에서는 4가지 Type Cast Operation을 제공한다.

  • static_cast
    • 컴파일 단계에서 타입체크를 수행한다.
    • child class의 포인터를 parent class로 캐스팅한다.
    • parent class의 포인터를 child class로 캐스팅한다. (child class만의 variable/method 사용 불가)
    • 기본적 타입들에 대한 변환에 사용
    • runtime check를 하지 않는다.

  • const_cast
    • 컴파일 단계에서 타입체크를 수행한다.
    • 타입에 const, volatile 키워드를 붙이거나 땔때 사용한다.

  • dynamic_cast
    • runtime 시에 동작한다.
    • 객체를 상속 관계 속에서 캐스팅 하는 등 객체의 포인터에만 사용한다.
    • virtual method를 가지는 클래스에서 사용하며, 그렇지 않은 경우는 static_cast를 사용하면 된다.
    • 만약 주어진 포인터가 캐스팅하기에 적절하지 않으면 NULL을 리턴한다.
    • dynamic_cast의 종류
      • upcast
        child class를 parent class로 캐스팅
      • donwcast
        parent class를 child class로 캐스팅
      • crosscast
        다중 상속 시 사용

  • reinterpret_cast
    • 포인터를 어떤 타입으로든 캐스팅할 수 있다.
    • 강력하지만 위험, C언어의 형변환과 가장 유사해 보인다.

C언어의 형변환(Type Cast)

  • 암묵적 형변환
    상황에 따라 자동적으로 이루어지는 형변환을 암묵적 형변환이라 한다.
    ex)
    • int n = 0;
      n = 123.123123;
      // n은 123이 된다.
    • char a = 10;
      short b = 20;
      c = a + b;
      // c는 char+short => 하지만 int로 변환된다.
    • double n = 10 + 20.123;
      // 10.0 + 20.123 = 30.123 으로, 10이 double 타입으로 형변환된다.

  • 명시적 형변환
    명시적 형변환은 변수의 타입을 강제적으로 명시하여 변환하는 방법이다.
    ex)
    • double f=0;
      f = (double)10 / 8;
      // 10.0 / 8 = 1.25

2018년 4월 2일 월요일

C에서 C++ 함수 호출하기..

프로젝트를 진행하다 보면
C, C++ 등으로 작성된 파일이나 라이브러리들이 혼재되어 사용되는 경우가
발생할 수 있다.
물론 사용언어가 통일되면 가장 좋겠지만...

이런 경우 C++ 소스에서
C++ 함수를 C에서 사용할 수 있도록 Wrapping 함수를 작성하면
C에서 C++ 함수를 사용하는 것이 가능하다.

//C++ 소스

int get_number(std::string strNumber)
{
return atoi(strNumber.c_str());
}

extern "C" int get_number_c(char *pszNumber)
{
return get_number(pszNumber);
}


//C 소스
int get_number_c(char *pszNumber);

int main(int argc, char *argv)
{
char szNumber[] = "1000";
printf("%d\n", get_number_c(szNumber);
return 0;
}


C++ 소스는 g++로 컴파일
C 소스는 gcc로 컴파일
Link는.. 반드시 g++로..

2018년 3월 27일 화요일

false-positive & false-negative

- false positive
 거짓 양성, 실제로는 답이 No 인데 Yes 로 응답함


- false negative
 거짓 음성, 실제로는 답이 Yes 인데 No 로 응답함


Business Email Compromise Attack.. (BEC)

Business Email Compromise Attack..

BEC Attack.. 일종의 phishing 공격..
회사의 뉴스, 연구, 직원의 SNS 등을 통해
정보를 수집..

CEO나 회사 메일등으로 가장해서
입/출금, 지불 변경 등을 유도하거나,
주요 기밀을 탈취..

메일 내용을 제차.. 확인하고
인증 강화 및 직원 교육 등을 통해 방지할 수 있음..

Dictionary Harvest Attack (DHA) & Bounce Attack

Dictionary Harvest Attack..

사전 수확 공격??

임의의 글짜, 단어, 사전, 성씨 등을 조합하여
특정 메일 서버에 메일을 보내고,
메일이 성공적으로 전송이 되서
해당 메일 주소가 유효한 것으로 판단하고 수확한다.

Brute Force Attack과 유사한 느낌..

단위 시간에 동일한 sender ip로 부터 유입되는
정상 메일 혹은 메일 주소가 유효하지 않은 메일의 수를 카운트하고
임계치를 넘는 경우 해당 sender ip를 일정시간 동안
block하는 방식으로 방어가 가능할 것으로 보임

참조
https://en.wikipedia.org/wiki/Directory_Harvest_Attack

Bounce Attack..

DDOS Attack과 유사한 공격..
unsolicited email(unwanted email.. spam..)을 Mail서버로 전송
Mail 서버에 과부하가 걸리도록 유도함..

이것 역시 단위 시간 유입되는 메시지를 카운트하고..
임계치를 넘으면.. 일정 시간 Block..

local directory mounting

linux에서 cifs, nfs 등 네트워크 공유 경로 등을 마운트 사용할 때,

경우에 따라
마운트를 해제하지 않고 마운트된 디랙터리 내용이 아닌
실제 로컬 경로의 내용 확인이 필요한 경우가 있다.

로컬 경로를 직접 마운트하면 되는데,
마운트 방법은 아래와 같다.

mount --bind src_path dst_path

2017년 11월 28일 화요일

find_first_of, find_last_of 함수 오용 주의

c++ 에서 find_first_of, find_last_of 를 사용할 때 유의할 점이 있다.
두 함수가 모양만 봤을 때 처음으로, 마지막으로 사용된 위치를 찾는 기능을 하는 것은
쉽게 알 수 있다.

하지만 함수의 파라메터로 받은 search string의 경우
잘못 생각하면 큰 실수를 범할 수 있다.

최근 message header에서 사용되는 encoded-word를 파싱할 때
실수를 했던 부분이다.

std::string strEncodedSubject = "=?EUC-KR?B?x9Gx2yDA3yC1ybHuPw==?=";
// encoded-word는 =?[character set]?[encoding type]?[encoded string]?= 로 구성된다.

// 앞뒤 "=?", "?=" 위치 파악을 위해..
size_t tIdx = strText.find_first_of("=?");
std::cout << tIdx << std::endl;
tIdx = strText.find_last_of("?=");
std::cout << tIdx << std::endl;

=> 결과는 0, 32 이다.

무엇이 문제인가..
아시는 분들은 "그건 당연히 그렇게 사용하는 거지.." 하겠지만
find_first_of, find_last_of는 파라메터로 받는 search string을
string 전체로 search하는 것이 아니라,
해당 string의 구성하는 char 중 어떤 것이라도 먼저 혹은 마지막에 발견된 위치를
찾는 함수이다.
(차라리.. token 함수와 유사함)

그렇다. 내가 원하는 위치를 찾기 위해서는
find, rfind를 사용하는 것이 맞다.

size_t tIdx = strText.find("=?");
std::cout << tIdx << std::endl;
tIdx = strText.rfind("?=");
std::cout << tIdx << std::endl;

=> 결과는 0, 31 이다.

이렇게 간단한 실수지만 잘못하면 정말 찾기힘든
치명적인 버그를 만들게 된다.
분명 예전에도 한번 실수 해서 조심해야 겠다하고.. 생각한적 있는데..
또 이런 기본적인 실수를..

전자제품이건.. API건 사용 설명서를 꼼꼼히 읽고 사용하도록 하자.

2012년 7월 5일 목요일

cpio 사용법..


CPIO 옵션
 
i     압축해제하라는 옵션
o    압축 생성 옵션
p    표준입력에서 파일명을 읽는다.
B    5120 bytes블럭단위로 입출력한다.
   아스키 형식으로 헤더정보를 읽고 쓴다.
d    없는디렉토리는 생성한다.
   기존파일과 겹치면 덮어쓰지 않는다.
   파일의 변경시간을 그대로 유지한다.
   파일명 목록을 출력한다.
h    헤더의 형식을 tar와 같이 읽고 쓴다.
   장치파일도 읽고 쓴다.
 
CPIO 파일 만들기
 
cpio 를 이용한 특정 확장자 파일만 압축하기.
# find . -name '*.c' -print | cpio -o > data.cpio
 
# ls | cpio -o > ../test.cpio

 
CPIO 파일 풀기
 
-i cpio로 백업한 data를 restore 한다
-o 출력 - 묶을때
-p 통과모드
 

-d restore중 필요한 디렉토리를 자동으로 생성시킨다
-m 백업 되있는 data들의 날짜, 시간을 그대로 유지한다
-v verbose
 
# cpio -idmv < test.cpio

cpio -i < data.cpio
cpio -dmvi < example.cpio
cpio -dmvi < /root/test.cpio
 
 
gz으로 압축되어 있는것을 풀기
 
예1:
# gunzip targetfile.cpio.gz
# cpio -idmv < targetfile.cpio
 
예 2:
# zcat targetfile.cpio.gz | cpio -idmv
 
 
압축 하여 CPIO 만들기
 
tar 를 이용한 특정 확장자 파일 압축하기 (리눅스)
find . -name "*.c" | xargs tar -cvf soure.tar
xargs 를 파라미터 수가 제한적이어서, 파일수가 많으면 불가능함.
 
cpio로 파일 옮기기
한 디렉토리 또는 파일시스템에서 다른 디렉토리 또는 파일시스템으로 옮겨야 할 대량의 파일이 있을 경우 다음의 명령을 이용

# find /old_directory -depth | cpio -pdmv /new_directory
이 명령은 소유자와 권한, 디렉토리 구조를 유지하면서 지정한 old_directory 밑의 모든 파일을 new_directory로 옮긴다.
 
# cd src_dir_name
# find . -depth -print | cpio -pudm target_dir_name

펌..http://blog.naver.com/dolicom/10041713501

2012년 6월 20일 수요일

[Tip] SVN rollback 하기..


그전에.. 난 그전 revision파일 찾아가며.. 비교해서 다시 커밋했는데..
정말.. 미련한 짓이었다..

아래와 같이 하면.. 된다.

svn merge -r [REV_from]:[REV_to] [Source URL] 

SVN 경로가 [Source URL] 인 경우 revision을 [REV_from]에서 [REV_to]로 되돌리라는 명령이다.
해당 명령 수행 후 commit을 해주면 된다.

일반적으로 아래와 같은 형태가 될것 같다.
 $ svn merge -r 100:99 test.c
 $ svn ci -m "Rollback to revision 99" test.c

이렇게 하면.. revision이 100인 test.c 가 revision이 99로.. Rollback 완료..

아래는 최종 버전을 특정 revision으로 되돌리는 방법..
 $ svn merge -r HEAD:5 test.c

 '{' DATE '}' 리비전이 시작하는 시각
 'HEAD'       저장소의 마지막 리비전
 'BASE'       작업 사본을 꺼내온 리비전
 'COMMITTED'  BASE 이전에 마지막 커밋된 리비전
 'PREV'       COMMITTED 의 직전 리비전

[Tip] Git Proxy 설정하기


1. corkscrew 설치
GIT PROXY를 설정하기 위해서는 corkscrew가 필요하다.

Ubuntu는.. 그냥 apt-get install corkscrew 라고 하면 됨..

corkscrew는.. http://www.agroman.net/scrkscrew 에서 받는다.

# tar xvfz corkscrew-2.0.tar.gz
# ./configure
# make
# make install
위와 같이 설치하면 /usr/local/bin/corkscrew 가 설치된다.

2. git proxy 설정
gitproxy.sh 생성 (파일명은 자유)
 # vi /usr/local/bin/gitproxy.sh

파일 생성
#!/bin/sh
/usr/local/bin/corkscrew [PROXY_ID] [PROXY_PORT]

권한 부여
# chmod +x /usr/local/bin/corkscrew

 $ git config --global core.gitproxy '/usr/local/bin/gitproxy.sh

Git를 사용 준비 완료!!

[Tip] Linux 시간 설정


# date [MMDDhhmm[[CC]YY][.ss]
맞추려는 시간이 2004년 07월 15일 오후 4시 15분 50초라면
# date 071516152004.50

타임서버
time.bora.net
time.kriss.re.kr -- 주로 refuse .

타임서버 시간 보기
# rdate -p time.bora.net

타임서버 시간을 로컬 시간으로
# rdate -s time.bora.net        
 or
# ntpdate time.bora.net

확인
# date

crontab 등을 사용하여 주기적으로 시간 설정해 가능..
0 3 * * * /usr/bin/rdate -s time.bora.net
 or
0 3 * * * /usr/sbin/ntpdate -s time.bora.net

시간대 변경 (한국)
# ln -sf /usr/share/zoneinfo/ROK /etc/localtime

2012년 6월 19일 화요일

[Hadoop] 설치 및 간단한 실행 예제

1. Hadoop 다운 받기 & 설치


 아래 경로에서 Hadoop 최신 버전의 release 정보를 구할 수 있다.
 http://hadoop.apache.org/common/releases.html

 아래 경로에서 Hadoop의 버전별 설치본을 받을 수 있다.
 http://ftp.daum.net/apache/hadoop/common/

 이번에는 stable 버전인 1.0.3 버전을 받는다.
 http://ftp.daum.net/apache/hadoop/common/hadoop-1.0.3/hadoop-1.0.3-bin.tar.gz

 원하는 경로에서 압축 해제
 $ tar xvfz hadoop-1.0.3-bin.tar.gz

2. ssh / rsync 설치


 ssh와 rsync는 이미 Linux 설치 시 설치되었을 가능성이 크지만..
 없다면.. 아래와 같이 설치한다.
 Redhat :
  # yum install ssh rsync
 Ubuntu :
  # apt-get install ssh rsync

3. Pseudo-Distributed Operation을 위한 설정


conf/core-site.xml:

<configuration>
     <property>
         <name>fs.default.name</name>
         <value>hdfs://localhost:9000</value>
     </property>
</configuration>

conf/hdfs-site.xml:

<configuration>
     <property>
         <name>dfs.replication</name>
         <value>1</value>
     </property>
</configuration>

conf/mapred-site.xml:

<configuration>
     <property>
         <name>mapred.job.tracker</name>
         <value>localhost:9001</value>
     </property>
</configuration>

4. SSH Passphraseless 설정

 ssh로 password 입력 없이 접근 가능해야 한다.

 $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
 $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
 $ chmod 644 ~/.ssh/authorized_keys
 (간혹 authorized_key에 쓰기 권한이 있을 경우 인증키 목록이 정상동작 하지 않는다)

 아래와 같이 입력 시 바로 접속되면 성공
 $ ssh localhost

 생성한 rsa 공개키를 인증 키 목록에 추가하면 password 입력 없이 바로
 ssh 접근이 가능하다.

5. Hadoop 구동 및 테스트

 - DFS 포멧하기 & 구동하기
 $ bin/hadoop namenode -format
 $ bin/start-all.sh

 - 아래 URL로 접속해보면 정상 구동 여부 확인 가능
  NameNode - http://localhost:50070/
  JobTracker - http://localhost:50030/

- Example MapReduce 실행하기
 DFS에 파일 올리기 (conf 디랙터리를 input이란 이름으로 업로드)
 $ bin/hadoop dfs -put conf input 
 $ bin/hadoop jar hadoop-examples-1.0.3.jar grep input output 'dfs[a-z.]+' 
 $ bin/hadoop dfs -cat output
    or
 $ bin/hadoop dfs -get output output  (결과 output을 내려 받는다)
 $ cat output/*  or


스프린트 정리

스프린트 :  스프린트는 프로토타입을 제작하고 고객과 함께 아이디어를 테스트하여 중요한 문제들에 대한 답을 찾는 독특한 5일 짜리 과정이다. 스트린트는 업무 전략, 혁신 행동과학, 디자인 그 외 여러 분야의 최고 히트작을 어떤 팀에서라도 사용할 수 있...