달력

08

« 2010/08 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  
2010/08/31 10:08

open api 로 우편번호 검색하기 개발2010/08/31 10:08

우편번호 검색 api 는 인터넷 우체국사업자 홈페이지에서 회원가입없이 무료로 받을 수 있다.

http://biz.epost.go.kr/eportal/custom/custom_9.jsp?subGubun=sub_3&subGubun_1=cum_17&gubun=m07

아래는 간단하게 만든 우편번호 검색 메소드이다.

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Map;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

public ArrayList<String[]> getPostAndAddress(String name){
        final String apiurl = "http://biz.epost.go.kr/KpostPortal/openapi";
        String myApi = "발급받은 api 입력"
        ArrayList<String[]> addressInfo = new ArrayList<String[]>();
       
        HttpURLConnection conn = null;
        try{
            StringBuffer sb = new StringBuffer(3);
            sb.append(apiurl);
            sb.append("?regkey="+myApi+"&target=post&query=");
            sb.append(URLEncoder.encode(name,"EUC-KR"));
            String query = sb.toString();
           
            URL url = new URL(query);
            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestProperty("accept-language","ko");
           
            DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            byte[] bytes = new byte[4096];
            InputStream in = conn.getInputStream();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            while(true){
                int red = in.read(bytes);
                if(red < 0)
                    break;
                baos.write(bytes, 0, red);
            }
            String xmlData = baos.toString("euc-kr");
            baos.close();
            in.close();
            conn.disconnect();
           
            Document doc = docBuilder.parse(new InputSource(new StringReader(xmlData)));
            Element el = (Element)doc.getElementsByTagName("itemlist").item(0);
           
            for(int i=0; i<el.getChildNodes().getLength(); i++){
                Node node = el.getChildNodes().item(i);
                if(!node.getNodeName().equals("item")){
                    continue;
                }
                String address = node.getChildNodes().item(1).getFirstChild().getNodeValue();
                String post = node.getChildNodes().item(3).getFirstChild().getNodeValue();
               
                addressInfo.add(new String[]{post.substring(0, 3), post.substring(4), address});
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try{if(conn != null) conn.disconnect(); } catch(Exception e){}
        }
       
        return addressInfo;
    }

itemlist 태그의 자식노드들을 검색할때 자식노드가 item 인 경우만 체크해서 루프를 돌렸는데 왜냐하면 태그와 태그사이에 화이트문자(개행문자, 탭, 공백문자등) 이 있을 수 있기 때문이다. 이 문자들이 있으면 Text 타입의 노드로 인식을 하기 때문에 이런경우는 걸러내었다.

이런 절차가 번거로우면 다음과 같이 화이트문자를 제거하고 파싱할 수 있다.
기본값은 false 이다.

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setIgnoringElementContentWhitespace(true);



위의 URL로 우편번호를 요청하게 되면 대략 다음과 같은 결과값을 가져온다.
       
<?xml version="1.0" encoding="euc-kr" ?>
        <post>
          <itemlist>
              <item>
                       <address><![CDATA[서울시 성동구 구의1동 1]]></address>
                       <postcd>111111</postcd>
                  </item>   
                  <item>        
                           <address><![CDATA[서울시 성동구 구의1동 2]]></address>        
                           <postcd>111112</postcd>      
                  </item>   
                  <item>        
                           <address><![CDATA[서울시 성동구 구의1동 3]]></address>        
                           <postcd>111113</postcd>      
                  </item> 
          </itemlist>
        </post>


XML을 파싱해서 우편번호는 분리하고 주소값과 함께 문자열 배열에 넣는다. String[3]
그리고 문자열 배열을 ArrayList 에 다시 넣는다.
이 값은 JSP 에서 EL을 이용하여 쉽게 사용할 수 있다.

소스가 완전하지는 않지만 이정도면 수정하여 사용가능할 듯 ㅋ

'개발' 카테고리의 다른 글

플리커 GPS 정보  (0) 2010/10/24
엑셀함수 RATE()  (0) 2010/10/05
open api 로 우편번호 검색하기  (4) 2010/08/31
이미지에 워터마크 넣기  (0) 2010/08/30
아이폰 웹개발시 팁  (0) 2010/07/29
클래스 이름을 사용하여 요소찾기  (0) 2010/06/02
Posted by 에드몽단테스
2010/08/30 12:45

이미지에 워터마크 넣기 개발2010/08/30 12:45


import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Random;

import javax.imageio.ImageIO;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public final static void markImage(String srcImg, String markImg, float alpha, int mark_position)
  {
    try
    {
      File _file = new File(srcImg);
      if(!_file.exists()) return;
     
      Image src = ImageIO.read(_file);
      int width = src.getWidth(null);
      int height = src.getHeight(null);
      BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
      Graphics2D g = image.createGraphics();
      g.drawImage(src, 0, 0, width, height, null);

      // watermark image file
      File markFile = new File(markImg);
      if(!markFile.exists()) return;
     
      Image mark_img = ImageIO.read(markFile);
      int mark_img_width = mark_img.getWidth(null);
      int mark_img_height = mark_img.getHeight(null);
      g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));

      // 우측 하단에 워터마크 표시
      g.drawImage(mark_img, (width - mark_img_width - 10), (height - mark_img_height - 10), mark_img_width, mark_img_height, null);
      g.dispose();

      FileOutputStream out = new FileOutputStream(srcImg);
      JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
      encoder.encode(image);
      out.close();
    } catch (Exception e)
    {
      e.printStackTrace();
    }
  }

