하루종일 Android OS에서 C/C++코드와 Java 코드를 연동하기 위해서 Android NDK를 사용하여 프로그래밍중입니다.

C/C++로 개발된 기능을 Java에서 쓰기 위해서 JNI(Java Native Interface)를 사용해야되긴 하지만 처음 접하니 어렵군요.

분명히 Visual Studio에서 빌드하여 성공한 코드가 JNI(Java Native Interface)로 빌드할땐 에러가 나니 짜증이 나군요.


ps. 2011년 2월 21일 오후 5시 18분경 컴파일 성공. 이제 마무리 작업만 하면 됩니다 ~_~





Buy me a coffeeBuy me a coffee

이번에 Android에서 디코딩관련해서 C++코드를 사용해야할 일이 생겼다.

그래서 디코딩관련 C++코드와 Android 어플과 연계하는 방법을 찾다보니 JNI을 알아야겠다는 결론이 나왔음.

The Java Native Interface Programmer's Guide and Specification

간단한 Java Native Interface 예제

위의 링크에 나오는 Java Native Interface 관련 문서를 읽고 있다만 아직도 이해를 못하겠다.
너무 익숙하지 않아서 그런가?

Java 코드와 C++ 코드만 쳐다보니 어질어질..  

Buy me a coffeeBuy me a coffee



kenu님의 블로그에서 Eclipse 3.6 Helios가 새로 출시되었다는 소식을 듣고 Eclipse 3.6 Helios를 설치하였습니다.

설치후 실행할때 아래와 같은 오류가 나오더군요.

Failed to create the Java Virtual Machine 이라는 창이 뜹니다.


실행할때 나오는 Failed to create the Java Virtual Machine 이라는 에러는 이클립스가 JVM을 못찾아서 나오는 에러입니다.

해결방법은 eclipse.ini에 아래와 같은 내용을 추가를 합니다.

-vm

C:/Program Files/Java/jdk1.6.0_16/bin/javaw.exe

JVM을 지정하는 부분을 넣어서 인식해주면 됩니다.

-vm 

(JDK 설치된 폴더)\bin\javaw.exe

eclipse.ini에 아래와 같은 내용이 나오는데 아래와 같이 굵은 표시가 보이는 곳에 -vm (JDK 설치된폴더)\bin\javaw.exe를 추가하시면 됩니다.

-startup

plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar

--launcher.library

plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.0.v20100503

-product

org.eclipse.epp.package.jee.product

--launcher.defaultAction

openFile

--launcher.XXMaxPermSize

256M

-showsplash

org.eclipse.platform

--launcher.XXMaxPermSize

256m

--launcher.defaultAction

openFile

-vm

C:/Program Files/Java/jdk1.6.0_16/bin/javaw.exe

-vmargs

-Dosgi.requiredJavaVersion=1.5

-Xms40m

-Xmx512m

이클립스를 실행하니 Helios가 나오면서 아래와 같이 나오더군요.

Eclipse 3.6 HELIOS (이클립스 3.6 헬리오스)

Eclipse 3.6 HELIOS 첫 실행화면.


지금 Eclipse 3.6 Helios를 사용해보니 이전 버전인 갈릴레오보다 뭔가 더 좋아졌네요. 

뭔가 매우 친절해진 메세지며, Eclipse Marketplace가 추가, 웹브라우저 지정도 가능해서 IE로 html볼지 Firefox에서 볼지를 선택 짖정도 가능하더군요.


Buy me a coffeeBuy me a coffee

2010년 7월 10일(토)에 열리는 2010 한국 자바 개발자 페스티벌에 참석하게 되었습니다.

장소는 이화여대 ECC입니다.


참가신청 링크

2010 한국 자바 개발자 페스티벌 강사 및 강의 소개


이번 페스티벌에선 웹과 모바일 플랫폼인 안드로이드 기반의 내용들이 많이 나옵니다. 요즘 트랜드가 안드로이드라 보니 다들 안드로이드 플랫폼에 뛰어드는 것 같습니다.

Buy me a coffeeBuy me a coffee



Java 4-Ever Trailer


이 동영상은 개발자 특히 자바 개발자들이 보면 배꼽잡고 웃습니다.

이것 영화들 짜집기해서 올렸는줄 알았다만 그게 아닌듯 하더군요. 노르웨이 사람들이 직접 영화 트레일러 찍어서 올린거더군요.

