터미널에서 마크다운 문서 보기

NPM으로 노드 모듈을 설치하다가 설치된 노드 모듈에 있는 마크다운 문서를 봐야 하는 경우가 있는데 Github가서 찾아보긴 귀찮고 터미널에서 마크다운 문서를 preview로 바로 볼 수 있는 방법이 없을까 했는데, 안되는 건 없구나. ;Q

http://tosbourn.com/view-markdown-files-terminal/

brew install pandoc
brew install lynx

그리고 본인이 사용하는 쉘의 설정 파일에 아래 설정을 넣어 준다.

rmd () {
pandoc $1 | lynx -stdin
}

그리고 새로운 셸에 접속하거나, source(.)로 설정파일을 리로드 한다. 끝.

rmd ~/blah/immarkdown.md

Pandoc으로 마크다운 문서를 html파일로 변환 뒤에 전설(적어도 나한테는)의 터미널 브라우져인 lynx를 통해서 열면 바로 볼 수 있는 것이다.

터미널에서 마크다운 문서 보기
(이렇게 보니 vi로 열어서 보는 거랑 별 차이 없어 보이기는 하다…)

다른 번에는 생활을 윤택하게 해주는 터미널 유틸리티를 소개해 봐야 겠다.

Sails'js 사용자 로그인 기능 구현 - 1편

웹에서 구동하는 sails 프로젝트 예제입니다. 내용이 길어질 거 같아 여러번의 포스팅으로 나눠서 올릴 예정입니다. 저 같이 처음 sails접하시는 분들에게 도움이 되었으면 좋겠습니다.

Sails’js 프로젝트 생성

