6월, 2015의 게시물 표시

최근 근황

오랜만에 글을 쓰는 거 같다..
최근 근황은 뭐 계속 회사 생활의 반복이다.. 눈깜짝하니 입사한지도 1년이 어느새 훌쩍넘었다. 뭔가 해보고 싶은게 많은데, 회사 다니면서 출퇴근 시간도 길고, 내가 체력도 안좋고 부지런한 편도 아니라서 진짜 회사만 다니기 벅찼던 것 같다.
그래도 나름 뭔가 해보려고 최근에 2가지 활동을 했었다.     그중에 하나는 컨트리뷰톤이다. 작년이나 올해 초까지만해도 오픈소스 활동을 했었는데, 회사다니면서 자연스레 멈추게 되었다. 다시 한번 오픈소스 활동을 시작하기 위한 계기를 삼으려고 컨트리뷰톤이라는 프로그램에 참여하여 uftrace 라는 C/C++ function tracing 툴 프로젝트에서 활동을 했다. 현재는 컨트리뷰톤 활동은 끝났고, 이번 달 말에 폐회식?시상식? 이 있을 예정이다.     또 하나는 블록체인 스터디이다. 반년전쯤부터인가 블록체인쪽에 관심이 생겨서 한번 공부를 해보려고 스터디를 하게 되었다. 스터디는 현재 진행형이다.
회사를 다니면서 이렇게 2가지 활동을 동시에 했다. 이 활동들에 내가 투자하려고 했던 시간/에너지 양이 대략 있었는데, 막상 해보니 실제로 투자한 시간은 내 예상의 20% 도 안되는 것 같다. 신규 기능개발로 인해 회사 일이 최근에 바쁘기도 했고, 생각보다 내가 시간과 자기관리를 제대로 못했다. 시간투자를 많이 못한게 아쉽긴 한데, 일단 뭐라도 해본 것에 의의를...
아 그리고, 최근에 우리 팀 우리 파트 채용공고를 새로 냈다. 기존의 채용 공고가 너무 모호하고 매력이 떨어진다고 생각해서 내가 건의를 해서 채용공고의 내용을 바꿔봤다.

채용공고 보기/숨기기
모집부분 - C++ 기반 공용 모듈 개선 및 개발 - C++ 기반 엔진 모듈 개선 및 개발 담당업무 - 사내 C++ 공용 라이브러리 개선 및 개발 - C++ 기반 악성코드 탐지/치료 엔진 개선 및 개발 - 코드 품질 및 개발 프로세스 개선 자격요건 - C++ 활용에 자신 있는 분 - 능동적이고 적극적으로 업무를 수행하시는 분 우대요건 …

Chrome Extension으로 강의평가 auto 프로그램 만들기...

이미지
우리 학교는 기말 성적을 보려면 강의평가를 해야한다. 근데 항목들이 수업내용과는 전혀 쌩뚱맞은 이상한 것들이여서 어차피 그냥 대충 좋음 정도로 다 클릭하는 편이다. 어차피 막 할 꺼 오토프로그램을 짜면 참 좋겠다는 생각이 들어서 Chrome Extension형태로 오토프로그램을 만들어 보기로 했다.
일단은 개발자도구를 이용해 강의평가 시스템을 분석했다. 1. 프레임들이 매우 단계적으로 쪼개져있다. saint포털 전체에서 내부적으로 여러개의 iframe이 존재하고 그안에 또 여러개의 iframe이 있고, 또 그안에 frameset/frame들이 있고... 이런 식이다... 2. 강의평가 radio button을 누를때마다, 서버로 data가 전송되고, frame이 reflesh 된다.
따라서 그냥 간단하게 나는 chrome extension에서 target frame에 접근하여 그 frame에서 getElementsByClassName 을 이용해서 radio button을 다 끍어서 체크하는 식으로 하려고 했다. 근데 chrome extension에서 security 상의 문제로 frame에 접근할 수 없었다.
참고로 chrome extension 에 대해 말하자면, 기본적으로 manifest.json 파일이 있고, 이 안에 program의 정보나 권한등을 집어넣는다. 그리고, html와 js를 통해서 program을 제작할 수 있는데, chrome extension과 web page는 서로 독립된 영역을 가진다. 따라서 각자의 code는 서로에게 영향을 끼칠 수 없다.(기본적으로는) 근데 chrome extension에서 web page의 DOM에 access 하고 싶을 때가 있다. 그 때 executeScript 라던지 content_scripts 를 사용하여 그렇게 할 수 있다. (content_scripts 를 사용하려면 permissions에 tabs를 꼭 추가해야함.)
어쨌든 다시 돌아와서 frame 내부로 접근이 불가능해서 나는 content_s…

리눅스 파일 및 디렉토리 권한

이미지
예전에 리눅스 파일 및 디렉토리 권한에 대해 정리해놓은게 있어서 올려봅니다~
-----------------------------------------------------------------------

