'또 다른 세상'에 해당되는 글 106건

  1. maven에서 ojdbc 라이브러리 추가
  2. VirtualBox에 우분투 설치 후에 내부 네트워크 접속 설정하기
  3. Windows Update 오류 80070003
  4. Bundle-NativeCode의 비밀
  5. JAVA Date 날짜 계산 CLASS
  6. HBase 테스트 소스 (3)
  7. Hadoop & Hbase 설치 (2)
  8. Tomcat에 SSL 설정을 한 후, Windows Services로 구동시킬경우 오류
  9. [2010. 12. 19] 여자친구가 해준 오징어볶음
  10. 뇌는 현실과 언어를 구분 못한다....
  11. 구글 캘린더와 아이폰 연동하기..
  12. iOS 4.2 소프트웨어 업데이트
  13. [ 2010. 9. 25 ] 오랫만에 보는 맑은 서울 하늘...
  14. 사진은 테크닉으로만 찍는 것이 아니다. (4)
  15. 업무 시간에 수면을 추천하는 회사가 늘고 있다고 합니다. (3)
  16. IE에서 엑셀 다운로드 구현시 에러가 나는경우 (3)
  17. [Android] Android requires .class compatibility set to 5.0. Please fix project properties. (2)
  18. Empty package가 보이지 않는다면...
  19. Java Collections API에 대해 모르고 있던 5가지 사항, Part 1 (1)
  20. Android NDK r4 OVERVIEW.TXT 문서 번역 (5)
  21. 개인 정보 유출...당신은 어떻게 대처하나요?
  22. 스마트폰에 열광하는 개발자, 그들의 미래는…
  23. 나도 자바 개발자.... 모바일로 항로를 수정할 수 있을까? (2)
  24. 성공하기 위해서는 사람이 필요하다.. (2)
  25. 아이폰도 어쩔수 없군요... (2)
  26. [ 2010. 3. 30 ] 꺾어진 꽃....
  27. [ 2010. 3. 30 ] 산수유 (2)
  28. [ 2010. 3. 26 ] 실패한 야경 촬영 (6)
  29. [ 2010. 3. 13 ] 편히 쉴 곳은.... (2)
  30. [ 2010. 3. 13 ] sal 50.4 도 보케가 좋다... (2)

maven에서 ojdbc 라이브러리 추가



pom.xml 파일에 Oracle JDBC 드라이브를 dependency를 추가하려고 하니 maven repository에서 "oracle"을 넣고  검색을 했습니다.


1
2
3
4
5
<dependency>
    <groupid>com.oracle</groupid>
    <artifactid>ojdbc14</artifactid>
    <version>10.2.0.4.0</version>
</dependency>

위와 같이 나오더군요.

그래서 넣고 빌드를 하려고 하는데, 아래와 같은 에러가 났습니다.


1
Missing artifact ojdbc:ojdbc:jar:14


뭐지? 하고 구글링을 또 했습니다.

음...역시 라이센스가 무섭습니다.

오라클과 메이븐의 라이선스 문제로 메이븐 중앙 저장소에서 받을 수 없다고하네요.


그래서 아래와 같이 repository를 추가해야 한다고 합니다.


1
2
3
4
5
6
<repositories>
    <repository>
        <id>mesir-repo</id>
        <url>http://mesir.googlecode.com/svn/trunk/mavenrepo</url>
    </repository>
</repositories>


그러니 에러가 사라지네요.


메이븐 중앙 저장소에 이런 설명이 잘 없으니 구글링을 할 수 밖에 없네요.

설명만 있었으면 딱이었는데..


저작자 표시 비영리 변경 금지
신고

VirtualBox에 우분투 설치 후에 내부 네트워크 접속 설정하기



오늘 하루 종일 virtual box 설치해서 우분투를 설치했습니다.

맥북에어와 virtual box 로 설치한 ubuntu 가 서로 통신이 안되는 것이었습니다.

이걸 성공해야 교육 받으러 갈수 있는데 말이죠.


