Search Results for '프로그래밍'

81 POSTS

  1. 2010/07/25 Android Custom Dialog (2)
  2. 2010/07/16 땅콩 프로그래밍 언어 (15)
  3. 2010/07/11 ndk-gdb
  4. 2010/05/28 Rosetta를 소개합니다. (4)
  5. 2010/05/28 Android 2.2 Push API (C2DM)
  6. 2010/05/27 Bitmap of Android NDK r4
  7. 2010/05/26 Android NDK r4
  8. 2010/04/26 몇몇 언어들의 BNF 문법 (4)
  9. 2010/04/08 재귀호출은 나쁜가? 정말? (1)
  10. 2010/03/03 안드로이드 Debug Mode와 Signing

Android Custom Dialog

2010/07/25 00:08

안드로이드에서 커스텀 다이얼로그를 만들 때에는, 일반적으로 Activity를 많이 사용한다. Google이 제공하는ApiDemos에 그런 예제가 있기도 하고, 대부분의 책들에도 그렇게 설명이 되어있다. 하지만, 손 쉽게 OnClickListener 를 붙이고, 타이틀을 붙이고 할 수 있는 Dialog에 비해서, Activity로 팝업창을 만들게 되면, 상당히 불편하다. 잘 알려져있진 않은데, Dialog 를 완전히 customize 할 수 있는 방법이 없는 것은 아니다.

첫번째 링크 처럼 Dialog를 상속해서 customized dialog 를 만들거나, (두번째 링크 처럼) AlertDialog.Builder 까지 만들어버리면 된다. So Cool~

-- 이상한 나라의 종텐.


지난 약 3달간, Jweb과 2명이서 틈틈히(?) 프로그래밍 언어를 만들었습니다. 아직 공개하긴 많이 부족한 상태이고, 틈틈히 업데이트를 할 생각이긴 하지만, 몇 달간은 손을 전혀 못 댈 것 같아서 일단은 GitHub에 저장소를 만들었습니다. 사실, 현재 버전은 ad-hoc 코드가 많이 섞여 있어서, 좀 지저분 하고, 완성된 버전이라기 보다는 만들어가는 중이라고 보시는 편이 나을 듯 합니다.

메모리 문제도 좀 있고, 에러가 나는 부분도 많이 있지만, 3달간 2명이서 풀타임도 아니고 틈틈히 만든 것 치고는, 이것저것 상당히 많은 기능을 붙인 것 같습니다. 기본적인 컨셉은 C/C++과 섞어서 사용할 수 있는 Dynamic Typing, Prototype-based OOP 언어이고, 정수, 실수, 문자열, 변수, 함수, 클래스, 오버라이딩, 연산자재정의, 상속, 람다, 리스트, 해쉬 등을 부분적으로 지원합니다. 안전성에는 조금아주많이 문제가 있습니다만..;;

코드는 아래 사이트에서 다운받으실 수 있고, 윈도우용 바이너리는 현재 제공하지 않고 있는데, MinGW로 빌드하면 문제 없이 컴파일 됩니다.

저장소 : http://github.com/peanut-lang/peanut
예제코드 : 예제1, 예제2

사실은, 시연을 위해서 (로보코드와 비슷하게 생긴) 아이폰용 예제와 안드로이드용 예제도 만들었는데, 그 부분은 공개하긴 좀 문제가 있어서, 언어 엔진 부분만 올려놨습니다. 예제 코드에 C언어에 embedding 하는 것과, 반대로 peanut에서 C언어 코드를 사용하는 부분도 저장소에 있으면 좋긴 하겠는데, (시연용 예제엔 있는데), 나~중에 추가할 예정입니다. 요즘은 너무 바빠서.. ㅠㅠ

-- 이상한 나라의 종텐

p.s. 땅콩은 제가 기르던 강아지 이름입니다.


ndk-gdb

2010/07/11 11:04

Android NDK r4 에는 ndk-gdb 가 포함 되었다. ndk-build 로 빌드한 C/C++ 코드를 gdb로 까볼 수 있는 녀석이다. 주의 사항이 몇가지 있는데, {NDK}/docs/NDK-GDB.TXT 에 대부분 설명 되어있고, 당황했던 점으로는,

  • 디바이스가 Android 2.2 Froyo 이상이어야 한다. ㅠㅠ (에뮬로 되긴 하지만..)
  • Mac OS X 스노우 레오파드에서, armeabi가 아니고 ameabi 라는 얼토당토 않은 에러가 나는데, 이렇게 처리하면 된다.

디버깅 고고싱=3=3

-- 버그를 찾아 헤메이는 종텐.


Rosetta를 소개합니다.

2010/05/28 19:48

