Skip to main content

Posts

Showing posts from 2014

[Googe I/O 2014] 국산 재료로 Cardboard 만들기!

올해 Google I/O 에서 가장 흥미있었던 내용중 하나가 바로 Cardboard 였다고 한다. 사실 난 Android L Preview 와 Material Design 에 때문에 상대적으로 이녀석을 홀대하고 있었는데, 회사 선임님께서 요놈이 얼마나 대단한 녀석인이 알려주신 덕분에 관심을 갖게 되었다. 더군다나 제작 방법은 물론 Libraray 까지 제공하다니... 그래서 바로 만들기로 결정. 우선 아래 사이트를 참고하자. 1. Reference SIte - Cardboard 제작 - Cardboard API 사이트를 들어가면 친절하게 구매할 수 있는 사이트까지 링크되어 있으나...전부 아마존. 참고로 이 글을 쓰고 있는 지금까지 아마존에서 주문한 렌즈를 받지 못했다.(한 2주 된듯.) 그래서! 결국 국내에서 파는 제품들로 꾸려보기로 했다. 순수 국내산으로~ 이미 nurinamu 님 께서 블로깅을 하셨지만... 여튼. 필수 재료는 아래를 참고하자. 2. 국내에서 구입한 재료 목록 1)  렌즈 - 양면 볼록 렌즈 : 유리 / 직경 : 30mm / 초점거리 : 46mm (한알당 3,300원) 2)  자석 - 네오디움 원형사라 자석 : 지름 : 20mm / 두께 4T (1,460원) - 페라이트 자석 : 지름 : 20mm / 두께 5.0mm (2,000원) 3)  골판지 - 택배 박스 사용 (0원) NFC 는 집에서 저장할 방법도 없으니 Pass. 고무줄이나 밴드는 취향에 맞게... 사실 도면도 공개되어 있고, 재료만 구하면 만드는건 쉽다. 굳이 설명을 하자면... 자르고... 자르면 ... 골격완성! 그리고... 오랜 기다림 끝에 결국 받지못한 아마존 렌즈를 뒤로하고, 국내 사이트에서 주문한 렌즈를 끼워주면... (국내산 렌즈는 오전에 주문하고 다음날 점심에 바로 겟.) 이렇게 완성! 개인적으로 신기했던 것중 하나가 자석을 사용한다는 것

[Tip] Homebrew 로 설치한 Python 환경에서 GAE Flask 설치하기

2014.07.10 -- Issue -- ~/.pydistutils.cfg 파일을 생성하고 나서 pip install 을 할 경우, permission denied 오류가 발생하는 경우가 있다. 이때는 prefix= 를 삭제하면 정상적으로 설치할 수 있다. 또는, 설치시 아래와 같은 명령어로 설치한다. pip install --user --install-option="--prefix=" <package-name> -------------------------------------------------- Mac 에서 Homebrew 를 사용하면 각종 package 를 편리하게 관리 할수 있다. 그런데 Homebrew 를 통해 Python 을 설치한 환경에서, Google App Engine 의 Flask package 를 설치하기 위해 명령어 ( pip install -r requirements.txt -t lib/ )를 실행하면 아래와 같은 오류가 발생한다. 말 그대로 prefix 를 설정해 달라는 이야기 인데, 해결 방법은 다음과 같다. HOME(~/) 에 .pydistutils.cfg 파일을 생성하고 아래 코드를 추가한다. [install] prefix= 그리고 다시 실행하면 정상적으로 Flask package 가 설치되는것을 확인할 수 있다. Reference 1. stackoverflow http://stackoverflow.com/questions/24257803/distutilsoptionerror-must-supply-either-home-or-prefix-exec-prefix-not-both 2. Github Issue https://github.com/Homebrew/homebrew/wiki/Homebrew-and-Python

[Tip] Android Studio, Intellij 에서 Source Code Pro font 적용

