서영은





작은 눈에 턱선조차 없는데 평범한 내 모습이 뭘 그리 좋을까
한번쯤은 물어보고 싶지만 환상에서 깰까봐 난 모른척 니맘 받아 줄거야

완전 소중한 그대여, 상상도 못한 행운이야
넌 나를 보며 웃고있어, 세상을 가진 것 같아
그대 내곁에 있는 이 순간에 날개 없이도 날 것만 같아

둥근 몸매 허리조차 없는데 하나뿐인 내 모습 특별해 보인데
거울 보며 요리저리 살펴도 뭘 좋아하는 건지 넌 특이한 사람 좋아하나봐

작은 희망조차 없던 지난 날 지루한 기다림 이젠 그만 날려버릴래
하늘을 닮은 그대여, 정말 고마워
내게로 와 내 모든것이 달라졌어, 세상을 내개 준 거야
그대 내곁에 있는 이 순간엔 날개 없이도 날고있잖아

출처 : Mashit™님 블로그
2007/05/29 11:28 2007/05/29 11:28
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

負けないで - zard

가요로는 이례적으로 일본내 교과서에도 실린 zard의 대표곡 중의 하나인
負けないで.


가사보기 ..



2007/05/28 19:26 2007/05/28 19:26
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

일본 zard(자드) 리드보컬 이즈미 사카이씨 사망

그룹 자드의 리드보컬 이즈미


안타깝습니다.

올해 나이 40세로 새벽 세시경 뇌좌상으로 숨졌다고 합니다.

맑고 청량한 그녀의 목소리가 역사 속으로 사라졌습니다.
더이상 새로운 음악으로 그녀를 만날 수 없다고 생각하니 서운합니다.

http://www.sanspo.com/sokuho/0528sokuho019.html
에 그녀의 사망소식을 알리는 기사가 있습니다.

- 5 월27 일15 시10 분 , 뜻하지 않은 사고에 의한 뇌좌상으로 유명을 달리 했습니다.
사카이씨는, 작년6 달, 자궁경암으로, 도내 모병원에서, 입퇴원을 반복하며 투병 생활을 계속 했습니다. 적출 수술에 의해, 한 번은 차도를 보이고 있었습니다만,
자궁경암의 폐전이가 인정되어 금년 4월에 재입원을 피할 수 없게 되었습니다. 주치의 및 병원 관계자의 치료의 덕분에, 최근에는,
아침에 병원내를 산책하기까지 할 정도로 회복을되었습니다. 5 월26 일 이른 아침, 병실로 돌아오는 도중 , 계단의 층계에서( 약3 미터의 높이),
전날의 비에 의해 발이 미끄러져 추락, 후두부를 강타한 것이  요인이 되었습니다.


그녀의 목소리를, 노래를 좋아했던 팬의 한사람으로서,
삼가 고인의 명복을 빕니다.


負けないで, Don't you see,Oh my love 등 대부분의 그녀의 노래를 좋아하지만 개인적으로 베스트로 꼽는 心を開いて(마음을 열고)
들으며 약간의 정신적 공황을 달래보려 합니다.


心を開いて - zard

가사입니다...

2007/05/28 17:28 2007/05/28 17:28
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
  1. 2007/07/02 03:17
    [싱글] ZARD - 心を開いて(마음을 열어요, 1996) Tracked from Orie Episode 4 - Professional Theraphy
  1. 제겐 추억이상의 그 무엇이 되어버린 분이죠..

  2. Memory님 저도 비슷한 감정을 느낍니다.

  3. 마음을 열어줘... 아마 제 고등학교 시절 가장 많이 들었던 노래 중에 하나일 겁니다..^^

  4. 정말.. 일본 노래를 접하는 사람치고 'Zard'를 모르는 사람은 없죠..
    그만큼 많은 사람들이 공감 할 수 있는 노래를 불렀다는 뜻이겠죠..
    오리에님께나 제게 추억의 한페이지를 장식해 준 자드에게 감사하는
    마음을 가져 봅니다.

  5. Blog Icon
    ㅇㅇ

    헉.. 2007년도 게시물

World Of Warcraft: Dancing

WOW 등장 캐릭터들의 댄싱장면 원본 영상 모음입니다.
이걸 일일이 찾아낸 사람도 대단 하단 생각이 드는군요.
혹, 키프레임 작업 했던 사람이 올린 영상일지도?

2007/05/24 15:05 2007/05/24 15:05
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

대칭키를 이용한 암호화와 복호화

지난글 에서는 서로 다른 키를 사용하는 암호화와 복호화, 즉 비대칭 암호화(asymmetric encryption)에 관해 설명했다. 하지만 암호화와 복호화는 대칭적으로 작업할 수도 있다. 이 글에서 데이터를 암호화하고 복호화하는데 같은 키를 사용하고 있는 예를 볼 수 있다. 양쪽 다 동일한 키를 사용하기 때문에 복호화는 암호화 과정의 일부를 역으로 적용하면 된다. Blowfish 알고리즘이 대칭 키의 한 예이다. Blowfish 알고리즘은 Java Cryptography Extension (JCE)에 의해 지원되고 javax.crypto.* packages에서 적절한 APIs를 찾을 수가 있다. 현재 JCE에 의해 지원되는 암호 알고리즘(cipher algorithm)은 Blowfish뿐만 아니라, Digital Encryption Standard (DES), Triple DES Encryption (DESede), Password-based encryption algorithm (PBEWithMD5AndDES)이 있다.