하지만, 드뎌 해결책 발견(http://simples.kr/21200)

먼저 virtual box에서 아래와 같이 세팅해주면 됩니다.

호스트전용 어댑터로. 이렇게 해야 호스트머신(본인PC) -> 가상머신(설치한 우분투)로 접근가능 한 상태가 됩니다.



그리고 우분투로 넘어가서 네트워크 세팅을 아래와 같이 추가해주면 됩니다.


1. /etc/network/interfaces 파일을 연다.


2. 아래 auto eht1 부분 추가해준다.

================================

# The loopback network interface

auto lo

iface lo inet loopback


# The primary network interface

auto eth0

iface eth0 inet dhcp


auto eth1

iface eth1 inet static

address 192.168.56.105

netmask 255.255.255.0

gateway 192.168.56.1

dns-nameservers 168.126.63.1

================================


3. /etc/init.d/networking restart


이렇게 서비스 재시작을 해주고나면 네트워크가 설정이 완료됩니다.

저작자 표시 비영리 변경 금지
신고

Windows Update 오류 80070003



오늘 윈도우 업데이트 하던 중 에러가 발생하였습니다.

구글 검색을 하니 죄다 영어라서;;;

네이버 검색을 했는데...안나오네요..

다음을 검색했습니다.

바로 나오네요 ㅋㅋㅋ


http://windows.microsoft.com/ko-KR/windows-vista/Windows-Update-error-80070003

위 페이지는 관련자료 페이지 입니다.


그리고 아래는 위 페이지의 내용을 발췌했습니다.

업데이트를 확인하는 동안 Windows Update 오류 80070003이 발생하면 Windows 에서 컴퓨터에 대한 업데이트를 식별하는 데 사용하는 임시 업데이트 파일을 제거해야 합니다. 임시 파일을 제거하려면 Windows Update 서비스를 중지하고 임시 업데이트 파일을 삭제한 후 Windows Update 서비스를 재시작하여 Windows 업데이트를 다시 확인해 보십시오.


아래는 제가 행했던 방법입니다.

1. 제어판>관리도구>서비스 로 이동하여, "Windows Update" 서비스를 중지했습니다.

2. "C:\Windows\SoftwareDistribution\DataStore" 과 "C:\Windows\SoftwareDistribution\Download" 폴더 파일을 모두 삭제하였습니다.

3. "Windows Update" 서비스를 시작했습니다.


위와 같은 작업을 하니 정상적으로 패치가 진행중입니다.

저작자 표시 비영리 변경 금지
신고

Bundle-NativeCode의 비밀



Bundle-NativeCode는 OSGi를 사용할 때, MANIFEST.MF 에 등록하여 사용하는 옵션입니다.

단어 그대로 Java에 Native Code를 사용하기 위해 필요한 옵션입니다.

제가 사용한 곳은 cpu등 시스템 정보를 가져오기 위해 사용했습니다.


다른 옵션은 콤마(,)를 이용하여 구분이 됩니다.

예를 들면, Import-Package 옵션은 각 패키지마다 콤마(,)로 구분합니다.

Import-Package: org.osgi.framework

 ,org.osgi.service.framework


마찬가지로 Bundle-ClassPath 옵션도 콤마(,)로 구분합니다.

Bundle-ClassPath: .,lib/jna-3.0.9.jar,lib/sigar.jar


이렇듯 대부분의 옵션들이 콤마(,)로써 구분이 되고 있습니다.


Bundle-NativeCode 옵션은 세미콜론(;)으로 구분하고 있습니다.

Bundle-NativeCode: lib/amd64-winnt.dll

 ;lib/x86-winnt.dll

 ;lib/x86-winnt.lib

 ;lib/amd64-linux.so

 ;lib/x86-linux.so


하지만, 위의 방식이 잘못된 것은 아니지만 어딘지 불완전해 보입니다.

Bundle-NativeCode 옵션에는 osname, osversion, processor 라는 추가 옵션이 있습니다.

그렇습니다. 위 코드들은 os와 processor에 구분이 되어 있지 않습니다.

그리고 하나더 주의해야할 점은 같은 아키택처를 사용하는 native code들은 묶어서 정의해줘야합니다.


그럼 이쁘게 바꿔보겠습니다.

Bundle-NativeCode: lib/amd64-winnt.dll; osname=win32; processor=x86_64,

 lib/x86-winnt.dll; lib/x86-winnt.lib; osname=win32; processor=x86,

 lib/amd64-linux.so; osname=linux; processor=x86_64,

 lib/x86-linux.so; osname=linux; processor=x86


다른 방법도 존재합니다.

Bundle-NativeCode: /lib/x86/ntlmauth.dll;selection-filter="(&(osgi.arch=x86)(osgi.os=win32))",

 /lib/x64/ntlmauth.dll;selection-filter="(&(osgi.arch=x86_64)(osgi.os=win32))"


os aliases 들은 http://www.osgi.org/Specifications/Reference 에 있습니다. 참고하시기 바랍니다.

저작자 표시 비영리 변경 금지
신고

JAVA Date 날짜 계산 CLASS



http://magefister.blog.me/50096917826 
항상 자바 날짜 계산하는 방법을 기억하지 못해서 찾아다녔었는데.
여기에 잘 정리가 되어 있군요.
이제 고민않고 저기로 가면 되겠습니다. 
저작자 표시 비영리 변경 금지
신고

HBase 테스트 소스



hbase 구성을 한 후, shell 테스트를 진행해보고 java와 연결하는 테스트를 진행하였다.
필요한 jar 파일은 아래와 같습니다.

commons-configuration-1.6.jar

commons-lang-2.5.jar

commons-logging-1.1.1.jar
guava-r09.jar
hadoop-auth-0.23.1.jar
hadoop-core-1.0.1.jar
hbase-0.92.0.jar
log4j-1.2.16.jar
slf4j-api-1.5.8.jar
slf4j-log4j12-1.5.8.jar
zookeeper-3.4.2.jar  

위 jar 파일을 import 해준 후 테스트 하시기 바랍니다.
테스트 소스는 아래와 같습니다.

package hbase;


import java.io.IOException;


import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;

import org.apache.hadoop.hbase.HColumnDescriptor;

import org.apache.hadoop.hbase.HTableDescriptor;

import org.apache.hadoop.hbase.MasterNotRunningException;

import org.apache.hadoop.hbase.ZooKeeperConnectionException;

import org.apache.hadoop.hbase.client.Get;

import org.apache.hadoop.hbase.client.HBaseAdmin;

import org.apache.hadoop.hbase.client.HTable;

import org.apache.hadoop.hbase.client.Put;

import org.apache.hadoop.hbase.client.Result;

import org.apache.hadoop.hbase.client.ResultScanner;

import org.apache.hadoop.hbase.client.Scan;

import org.apache.hadoop.hbase.util.Bytes;


public class HBaseExample2 {

/**

* @param args

*/

public static void main(String[] args) {

// connection

Configuration config = HBaseConfiguration.create();

config.set("hbase.master", "umx1"); // master info

config.set("hbase.zookeeper.quorum", "umx1");

try {

HBaseAdmin ha = new HBaseAdmin(config);

// test라는 table이 없으면 생성함

if (ha.isTableAvailable("test") == false) {

System.out.println("'test' not exist!");

System.out.println("create 'test'");

HTableDescriptor tableDs = new HTableDescriptor("test");

tableDs.addFamily(new HColumnDescriptor("cf"));

ha.createTable(tableDs);

} else { // test라는 table이 있으면 삭제함

System.out.println("'test' exist!");

System.out.println("disable 'test'");

ha.disableTable("test");

System.out.println("drop 'test'");

ha.deleteTable("test");

System.out.println("create 'test'");

HTableDescriptor tableDs = new HTableDescriptor("test");

tableDs.addFamily(new HColumnDescriptor("cf"));

ha.createTable(tableDs);

}

HTable table = new HTable(config, "test");

// table에 데이터 넣기

System.out.println('\n' + "put 'test', 'row1', 'cf:qf1', 'value1'");

Put p = new Put(Bytes.toBytes("row1"));

p.add(Bytes.toBytes("cf"), Bytes.toBytes("qf1"), Bytes.toBytes("value1"));

table.put(p);

System.out.println("put 'test', 'row2', 'cf:qf2', 'value2'");

p = new Put(Bytes.toBytes("row2"));

p.add(Bytes.toBytes("cf"), Bytes.toBytes("qf2"), Bytes.toBytes("value2"));

table.put(p);

System.out.println("put 'test', 'row3', 'cf:qf1', 'value3'");

p = new Put(Bytes.toBytes("row3"));

p.add(Bytes.toBytes("cf"), Bytes.toBytes("qf1"), Bytes.toBytes("value3"));

table.put(p);

// table의 모든 row 가져오기

Scan s = new Scan();

System.out.println('\n' + "scan 'test'");

//s.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("qf1"));

//s.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("qf2"));

ResultScanner scanner = table.getScanner(s);

try {

for (Result rr = scanner.next(); rr != null; rr = scanner.next()) {

System.out.println("Found row: " + rr);

}

} finally {

scanner.close();

}

// table에 데이터 넣기

System.out.println('\n' + "put 'test', 'row4', 'cf:qf2', 'value4'");

p = new Put(Bytes.toBytes("row4"));

p.add(Bytes.toBytes("cf"), Bytes.toBytes("qf2"), Bytes.toBytes("value4"));

table.put(p);

// 특정 row의 value 가져오기

System.out.println('\n' + "get 'test', 'row4', 'cf:qf2'");

Get g = new Get(Bytes.toBytes("row4"));

Result r = table.get(g);

byte[] value = r.getValue(Bytes.toBytes("cf"), Bytes.toBytes("qf2"));

String valueStr = Bytes.toString(value);

System.out.println("GET: " + valueStr);

} catch (MasterNotRunningException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (ZooKeeperConnectionException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}


저작자 표시 비영리 변경 금지
신고

Hadoop & Hbase 설치




많은 사이트를 찾아서 설치를 해보려고 했으나, 충분한 설명이 부족하여 따로 정리하였습니다..
설치한 버전은
hadoop-1.0.1
hbase-0.92.0
입니다..
설치가 완료된 구성 형태는 

※ Cloudera 에서 발표한 문서에서 캡쳐한  내용 입니다. 

위와 조금 다르지만 거의 같다고 보면됩니다..
위와 다른 점은 DataNode가 하나 없습니다.

설치 방법은 아래와 같습니다.

# hadoop 그룹 생성
** groupadd hadoop
# hadoop 사용자 생성
** useradd hadoop -g hadoop
** passwd hadoop
# ssh 인증서를 사용하기 위한 sshd 설정 바꾸기
** 아래 부분 주석 제거
<pre>
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
</pre>
# ssh 인증서 생성
** ssh-keygen -t rsa
** cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
# install hadoop
** tar -zxvf hadoop-0.20.203.0rc1.tar.gz
** mv hadoop-0.20.203.0/ hadoop
** chown -R hadoop:hadoop hadoop/
# config hadoop
** hadoop-env.sh
*** JAVA_HOME 설정
**** export JAVA_HOME=/usr/local/jdk1.6.0_31
** core-site.xml
<pre class="xml">
<configuration>
        <property>
                <name>fs.default.name</name>
                <value>hdfs://master_hostname:9000</value>
        </property>
</configuration>
</pre>
** hdfs-site.xml
<pre class="xml">
<configuration>
        <property>
                <name>dfs.name.dir</name>
                <value>/data/hdfs/namenode</value>
        </property>
        <property>
                <name>dfs.data.dir</name>
                <value>/data/hdfs/datanode</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
        <property>
                <name>dfs.datanode.max.xcievers</name>
                <value>4096</value>
        </property>
</configuration>
</pre>
** mapred-site.xml
<pre class="xml">
<configuration>
        <property>
                <name>mapred.job.tracker</name>
                <value>master_hostname:9001</value>
        </property>
        <property>
                <name>mapred.system.dir</name>
                <value>/data/hdfs/mapreduce/system</value>
        </property>
        <property>
                <name>mapred.local.dir</name>
                <value>/data/hdfs/mapreduce/local</value>
        </property>
</configuration>
</pre>
** masters, slaves 설정
# hadoop namenode 포멧
** 관리자 권한 필요(hadoop 사용자 계정에 node를 생성할 경우 필요없음)
** bin/hadoop namenode -format
# slaves에서 hadoop 설정
** hbase-env.sh
*** JAVA_HOME 설정
**** export JAVA_HOME=/usr/local/jdk1.6.0_31
** core-site.xml
<pre class="xml">
<configuration>
        <property>
                <name>fs.default.name</name>
                <value>hdfs://master_hostname:9000</value>
        </property>
</configuration>
</pre>
** hdfs-site.xml
<pre class="xml">
<configuration>
        <property>
                <name>dfs.datanode.max.xcievers</name>
                <value>4096</value>
        </property>
</configuration>
</pre>
** mapred-site.xml
<pre class="xml">
<configuration>
        <property>
                <name>mapred.job.tracker</name>
                <value>master_hostname:9001</value>
        </property>
</configuration>
</pre>
** masters, slaves 설정
** datanode의 경로가 있어야 실행가능하므로, 미리 디렉토리를 생성해야함.
# hadoop 실행
** bin/start-all.sh
# install hbase
** tar -zxvf hbase-0.92.0.tar.gz
** mv hbase-0.92.0/ hbase
** chown -R hadoop:hadoop hbase/
# hbase 설정
** hbase-env.sh
*** JAVA_HOME 설정
**** export JAVA_HOME=/usr/local/jdk1.6.0_31
*** HADOOP Config 연결
**** export HBASE_CLASSPATH=/usr/local/hadoop/conf
** hbase-site.xml
<pre class="xml">
<configuration>
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://umx1:9000/hbase</value>
        </property>
        <property>
                <name>hbase.master</name>
                <value>umx1:60000</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>4</value>
        </property>
        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>
        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>umx1,umx2,umx3,umx4</value>
        </property>
        <property>
                <name>hbase.zookeeper.property.dataDir</name>
                <value>/data/zookeeper</value>
        </property>
</configuration>
</pre>
** hbase와 hadoop의 버전 맞추기
*** hadoop-core-1.0.1.jar
*** 기존에 있던 hadoop core jar 파일 삭제
** /usr/local/hbase/conf/regionservers
*** master 서버에만 적용
# hbase 실행
** bin/start-hbase.sh


 ※ hadoop 0.20.203.0 버전과 hbase 0.92.0 버전을 같은 방식으로 설치를 해보았으나, 버전 문제인지 모르지만 설치가 되지 않았습니다.
저작자 표시 비영리 변경 금지
신고

Tomcat에 SSL 설정을 한 후, Windows Services로 구동시킬경우 오류



Tomcat에서 SSL 설정을 한 후, dos창에서 "catalina.bat run"으로 구동을 시켜줄 경우 잘 돌아간다.
그리고 메시지를 확인한 후, 종료시키고 Windows Services에서 구동을 시킨다.
하지만, 접속을 시도해보면 접속이 되지 않고 멍때리는 현상을 발견할 수 있다.
에러로그를 확인해보니 아래와 같다.

2011. 10. 5 오후 5:56:59 org.apache.coyote.http11.Http11AprProtocol init

심각: Error initializing endpoint

java.lang.Exception: No Certificate file specified or invalid file format

at org.apache.tomcat.jni.SSLContext.setCertificate(Native Method)

at org.apache.tomcat.util.net.AprEndpoint.init(AprEndpoint.java)

at org.apache.coyote.http11.Http11AprProtocol.init(Http11AprProtocol.java)

at org.apache.catalina.connector.Connector.initialize(Connector.java)

at org.apache.catalina.core.StandardService.initialize(StandardService.java)

at org.apache.catalina.core.StandardServer.initialize(StandardServer.java)

at org.apache.catalina.startup.Catalina.load(Catalina.java)

at org.apache.catalina.startup.Catalina.load(Catalina.java)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java)

at java.lang.reflect.Method.invoke(Method.java)

at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java)

at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java)

2011. 10. 5 오후 5:56:59 org.apache.catalina.core.StandardService initialize

심각: Failed to initialize connector [Connector[HTTP/1.1-443]]

LifecycleException:  Protocol handler initialization failed: java.lang.Exception: No Certificate file specified or invalid file format

at org.apache.catalina.connector.Connector.initialize(Connector.java)

at org.apache.catalina.core.StandardService.initialize(StandardService.java)

at org.apache.catalina.core.StandardServer.initialize(StandardServer.java)

at org.apache.catalina.startup.Catalina.load(Catalina.java)

at org.apache.catalina.startup.Catalina.load(Catalina.java)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java)

