Programming 68

명령어 - watch

파일의 내용을 실시간으로 보고 싶을 때가 있었는데, watch라는 명령어를 사용하면 된다더군요. 있어보이는 말로 어떤 명령어나 파일을 모니터링 할 때 쓸 수 있습니다. # ls -l 의 결과가 바뀔 때 해당 사항에 대해 하이라이트 됩니다. watch -d ls -l # 파일의 끝에 내용이 추가될 때 실시간으로 보여줍니다. # 5초마다 갱신되며, tail 명령어 옵션의 영향으로 마지막 30줄만 표시됩니다. watch -n 5 "tail /var/log/log.file -n 30" # 현재 사용자를 실시간으로 보여주며, 변경 사항을 하이라이팅합니다. watch -d -w 참고) https://linux.die.net/man/1/watch

라즈베리파이 - BLE 비콘화하기

BLE 비콘을 이용한 IoT 관련 제품/서비스가 한창 많아지는 추세입니다. 저 또한 진행해봤구요. 남겨둔 문서 중 라즈베리파이를 BLE 비콘화하기 위한 삽질을 발견해 포스팅합니다. 라즈베리파이2와 라즈베리파이3 모두 해봤기 때문에 잘 작동할 겁니다. 관련 서비스를 공부하는 분들에게 도움이 됐으면 좋겠습니다. 0. 준비 라즈베리파이2는 무선랜과 블루투스 모듈이 포함되어 있지 않습니다. 따라서 USB 무선랜카드와 USB 블루투스 BLE 지원 동글을 구매하셔야 합니다. 라즈베리파이3는 모두 포함되어 있습니다. 그대로 진행하시면 됩니다. 그리고 적절한 OS(데비안 기반인 라즈비안 추천)가 설치되어 있다는 전제 하에 진행하겠습니다. 1. bluez 패키지 설치 먼저 bluez 패키지를 설치해 줍니다. 이미 설치되..

깃(git) - 프로젝트 진행 중 저장소로부터 최신 소스 받아오기

git으로 관리중인 프로젝트에서 소스 코드를 막 변경하며 개발하다가, 저장소의 자신이 속한 branch의 소스가 다른 사람으로 인해 업데이트 되면 받아야 할 때가 생깁니다. 그냥 git pull 하면 충돌의 여지가 아주 많기 때문에 진행이 잘 되지 않습니다. 간단한 수정 또는 테스트용으로 살짝만 바꿨는데도 git pull이 잘 안 된다면, 아래와 같은 방법이 있습니다. 1. 기존 변경 사항을 무시 git reset --hard HEAD git pull reset --hard HEAD 는 가장 최근 커밋으로 소스 코드를 돌려버립니다. 이제 원격 저장소의 가장 최근 커밋과 같은 소스가 됐으니, 충돌이 일어날 리가 없죠. 이 상태에서 git pull을 하는 원리입니다. 아니면, git fetch --all g..

Programming/Git 2017.05.23

깃(git) - .gitignore 업데이트 후 적용하기

.gitignore 은 git으로 프로젝트를 관리할 때 관리하길 원하지 않는 파일명 규칙을 모아둡니다. 말이 어려운데, 만약 저 파일 안에 *.c 가 있으면 모든 C 소스 파일은 add, commite 되지 않아요. 버전 관리에 포함시키지 않습니다. 근데 처음 git 프로젝트를 생성할 때 같이 .gitignore을 생성했다면 몰라도, 프로젝트 진행 중 .gitignore을 업데이트 한다면 후에 적용해야 할 문제가 생깁니다. 그 문제를 손봐줍시다. 먼저 .gitignore을 입맛에 맞게 업데이트 해줍니다. 그리고, 새로운 .gitignore 규칙을 기존 파일들에도 적용하기 위해 아래의 명령어를 순서대로 쳐줍니다. 지우고, add하고, 다시 commit해주는 과정입니다. git rm -r --cached ...

Programming/Git 2017.05.23

안드로이드 - MVP 패턴 2. 분석

이번엔 본격적으로 구글에서 제공하는 "안드로이드 MVP 디자인 패턴 적용 샘플 어플리케이션"인 https://github.com/googlesamples/android-architecture/tree/todo-mvp/ 해당 샘플 코드를 분석하려고 합니다. 앞서 말씀드린 대로, 이번 포스트 시리즈는 앱이 가진 고유의 기능을 분석하다기 보단 해당 샘플로부터 어떻게 MVP 코드를 적용했는가 추출하는데 집중하려 합니다. 이번 포스트는 추출 전 전체적인 앱의 구조 파악입니다. 1. 흐름도 위 이미지는 해당 샘플에 대한 Github에서 제공되는 흐름도입니다. Activity 안에 Fragment가 있고, View로 사용하네요. 그리고 Activity 범위 안에 Presenter가 있습니다. 그 Presenter에서..