노르웨이에서 열리는 JavaZone2010 행사용으로 올린거라는데, CNET, Mashable에도 소개되고 Java의 아버지인 James Golsing의 블로그에도 올라갔으니 일파만파입니다.


개발자가 아닌 사람이 봐도 정말 웃긴 설정에 재미있을것 합니다.


아버지가 방에 급습하였을때 아들과 친구들이 Open Source, Java코드를 보다 아버지에게 포르노(Porn)를 즐긴다는거에 ......

아들이 Java를 쓴다고 하니깐 My son is monster하며 울먹이는 어머니.

오픈소스, 자바에 관심 있던 분들이면 너무 재미있어서 빵터집니다.

Buy me a coffeeBuy me a coffee

이 글은 DroidEgo님의 2010년 2월 1일의 미투데이 내용입니다.

Buy me a coffeeBuy me a coffee

오랜만의 프로그래밍 관련 포스팅입니다.

저는 이번에 제 Twitter 계정에 시간을 알려주는 봇을 구현하였습니다.
(봇[bot] : 특정시간이나 행위에 자동반응하는 형식의 실행하는 서비스를 말합니다)

저의 Twitter 계정에 "현재, 한국시간으로 2010년 1월 24일 오전 6시 를 알려드립니다." 라는 식의 시계 봇을 구현함.


위의 화면를 보시면, 제 트위터를 Following하시면 제가 현재 시간을 알려드리는 걸 알수 있습니다.

(봇은 어떻게 구현했나구요? Google AppEngine이라는 서비스로 Java로 구현했답니다^^)


Google AppEngine book
Google AppEngine book by Channy Yun 저작자 표시

(참고로 Google App Engine은 무료로 제공되는 Java/Python 기반 웹 호스팅 서비스입니다)


제가 간단한 트위터에 시간 알려주는 봇을 구현한 이유는 트위터에서 @xguru 라는 닉을 사용하는 권정혁님이 개발한 트위터 봇들에 영감을 얻고, 나도 프로그램을 작성할 수 있는 학생인데 한번 만들어 봐야지라는 문제의식으로부터 시작하였습니다.

트위터의 xguru님께서 만든 Twitter bot들입니다.


위의 시간을 알려주는 봇을 구현하는데엔 기본적인 Java지식, 그리고 Java Server Page(JSP), Servlet, Twitter API등을 알아야됩니다.

Java기반 지식들은 아 알겠다는 가정하에 트위터 API들을 알아봐야겠죠?

Twitter의 API에 대해선 Twitter에서 제공하는 사이트에서 검색을 하면 나옵니다.
Twitter API wiki

Twitter API는 REST API와 Search API라 나눠집니다.

  • Twitter REST API
    개발자들이 update timeline, status data, 사용자 정보등의 Twitter의 핵심 데이터를 작성, 수정등의 접근할 수 있게 허용해줍니다.
  • Twitter Search API
    Search API는 개발자들에게 Twitter 검색 서비스와 상호작용할수있도록 해주며, 검색 트랜드 관련 데이터에 접근 할수 있도록 해준다.
  • 위의 글의 출처는 아래와 같습니다. http://apiwiki.twitter.com/API-Overview

    The Twitter REST API methods allow developers to access core Twitter data. This includes update timelines, status data, and user information. The Search API methods give developers methods to interact with Twitter Search and trends data.

참고로 Twitter API를 사용할때 주의해야할 점은 일정시간 안에 전송되는 요청을 제한을 합니다.

Twitter API를 사용하였을 경우에 시간당 최대 호출을 150개로 제한을 하고 있죠.

최대 호출을 150개 넘게 호출하면 아래 화면과 같이 Limit라는 것에 걸려서 글을 작성 못하는 일이 발생합니다.

리밋에 대해선 트위터 리밋에 관하여…라는 글을 읽어보시기 바랍니다.

트위터 리밋에 걸릴때 나오는 문구입니다. 이것은 누군가 잘못된 암호를 보내려는 공격시도가 있을때 보이는 리밋문구입니다.


만약 프로그램을 작성한 봇이 요청을 시도할때 이유 없이 에러 발생하면 100% 리밋에 걸렸는지 의심을 해봐야됩니다.

여기서는 Twitter에 글을 작성할 것이기 때문에 Twitter REST API를 사용합니다.

Twitter REST API를 가지고 직접 구현해서 Twitter bot을 구현할 수 있습니다. 그러나 삽질이긴 합니다 =_=.