at java.lang.reflect.Method.invoke(Method.java)

at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java)

at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java)


이 에러는 무엇인 것인가;;;;
오늘 하루 반나절을 허비하여 겨우 알아냈다.
역시 무지한탓에 반나절 삽질을 했구나..

참고 URL은 http://www.mail-archive.com/users@tomcat.apache.org/msg75237.html 이곳이며
핵심내용은

The above is for the Java-based connector.  The easiest thing would be to 
disable the APR code by deleting or renaming tcnative-1.dll in Tomcat's bin 
directory.

%CATALINA_HOME%\bin에 있는 tcnative-1.dll 파일을 삭제하라는 내용이다.

APR을 이용한 SSL을 사용할 경우 위 dll 파일은 꼭 있어야 하지만, APR을 사용하지않을 경우는 없어야한다는 것이다.
그리고 참고 사항으로 APR을 이용한 SSL 통신은 일반보다 속도가 빠르다고 한다.
tomcat은 그럼 이런 버그를 알고 있을까?
아니면 버그가 아니라 사용상의 부주의 인가?
아무튼 해결되서 기쁘다.
 
저작자 표시 비영리 변경 금지
신고

[2010. 12. 19] 여자친구가 해준 오징어볶음



조금 오래된 사진이다...

시간상으론 작년 사진인게다...

DSLR-A850 | Aperture priority | Spot | 1/20sec | F/2.0 | 50.0mm | ISO-200 | Off Compulsory

내가 계속 요리먹고 싶다고 보채니...
이렇게 해준다..

이렇게 맛있게 이뿌게 해줄꺼면서 그동안 많이 뺏다...

맛있었어...내 사랑..
저작자 표시 비영리 변경 금지
신고

뇌는 현실과 언어를 구분 못한다....



뇌는 현실과 언어를 구분하지 못한다. 
뇌는 현실과 언어를 구별하는 능력이 없기 때문에,
입으로 ‘짜증나’를 반복하면 그 소리가 귀를 통해 뇌로 전달되고,
뇌는 ‘짜증이 나 있는 것인데 왜 멀쩡한 척하느냐’면서
온몸에 불쾌한 스트레스 호르몬을 쫙 뿌린다. 
말버릇은 그야말로 버릇으로 출발하지만
버릇이 거듭되면 마음과 몸에 굳어버린다.
- 우종민 교수, ‘뒤집는 힘’에서  
 
 
흥미롭게도 뇌는 말과 현실을 구분하지 못한다고 합니다.
말은 밖으로 나왔다가
‘뇌의 지령’에 따라 다시 자신에게로 돌아갑니다.
노상 ‘짜증난다’고 하는 사람 주변에는 짜증 날 일이 계속 생깁니다.
반면 긍정적이고 좋은 말만 계속하면 실제로 좋은 일만 생기게 됩니다.
말버릇이 자신의 가치를 결정하는 것입니다.
훈련을 거듭하면 좋은 말 습관을 만들 수 있습니다.


어딘가에서.....
저작자 표시 비영리 변경 금지
신고

구글 캘린더와 아이폰 연동하기..



아이폰을 산 기념으로 구글 캘린더와 연동해서 사용하려고 하는데..
기본 캘린더는 연동이 되는데..따로 생성한 캘린더가 연동이 안되더군요..
그래서 또 인터넷에서 열심히 찾았습니다.
그랬더니 아래와 같은 주소가 있더군요...

자...인제 인터넷에서 찾은 연동방식을 적용해보겠습니다.


1. 여러개의 구글 캘린더 아이폰과 연동하기  
아래 주소로 들어가면 아래와 같은 화면이 나타납니다.



간단히 싱크할 캘린더를 체크해주면 구글에서의 모든 셋팅은 끝납니다.
자 이제 이제 아이폰 설정만 해주면 됩니다.
아이폰설정에서 캘린더는 연동은 꼭! Gmail 로 연동해야합니다.
아이폰 - 설정 - Mail, 연락처, 캘린더 - 계정추가 를 선택한 후, Gmail 로 설정을 해줍니다.


