참고 : http://www.paulgriffiths.net/program/c/srcs/helloxsrc.html



참고라기 보단, 위 URL을 그냥 긁어서 컴파일하고 실행해보았다.
할건 많고 난 충분히 게으르다 ㅠㅠ


신고

'Open Source > Cairo & Skia' 카테고리의 다른 글

Xlib 예제  (0) 2011.05.31
[SKIA] SkHello  (0) 2011.02.09
Cairo 1.10.0 릴리즈  (0) 2010.09.08
[예제] Cairo/Gtk+ 이미지 출력하는 예제  (0) 2010.07.21
cairo 1.9.8 스냅샷 요약  (0) 2010.07.14
[CAIRO/GTK] Checker 패턴 예제  (0) 2010.07.12
Posted by 소혼
TAG xlib, 예제
Inside Android 책을 보면서 JNI 예제를 따라 해보고 있다.

책에서는 Visual C++로 예제를 실행하고 있어서 리눅스에서 so 만드는 법이 빠져있다.

1. 책의 예제대로 간단한 java파일을 하나 만든다. HelloJNI.java

public class HelloJNI {
native void printHello();
native void printString(String str);

static { System.loadLibrary("hellojni"); }
public static void main(String args[]) {
HelloJNI myJNI = new HelloJNI();
myJNI.printHello();
myJNI.printString("Hello World");
}
}

2. javac로 HelloJNI.java를 컴파일한다.
# javac HelloJNI.java

3. javah로 헤더를 생성한다. (HelloJNI.h가 생성된다.)
# javah HelloJNI

4. hellojni.c 파일을 만든다. (2에서 생성된 header를 include하고 함수의 바디를 구현)
#include "HelloJNI.h"
#include <stdio.h>


JNIEXPORT void JNICALL Java_HelloJNI_printHello(JNIEnv *env, jobject obj)
{
    printf("Hello World\n");
}

JNIEXPORT void JNICALL Java_HelloJNI_printString(JNIEnv *env, jobject obj, jstring string)
{
    const char *str = (*env)->GetStringUTFChars(env, string, 0); 
    printf("Hello World : %s\n", str);
}


5. hellojni.c를 컴파일한다. (생성되는 so 파일명이 libXXX.so가 되어야 한다. XXX는 java 파일에서 load한 이름)
gcc -fPIC -c hellojni.c
gcc -shared -o libhellojni.so hellojni.o

6. LD_LIBRARY_PATH를 건다.
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

7. 실행한다.
java HelloJNI

* 6번과 7번 대신 아래 명령어를 실행해도 된다.
java -Djava.library.path=. HelloJNI


여담) 누군가는 하루 10시간을 회사에서 일하고 휴식을 취하지만, 누군가는 10시간이 넘게 회사에서 일하고 집에서는 미래를 만든다.
동기가 쓴 책을 읽을때보다 후배가 쓴 책을 읽고 있을때 나의 게으름이 더 절실히 와닿는 것 같다.
신고

'프로그래밍 언어 > <Java>' 카테고리의 다른 글

Sort a HashMap by Value  (0) 2011.08.07
JNI on linux  (0) 2010.12.27
[자바] 날짜, 요일 출력.  (0) 2010.11.06
[자바]일련의 숫자 임의 정렬하기  (0) 2010.07.31
[String]String.format  (0) 2010.06.16
[팁] File 읽어서 파싱하기  (0) 2010.06.10
Posted by 소혼
TAG Java, JNI, 예제
이제 3D 공부를 시작해봅니다.

FirstGLRenderer.java

Act3D1.java


신고
Posted by 소혼
glib에서 제공하는 String 객체


실행 결과
str = [abcd123456]

그 밖에 다양한 함수는 아래 URL을 참고.
http://library.gnome.org/devel/glib/stable/glib-Strings.html
신고

'Open Source > Gtk+' 카테고리의 다른 글

libsoup cache( but crashed )  (0) 2011.07.12
libsoup 예제  (0) 2011.05.16
[GLIB] GString 예제  (0) 2010.10.28
Posted by 소혼
TAG glib, 예제
너무 간단한 건데, 이런걸 한번에 캐치하지 못했다.

