2014년 5월 21일 수요일

20140521 오늘 찾은 Python 팁 - Array & List 위주

요약

  • numpy
  • [x for x in array]
  • slice[:, :]
  • map(operation, array, array)
이것들이면 대부분 해결된다.


본론

어떤 Array의 각 원소에 대해서 산술 연산을 하고 싶다면?

numpy.array()를 이용해서 연산
[수식 for 변수 in Array]

아니면 map()으로도 가능

다차원 Array 자르고 붙이기 (영상처리시 색상 채널 분리 등에 유용)

Array 가로세로 모양 바꾸기

다차원 Array 모든 원소의 합 구하기

일반 sum() 대신 numpy.sum() 사용

초기 크기를 지정하여 Array 생성하기

기본적인 형태는 [None] size 이렇게 사용. 아래처럼 다차원도 가능. [[None] sizeX] * sizeY

Array 원소단위 계산

map()

Array 원소 Type Casting

numpy.array()로 생성하여 arr.astype()을 사용하거나
map()을 사용

축약함수 (Lambda)

Lisp 스타일 - Reduce https://wikidocs.net/64

제곱근 구하기

제곱근 ** 연산자나 pow() 함수 등에 분수값을 사용. float 타입으로 사용해야 함.

기타

Python 데이터 분석 라이브러리 “Pandas” http://pandas.pydata.org/

2014년 5월 14일 수요일

(작성중) Git Branch / Merge / Rebase, Git 사용에 대한 팁

http://dogfeet.github.io/articles/2011/a-successful-git-branching-model.html
http://dogfeet.github.io/articles/2011/git-merge.html 
http://dogfeet.github.io/articles/2012/git-merge-rebase.html
http://git-scm.com/book/ko/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-Rebase%ED%95%98%EA%B8%B0

Git Branch
 - 중앙집중식처럼 (다른사람의 코드베이스를 브랜치로 관리?)

 - master, develop 외 보조 브랜치 사용 (feature, release, hotfix, ...)
 - tag on master when merging release branch
 - merging with --no-ff (반드시 머지커밋 남기기 - 완전 합쳐져버리면 되돌리기 힘듬)

Git Rebase = Make concurrent commits seqeuential
Git Merge = Multiple parent?
 - 커밋 묶어서 merging (-no-commit --squash)

Don't do Rebase for commits of other developers


Git push
origin

hub

Pandoc을 사용해서 HTML로 렌더링된 Markdown 문서를 역으로 변환하기

요약

  • 사용할 프로그램: Pandoc
  • Ubuntu에서 Pandoc설치:
    $ sudo apt-get install pandoc
  • 사용법:
    $ pandoc -f입력포맷 -t출력포맷 입력파일 -o 출력파일
  • 예시:
    $ pandoc -fhtml -tmarkdown_github test.html -o test.md

이야기

이번에 블로그 글을 Atom 에디터의 Markdown 처리 기능을 이용해서 보기 좋은 HTML 문서로 재작성해보았는데, 원본 Markdown에서 HTML로 변환한 것을 블로그 글로 올리고 나서 원본이 없으면 나중에 다시 편집할 때 어떻게 할까 하는 생각을 하다가 Pandoc이 생각났다.

Pandoc

Pandoc은 마크업 문서간 변환 툴이다. 홈페이지에 나와있는 지원포맷 목록은 다음과 같으며 유용해보이는 포맷들은 글꼴 강조를 하였다.
  • HTML:
    XHTMLHTML5, and HTML slide shows using Slidy, reveal.js, Slideous, S5, or DZSlides.
  • Word processor:
    Microsoft Word docxOpenOffice/LibreOffice ODT,OpenDocument XML
  • Ebooks:
    EPUB version 2 or 3, FictionBook2
  • Documentation:
    DocBook, GNU TexInfo, Groff man pages, Haddock markup
  • Page layout:
    InDesign ICML
  • Outline:
    OPML
  • TeX:
    LaTeX, ConTeXt, LaTeX Beamer slides PDF via LaTeX
  • Lightweight markup:
    Markdown, reStructuredText, AsciiDoc, MediaWiki markup, Emacs Org-Mode, Textile
  • Custom:
    custom writers can be written in lua.

렌더링된 HTML로부터 Markdown 만들기

방법은 간단하다. 변환하려는 내용을 복사해서 HTML 파일로 저장하고 Pandoc을 사용해서 변환하면 된다. Ubuntu에서 pandoc을 설치하려면$ sudo apt-get install pandoc을 실행한다.
Pandoc의 명령어의 간략한 사용법은 이렇다.
$ pandoc -f입력포맷 -t출력포맷 입력파일 -o 출력파일
나는 HTML으로부터 Markdown(Github Flavored)을 만들고 싶기때문에 다음과 같이 실행하였다.
$ pandoc -fhtml -tmarkdown_github test.html -o test.md
실행해보니 변환이 대체로 잘 되는데, 렌더링된 HTML에 적용되어 있던 몇몇 스타일 정보들이 그대로 텍스트로 옮겨오는 문제가 있다. 주로multi-line code block들에서 이러한 문제가 발생한다. 이런 부분은 같은 스타일이 적용된 것을 텍스트 에디터에서 찾아바꾸기를 통해 바꾸어주면 된다. 해 보면 그리 오래 걸리지는 않는다.
이렇게 하면 원본에 거의 근접한 markdown 문서를 만들 수 있다.