대칭 키 알고리즘은 비대칭 키 알고리즘보다 훨씬 빠른 경향이 있다. 게다가 첫번째 글에서 본 것과 같이 암호화될 수 있는 텍스트의 사이즈가 공개 키와 비밀 키를 생성할 때 사용되었던 두개의 소인수 곱의 크기에 의해 좌우된다. 하지만 대칭 키 알고리즘을 사용하면 암호화하고자 하는 대상의 전체 크기에 전혀 제한을 받지 않는다. 대칭 암호 알고리즘(symmetric cipher algorithms)의 종류에 따라 다르지만, 전제 입력 사이즈는 블록 사이즈의 배수여야하고 패딩(padding)이 요구될 수도 있다. 대칭 키와 관련한 문제는 이 키들이 암호화나 복호화에 관련된 파티내에서는 공유되어야만 한다는 데에 있다. 그렇기 때문에 차단이 되거나 공인되지 않은 사용자가 공유하는 등의 문제가 생길 수 있다.

대칭 키를 생성하는 것은 키 쌍을 생성했던 것과 매우 흡사하다. KeyGenerator 클래스의 factory 메소드를 사용하고 스트링값을 알고리즘에 대입하자. generateKey() 메소드를 호출하면 KeyPair 인터페이스 대신 Key 인터페이스를 구현하는 객체를 되받을 수 있다.

  SecretKey key =
         KeyGenerator.getInstance("DES").generateKey();

다음으로 Cipher를 생성하는데, 이는 JCE를 이용할 때 편리하다. 애플리케이션을 바꿀 필요 없이 서로 다른 제공자의 이점을 취하기 위해서 Cipher 클래스의 factory 메소드를 재사용하자. 이하의 방법으로 Cipher를 생성한다.

   Cipher cipher = Cipher.getInstance("DES");

Cipher
는 바이트 어레이 형태로 넘겨진 데이터를 암호화 혹은 복호화하는데 사용된다. 어떤 동작이 호출될지를 지정하는 init()과 그 연산을 실행하는 doFinal() 메소드가 꼭 사용해야만 하는 필수 메소드들이다. 가령, 다음 2줄의 코딩은 바이트 어레이를 암호화하기 위해 생성한 textBytes라고 불리는 cipherkey 인스턴스를 사용하고 있다. 결과는 encryptedBytes라고 불리는 바이트 어레이 내에 저장된다.

   cipher.init(Cipher.ENCRYPT_MODE, key);
   byte[] encryptedBytes =
      cipher.doFinal( textBytes );

다음 프로그램은 위의 값을 모으면서 입력 스트링을 받은 후에 그것을 암호화한다. 그리고나서 암호화된 스트링은 다시 복호화된다.

  1.    import javax.crypto.Cipher;
  2.    import javax.crypto.BadPaddingException;
  3.    import javax.crypto.IllegalBlockSizeException;
  4.    import javax.crypto.KeyGenerator;
  5.    import java.security.Key;
  6.    import java.security.InvalidKeyException;
  7.  
  8.    public class LocalEncrypter {
  9.  
  10.         private static String algorithm = "DESede";
  11.         private static Key key = null;
  12.         private static Cipher cipher = null;
  13.  
  14.         private static void setUp() throws Exception {
  15.             key = KeyGenerator.getInstance(algorithm).generateKey();
  16.             cipher = Cipher.getInstance(algorithm);
  17.         }
  18.  
  19.         public static void main(String[] args)
  20.            throws Exception {
  21.             setUp();
  22.             if (args.length !=1) {
  23.                 System.out.println(
  24.                   "USAGE: java LocalEncrypter " +
  25.                                          "[String]");
  26.                 System.exit(1);
  27.             }
  28.             byte[] encryptionBytes = null;
  29.             String input = args[0];
  30.             System.out.println("Entered: " + input);
  31.             encryptionBytes = encrypt(input);
  32.             System.out.println(
  33.               "Recovered: " + decrypt(encryptionBytes));
  34.         }
  35.  
  36.         private static byte[] encrypt(String input)
  37.             throws InvalidKeyException,
  38.                    BadPaddingException,
  39.                    IllegalBlockSizeException {
  40.             cipher.init(Cipher.ENCRYPT_MODE, key);
  41.             byte[] inputBytes = input.getBytes();
  42.             return cipher.doFinal(inputBytes);
  43.         }
  44.  
  45.         private static String decrypt(byte[] encryptionBytes)
  46.             throws InvalidKeyException,
  47.                    BadPaddingException,
  48.                    IllegalBlockSizeException {
  49.             cipher.init(Cipher.DECRYPT_MODE, key);
  50.             byte[] recoveredBytes =
  51.               cipher.doFinal(encryptionBytes);
  52.             String recovered =
  53.               new String(recoveredBytes);
  54.             return recovered;
  55.           }
  56.    }

커맨드 라인의 파라미터로 어떤 텍스트나 입력할 수 있다. 가령, 커맨드 라인에 다음을 입력하면,

   java LocalEncrypter "Whatever phrase we would like to
    input at this point"

이하의 출력값을 보게 된다.

   Entered: Whatever phrase we would like to
    input at this point
   Recovered: Whatever phrase we would like to
    input at this point