안드로이드 NDK를 이용하면 JNI가 가능하긴 하지만, 불편한 것이 한두가지가 아니다. 특히, JNI를 위한 껍데기 코드를 짜는 것에 굉장히 많은 시간이 낭비된다. 그래서, SWIG(Simplified Wrapper and Interface Generator) 같은 대안이 있긴 하지만, SWIG의 C++ to Java, Java to C++ 생성기는 enum을 사용하는데, 안드로이드 개발 가이드라인에서는, 성능 문제로 enum을 사용하지 말라고 권고한다. (실제로 좀 느리기도 하다.)

여러가지 이유로, 혼자 만들어서 안드로이드 NDK가 필요한 프로젝트들에서 사용하던 라이브러리가 있는데, 공개해야지 공개해야지 하다가, 이제서야 좀 가다듬고, NDK r4 가 나온 기념으로, NDK r4 형식으로 말아서 올린다.


http://bitbucket.org/jong10/rosetta 에서 최신버전을 다운받을 수 있으며, Python이 필요하다. 윈도우에서 개발하는 경우는, python이 cygwin 안에 설치되어 있어야 한다. 이 프로젝트를 받으면, 안드로이드 프로젝트 형식인데, 프로젝트 위치에서 ./build_all.sh 을 실행하면, 로제타로 C++과 Java를 위한 껍데기 코드가 자동 생성되고, 그 후에 C++이 NDK를 통해 빌드가 된다. 그 후에 이클립스 등에서 Java를 빌드하고 안드로이드 에뮬레이터나 기기에서 실행하면 된다. JNI 부분이 바뀌지 않고, 로직만 바뀌는 경우는, 기존처럼 ndk-build 를 이용하면 된다. 단지, 자동 생성되는 스텁 코드를 업데이트해야 할 경우만, ./build_all.sh 를 사용한다.

사용할 함수는 rosetta/settings.py 에서 등록해서 쓰면 되며, Java에서 C++ 함수를 호출하거나, C++에서 Java 함수를 호출할 때 필요한 stub code를 자동 생성해준다. 제약사항으로는, 호출 당하는 코드는 Singleton이어야 한다. (좀 큰 제약사항이지만, 이것을 극복하려면, 로제타 자체가 10배는 더 커진다. 인스턴스 관리를 동기화 해야 하므로.). 제약사항이 좀 맘에 안 들지만, 적당히 쓸만한 것 같고, 실제로 약 8개월 이상 진행된 모 통신사의 안드로이드 프로젝트에서, 로제타가 사용되었다.

아, 좀 더 치명적인 단점이 하나 더 있는데, 아직은 배열을 지원하지 않는다. 내가 좀 한가해지면, 지원하게 될 지도 모르지만. -_-;; 마지막으로, 치명적인 버그가 있다면 메일을 보내주시면 감사하고, 버그 패치도 같이 보내주시면 더욱 감사. :-)

-- 이상한 나라의 종텐.

p.s. 조만간, 시간을 내서, 좀 자세한 사용법을 써야겠다.. ㅠㅠ


Android 2.2 Push API (C2DM)

2010/05/28 13:01

Android 2.2 Froyo에는, 아이폰처럼 Push 알림을 위한 API가 추가되었다. Android C2DM(Android Cloud To Device Messaging)이라고 하는데, 아래 링크에 자세한 설명이 있다.

-- 이상한 나라의 종텐.


Bitmap of Android NDK r4

2010/05/27 00:16

Android NDK r4 에는, native 코드에서, Bitmap 을 사용할 수 있는 API가 제공된다.
<ndk>/docs/STABLE-APIS.TXT 에 설명이 있다. 다 좋은데, Android 2.2 Froyo 부터 가능하다. 아놔.

-- 이상한 나라의 종텐.


Android NDK r4

2010/05/26 15:52
안드로이드 NDK r4 가 새로 나왔다. 안드로이드 2.2 SDK와 같이 나온 것 같다. 디렉토리 구조가 또 바뀌었다. -_-;; 좋은 소식은, 이제서야, 안드로이드 프로젝트의 서브 디렉토리로, jni와 관련된 모든 내용이 들어갔고, 프로젝트 디렉토리 안에서 ndk빌드가 가능해졌고, ndk 프로젝트 만드는 방법이 매우 간단해졌고, 아무튼, 짱짱 편해졌다는 것.

안드로이드 NDK는, r1 이 나오기 전 부터.. SDK 1.5 의 특정 디렉토리를 해킹(?)해서 사용해왔는데, 이제서야 좀 구조가 제대로 갖춰진 느낌. 참고로, 어차피 Eclipse에서 안드로이드 개발을 하는 경우면, CDT를 깔고 C/C++ 코딩도 Eclipse에서 하고, 빌드만 콘솔(또는 cygwin)에서 하면 좀 더 편하다.