이미지 크기와 동일한 BufferedImage 를 만든다.
그리고 워터마크를 위에 덮을 것이기 때문에 그래픽 모드를 변경한다.
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
워터마크를 이미지의 우측 하단에 넣는다.

이미지를 겹치는 것은 어려운 것이 아닌데, 워터마트의 특징을 살리기 위해 워터마트가 투명일 경우 이미지와 잘 매치가 되는 것이 중요하다. 이 역할을 setComposite() 메소드가 담당한다.
알파속성을 가진 인스턴트를 생성해야 하는데 여기에서는 AlphaComposite.SRC_ATOP 를 이용했다.
이 속성에 대해서는 java api 를 참조할 수 있다.
alpha 값은 0 ~ 1까지 설정할 수 있는데, 0은 투명, 1은 불투명을 나타난다.

완전한 코드는 http://freecode-freecode.blogspot.com/2008/06/how-to-add-watermark-to-images-in-java.html 참고

'개발' 카테고리의 다른 글

엑셀함수 RATE()  (0) 2010/10/05
open api 로 우편번호 검색하기  (4) 2010/08/31
이미지에 워터마크 넣기  (0) 2010/08/30
아이폰 웹개발시 팁  (0) 2010/07/29
클래스 이름을 사용하여 요소찾기  (0) 2010/06/02
JSTL 중 루프태그의 상태보기 (varStatus)  (0) 2010/04/15
Posted by 에드몽단테스
2010/08/18 09:47

심장이 없어 - 에이트 이야기2010/08/18 09:47

버스타고 출근하는 길.
버스에서 이 노래가 들린다.
가사가 너무 와 닿는다.


심장이 없어 - 에이트

아프다고 말하면 정말 아플 것 같아서

슬프다고 말하면 눈물이 날 것 같아서

그냥 웃지 그냥 웃지 그냥 웃지

그런데 사람들이 왜 우냐고 물어

 

(rap) 

매일을 울다가 웃다가 울다가 웃는걸 반복해

나 왜 이러는데

술이 술인지 밥인지도 모르는 체

살아 이 정도 아픔은 통과 의례인 듯 해

멍하니 종이에 나도 몰래 니 이름만 적어 하루 왼 종일

종이가 시커매지고서야 펜을 놔

너 그리워 또 핸드폰을 들었다 놔

눈물이 또 찾아와 너와의 이별이란

 

나는 심장이 없어 나는 심장이 없어

그래서 아픈 걸 느낄리 없어

매일 혼잣말을 해 내게 주문을 걸어

그래도 자꾸 눈물이 나는 걸

 

아프다고 말하면 정말 아플 것 같아서

슬프다고 말하면 눈물이 날 것 같아서

그냥 웃지 그냥 웃지 그냥 웃지

그런데 사람들이 왜 우냐고 물어 이렇게 웃는데

 

(rap) 

니가 떠나고부터 난 바보가 된 것 같어

i can't do 아무것도 죽어라 방구석에 박혀 살어

너 없인 할 일도 없는데 하룬 길어 너무 길어

근데 뭐 그리 바뻐 널 외롭게 했어

니가 쇼핑 가자 그럴 때 친구와 술 한잔 마시는 건