위의 예에서 암호화와 복호화 모두 동일한 Key 객체를 사용해서 이뤄졌다. 암호화와 복호화는 대게 서로 다른 버츄얼 머신에서 발생하기 때문에 안전하게 키를 전송할 수 있는 메소드가 필요하다.

첫번째 글에서 비대칭 암호 알고리즘을 위한 키 쌍을 생성하는 방법을 공부했고, 두번째 글에서는 대칭 키를 사용하는 방법을 살펴보았다. 하지만 비대칭 키와 대칭 키를 결합해서 사용하는 또 다른 테크닉이 있다. 이 기법은 임의대로 대칭 키를 선택해서 데이터를 암호화하는데 사용한다. 그리고는 다른 파티의 공개 키를 이용해서 대칭 키 그 자체가 암호화된다. 그러면 받는 사람은 대칭 키를 암호화하기 위해서 그들의 비밀 키를 이용하고 메시지를 복호화하기 위해 복호화된 키를 이용한다. 비대칭 기법에서 사용되는 모듈러스는 대칭 키를 암호화할 정도의 크기만 되면 된다. 대칭 키는 단일 전송을 위해서 사용된 후 제거된다. 이러한 방법으로 각각의 타입의 단점이 보완된다. 각 주제에 대한 자세한 정보는 다음을 참고하기 바란다.

DES Encryption

from http://kr.sun.com/developers/techtips/c2004_01_16.htm

2007/05/24 01:58 2007/05/24 01:58
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

KEYPAIRGENERATOR를 이용해서 비대칭 암호 키 구하기

공개 키 암호화(public key encryption)는 사용자가 암호화(encrypt)한 메시지를 복호화(decrypt)하거나 복호화만이 가능한 메시지를 암호화하는데 사용되는 공개 키(public key)를 제공할 수 있도록 해준다. Dr. Ronald L. Rivest, Dr. Adi Shamir, 그리고 Dr. Leonard M. Adleman가 RSA 암호화 코드의 R, S, A에 해당한다. 이들은 공개 키 암호기법(cryptography)으로 ACM's 2002 Turing Award Winners를 수상하였고, ACM Turing Award Winners웹페이지에서 "Early Days of RSA", "Cryptology: A Status Report", "Pre-RSA."에 관한 이들의 프리젠테이션을 볼 수 있다.

RSA 암호화 알고리즘(RSA encryption algorithm)은 임의적이고 상호 독립적인, 가령 p=11, q=31과 같은 크기가 큰 두 개의 소인수를 선택하는 것으로부터 시작한다. 다음으로 N=(p)(q)를 계산하는데, p=11, q=31인 경우에는 N=(11)(31)=341이다. 그리고는 정수 e를 하나 선택하는데 (p-1)(q-1)와 공통인수가 없는 3과 N-1 사이의 범위에서 선택한다. 수 300은 (2)(2)(3)(5)(5)으로 소인수분해 되기 때문에 2, 3, 혹은 5의 배수는 정수 e의 선택범위에서 제외된다. 이 알고리즘에 대입하는 수는 꼭 소인수가 아니어도 되기 때문에 49나 77과 같은 수도 가능하다. 간단하게 e= 7을 대입해보자.

다음으로 (d)(e)=1 (mod(p-1)(q-1))을 성립하는 정수 d가 필요하다. 여기서 mod는 나머지 연산이다. 위의 예제에서 e = 7 이고 (p -1)(q-1) = 300이기 때문에 d는 7d % 300 = 1을 통해 구한다. 연산의 방법은 300의 배수를 하나 이상 찾고 이 중, 7로 나누어 떨어지는 첫번째 숫자를 찾아내면 된다. 다시 말하면, 301, 601, 901 등이 가능한 값들이다. 이중 301은 7로 나누어 떨어지기 때문에(43*7은 301이다.) d는 43이다.

여기서 2쌍의 숫자들이 중요한데, RSA 모듈에 따르면 N = (p)(q)이고, 이 두 쌍의 숫자들이 이 식의 컴포넌트들이다. 첫번째 숫자쌍이 RSA 비밀 키(private key)인 (N,d)이고, 두 번째 숫자쌍이 RSA 공개키(public key)인 (N,e)이다. D는 RSA 비밀 지수(private exponent) (d=7)이고 e는 RSA 공개 지수(public exponent) (e=43)이다. 이미 알고 있는 공개 키는 공개하자. 그렇지만 비밀 키(특히 d)와 최초의 소인수들(p와 q)은 비밀로 유지해야 한다.

그렇다면 자바 프로그래밍 랭귀지가 RSA 구성의 어느 부분에서 쓰여지는 것일까? 이는 java.security 패키지를 통해 쓰여진다. 이 패키지를 이용하면 위에서 설명한 RSA 알고리즘에 필요한 쌍으로 이뤄진 키를 생성할 수 있다. 먼저 KeyPairGenerator의 인스턴스를 생성하고 그것을 비트형식의 원하는 키 사이즈로 초기화한다. 그리고 generateKeyPair()메소드를 호출하면 한 쌍의 RSA 키를 생성할 수 있다.

   KeyPairGenerator generator =
                   KeyPairGenerator.getInstance("RSA");
   generator.initialize(1024);
   KeyPair keyPair = generator.generateKeyPair();

이 알고리즘에서는 factory getInstance() 메소드에 스트링을 입력한다. 알고리즘이 인스톨된 제공자(provider)에 의해 지원되지 않으면 NoSuchAlgorithmException이 발생한다.

