정규표현식. 일반화문자열

박제권
정규표현식은… 이런 것. /blog/1, /blog/2, /blog/3 등은 /blog 와 뒤에 붙는 숫자 로 인식할 수 있고, 이를 /blog/(d+)로 표시하는 것을 정규표현식이라 한다. 그런데, 정규 라는 말을 처음 쓴 사람은 누굴까. 규칙이 있는 문자열을 일반화 시켰으니 일반화문자열 이라던가 규칙표현식 이라고 했었다면 더 많은 사람들이 더 빨리 이해할 수 있지 않았을까? 정규가 뭘까. 그안에 깊은 뜻이 있어서, 이해하고 나면 기분이 좋아질까? 궁금하다. (… 한자로 뭔가 뜻이 있겠지만…)

django 1.7, python 3, centos 6.5 디플로이

박제권
마지막으로 yum 을 써본 것이 칠팔년은 된것같다. 이번 과제에서는 centos6.5 를 써달라는 요구사항이 있었다. 요즘 유행은 nginx 일텐데.. 이것도 apache 로 해보자. 장고나 플라스크의 디플로이에는 wsgi 가 많이 쓰이는 것 같다. 이게 module 로 제공되긴하지만, 그건 python2 얘기고. python3 가 되면 또 뭔가가 안맞는다. 검색에 걸린 stackoverflow 의 답변들은 별로 쓸모가 없었고, http://novafactory.net/archives/3074 한글로 된 삽질기. https://gist.github.com/jmorton/558f7079ed2159156277 도커 스크립트인 가 큰 도움이되었다. 아래는 사실 도커스크립트를 조금 수정한 정도에 불과.

pip virtualenv

박제권
얼마전에 장고개발환경 설정하면서 썼던글 http://tech.jinto.pe.kr/321의 다른 버전. pyenv 도 좋지만, 그것 없이 virtualenv 만 쓸 수도 있다. (제 개인적인 선택은 pyenv 입니다) 대상환경은 mac 이다. (하고 싶은건 python3+django1.7) brew install python3 pip install virtualenv sudo pip install virtualenvwrapper 이제 .bash_profile 에 이렇게 쓴다. export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh 이제 virtualenv 를 생성하고 쓰면된다. virtualenv -p /usr/local/bin/python3 --no-site-packages projectnamedeactivate # 요건 가상환경 안쓸때 workon projectname # 요건 가상환경쓸때... pip install django # 이렇게 하면 장고가 해당 가상환경에 설치된다.

고 웹서버

박제권
갑작스런 뽐뿌에 잠깐 둘러보다 발견한 go-lang webserver package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "안녕하세요. Hi there, I love %s!", r.URL.Path[1:]) } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) } 시험삼아 한글을 넣어봤는데, 잘동작한다. 흠… 초현대적인 C언어를 보는 느낌.

장고 스터디 환경 python2,python3, pip virtualenv pyenv 등등등

박제권
virtualenv 만 쓸 수도 있다. http://tech.jinto.pe.kr/339 도 보시길. 오랜만에 장고쪽을 들여다보니, 파이썬3랑 파이썬2랑 섞여서 환경설정이 힘들었다. 그냥 파이썬3로 가면 속편하겠지만, 맥의 시스템에는 파이썬2가 설치되어있고, 함부로 삭제하면 안될것 같다. 게다가 오랜만에 장고를 다시 공부할 생각으로 검색하니 첫페이지에 나오는 한글 문서는 장고1.4에 맞춰져있다. 또 이녀석은 파이썬3을 지원하지 않는다. https://django-document-korean.readthedocs.org/en/old_master/intro/tutorial01.html 하지만, 만약에 어딘가에 납품하면서, “장고 버전은 좀 옛날꺼… 1.4예요” 라고 할수는 없으니…. 좀 복잡하네. 레일즈나 장고나. pyenv 일단 파이썬 버전간 스위칭을 위해서 pyenv 를 설치했다.

루비 공부

