협업툴로 굉장히 명성높은 슬랙에 보면 봇이 존재한다. 기본적으로 협업 공간을 생성하면 SlackBot 이라는 놈이 있는데, 이 SlackBot은 슬랙을 사용하는데 미비한 도움을 주는 .. 그다지 스마트 하지 못한 헬퍼 봇이다. (하물며 영어로 말한다. 당연한건가?) 하지만 슬랙이 명성 높은데는 다 이유가 있다. 다른 APP들과 연동이 쉽고 많은 API를 제공하기 때문인데 그 중에 Bot을 생성할 수 있도록 도와주는 BOT API도 있다. 그렇다면 우리 기호에 맞도록 헬포봇을 만들어보자. 우선 아래 링크를 통해 봇을 생성할 수 있는 페이지로 이동한다.https://api.slack.com/bot-users 그리고 아래 화면에서 "creating a new bot user" 를 선택하도록 한다. 브라우저에 ..
한국과학기술회관에서 진행된 머신러닝 세미나에 다녀왔다. 일주일을 시작하는 월요일에다가 평일 오후 시간이라 회사에서 점심을 챙겨먹고 강남역으로 이동. 이번 세미나에 대한 정보는 텐서플로우 코리아에서 얻을 수 있었다. 일단 참석하게 된 계기는 요즘 머신러닝이라고 하는 분야에 개인적으로 무척이나 흥미를 갖고 있었고, 해당 분야 지식에 대한 갈증이 있었기 때문이겠다. 세미나장 건물에 도착해서 마침 1층에 커피숍이 있길래 진한 아메리카노 한잔과 함께 세미나가 열리는 대회의실로 이동. 웬걸.. 세미나장 앞에서 무료로 커피를 나눠주고 있다... 커피를 나눠주는 것 보니 규모가 작은가? 싶었지만 이내 대회의장으로 들어가보니 엄청나게 넓은 홀은 이미 앉을틈이 없을 정도였다. 역시 이쪽 분야에 대한 사람들의 관심은 핫하구..
요즘 주식에 관심이 생겨서 소소하게 참여하고 있는데, 소액임에도 불구하고 은근히 신경쓰여서 계속 모니터링 하게 된다. 잠깐잠깐 보는 것 조차 시간이 아깝게 느껴지는 시기가 올 때 쯤... 평소 개발을 터미널 환경에서 하고 있었기 때문에 모니터링 할 수 있는 커맨드를 만들게 됐다. 뭐 사실 겸사겸사 python 공부도 하고 말이다. #!/usr/bin/env python #-*- coding: utf-8 -*- import sys try: import requests from bs4 import BeautifulSoup except ImportError: print("Please install requests, BeautifulSoup.") def usage(): print "Usage: %s code" ..
DocuWiki를 사용중이었는데 그 동안은 시간 좌표를 찍을 일이 없어서 시간 동기화 개념이 없었다. 그러던 중 포스팅에 "서명"을 이용할 일이 있었는데 현재 시각이 아닌 GMT가 찍히고 있었다. 서버는 분명 KST로 설정되어 있었지만 DocuWiki에서만 그렇게 인식이 된것이다. 아니 더 정확히 말하면 php 설정이 그러했다. 해결방안으로 php.ini에 date.timezone 이라고 써있는 부분에 Asia/Seoul 값을 넣어준다.date.timezone = Asia/Seoul 그리고 httpd 서비스를 재시작해준다.service httpd stopservice httpd start 정상적으로 시간 좌표가 출력되는 것을 확인해주면 되겠다. 아래 링크를 참고하면 더 도움이 될 수 있겠다. https:..
기본적으로 virtualbox를 설치하면 USB 모듈이 "USB 1.1(OHCI) 컨트롤러(1)"로 설정되어 있다. windows에서 정상적으로 인식 시키기 위해서는 USB 2.0이나 3.0을 선택해야 하는데, 이때 선택으로 하게 되면 아래와 같이 "잘못된 설정 감지됨" 이라는 경고 문구가 출력된다. Virtualbox 공식 홈페이지에서 관련된 확장팩을 배포하고 있다. 이곳을 클릭해서 설치된 virtualbox의 버전과 호환되는 Extension Pack을 설치 받도록 하자. 내 경우는 위 방법을 통해도 USB가 즉시 보이지는 않더라.. 게스트 확장 CD를 넣고 추가적인 설치도 했으나 여전히 동작하지 않았었는데 Host(Ubuntu)를 재부팅하니 정상적으로 인식이 되더라. 아마도 virtualbox 확장..
image import$ docker load -i image export$ docker save -o container import$ docker import ./backup.tarcontainer export$ docker export container_name > ./backup.tar image를 export 할 때 동일한 REPOSITORY가 여러개 존재하는 경우 마지막 TAG가 save 되는데, 특정 TAG는 콜론(:)으로 지정할 수 있다. 예를 들면 아래와 같다.$ docker save image_name:16.04 > ./backup.tar 참고https://docs.docker.com/engine/reference/commandline/import/https://docs.docker.co..
한글이 깨지는 문제 때문에 파일을 iconv로 변환하거나 vim에서 fileencoding을 변경하는 일이 종종 있다. 하지만 이러한 명령어가 언제나 말을 잘 듣는 것은 아니고 일단... 긴 명령어를 기억해야 하는 것이 녹록치 않다. 그래서 그냥.. vimrc에 등록해놓고 사용하련다.utf-8과 euc-kr을 왔다 갔다 하면서 사용할 수 있겠다.map :e ++enc=utf-8 map :e ++enc=euc-kr이건 단순히 소스코드를 다운받고 한글 주석을 디버깅 하는 용도로 사용하면 요긴하겠다.
python에서 curl을 사용하고자 pycurl을 pip로 인스톨 시키는데 아래와 같은 에러가 발생했다. Downloading/unpacking pycurl Running setup.py egg_info for package pycurl Traceback (most recent call last): File "", line 16, in File "/tmp/pip-build-root/pycurl/setup.py", line 563, in ext = get_extension() File "/tmp/pip-build-root/pycurl/setup.py", line 368, in get_extension ext_config = ExtensionConfiguration() File "/tmp/pip-build..
gitlab 운영 중 서버의 IP를 변경하게 되면 이것저것 신경써줘야 하지만 특히 아래 내용을 확인해줘야 한다. 일반 유저들이 프로젝트 clone을 위해 복사하는 주소인데 여기 노출되는 주소도 정상적으로 변경이 되어야 하겠다. 우선 변경하는 방법은 서버에서 아래 파일을 수정하는 것이다. /etc/gitlab/gitlab.rb ## Latest options listed at https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/files/gitlab-config-template/gitlab.rb.template ## Url on which GitLab will be reachable.## For more details on configuring extern..
새로 생성되는 Container는 기본적으로 docker0 인터페이스를 사용하고, 별다른 설정을 건드리지 않았다면 bridge 모드로 동작한다. 또한 Container의 IP는 docker가 관리해줘서 172.17.0.0/16 대역으로 설정된다. 일종의 DHCP leasee 같은 개념이 되겠다. 여기서 한가지 알고 넘어가야 하는 사실은 IP가 유동이라는 사실이다. 한번 Container가 올라오면 IP가 변경될 일이 없지만 Container를 재시작하는 경우 때때로 IP가 변경된다. 아래와 같은 예를 들어보자. 이렇게 운영중이던 서비스에서 Docker 재시작으로 인해 2번 Container (172.17.0.3) 를 먼저 시작하고 1번 Container (172.17.0.2) 가 시작되었다면 Docker..
[ 최초 이미지 다운로드 ]아래처럼 이미지 다운로드를 진행한다. docker pull :docker search를 통해 어떤 버전을 다운로드 받을 수 있는 지에 대한 내용은 차후 포스팅예를들어 보면 다음과 같다. docker pull centos:6.7 [ 컨테이너 생성 ]아래와 같이 생성한다. -v, -p 는 옵션이니 생략 가능하며 적절하게 수정할 수 있겠다. docker run -d -it --name -v /pkg:/pkg \ -p 8081:80 -p 8026:25 : /bin/bash 잠깐 구문을 뜯어보면 컨테이너 이름은 에서 지정 될 것이고, 컨테이너를 생성하기 위한 이미지는 :에 centos:6.7 처럼 넣어주면 된다. -v는 host에 pkg라는 디렉토리를 guest에서 /pkg라는 디렉토리..
얼마전 데스크탑을 Ubuntu로 변경하고 가상머신에 win7을 설치했는데 guest os에서 사운드가 나오지 않는 문제를 겪었다. 음악을 못듣는건 둘째치고 모든 경고나 알림 등을 받을 수 없는게 좀 타격이 컷다. 관련해서 조금 검색해보니 host와 guest간의 호환성이 있는 사운드 카드가 따로 있는 모양이다. 우선 virtualbox에 사운드 설정을 아래처럼 변경해준다. 캡쳐는 guest가 활성화 되어 있는 상태라 설정이 음영으로 disable되어 있는데 guest를 종료하고 설정해야 한다. 아마도 기본설정이 "인텔 HD 오디오" 일 텐데 아래처럼 ICH AC97로 변경해준다. 이게 끝이다. 무척 간단하게 해결 되었네. ICH AC97 드라이버는 아래 경로에서 다운로드가 가능하니 참고하자. http:/..
virtualbox에서 OS(CentOS-6.4 64bit)를 복제하고자 할 때 인터페이스에 문제가 발생합니다.(모든 네트워크 카드의 MAC 주소 초기화 활성화 했음) 문제 내용은 eth0가 사라진다는 것인데요.eth0가 사라지고 eth1가 생깁니다. 이것은 아마도 virtualbox에서 MAC주소를 초기화 하지 못하는 것으로 보입니다.(32bit 복제 시에는 문제 없음) 해결 방법은 아래 파일을 직접 수정하는 겁니다./etc/udev/rules.d/70-persistent-net.rules eth0의 MAX주소가 원본 이미지와 동일하네요. 그래서 부팅 시에 인터페이스 생성에 실패하고 다음 인터페이스인 eth1을 생성했던 겁니다.이제 eth0 부분을 삭제하고 NAME="eth1"을 NAME="eth0"로..
nmap은 보통 host의 열린 포트를 확인하는 용도로 많이 사용 된다.사실 nmap은 더욱 많은 기능을 내장하고 있는 생각보다 큰 프로젝트인데, 이번에는 host의 ciphers를 확인하는 방법에 대한 명령어를 확인해본다. nmap --script ssl-enum-ciphers.nse example.com -p 25 example.com의 25번 포트(smtp)에서 사용 가능한 ciphers 리스트를 확인했다.사용 가능한 protocol별로 ciphers가 명시 된다. 재미있는 것은 위에 나열 된 순서로 Client Hello에서 ciphersuite를 찾는 다는 것. 또한 cipher의 강도도 알파벳으로 명시가 되니 사용자 입장에서 무척 편리하다. - cipher를 찾는 다른 알고리듬도 존재 한다. ..
TLS 연결 단계 중 client hello를 살펴 본다. TLS연결은 Client Hello로부터 시작이 되고,client는 자신이 사용할 수 있는 가장 높은 protocol 버전과 ciphersuite 리스트를 전송한다. 아래는 이와 관련 된 wireshark의 일부 내용(Client Hello)이다. server는 client hello 메시지로부터 protocol을 선택(높은 것 부터 확인해서 서버에서 사용 가능한)하고ciphersuite도 선택하게 된다. (선택하는 알고리듬 방식은 다양한 듯)아래는 이와 관련 된 wireshark의 일부 내용(Sever Hello)이다. 정상적인 선택이 되지 않으면 연결을 종료하며, client는 TLS connect failed를 전달 받게 된다.답답한 것은 ..
많은 파일 이름에서 특정 패턴을 찾아서 일괄 변경하기 위한 시도는 오래전부터 있었습니다.아마도 가장 흔한 방법이 rename 일텐데, rename의 설치 방법에 따라 동작 여부가 약간 달라 문제가 있죠. 일반 pkg에 built-in되어 있는 rename은 파일 명에서 패턴을 찾아 변경하는 옵션이 제공되지 않습니다.그래서 shell로 도전하게 되었습니다. 일단 결과부터 놓고 풀어나갑니다.아래는 파일 이름에서 A_A를 찾아 B_B로 변경하는 명령어 입니다. $ find . -type f | xargs -I{} sh -c 'mv -v $0 ${0/A_A/B_B}' {} ; 하나하나 풀어가며 의미를 알아봅니다. $ find . -type f현재 폴더에서 파일 리스트를 가져옵니다. $ find . -type f..
여러가지 이유로 웹셸(Web-Shell)이 필요 했습니다. 보통 Shell을 사용하기 위해서는 terminal에 접속을 해야 하는데, 이때는 console이나 telnet, ssh등의 서비스를 이용하게 됩니다.또한 그러한 서비스를 이용하기 위해서는 putty나 Xshell등과 같은 접속 프로그램이 필요하죠. - OS가 Linux, Unix같은 계통이면 패스.. 또한 80 포트는 열려 있지만 보안상의 이유로 telnet, ssh는 막혀 있는 경우가 종종 있습니다.그리하여 80으로.. 웹 브라우저에서 사용할 수 있는 Shell을 만들게 됩니다. 단, 일반 bash와는 다르게 모든 명령어를 사용할 수 있을 필요는 없습니다.어쨌든 보안을 생각해야 하므로 시스템에 장애를 유발할 수 있는 무언가는 안됩니다. - r..
multi-thread 환경의 application에서 thread의 동작을 제어하는 가장 노멀한 방법은 pthread_cond_wait, pthread_cond_signal가 되겠습니다. 이 방법의 단점으로는 signal에 의해 wait가 풀리고 동작하는데 걸리는 시간이 N초라고 가정했을때 다시 signal을 받아야 하는 시간이 N초 보다 길어야 한다는 점입니다. 그렇지 않다면 signal의 유실이 초래되어 원치 않는 결과가 도래 된다는 것입니다. 물론 이러한 상황이 존재하는 프로그래밍은 좋지 않은 방법이기에 그런 상황은 애초에 만들지 않는게 좋겠지만, 늘 예외는 있으니까요. 그렇다면, wait하는 N초 동안 받는 signal을 모두 처리 하기 위한 방법으로는 semaphore가 있습니다. semaph..
MySQL Client command-line에서 테이블이나 필드의 이름이 긴 경우 확인을 위한 명령어가 필요한 경우가 있습니다.예를 들어 테이블 이름이 기억나지 않는다면 show tables로 확인 할 테고, 필드의 이름은 desc로 확인 하겠죠? 일반 리눅스의 readline처럼 자동 완성 기능이 있다면 얼마나 편할까요?마침 필요한 기능이 정확하게 존재합니다. 바로 rehash를 사용하는 것인데요, 사용법은 여러가지가 존재합니다.Clinet 모드로 접속할 때 사용은 아래와 같습니다. $ mysql -u root -pxxxx --auto-rehash 혹은 my.cnf 파일을 수정 (이 방법은 매번 --auto-rehash를 입력해야 하는 불편함을 없애주겠네요) [mysql] auto-rehash Cli..
회사 바로 앞에 버스 정류장이 있는데, 퇴근해서 내려가 보면 눈앞에서 떠나는 버스..요즘은 버스가 정류장을 떠나면 잘 세워주지도 않죠?- 안전을 위해 당연한 거죠? 그래서 이제는 버스의 도착 시간을 미리 알아야겠다는 생각이 들었습니다사실 버스 홈페이지나 국토부 등에서 정보를 쉽게 구할 수는 있는데, 로그인이나 웹페이지 여는 것조차 우리에겐 귀찮습니다.- (검은 바탕에 흰 글씨)터미널이 눈에 더 익는 것도 사실이고 ^^;; 일단 웹에서 제공하는 서비스를 웹페이지 개발자 모드로 분석하고 PHP에서 curl 하기로 했습니다결과는 XML이기 때문에 그에 맞게 parsing 했습니다. 소스는 아래와 같습니다. 리눅스 터미널에서 실행은.. 대략 이렇게 하면 되겠죠?while [ 1 ] ;do clear;php bu..
- Total
- Today
- Yesterday