각각의 제공자는 반드시 디폴트 초기화를 공급하고 이를 문서화해야한다. 제공자 디폴트(provider default)가 사용자의 요구와 맞아 떨어지면, 중간 KeyPairGenerator 객체 (intermediate KeyPairGenerator object)를 저장할 필요가 없다. 한 줄의 코드로 키 쌍을 간단하게 생성할 수는 있지만 하나 이상의 키 쌍을 생성해야 한다면, KeyPairGenerator 객체를 재사용하는 것이 낫다. 왜냐하면 이는 새로운 KeyPairGenerator 객체를 매번 생성하는 것보다 훨씬 나은 퍼포먼스를 주기 때문이다.

  1.    import java.security.KeyPairGenerator;
  2.    import java.security.NoSuchAlgorithmException;
  3.    import java.security.KeyPair;
  4.  
  5.    public class AsymmetricKeyMaker {
  6.  
  7.       public static void main(String[] args) {
  8.         String algorithm = "";
  9.         if (args.length == 1) algorithm = args[0];
  10.  
  11.         try {
  12.           KeyPair keyPair = KeyPairGenerator
  13.                                .getInstance(algorithm)
  14.                                .generateKeyPair();
  15.  
  16.           System.out.println(keyPair.getPublic());
  17.           System.out.println(keyPair.getPrivate());
  18.  
  19.         } catch (NoSuchAlgorithmException e) {
  20.           System.err.println(
  21.             "usage: java AsymmetricKeyMaker <RSA | DSA>");
  22.         }
  23.  
  24.       }
  25.    }
  26.  


스트링 RSA는 rsa, Rsa 혹은 어떤 형태이든지 상관이 없다. 다음과 같은 프로그램을 실행하면

   java AsymmetricKeyMaker RSA

출력값은 이하와 같다.

   SunJSSE RSA public key:
      public exponent:
        010001
      modulus:
        b24a9b5b ba01c0cd 65096370 0b5a1b92 08f8555e
        7c1b5017 ec444c58 422b4109
        59f2e15d 43714d92 031db66c 7f5d48cd 17ecd74c
        39b17be2 bf9677be d0a0f02d
        6b24aa14 ba827910 9b166847 8154a2fa 919e0a2a
        53a6e79e 7d2933d8 05fc023f
        bdc76eed aa306c5f 52ed3565 4b0ec8a7 12105637
        af11fa21 0e99fffa 8c658e6d

   SunJSSE RSA private CRT key:
      private exponent:
        78417240 9059965d f3843d99 d94e51c2 52628dd2
        490b731e 6fb2317c 66451e7c
        dc3ac25f 519a1ea4 198df4f9 817ebe17 f7c73c00
        a1f96082 348f9cfd 0b63421b
        7f45f131 c363475c c1b25f57 ee029f5e 0848ba74
        ba81b730 ac4c0135 ce46478c
        e462361a 650e3356 f9b7a0c4 b682557d 3655c052
        5e3554bd 970100bf 10dc1b51
      modulus:
        b24a9b5b ba01c0cd 65096370 0b5a1b92 08f8555e
        7c1b5017 ec444c58 422b4109
        59f2e15d 43714d92 031db66c 7f5d48cd 17ecd74c
        39b17be2 bf9677be d0a0f02d
        6b24aa14 ba827910 9b166847 8154a2fa 919e0a2a
        53a6e79e 7d2933d8 05fc023f
        bdc76eed aa306c5f 52ed3565 4b0ec8a7 12105637
        af11fa21 0e99fffa 8c658e6d
      public exponent:
        010001
      prime p:
        e768033e 21646824 7bd031a0 a2d9876d 79818f8f
        2d7a952e 559fd786 2993bd04
        7e4fdb56 f175d04b 003ae026 f6ab9e0b 2af4a8d7
        ffbe01eb 9b81c75f 0273e12b
      prime q:
        c53d78ab e6ab3e29 fd98d0a4 3e58ee48 45a366ac
        e94dbd60 ea24ffed 0c67c5fd
        3628ea74 88d1d1ad 58d7f067 20c1e3b3 db52adf3
        c421d88c 4c4127db d03592c7
      prime exponent p:
        e09942b4 76029755 f9da3ba0 d70edcf4 337fbdcf
        d0eb6e89 f74f5a07 7ca94947
        6835a805 3dfd047b 17310dc8 a39834a0 504400f1
        0ce6e5c4 413df83d 4e0b1cdb
      prime exponent q:
        829b8afd a1984168 c2d1df4e f32e2653 5b31b17a
        cc5ebb09 a2e26f4a 040def90
        15be104a ac92ebda 72db4308 b72b4ce1 bb58cb71
        80adbcdc 625e3ecb 92daf6df
      crt coefficient:
        4d8190c5 7730b729 00a8f1b4 ae526300 b22d3e7d
        d64df98a c1b19889 5240141b
        0e618ff4 be597979 95195c51 0866c142 30b37a86
        9f3ef519 a3ae6469 14075097