안드로이드 - MVP 패턴 1. 개념

안드로이드에서 MVC 패턴의 미묘함에 대해 포스팅한 적이 있습니다.2017/03/11 - [프로그래밍/기타] - 안드로이드 - MVC 패턴 개념, 안드로이드에서 MVC 패턴의 미묘함 그래서 안드로이드의 MVP 패턴을 공부하고 있는데, 구글에서 샘플 코드도 올려주고 아주 친절해요. https://github.com/googlesamples/android-architecture 여기서 일정관리 프로그램를 다양한 디자인 패턴을 통해 개발하는데, 이 중엔 MVP에 기반한 것도 있습니다. 이걸 분석하면서 한창 앱 하나를 개발하고 있습니다. 이번 포스트 시리즈는 그 나름의 분석 내용입니다. 그리고 앱의 기능을 분석한다기 보다 MVP 패턴으로 개발하려면 이렇게 하면 되는구나는 걸 추출하려고 노력했습니다. 참고하실 분..

안드로이드 - 서비스와 액티비티간 통신

간단하게 말로만 정리하겠습니다. 서비스와 액티비티간 통신이 많이 필요할 때가 있습니다. 그냥 많이 필요합니다. 경험상 상황별로 다음의 방법이 가장 좋네요. 1. Local 서비스와 액티비티간, 일방적으로 간단한 정보를 보낼 땐 브로드캐스트 리시버가 최고라고 생각합니다. 코딩도 그나마 간단하구요. 하지만 복잡하며 좋은 성능이 필요하고, 마치 자신의 메서드인냥 실행하고 반환값을 얻고 하려면 Local Binder입니다. 2. Remote 간단하면 역시 브로드캐스트 리시버입니다. 하지만, 리시버를 받는 입장에서 액션에 대한 공개 범위? 가 모든 프로세스라면 보안에 취약해질 수 있습니다. 그럼 바인더를 사용해야 할텐데, 서비스가 다른 프로세스에서 작동한다면 Local Bind가 불가능하죠. Remote로 해야합..

안드로이드 - MVC 패턴 개념, 안드로이드에서 MVC 패턴의 미묘함

PHP CodeIgniter를 공부하면서.. MVC 패턴이란 걸 알게 됐습니다. 원래 기존에도 프로그램을 만들 때 모듈화에 대한 고민을 했긴 했었는데, 예를 들어 DB에 접근하는 프로그램을 개발할 땐 DB 접근 부분을 완전히 독립시키려 노력한다던가.. 물론 완전히 모듈화시키진 못하고 코드가 중구난방이었습니다. 그러다보니 최근에 MVC 패턴이 있다는 걸 알고 아 역시 이런 디자인 패턴도 있었군! 하면서 한창 공부 중입니다. 안드로이드 개발에선 MVC의 파생격인 MVP 패턴을 이용한다는데, 그 개념을 간단하게 정리하고자 포스팅합니다. [MVC 패턴] MVC 패턴은 Model-View-Controller 패턴을 가리킵니다. 사용자 인터페이스 영역과 비즈니스 로직 영역을 서로 영향 없이 쉽게 고칠 수 있도록, ..

안드로이드 - 외부 스레드에서 UI 스레드로

최근 취업준비를 하면서 개인 안드로이드 프로젝트를 연습삼아 진행하고 있습니다. 하면서 계속 깨닫는 건 멀티스레딩의 중요성입니다. 아무리 튼튼한 자료구조가 있고 복잡한 알고리즘의 빅오가 기가막혀도 기본 스레드(UI 스레드)에서만 작동한다면 ANR이 발생하기 마련입니다. 기본 스레드에선 UI만 다루고, 사용자 눈에 보이지 않는 모든 작업은 뒤에서 적절히 스레드를 줘서 돌려야 스무스하게 아무 일 없는 듯 돌아갈 겁니다. 비록 폰은 뜨거워져도 보기엔 부드러워야 좋다고 생각합니다. 그래서 개발을 진행하기 보다, 머릿속으로 먼저 정리할 겸 포스팅하고 있습니다...... [들어가기 앞서...] 안드로이드는 리눅스 기반 운영체제입니다. 따라서 안드로이드는 리눅스의 정책을 따라갈 것이고, 리눅스의 프로세스와 스레드에 대..