이것을 하면서 아쉬운것은....
연락처 동기화나... 캘린더 동기화를 설정하는 과정이 동일하지 않아서 아쉬웠습니다.
연락처는 아이튠즈에서 가능하고...캘린더는 아이튠즈에서 할려면 따로 앱이 있어야 하는거 같더군요...
혹시나 이것보다 더 쉽게 연동하는 방법을 아시는 분은 댓글을 달아주세요..
저작자 표시 비영리 변경 금지
신고

iOS 4.2 소프트웨어 업데이트



iOS 4.2 소프트웨어 업데이트

이 업데이트는 다음의 개선사항을 포함합니다:

• AirPrint 
  - 로컬 무선 네트워크 상에서 AirPrint와 호환되는 프린터로 
    직접 메일, 사진, 웹 페이지 등을 프린트할 수 있음
• AirPlay 
  - 비디오, 음악, 사진을 Apple TV로 무선으로 스트림할 수 있음
  - AirPort Express를 포함하여, AirPlay와 호환되는 스피커 
    및 수신기로 음악을 무선으로 스트림할 수 있음
• FaceTime 개선사항
  - 음성 명령으로 전화걸기
  - SMS 대화에서 전화걸기
  - Bluetooth 액세서리 지원
• Safari 웹 페이지에서 텍스트 찾을 수 있음
• 메모에서 새로운 서체 설정 사용할 수 있음
• 새로운 SMS/MMS 텍스트 소리 사용 및 연락처별로 
  벨소리를 사용자화하여 설정 가능
• 추가적인 차단(유해 콘텐츠 차단) 사용할 수 있음:
  - 계정 설정
  - 응용 프로그램 삭제
  - Game Center 친구
  - 위치 설정
• 캘린더에 .ics 파일 가져올 수 있음
• 다음을 포함하는 버그 수정:
  - iPod touch(4세대)에서 녹음된 오디오에 때때로 발견되는 
    인공적인 잡음 제거
  - 자동차 스트레오에서의 USB를 통한 오디오 재생 개선

이 소프트웨어 업데이트와 호환 가능한 제품:
• iPhone 4
• iPhone 3GS
• iPhone 3G
• iPod touch(2세대 이상)

모든 개선사항이 전체 모델에 적용되는 것은 아닙니다. 
추가 정보를 보려면, 다음 웹 사이트를 방문하십시오:
  <http://www.apple.com/kr/ipodtouch/software-update/>
  <http://www.apple.com/kr/iphone/softwareupdate/>

기능 세부사항 및 전체 사용 방법을 보려면, 다음 웹 사이트에서 
iPhone 및 iPod touch 사용 설명서를 참조하십시오:
<http://support.apple.com/ko_KR/manuals/iphone>
<http://support.apple.com/ko_KR/manuals/ipodtouch>

iPhone 및 iPod touch에 관한 추가 정보를 보려면, 
다음 웹 사이트를 방문하십시오:
<http://www.apple.com/kr/iphone>
<http://www.apple.com/kr/ipodtouch>

iPhone 또는 iPod touch 문제 해결 및 추가 지원 정보를 보려면, 
다음 웹 사이트를 방문하십시오:
<http://www.apple.com/kr/support/iphone>
<http://www.apple.com/kr/support/ipodtouch>

이 업데이트의 보안 콘텐츠에 대한 정보를 보려면, 
다음 웹 사이트를 방문하십시오:
<http://support.apple.com/kb/HT1222?viewlocale=ko_KR>

제가 반기는 업데이트는 사용자별 벨소리 지정입니다.
뭐 그다지 큰 기능은 아니지만, 괜찮아졌다고 생각합니다.

그외로 괜찮은 기능추가는 AirPrint가 기대되는군요.
저작자 표시 비영리 변경 금지
신고

[ 2010. 9. 25 ] 오랫만에 보는 맑은 서울 하늘...



DSLR-A850 | Aperture priority | Pattern | 1/320sec | F/11.0 | 50.0mm | ISO-200 | Off Compulsory

바쁘다는 핑계로 가족들과 더 오래 못있고..서울로 왔네요...

쓸쓸한 마음을 안고 서울로 왔는데...그래도 활짝 웃어주는 서울 하늘을 보고...마음이 녹아내립니다...

시간 상으로 저녁쯤 됩니다...
저작자 표시 비영리 변경 금지
신고

사진은 테크닉으로만 찍는 것이 아니다.



http://photohistory.tistory.com/8384

사진은 테크닉만으로 찍는 것이 아니다...
예전에는 저도 그랬죠...
사진을 잘 찍는 그런 기술(?)을 포럼이나 커뮤니티 사이트를 돌아 다니면서 수집을 했었죠..
그리고 그게 자랑인양 친구들에게 이렇게 찍으면 잘나온다고 자랑을 했습니다...

근데 가끔 여자친구가 하는 말이 있습니다..
"오빠는 뮤300 들고 다닐 때 사진을 훨씬 잘 찍었어.." 라고 말이죠...

사진을 즐기고.. 나의 느낌을 사진으로 담으려고 했던 것입니다..
작년에는 카메라 장비가 몇개 되었습니다..

하지만, 이제 다 정리하고 바디랑 50미리 단렌즈 하나 남았네요...
X700으로 사진을 배울때로 돌아갔네요...X700에 50미리 단렌즈 하나로 시작했습니다..
다시 초심을 찾아서 사진을 찍어야겠습니다....

이런 말을 하고 싶네요...

영어 문법을 잘한다고 해서...영어를 잘하는 것이 아닙니다...
사진도 기교를 잘 부린다고해서... 감성적인 사진이 나오는 것은 아닙니다..
저작자 표시 비영리 변경 금지
신고

업무 시간에 수면을 추천하는 회사가 늘고 있다고 합니다.



http://bit.ly/a4F4XZ

우리나라에서는 업무시간에 업드려잔다고 싸가지 없는 녀석이라고 하겠죠???
그리고 할일이 없는 녀석으로 치부되겠쬬;;;

그렇게 되면 짤리거나...
인사고과가 엉망이 되겠죠...

관리자분들 문턱대고 일만 시킬께 아니라...
업무 환경을 확실히 제공해주고... 일을 시켰으면 합니다..

우리한테는 인상쓰면서 일해라고만 하고...
우리가 환경에 불만을 토로하면...신경쓰는 척하면서..아무것도 안되는...
오히려 당신네들이 일을 더 안하는거 같네요...
저작자 표시 비영리 변경 금지
신고

IE에서 엑셀 다운로드 구현시 에러가 나는경우



IE환경에서 page Context Type을 이용한 excel downloading 구현하였습니다. 그런데 다음과 같은 에러가 뜨더군요.


혹시나 싶어서 구글크롬에서 다운로드를 해봤습니다.
근데 다운로드가 잘되네요.
아~~이놈의 IE 정말;;; 세션 문제 이후 나를 계속 괴롭히네요.

그래서 기존에 사용하던 잘되던 소스를 뒤지고 뒤졌습니다.
일단 위 에러는 response.setHeader("Pragma", "public"); 와 같이 해서 처리했습니다.
하지만 읽기에도 아직 부자연스럽네요.

좀더 찾아봐야겠습니다.
현재까지 제가 적용해본 옵션은 아래와 같습니다.
빨간 글씨는 제가 변경해서 성공한(?) 부분입니다.
response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Transfer-Encoding", "binary");
response.setHeader("Pragma", "public");
response.setHeader("Expires", "0");
response.setHeader("Content-Disposition", "attachment; filename=downloadExcelFile.xls");
response.setHeader("Content-Description", "JSP Generated Data");
response.setHeader("Cache-Control", "max-age=0");
인터넷 검색을 해보니, 이 같은 이슈가 많이 존재하는 것 같습니다.

아래는 제가 참고한 사이트에서 가져온 내용입니다.
죄송하지만..저도 살짝 참고 링크로 ^^

1.구글신 검색 참고사이트

2.html header에 대한 더 많은 정보를 원하시면 (그러나 영어의 압박 ;;;)
좀더 깔끔한 정리 : http://www.mnot.net/cache_docs/


저작자 표시 비영리 변경 금지
신고

[Android] Android requires .class compatibility set to 5.0. Please fix project properties.