자바 프로그래밍이 처음이라면 위에서 적절하게 오버로딩된 toString() 메소드의 출력값을 주목할 필요가 있다. "SunJSSE RSA public key:"으로 시작하는 텍스트가 RSAPublicKey 클래스 내의 toString() 메소드를 호출한 결과값이다. 이는 e라고 불리는 공개 지수(public exponent)와 모듈러스(modulus) N으로 구성되어 있다. "SunJSSE RSA private key:"로 시작하는 텍스트는 RSAPrivateKey 클래스 내의 동일한 메소드를 호출한 결과이다. 이는 비밀 지수 d, 모듈러스 N, 공개 지수 e 뿐만 아니라 생성되는 소인수들에 대한 정보도 포함하고 있다. 만약 데이터를 암호화하고 있는 중이라면, 공개 키 값을 전송할 때 주의해야 한다. 하지만, 이 값들이 전송을 인증하는데 사용되는 중이라면, 다른 사람들이 파일을 조회 혹은 검증할 수 있도록 이를 공개로 해 놓아야 한다.

코드를 재실행하고 스트링 DSA 를 입력하면 공개 키와 비밀 키 모두에서 p, q 와g의 값을 찾을 수가 있다. y 값은 공개 키에서, x값은 비밀 키에서 제공된다. 하지만 알고리즘이 다르기 때문에 이러한 정보는 다른 방법으로 계산되고 공유되어야 한다.

그렇다면 암호화에서 이 키 쌍을 어떻게 사용할 것인가? RSA의 경우를 먼저 살펴보면, 암호화하고 싶은 텍스트를 정하고 그것을 모듈러스보다 작은 수 m으로 바꾼다. 이에 관해서는 후에 더 언급하도록 하겠다. 여기에서 크기가 큰 소인수를 선택하는 이유를 알 수 있는데, 이는 소인수의 곱이 암호화 될 수 있는 것들의 사이즈를 결정하기 때문이다. 예를 들면 m=2라고 가정하자. 그러면 사용자는 c=m^e (mod N)를 계산해서 암호화하기 시작한다. 바꾸어 말하자면, 암호화하는 수를 공개 지수의 거듭제곱까지 증가시키고 이를 모듈러스로 나눈 나머지를 구한다. 이 예에서 2^43 는 341의 배수보다 8이 더 크기 때문에 c = 8이라는 암호화된 메시지를 전송해야 한다.

복호화(decryption)는 비밀 키를 이용해서 프로세스를 반복함으로써 이뤄진다. c^d(mod N)를 이용하자. 예를 통해 살펴보면, 먼저 8^7 을 계산하고 이를 341으로 나눈다. 나머지를 구해보면 2라는 메시지를 받게 된다. 이것은 우연히 나온 값이 아니다. 이는 m^(e d) = m (mod N)를 나타내는 Fermat의 정리 애플리케이션을 따른 것이다. 보안을 위해서 각각의 파티는 다른 파티의 공개 키를 이용해서 암호화하게 된다.

RSA 알고리즘에 대한 정보는 RSA, DSA 알고리즘에 대한 정보는 DSA를 참고하기 바란다.

from http://kr.sun.com/developers/techtips/c2004_01_16.htm

2007/05/24 01:56 2007/05/24 01:56
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

Struts File Upload

Struts File Upload.

In this tutorial you will learn how to use Struts to write program to upload files. The interface org.apache.struts.upload.FormFile is the heart of the struts file upload application. This interface represents a file that has been uploaded by a client. It is the only interface or class in upload package which is typically referenced directly by a Struts application.

Creating Form Bean
Our form bean class contains only one property theFile,  which is of type org.apache.struts.upload.FormFile. Here is the code of FormBean (StrutsUploadForm.java):

package roseindia.net;
import org.apache.struts.action.*;
import org.apache.struts.upload.FormFile;

/**

* @author Deepak Kumar
* @Web http://www.roseindia.net
* @Email roseindia_net@yahoo.com
*/

/**
* Form bean for Struts File Upload.
* */
public class StrutsUploadForm extends ActionForm {


  private
FormFile theFile;
  /**  
 
* @return Returns the theFile.
 
 
*/

 
public FormFile getTheFile() {  
    
return theFile;

 
}
 
/**  
 
* @param theFile The FormFile to set.
 
 
*/

 
public void setTheFile(FormFile theFile) {  
    this.theFile = theFile;

 
}
}

Creating Action Class
Our action class simply calls the getTheFile() function on the FormBean object to retrieve the reference of the uploaded file. Then the reference of the FormFile is used to get the uploaded file and its information. Here is the code of our action class(StrutsUploadAction.java):
package roseindia.net;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;

/**
* @author Deepak Kumar
* @Web http://www.roseindia.net
* @Email roseindia_net@yahoo.com
*/

/**
* Struts File Upload Action Form.
* */

public class StrutsUploadAction extends Action {


 
public ActionForward execute( ActionMapping mapping,
   
          ActionForm form,
 
         
HttpServletRequest request,
 
         
HttpServletResponse response) throws Exception{
 

     StrutsUploadForm myForm =
(StrutsUploadForm)form;
     
    
// Process the FormFile
     
    
FormFile myFile = myForm.getTheFile();
     
    
String contentType = myFile.getContentType();
     
    
String fileName    = myFile.getFileName();
     
    
int fileSize       = myFile.getFileSize();
     
    
byte[] fileData    = myFile.getFileData()
;
   
     System.out.println("contentType: " + contentType);
     
     System.out.println("File Name: " + fileName)
;
 
  System.out.println("File Size: " + fileSize)
;

     return mapping.findForward("success");

 
}
}

