12월 30, 2015

C++ 추천도서


도서

  1. Effective C++
  2. More Effective C++
  3. Effective C++ STL
  4. Effective Modern C++
  • Efficient C++ : C++ 최적화에 대한 설명, 실험 등
  • The C++ Programming Language 4th, Bjarne Stroustrup : C++ 이라는 언어의 철학에 좀 더 가까운..

참고



12월 27, 2015

The Open Graph protocol - protocol for rich webpage link preview


참고

Telegram Link Preview System
The Open Graph protocol

Adding Git Wiki locally


Git의 wiki는 기본적으로 git에 저장된 일반적인 repos. 와 동일하게 취급됨.

해당 프로젝트 폴더 내에 프로젝트명.wiki 라는 이름으로 repos.가 존재. GitHub에서 wiki tab에서 이 repos.의 주소를 확인할 수 있음.
이 repos. 주소를 이용해 프로젝트의 일반적인 repos. 를 local에 clone하는 방법과 동일한 방법(git clone 사용법)으로 local에 wiki의 local repos.를 생성할 수 있음.

참조

Adding and editing wiki pages locally |GitHub Help

그대가 엉터리 개발자라는 신호들


그대가 엉터리 개발자라는 신호들


  1. 암산하듯이 머리 속으로 코드를 돌리며 프로그램을 이해할 수 있어야..
  2. 발전하는 기술을 습득하기 위해 이를 대비한 학습법이 있어야..
  3. 다양한 인터넷 검색, 코세라 강의 등 다양한 학습 루트. 습득한 지식보다 이런 지식들을 습득하는 공부법이 중요. 어떤 것은 한시간 정도 인터넷 검색을 해보고 개념을 짚는 정도로, 또 어떤 것은 하루 정도 강의를 듣는 정도로, 어떤 것은 수일~수주 정도 투자해서 책을 보고 직접 코딩해보는 방식으로 자신만의 학습법(공부법), 학습 기준 등이 있어야..

  4. 재귀 알고리즘을 이해하는 능력


assert(..) 함수란? 그리고 용도

용도

플로우 상 발생 가능한 예외 처리를 다하고, 그러고도 프로그래머가 미처 예측하지 못한 예외가 있을 수 있다고 생각될 때 사용.
보통 사용자의 입력에 의해 발생하는 예외는 (assert() 를 통해서가 아니라) 일반적인 예외 처리를 통해 모두 처리하고, 개발자가 미처 생각지 못한 에러나 시스템 상에서 발생 가능한 에러 등 '모든 경우를 검토했지만 그래도 혹시 있을지 모르는 예외'에 대비하여 사용. '디버깅 페이즈에서 벗어나면 assert() 함수는 보통 disable 되기 때문에, 이 함수는 사용자나 런타임 에러를 잡기 위한 것이 아니라 프로그램 에러를 잡기 위한 것이다.' (cplusplus)
또한 디버깅 시에 assert() 함수를 사용하고 실제 릴리즈되는 코드에선 assert() 함수를 빼고 컴파일할 수 있어 성능에 거의 미치지 않음..

사용 예시

assert(stmt)의 stmt가 0이면 'stmt'를 출력하고 프로그램 중지.
컴파일 시 #define NDEBUG를 정의하면 모든 assert() 함수를 제외하고 컴파일하게 됨.

처리

보통 서버 사이드의 경우 assert(..)를 삽입해두고 테스트를 돌리면 하루에도 몇번씩 서버가 멈추어 재시작하게 됨.
따라서 서버 사이드 개발 과정에서는 assert(..)로 인해 서버가 멈추는 경우 자동으로 크래쉬 덤프를 남기고 재시작하도록 자동화하고, 남는 시간에 크래시 덤프를 분석하고 디버깅하는 것이 일반적.

참고

assert() 에 대하여 ..... |KLDP
assert 주어진 조건 확인
assert |cpluscplus

12월 25, 2015

Git 유용한 명령어 모음