올만에 안드로이드 공부를 하기 위해서 openintents 에서 소스를 받았습니다.
기분 좋은 마음으로 새로나온 eclipse Helios 버전을 받고 필요한 svn이랑 android sdk를 받아서 설치했습니다.

하지만 문제가 발생됐군요...
바로 위 제목과 마찬가지로 발생된 
Android requires .class compatibility set to 5.0. Please fix project properties.
바로 네이버 검색에 들어갔습니다.
검색 결과, 다른 사람들이 만들어 놓은 프로젝트를 가져올 경우 발생되는 문제라고 하는군요.
정확히 무엇이 문제되어 발생되는지는 아무도 적어놓지 않고 있습니다.
다만 해결책은 나와있네요.
추후 더 검색해 본 결과 내용을 찾으면 업데이트 하겠습니다.

이 때, Package Exploere의 프로젝트 루트에서 마우스 오른쪽 버튼을 클릭하여 나오는 메뉴 중 "Android Tools"의 "Fix Project Properties" 메뉴를 수행하면 해결됩니다.


아주 간단히 해결하였지만, 정확한 원인을 알지 못하고 해결한 꼴이 되어서 왠지 찝찝하네요.
혹시 원인을 아시는 분은 트래백이나 댓글 부탁드리겠습니다.
저작자 표시 비영리 변경 금지
신고

Empty package가 보이지 않는다면...



eclipse에서 package를 만들었는데 만든게 보이지 않더군요.
그래서 이것저것 찾아봤는데, 아래와 같은 것이 있더군요.


살포시 Empty packages의 앞에 체크박스의 체크를 없애면, empty package가 나타납니다.
자~~ 이제 package 만들고 사라졌따고 당황하지 말자고요.
저만 그랬나요 ㅡ,.ㅡ;;;

아래는 eclipse 처음 깔고 살펴본 형태입니다. 참고하세요.


저작자 표시 비영리 변경 금지
신고

Java Collections API에 대해 모르고 있던 5가지 사항, Part 1



부제 : Java Collections 사용자 정의 및 확장하기

http://www.ibm.com/developerworks/kr/library/j-5things2.html

IBM 기술문서에 올라온 자료입니다.
배열보다 유용한 Collections에 대한 내용입니다.

1. Collections 트럼프 배열
배열의 성능은 Java Collections 라이브러리의 성능에 미치지 못하고 있다고 합니다.
따라서, 배열을 Collections 클래스로 최대한 빨리 변환해서 사용하라고 권장하고 있습니다.
아래는 배열을 변환하는 방법입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.*;
public class ArrayToList {
    public static void main(String[] args){
        // This gives us nothing good
        System.out.println(args);
 
        // Convert args to a List of String
        List<string> argList = Arrays.asList(args);
 
        // Print them out
        System.out.println(argList);
    }
}

이것의 단점은 수정할 수 없다고 합니다. 새 요소를 추가할려고 하면 UnsupportedOperationException이 발생한다고 합니다.
2. 반복은 비효율적이다.
반복에는 단점이 여러가지가 있다고 합니다.
  • 각각의 추가 또는 제거 후 콜렉션의 크기를 조정해야 하므로 비효율적이다.
  • 잠금을 획득하고, 작업을 수행한 후 잠금을 다시 해제할 때마다 심각한 동시성 문제가 발생할 수 있다.
  • 추가 또는 제거가 발생하는 동안 해당 콜렉션 작업을 수행하려는 다른 스레드에 의해 경쟁 조건이 발생한다.
하지만, Collections에서 제공하는 함수(e.g. addAll 또는 removeAll)을 사용하여 쉽게 처리할 수 있다고 하고 있습니다.

3. For 루프로 Iterable 반복하기
이것은 저도 많이 활용하고 있는 방법입니다.
예전에는 Iterator를 가져온 후 next()를 사용하여 Iterator에 지정된 오브젝트를 가져온 다음 hasNext()를 통해 사용할 수 있는 추가 오브젝트가 있는지 확인하는 과정으로 수동으로 수행해야 했습니다. 하지만 Java 5부터는 이러한 모든 과정을 자동으로 처리하는 for 루프 변형을 자유롭게 사용할 수 있습니다.
Iterable 인터페이스를 구현한 모든 Collections에서 사용 가능합니다.
저 같은 경우는 ArrayList에서 객체를 가져올 때 주로 사용합니다.

1
2
3
4
5
6
7
ArrayList<string> list = new ArrayList<string>();
list.add("item1");
list.add("item2");
list.add("item3");
for (String item : list) {
    // ...
}

위와 같이 주로 사용합니다.

IBM 기술문서에 나온 내용을 이용하여 제가 좀 적어봤는데요.
제가 언급하지 않는 내용도 Collections를 사용하면 굉장히 유용할 것입니다.
나머지는 제가 아직 사용해보지 않아서 어떻게 말씀을 못드리겠습니다.
하지만 위에서 언급한 내용은 정말 유용합니다.

더 많은 내용을 원하시면 위에 링크를 걸어놓은 IBM 기술문서 페이지로 이동하시면 됩니다.


저작자 표시 비영리 변경 금지
신고

Android NDK r4 OVERVIEW.TXT 문서 번역



※ 먼저 말씀드리지만, 저라는 사람 영어 실력 정말 없는 사람입니다. 외국인에게 "앞으로 가세요"를 "쭉~ go" 이렇게 말합니다;;
감안하시고 보세요.

Android NDK Overview

Introduction:

안드로이드 NDK는 안드로이드 app 개발자에게 c/c++ 소스 파일을 컴파일한 native machine code를 그들의 app package에 추가할 수 있도록 제공하는 tool이다.

IMPORTANT:
  안드로이드 NDK는 단지 Cupcake(a.k.a 1.5)과 그 이상의 버전의 플랫폼이 구동되는 안드로이드 시스템에서 사용할 수 있다.

  1.0과 1.1 시스템은 1.5 release에서 발생된 ABI와 toolchain의 미묘한 변화 때문에 구체적으로 제공하지 않는다.


I. Android NDK Goals:
---------------------

안드로이드 VM은 native code에서 구현되어진 메소드를 호출하기 위한 당신의 app의 소스코드를 JNI를 통해서 허락한다. 간단하게, 이 의미는:

  - 당신의 app 소스 코드는 native code에 구현되어진 함수를 지시하기 위해 'native' 키워드와 함께 method를 정의할 것이다.
    E.g.:

      native byte[]  loadFile(String  filePath);

  - 당신은 함수를 구현을 포함하고 있는 native shared library를 제공하고, 당신의 app의 .apk에 포함될 것이다.
    이 library는 "lib<something>.so"처럼 표준 Unix 규약에 따라 명명되어져야하고, 표준 JNI entry point에 포함되어질 것이다.
    For example:

      libFileLoader.so

  - 당신의 app은 명시적으로 library를 load해야한다. 예를 들어 app의 시작위치에서 그것을 load하기 위해, 간단하게 아래의 소스코드에 따라서 추가해야한다.

static {
System.loadLibrary("FileLoader");
}

    여기에서 'lib' prefix 와 '.so' suffix를 사용하지 않는 것을 유의해야한다.


안드로이드 NDK는 당신을 돕는 안드로이드 SDK 보완물이다:

  - ARM CPU가 구동되고 있는 안드로이드 1.5플랫폼에서 구동할 수 있는 JNI와 호환되는 shared library들을 생성한다.

  - 생성된 shared library를 당신의 app 프로젝트 경로의 적절한 위치에 복사하고, 당신의 마지막 sign된 .apk 에 자동적으로 추가되어 질 것이다.

  - NDK의 마지막 revision에서, 우리는 remote gdb connection과 가능한 많은 소스와 symbol 정보를 통해서 당신의 native code를 디버그하는 것을 돕는 tool을 제공할 것이다.

게다가, 안드로이드 NDK는 제공한다:

  - cross-toolchain(compilers, linkers, etc..) : Linux, OS X와 Windows(with Cygwin)에서 native ARM binary를 생성할 수 있다.

  - system header : 안드로이드 플랫폼에 의해 제공되는 안정된 native API 목록
                    이것은 모든 플랫폼의 최근 release에서 제공되는 위해 보증되어지는 정의를 따른다.
                    이것은 "docs/STABLE-APIS.TXT" 파일에 기록되어져 있다.

    IMPORTANT:
안드로이드 시스템에서 대부분의 native system library는 마지막에 업데이트 되거나 release되는 플랫폼에서 멈추거나, 크게 변하거나, 심지어 지워지지 않는다.

  - 컴파일 되어기 위해 필요한 소스나 컴파일 하는 방법을 기록한 매우 짧은 build 파일을 작성하는 것을 개발자들에게 허용한다.
   build 시스템은 복잡한 toolchain/platform/CPU/ABI의 모든 스펙을 처리한다.
   게다가, NDK의 마지막 업데이트는 개발자의 build 파일에서 요구하는 변경없이 toolchain, playform, system interface를 제공할 수 있다.


II. Android NDK Non-Goals:
--------------------------

NDK는 안드로이드 device에서 구동시키는 generic native code를 쓰기 위한 좋은 방법이 없다.
특히, 당신의 앱은 여전히 자바로서 개발될 것이고, "Application Not Responding"을 피하기 위해 적절히 안드로이드 시스템 이벤트를 handle 하거나 안드로이드 앱 life-cycle을 처리할 것이다.

그러나, 적절히 start/stop을 사용한 작은 "application wrapper"와 함께 native code에서 복잡한 앱을 구현하는 것이 가능하다는 것을 기억하라.

이 환경에서 많은 작업은 전형적인 native code에서 필수적으로 흔하지 않는 행동을 개발자로부터 요구되어지기 때문에, JNI의 이해가 높은게 좋습니다.
These include:

  - direct native pointer를 통해서 VM객체의 content에 직접적으로 접근 할 수 없다. 예를 들어 당신은 String 객체의 16-bit 문자 배열에서 loop를 반복하기 위한  pointer를 안전하게 얻을 수 없다.

  - native code가 VM object와 JNI call 사이에서 handles를 유지하기를 원할 때, 명시적인 reference 관리가 요구된다.

NDK는 Android platform에 의해 제공되는 매우 제한된 native API들과 library를 위해 시스템 헤드를 제공한다.
전현적인 android system image는 많은 공유 library를 포함하고 있는데 반하여, 이것은 대폭 업데이트 및 플랫폼의 release 사이에 변경될 수 있는 구현 세부에서 주의해야만 한다.

만약 android system library는 NDK의 header에 의해 명시적으로 제공되어지지 않는 다면, application은 가능한 의존하지 않거나, 다양한 device에서 다음 공지에서 업데이트 하여 리스크를 막아야한다.

선택된 system library는 서서히 안정적인 NDK API를 추가할 것이다.


III. NDK development in practice:
---------------------------------

Android NDK와 함께 native code를 개발할 수 있는 방법에 대한 개략적인 overview 이다:

  1/ native 소스를 "$PROJECT/jni/"에 위치시킨다.

  2/ NDK build 시스템에서 소스를 설명하는 "$PROJECT/jni/Android.mk" 쓴다.
      
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := sanangeles

LOCAL_CFLAGS := -DANDROID_NDK \
                            -DDISABLE_IMPORTGL

LOCAL_SRC_FILES := \
    importgl.c \
    demo.c \
    app-android.c \

LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog

include $(BUILD_SHARED_LIBRARY)

  3/ 옵션: build 시스템에서 project에 대해서 더 자세히 기입하기 위해서 "$PROJECT/jni/Application.mk" 를 쓴다.
      비록 시작하지 않아도, 하나 이상의 cpu에 target하거나, compiler/linker flag를 override 할 수 있다
      (자세한 내용은 "docs/APPLICATION-MK.TXT"을 참조하세요).

  4/ 프로젝트 디렉토리나 sub 디렉토리에서 "$NDK/ndk-build" 를 실행함으로써 native code를 build한다.

마지막 단계가 성공적일 경우에,  application의 root project directory에 필요한 stripped 공유 library를 복사할 것이다.
그런 다음 일반적인 수단을 통해서 ".apk"를 생성 해야한다.

이제, 몇 가지 더 자세한 사항을 알아보겠다:


III.1/ Configuring the NDK:
- - - - - - - - - - - - - -

이전 release는 NDK를 configure 하기 위해'build/host-setup.sh' script를 실행했어야했다.
이 단계은 release 4 (a.k.a. NDK r4)에서 제거되었다.


III.2/ Placing C and C++ sources:
- - - - - - - - - - - - - - - - -

native 소스를 "$PROJECT/jni/"에 넣는다.

'$PROJECT'는 android application project의 경로에 해당한다.

'jni'의 content를 구성하는 것은 매우 자유롭다.
디렉토리 이름과 구조는 최종 생성된 application 패키지에 영향을 주지 않을 것이다.
그래서 application 패키지 이름의 경우처럼 'com.<mycompany>.<myproject>'와 같이 mypseudo-unique names를 사용하지 않아도 된다.

C와 C++ 소스는 제공된다. NDK에 의해서 제공되는 기본 C++ 파일의 확장자는 '.cpp'이지만, 다른 확장자도 처리할 수 있다.
(자세한 내용은 'docs/ANDROID-MK.TXT'에서 확인할 수 있다).

'Android.mk' 파일을 적용하는 것은 다른 위치에 있는 소스를 저장하는 것을 가능하게 한다.


III.3/ Writing an Android.mk build script:
- - - - - - - - - - - - - - - - - - - - - -

Android.mk 파일은 NDK build system에서 소스를 설명하기 위해 사용하는 작은 build script이다.
문법은 'docs/ANDROID-MK.TXT' 파일에 자세히 설명되어 있다.

분명하게 말하면, NDK는 각각의 모듈을 다음 중 하나가 될 수 있는 곳으로 소스를 그룹화시킨다:

  - a static library
  - a shared library

하나의 'Android.mk' 안에 여러가지 모듈을 정의할 수 잇고, 각각 정의된 하나의 모듈에 여러가지 'Android.mk' 파일을 쓸 수 있다.

'Android.mk' 파일은 build system에 의해 여러번 parse된다. 따라서 안에 정의되지 않는 특정 변수는 할당되지 않는다.
기본적으로, NDK는 build 다음 script를 찾습니다:

   $PROJECT/jni/Android.mk

만약 서브 디렉토리에 'Android.mk'를 정의하기를 원한다면, 최상위 'Android.mk'에서 명시적으로 서브 디렉토리에서 정의한 것을 포함하고 있어야한다. 이것을 사용하기 위해서 helper 함수가 있다. 즉, include $(call all-subdir-makefiles)를 사용한다.

이 파일은 현재 build 파일 경로의 서브 디렉토리에서 모든 'Android.mk' 파일을 포함하고 있을 것이다.


III.4/ Writing an Application.mk build file (optional):
- - - - - - - - - - - - - - - - - - - - - - - - - - - -

'Android.mk' 파일이 build system에서 모듈을 정의하고 있는 반면에, 'Application.mk' 파일은 application 자체를 표현하고 있다.
이 파일이 무엇인지 이해하기 위해서는 'docs/APPLICATION-MK.TXT' 문서를 확인하면 된다.
이것은 다른 것을 포함하고 있다:

   - application에서 용구되어 지는 정확한 모듈 목록

   - machine code를 생성하기 위한 CPU architecture(s)

  - release나 debug 빌드에 대한 옵션 처럼, 모든 모듈을 build하기 위한 적용하는 명확한 C나 C++ compiler flag와 기타 옵션 정보

이 파일은 선택 사항입니다: 기본적으로 NDK는 'Android.mk'에 있는 모든 모듈(포함된 모든 makefile과 함께)을 build하고 기본 CPU ABI(armeabi) 타겟팅하는 것을 제공할 것이다.

'Application.mk' 를 사용하는 두 가지 방법이 있다:

  - '$PROJECT/jni/' 아래에 놓으면, 'ndk-build' script에 의해 자동적으로 pick up될 것이다.

  -'$NDK/apps/<name>/' 아래에 놓으면된다. 여기서 $NDK는 NDK 설치 경로를 나타낸다. 이후에 NDK 디렉토리로부터 "make APP=<name>"를 실행시키면 된다.

    이 방법은 Android NDK r4 이전에 사용되던 방법이다.
    이것은 호환성의 이유로 아직까지 제공되고 있다.
    하지만 대신에 첫번째 방법을 사용하는 것을 권고한다.
    왜냐하면 그것이 더 간단하고ㅡ NDK 설치 트리의 변경이나 수정이 필요하지 않기 때문이다.