Defining form Bean in struts-config.xml file
Add the following entry in the struts-config.xml file for defining the form bean:
<form-bean name="FileUpload" type="roseindia.net.StrutsUploadForm"/>

Defining Action Mapping
Add the following action mapping entry in the struts-config.xml file:

<action path="/FileUpload" type="roseindia.net.StrutsUploadAction"
       name="FileUpload" scope="request" validate="true"
       input="/pages/FileUpload.jsp">    
    <forward name="success" path="/pages/uploadsuccess.jsp"/>
</action>

Developing jsp page
Code of the jsp (FileUpload.jsp) file to upload is as follows:

<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>

<html:html locale="true">
<head>
<title>Struts File Upload Example</title>
<html:base/>
</head>

<body bgcolor="white">
<html:form action="/FileUpload" method="post" enctype="multipart/form-data">

<table>
  <tr><td align="center" colspan="2">
  <font size="4">Please Enter the Following Details</font>
  </td></tr>
  <tr><td align="left" colspan="2">
  <font color="red"><html:errors/></font>
  </td></tr>
  <tr><td align="right"> File Name </td>
  <td align="left"> <html:file property="theFile"/> </td> </tr>
  <tr> <td align="center" colspan="2"> <html:submit>Upload File</html:submit>
  </td> </tr>
  </table>

</html:form>
</body>
</html:html>

Note that we are setting the encrypt property of the form to enctype="multipart/form-data".
code for the success page (uploadsuccess.jsp) is:

<html>
  <head>
  <title>Success</title>
  </head>

  <body>
  <p align="center"><font size="5" color="#000080">File Successfully Received</font></p>
  </body>
</html>

Add the following line in the index.jsp to call the form.

<li>
  <html:link page="/pages/FileUpload.jsp">Struts File Upload</html:link>
  <br> Example shows you how to Upload File with Struts.
</li>

Building Example and Testing

2007/05/24 01:50 2007/05/24 01:50
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

나는 web2.0 세대 일까?

네이버의 중앙일보 기사란에 당신은 Web2.0세대입니까? 란 제목의 기사가 올라와 있더군요.
http://news.naver.com/news/read.php?mode=LSD&office_id=025&article_id=0000651650&section_id=105&menu_id=105
(무단전제와 재배포를 금지하고 있어서 언제 없어질지도 모르는 링크만 걸어 둡니다.)

거기보면 뉴미디어 산업과 학계의 전문가 28분의 의견을 종합해 만들었다는
판정표가 나옵니다. - 학계의 연구나 논문이 아닌 기사를 만들기위해 급조한 티가나는 표 입니다.
(급조라는 표현을 썼지만 아무짝에도 쓸모없는 표는 아닙니다. 햔 시류의 트랜드에 해당하는 키워드가 정리되어있어 재미삼아
보기엔 나쁘지 않은 듯 합니다.)

이 표로 제 자신을 판정 해 보니 21점으로 Web 2.0세대라고 나오는 군요..
개인적으로 별 필요성을 못느껴 이용하고 있지 않은 북마킹 서비스만 이용하면 Web 2.0 프론티어가 되는군요.. [하핫]
2007/05/23 14:50 2007/05/23 14:50
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

돼지고기에 코카콜라를 부어봅시다..


출처 :  break.com


헉.. 정말 저렇게 큰 녀석들이 틀어박혀 있는거냐?
돼지고기 정말 잘.. 익혀 먹어야 겠다...
2007/05/23 13:40 2007/05/23 13:40
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

포탈과 이올린의 인지도 차이 때문인가?

5월 19일 다음에서 블로거뉴스를 외부 블로그에도 개방했다.
이에 대해 많은 블로거들이 비상한 관심을 가지고 지켜보고 있었으며 그에대한
각자의 의견을 피력 하는 포스트들이 여기저기 올라 왔다.

메타 블로그 사이트라곤 이올린 한 곳만 이용하고 있는 나에게도
다음 블로거뉴스 외부 오픈은 관심 가는 일이 아닐 수 없었다.

다음 블로거뉴스 오픈에 관심을 보인 이유


오픈 첫날 밤 블로거 기자 등록을 마치고 ( 당일 저녁은 접속 폭주와 약간의 버그로 기자단 가입이 원활치 못한 상황이었는데
운 좋게도 5번 정도 트랙백으로 등록이 되었다. )

이때까지만 해도 다음 블로거 뉴스는 나에게 또다른 이올린. 메타 블로그사이트. 그 이상도
이하의 의미도 갖지 않았다.

20일. 토요일 스튜디오 촬영한 사진들을 정리해서 블로그갤러리에 포스팅 하고 마찬가지로 블로거뉴스와 이올린쪽에도 등록을 한 뒤 하루를 마감 했다.

월요일. 출근해서 본 방문자수는 아침임에도 불구하고 200명을 상회하고 있었다..
스타 시연 동영상으로 인한 일시작인 방문자 폭주도 잦아들었는데 이건 또 뭔가 싶어 봤더니이번엔 스튜디오 촬영 후 올린
사진이 다음 포토베스트에 오르면서 많은 방문자가 찾아 주시고 있었던 거다..
( 분명 편집자의 추천으로 포.베.에 올랐을 것이다. 뉘신지는 모르나 포.베.에 추천 해 주신 편집자께는 감사의 마음을 전합니다. )

사용자 삽입 이미지
요 며칠 서비의 다락방 방문자 추이