수학시간에 배운데로 a -b < 0 은 a < b와 다를 바 없다.

하지만 프로그래밍 언어에서는?

꼭 그렇지는 않다.


위 간단한 코드를 출력해보면 무엇이 나올까?
출력 결과는
a < b
[end]

가 된다.
어찌 보면 당연한건데 막상 프로젝트에서 접하면 쉽게 발견하기 어려운 버그가 된다.
unsigned 인 a 와 b의 차를 계산하여 나온 결과가 음이 되므로 오버플로우에 의해서 a - b는 양이 된다.

이런 코딩을 하진 않겠지만 눈에도 익혀서 디버깅을 할 때 쉽게 찾을 수 있도록 노력해야겠다.



신고

'프로그래밍 언어 > C/C++' 카테고리의 다른 글

linker 관련 링크  (0) 2011.04.15
calloc vs malloc  (6) 2011.04.06
[C언어] a - b < 0 vs. a < b  (0) 2010.10.25
C로 수행시간 체크하기  (0) 2010.09.30
__builtin_expect 키워드  (0) 2010.09.10
gcc 업그레이드 (4.5.0)  (0) 2010.07.21
Posted by 소혼
TAG C, 예제
http://harookie.springnote.com/pages/759316 참고





위 예제를 가지고 간단한 테스트 코드 작성.
한글 나오는 법은 추후 분석해야 할듯.

  File "parser.py", line 33, in <module>
    u = unicode(s, 'euc-kr').encode('utf-8')
UnicodeDecodeError: 'euc_kr' codec can't decode bytes in position 49-50: illegal multibyte sequence

이런 에러가 난다.

신고

'프로그래밍 언어 > <Python>' 카테고리의 다른 글

py2exe with PMW  (0) 2010.12.28
py2exe  (0) 2010.12.28
[python]XML 처리  (0) 2010.10.12
[파이썬] CSV2SQL ver 0.1  (0) 2010.08.27
[python] Windows에서 커맨드창 하나 더 띄우기  (0) 2010.08.24
[wxPython 예제] 2. layout  (0) 2010.08.18
Posted by 소혼

관련 글1 : http://bunhere.tistory.com/140 [Widget][예제]ListView with CursorAdaptor
관련 글2 : http://bunhere.tistory.com/153 [팁]기존에 생성된 (Sqlite3) DB를 안드로이드에서 이용하기

생성된 DB를 사용하는 것과 관련된 질문들이 많아 예제 프로그램을 작성해보았습니다.

옛날 만들었던 ListView with CursorAdaptor의 코드를 거의 그대로 들고 왔으나, DB를 만드는 부분은 153번의 initialize를 사용했습니다.

1. DB를 준비하자

먼저 DB 파일이 있어야 할 것입니다.
SQLITE3을 통해 아래와 같이 만들었습니다.(리눅스에서)

필요하신 분들을 위해 해당 파일 첨부합니다.

SQLite version 3.6.16
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table lecture (_id integer, name);
sqlite> insert into lecture values(1, 'ryuan');
sqlite> insert into lecture values(2, 'yesum');
sqlite> insert into lecture values(3, 'mindong');
sqlite> .q

2. 새 프로젝트를 만듭니다.
생성하는 방법은 익히 아실거라 생각됩니다. 중요한 것은 Package name입니다.
com.sohon.testDB 으로 패키지명을 정한 경우
해당 안드로이드 어플리케이션은 위 패키지 경로가 지정한 곳에 생깁니다.
그리고 /data/data/com.sohon.testDB 아래에 패키지 관련 파일들이 아래 그림과 같이 생기게 됩니다.
DDMS의 일부를 캡쳐한 화면입니다. 상단에 /data/data/는 다른 프로젝트들 떄문에 같이 캡쳐하지 못한 점 양해 부탁드립니다.

일단 위와 같이 새 프로젝트 정보를 입력하고 Finish를 누릅니다.
그러면 이클립스 개발환경이 뜹니다.