예전에 코딩할 때 좋은 폰트 에 Source Code Pro 가 1등으로 선정된 것을 본 적이 있다. 그전까진 나눔고딕코딩 을 자주 썼는데, Source Code Pro 를 쓰면서 가독성이 좀더 향상된 것을 느낄 수 있어 요즘 주력 폰트로 사용 하고 있다. 그런데 Mac에서는(윈도우는 어떨지 모르겠지만...) Eclipse 나 Xcode 에서는  문제없는 이 폰트가 유독 Intellij 혹은 Android Studio 에서는 폰트 설정 시, 이탤릭체가 깨지는 문제가 발생하고 있다. 폰트 설치 후, Intellij 에 적용하면 아래와 같이 이텔릭 채 부분에서 깨지기 시작한다. 이같은 문제는 이미 Source Code Pro Github issue 에 등록되어 있는데, issue 에서 가이드 하는 수정방법은 다음과 같다. 먼저 Source Code Pro Font 를 다운받고, 설치하자. Source Code Pro Font 다운로드   그 후 아래 폴더로 이동하자. /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/fonts 위 경로에 Source Code Pro 의 TTF 에 포함되어 있던 폰트들을 모두 복사하여 붙여넣는다. 그리고 Intellij (혹은 Android Studio) 를 재부팅 후, 다시한번 폰트를 설정하러 들어가면 아래와같이 폰트들이 나타나는것을 확인 할 수 있다. 개인적으로 Medium 을 선호하기 때문에 Medium 을 선택. 그러면 아래처럼 정상적으로 출력됨을 확인할 수 있다.

[Scala] Learn Scala!