독립도메인으로 블로그를 개설한 올 2월 이후의 모든 방문자수를 합한것 보다 많은 방문객이 요 며칠사이 발생한거다.
덕분에 요 며칠간은 리퍼러 로그를 보는 의미가 없는 날들의 연속.

월 2Tbyte 트래픽의 계정이 아니었다면 이번달 서비의 블로그는 계속 닫혀 있을 뻔 했다..

검색 사이트 상위에 링크되는 포스팅이 전혀 없는것도 아니다.
넷빈즈나 자바관련하여 다음,네이버,구글에서 검색을 시도하면 심심치않게 상위에 랭크되어있는 내 블로그를 볼 수 있다.
하지만, 그런 건 대중들이 찾는 키워드는 아닌것이다.

이제 다시 안정적인 예전의 방문자수준으로 돌아왔다.
요 며칠간의 경험으로 '소위 파워블로거란 사람들도 이런 시기가 있었을까.아니면 정말 꾸준히 방문자수를 늘려서 하루 천/만단위의 방문자수를 이루었을까.'
궁금해지는 한편, 이올린에 지금까지 열심히 포스팅한 건 뭐였나 하는 약간의 허탈감..
많은 블로거들이 자신의 블로그를 알리려면 메타블로그를 적극 활용하라고 하는데 그런 관점에서본다면
나의 메타블로그 활용점수는 낙제점일게다..
그들만의 리그도 분명 필요하지만 세상과 담 쌓고 블로깅을 할게 아니라면 많은 대중들이 찾는 장소에서의 노출도 분명 필요한듯 하다.
2007/05/23 13:13 2007/05/23 13:13
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
  1. 트랙백읽고 왔습니다~ 저랑 비슷한 상황이네요~ ^^ 악플만 조심하면 노출되는게 좋은것 같습니다~
    즐거운 주말보내세요 ^^

무료 PDF 파일 생성. 변환기

파워포인트 파일을 게시하기위해 PDF 파일로 변환해야 할 일이 생겼다.
딱히 PDF Writter를 사용하지 않고 있던 나는 구글신의 도움을 받아가며 무료 PDF변환기를
찾아보기 시작했는데...
Software955란 신기한 이름을 가진 회사의 제품중에 PDF955 란 제품이 눈에띄었다.

사이트에서 소개하고있는 955제품시리즈의 특징은
무료 다운로드,
기능 제한이 없는 Free Version 제공,
트라이얼버전이나 날짜제한없음,
사용직전에 스폰서 페이지가 보여짐.
 
으로 소개하고 있다.

다운로드 페이지 : http://www.pdf995.com/download.html

스폰서페이지 한번 보는 조건으로 아무러 기능제한이나 날짜제한없이 사용 할 수 있다는
게 마음에 들어 다운로드 후 사용 해 보았다.

사용 결과 한글처리도 잘 이루어지고 있으며
여타의 쉐어웨어 툴과같은 워터마크 같은 걸 남기지 않아서 마음에든다.


PDF995로 파워포인트 문서를 PDF파일로 변환하는 과정을 보자.

1.변환하고자 하는 PPT 파일을 파워포인트로 연다.
무료 pdf 변환기

2. 파일 -> 인쇄 (Ctrl+print ) 메뉴에 들어가면 디폴트로 지정되어있는 프린터 이름이 나오는데
무료 pdf 변환기

3. 프린터를 PDF955 로 선택 한다.
무료 pdf 변환기

4. 인쇄 버튼을 클릭하면 아래와같은 스폰서 광고가 나온다. Continue using sponsored version 을 클릭.
무료 pdf 변환기


5. 파워포인트를 PDF로 저장하기위한 대화상자가 뜬다. 저장할 PDF파일명을 적고 저장 버튼을 클릭하면 끝.
무료 pdf 변환기



2007/05/23 10:55 2007/05/23 10:55
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

요즘 올림푸스 DSLR유저들 심난하겠습니다...

한정판이라고 발매 했던  e-400 을 홈쇼핑에서 떨이로 내놓았답니다.
한정판을 구매했던 올림 유저의 자괴감은 올림푸스 브랜드에 대한 신뢰도에도
영향을 미칠텐데요...
거기에 더해 다른기종들의 가격 폭락까지..

급기야 올림유저가 올림푸스 DSLR을 까며, 일본 올림푸스 TV광고를 이용하여
'510으로 가는 과정에서 우리들은 희생양이다.' 란 타이이틀로 아래와같은
이미지 까지 제작하였습니다.

올림푸스 안습 스토리


좋은 카메라로 좋은 추억 남기면 되지 않느냐고 하지만 달관하고 넘어가기엔 그쪽 유저분들의상실감이 큰것 같습니다..
2007/05/23 02:47 2007/05/23 02:47
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

거제도 외도로 떠나는 바닷길 여행

자차로 이동하는 경로도 있고 자차로 이동하면 편한 점도 있지만 이번 여행은 대중 교통과
배편을 이용하여 이동 하기로함.

