마이크로소프트웨어 2015년 12월호에 "나는 프로그래머다" 오프라인 컨퍼런스에 대한 이야기가 다루어졌습니다. 마이크로소프트웨어 2015년 12월호 요즘 출퇴근길에 나프다 팟캐스트를 무척 재밌게 듣고 있는데 여러 사람들과 함께 공유할수 있었으면 좋겠네요. 나프다 팟캐스트는 다양한 개발자들로부터 살아있는 풍부한 경험을 들을 수 있고, 과거부터 현재에 아우르는 IT의 역사교과를 듣는 느낌입니다. 올해는 놓쳤지만 내년에 같은 행사가 진행된다면 꼭 참여하고 싶습니다. "나는 프로그래머다"는 아래 링크에서 청취가 가능합니다. https://iamprogrammer.io/
shell script 에서 때로는 문자열 패턴의 일치 여부를 확인하는 것이 아니라 포함되는지 확인해야 하는 경우가 있습니다. 아래 예시를 살펴보겠습니다. AA="My name is oops" BB="oops" 변수 $BB가 $AA에 포함되는지 확인하는 방법에는 여러가지가 있겠지만 아래 두 가지 방법을 소개합니다. ( Node.js 로 비유하자면 str.includes(word) 같은 역할이겠죠 ) #!/bin/sh AA="My name is oops" BB="name" if [[ "$AA" == *"name"* ]];then echo "1st find it" fi if [[ "$AA" =~ "name" ]];then echo "2nd find it" fi 문자열 패턴을 이용한 * 방법이 있고, =~ 를..
안드로이드 소프트웨어 패치가 있길래 받았더니 뭔지 모를 Application이 설치가 되었습니다. 이름은 "스마트 매니저" 뭔가 내 핸드폰이 스마트 해지는가보다 했지만 앱 정보를 보는 순간 경악을 금치 못했습니다. 저한테 무슨 볼일이 있으신건가요.. (누구냐 넌..!!) "원격 제어", "발신전화를 가로채기합니다." 너무 노골적이지 말입니다.. 이건 삭제도 안됩니다. 무슨 의도일까요? 암만 요즘 세상에 스마트 해지려면 개인정보를 내놓아야 한다지만.. 이건 좀 너무 합니다. ㅎㅎ 관련기사 : http://www.etnews.com/20151118000374
A클래스 개발자를 채용하라 (출처 : '나는 프로그래머다' 정개발님)최상위 개발자와 최하위 개발자의 생산성의 차이는 10배에 달한다.채용의 선순환과 악순환 : A클래스 개발자는 A클래스 개발자를 뽑지만 B클래스 개발자는 C클래스 개발자를 뽑는다. 왜냐하면, A 클래스 개발자는 다른 A클래스 개발자가 자신의 자리를 위협한다고 생각하지 않지만 B클래스 개발자는 다른 B나 A클래스 개발자가 자신의 자리를 빼앗을지도 모른다고 생각하기 때문이다. 그 결과 A클래스를 뽑은 개발자 그룹은 인재의 질이 시간이 지나도 떨어지지 않지만 B클래스 이하를 뽑은 개발자 그룹은 인재의 질이 갈수록 떨어지게 되어 있다. - 구글이 잘 하고 있는것.이번 QCon내내 지겹게 들었던 말 이다. A클래스 개발자를 채용하라. 유니콘 개발자..
명령어 옵션에 낚여서 누군가의 삽질 방지 차원으로 기록해둡니다. 정확히 말하면 CentOS man 페이지에 낚였습니다. CentOS 프롬프트에서 man logger를 입력했을때 -f 옵션에 대한 설명은 아래와 같습니다. -f file Log the specified file. 이건.. 누가 봐도 특정 파일에 로그를 기록하는 것처럼 보이는데요. logger의 man페이지를 website에서 찾아보면 상이한 설명이 나옵니다. -f, --file file Log the contents of the specified file. This option cannot be combined with a command-line message. 이 옵션은 특정 파일에 로그를 기록하는 것이 아니라 특정 파일의 내용을 시스템 ..
소스관리를 git으로 할때 요즘 실리콘밸리의 핫한 프로젝트인 slack으로 push 메시지를 전달할 수 있습니다. 관련된 API의 사용법을 정리합니다. 우선 사용할수 있는 API를 다운로드를 위해 아래 링크로 이동합니다. https://api.slack.com/community 링크의 하단에 git-slack-hook 을 찾습니다. 관련된 소스를 다운도록 합니다. 다운 받은 소스를 아래 방법으로 git repository에 적용을 시킵니다. For bare repos, copy/rename it as /path/to/your/repo/hooks/post-receive. For normal/non-bare repos, copy/rename it as /path/to/your/repo/.git/hooks/p..
테이블의 컬럼 값을 변경할때 update문을 사용합니다. 일단 친절한 help를 살펴보면 아래와 같습니다. MariaDB [oops]> help update; Name: 'UPDATE' Description: Syntax: Single-table syntax: UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition] [ORDER BY ...] [LIMIT row_count] Multiple-table syntax: UPDATE [LOW_PRIORITY] [IGNORE] table_references SET col_name1..
virtualbox에 Kali Linux 2.0 설치하는 과정을 기록합니다. 우선 적당한 Kali Linux 2.0 이미지를 여기서 다운 받도록 합니다. 가상머신 셋팅은 논외로 하고 이미지가 삽입된 이후 설치과정만 살펴봅시다. 일단 이미지가 삽입되면 아래와 같이 설치 타입을 선택할 수 있습니다. 포스팅 과정에서는 Graphical install을 사용합니다. 언어를 Korean으로 선택합니다. 위치를 대한민국으로 선택합니다. 키보드를 한국어로 설정합니다. 설치가 진행됩니다. 네트워크 설정 부분인데, 각자에 맞는 호스트를 입력합니다. 따로 뭔가 운영하는게 아니기 때문에 크게 중요하지 않습니다. 도메인을 입력합니다. root에 대한 암호를 입력합니다. 중요하므로 설정한 암호는 잊지 말아야 합니다. 파티션을 ..
터미널에 접속했을때 처음 마주하는 프롬프트 메시지(이하 prompt string)를 변경해보자. 일단 prompt string을 변경하기 위해서는 환경변수에 대한 약간의 지식이 필요한데 여기서는 prompt string 만을 다루기 때문에 해당하는 환경변수의 명칭만 알면 된다. prompt string 는 기본적으로 PS1 이라는 변수를 사용한다. (PS2는 논외) 그렇다면 PS1을 어떻게 변경하나? 우리가 Shell Script 에서 다루는 변수와 동일하게 간단히 아래와 같이 변경할 수 있다. PS1='oops' 쓰고 나니 아래와 같이 변경되었다. 입력한 oops라는 문자가 그대로 출력되는 것이 확인된다. 일단 아래와 같이 원래 설정으로 되돌려놓자. PS1='\[\033[01;31m\]\u@\h\[\0..
테이블 생성시에 INT(11) 등으로 괄호 옵션을 주는 경우가 있다. 주변을 보면 의미를 제대로 알지 못하고 쓰는 경우가 종종 있다. 보통은 괄호안의 숫자는 자리수를 나타내는 것으로 많이 알고 있는데, 사실은 그렇지 않다. 실제 의미를 위해서는 zerofill 이라는 옵션과 함께 사용되어야 한다. 그렇지 않은 경우에는 무의미하다. zerofill은 말 그대로 0을 채우라는 의미고, 즉 괄호안의 숫자만큼 빈칸을 0으로 채우라는 의미다. 일단 테스트를 위해 아래와 같은 테이블을 생성한다. create table TEST(seq INT(11) not null auto_increment primary key, \ oops1_fillzero INT(1) zerofill, \ oops1_nozero INT(1) ,..
흔히 $*와 $@를 구분 없이 많이 사용하고 있는데, 사실 약간은 다르다. 레퍼런스에 보면 아래와 같이 정의되어 있다. "$*"All the positional parameters (as a single word) * "$@"All the positional parameters (as separate strings) 무슨 뜻이냐면, $*는 모든 parameter를 하나의 단어로 취급한다는 의미고, $@는 별도의 문자로 취급한다는 의미다. (응?) 다시말해, $*는 입력되는 모든 parameter를 한개의 단어로 취급한다는 뜻. $@는 공백으로 구분된 별도의 문자열로 취급한다는 의미다. 아래와 같은 스크립트 코드가 있다. #!/bin/sh echo "=================" echo "\$@ se..
안랩, ‘웹 방화벽 구축 및 원격관제 서비스’ 한달 무료 체험 프로그램 운영 백신으로 돈 벌고 웹 방화벽의 레퍼런스 확보를 위해 돈을 아끼지 않는다. 이렇게 확보된 레퍼런스가 후에 긍정적인 작용을 하는것은 뻔하니까.. 하지만 너무 무료에 혹해서는 안된다. 어련히 약관에 명시되어 있겠지만(정말?) 한달간 설치되어 있던 웹 방화벽은 생각보다 많은 기업정보를 담아간다. 실시간 관제를 위해서라도 syslog 등 뭔가 정보가 빠져나갈수도 있고... 한달 무료 체험이 끝나고 난 이후에는 모든 정보가 당연히 .. 파기.. 되겠지? 여튼 돈 많은 안랩. 웹 방화벽 시장도 선점할 것인가..!
서버의 MX 레코드 구성을 확인하는 방법에 대해서 기술합니다. 여기서는 nslookup 명령어를 사용하고, 이는 윈도우/리눅스 모두 지원됩니다. 일단 윈도우를 먼저 살펴봅니다. 커맨드 창을 열고 nslookup을 입력합니다. 그리고 아래 명령어로 mx를 지정합니다. set query=mx 꼭 nslookup으로 접속해야만 가능한것은 아닙니다. 아래와 같이 바로 확인도 가능합니다. nslookup -query=mx naver.com 이번에는 리눅스를 살펴보는데 윈도우와 동일하게 실행됩니다. 마찬가지로 nslookup 접속 없이 바로 실행도 가능합니다. 인터넷 메일을 다루는데 있어서는 매우 중요한 정보입니다. 잘 활용하도록 합시다.
CentOS 에서 윈도우의 특정 폴더를 마운트 해서 사용하는 방법을 알아봅니다. 우선 윈도우의 특정 폴더를 마운트 하기 위해서는 접근 권한이 있어야 하는데, 이를 위해 마운트 하고자 하는 폴더를 공유 폴더로 지정을 합니다. 아래와 같은 폴더들이 있고 mountME 라고 하는 폴더를 CentOS에서 마운트 할겁니다. 우선 mountME 폴더에 우클릭을하고 속성으로 진입합니다. 이어서 공유를 클릭합니다. 공유할 사용자를 선택하고 공유 버튼을 클릭합니다. 정상적으로 공유가 되었음을 확인하고 완료합니다. 다음 고급 공유를 통해 폴더의 권한을 설정합니다. 특별한 내용이 없으면 패스해도 상관 없습니다. 고급 공유는 아래와 같습니다. 여기서 권한을 설정할 수 있습니다. 변경/읽기에 대한 내용을 선택할 수 있습니다. ..
디버깅 방법에는 많은 종류가 있지만, 사건이 발생 했을때 바로 무언가를 남겨주는 것이 최고의 디버그 메시지가 아닌가 싶다. 관련해서 backtrace 와 addr2line 을 소개하도록 한다. 일단 관련 된 소스는 아래와 같다. 소스의 95%가 vim에서 제공되는 backtrace의 man page 내용이다. 해당 소스는 문제가 있고 죽도록 설계(?)되어 있다. (man page의 오리지널 소스가 그렇다는 것은 아님) #include #include #include #include #include /* sig ==> signal number */ void calltrace(int sig) { int j, nptrs; #define SIZE 3 void *buffer[100]; char **strings;..
OS에서 사용하는 ipc(Inter-Process Communication)를 확인하는 명령어로 ipcs가 있다. 보통 개발시에 등록한 공유메모리나 메시지 큐가 제대로 인식되었는지 확인하게 되는데 일단 명령어를 입력해보면 아래와 같은 화면을 볼 수 있다. ipcs 세마포어와 공유메모리, 메시지 큐가 순서대로 보인다. (OS에 따라 약간의 차이는 있을 수 있다.) 도움말을 보면 아래와 같다. ipcs --help 도움말 역시 OS에 따라 차이가 있을 수 있다. 여기서 유용하게 사용되는 옵션에는 두가지가 있는데, 첫번째로는 현재 커널 파라메타로 입력되어 있는 임계치(limits)다. ipcs -l proc에 있는 값을 조정해서 사용할 수도 있다. OS의 기본 임계치를 아는 것은 개발에 큰 도움을 준다. 유용..
- Total
- Today
- Yesterday