이미 트위터의 API를 구현한 3rd Party 라이브러리들이 많이 제공하고 있답니다.

http://apiwiki.twitter.com/Libraries 여기에서는 각종 언어로 Twitter REST API를 구현한 라이브러리들이 있습니다.

저는 간단하게 코딩을 하려는데 Twitter4J라는 라이브러리를 선택하였습니다.


Twitter4J는 Yusuke Yamamoto가 Java로 구현한 라이브러리입니다. 오픈소스이며, maven과 통합가능하며, Google App Engine과 친화적인 Java 라이브러리입니다. Twitter4J는 BSD 라이센스을 가지고 있습니다.

Twitter4J는 다음과 같은 기능을 제공한답니다.

  • 100% 순수 자바로 구현 되었으며, JDK 1.4.2 이후의 버전에서 동작한다.
  • Google Android Platform에서도 지원가능
  • 의존성이 없음. 추가적으로 필요한 jar 파일이 없어도 됨.
  • OAuth를 지원함
  • 빠른 수행을 위해서 데이터를 gzip으로 압축해서 전송함

Twitter4J 홈페이지 - http://twitter4j.org/en/index.html



Twitter4J 라이브러리를 사용하고 Eclipse와 Google App Engine을 이용하여 트윗 봇을 구현하였습니다.


Servlet mapping은 web.xml에 있으며 서블릿 클래스를 추가하고 싶으면 web.xml을 추가하면 됩니다.

자바코드를 작성하여 트윗에 올라갈 적절한 내용을 구현합니다.

자바로 트윗 봇을 구성하였으면, 매 시간마다 트윗을 올리기 위해서는 cron 기능을 이용해야합니다. cron설정을 하면 원하는 시간에 트윗을 올릴 수 있습니다.

Google App Engine에서 제공하는 cron을 사용하려면 war/WEB-INF 폴더에 cron.xml을 생성하여 cron.xml에 원하는 시간을 작성해서 올리면 됩니다.

cron 기능 수행에 대한 자세한 내용은 Google App Engine - Scheduled Tasks With Cron for Java 링크를 참조하기 바랍니다.

저는 트윗을 한시간에 하나씩 올리려고 아래와 같이 cron.xml을 구성하였습니다.


<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
  <cron>
    <url>/mashuptime</url>
    <description>Execute time bot every 1 hours</description>
    <schedule>every 1 hours</schedule>
    <timezone>Asia/Seoul</timezone>
  </cron>
</cronentries>


작성을 하고 나선 Deploy를 하여 올리면 간단한 트윗봇이 완성됩니다^^

Java로 작성한 Twitter bot을 Google App Engine에 Deploy하고 올리려는 화면


Google AppEngine으로 Java로 된 웹 페이지를 코딩하고 나선, 갑자기 이런 생각을 하더군요.

Google AppEngine에서 cron기능을 제공하여 매 시간마다 Servlet을 작동시켜 아래와 같은 봇을 구현을 하는데엔 30분도 걸리지 않았습니다.

참 쉽조잉?



이번에 뭔가 Feel을 받으면 매쉬업으로 Twitter bot들을 계속 양산할 느낌이 들더군요. @.@

Buy me a coffeeBuy me a coffee

출처 - Sakai Project : Documentation

Developing for Sakai, Part I: Getting Started (Z. Thomas, Aeroplane Software)

Get Sakai up and running quickly as you follow this step-by-step guide. Technologies covered include Java, Subversion (source control), Maven (compilation, build and deployment) and Tomcat (servlet container).

Developing for Sakai, Part II, Setting Up Eclipse (Z. Thomas, Aeroplane Software)

Zach Thomas provides another step-by-step introduction to Sakai development, this time focusing on the open-source Eclipse IDE, the development platform of choice for Sakai developers.

Developing for Sakai part III: App Builder Plugin (Z. Thomas, Aeroplane Software)

Zach discusses how to install and utilize Aaron Zeckoski's Sakai App Builder plugin for Eclipse.

Eclipse 101 - Basics, Tips & Tricks (L. Speelmon, Indiana University)

Builds on Zach Thomas' introductory screencasts by providing additional best practices when using the Eclipse IDE for Sakai development.

여기에 있는 Screencast들은 Sakai Project를 시작할때 어떻게 개발환경을 셋팅하는지를 보여준다.

JAVA SE, Maven, Tomcat, Eclipse등의 개발환경 셋팅이 정말 중요하다는 것을 느껴줍니다.

