Pages

9/27/2013

install redis on centos

cache...저도 참 좋아하는데요...콜록 ㅋㅋㅋ 사실 redis는 cache가 아니다...DB다. 난 근데 cache로 사용한다. redis는 in memory db로 memcache와 자주 비교된다.cache와 비슷한 속도를 가졌으면서 더 많은 기능을 제공한다. 캐시와는 다르게 disk에 저장 할 수도 있고 문자열, Set, Sorted Set, Hash, List등의 다양한 Data Type을 지원한다. 이미 많은 프로젝트에서 크게 기여 하고 있는 검증된!!! 환상적 오픈소스이다..콜록

그래서 오늘은 위대한 redis를 위해 redis설치를 적어 놓겠다!!!ㅎㅎ OS는 내가 좋아하는 centos^^

일단 다운받고 설치 하자. http://redis.io/
redis사이트에서 받을 수 있고 친절한 documentation도 볼 수 있다.

cd /usr/local/src
wget http://download.redis.io/releases/redis-2.6.16.tar.gz
tar xzf redis-2.6.16.tar.gz
mv redis-2.6.16/ redis
cd redis
make
바로 사용하면 된다.....설치도 쉽다...콜록
src/redis-server
클라이언트로 접속하여 테스트해 볼 수 있다.
src/redis-cli
ping
센스있다...핑퐁ㅋㅋㅋㅋㅋ 편하게 사용하기 위해 서비스에 등록하자.
mkdir /etc/redis
cp redis.conf /etc/redis
vi /etc/redis/redis.conf
필요한 설정들을 수정한다. daemonize yes loglevel notice logfile /var/log/redis.log dir /var/lib/redis
친절한 분이 스크립트를 만들어 놓으셧다. 냉큼 받아서 경로만 수정하자
wget https://raw.github.com/gist/257849/9f1e627e0b7dbe68882fa2b7bdb1b2b263522004/redis-server
vi redis-server
redis="/usr/local/src/redis/src/redis-server"

mv redis-server /etc/init.d
chmod 755 /etc/init.d/redis-server
chkconfig --add redis-server
chkconfig --level 345 redis-server on

vi /etc/sysctl.conf
vm.overcommit_memory = 1

sysctl vm.overcommit_memory=1
service redis-server start
끝~ 이제 입맛에 맛게 사용하면된다. jedis를 쓰든뭘하든 ㅎㅎ

9/25/2013

python-Rest call(urllib)

프로그래밍을 하다보면 rest call을 해야 할때가 종종 있다....별로없나?;;콜록 ㅎ python은 rest call도 상당히 편하다~ 다른 언어들도 편하지만....음 파이썬도 편하다^^ 정말 짧은 코드로 rest call을 효과적으로 할 수 있다.

언제나 그렇듯 필요한 라이브러리는 항상 훌륭한 분들이 만들어 놓으셨다^^ urllib를 사용하면 쉽게 rest call을 처리 할 수 있다.
http://docs.python.org/2/library/urllib.html document도 참 친절하다^^

모듈을 인스톨하거나 다운 받을 필요없다 바로 사용 할 수 있다. 우와~

# lib import
import json, urllib2, urllib

# target url
BASE_URL = 'http://apis.daum.net/local/geo/addr2coord'

# 사용할 api key
apikeys = [
 'DAUM_LOCAL_DEMO_APIKEY'
]

# 파라미터들
params = {
 'apikey' : apikeys[count%4],
 'q' : '성남시 분당구 율동 300-2',
 'output' : 'json'
}
# urlencode 후 rest call
req = urllib2.urlopen(BASE_URL, urllib.urlencode(params)).read()

# json data
jsonData = json.loads(req)

끝 너무 간단하다~^^ 간단해도 쓸려고 하면 기억 나지않는다..콜록... 끝

9/22/2013

python Scrapy (crawling)

crawling.....말이 크롤링이지 그냥 웹페이지를 긁어오기다 콜록.. ㅋㅋ 나는 python을 좋아한다. 훌륭한 개발자분들이 편리한 모듈, 프레임워크등을 많이 만들어 놓으셨다. 감사합니다^^

Crawling 하는 방법은 엄청 많다. 그중에서 나는 Scrapy를 사용했다...스크랩파이? 콜록 ㅋㅋ 사용법은 매우 간단하다. Scrapy Tutorial 튜토리얼도 매우 친절하게 나와있다.

당연히....python이 필요하다 ㅋㅋㅋ 2.6 또는 2.7버전이 필요하다. 3.0은 안해 봣지만 안됄지 쉽다..콜록 ㅋㅋ pip 나 easy_install을 이용하여 편하게 이지 인스톨한다..콜록

easy_install Scrapy
pip install Scrapy
설치가 끝낫다....필요한 디펜던시들은 알아서 처리해준다...편하다 콜록...ㅋㅋ

scrapy 프로젝트를 생성한다.