박제권
인사이트에서 샌디매츠의 책을 번역해주셨다. http://www.insightbook.co.kr/post/8327 까먹고 있던 객체지향에 대한 이야기도 다시 읽어보고. 루비에서는 어떻게 그런 원칙을 지킬 수 있는지 하나씩 사례를 들어주신다. 이런 코드는 최근에 내가 만들고 있는 넘들에서 종종 보인다. 않좋은 코드다. 경우에 따라 다르겠지만, 이렇게 배열에 직접 접근하는 방식의 코드는 나중에 배열의 구조가 바뀌면 관련 코드를 다 뒤져서 고쳐야한다. 추상화/캡슐화 다 실패한코드. 이렇게 하는게 더 좋다고 하신다. 아직 시작부분인데, 오늘 밤이 가기전에 다 읽을 수 있을 듯. 추가 : 루비의 OOP는 자바에서와는 달라져야한다.

도메인에 언더바가 있으면 안된다?

박제권
도메인이름에 언더바가 있으면 안된다는 의견도 있고, 표준을 자세히보면 그런 규정은 없다는 의견도 있는데, 루비의 open-uri 도 불법으로 해석한다. 몇가지 해법을 테스트해보았는데 동작하는 것은 이녀석 require 'addressable/uri' class URI::Parser def split url a = Addressable::URI::parse url [a.scheme, a.userinfo, a.host, a.port, nil, a.path, nil, a.query, a.fragment] end end 참고 : http://stackoverflow.com/questions/5208851/is-there-a-workaround-to-open-urls-containing-underscores-in-ruby P.S. 팁이랄까. 네이버에 블로그 만드실 때 아이디에 언더바넣지 마세요. 외부 크롤러가 가져갈 때 실패할 수 있어요. (홍보블로그.. 운영하시는 분들 참고하시라고..)

임시폴더 관리

박제권
한국의 모 클라우드 서비스를 이용중. 어젯밤 마주한 상황 서비스 관리 웹페이지에 접속하여, 서버리스트에서 시작 버튼을 누름, 상황판이 “사용”으로 바뀐후에도 ssh 접속되지 않음, 재시작버튼을 누르면 ssh 접속이 됨, 하지만 동작을 시작한지… 10분쯤 지나면 다운됨. 내가 리눅스를 삐꾸로 배워놓은지라, 어디를 봐야하는지 짐작도 못함. 그래도 주워들은 것이 있어 tail -f /var/log/syslog 를 해놓고, 10분을 기다림. 아싸, 이 파일이 맞구나, 서버가 다운될때 이런 로그를 뱉어내는 것을 확인함. Nov 21 02:31:45 localhost kernel: [ 763.

RabbitMQ

박제권
다음에 뭔가를 만들면 좀더 그럴싸하게 만들어보고자 ! “웹프론트엔드에서 어떤 요청을 받았는데, 이게 처리가 오래 걸리는 일이다. 이 경우 어떻게 처리하는 것이 좋은가. ” 라는 질문에, 쓰레드를 생성해서 일을 시키고, 브라우저에는 빨리 응답을 준다. 프로세스를 실행해서 일을 시키고, 브라우저에는 빨리 응답을 준다. 가 당장 떠오르는 방식인데, 이건 뭐, 날코딩으로 모든걸 해결하겠다는거고, 별문제는 없겠지만 그럴싸해보이질 않는다. 해서, 이런저런 해결책을 뒤져보다가 RabbitMQ가 ruby 코드를 지원한다는 것을 발견. (사실 이미 아주 오래전부터 루비 지원하고 있던 거 같은 느낌이…)

bash 버그.

박제권
버그확인 하는 스크립트는 라고 알려져 있는데 [Open sea님 블로그](http://bugbear5.tumblr.com/post/98367517131/bash) 참고), 만약 자신의 시스템에서 설명과는 다른 오류가 출력된다면, env x=‘() { :;}; echo vulnerable’ which bash -c “echo this is test”``` 라고 해보자. 우분투에서 업그레이드 방법은… 골빈해커님이 올려주셨는데 이상하게 뭔가 업데이트를 안한 느낌이든다...면. `/etc/source.list` 에 deb http://security.ubuntu.com/ubuntu precise-security main restricted deb-src http://security.ubuntu.com/ubuntu precise-security main restricted deb http://security.ubuntu.com/ubuntu precise-security universe deb-src http://security.ubuntu.com/ubuntu precise-security universe deb http://security.ubuntu.com/ubuntu precise-security multiverse deb-src http://security.ubuntu.com/ubuntu precise-security multiverse