TagCloud

Thursday, March 28, 2013

ORM for Android





안드로이드 ORM 에 대한 페이지 입니다.
가능하면 계속해서 추가 업데이트 할 예정입니다.

안드로이드에서 사용할 수 있는 ORM 은 아래와 같습니다.

  1. ORM Lite
    http://ormlite.com ( For JAVA )
    http://ormlite.com/sqlite_java_android_orm.shtml ( For Android )
    http://ormlite.com/android/examples/ 
       http://logic-explained.blogspot.kr/2011/12/using-ormlite-in-android-projects.html
  2. GreenDAO
    http://greendao-orm.com/documentation/faq/
  3. ActiveAndroid
    https://www.activeandroid.com
    https://github.com/pardom/ActiveAndroid
  4. aBatis
    http://sonixlabs.com/abatis/
    http://code.google.com/p/abatis/

ORM Lite 는 Java Application 용, Android 용 모두 존재하며 가장 활동이 활발한것으로 판단됨.  엔티티 모델링은 어노테이션으로 정의하는것 같음
GreenDAO 는 엔티티 모델링 방법이 ORM Lite , ActiveAndroid 등과 달라보임.
ActiveAndroid 는 현재도 개발중이나 ORM List 보다는 활발하지 않음
aBatis 는 ibatis(mybatis)와 사용법은 비슷하나, ibatis(mybatis) 커뮤니트와 관련이 없음, 또한 현재 업데이트 되고 있지 않음


참고 자료를 보면 GreenDAO 는 추가적인 jar 파일이 하나이고 약 54KB 사이즈임, 반대로 OrmLite 는 두개의 추기적인 jar 파일이 있어야 하고 각각 37KB , 245 KB 를 차지함.
라이브러이의 크기 차이가 성능의 차이는 아니지만, 라이브러리 크기의 차이가 더 많은 기능과 많은 예외처리로 인한 안정성과 관련이 있다는 전제하에
GreenDAO 는 좀 더 작고 가벼운 프로젝트에 사용될 때 유리할 것 같고, 큰 프로젝트에 있어서는 OrmLite 가 더 많은 기능을 제공할 수도 있을 것이라는 예상이 가능함

참고자료 
Comparing android ORM libraries - GreenDAO vs Ormlite 

AMMENTOS ( 가벼운 persistent framework )
- http://www.ammentos.org/download.htm

Wednesday, February 20, 2013

기술과 인문학..그리고 니즈를 파악하는것...


NHNNEXT 동영상에서 얻은 내용...

1. 기술은 인문학과 결합되었을때 의미있는 가치로 태어날 수 있다.

2. 니즈라는것은 심플하고 평범한것 (많은사람들이 쉽게 끄덕이며 이랬으면 더 좋겠다 라는 것) - 니즈와 더 편리하게 하고 싶은 마음을 결합할 줄 아는것


NHNNEXT 내용 : http://www.youtube.com/user/NHNNEXT?feature=watch




Thursday, January 31, 2013

GCM Server side Sample Code

gcm-server.jar 를 이용하면 아래와 같이 간단하게 푸시를 구현할 수 있음

Sender sender = new Sender("XXXXXXXXXXXXXXXXXXXXXX"); // SenderID 
Message message = new Message.Builder().addData("LUVUKEY", "LUVUDATA").build(); 
   
List<string> devices = new ArrayList<string>();
devices.add("XXXXXXXX"); // Registration ID 
MulticastResult result = sender.send(message, devices, 5);




http://developer.android.com/reference/com/google/android/gcm/server/package-summary.html

Wednesday, January 9, 2013

ContentNegotiatingViewResolver(mediaType relate) error in SpringFramework 3.2 ( solved by ContentNegotiationManager )

신규 프로젝트를 위해 최신버젼의 환경(java7, tomcat7, springframework 3.2) 등을 적용하여 개발하던 중...
Spring 3.2 에서 기존에서와 같이 ContentNegotiatingViewResolver 를 사용하였는데 오류가 발생..

mediaType 을 캐스팅할 수 없다는 오류로, 환경구성에 문제가 있는줄 알고 이틀간을 파악하였으나...황당하게도 Spring 3.2 로 오면서 ContentNegotiatingViewResolver  적용 방법이 바뀐것을 확인...(최신버젼을 사용하면 고생이라는 말이 괜히 나온게 아니다 ㅠ.ㅠ)