그렇게 쉬운데 왜 너한테 못했을까

언제나 제일 느린 게 후회랬는데

정말 바본지 끝까지 너와의 끈을 놓지 못해

 

나는 심장이 없어 나는 심장이 없어

오늘도 뻔한 거짓말을 해

가슴이 넘 아픈데 이렇게 보채는데

어떻게 웃을 수가 있겠어

 

아프다고 말하면 정말 아플 것 같아서

슬프다고 말하면 눈물이 날 것 같아서

그냥 웃지 그냥 웃지 그냥 웃지

그런데 사람들이 왜 우냐고 물어 이렇게 웃는데

 

(웃자) tv속 연예이들 처럼

(웃자) 너의 미니홈피 제목처럼

(웃자) 행복했던 내 어제처럼

 

나는 심장이 없어 아플수가 난 없어

나는 심장이 없어 아플수가 난 없어

그냥 웃자 그냥 웃자 그냥 웃자

제발 좀 눈물아 이제는 멈춰줘

'이야기' 카테고리의 다른 글

개천절  (1) 2010/10/02
미투데이에 대한 단상  (0) 2010/09/03
심장이 없어 - 에이트  (0) 2010/08/18
장례식장에 가는 경우가 부쩍 늘었습니다.  (0) 2010/08/02
하고싶은 일들이 많으면 행복하다.  (0) 2010/07/29
컴퓨터를 처음 접했던 시절  (0) 2010/07/27
Posted by 에드몽단테스
2010/08/16 19:06

엘펜리트 애니/영화2010/08/16 19:06


첫편 처음장면부터 상당히 강렬하다.
원인을 모른채 수많은 사람들이 팔과 몸이 짤리고 머리가 뜯기고 피가 낭자하여 잔인 그 자체라 해도 과한 표현이 아니겠다.
잔인함 그 자체는 지금까지 본 애니중에 정말 최고라고 하겠는데, 너무 잔인하고 팔다리가 널부러져 있어 사실 감흥은 좀 덜하다.
너무 많이 사람들이 짤려나가니 왠지 살아있는 소나 돼지고기를 공중에 띄어놓고 땅에 떨어지기전에 마구잡이로 난자하는 모습? 그런느낌이다. 그래서 이 보다는 덜 잔인하지만 전체적인 시나리오나 주인공이 엮어 나가는 모습에서 나오는 잔인함은 '시로구이'가 더 잔인한 것 같다. 너무 잔인해서 시체가 뜯겨있는 스샷은 올리지 않았다. (안구순화~)

주인공 '루시'는 보통사람들과는 다르게 눈에 보이지 않는 팔 이른바 '벡터'라 불리는 일종의 무기(?)를 가지고 있다.
똑똑하고 지능도 높고 잔인하기도 한데 그런 벡터를 가지고 있으니 사람들은 당연히 그들을 어릴적부터 학살하고 실험을 위해 잡아 연구재료로 이용한다. 이른바 돌연변이라는 것이다.

물론 모든 돌연변이가 그렇게 잔인한 것은 아니다. 머리에 뿔이 있어서 일반인들과는 다른 생김새로 인해 어릴적부터 놀림받고 무시당하고 괴롭힘을 받아 성격이 모질게 변해버린 것인지도 모른다. 아무튼 그런 돌연변이를 중심으로 이야기가 퍼져가는데, 일부 세력은 그 돌연변이를 돌연변이라고 생각하지 않고 인류의 새로은 미래라고 생각한다. 나약한 인류 호모사피엔스가 아니라 그들보다 더 나아가 새로운 힘을 가진 신 인류, 즉 돌연변이가 세상을 지배해야 한다는 것이다.

예전에도 이런 이야기는 많이 있었다. 이른바 초능력을 가진 일부 인류말이다. 초능력을 가진 사람은 조용히 살려고 하지만 이를 이용하여 세상을 정복하려는 사람이 있고, 이를 다시 막으려는 사람들의 이야기다.
이때만해도 새롭고 그저 재밌게만 생각했는데,  이 '엘펜리트' 이야기중 대화 일부분이 마음에 와 닿았다.
정말 이 돌연변이가 인류의 미래가 아닐까?