scrapy startproject tutorial
scrapy.cfg: 프로젝트의 설정 파일 tutorial/: 프로젝트 폴더 tutorial/items.py: 사용할 item, 뽑아낼 데이터가 들어 갈 것이다. tutorial/pipelines.py: 뽑아낸 데이터로 뭔가 처리할때 쓴다. 뭔가..ㅎ tutorial/settings.py: 프로젝트 설정 파일 tutorial/spiders/: 정보를 모아줄 거미들...ㅋㅋ동작할 크롤러들이다.

item.py에 사용할 item을 추가한다.

from scrapy.item import Item, Field
class HealthItem(Item):
 name = Field()
 phone = Field()
 address = Field()
 home_page = Field()
spiders폴더에 정보를 모아 줄 거미를 추가한다..ㅎㅎ
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector

from vwell.items import HealthItem

class HealthSpider(BaseSpider):
    # spider 이름 유니크해야한다.
    name = "health"
    allowed_domains = ["cdc.go.kr"]
    # 크롤링할 url
    start_urls = [
     "https://nip.cdc.go.kr/nip/manage.do?service=getMedicalCenterList&ARTICLECNT=100&CURPAGE=1&SIDCOD=1100000000&SelFlag=HC"
    ]
    
    # 데이터 파싱
    def parse(self, response):
  hxs = HtmlXPathSelector(response)
  healths = hxs.select('//*[@id="contents"]/div[@class="conbox sch"]/div[@class="tableA"]/table/tbody/tr')
  items = []
  count = 0

  for health in healths:
   item = HealthItem()
   item['name'] = health.select('//td')[count*4].select('text()').extract()[0]
   item['phone'] = health.select('//td')[count*4+1].select('ul/li')[0].select('text()').extract()
   item['phone'].append(health.select('//td')[count*4+1].select('ul/li')[1].select('text()').extract()[0])
   item['address'] = health.select('//td')[count*4+2].select('text()').extract()[0]
   item['home_page'] = health.select('//td')[count*4+3].select('a/@href').extract()[0]
   count += 1
   items.append(item)

  return items
HtmlXPathSelector의 select를 이용해 html을 파싱한다. 사용법은 금방 적응 할 정도로 간단하다. tag이름과 / 로 태그를 선택할 수있다.
hxs.select('//ul/li')
@를 이용하여 태그의 properties에 접근할 수있다.
hxs.select('//*[@id="contents"]/div[@class="conbox sch"]/div[@class="tableA"]/table/tbody/tr')
text()로 value값을 가져 올 수 있다. extract()를 할때 List로 반환 된다는데 주의하자.
hxs.select('//ul/li/text()').extract()
scrapy.cfg 파일있는 폴더로가서 실행해보자.
scrapy crawl health -o items.json -t json
크롤링한 결과는 items.json 파일에 저장되어있을 것이다.

크롤링한 데이터로 다른 처리를 추가하고 싶다면 pipeline을 이용하면된다. pipelines.py파일에 처리할 클래스를 추가하고 settings.py등록해주면 끝이다. 간단하다. 나는 유니코드가 보기 싫어서 스트링으로 저장하는 pipeline을 추가햇다.

class JsonWriterPipeline(object):

 def __init__(self):
  self.file = open('healthList.json', 'w')

 def process_item(self, item, spider):
  newItem = {}
  newItem['name'] = item['name'].encode('utf-8')
  newItem['phone'] = item['phone']
  newItem['address'] = item['address'].encode('utf-8')
  newItem['home_page'] = item['home_page'].encode('utf-8')

  line =  '{ "name" : "%s", "phone" : ["%s", "%s"], "address" : "%s", "home_page" : "%s" },' %(newItem['name'], newItem['phone'][0].encode('utf-8'), newItem['phone'][1].encode('utf-8'), newItem['address'], newItem['home_page']) + '\n'
  self.file.write(line)
  return item
settings.py에 등록해준다.
ITEM_PIPELINES = [
    'vwell.pipelines.JsonWriterPipeline'
]
다시 실행한다. 끝~ 웹페이지 크롤링....쉽다...콜록^^
source : https://github.com/semicolok/python-scrapy

9/05/2013

install mariaDb(centos)

난 공짜를 좋아한다...그래서 mariaDb를 좋아한다....(그래서 자꼬 머리가 빠지나?..콜록) mariaDb는 mysql이랑 완전 똑같다. 너므 비슷하다~ 더 빠르다는데...그건 잘 모르겟다..난 둔하다 ㅠㅠ ㅋㅋㅋ

설치하는 방법은 매우 간단하다~ 근데 외우지는 못한다.;;;ㅎㅎ 그래서 정리해 놓는다.

yum으로 인스톨 할테다. repo파일을 추가하자.

 vi /etc/yum.repos.d/MariaDB.repo
붙여넣긔!
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5.32/centos6-amd64/
# 버전이나 os는 알맞게 변경
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
yum update 하고 인스톨 실행!!
yum update
yum install MariaDB-server MariaDB-client
service mysql start
끝...너무 성의없나? 간간히 수정해야지 ㅎㅎ 콜록!

install nginx(Centos)