다시 말하면, 이것의 완벽한 설명은 'docs/APPLICATION-MK.TXT'를 확인하면된다.


III.5/ Invoke the NDK build system:
- - - - - - - - - - - - - - - - - -

NDK와 함께 machine code를 build하는 선호되는 방법은 Andoid NDK r4와 함께 소개되어진 'ndk-build'를 사용하는 것이다.
또한 '$NDK/apps' 서브 디렉토리를 만드는 전통적인 두번째 방법을 사용할 수 있다.

양쪽다, 성공적인 build는 application에서 요구하는 최종 stripped binary 모듈(i.e. 공유 library)을 application의 project 경로에 복사할 것이다(unstripped 버전은 디버깅 목적으로 보관하고, device에서는 unstripped binary를 복사할 필요가 없다).


  1: Using the 'ndk-build' command:
  ---------------------------------

  NDK 설치 경로의 최상위에 위치한 'ndk-build' script는 application project 디렉토리('AndroidManifest.xml'위치되어 있는
  곳)나 서브디렉토리로 부터 직접적으로 작동시킨다.
  For example:

    cd $PROJECT
    $NDK/ndk-build

   이것은 NDK build script를 실행시킬 것이고, 자동적으로 build해야할 development system과 application project file을
   결정하기위해 조사할 것이다.

  For example:

    ndk-build
    ndk-build  clean    --> 생성된 binary를 clean
    ndk-build  -B V=1   --> command를 보여주면서 완전하게 다시 build함.

   기본적으로, $PROJECT/jni/Application.mk 아래의 옵션 파일과 요구된 $PROJECT/jni/Application.mk를 기대하고 있다.

   성공하면, project tree에서 적절한 위치로 생성된 binary 모듈(i.e. shared libraries)을 복사할 것이다.
   나중에 안드로이드 application package를 'ant'나 ADT Eclipse 플러그인을 통해서 전부 다시 빌드할 수 있다.

   이 스크립트가 무엇을 하며, 추가적인 옵션이 무엇을 하는지에 대한 자세한 설명은 'docs/NDK-BUILD.TXT'을 살펴보면 된다.


  2: Using the $NDK/apps/<name>/Application.mk:
  ---------------------------------------------

   이 빌드 방법은 Android NDK r4 이전에 단 하나의 방법이었고, 단지 호환성의 이유로 제공되어졌었다.
   최종 NDK 릴리즈에서 legacy지원을 제거할 것이기 때문에, 가능하면 'ndk-build' 명령어를 사용하는 것을 강력하게 추천한다.

   이것은 다음과 같이 요구되어진다:

    1. NDK 설치 디렉토리(project 경로가 아님) 아래에 '$NDK/apps/<name>/' 이름으로 서브 디렉토리 만들기

       '<name>'은 NDK 빌드 시스템에서 application을 나타내기 위한 임의의 이름이다(공백허용 안함).

    2. application 프로젝트 디렉토리를 지시하는 'APP_PROJECT_PATH' 정의가 요구하는  '$NDK/apps/<name>/Application.mk' 쓰기

    3. NDK 설치 경로로 이동하여 최상위 GNUMakefile 실행, as in:

         cd $NDK
         make APP=<name>

   중간에 생성된 파일이 '$NDK/out/apps/<name>/' 아래에 위치하는 것을 제외하고, 첫 번째 방법과 동일한 결과가 될 것이다.

IV. Rebuild your application package:
- - - - - - - - - - - - - - - - - - -

NDK에 의해서 바이너리가 생성된 이후에, 'ant' 명령어를 사용하거나 ADT Eclipse plugin을 이용하여 안드로이드 application package files(.apk)을 다시 빌드해야한다.

안드로이드 SDK 문서를 더 자세히 보길 바란다. 새로운 .apk는 공유 라이브러리를 포함하고 있을 것이고, target device에 package를 설치할 때, 시스템에 의한 설치 시간에 자동으로 풀릴 것이다.


V. Debugging support:
- - - - - - - - - - -

NDK는 'ndk-gdb'라는 helper script를 제공한다. 이것은 application의 native 디버깅 세션에서 쉽게 실행할 수 있다.

Native 디버깅은 단지 안드로이드 2.2나 그 이상이 구동되고 있는 생산 기계에서 수행할 수 있다. 그리고 root 같은 특정 접근을 요구되지 않는다.

더 많은 정보는 'docs/NDK-GDB.TXT' 파일을 살펴보길 바란다.  간단하게 말해서, native 디버깅은 간단한 방법을 따른다:

   1. application을 디버깅할 수 있도록 한다.(e.g. 'AndroidManifest.xml'에서 android:debuggable을 "true"로 설정한다.)

   2. 'ndk-build'와 함께 application을 빌드하고, 'device/emulator'에 설치한다.

   3. application을 실행한다.

   4. application 프로젝트 디렉토리로 부터 'ndk-gdb'를 실행한다.

gdb prompt를 나타난다. 유용한 명령어 목록은 GDB User 메뉴얼을 살펴본다.


이상 Android NDK r4의 OVERVIEW에 대한 번역입니다.
이 문서를 번역하는 중간에 회사에서 안드로이드 개발이 다른분께 가게되어서 더이상 이 내용을 번역할 필요는 없었지만,
기왕 시작한거 마무리 짓고 싶었습니다.
행여 나중에라도 이 내용이 저에게 필요하게 될지도 모르기에..

이 번역에서 도와준 서동영군... 정말 고맙습니다.
저작자 표시 비영리 변경 금지
신고

개인 정보 유출...당신은 어떻게 대처하나요?



http://www.boan.com/news/articleView.html?idxno=1926

어제 저녁 기사로 보안닷컴에서 무서운 제목으로 글을 올렸네요..
역시 자극적인 글이 사람들에게 인기가 있네요.

"프라이버시의 시대는 끝났다."로 시작하는 이글은
서비스를 사용하는 사람이나, 서비스를 제공하는 사람이나, 보안에 신경을 안쓴다는 내용입니다.
프라이버시 정책이나 그와 관련된 정보를 의도적으로 눈에 잘띄지 않는 곳에 배치하는 경우가 많다고 합니다.
그 예로 트위터와 같은 SNS(Social Network Service)를 꼽고 있네요.

여러분은 트위터의 보안은 어떻게 되어 있나요?
트위터도 보안을 설정하는 방법이 있습니다.


바로 이 부분인데요. public timeline에 공개하고 싶지 않으면 이것을 클릭하면 되는 것입니다.
그리고 twitter에 적히는 tweet은 본인이 승인한 사람에게만 전달되게 됩니다.

한번씩 보셨겠지만...많이 지나치셨을 듯하네요...
만약 보안을 신경쓰시는 분이시면...패스워드만 유출 안당하면 될 것이라고 생각하시지 마시고...
이런 부분까지 세세히 따지셔야 될 듯하네요....
무심코 즐기시는 트위터가 여러분의 정보를 유출하는 곳이 될 수도 있다는 것이지요.

전 어떻게 했냐고요???
캡쳐보이시죠...저게 저의 설정입니다.
전 오픈마인드로 공개할 것입니다.
당연히 심각한 수준의 개인 정보를 분명히 저곳에 적지는 않겠죠 ㅋㅋㅋㅋ
저작자 표시 비영리 변경 금지
신고

스마트폰에 열광하는 개발자, 그들의 미래는…



http://www.bloter.net/archives/29516

1인 미디어 시대 이후....
1인 기업 시대를 예견하고 있죠..
얼마전 방송에서도 1인 기업시대에 대해서 이야기 했습니다.
그 방송을 보고 생각 나던게 고시원 생각이 나더군요.
숨막힐 듯이 좁고...방음도 안되는 공간에서 살아가죠..
단순이 잠만 자기 위해 들어간 공간이었죠.
1인 기업 건물이 강남에 생긴다고 하죠.
이제 개인의 삶을 넘어서...기업도 고시원처럼 꽉만힌 곳에서 시작하게 되는군요.
현재 많은 인력이 스마트폰 개발자로 몰리고 있습니다.
저 역시 그 중 한명이라고 할 수도 있습니다.
하지만 본업을 잊지 않고 가는 것이죠...