2014년 5월 12일 월요일

읽은 웹페이지 기록 20140512월

Google Apps Script (1)

Class Logger - Google Apps Script — Google Developers https://developers.google.com/apps-script/reference/base/logger
Document Service - Google Apps Script — Google Developers https://developers.google.com/apps-script/reference/document/
Class Blob - Google Apps Script — Google Developers https://developers.google.com/apps-script/reference/base/blob#getAs(String)
HTML Service: Create and Serve HTML - Google Apps Script — Google Developershttps://developers.google.com/apps-script/guides/html/#serve_html_as_a_google_docs_sheets_or_forms_user_interface
Google Apps Script 대시보드 - Google 드라이브https://script.google.com/dashboard

Google Apps Script (2)

google apps script - cursorPos.insertInlineImage() gives error: "We're sorry, a server error occurred. Please wait a bit and try again" - Stack Overflowhttp://stackoverflow.com/questions/22277368/cursorpos-insertinlineimage-gives-error-were-sorry-a-server-error-occurred
javascript - How to load an Array (of numbers) into a google app script Byte[] - Stack Overflowhttp://stackoverflow.com/questions/20630661/how-to-load-an-array-of-numbers-into-a-google-app-script-byte

JavaScript, Base64, byte array

Convert a base64 string into a binary Uint8 Arrayhttps://gist.github.com/borismus/1032746
베이스64 - 위키백과, 우리 모두의 백과사전http://ko.wikipedia.org/wiki/%EB%B2%A0%EC%9D%B4%EC%8A%A464

크로스도메인, jQuery, JSONP

스토브 훌로구 :: CrossDomain Ajax 호출 #1 : jQuery JSONP ajax 호출 이용.http://stove99.tistory.com/10
사과 냄새나는 IT이야기 TAESTORY, :: [jsp] jsonp를 이용한 다른 도메인간의 ajax / json 통신 (크로스도메인) http://tskwon.tistory.com/312
jquery - $.ajax and JSONP. ParseError and Uncaught SyntaxError: Unexpected token : - Stack Overflowhttp://stackoverflow.com/questions/10507345/ajax-and-jsonp-parseerror-and-uncaught-syntaxerror-unexpected-token

읽은 웹페이지 기록 20140511일

뭔가 내가 읽고 알게 된 내용들에 대해서 남겨놓고 싶은데 다 정리하기는 그렇고 해서 블로그 글로 한 번씩 키워드, 링크 목록을 정리해보기로 하였다. 말하자면 내 학습, 기억에 대한 인덱스같은 것이다.

HTML5 Graphics

drawingboard.js, Simple HTML5 Drawing / Sketch App https://github.com/Leimi/drawingboard.js
Paper.js = HTML5 Canvas = Bitmaphttps://github.com/paperjs/paper.js
Raphael.js = HTML5 Inline SVG = Vectorhttps://github.com/DmitryBaranovskiy/raphael/

JavaScript, CoffeeScript

Google Apps Script, Drive / Docs add-ons

QRCode

GitHub

Git + Hub = GitHub http://hub.github.com/

2014년 5월 7일 수요일

Atom 에디터 - Ubuntu 14.04에서 프로젝트 소스 빌드 및 설치

Atom 에디터?

소개 링크: http://atom.io/
특징: 오픈소스. Nodejs 기반. 애드온을 만들어서 붙일 수 있음. Markdown Preview 기능이 있음. Sublime Text나 Textmate와 비슷.
소스빌드가 아니라 ppa를 통해 설치하고싶다면 webupd8 팀에서 제공하는 저장소에서 설치(링크)할 수 있다.
PPA를 통한 설치 명령어:
 $ sudo add-apt-repository ppa:webupd8team/atom
 $ sudo apt-get update
 $ sudo apt-get install atom

주의점

  1. 64bit 시스템에서만 돌아간다.
  2. 설치 스크립트(script/grunt install)는 있는데 삭제 스크립트는 없다. 대신 Ubuntu/Debian을 위한 deb 패키지를 만들어주는 스크립트가 있다.