branch 조작





    기타

    Git branch workflow

    Branch의 종류

    • master(항상 존재)
    • 최종 릴리즈된 브랜치

    • develop(항상 존재)
    • 개발 중인 코드

    • feature
    • 특정한 기능을 구현하고자 할 때 develop branch로 부터 꺼냄. 해당 기능의 개발이 완료되면 develop branch로 merge.

    • release
    • masster 브랜치로 merge 하기 전 최종 점검을 하는 branch.

    • hotfix
    • release 버전에 버그 등 긴급한 수정 사항이 있을 경우


    참고

    3.4 Git Branching - Branching Workflows |git-scm
    Git 기본개념과 사용법 그리고 어플리케이션 |Slideshare 39페이지부터. git branch 종류별 역할.
    Git branch stregagy & case study |Slideshare

    12월 23, 2015

    12월 22, 2015

    HTML 자주 쓰는 태그


    Tag 목록

    • <pre> </pre>
    • preformatted. 미리 포맷된 텍스트를 나타냄. 이 요소 내부의 텍스트는 HTML 적용 전 텍스트에 적용된 그대로의 비례, 글꼴로 표시됨. 고정폭 띄어쓰기를 제공하여 tab과 같은 역할로도 사용 가능

    • <br>
    • 줄바꾸기

    • <blockquote> </blockquote>
    • 인용 구문 문단 지정

    • <p> </p>
    • 단 지정


    escape character

    • < : &lt
    • > : &gt
    • & : &amp
    • : : &#58
    • ; : &#59

    주의

    <xmp> </xmp> 삽입된 코드( ; < > , HTML태그 등 )를 그대로 보여주는 태그.
    But deprecated. 쓰지 말것.

    현재 <xmp>를 대신할 태그가 없어 다소 번거롭긴하지만 escape 캐릭터를 매번 사용하는 방법 외에는 뾰족한 수가 없는 듯

    참고

    Atom: Github에서 출시한 오픈소스 텍스트 에디터

    1. 개요
    2. GitHub에서 만든 hackable 텍스트 에디터. 크롬의 오픈소스와 HTML, CSS를 이용하여 작성했으며, 이들 언어를 사용하여 커스터마이징이 가능.

    3. 설치 순서
      1. atom download
      2. extantion 설치
      3. setting > install 에서 extention 이름으로 찾기

        • emmet
        • minimap
        • script

      4. 기타 개별적인 커스터마이징 적용

    12월 18, 2015

    GitHub Wiki의 page를 subdirectories 구조로 작성하기?

     subdirectories 구조를 만들 수는 있지만, 해당 페이지에 접근할 때는 무조건 root에서 접속하게 됨.

    즉, ../wiki/ 아래에 subd1을 만들더라도 해당 페이지에 ../wiki/subd1/page1으로 접근하는것이 아니라, /wiki/page1으로 접근하게 됨.

    참조

    How can you use subdirectories in a GitHub wiki checkout? |StackOverflow Jan 18 '13
    How to structure github wiki files? |StackOverflow Jun 13 '14

    개발환경 설정

    Windows

    포맷
    1. 즐겨찾기 백업
      • 익스플로러
      • 크롬 북마크

    2. 윈도우 사용자 폴더 백업: 다운로드, 내 문서, 내 사진, 즐겨찾기 etc.
    3. 바탕화면 백업
    4. 윈도우 설치 드라이브(C 드라이버) 기타 폴더 백업


    재설치
    1. 윈도우 설치
    2. 드라이버 설치
    3. 워드 프로그램 설치
    4. 개발 도구 설치
      • Visual Studio
      • Atom 설치
      • visual studio code 설치
      • Git bash 설치



    Linux

    12월 16, 2015

    C++11 lambda expression



    • Syntex of lambda
    [caps]  {
        function_contents;
    };
        또는
    [caps]  (params)  (mutable) (throwSpec) (->retType)   {
        function_contents;
    };

      • caps: captures. 외부의 변수 값을 람다 내부에서 사용할 수 있게 함
                   [=] : 람다 외부의 값을 value 형식으로 전달
                   [&] : 람다 외부의 값을 reference 형식으로 전달
      • params: 람다는 일반 함수와 마찬가지로 파라미터 값을 받을 수 있는데, 이와 같이 파라미터 값을 람다 내부로 건네주는데 사용 
      • mutable : 람다에 mutable 선언시 value 로 전달된 captures를 람다 내부에서 수정할 수 있으며 수정된 값은 람다 내부에서 유지. (value로 전달 됐으므로 람다 밖에서는 수정된 값이 적용되지 않음)
      • throwSpec 
      • retType: 람다는 일반함수와 마찬가지로 값을 리턴할 수 있는데, 이 리턴값의 type을 지정하는데 사용 
      • function_contents: 람다가 수행하는 내용



    • ex)
    int x = y = 1;
    auto l = [=x, &y] -> bool {
        if ( ++x == ++y )
            return true;
        else
            return false;
    };
    // true 리턴, x는 1, y는 2 값으로 변경.
           
    • lambda의 장점


    • lambda의 한계


    12월 14, 2015

    Github에서 프로젝트 공유 (git clone 사용법)

    (프로젝트를 저장하려는 폴더에서) git clone repos._URL

    프로젝트용 폴더를 따로 생성할 필요 없으며, git clone 실행 시 프로젝트 폴더가 자동으로 생성되고 그 안에 파일들이 위치됨

    12월 11, 2015

    Markdown이란? Markdown 문법

    정의
      HTML 과 같이 웹페이지를 나타내는데 사용되는 언어로 각 글자에 서식을 표현해줄 수 있음.
     단순하여 사용하기 쉽고 호환성이 매우 좋음.
     Multimarkdown 등 확장 문법 존재함.

    문법
     참고 링크 참조


    참고
    http://blog.kalkin7.com/2014/02/05/wordpress-markdown-quick-reference-for-koreans/
    http://sergeswin.com/1013

    프로젝트 시작 시 Git 초기화 프로세스

    일반적인 프로젝트를 생성한 후 git에 올릴 때

    1. 새로운 local git repository를 생성
       -> (git으로 올리려는 폴더 안에서) git init
           .git 파일이 생성됨.

    2. git에 push할 때 무시할 파일과 각종  설정 사항들을 세팅
       -> .gitignore, .gitattributes 파일 작성

    3. github 등 remote server에 새로운 git remote repository를 생성
       -> 해당 사이트에서 새로운 repository 생성. ropos.의 주소를 클립보드에 복사

    4. git local 에 git remote server의 주소를 등록
       -> git remote add origin url(클립보드에 복사해둔 주소)
       ex) git remote add origin https://github.com/id/repos. name.git

    5. local git repos.에서 remote git repos.로 최초 push 시엔 새로운 upstream을 생성해줘야 함
       -> git push --set-upstream origin branch_name
       ex) git push --set-upstream origin master
    error: src refspec master does not match any.
    error: failed to push some refs to 'https://github.com/id/repos. name.git'
    >First commit을 하지 않은 상태에서 push를 해서 발생한 오류. 아무 파일이나 생성해 commit 한 후 push 하면 사라짐.
    http://stackoverflow.com/questions/5802426/git-error-src-refspec-master-does-not-match-any

    6. 이후부터는 remote repos.에 push 시에 git push 사용



    Visual studio 소스제어(git)로 프로젝트 생성 시엔 .git, .gitignore, .gitattributes 파일이 이미 생성되 있음
       -> 1,2번 건너뛰고 3번부터 시작.

    12월 08, 2015

    SSH key란?

    서버에 접속할 때 비밀번호 대신 key로 로그인 가능.
    key는 private key와 public key로 구성.
    로컬머신에서 private key를 보관하며, 리모트에는 public key를 보관한다.
    사용자의 private key는 노출이 되선 안된다.



    참고
    Secure Shell |WIKI
    SSH |생활코딩
    Generating SSH key |GitHub Help
    Git 서버 - SSH 공개키 만들기 |git-scm