인류는 수세기동안 수많은 동식물들과 함께 진화해가며 살아왔지만, 어느 순간 그 진화가 멈춘것 같았다.
어쩌면 그 옛날에도 진화가 점차 이루어진 것이 아니고 어느 순간 갑자기 일어난 것일지도 모른다.
그렇다면 지금 이순간이 그 순간이지는 않을까?
어느순간 일반인들은 할 수 없는 이른바 초능력을 행하는 사람들이 나타나고 그들이 늘어나고 그들이 지구 전역에 분포한다면 현재 인류들은 어쩌면 멸망할지도 모른다. 생김새는 둘다 같으니 어쩌면 자기네들이 멸망당하고 있다는 것을 모를 수도 있을 것 같다.
  
"말했지? 난 마법사야"

과연 인류는 자신보다 뛰어난 능력이 있는 자 - 이른바 '마법사'를 그냥 놔둘까?
어느 영화처럼 몰래 잡아서 실험실에 가두어 놓고 연구하지 않을까?

그런그렇고 이렇게 잔인한 애니가 만들어지고 방영되는 일본이 신기하기도 하고 부럽기도 하다.
잔인한 것을 못보거나 싫어하는 사람들에게는 비추.

'애니/영화' 카테고리의 다른 글

작안의 샤나  (0) 2010/12/16
오버 드라이브  (0) 2010/09/18
엘펜리트  (0) 2010/08/16
크게 휘두르며 - 2기  (0) 2010/07/19
노다메 칸타빌레 - final  (0) 2010/07/18
창궁의 파프너 (닫는 노래)  (0) 2010/04/01
Posted by 에드몽단테스
2010/08/12 20:54

오디세이아 2010/08/12 20:54



오디세이아는 몽테크리스토백작, 노인과 바다, 해저2만리, 피터팬등과 더블어 읽고 싶었던 고전 소설중의 하나이다.
읽고 싶다는 느낌이란 상당히 개인적인 경험인데, 몽테크리스토백작은 게임 '서풍의 광시곡'의 시나리오의 모티브가 되었고, 노인과 바다는 유명해서... 해저2만리는 '백투더퓨처' 중 주인공의 박사친구가 어렸을때 감명깊에 읽었던 소설이라 했다. 피터팬은 티비속에 나오는 만화의 끝을 알고 싶었다. 몇권이 더 있을지도 모르나 지금은 이렇게만 생각이 난다.

이 중에서 '몽테크리스토백작'과 '피터팬'은 이미 읽었다.
아직도 '몽테크리스토백작'은 내가 지금까지 읽은 책중에서 최고로 뽑고 있고(주인공의 이름을 내 아이디로 쓰고 있다), 피터팬은 우리가 알고 있는 이야기 외에 또 다른 이야기가 있다는 것도 알았다. 나 말고도 이름을 이미 들어봤을 듯한 유명한 소설이나 만화의 끝을 알고 있는 사람은 드물꺼라고 생각한다. 나처럼 어릴적 책을 많이 읽지 않았다면 말이다.
('콩쥐팥쥐', '흥부와 놀부', '백설공주', '홍길동전' 등의 이야기의 끝을 알고 있는가?)

각설하고 다시 이야기는 '오디세이아로'...
예전 어릴적 티비에서 재미있게 봤던 만화가 있다. 내용은 기억나지 않지만 주제가와 주인공 이름을 기억한다.
'율리시스' 선장의 이야기였는데, 우주에서 방황하다 지구로 돌아오는 모험을 그린 만화였던 것 같다.
그 우주선의 이름이 '오딧세이'이다. 이제와 보니 그 내용이 '오디세이아'와 비슷해서 작명을 그렇게 지은 것 같다.
(우리나라에서 제작했던 '영혼기병 라젠카'의 주인공 이름은 모차르트의 오페라 '요술피리'와 비슷했지만 연관성은 전혀 없었다)
'율리시스'는 '오디세우스'의 로마식 표현이다.

오디세이아는 그리스가 트로이를 점령하고 다시 그리스로 돌아오는 여정을 그린 이야기다.
아킬레우스와 함께 트로이를 점령한 후 그냥 거기서 잘 지냈으면 좋으련만, 그리스는 트로이인을 매우 못살게(?)군다.
이런것들을 신들이 언찮게 생각해 그리스군이 돌아오는 길을 험란하게 했고, 오디세우스는 포세이돈의 아들의 눈을 멀게해 유독 더욱 힘든 여정을 겪었다.
이야기의 시작은 오디세우스의 집에서 시작된다.  오디세우스가 트로이에서 돌아오지 못하자 다른 왕들이 오디세우스의 집에 처들어와 그들의 식량과 재산을 축내고 아내에게 청혼하기에 이른다. 빨리 오디세우스가 돌아오면 좋으련만 그런 다급함을 처음에 미리 보여주고 이야기가 진행된다.