요약 (그냥 당장 설치해서 쓰는 것만을 바라는 사람을 위한 것)

  1. 여기(링크)를 따라서 Node.js와 NPM을 설정
  2. 설치: 터미널에서 명령 실행
    $ sudo apt-get install libgnome-keyring-dev
    $ sudo npm config set python /usr/bin/python2 -g
    $ sudo ln -sf /lib/x86_64-linux-gnu/libudev.so.1 /lib/x86_64-linux-gnu/libudev.so.0
    $ sudo apt-get remove gyp
    $ cd /tmp
    $ git clone https://github.com/atom/atom
    $ cd atom
    $ script/build
    $ script/grunt mkdeb
    $ sudo dpkg -i /tmp/atom-build/*.deb
    
  3. atom 실행
    터미널에서 명령 실행: $ atom

본론

준비과정

  1. Node.js, NPM 최신 버전을 설치한다. (설치 방법은 여기)
  2. 필요한 라이브러리를 설치 / 설정한다.
    명령 실행:
    $ sudo apt-get install libgnome-keyring-dev
    $ sudo npm config set python /usr/bin/python2 -g
    $ sudo ln -sf /lib/x86_64-linux-gnu/libudev.so.1 /lib/x86_64-linux-gnu/libudev.so.0
    $ sudo apt-get remove gyp
    
    각각은 차례대로
    • libgnome-keyring-dev 패키지 설치
    • npm에서 파이썬 버전을 python2로 설정
    • 의존하는 라이브러리 버전 문제로 링크 생성
    • gyp 명령이 빌드 과정에서 혼동이 일어나므로 삭제 (평상시에 필요하지 않음)
    를 수행하는 명령이다.

빌드 및 설치 과정

  1. Atom 프로젝트의 Github 저장소를 로컬에 복제한다.
    명령 실행:
    $ git clone https://github.com/atom/atom
  2. 복제된 Git 저장소로 들어가서 build script, deb 패키지 생성 스크립트를 차례대로 실행한다.
    명령 실행:
    $ cd atom
    $ script/build
    $ script/grunt mkdeb
    
    위 명령어를 실행하면 /tmp/atom-build/ 에 빌드된 프로그램 파일과 deb 패키지가 생성된다.
    deb 설치 패키지를 보관해두고 싶다면 파일관리자에서 /tmp/atom-build/ 디렉토리로 찾아들어 가거나 다음 명령어를 실행하여 deb 패키지를 홈 디렉토리로 복사한다.
    명령 실행: $ cp /tmp/atom-build/*.deb ~/
  3. deb package 설치
    명령 실행: $ sudo dpkg -i /tmp/atom-build/*.deb

참고사항

deb 패키지를 이용해서 설치했다면 삭제는 간단히
$ sudo apt-get remove atom
$ script/grunt install 로 설치하였다면 수동으로 삭제해야 한다.
(그냥 데비안 패키지 사용하는 게 낫다.)
$ script/grunt install을 통해 기본 설정으로 설치되는 디렉토리와 파일은
  • /usr/local/share/atom/ 디렉토리
  • /usr/local/bin/ 내의 apm, atom 실행파일(심볼릭 링크)
이다.
(관련 파일: 프로젝트 디렉토리의 build/Gruntfile.coffee, build/tasks/install-task.coffee)

참조한 글

Ubuntu에서 Node.js & NPM 설치하기

요약:
$ sudo apt-get install python-software-properties curl
$ sudo add-apt-repository ppa:chris-lea/node.js
$ sudo apt-get update
$ sudo apt-get install nodejs
$ curl https://www.npmjs.org/install.sh | sudo sh


여기부터 전체 내용 시작.
이 내용은 Ubuntu 14.04 LTS 64bit 기준으로 확인하였다.

요즘 Node.js 관련해서 뭔가 하려면 NPM 버전이 높아야 하는데 기본 저장소 패키지는 버전이 낮음. 따라서 모두 최신버전으로 설치하기 위한 작업 과정이다.
(다음을 진행하기 전에 add-apt-repository 명령을 제공하는 python-software-properties가 필요하다. 마지막 명령을 위해서는 curl도 설치해야 한다. 패키지가 설치되어 있지 않다면 먼저 sudo apt-get install python-software-properties curl 명령을 실행하여 설치하여야 한다.)

1. Node.js 최신 릴리즈 PPA 추가 및 저장소 정보 업데이트
명령 실행: sudo add-apt-repository ppa:chris-lea/node.js && sudo apt-get update

2. Node.js 패키지 설치
명령 실행: sudo apt-get install nodejs

3. NPM 설치
명령 실행: curl https://www.npmjs.org/install.sh | sudo sh

끝.

2014년 5월 6일 화요일

Go 언어로 작성한 프로그램 디버깅


먼저 요약부터:
Go 프로그램 코드를 디버깅하는 데는 GDB를 사용함.
명령 및 옵션은 go build -gcflags "-N -l" 파일이름




이제 본론.

Go 언어(이하 Go)로 작성한 프로그램은 일반적으로 go build 명령으로 컴파일하는데 go 컴파일러 패키지에는 전용 디버거가 없다. (...=_=???)

뭐... 괜찮다. 디버깅은 하는 방법이 따로 있다. GDB를 이용하는 것인데, 방법은 Go Documentation 웹 페이지에 잘 나와 있다. 내용을 핵심만 간단히 요약해서 -gcflags "-N -l" 옵션을 적용하여 go build를 한 후 gdb로 디버깅하면 된다는 것이다.

잘못 알고 쓴 내용을 좀 지웠더니 글이 많이 짧아졌다...


참조한 글:
http://golang.org/doc/gdb