최근 Java 의 확실한 후계자로 Scala 가 거의 확정시 되고 있는 분위기다. (난 Groovy 에 걸었는데 ㅠ) 함수형 프로그래밍이라는것도 좀 어색하고, 문법도 Java 와 다른면이 많기 때문에 처음에 러닝커브가 좀 있는 편인것 같다. 더욱이 우리나라에 번역서는 오직 한권. 그런데 몇일전에 찾아보니 웹에는 많은 문서들이 번역되어 있더라. 요런것들 참조하면 익혀보면 좋을듯! 1. 자바프로그래머를 위한 스칼라튜토리얼 ( http://docs.scala-lang.org/ko/tutorials/scala-for-java-programmers.html ) 2. 스칼라 학교 by twitter ( http://twitter.github.io/scala_school/ko/index.html )

[Android] GDG Gradle CodeLab 을 다녀와서...

연휴 첫날.. GDG Android 에서 Gradle CodeLab 을 한다는 이야기를 듣고.. 어제 급하게 신청했는데 다행이 참가 메일이 와서 참석하게 되었습니다. Google I/O 13 이후로 Gradle 의 인기가 날로 높아져 가고 있습니다. 사실 그동안 Android 에서 외부 라이브러리를 사용하기 위해 Maven 을 대부분 사용하고 있었고, 기본적으로는 Ant 를 지원하고 있습니다. 하지만 둘다 사용하기는 쉽지않습니다. 더욱이 Android 개발도 버거운데 Build 를 위해 Ant 나 Maven 을 별도로 공부해야 한다는 부담감도 존재합니다. 그래서 처음 Gradle 을 새로운 빌드시스템으로 선택한다는 이야기를 들었을 때에도 그닥 반갑지는 않았습니다. 유명한 라이브러리들은 대부분  Maven 을 지원하고 있고, 또 새로운 빌드 시스템을 공부해야 한다는 생각이 들었던거죠. 하지만 오늘 CodeLab 을 다녀오면서 Gradle 은 배울만한 충분한 가치가 있다는 생각이 들었습니다. 1. 발표 프리젠테이션 2.  Github CodeLab Repo Gradle 은 Groovy 를 기본 언어로 채택하고 있습니다. 따라서 Groovy 를 잘 알고 있다면 그만큼 효율성을 높일 수 있습니다. 하지만.. 오늘 CodeLab 만으로도 Android 개발에 필요한 기능들을 충분히 알아볼 수 있었습니다. 특히. Flavor 기능은 정말 유용했습니다. 대부분 현업에서 debug, release 용으로 빌드시, 빌드넘버나 기타 변경사항을 수정하고 하는 과정에서 실수하기 쉬운데, 이러한 것들을 미리 정의해 놓을 수 있다는 점은 정말 큰 장점 이였습니다. 또한, Manifest 에서 정의했던 versionName, versionCode 등을 build.gradle 에서 관리한다는 점도 새로웠습니다. Build Customization  을 통해 빌드를 위해 Manifest 를 수정하는 수고를 덜 수 있었습니다. 실습도 Gradle 기본

[Android] Android Studio static / member variable prefix 설정 방법

Java 에서 static 변수는 는 s~로,  맴버 변수는 m~ 으로 시작하는 경우가 대부분이다. Android Studio 에서 변수를 선언 후 getter/setter 를 자동 생성하면 [(cmd + n) -> (Getter and Setter) 선택] 아래와 같이 s 와 m 이 붙어 나오게 된다. public class SampleClass { private static int sStaticVariable = 1; private int mMemberVariable = 1; public static int getsStaticVariable() { return sStaticVariable; } public static void setsStaticVariable(int sStaticVariable) { SampleClass.sStaticVariable = sStaticVariable; } public int getmMemberVariable() { return mMemberVariable; } public void setmMemberVariable(int mMemberVariable) { this.mMemberVariable = mMemberVariable; } } 하나하나 m, s 를 지우는 것 보다 setting 에서 변수 prefix 를 미리 설정해 두면  이러한 불편을 해결할 수 있다. Mac 기준으로 Android Studio -> Preferences -> Code Style -> Java 에서 Code Generation 을 선택 하면 아래와 같은 화면을 볼 수 있다. 위와같이  Field : Name Prefix 란에 "m", Static Field : Name Prefix 란에 "s" 를 입력하고 OK 버튼을 누르면 설

[GDG Seoul] OSS/Github 입문 CodeLab 후기

작년 이맘때 쯤, GDG Android Korea 에서 CodeLab 을 진행 했었는데, 올해는 GDG Seoul 에서 진행한 "OSS/Gitub 입문 CodeLab" 이란 타이틀로 CodeLab 을 진행하여 참가하게 되었다. git 이나 Github 를 처음 사용하는건 아니였지만, 거의 SVN 처럼 사용 해 온지라, "이참에 재대로 한번 배워보자!" 하는 맘이 컸고, 다른 분들은 어떻게 Github 를 사용하시는지도 궁금했다. CodeLab 은 크게 - OSS 에 대한 설명 및 Newbi 를 위한 Tutorial - Github 및 git 에 대한 Tutorial - CodeLab 순으로 진행 되었다. (딱히 순서에 이름이 없는것 같아서 임의로 붙였다.) 1. OSS 에 대한 설명 및 Newbi 를 위한 Tutorial (뉴비X 님) ( 슬라이드 링크 ) OSS (Open Source Software) 에 대한 간략한 소개와 Linux Kernel 를 예로 Contribute 하는 방법에 대한 이야기를 들을 수 있었다. Android 의 경우만 해도 여러 open source library 의 도움으로 좀더 편하고 쉽게 App 개발을 진행 할 수 가 있는데, 사용하면서 개선한 사항에 대해서 내가 코드에 기여할 수 있겠다. 라는 생각이 많이 들었다. 특히 Newbi 를 위한 주의해야 할 사항이 인상깊었는데, 간단하게 요약 하자면, - coding Style - You are just a newbi here - start from jab  ( 작은 것 부터 시작하자.. 조그마한 작업부터, 혹은 리뷰…) - commit log style - summarized title on First Line - just \n on Second Line - Detailed log after 3rd Line 이정도가 아닐까 싶다. 특히, 의욕이 너무 지나쳐서 너무 많은 것을 커밋

[Android] 안드로이드 앱 폴더 관리

안드로이드 앱을 개발하다 보면 Image Cache 및 File 관리를 위해 App 폴더를 별도로 관리하게 된다. 대부분 PC 에 폰을 연결하면 App 폴더들을 확인할 수 있는데 최근 내 폰에 설치된 앱들의 폴더를 확인해보니 아쉬운 부분들이 있다. 나는 다음 사전,지도, 앱, 클라우드 등을 사용하고 있고, 폰에는 아래와 같이 앱 폴더들이 존재한다. Daum 앱들의 폴더 다음은 Yahoo! 의 앱들이다. 나는 Yahoo mail, weather 를 사용하고 있다. Yahoo 앱들의 폴더 두 앱간의 차이가 보이는가? Yahoo! 와 같이 폴더구조를 구성하게 되면 사용자 입장에서는 어느 회사의 앱이 설치되어 있는지, 어떠한 앱들이 설치되어 있는지, 좀더 명확하개 확인, 구분할 수 있을것이다. 본의 아니게 다음앱이 비교 대상이 되었지만, 그나마 다음은 prefix 로 Daum 이 붙었다.(mypeople 은 제외.) 네이버의 경우에는 Naver, band 등 각각 네이밍이 달랐고, 다른 회사 앱들도 대부분 일정한 규칙없이 앱에 따라 이름을 정하는 모습을 보이고 있다. 나 역시, 그동안 앱 개발을 해 오면서 소스 폴더구조, 코드 구조에는 많이 고민 하곤 했지만 정작, App 폴더 네이밍이나 구조에 대해서는 생각해 본적이 거의 없었던것 같다. App 폴더는 단순히 개발사들만이 사용하는 공간이 아니다. 좀 더 구조화 된 폴더구조를 생각하는 것도, 사소한것 같지만 사용자를 위한 배려가 아닐까 생각한다. p.s. ImageCache 는 왜이리 저장해 놓는건지.. 앱이 삭제될때 지울것도 아니면서 ㅠ

[Book] 다양한 예제로 학습하는 데이터구조와 알고리즘 for Java

인사이트 에서 Java 를 이용한 자료구조 & 알고리즘 도서가 나온다는 소식을 듣고 기다리고 있었는데, 때마침 JCO 때 인사이트 부스에서 판매하고 있었다. 원래 사려고도 했고, 책도 몇권안남아서 보자마자 바로 구입! fig1. 책 이미지 기다렸던 책이기도 했고, 이참에 자료구조를 재대로 공부해보자 라는 다짐으로 읽기 시작했다. 찾아보니 원서는 Amazon 에서도 별점이 꽤 높아보였다. 아직 초반이지만, 읽으면서 아쉬운 부분을 먼저 좀 써 보려고 한다. 아무래도 많이 기대했던지라, 좋은점 보다는 아쉬운 점이 많이 눈에 보이게 된다. 1. Java 스럽지 않은 코드 인사이트에서 출판한 이 책은 C 버전도 있다. C 버전을 좀 봐야 알겠지만, 아마도 이 책은 C 기반으로 작성 된 후, Java 로 포팅 된 느낌을 강하게 받는다. 역자 서문에서도 저자가 C 기반의 코드로 작성해서 Java 스럽지 못한 부분이 있다고 말하고 있다. 그래도 네이밍 이라던지, 기본적인 코드 스타일이 전혀 Java 스럽지 못하다 보니 보는내내 좀 불편한 기분이 든다. (난 각 언어별로 스타일을 좀 중요시 보는 편이라 아무래도 눈에 많이 거슬리는 편이다.) 또한, 자료구조를 설명하는 과정에서 포인터 라는 단어가 많이 나타난다. 아무래도 C 로 설명한 부분을 Java 로 옮기다 보니 단어 선택이나, 표현방법에서 Java 로 표현하기 애매한 부분이 있는것으로 보인다. C 랑 Java 를 모두 공부했다면 그러려니 할 수 있는 부분이지만, Java 만 조금 알고 있는 상태에서 자료구조를 공부하기 위해 이 책을 구입했다면 아마 설명 부분에서 난해하게 느껴질 수 도 있다. 2. 예제 코드의 오류. 예제코드를 타이핑 하다보면, 스펠링이 틀리거나, 앞에서 소개한 메소드를 사용하는데 메소드명이 서로 다르다거나 하는 문제로 코드가 정상적으로 동작하지 않는 문제가 보인다. 이런 문제는 번역과정에서 조금 아쉬운 문제로 보인다. Amazo

[Python] except, e or except as e?

python 2.x 에서 try-except 문을 활용할 때보면 다음과 같이 두가지 방법을 사용하고 있다. 1. try: pass except ErrorType, e: pass 2. try: pass except ErrorType as e: pass 두가지중 어느것을 써도 무방 하다고 한다. 다만 3.x 에서는 ErrorType as e 방식만을 허용한다고 하니 2.x 부터 습관을 들이는게 좋지 않을까. 그리고 가독성으로 보더라도 as e 방식이 이해도가 더 높다고 생각한다. 어느책에는 1번방식, 어느책에는 2번 방식으로 설명을 해 놓으니 더 어지럽다.ㅠ

[Python] Core Python Application Programming 예제 3-1 수정

코어 파이썬 애플리케이션 프로그래밍 146~7p 의 예제 3-1 코드가 정상적으로 동작하지 않는 이유는 아래와 같습니다. 문제가 되는 구간은 40~41 라인, 44 라인인데 라인 비교를 위해 38 라인부터 보면, 책의 경우, except ftplib.error_perm: print 'ERROR: cannot read file "%s"' %FILE if os.path.exists(FILE): os.unlink(FILE) else: print '*** Download "%s" to CWD'%FILE f.quit() 그러나 실제로는 아래와 같이 되어야 정상적으로 동작 합니다. except ftplib.error_perm: print 'ERROR: cannot read file "%s"' %FILE if os.path.exists(FILE): os.unlink(FILE) else: print '*** Download "%s" to CWD'%FILE f.quit() 이유인즉, 40~41 라인 코드가 다운로드 완료 if 문으로 동작해서 다운로드 완료 된 파일을 다시 삭제하기 때문입니다. 따라서 전체 동작하는 코드는 아래와 같습니다. #!/usr/bin/env python import ftplib import os import socket HOST = 'ftp.mozilla.org' DIRN = 'pub/mozilla.org/webtools' FILE = 'bugzilla-LATEST.tar.gz' def main(): try: f = ftplib.FTP(HOST) except (socket.er

[physics] Computational Science & Python

학부생때 처음 전산물리 과목을 수강하면서 "이건 도대채 어떻게 공부해야 하는가" 에 대해서 고민했던 기억이 난다. Java 가 먼지, 프로그래밍이 먼지도 모르는 학생들에게 1학기동안 swing 까지 나가는 살인적인 진도는 도저히 따라가기 힘들었다. programming 이란 무엇인가. 물리공부를 하는데 이게 왜 필요한가 에 대한 끝없는 반문. 학기가 끝날쯤에야 Java 를 한번 공부해보자 라는 생각이 들 정도였으니 성적은 말할것도 없다. 지금와서 생각해보면 전산물리 라는 과목에 Java 라는 언어는 상당히 부담스럽다는 생각이 든다. 과목의 목적이 원래 컴퓨터를 통한 물리실험으로 물리의 이해를 돕고자 하는 목적이 컸는데, 물리 실험을 하기 위해서는 Java  라는 프로그래밍 언어를 사용해야만 하는 (그것도 잘..) 어떻게보면 배보다 배꼽이 더 큰 상황이랄까. 특히 GUI 화면을 구현하고 EventHandling 을 사용하기 위해 Swing 을 사용하는 것은 지금와서 하라고해도 쉽게 하지 못할것 같다.(요즘  Swing 을 잘 안쓰기도하니까..) 그래도 우리과는 다행이라고 생각했던 것이..시중에 나와있는 책들을 보면 전산물리 관련 도서는 대부분  VB, C 를 기반으로 한다. 아마 VB 로 시작했다면 난 IT 분야는 생각도 안했을지 모른다. 최근 Python 을 공부하면서 전산물리를 Python 으로 배웠다면 과연 어땠을까? 라는 생각을 하게되었다. 개인적으로 물론 Java 도 멋진 언어이지만, 프로그래밍을 모르는 상태에서 전산물리를 가르쳐야 한다면, 그 언어는 Python 이 더 알맞은 언어라고 생각한다. 먼저 아래 두 코드를 한번 살펴보자. 아래 코드는 반지름이 0.2,0.5,1.5m 일때의 ElectricField 를 계산하고 있다. 1. Python (calc_electric_field.py) # -*- coding:utf-8 -*- import math r = [0.20, 0.50, 1.50] #

[Mac] Python & tcl-tk install using homebrew

homebrew 에서 python 을 사용하면 brew linkapps 명령어를 통해 GUI 에서 IDLE 를 사용할 수 있다. 그런데 IDLE 를 실행하면 초기 화면에 경고 문구가 같이 출력된다. 큰 문제 안될수도 있지만, IDLE 에서 한글입력이 안되는 문제도 있고 보기 싫으니까 이것저것 찾아보게된다. 역시 방법이 다 있었고, 해결책은 아래와 같다. 1. tcl-tk 설치. 먼저 homebrew 에서 tcl-tk 를 설치한다. >> brew install homebrew/dupes/tcl-tk 2. 기존에 설치되어 있던 python 을 삭제한다. >> brew uninstall python 3. brewed-tk 옵션의 python 을 다시 설치 한다. >> brew install python --with-brewed-tk 4. 다시 IDLE 링크를 걸어주면 끝. >> brew linkapps 그러면 아래 화면처럼 경고문고도 없어지고 한글도 잘 써진다. 굿!