전 친구들에게 이런 말을 농담식으로 합니다.
렌즈를 살수 있게 하는 부업해보겠냐고...
그렇습니다. 스마트폰 시장...앱스토어가 1인 시대를 만들어갔지만...
그 앱스토어가 1인을 망하게 하는 순간도 올 것 같습니다.
세상은 돌고 도는 것이니깐요.

스마트폰 하실 분은 지금 바로 어플하나 개발해서 대성하세요.
그리고 나중에 기업으로 취직을 해서 더 대성하세요...
그게 좋을 듯 합니다.

저처럼 일상 생활에서 그냥 노느니 하나 만든다고 생각하시면....
회사 업무에 열중하세요...
남는 시간에 개발하세요...
저작자 표시 비영리 변경 금지
신고

나도 자바 개발자.... 모바일로 항로를 수정할 수 있을까?



http://www.zdnet.co.kr/Contents/2010/04/11/zdnet20100411153250.htm

여기 나오는 이분..평소 google reader를 통해서 종종 보는 분이었습니다.
그런데.. 이번에 KOSTA에서 진행하는 안드로이드 교육을 갔습니다.
어디서 많이 본듯한 분이 강사로 계시더군요.
혹시나 혹시나 했는데 역시나였습니다.
요즘 이분에 대한 글을 자주 보게 되네요.
강의도 많이 하시더군요..

서론이 길군요 ㅋㅋ

이분은 okjsp를 운영하시던 분이셨습니다.
그런데 어느날 갑자기 모바일로 일을 하시더군요.

저도 마찬가지로 회사에서 jsp를 주로 개발하고 있고, 기회에 따라서 java도 개발하고 있습니다.
뭐 jsp + java를 보시는게 더 맞다라고 생각합니다.
근데 이번에 회사에서 모바일에 대한 앱을 만들려고 하는군요.
제 일을 아시는 분은 대충 짐작을 하실꺼라고 봅니다.
아이폰 4.0에서 지원이 되는 바람에 안드로이드에 아이폰까지 개발이 들어 갈 듯합니다.
물론 제가 아이폰을 하지는 않겠죠..

사실 요즘 갈등이 좀 있습니다.
경력도 얼마안된 제가 두 가지의 방향으로 일을 한다는 것이...
언어와 IDE가 모두 같기 때문에 별 문제가 없을 꺼라고 생각하시는 분이 있으시지만...
두 가지를 한다는 것은 회사에서 두 가지 일을 한다는 것이죠 ㅜㅡㅜ
책임감도 두배가 되고;;;일도 두배가 되네요...

요즘따라 한가지에 집중할 수 있다는 것이 부럽네요...

말하고 보니 항로 수정이 아니고, 두 길로 가는 것이군요.
조금 두렵네요..
모바일쪽은 하다가 안되면;;;;부업으로 뛰죠 뭐 ㅋㅋ
저작자 표시 비영리 변경 금지
신고

성공하기 위해서는 사람이 필요하다..



http://www.heraldbiz.com/common/Detail.jsp?newsMLId=20100412000076

요즘따라 이래저래 위에 글이 정말 마음에 와닫네요...

제 또래에 있는 주변분들 또한 위의 글이 공감이 갈지도 모르겠네요...

회사에서 조금만 우리에게 신경써준다면;;;;;

이직....현재 다니고 있는 회사에서 대우만 잘해준다면....

이직할 사람이 과연 생길까요???

이보다 나은 직장이 없다면...사람들은 이직을 생각하지 않을 것입니다.
저작자 표시 비영리 변경 금지
신고

아이폰도 어쩔수 없군요...



오늘 후배 아이폰을 만지작 거리면서 놀고 있었습니다...

근데 화면이 뭔가 이상하더군요...

알 고 보니...버그;;;;

G센스 테스트한다고 아이폰을 회전 시키다가 갑자기 화면이 이렇게 되더군요...

왼쪽이 가지고 놀다가 발생된 버그고요....오른쪽이 정상적인 화면입니다..

반 응속도가 느려서 생긴 버그 같은데...반응속도 짱이라는 아이폰도 어쩔수가 없군요....



솔직히 버그없는 것이 없다고 하지만....

아이폰이라서 더욱 눈에 뛰고 아쉽네요...

아이폰은 버그가 없길 바랬습니다. 아이폰도 어쩔수 없이 이런 현상들이 발견되네요...

약간 씁쓸하네요...

저작자 표시 비영리 변경 금지
신고

아이폰도 어쩔수 없군요...



오늘 후배 아이폰을 만지작 거리면서 놀고 있었습니다...

근데 화면이 뭔가 이상하더군요...

알 고 보니...버그;;;;

G센스 테스트한다고 아이폰을 회전 시키다가 갑자기 화면이 이렇게 되더군요...

왼쪽이 가지고 놀다가 발생된 버그고요....오른쪽이 정상적인 화면입니다..

반 응속도가 느려서 생긴 버그 같은데...반응속도 짱이라는 아이폰도 어쩔수가 없군요....



솔직히 버그없는 것이 없다고 하지만....

아이폰이라서 더욱 눈에 뛰고 아쉽네요...

아이폰은 버그가 없길 바랬습니다. 아이폰도 어쩔수 없이 이런 현상들이 발견되네요...

약간 씁쓸하네요...

저작자 표시 비영리 변경 금지
신고

[ 2010. 3. 30 ] 꺾어진 꽃....



누가 꽃을 꺾어 놨더군요...

혹 접지라도 될까;;; 꿈이지만...

갈라진 틈을 이용하여 끼워넣었습니다.

자라진 못하겠죠...

DSLR-A850 | Aperture priority | Spot | 1/160sec | F/2.8 | 50.0mm | ISO-200 | Off Compulsory

저작자 표시 비영리 변경 금지
신고

[ 2010. 3. 30 ] 산수유



여의도 공원에서 산수유를 봤습니다.

사진을 찍기 시작하면서 꽃은 별로 신경을 못썻는데...

지금에서야 사진 찍으면서 느끼네요..

우리 주변에는 아름다운 것이 많다는 것을...

DSLR-A850 | Aperture priority | Spot | 1/200sec | F/2.8 | 50.0mm | ISO-200 | Off Compulsory

저작자 표시 비영리 변경 금지
신고

[ 2010. 3. 26 ] 실패한 야경 촬영



야경 촬영을 하러 회사 옥상에 올라갔다.

쌩쌩 부는 바람을 가르고.. 헬기장에 올라가서...

열심히 찍었다...

근데... 근데...

DSLR-A850 | Aperture priority | Pattern | 15sec | F/22.0 | 50.0mm | ISO-640 | Off Compulsory

조리개는 F22로 잘했는데... 초점도 수동으로 해서 무한대로 했는데...

다찍고 내려와서 생각해보니...

SSS(손떨림보정) 안끄고;;;

ISO는 640으로 찍고...

에휴.... 역쉬 야경은 어려워....

근데 저기 보이는.... 먼지는 뭐지 ㅜㅡㅜ

청소나 하러 가야겠네요...
저작자 표시 비영리 변경 금지
신고

[ 2010. 3. 13 ] 편히 쉴 곳은....



요즘은 정말 휴식이 필요한 것 같아요..

몸살도 나고... 지금 하고 있는 일이 지치기도 하고...

쉬고 싶네요...몸이 많이 지치네요....

DSLR-A850 | Aperture priority | Pattern | 1/40sec | F/2.0 | 50.0mm | ISO-200 | Off Compulsory

저작자 표시 비영리 변경 금지
신고

[ 2010. 3. 13 ] sal 50.4 도 보케가 좋다...



50.4가 이렇게 보케가 좋은지는 처음 알았네요..
계속 이 렌즈만 써왔는데.. 왜 몰랐을까요 ㅋㅋㅋ
F2.8로만 찍어서 그런가 ㅡ,.ㅡa

DSLR-A850 | Aperture priority | Pattern | 1/125sec | F/1.4 | 50.0mm | ISO-200 | Off Compulsory

저작자 표시 비영리 변경 금지
신고