nginx 설정이 apache보다 쉽고(개인적으로...콜록) 성능도 더 좋은(잘 느끼진 못하지만^^;) nginx설치 방법을 정리해보겠다. mac을 좋아하지만 개발할때 많이 사용하는 centos를 기준으로 정리해보겠다.

설치방법은 간단하다. 우선 다운 받고 압축을 푼다.

wget http://nginx.org/download/nginx-1.5.4.tar.gz
tar -xzvf nginx-1.5.4.tar.gz
압축 풀고 make / make install 하면 끝난다. make 하기전에 gcc, make 등 필요한 것들을 먼저 install 한다.
yum install gcc gcc-c++ make autoconf wget libxml2-devel perl perl-devel perl-ExtUtils-*  pcre-devel openssl-devel zlib library cpan
난 yum을 좋아한다...콜록 prefix와 module을 설정하고 make/make install
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_perl_module --with-mail_ssl_module --with-http_mp4_module --with-mail
make
make install
다음은 실행 파일을 만들어 준다. 그래야 편하다...
vi /etc/init.d/nginx
붙여넣긔!!!
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemin
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /usr/local/nginx/conf/nginx.conf
# pidfile: /var/run/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
 
lockfile=/var/lock/subsys/nginx
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
$nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
퍼미션 변경하고 실행하고 정지
chmod +x /etc/init.d/nginx
service nginx start
service nginx stop
이상!!! 콜록....

9/04/2013

Sublime Text Keyboard shortcuts - OS X

오늘은 사용할려고 하면 생각안나는 단축키를 정리해 보겠다.
Edit 툴마다 다 비슷하지만 조금씩 다른 단축키 쓸때마다 헷갈린다.
나만 그런가?^^ 콜록
먼저 내가 가장 많이 쓰는 Sublime text 단축키를 먼저 정리해 보겠다.
sublime text는 친절하게 shortcuts을 정리한 문서를 제공한다.
sublime text keyboard shortcuts
다쓰는건 무리고....자주 쓰는 것만 정리해야겠다. 너무 많다...콜록

시작!! start!!

cmd + x : Delete line
cmd + z : undo
cmd + Shift + z : redo
cmd + y : redo
Ctrl + k : 라인의 현 커서 위치 이후로 삭제
cmd + ENTER : Insert line after
cmd + Shift + ENTER : Insert line before
cmd + Shift + d : Duplicate line(s)
Ctrl + cmd + UP/DOWN : Move line/selection up, down
cmd + ] : 들여쓰기
cmd + [ : 내어쓰기
cmd + / : 주석처리/주석해제
cmd + Shift + v : Paste and indent correctly
cmd + l : Select line - Repeat to select next lines
Ctrl + Shift + UP/DOWN : 세로영역 수정
cmd + f : Find
cmd + Alt + f : Replace
cmd + t, cmd + p : 파일명으로 탭 찾기
cmd + Shift + f : 특정 폴더나 파일에서 내용 검색
Ctrl + g : 입력한 라인으로 이동
cmd + i : 현재 단어 찾기
cmd + Shift + g : 현재 단어 모두 찾아서 선택
Ctrl + Shift + m : 괄호 안의 내용을 모두 선택
cmd + option + LEFT/RIGHT : 탭 이동
Ctrl + m : 여는 괄호/ 닫는 괄호로 이동
cmd + Shift + t : Open last closed tab
cmd + = : font size 크게
cmd + - : font size 작게
cmd + Shift + p : open prompt
Ctrl + ` : open sublime console
cmd + Alt + 1,2,3,4 : 세로분할 수
cmd + Alt + 5 : 그리드 보기
Ctrl + 1,2,3,4 : 세로분할 창 선택
Ctrl + Shift + 1,2,3,4 : 탭을 세로분할창으로 이동
cmd + K, cmd + U : Transform to Uppercase
cmd + K, cmd + L : Transform to Lowercase
이상 sublime text 단축키 끝.^^ 콜록.

9/03/2013

Mac OS X localhost name modification

간단한 설정 부터 올려보자. 콜록
개발을 하다 보면 localhost 명을 변경해야 할때도 있다.
그리고 변경하면 수월한 작업이 가능하다.
mac을 사용하기 때문에 mac에서 하는 방법만 기억해 놓아야지 ㅎㅎ
그리고 윈도우 설정은 너무 쉽다...도 쉽지만;;;
내 기억이 맞다면
windows는 system32 > drive > etc > host
파일일것이다.

맥은
sudo vi /private/etc/hosts
dscacheutil -flushcache

위 코드와 같이 파일을 수정하고 캐쉬를 날려주면 되겠다.
나중엔 이쁘게써야지^^
영어로 써야지...콜록 ㅋㅋㅋ

9/02/2013

Blog start

어떻게 사용하는 거지? 콜록.... 처음 블로그를 해보는 초보로서....난감하다. 글이 올라가긴 하는건가...기침이 난다...콜록 반말해도 되나?^^ 아무도 안보니 상관없겟다. ㅋㅋㅋ