이러저러한 이유로 Linux에 message queue를 사용하고 있는데, 메시지의 길이가 일정 수치를 넘어가면 문제가 발생했다. sysctl로 확인하고 값을 변경해도 동일. $ sysctl kernel.msg{max,mni,mnb} kernel.msgmax = 65535 kernel.msgmni = 16 kernel.msgmnb = 65535 $ 각 고유한 값을 변경하는 방법은 아래와 같다. $ sysctl -w kernel.msgmax=655350 kernel.msgmax = 655350 보이기에는 잘 변경 된 것처럼 보이지만 실제로 긴 문자열은 처리가 안되더라. 하아. 오랜만에 커널 코드를 열어보자. 서버에서 사용하는 커널 버전은 아래 링크를 통해 구했다. https://www.kernel.org/..
※ 본문에 티스토리 기술 문제로 이미지를 로드 할 수 없게 되었는데 읽는데 큰 지장은 없을 겁니다 이미지에서 문자를 추출하는 기술은 광학 문자 인식(Optical character recognition; OCR)이라는 이름으로 불린다. 이미 많은 OCR 기술이 오픈소스로 등록되어 있는데 여기서는 tesseract-ocr을 사용해서 이미지에 있는 문자를 추출해 보도록 하자. tesseract는 구글에서 지원하는 프로젝트이고 인식률이 OCR 기술 중 굉장히 높은 편에 속한다고 한다. 우선 tesseract-ocr을 다운로드 받고 설치해야 하는데 과정은 아래와 같다. (wiki를 참고하면 더욱 자세하게 확인할 수 있다) 필요한 패키지를 설치한다. $ sudo apt-get install autoconf aut..
tesseract-ocr을 configure 하다보면 아래와 같은 오류가 출력되는 경우가 있다. configure: error: Leptonica 1.74 or higher is required. Try to install libleptonica-dev package. 무려 Ubuntu 16.04 인데 말이다!! 우선 이미지 프로세싱에서 사용되는 leptonica 버전을 1.74 혹은 그 이상으로 올려야 한다는 의미인데, tesseract-ocr wiki 에서 아래와 같이 관련된 내용을 찾아 볼 수 있다. but if you are using an oldish version of Linux, the Leptonica version may be too old, so you will need to build..
리눅스 시스템은 부팅시에 자동으로 스크립트 실행을 통해 특정 데몬의 시작 여부를 결정할 수 있는데, 이를 간편하게 제어할 수 있도록 제공되는 명령어라 chkconfig 되시겠다. 명령어의 도움말을 보면 아래와 같이 무척 간단해 보인다.chkconfig --help 우선 이 명령어를 이해하기에 앞서 CentOS의 부팅모드를 이해하고 있어야 한다. /etc/inittab 에서 현재 시스템의 모드를 확인할 수 있는데, 샵(#)은 주석이니 신경 쓸 필요 없고 마지막에 id 값을 보면 3 (Full multiuser mode)으로 설정 된 것을 기억한다. 가장 보편화되어 사용하는 sshd의 상태를 예제로 살펴보기로 한다. 현재 sshd의 상태는 아래와 같고, 0~6까지 나타내는 숫자는 바로 위에 inittab에서..
Linux에서 Application을 개발하다 보면 가장 힘든 것이 데몬이 "어쩌다가" 죽는 경우이다. 죽는 빈도가 잦거나 특정 상황이 유추되면 그나마 괜찮은데, 짧게는 일주일, 길게는 한달에 한번 죽는다면 디버깅 하기도 힘들고 관련 정보를 얻는 것도 녹록치 않다. 이때 유용하게 사용할 수 있는 것이 CentOS 6 이상에서 기본 제공되는 abrt를 이용하는 것이겠다. (CentOS 5 이하는 아래 내용이 포함되어 있지 않다.) 우선 이 기능은 프로그램 상에 올라가는 데몬이 죽게되면 coredump를 파일로 남기는 것이고, 후에 이 coredump를 gdb에서 활용해서 bracktrace 등 다양하게 디버깅이 가능하겠다. 기능을 활성화하는 방법은 아래와 같다. 1. /etc/abrt/abrt-action..
프로그램을 협업으로 개발하다보면 어느정도 규칙이 필요하다. 그렇지 않고 본인 스타일대로 개발을 시작하면 나중에 merge된 소스는 엉망이 될 수 있기 때문이다. 이런 사태를 방지하기 위해 프로그래밍 규칙은 변수명, 함수 스타일, 들여쓰기 등등이 있지만 여기서는 주석에 대해 다뤄본다. (이러한 규칙은 프로젝트 별로 다르고, 언어마다 천차만별이다.)이 포스팅은 주석을 일관된 형식에 맞춰 달 수 있도록 도와주는 툴킷인 Doxygen에 대한 설명이다. 우선 Doxygen은 Vim의 툴킷으로 아래 링크에서 다운로드할 수 있다. http://www.vim.org/scripts/script.php?script_id=987본인이 사용하는 Vim의 버전에 맞는 툴킷을 받아 설치하도록 하자. 설치는 다운로드 받은 Doxy..
앞서 Cloud Shell을 이용해서 인스턴스에 접속하는 방법을 살펴봤는데, 이번에는 내가 사용하는 머신에서 직접 SSH를 접속하는 방법에 대해서 설명한다. 환경은 리눅스(우분투)지만 다른 OS라도 크게 다르지 않을 것이다.전체 시나리오를 요약하면 다음과 같다.1. 로컬에서 ssh 접속을 위한 rsa key 생성 2. 생성한 key 를 Google Cloud Platform 콘솔에 등록천천히 살펴볼텐데 우선 GCP에 등록할 rsa key 를 생성해야 한다. rsa key 의 default는 id_rsa 라는 이름으로 지정 되는데 혹시 이미 사용중일 수도 있으니 적당한 이름으로 변경해서 사용하도록 하자. $ ssh-keygen -t rsa -f ~/.ssh/[KEY_FILE_NAME] -C [USERNAM..
GCP 는 기본적으로 Google Cloud Shell 을 제공한다. Cloud Shell 에서는 프로젝트를 관리하거나 인스턴스를 제어 하는 등 웹에서 할 수 있는 대부분의 것들을 Shell 에서 사용할 수 있도록 해준다. 사용하려면 우측 상단에 터미널 아이콘을 클릭하도록 한다.잠시 기다리면 브라우저 하단에서 Shell 을 확인할 수 있는데, 새로운 브라우저로 빼서 확인해보도록 하자. 사용 가능한 대부분의 명령어는 gcloud 라는 커맨드로 제공되며 각 인자는 tab 으로 단어 자동완성을 지원한다. 공백에서 tab을 누를 경우 사용 가능한 인자 목록이 출력되니 참고하도록 하자.아래는 간단하게 인스턴스 목록을 출력해보는 과정이다. 과정에서 각 인자마다 tab 을 눌러 사용 가능한 명령어를 확인해보았다.oo..
무료 크레딧 기간동안 부지런히 테스트를 해야 한다. 이번에는 Compute Engine 에 VM 인스턴스를 생성해보도록 하겠다. VM 인스턴스는 가상의 서버가 존재하는 것처럼 사용하는 것이 가능하도록 해준다. 서버의 용도는 개인에 따라 구분되겠다. 웹서버가 될 수도 있고, 기타 앱 테스트를 위한 공간이 될 수도 있다.우선 아래 그림처럼 메인 대시보드에서 Compute Engine 항목에서 VM 인스턴스를 클릭하도록 한다.최초 진입시 화면은 아래와 같다. 샘플 앱을 제작하려면 "빠른 시작 사용"을 클릭하면 되고 직접 모든것을 설정하려면 "만들기" 버튼을 선택하면 되겠다. ("가져오기" 버튼은 cloudendur 라는 곳에 있는 데이터를 마이그레이션 하는 듯?)기본적인 화면 구성은 아래와 같다. 크게 정리해..
우선 GCP에서 무엇인가를 하려면 프로젝트를 등록해야 한다. 서버 용도나, 기계학습 용도나 프로젝트 단위로 관리되는 것으로 보인다. 여기서는 기계학습을 사용하기 위한 준비과정을 다룰텐데, 기계학습 API를 사용하려면 우선 "사용자 인증 정보"가 필요하다. 그것보다 더 먼저 필요한 것은 프로젝트를 등록하는 것이겠다. (사실 모든 것의 기본은 사용자 인증 정보이다.) 아래처럼 새 프로젝트를 등록하도록 한다. 프로젝트 이름은 일부 특수문자는 사용할 수 없으며 소문자로 자동 변환 된다.프로젝트에 적당한 이름을 붙이고 "만들기" 버튼을 누르면 프로젝트가 생성이 된다. 진행되는 과정을 잠시 기다리도록 한다.이제 프로젝트가 완성되었고, 앞서 언급한 사용자 인증 정보를 만들어야 한다.우선 API 키를 만들도록 한다. ..
GCP(Google Cloud Platform) 를 사용하는 과정을 기록하도록 한다. 본편에서는 가입하는 과정에 대해 기술하고, 이후부터 API 사용법 등에 대해 다뤄보도록 하겠다.우선 사용을 위해 cloud.google.com 으로 접속을 한다. 필요하다면 구글 계정으로 로그인을 하고 아래 TRY IT FREE 버튼을 클릭하도록 하자.다음 화면에서 국가를 입력하고 여러가지에 대해 동의하도록 한다. (동의하지 않으면 계속 진행할 수가 없다.)이어 주소정보를 기입하도록 하자. 옆에 도움말처럼 무료 크레딧은 $300 이 주어지며, 12개월 동안 사용 가능하다.결제 옵션으로 신용카드 정보를 입력한다. 자동 가입 방지를 위한 절차이며, 무료 평가판이 종료되어도 자동으로 청구되지 않으므로 안심할 수 있겠다. (사..
삼성역 코엑스 그랜드볼룸에서 진행 된 GCO(Google Cloud Onboard)에 다녀왔다. 섹션의 내용에 GCP(Google Cloud Platform)와 머신러닝에 대한 부분에 큰 관심이 있었고 근래에 다녀온 AWS의 Cloud와 비교해보고 싶기도 했다. 07시 45분쯤. 너무 이른시간에 도착해서 한산한 모습이다. 그랜드볼룸에는 ISEC 등의 컨퍼런스가 진행 될 때만 와서 그런지 부스 없는 이런 한산함은 적응이 안되더라. 조금 지나니 하나둘 사람들이 모이기 시작했고 파노라마 욕심에 찍어봤는데 역시 엉성하다. 이런것도 해본 놈이 한다고(...) 9시 30분 조금 지나자 세미나장으로 입장할 수 있었다. 화면 슬라이드에는 금일 진행되는 교육에 대한 진행 과정 및 경품 안내가 나오고 있었다. 잠..
VIM에 낱말 자동완성 기능은 bash, php, python 등 스크립트 언어를 개발할 때 무척 편리하다. C/C++ 같은 경우 선언되지 않은 변수를 사용하면 바로 compiler가 에러를 내뱉지만, 스크립트 언어는 변수명에 오타가 있어도 선언과 동시에 사용이 되어버리기 때문이다. 우선 낱말 자동완성 기능을 사용하려면 VIM 공식 홈페이지에서 autocomplpop 관련 플러그인을 다운받고 설치해야 한다.링크를 통해 접속하면 아래와 같이 버전별로 다운받을 수 있으니 적당한 버전을 다운 받도록 하자. (간혹 VIM과 버전 호환이 맞지 않는 경우가 있으니 참고하도록 한다.) 다운받고 압축 파일 내부를 보면 세 개의 폴더가 있다. 각 폴더 별로 설정파일 한 개 씩이 존재하는데 모두 그대로 VIM 설정 폴더 ..
stackoverflow에 질문을 작성하고 Post Your Question 버튼을 눌렀는데 아래와 같은 메시지가 나오면서 글 작성이 완료되지 않는 경우가 있다. You can only post once every 90 minutes. stackoverflow는 동일한 IP에서 글이 작성되는 것을 어느정도 막고 있는 듯 하다. 개인적인 생각으로는 도배하는 행위를 차단하기 위해서 그렇지 않을까? 명성(reputation)이 더 쌓이면 이런 문제가 없을 것 같기도 하다. 여하튼 이런 경우는 보통 회사에서 주로 발생하는데 개인 PC에서 사용되는 IP는 사설 네트워크로 할당되어 있고, 회사 방화벽쪽에서 NAT(network address translation)를 통해 사설 IP가 공인 IP로 변경되어 인터넷이 ..
AWSomeDay가 세종대학교에서 열려 참석했다. 평소 AWS에 무척 깊은 관심이 있었지만 선뜻 계정을 만들지 못하고 있었는데, 이유인즉 무료티어가 1년이라 최대한 시간을 올인해서 공부할 수 있는 시기에 계정을 생성하고 싶었기 때문이다. 한편 AWS 관련 정보는 유저 그룹 등에서 얻고 있었지만 많이 부족해서 이번 AWSomeDay는 내게 꿀 같은 교육의 시간이었다. 기대가 커서 아침 일찍부터 세종대학교를 찾았다. 입장이 9시 30분까지인데 7시 30분쯤 도착했다는 후문... 이미 세종대학교 길거리에는 AWSomeDay를 알리는 깃발이 잔뜩 꼽혀있었다. 사전등록을 했지만 전산 오류로 정상적인 인증이 이루어지지 않았다. 스탭 이야기로는 간혹 그런 경우가 있다며 현장 등록을 권하였고, 아마도 내가 1등 참석자..
문자열을 특정 구분자로 잘라서 파싱할 때 유용하게 사용되는 함수가 바로 strtok 되시겠다. 하지만 많은 웹사이트 글처럼 이 함수는 thread 에서 안전하지 못하다. 즉, 의도치 않게 동작할 수 있다는 의미인데 어디에도 명쾌하게 이유를 설명한 글이 없어서 직접 작성해본다. 우선 strtok 의 함수 원형을 glibc 에서 찾아보면 아래와 같다. /* Parse S into tokens separated by characters in DELIM. If S is NULL, the last string strtok() was called with is used. For example: char s[] = "-abc-=-def"; x = strtok(s, "-"); // x = "abc" x = strtok..
https://www.openssh.com/releasenotes.html OpenSSH 6.9/6.9p1 (2015-07-01) The default for the sshd_config(5) PermitRootLogin option will change from "yes" to "no". 7.1p2로 패치하고 ssh 접속이 안되서 엄청 삽질 했는데 답은 릴리즈 노트에 있었다. 당장은 sshd_config도 패치할 때 신경을 쓰던지 소스를 수정해서 배포해야겠다. 패치 링크
윈도우로 치면 "바로가기" 같은 개념으로, 리눅스에도 링크 기능이 있다. 특정 파일이나 디렉터리를 링크 걸어 사용할 수 있는데, 링크에는 두 종료가 있다. 첫 번째 : 하드 링크 (hard link)두 번째 : 심볼릭 링크 (symbolic link) 두 개 모두 처리하는 역할은 같지만 개념이 약간 다르다. 그 개념을 바로 잡고 적절하게 사용할 수 있어야겠다. 하드 링크 (hard link)원본 파일과 동일한 inode를 가진다. 그렇기 때문에 원본 파일이 삭제 되더라도 원본 파일의 inode를 갖고 있는 링크 파일은 여전히 사용 가능하다. 사실 링크라는 표현도 애매하다. 같은 inode를 가르키는 서로 다른 이름이라고나 할까? 원본이라는 개념이 없다. 아래 잠깐 예제를 살펴보자. 우선 테스트를 위해 t..
pip로 설치된 package 목록을 보기 위해서는 pip에 freeze 옵션을 사용합니다. freeze에 대한 옵션 설명은 아래와 같습니다.freeze Output installed packages in requirements format. 실제로 사용해보면 아래와 같이 설치된 package 리스트를 볼 수 있습니다. 친절하게 버전까지 출력이 되네요. 특정 package에 대한 보다 자세한 정보를 얻기 위해서는 pip에 show 옵션을 사용합니다.show에 대한 옵션 설명은 아래와 같습니다.Show information about installed packages. 사용해보면 버전정보 뿐만아니라 기타 유용한 정보도 함께 출력됩니다. 특히 Requires가 인상적이네요.
virtualenv로 프로젝트 환경(tensorflow)을 구축했는데 pycharm에서 동작시키는 방법을 몰랐다. 처음에는 그냥 터미널 vim에서 코딩하려했으나.. 역시 프로젝트 규모가 커지면서 한계가 있더라. 일단 python 언어 자체가 vim에 최적화된 언어는 아니니까. 그래서 결국 pycharm-community를 설치하고 virtualenv로 구축한 환경을 연동 시켜봤다. 핵심은 프로젝트의 인터프리터(Interpreter)를 virtualenv에 있는 python으로 지정하는 것이다. 우선 Settings을 열면 아래와 같은 화면이 보인다. 메뉴 중 Project Interpreter를 선택하고 우측에 보이는 톱니바퀴를 클릭한다. 다시 우측에 플러스(+) 버튼을 누르면 인터프리터를 추가할 수 있..
- Total
- Today
- Yesterday