1. 아래는 Spring Framework 3.2 이전 설정 방법.
    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="mediaTypes">
            <map>
                <entry key="html" value="text/html">
                <entry key="xml" value="application/xml">
            </entry></entry></map>
        </property>
        <property name="order" value="0">
    </property></bean>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="order" value="1">
        <property name="prefix" value="/WEB-INF/jsp/">
        <property name="suffix" value=".jsp">
    </property></property></property></bean>

2. 아래가 Spring Framework 3.2 에서 org.springframework.web.accept.ContentNegotiationManager 을 통해 설정하는 방법.
    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="order" value="1">
        <property name="contentNegotiationManager">
            <bean class="org.springframework.web.accept.ContentNegotiationManager">
                <constructor-arg>
                    <bean class="org.springframework.web.accept.PathExtensionContentNegotiationStrategy">
                        <constructor-arg>
                            <map>
                                <entry key="json" value="application/json">
                                <entry key="jsonp" value="javascript/jsonp">
                                <entry key="xml" value="application/xml">
                            </entry></entry></entry></map>
                        </constructor-arg>
                    </bean>
                </constructor-arg>
            </bean>
        </property>


        <property name="defaultViews">
            <list>
                <!-- JSON View -->
                <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
                <!-- JSONP view  -->
                <bean class="com.wemoss.common.view.JSONPView">
                    <property name="contentType" value="javascript/jsonp">
                </property></bean>
                <!-- XML View -->
                <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
                    <constructor-arg>
                        <bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
                            <property name="packagesToScan">
                                <list>
                                    <value>documentLoader.domain</value>
                                </list>
                            </property>
                        </bean>
                    </constructor-arg>
                </bean>
            </bean></list>
        </property>
    </property></bean>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="order" value="2">
        <property name="prefix" value="/WEB-INF/jsp/">
        <property name="suffix" value=".jsp">
    </property></property></property></bean>


얼리어댑터 정신을 소프트웨어 개발에 적용하면 고생할 뿐이다...ㅠ.ㅠ

Tuesday, January 8, 2013

resin launch by java application in eclipse