아테네여신은 제우스신의 딸이다.
아테네는 처음부터 오디세우스를 좋게 보았는지 그의 귀향길에 도움을 준다.
아테네는 칼립소에 7년간 갇혀 있는 오디세우스를 보고 아버지인 제우스에게 오디세우스를 풀어달라고 재촉한다.
제우스는 전령인 헤르메스를 시켜 칼립소에게 오디세우스를 보내주라고 명한다.
칼립소는 제우스에게 뗏목과 식략을 챙겨주고 섬을 떠나 보낸다.
이를 본 포세이돈이 매우 격노하여 뗏목을 부셔버리고 오디세우스는 간신히 파이아게스에 도착해 나우시카 공주에게 도움을 받는다. 파이아게스의 왕인 알키노오스에게 오디세우스는 그동안 자신에게 있었던 일들을 얘기하고 왕은 무사히 오디세우스를 고향인 이타케로 보내준다.
이때 시간의 흐름을 거슬러 오디세우스는 그동안에 자신에게 일어난 일들을 왕에게 이야기하는데, 외눈박이 거인, 식인종족, 사람을 동물로 변하게 하는 마녀, 저승, 노래하는 마녀자매, 머리가 여섯개 달린 바다괴물, 바다소용돌이 등을 이야기 한다.(이때 포세이돈의 아들인 외눈박이의 눈을 멀게하여 포세이돈이 오디세우스를 싫어하게 되고 고향으로 돌아오는 길을 방해하게 된다.)
고향에 도착한 오디세우스는 아테네여신의 도움으로 배신자와 아내에게 구혼하는 구혼자들을 모조리 죽인다.
큰 줄거리는 이렇게 중간중간에 모험담이 주 이야기가 된다.

예전에 보았던 영화나 드라마, 만화 등의 단편적인 장면에서 '오디세이아'의 일부분을 연상케 한다.
어릴적이어서 자세히 기억이 나지 않지만 단편적인 기억에서 오디세이아의 일부분을 이해했다.
썩 재미있게 읽었다고 얘기할 순 없지만 읽고 싶었던 책이었고, 그럭저럭 잘 읽었다.
나중에 영화나 혹은 이와 관련된 만화라도 영상물로 꼭 보고싶다.(솔찍히 이 책은 내용 전개가 간단한 서술형이어서 전체적인 시나리오에 대해 집중하기가 쉽지 않았다.)

'' 카테고리의 다른 글

난장이가 쏘아올린 작은 공  (0) 2010/10/14
마음에게 말걸기  (0) 2010/09/11
오디세이아  (0) 2010/08/12
프로 스프링 2.5  (0) 2010/07/18
예지몽 - 히가시노 게이노  (0) 2010/07/16
몰입 이렇게 하라  (0) 2010/06/03
Posted by 에드몽단테스
어제는 지인의 아버님이 상을 당하셔서 장례식장에 다녀왔습니다.
요즘들어 이런 일들이 많네요.

처음 장례식장에 갔던 것은 친구의 할머니께서 돌아가셨을때였는데,
식장안에서 모두들 좋아하시더군요.
처음에는 어색했지만 잠시후 이유을 알게되었습니다.
할머니께서 사고나 병으로 돌아가신 것이 아니라 단순이 수명이 다 되어서 돌아가신 것 때문이라고 하셨죠.
하지만 그 이후 갔던 모든 장례식은 병, 사고, 살인등 으로 인하여 모두 좋지 않았습니다.

요즘은 결혼식,돌, 잔치보다는 장례식을 가는 경우가 더 많아졌습니다.
하나 둘 떠나보내면 점점 슬퍼집니다.

'이야기' 카테고리의 다른 글

미투데이에 대한 단상  (0) 2010/09/03
심장이 없어 - 에이트  (0) 2010/08/18
장례식장에 가는 경우가 부쩍 늘었습니다.  (0) 2010/08/02
하고싶은 일들이 많으면 행복하다.  (0) 2010/07/29
컴퓨터를 처음 접했던 시절  (0) 2010/07/27
고민  (0) 2010/07/21
Posted by 에드몽단테스