자세한 내용은, 이쪽으로.. http://developer.android.com/sdk/ndk/

-- 이상한 나라의 종텐.

몇몇 언어들에 대한 BNF 문법을 조사(?)중이다. 링크를 기록용으로 남긴다. Lisp이나 Io를 보면 아름답다. BNF의 양과 언어의 표현력은 비례도 반비례도 아니다.

-- 이상한 나라의 종텐

p.s. 홍민희님께서 제보해주셔서, Lua도 추가했다. 또, 문법이 간단한 언어가 있다면 추천 바랍니다. :-)


C언어를 처음 배우는 초심자들은, "재귀호출은 나쁘다"라고 세뇌당한다. 하지만, Lisp, Scheme, Erlang, Haskell 과 같은 함수형 언어를 배워보면, 아놔. 반복문 조차도 재귀로 표현한다. 여기에서 많은 사람들이 헷갈려 한다. 그럼, 함수형 언어들은 성능이 구린가? 그렇진 않다.

함수형 언어에선, 재귀호출에 스택을 안 쓴단 말인가? 스택이 안 넘치나? 넘칠 수도 있고, 안 넘칠 수도 있다. 정확히 말하면, 스택이 넘치지 않게 재귀 호출 코드를 짜는 방법이 있다. 나는 이게, 함수형 언어들에만 적용되는 줄 알았는데, 요즘의 C/C++ 컴파일러들에서도 적용된다.

자세한 설명은, Tail Recursion과 최적화 이야기라는 글을 보자. -_-;;

Tail Recursion 최적화를 하는 방법은,
첫째로, Tail Recursion 스타일로 코드를 짜야 하고, (사실, 이게, 처음엔 쉽지 않긴 하다.)
둘째로, gcc/g++은, -O2 또는 -O3 옵션을, VC++의 경우는, /O2 또는 /Ox 옵션을 주면 된다.

참고자료

  1. Interview Questions : Tail Recursion for C/C++
  2. Which, if any, C++ compilers do tail-recursion optimization?

"재귀호출은 무조껀 나쁩니다."라고 말하는 교수님/강사/선배/친구가 있다면, "뻥치시네"라고 한마디 해주자.

-- 이상한 나라의 종텐.


1번 PC에서 컴파일한 apk를 폰에 올려서 작업하다가, 2번 PC에서 컴파일한 apk를 폰에 올리려고 하니깐, certification 어쩌구 하면서 에러가 난다. 그래서, 그 apk를 uninstall 하고 다시 해보니깐 된다. 여차저차해서 알아보니, signing이 되지 않은 상태의 앱은, PC마다 key가 달라서, 업데이트가 안되는 것 같다.

안드로이드는 uninstall을 할때, 관련된 db를 마이그레이션 하는게 아니고, 모두 지워버리기 때문에, -_-;; 꽤 난감한 시츄에이션. 1번 PC로 컴파일한 녀석을 사용하면, 업그레이드 버전도 모두 1번 PC에서만 컴파일해야 되기 때문이다.

"응? 왜???" 라고 생각되어 찾아보니, Signing Your Applications 라는 글이 있더라. 안드로이드를 여러달 만졌지만, 마켓에 올린 적은 없어서 그냥 배포할때만 쓰는 건 줄 알았는데.. 겸허한 마음가짐으로 찬찬히 읽어보면, Signing을 해야만, 여기서 컴파일하든, 저기서 컴파일하든, 같은 key를 이용할 수 있는 것 같고, 마켓에 올릴 수 있는 것 같다. 별도로 Signing을 하지 않으면, Debug Mode 에서는 기본적으로 각 PC마다 별도의 key가 생성되는데, 이는 임시 키로, 디버깅을 위해서 마련된 key이기 때문에, 해당 apk 파일은 컴파일한 후에 1년간만 사용할 수 있다는 것 같다.

에뮬에 올리는 경우야 어차피, 에뮬 자체를 공유하지 않으니깐 상관 없지만, 폰에 올리면서 여러 PC에서 작업하는 경우는 숙지하고 있어야 하는 것 같다. 배포할때는 물론이고.

아, 주의할 점은, 마켓에 올리지 않고, apk 파일을 직접 돌려서 공유한다고 하더라도, Signing을 하지 않았을 경우에, bin 폴더에 생성되는 apk 파일은, Debug Mode라는 점이다. Ant로 컴파일 할 경우엔, apk 이름에 debug 라는 단어가 붙었던 것으로 기억하는데, 이클립스에서 컴파일 할 때에는, 이런 단어가 붙지 않아서, release 모드로 오해하기 쉽다. (나만 그래? -_-;)

-- 이상한 나라의 종텐.

« Previous : 1 : 2 : 3 : 4 : 5 : ... 9 : Next »