3. 코딩하기
ActTestDB.java 파일에 아래와 같은 내용을 코딩합니다
아래 내용은 관련글1과 관련글2의 내용을 합쳐놓은 코드와 유사합니다.
꼭 필요한 부분만 설명드리겠습니다. 관련글1,2를 참고하시기 바랍니다.

먼저 onCreate에서 initialze(this)를 통해 DB 파일을 asset으로부터, /data/data/com.sohon.testDB/databases 아래로 복사할 것입니다.

그리고 setAdaptor를 이용해 m_listbox에 DB를 연결합니다.
이것을 위해 수정해야 할 정보는 먼저 ROOT_DIR, DATABASE_NAME, TABLE_NAME 입니다.

실행하시면 아래와 같은 결과를 얻으실 수 있습니다.
에뮬레이터 resolution이 좀 이상한 것은 제 에뮬레이터 해상도를 이상하게 맞춰놔서 그렇습니다.(테스트용)


신고
Posted by 소혼
완전하진 않지만 csv 포맷을 sql 포맷으로 활용하기 위해 변환하는 데 유용한 스크립트입니다.
SQL 형태로 만들어주지는 않습니다. 어떤 컬럼이 들어가는지 알 수 없기 때문입니다.
허접하지만 불펌은 정중히 사양하겠습니다.

csv가 만약 단순히 , 로 이루어져 있다면 이렇게 복잡하게 할 필요가 없으나 컬럼에 ,가 내용으로 들어가 있는 경우 "" 로 문자열들이 묶여 있게 됩니다. 따라서 단순히 ,로 split 할 수 없어서 이런 스크립트를 만들었습니다.

허접한 글이지만, 도움이 되셨다면 아래 손가락 꾹 눌러주세요.


신고

'프로그래밍 언어 > <Python>' 카테고리의 다른 글

py2exe  (0) 2010.12.28
[python]XML 처리  (0) 2010.10.12
[파이썬] CSV2SQL ver 0.1  (0) 2010.08.27
[python] Windows에서 커맨드창 하나 더 띄우기  (0) 2010.08.24
[wxPython 예제] 2. layout  (0) 2010.08.18
[TkInter 예제]2. Frame과 Layout  (2) 2010.08.18
Posted by 소혼
TkInter와 비교하면서 하려니 노력이 두배나 드는 것 같네요.

어쨌거나 TkInter보다 wxPython은 layout 이 훨씬 더 훌륭하다는 생각이 듭니다.
당장 layout을 위해 absolute positioning과 다양한 sizer를 제공하고 있습니다.
http://www.zetcode.com/wxpython/layout/



비슷하게 만들려다가 졸려서 그냥 사이트 코드를 거의 가져오다시피 했습니다.
absolute layout의 예로 pos와 size를 줘서 원하는 위치 원하는 크기에 배치하는 것이 가능합니다.

TkInter와 유사한 코드는 내일 올려야겠네요.

허접한 글이지만, 도움이 되셨다면 아래 손가락 꾹 눌러주세요.
신고
Posted by 소혼
Tk는 레이아웃이 좀 귀찮은 것 같다. 그나마 grid라도 있어 얼마나 다행인지...

Frame은 여러 widget을 packing하는데 사용할 수 있는데 packing하는 방법이 너무 단조롭다는 단점을 갖고 있다.
이러한 문제는 grid를 이용해 다소 보완할 수 있다.
grid는 가상의 테이블이 있다고 생각하고 row, column 값을 넣어주면 된다.
가장 큰 row숫자와 column이 이 가상의 테이블의 열과 행의 크기를 지정하는 것 같다.
조심해야 할 점은 0,0부터 시작한다는 점

쓰는 법은 아무 위젯이나 .grid(row=?, column=?)이다.
단점은 너무 많은 위젯을 다 이런식으로 레이아웃을 잡으려면 테이블이 엄청 복잡해질 거라는 점인데. Frame을 적절히 섞어서 레이아웃을 잡아주면 될 것 같다.

허접한 글이지만, 도움이 되셨다면 아래 손가락 꾹 눌러주세요.
신고
Posted by 소혼
이전버튼 1 2 3 이전버튼

티스토리 툴바