tomcat launch by java application in eclipse ( http://myallforyou.blogspot.kr/2013/01/tomcat-launch-by-java-application-in.html ) 에 이어 resin 을 실행하는 방법을 설명합니다.



1. eclipse > Preferences > Java > Build Path > User Libraries  에서 New 버튼 클릭


2. 사용자 라이브러리명을 입력 ( LIBRARY_RESIN_4.0.32 )


 3. Add External JARs... 버튼을 클릭

4. resin 경로의 lib 경로의  jar 파일 추가 



5. Project 선택 후, Properties 선택


6. Java Build Path 선택 후, Libraries 탭의 Add Library 버튼 클릭 


7. User Library 선택


8. 앞에서 추가한 LIBRARY_RESIN_4.0.32 선택


9. Project 에 resin configiration xml 를 위한 경로 폴더 추가 ( run > resin > resin.4.0.32 ) 후, resin.xml 작성 
<!-- - Resin 4.0 configuration file. -->
<resin xmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin">
    <log name="" level="info" path="stdout:" timestamp="[%H:%M:%S.%s] {%{thread}} " />
    <logger name="com.caucho" level="info" />
    <logger name="com.caucho.java" level="config" />
    <logger name="com.caucho.loader" level="config" />
    <class-loader>
        <tree-loader path="${resin.home}/lib" />
    </class-loader>
    <dependency-check-interval>15s</dependency-check-interval>
    <character-encoding>utf-8</character-encoding>
    <javac compiler="internal" args="-source 1.6" />
    <cluster-default>
        <resin:import path="${resin.home}/conf/app-default.xml" />
    </cluster-default>

    <cluster id="app-tier">
        <root-directory>${server.root}</root-directory>

        <server-default>
            <http port="${empty port ? 8080 : port}" />
            <memory-free-min>1M</memory-free-min>
            <thread-max>256</thread-max>
            <socket-timeout>65s</socket-timeout>
            <keepalive-max>128</keepalive-max>
            <keepalive-timeout>15s</keepalive-timeout>
        </server-default>
        <server id="" port="6900" />
        <host id="" root-directory="${server.root}">
            <web-app id="/" document-directory="src/main/webapp">
                <servlet-mapping url-pattern="*.html" servlet-name="resin-file" />
                <servlet-mapping url-pattern="*.js" servlet-name="resin-file" />
            </web-app>
        </host>
    </cluster>
</resin>



10. Preference  > Run/Debug > String Substitution 에 resin4_home 추가 ( resin4 home 경로 )




11. Run Configuration 선택



12. 신규 Java Application 생성 후, 아래와 같이 Main Class 지정 



13. Arguments 지정
- Program Arguments
-conf ${workspace_loc:webapplication}/run/resin/resin.4.0.32/resin.xml

- VM Arguments
-Djava.util.logging.manager=com.caucho.log.LogManagerImpl 
-Dresin.home=${resin4_home} 
-Dserver.root=${workspace_loc:webapplication}




16. Run 실행






tomcat launch by java application in eclipse

eclipse 에서 java application 설정을 생성하여 web application 을 실행하는 방법을 설명합니다.
java application 설정을 통해 실행할 경우, 각 was 별 context 를 다양하게 생성하여 실행할 수 있기 때문입니다.


이하는 Apache Tomcat 을 기준으로 진행합니다.


1. eclipse > Preferences > Java > Build Path > User Libraries  에서 New 버튼 클릭


2. 사용자 라이브러리명을 입력 ( LIBRARY_TOMCAT_7.0.34 )


 3. Add External JARs... 버튼을 클릭


4. TOMCAT 경로의 bin 이하의 3개의 jar 파일 추가 



5.  Add External JARs... 버튼을 클릭하여 TOMCAT 경로의 lib 경로의 jar 파일을 추가



6. Project 선택 후, Properties 선택


7. Java Build Path 선택 후, Libraries 탭의 Add Library 버튼 클릭 


8. User Library 선택


9. 앞에서 추가한 LIBRARY_TOMCAT_7.0.34 선택



10. Project 에 tomcat catalina.base 를 위한 경로 폴더 추가 ( run > tomcat > conf ) 후, tomcat home 경로의 원본 server.xml 과 web.xml 을 복사 


11. run/tomcat/conf/server.xml 수정 (Context 추가)
 <Context 
 docBase="${server.root}/src/main/webapp"
 path="/" 
 reloadable="true"/>



12. Preference  > Run/Debug > String Substitution 에 tomcat_home 추가 ( tomcat home 경로 )



13. Run Configuration 선택



14. 신규 Java Application 생성 후, 아래와 같이 Main Class 지정 


15. Arguments 지정
- Program Arguments
start

- VM Arguments
-Dcatalina.home=${tomcat_home}
-Dcatalina.base=${workspace_loc:webapplication}/run/tomcat
-Dserver.root=${workspace_loc:webapplication}



16. Run 실행





Monday, January 7, 2013

elasticsearch install and configuration

solr 은 schema.xml 에서 스키마를 정의해야 하지만, elasticsearch 는 미리 정의할 필요가 없다고 함.


elasticsearch 0.20.2 install and configuration with tomcat ( CentOS 6.3 x64 )


1. solr 0.20.2 download , tar
wget http://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.20.2.tar.gz
tar -xvzf elasticsearch-0.20.2.tar.gz
cp -Rf /srv/src/elasticsearch-0.20.2 /srv/elasticsearch
chown -Rf luvu.luvu /srv/elasticsearch

2. running as a service
wget https://github.com/elasticsearch/elasticsearch-servicewrapper/archive/master.zip # download service wrapper
unzip elasticsearch-servicewrapper-master.zip
mv /srv/src/elasticsearch-servicewrapper-master/service /srv/elasticsearch/bin/ # move to under elasticsearch/bin/
3. service command
- /srv/elasticsearch/bin/service/elasticsearch start
  • console - Run the elasticsearch in the foreground.
  • start - Run elasticsearch in the background.
  • stop - Stops elasticsearch if its running.
  • install - Install elasticsearch to run on system startup (init.d / service).
  • remove - Removes elasticsearch from system startup (init.d / service).


4. register service
/srv/elasticsearch/bin/service/elasticsearch install (register init.d )
vi /etc/init.d/elasticsearch
RUN_AS_USER=luvu # user add


5. allow firewall
iptables -I INPUT -p tcp --dport 9200 -j ACCEPT 
service iptables save
service iptables restart



next. cluster setup


Reference :
http://www.elasticsearch.org/guide/reference/setup/installation.html
http://www.elasticsearch.org/guide/reference/setup/configuration.html