위는 디렉토리 및 파일 권한에 대해서 탐구하기 위해 내가 실험해본 데이터이다.
결과를 정리해보겠다.
디렉토리 읽기(r) : 디렉토리 내의 directory/file list를 볼 수 있는 권한이다. 쓰기(w) : 디렉토리 내의 새로운 directory/file을 생성하거나 이미 존재하는 directory/file을 삭제 할 수 있는 권한이다. 실행(x) : 디렉토리에 관한 명령어를 실행 시킬 수 있는 권한이다. (예를 들어 어떤 디렉토리에 이 권한이 없으면  이 디렉토리로 cd 한다던지 아니면 이 디렉토리 내의 파일을 읽거나 실행 하는 등의 모든 행위가 금지된다.) 파일 읽기(r) : 파일을 읽을 수 있는 권한이다. 쓰기(w) : 파일을 수정하거나 파일을 삭제할 수 있는 권한이다. 실행(x) : 파일을 실행 할 수 있는 권한이다.
여기까지는 기본적인 디렉토리/파일의 rwx 권한에 대한 정리였다. 하지만 unix계열의 운영체제에는 권한에 특정한 flag를 설정할 수 있다. 바로 setuid, setgid, sticky bit 이다.
setuid 파일 : 파일에 setuid가 걸려있으면 owner가 아닌 user가 파일을 실행할 때 owner의 권한으로 파일이 실행 된다. 디렉토리 : no meaning. 디렉토리에서 이 flag는 무시된다. setgid 파일 : 파일에 setgid가 걸려있으면 파일이 실행 될 때 파일의 소유 그룹의 gid로 실행된다. 디렉토리 : 디렉토리에 setgid가 걸려있으면 디렉토리 내에서 디렉토리나 파일을 생성했을 때 디렉토리의 group를 inherit해서 생성이 된다.

Bash 스크립트 eval, quoting과 command substitution 에 대해서...

이미지
bash 스크립트를 짜다가 갑자기 eval, quoting과 command substitution에 대해 좀 명확히 해서 블로그에 올리고 싶어서 실험을 좀 하였다.

위는 weak quoting ("") 과 eval의 기본적인 특성을 보여주는 예시이다. 근데 eval을 통해 $c의 값을 온전히 출력하려면 어떻게 해야할까? eval "echo \"hello\\\";echo \\\"fool\"" 이 실행되도록 하면 된다. 그러면 결국 echo "hello\";echo \"fool"이 실행되어 hello";echo "fool 이 출력될 것이다. (물론 eval "echo \$c" 가 제일 쉬운 방법)


위는 strong quoting ('') 과 2가지 command substitution ($() 와 ``) 의 특성을 보여주는 예이다. ` `을 사용할 때 특히 주의해야할 점은 ` ` 안에 있는 ' ' 에 까지 ` `의 escaping이 적용된다는 점이다. 그리고 ` ` 의 escaping은 string quoting의 escaping 과는 다르다는 것이다. 예를들어 \"은 적용이 안된다. (오타정정 : but \s --> but \") $() 은 그안에 escaping이 never!! 절대로 적용되지 않는다.. 심지어 "$(~~"~~"~$(...)~)" 의 문법도 가능하다.


또 주의해야할 점이 "`~~`" 의 경우이다. 이 경우에는 ~~ 부분에 대해 ` `의 escaping 규칙과 " "의 escaping 규칙이 같이 적용된다. (100% 정확하진 않고... 개인적인 경험/실험에 의한 의견이다) 하지만 \\ 등에 대해서 중복 escaping 처리가 되는 것은 아니다. 또 echo "`echo &q…

/boot 디스크 용량이 부족해서 우분투 커널 업데이트가 안되는 경우

이미지
오늘 텔레그램 bot을 만들려고 텔레그램 CLI 를 설치하려했다. 그 전에 필요한 lib 들을 설치하려는 과정에서 의존성 문제에 부딪혔다.


의존성 문제가 발생할 때 apt-get -f install을 이용하면 의존성 문제를 요령껏 해결해준다. (아닐때도 있지만)

근데 뭔가 에러가 난다. 보면 커널을 업데이트하는데 /boot 이 용량이 부족해서 난 오류다.



/boot 이 꽉차있다... 사용하지 않는 커널들을 삭제해주도록 하자...
너무 빡빡하게 다 삭제하진 않고, ...-51 미만으로만 삭제하였다.

/boot의 용량이 넉넉해 진 것을 알 수 있다.

다시 시도해보니까 잘 설치가 된다.
다시 부팅을 하면 3.13.0-55 버전으로 커널 업데이트가 된걸 알 수 있다.

그 다음부터 다시 원래 하려던 작업들을 하면 잘 된다.

bash 와 dash의 차이점

이미지
오늘도 역시나 뻘짓을 하였다. bash script를 짜놓고 sh a.sh 같은 식으로 실행시키니 우분투에서 sh는 dash를 기본적으로 가리키므로 dash에 의해 a.sh가 실행이 되어서 예상치 못한 결과가 나왔다. 덕분에 시간을 날렸지만 아래와 같은 사실을 알 수 있었당~


bash와 dash는 공통적으로 \(역슬래쉬) 를 특수하게 사용한다. 따라서 문자자체로서의 역슬래쉬를 표현하려면 \\을 사용해야한다.  따라서 bash에서의 결과는 상식적인 결과일 것이다. dash에서도 역슬래쉬를 표현하여면 \\를 사용해야하는 건 똑같다. 하지만 dash 에서는 큰따옴표안에서 이스케이프문자를 지원한다. 무슨 말이냐면 결론적으로 echo "\\\\" 를 해야 화면에 \이 출력되는 것이다. \\이 \로 처리되고 그렇게 모인 두개의 \\가 이스케이프문자로 인식되 \ 하나가 결국 출력되는 것이다.

이 사진은 보던지 말던지~
* 그리고 `` 보다 $() 를 사용하도록 하자!

bash script가 정말 리눅스환경에서 간단간단하게 뭐 만들때 정말 좋긴한데 문법이 너무 거지같은거 같다. 어쩌면 내가 체계적으로 안배우고 그때 그때 검색해서 쓰는 식으로 익혀서 그런거일수도...

이 블로그의 인기 게시물

[Effective C++ 3판] Chapter 1. C++에 왔으면 C++의 법을 따릅시다. (항목 1~4)

개발다운 개발에 대해...

최근 근황