이동경로
서울역 출발 -> ktx 부산역 하차 -> 부산역 건너편 버스정류장 에서 190,507,88-1,101,135 번 버스(or 남포동역 5번출구) -> 연안 부두 정류장 하차 -> 페리타고 장승포로~ -> 거제 비치 호텔(http://geojedohotel.com/)에 여장 풀고.. 저녘 식사 후 산책 -> 익일 아침식사 후 바로 외도 구경 -> 외도 빠져 나오는 길에 해금강 유람 -> 버스편으로 포로수용소 유적공원 -> 거제 자연예술랜드 -> 숙소 -> 희동( 혹은 자연 휴양림 ) -> 이후는 섬에서 적당히 즐기거나 부신으로 나와서 부산 시내 구경을 하거나 하다가 -> KTX로 서울역 도착.

거제도 외도 지도 이동경로

거제도 관광 지도

거제도 추천 관광명소
거제도 추천 관광명소
거제도 추천 관광명소
거제도 추천 관광명소

거제도 추천 관관명소 이동로라는데.. 자차가 없다면 다 돌아보는건 무리!! 그냥 참고만.

유람선 정보 : http://tour.geoje.go.kr/theme_tours/excursion_ship_tour.jsp?mmain=4&sub1=3&sub2=1
유람선 코스 : http://www.geojerotour.com/sea/sea_1.html

예산 : ktx 서울 <-> 부산 왕복 46,100 * 2 = 92,200
         연안부두 <-> 장승포 쾌속페리 19,200 * 2  = 38,400
         장승포 <-> 외도 = 15,000 + 5,000 = 20,000
         3박 숙박료 : 40,000 * 3 = 120,000
컥 혼자 가는 예산이 밥값 빼고  27만원선.. 지대로 혼자 럭셔리여행 하겠군...

거제비치호텔을 선택한 이유는 방파제 바로뒤에 건물이 서 있어서 잘 때 파도소리를 들으며 잘 수 있기 때문.

여행 팁 혼자 조용히 돈쓰면서 여행 하고 싶다면 강추!!
4월부터 10월까지가 바다가 잠잠한 시기라 해금강변들어갔을 때 선채 밖으로 나가는게 허용 됨. 선체 밖에서 보는 기암석들의 풍경과 바다바람이란 *.*b.
다른 시기는? 배안에서 창밖으로만 봐야함.

다녀와서 느낀 점
한 3-4개월 거제도나 통영으로 출장나와 있어도 좋겠다.
-통영은 대학 친구 결혼식으로 일박 한 적이 있는데.. 그 바다의 짠내음과
  조그마한 항구. 그리고 맑은 공기가 기억에 남아서..-
부산 경유해서 거제 장승포 쪽으로 들어왔는데.. 첫 느낌은
'어.. 바다 짠내가 심하지 않네..'  신기하게.. 내가 가 본 바닷가 중에 바다 특유의 짠내가 가장 덜하다.
그리고 가장 맘에드는것중에 하나가 항구의 방파제 쪽 모텔을 잡은 덕분에 파도소리 들으며 잠들 수 있는거.. *o*

느긋이 돌아보고 올라가야지..
출근하기 싫어지면 어쩌징.. ㅎ

다음에 좋아하는 사람 생기면 꼭 한번 다시 와 봐야지.


여행 하면 사진 아니겠어? 제 추억의 일부를 봐 주시겠어요?

거제도 외도 여행 사진

장승포 항


거제도 외도 여행 사진

장승포 항 야경


거제도 외도 여행 사진

거제도 외도 여행 사진

장승포 소경


거제도 외도 여행 사진

거제도 외도 여행 사진

탁트인 멋진 바다.바다.바다.


거제도 외도 여행 사진

거제도 외도 여행 사진

거제도 외도 여행 사진

외도 선착장


거제도 외도 여행 사진

거제도 외도 여행 사진

거제도 외도 여행 사진

부산 태종대에서 바라본 바다


거제도 외도 여행 사진

기차타고 서울로 Go Go

minolta @7, 17-35mm, 50mm, 100-300mm apo, fuji 오토오토 100, 코닥 골드 100, fuji pro 160s
2007/05/22 18:16 2007/05/22 18:16
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

다음 블로거뉴스 포토 베스트 먹었습니다. ㄷㄷㄷ

앞 포스팅으로 올렸던 김경인씨 사진이 다음 블로거 뉴스에 포토베스트
[ http://bloggernews.media.daum.net/photo/best?page_size=12&group_count=&type=photo&page_no=1 ]
에 올라 버렸습니다.

more..

블로그 들어갔다가 평소보다 많은 방문자수에 놀라서 리퍼러 로그를 봤더니
다음 블로거 뉴스쪽에서 들어오는 사람들이 많더군요..
왠일인가 하고 쫒아가봤더니... 글쎄..
다음블로거뉴스에 조회수 고작 200으로 포토베스트에 올라가있지 뭡니까.. ㄷㄷㄷ
다른사진들은 조회수가 만만단위...인데 말이죠...

모델이 되어주신 '김경인'씨의 인지도 덕인건 알고 있지만
기분이 좋은건 어쩔 수 없군요..

저번 레이소다 일면건도 그렇고
올해는 뭔가 날로먹으며 사는듯한 기분이 드는군요...

2007/05/22 00:21 2007/05/22 00:21
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

헉.. 진짜 무섭다...

* 본 영상은 저의 저작물이 아니며 그런 이유로 제 블로그에 포스팅 하는 글에 대한 CCL의 영향을 받지 않습니다. *


무서운 이야기라 장담을 하길래.. 뭔가 했더니..
뜨헉.. 진짜 섬뜩하네.. 실제로 있었던걸까.. 그냥 도시괴담 같은걸까..?


2007/05/20 03:36 2007/05/20 03:36
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다