맥에서 셋팅하던데, 맥을 쓰고 싶은 욕구가 증가하는 단점도 있다.

Buy me a coffeeBuy me a coffee

정말 오랜만에 JAVA를 만지게 되었다.

학과에서는 커리큘럼을 시스템쪽으로 공부하도록 맞춰져있기 때문에 항상 C아님 OOP를 쓴다면 꼭 C++를 사용하도록 해서 프로그래밍 하는데 재미가 하나도 없었다.

그러나 한 줄기 빛이 있었나니. 재수강하는 기초데이터베이스 과목 조교님께서 JAVA로 DB응용프로그램을 짜라고 하셨다.

얼씨구나 좋구나. 내가 왜 좋아 하는 이유는 한가지, JAVA를 사용하기 때문이다.

대학교 1학년 여름방학때, 회사서 아르바이트를 하면서 처음 JAVA를 접하면서 인터넷, 웹에 대해 관심을 많이 가지게 되었고, JAVA로 DB프로그램을 짜 본경험이 있었기 때문이다.

작년 기초데이터베이스 과목 들었을때에는 교수님께서 이상하게 과제를 내셔서 웹서버도 만들고 CGI형식으로 직접하게 하고 임베디드 SQL인 ORACLE PRO*C와 C++을 사용하면서 과제를 내주셨기때문에 과제 하는데 온갖 갖은 노력을 해도, 시간이 부족해서 대충 내고 말았던 기억이 있었다. (팀프로젝트였고 두사람이 해야했지만 한 사람이 C++코딩을 전혀 못하는 젬병이라 내 혼자 하다가 제풀에 넘어갔음. OS과제하느라 DB과제 신경 못쓴것도 있지만.)

(임베디드 SQL로 C++과 연동해서 프로그램 짜라면 쉽게 짤수 있다. 그러나 과제 낼때 웹으로 해야한다고 해서 C++에 CGI를 직접 그때 알아서 구현하라고 해서 임베디드 SQL내용은 별로 없었고 CGI를 직접 구현하는 실제로 쓸모없는 코드양들이 많다는 단점이 있다.)

JAVA로 하면 임베디드 SQL 없이 그냥 JAVA에서 제공하는 SQL관련 메소드를 이용해서 과제를 하면 되니 속이 엄청나게 편하다. 거기에 인터넷관련 메소드 사용 없이 콘솔로 보여주기만 하면 끝이니, 이번학기 과제는 날로 먹는 것 같은 느낌까지 난다. (3일만에 놀면서 다 짰다.)

JAVA에는 Eclipse가 궁합이라는 것을 과제를 해보면서 뼈져리게 느낀다. Eclipse가 아니였다면 몇일 삽일 할 내용을 빨리 제거도 해주니 IDE의 덕도 많이 보고 있구나.

JAVA 코딩에는 Eclipse로 코딩해야지 편하다는 사실. (Sakai Project도 Eclipse를 써야지 이해 되는 것들이 많다.)

ps1. 오랜만에 Eclipse로 JAVA코딩하는 것이 편하다는 사실을 다시 깨닫고 있습니다. IDE는 좋은 것 써야한다는 결론! 이클립스가 좋아요라는 뻘글을 쓰려고 이런 글 올리나 *-_-*
ps2. 학과에선 C/C++만 강조하지만, 지도교수님이 시키는 일로 요즘 JAVA코딩을 하고 있습니다.

Buy me a coffeeBuy me a coffee
Planet Sakai

Over one-third of the top 100 universities in the world participate in Sakai, providing a system now in use at over 160 other universities, colleges, and schools.


이번 대학원에 들어가기 전에 지도교수님께서 한번 연구해보라고 던져주신 Open Source Project인 Sakai Project에 대해 뚫어지게 공부를 하고 있다.

국내에서 Sakai project에 대해 관심을 가진 동네는 배재대학교 밖에 없더군요. 석사 졸업하기 전까지 Sakai Project쪽에 많은 기여를 할 예정입니다.

Sakai Project라는 것은 2월달에 처음 알게 된 오픈소스 프로그램인데, JAVA기반의 교육 환경 프로그램이라고 생각하면 된다.

'컴퓨터 > Sakaiproject' 카테고리의 다른 글

Sakai Overview: Michael Korcuska  (0) 2009.01.04
JAVA개발에 관련 서적들  (0) 2008.12.25
Sakai Developer screencasts  (0) 2008.12.12
Buy me a coffeeBuy me a coffee

+ Recent posts