프로젝트명을 kails(k+sails)라 했다. 딱히 생각나는 이름이 없었다. ;(

sails new kails

완료 메시지가 뜨고 kails라는 디렉토리가 생성되었다. 디렉토리 구조를 보면 아래와 같다.

centumpark-MacBook-Pro:kails:% tree -d -L 2
.
├── api
│   ├── controllers
│   ├── models
│   ├── policies
│   ├── responses
│   └── services
├── assets
│   ├── images
│   ├── js
│   ├── styles
│   └── templates
├── config
│   ├── env
│   └── locales
├── node_modules
│   ├── ejs -> /usr/local/lib/node_modules/sails/node_modules/ejs
│   ├── grunt -> /usr/local/lib/node_modules/sails/node_modules/grunt
│   ├── grunt-contrib-clean -> /usr/local/lib/node_modules/sails/node_modules/grunt-contrib-clean
│   ├── grunt-contrib-coffee -> /usr/local/lib/node_modules/sails/node_modules/grunt-contrib-coffee
│   ├── grunt-contrib-concat -> /usr/local/lib/node_modules/sails/node_modules/grunt-contrib-concat
│   ├── grunt-contrib-copy -> /usr/local/lib/node_modules/sails/node_modules/grunt-contrib-copy
│   ├── grunt-contrib-cssmin -> /usr/local/lib/node_modules/sails/node_modules/grunt-contrib-cssmin
│   ├── grunt-contrib-jst -> /usr/local/lib/node_modules/sails/node_modules/grunt-contrib-jst
│   ├── grunt-contrib-less -> /usr/local/lib/node_modules/sails/node_modules/grunt-contrib-less
│   ├── grunt-contrib-uglify -> /usr/local/lib/node_modules/sails/node_modules/grunt-contrib-uglify
│   ├── grunt-contrib-watch -> /usr/local/lib/node_modules/sails/node_modules/grunt-contrib-watch
│   ├── grunt-sails-linker -> /usr/local/lib/node_modules/sails/node_modules/grunt-sails-linker
│   ├── grunt-sync -> /usr/local/lib/node_modules/sails/node_modules/grunt-sync
│   ├── include-all -> /usr/local/lib/node_modules/sails/node_modules/include-all
│   ├── rc -> /usr/local/lib/node_modules/sails/node_modules/rc
│   ├── sails -> /usr/local/lib/node_modules/sails
│   └── sails-disk -> /usr/local/lib/node_modules/sails/node_modules/sails-disk
├── tasks
│   ├── config
│   └── register
└── views

36 directories

크게 프로젝트 설정 파일들이 모여 있는 config, 실제 비지니스/모델/라우팅 부분인 api, 프로젝트의 스태틱 리소스가 위치하는 assets, 그리고 화면 뷰 영역 파일(Sails.js에서는 EJS를 기본 포맷으로 사용 한다.)이 위치하는 views가 있다.

데이터베이스 연결이 준비되지 않았을 경우에도 기본으로 sails-disk라는 데이터베이스 어댑터를 이용해서 자체 제공하는 파일 기반 데이터베이스를 사용할 수 있다. config/connections.js파일을 열어보면 어댑터를 설정할 수 있고 개발/운영 모드에 따라서 별 개의 데이터베이스를 설정할 수 있다. 그리고 sails-disk(local disk storage)는 개발모드에서만 사용해야 한다. 실제 서비스용으로 사용하기에는 무리가 크다.

config/models.js 아래 2라인을 찾아서 주석을 해제 한다.

connection: 'localDiskDb',
migrate: 'alter'

sails 프로젝트를 기동할 시에 데이터베이스 migration 되는데 migrate옵션은 총 3가지다.

  • safe : 마이그레이션 하지 않음. 사용자가 직접 데이터베이스를 수정해야 한다.
  • alter : 기존에 생성된 데이터는 두고 sails에서 자동으로 마이그레이션.(완벽하지 않음)
  • drop : 스키마/데이터 모두 삭제하고 다시 생성.

sails프로젝트를 운영모두로 기동할 경우에는 safe만 가능 하고 개발모드에서 3가지 모두 사용할 수 있다.

env/development.js에서 연결 정보를 local disk storage로 설정 한다.

module.exports = {
models: {
connection: 'localDiskDb'
}
};

이젠 프로젝트를 기동해 보자.

centumpark-MacBook-Pro:kails:% sails lift

터미널 로그에 돛단배가 보이고 http://localhost:1337 로 접속해서 안내 페이지가 뜨면 정상적으로 sailslift한 것이다.

사용자(User) 모델 추가

로그인 행위를 할 사용자에 대한 모델을 추가해보자.

sails generate api user

  • api/controllers/UserController.js
  • api/models/User.js

2개의 파일을 추가 되었다. 사용자(User)모델이 로그인을 하기 위해 필요한 속성인 email주소와 password를 추가해 보자.

User.js

module.exports = {
attributes: {
email : {
type : 'email',
requird : true,
unique : true
},
passowrd : {
type : 'string',
required : true,
minLength : 6
}
}
};

수정 후에 sails를 기동할 시에 migrate작업이 수행되면서 실제 되면서 mysql의 경우에는 실제 테이블이 생성 된다.

부트스트랩 테마 화면 구성

sails에서 프론트엔드로 사용될 웹페이지(화면)을 구성해 볼려고 한다. 퍼블리싱을 못하는 이유로 쉽게 카피해서 사용할 수 있는 Bootstrap 기반의 Bootswatch의 Simplex테마를 사용하기로 했다.


2편에서 다시 만나요!

Sails'js 소개 및 시작하기

최근에 간단한 앱 API서버 프로토타입을 만들 일이 생겨서 검색으로 조사해봤다. 일단 일의 메인 프로젝트가 자바기반이긴 하지만 프로토타입을 만드는 서브 프로젝트라서 자바는 배제를 시켰고 최근에 관심을(아니 관심만) 가지고 있는 node.js기반의 프레임워크를 찾다가 관심을 가지게 된 프레임워크다. 현재 버전은 0.11.0이고 구글링 한국어로는 페이지가 몇 안 나오는 걸로 보아 인기가 얻거나 나온지 얼마 안됬구나 했는데 Git 히스토리를 보니 대략 2012년부터 해온 프로젝트다.

Mike Mcneil(https://www.linkedin.com/in/mikermcneil) 이라는 친구가 처음 만들어서 오픈소스로 올렸고 처음에는 rails like한 node’js 프레임워크를 만들려고 했던 것으로 보인다. 그래서 이름 역시 (ruby on) rails와 유사한 sails(‘js)이다. 이 친구가 sails’js기반으로 테크 스타트업회사인 treeline(https://treeline.io/) 을 하고 있다. treeline에 올라온 영상을 보면 알겠지만 코딩 없이 앱이나 모바일/웹 서비스의 백엔드를 만들어주는 서비스로 보인다. 개인적으로 sails’js에 관심을 가지는 이유는 사물인터넷의 백엔드 프레임워크로 괜찮다(아직까진)라는 느낌을 받아서인데 확신은 없지만 괜찮은 선택으로 보인다.

sails’js 관련 글을 몇 개 더 올릴 생각인데, 먼저 나 스스로가 node’js를 실제 업무에서 사용하는 개발자가 아님을 염두에 두길 바란다. 잘못된 부분있으면 댓글을 달아주시고 댓글을 확인하면 아무도 모르게 슬쩍 고쳐놓겠다. 그리고 가장 중요한 점은 나 스스토로 공부하기(삽질하기 위해서) 위해서 정리 겸 해서 올리는 포스팅이다. 결국엔 나도 잘 모른다는 이야기다. ;Q

Sails’js?

Sails'js

당근 자바스크립트 언어 구성이고, 내부적으로 Waterline이라는 ORM 플러그인을 내장하고 있어서 기존 Mysql과 같은 SQL기반 데이터베이스뿐만 아니라 MongoDB같은 noSQL 데이터베이스도 사용이 가능하고 모델을 통한 쿼리도 가능하다. 모바일 앱이나 게임에서 필요한 REST API 바로 생성할 수 있는 기능은 프로토타입핑하기엔 편리하다. 웹소켓 기능도 기본으로 들어가 있는데 아직까진 사용해본 적이 없어서 모르겠고 위 2가지 사항만으로도 충분한 강점이 있어 보인다.

설치는 npm으로 간편 설치.

npm -g install sails

npm을 사용하기 이전에 시스템에 node가 설치되어 있어야 한다.

다음 포스트에서 간단하게 로그인 기능을 구현하는 방법을 올려 보겠다.

sails’s 관련 링크

부산 스타트업 카페 개소 소식

올초에 부산에서 스타트업을 시도하면서(결국 시도만 해보고 실패함) 부산에서 스타트업 관련 인프라가 너무 힘들다는 사실을 깨달았다. 그런 고민으로 스타트업 부산이라는 주제로 블로그와 페이지를 열고 오프라인 네트워킹 모임을 개최할려고 시도 했었는데 귀차니즘..이 아니라 쉽게 포기하는 내 성격 때문에 중도 포기하고 말았다. 그렇게 몇 달이 흘렀고 얼마전에 구글 뉴스를 통해서 아래 기사를 접했다.

부산 스타트업 카페 관련 기사 :

부산 스타트업 카페 홈페이지 : 바로가기


형식은 부산시와 돈많은 B모그룹이 공동 출자하여 100억(!)이라는 엔젤펀드 기금을 마련(지역 기업가들을 통해서)하겠다는 취지고 그런 창구 역할을 부산 스타트업 카페에서 하겠다는 이야기다.
돈의 액수가 중요한 게 아니라 카페 홈페이지에도 나와 있듯이 “지속 가능한 지원 시스템”이 중요해 보인다. 창업 생태계를 만들겠다는 부산 최초의 의미있는 시도(?)라 개인적으로는 높이 평가해본다.

분명 부산이 서울보다는 미지근하지만 스타트업에 관한 열기는 분명히 있다. 다만 이런 열기를 가진 사람들이 시도를 해볼 수 있는 인프라와 그리고.. 부산이라는 지역적 특성인지 모르겠지만 부산의 기업 문화가 보수적이고, 닫혀 있다는 느낌을 많이 받았는데 그 속에서 스타트업이라는 새로운 문화가 어떻게 커갈 수 있을 지 지켜볼만한 부분이라 생각 된다.

덧.
조만간 부산 센텀에서도 스타트업 벙개를 해 볼 생각인데 관심 있으신 분은 댓글 달아주세욤. 함 봅시다!!

vim 사용자를 위한 종합 패키지 spf13 Distribution

개발 일을 처음 시작할 때 vi(m)을 처음 배웠는데 배운 이유가 간단 했다. 멋있어 보여서다. 검은 터미널 화면에서 vi(m)에디터 하나로 자동완성, 문법체킹 이런 거 하나 없이 한땀한땀 코드를 입력하는 게 멋있어 보여서 배우기 시작 했다. 그야말로 겉멋 개발자였던 셈이다.

시간이 지나고 새로운 대세 에디터들(textmate, sublime, atom)이 나오면서 굳이 vi(m)을 쓸 필요가 없을 정도로 강려크한 에디터들이 등장 했다. 애정이 생긴 만큼 vi(m)을 계속 쓰고 싶었지만 vi(m)의 학습곡선이란게 이렇다. 손에 익숙해질만 하면 어려워지고…..아래 선처럼….

Vim Leaning Curve

최근에는 sublime으로 잘 써먹었고, 깃헙에서 나온 Atom에디터도 이쁘긴 한데 몇 메가짜리 로그 파일 열어보다가 느려지는 거 보곤 기겁해서 삭제해 버렸다.

그러다가 요즘 라이브코딩 티비를 보다 vi(m)으로 코딩하는 모습을 보면서 다시 vi(m)을 보다 보니 이런게 있어서 소개 해드릴려고 한다.

spf13-vim - The Ultimate Vim Distribution

curl http://j.mp/spf13-vim3 -L -o - | sh

맥에서는 터미널에서 위 명령어만으로 수많은 bundle들이 설치 된다.

게중에 NERDTree(토글 키는 <C-E>로 기본 바인딩되어 있다.)야 워낙에 유명하고, ctrlp.vim은 파일 명으로 바로 파일을 찾아서 열어주는 플러그인. 다른 에디터(sublime, atom)에는 기본 기능인데 vi(m)에도 되니깐 감동이다. ㅠ.ㅠ

강려크한 ctrlp.vim

그밖에도 git관련 플러그인도 있고 이 정도면 sublime이나 atom 안 부럽다.
.vim디렉토리에 설치된 플러그인을 리스팅해보면 아래와 같이 많다… 아마 저게 어떤 플러그인인지는 몇 년이 지난 후에나 알 수 있지 않을 까 싶다.(이렇게 많은 플러그인 때문인지 vim 구동이 좀 무겁게 느껴진다.)

vundle
vim-addon-mw-utils
tlib_vim
nerdtree
vim-colors-solarized
vim-colors
vim-surround
vim-repeat
auto-pairs
ctrlp.vim
ctrlp-funky
vim-multiple-cursors
sessionman.vim
matchit.zip
vim-airline
vim-bufferline
vim-easymotion
vim-nerdtree-tabs
vim-colorschemes
undotree
vim-indent-guides
restore_view.vim
vim-signify
vim-abolish
vim-over
vim-textobj-user
vim-textobj-indent
wildfire.vim
vim-litecorrect
vim-textobj-sentence
vim-textobj-quote
vim-wordy
syntastic
vim-fugitive
webapi-vim
gist-vim
nerdcommenter
vim-commentary
tabular
tagbar
neocomplete.vim
neosnippet
neosnippet-snippets
vim-snippets
PIV
vim-php-namespace
vim-twig
python-mode
python.vim
python_match.vim
pythoncomplete
vim-json
vim-less
vim-javascript
vim-jst
vim-coffee-script
HTML-AutoCloseTag
vim-css3-syntax
vim-coloresque
vim-haml
vim-rails
rust.vim
vim-markdown
vim-preview
vim-cucumber
vim-toml
vim-cucumber-align-pipes
salt-vim

아무튼 저같이 vi(m)을 사랑하지만 귀찮음에 한동안 vi(m)을 멀리 했던 동지(?)들이여 이 패키지로 다시 돌아오길 바란다. vi(m) 여전히 훌륭하고 멋진 에디터이다.

덧.
맥에서 vi(m)을 사용하다 보면 입력 모드에서 커맨드 모드(esc)로 변경할 때 한글 입력기로 되어 있으면 은근 스트레쓰 받는데 구글링해보니 구름 입력기 설정에서 esc키 입력시에 로마자 자동변환 옵션이 있단다. 맥에서 vi(m)사용자라면 필히 설치 하자.