node나 react 등을 시작하는데에 앞서 node-gyp 패키지를 설치하게 되는데, 이 때 에러가 발생하는 경우가 있다.pyenv에서 python으로 시작하는 명령어를 다 점유하고 있는 문제일 가능성이 있다. 이 때문에 python2를 찾지 못하게 된다. 이 경우, 해당 프로젝트 디렉토리로 이동 후 pyenv를 통해 python 2 버전대를 설치한 뒤, 해당 버전으로 로컬 버전 세팅을 해주면 된다. ```pyenv install 2.7.11 pyenv local 2.7.11``` 예를 들면 위와 같은 식. local에서 세팅했으므로 외부에 영향을 끼칠까봐 걱정하지 않아도 된다.
systemd를 사용하기 위해 systemctl 커맨드를 이용한다. `systemctl start {{service_name}}` 과 같은 명령어를 통해 미리 추가해놓은 서비스를 시작하는데, 이 때 슈퍼 유저 권한을 요구한다. 내가 경험한 상황은 다음과 같다:1. root 계정에서 처음 user1 유저를 생성했다.2. systemd를 사용하기 위한 슈퍼 유저 권한 사용을 위해 인증 정보로 user1의 비밀번호를 요구한다.3. user1으로 작업을 하다가 나중에 user2 유저를 생성하였다. 4. user2 로 로그인하여 systemd를 사용할 때 계속 user1의 비밀번호를 입력하라고 한다. 해결 방법:user1는 wheel 그룹에 포함되어 있었고, user2는 wheel 그룹에 포함되어 있지 않았다. ..
layout.html 템플릿에서 공통적으로 `util.js`라는 스크립트를 불러오고 싶었다. 그리고 몇몇 페이지에서는 각 view에 해당하는 스크립트도 불러온다.스크립트를 불러오는데에는 requirejs를 이용하고 있었다. http://requirejs.org/docs/api.html#data-main ```If you want to do require() calls in the HTML page, then it is best to not use data-main. data-main is only intended for use when the page just has one main entry point, the data-main script. For pages that want to do inline ..
종종 blur 효과를 쓰고 싶을 때가 있다. 예를 들면 다이얼로그의 뒷 부분을 blur 처리하고 싶을 때 등... 일단 blur라는게 어차피 수식으로 이미지를 필터링하는 것인데, 여기서는 RenderScript를 활용한 방법을 소개한다.https://futurestud.io/blog/how-to-blur-images-efficiently-with-androids-renderscript/위 링크에서 이미 코드가 다 나와있는데 조금만 부연 내용을 추가하자면, RenderScript는 support library에 추가되어 있으므로 v8까지 커버 가능하다. 클래스들을 import할 때 패키지를 맞춰서 import 해주도록 신경써주면 된다. 그리고 Android Universal Image Loader 라이브러..
ListView에 header, footer가 있다는 것을 최근에 알았다. 이걸 몰라서 ScrollView 안에 있도록 작업하느라 상당히 곤란했었는데.... 어쨌든 원래 header, footer를 만들어 넣는 방법 자체는 어렵지 않다. 직접 View를 만들어서 ListView에다가 set 해주면 된다. 문제는 이런 방식이 개인적으로 별로 마음에 들지 않는다는 것이었다. 그냥 원래 레이아웃(ListView가 포함된)을 inflate할 때 자동으로 다 해줬으면 했다. 여기저기 분산되어 있는게 좀 맘에 안 들기도 했고... 아쉽게도 기본적으로는 불가능했다. 대신 ListView를 상속받아 확장된 커스텀 View를 만드는 것으로 가능하다. HeaderFooterListView라고 대충 이름 지었다. 소스는 g..
코딩으로 밥 벌어먹고 살다보면 당연히 남이 짠 소스를 많이 보게 된다. 그나마 실시간으로 같이 개발해나가는 과정에서는 괜찮은데, 누군가가 작업해놨던 프로젝트를 이어서 받는 경우엔 당혹스러운 경우가 종종 생긴다. 그 중 하나가 바로 컨텍스트에 관련된 문제들이다. 정말 괜찮은 프로그래머라는 가정 하에, 그들이 작업해놓은 코드는 일단 당시 상황상으로는 어쩔 수 없는 선택이었을 가능성이 높다. 그 이유로는 프레임워크 자체의 문제 등이 있다. (프로젝트 일정이 촉박해서 그런 경우는 제외하도록 하자. 뛰어난 프로그래머라면 시간이 부족하더라도 나쁜 코드를 남겨두는 경우가 드물다.) 이런 경우에는 내가 그 코드를 보고 "왜 이렇게 짰지? 분명 더 나은 방법이 있을텐데?" 하고 긴 고민을 해봐도 무용지물인 경우가 흔하다..
content에 유니코드가 있는 상태로 response를 그냥 만들어서 return 해버리면 unicode escape sequence(\u로 시작되는 문자열)이 출력되버린다. response를 받는 곳에서 알아서 encoding, decoding을 잘 하면 문제가 없지만 나 같은 경우에는 API 서버에서 return 값이 이런게 나온다는게 굉장히 맘에 안 들어서 해결하고 싶었다. 일단 브라우저에서 테스트하는 경우가 많은데 브라우저에서 볼 때 정상적인 한글 문자열을 볼 수가 없으니 좋지 않다고 판단했기 때문이다. 나 같은 경우에는 json 데이터를 출력해주기 위해 원래 Flask의 jsonfiy 함수를 이용하여 response를 만들어 return 시켰었는데, 이것이 문제였다. 내부적으로 유니코드들을 제..
프로토콜을 짤 때 CRLF 단위로 메세지를 구별하기로 했어서 StreamReader.ReadLine 메소드로 메세지 읽는걸 처리했었다. 인터넷에 검색하다보니까 통짜로 소스 올라와 있던게 있길래 조금 개량해서 썼다. 근데 이게 문제점이 NetworkStream에 메세지가 2개 이상이 왔을 때 발생했다. 동기 방식으로 구현했다보니 읽을 데이터가 있을 때만 ReadLine 메소드를 호출하게 해야해서 NetworkStream.DataAvailable로 ReadLine 메소드를 호출할 때를 확인했다. 그런데 ReadLine 메소드를 호출하면 NetworkStream에 있는 데이터를 일단 StreamReader에 가져와버려서 한 번에 여러개의 메세지가 와 있을 때 ReadLine 메소드 한 번으로 모든 메세지를 읽..
http://www.wisdomandwonder.com/article/6449/installing-jess-71p2-in-eclipse-4-2 위의 자료대로 따라하면 된다. 간단히 요약하면 jess 사이트에서 다운로드 받고, 다운로드 받은 압축파일을 압축해제 한 후 거기에 있는 eclipse 폴더의 내용물들을 eclipse 디렉토리에 추가하면 된다.각각의 압축파일을 풀면 4개는 plugin 디렉토리가 생기고, 1개는 feature 디렉토리가 생긴다. 각각의 폴더 내용물들을 eclipse 디렉토리 안의 해당 이름의 디렉토리 안에 옮겨준 뒤, eclipse를 재부팅하면 된다. 중요한 점은1. Luna 버전에서는 안 된다.2. Java 프로젝트를 만들고 거기서 돌리는데, Run을 할 때는 Java applic..
- Total
- Today
- Yesterday