2007년 5월 31일 목요일

[vb] error 핸들링

에러가 발생할 경우 ...

Private Function blnDoSomething() As Boolean

    On Error GoTo Error_Handler:

    Error_Handler:
         call log ( message )        ' 사용자 정의 function log를 남긴다.
       
End Function

질문하기

난 질문하길 좋아한다. 왜 그럴까? 뭘까?

하지만 이 사회는 질문하는 사람을 싫어 했다. 고등학교때 늘 질문하다 맞은 기억이 있다.
그 이후론 질문하는게 두려워 졌다. 마음속으로만 질문하고 스스로 대답하곤했다.
결국 질문은 사라지고 혼자만의 세상이 남아 버렸다.
용기가 사라진 시기였다.

어쩌다 대학에 가서는 다시 질문을 했다...반응은 달랐다. "좋은 질문인데"...헉!! 충격이었다.
좋은 질문을 위해 노력을 했었다.

다시 많이 보고 듣고 느끼고 질문하기 위해 노력 해야겠다.

VB6 날짜에 관련된 모든것


Dim today As Date;       '오늘 날짜 가져오기
Dim yesterday As Date; '어제 날짜 가져오기

today = Date
yesterdate = Now()  - 1

' 오늘 날짜 출력
MsgBox Month(Today) & Day(Today) & Year(Today)

' 어제 날짜 출력
MsgBox Month(yesterday) & Day(yesterday) & Year(yesterday)

2007년 5월 30일 수요일

르브론이가 25득점을 넣었다네.

예전 만큼은 아니지만 가끔 NBA를 보면 확실히 르브론은 군계일학인 느낌이 든다.
그 녀석은 덩크가 아주 일품이다, 어린 나이임에도 불구하고 이미 팀을 이끌고 있다는 느낌이 든다.

조던과의 차이라면 클러치 히트...클러치 상태에서 상대에게 결정적 한방을 날리는 힘이 부족하다고나 할까? 하지만 이런 식이라면 조만간 그런 능력도 갖추게 될것같다. 팀원들은 믿고 따르고 다른 팀원들을 끌고 더 높은 곳으로.

우승을 한 번 하고나면 많은게 바뀌리라...르브론이...

미역 아저씨.

이씨, 혜승, 나 이렇게 저녁을 먹고 낚시를 하기 위해 방파제에 갔다.
겁이 많은 혜승이는 멀찍이 떨어져서 보고 있었고 낚시를 좋아하는 이씨는 찌를 가까운 바다로 던져 넣었었다.

움찔하더니 무언가를 끌어 올렸고 끝에 어른 주먹 2개만한 무언가가 조용히 매달려 있었다.
고기라고 하기엔 너무 조용한 무언가가..그렇다 미역 이었다

처음엔 무서워하던 혜승이도 미역 잡았다며 좋아했고, 그는 그렇게 미역 아저씨가 되었다.

날이추워서 혜승이이게 그만 들어가자고 했더니 이씨가 대번에 애처로운 눈빛을 보내며.."가지마~~" ...
무서운겨?? ㅎㅎㅎ

회사 안가?

익현이가 말이 늘고 있다.

아빠 회사 안가?
나두 해보자..
같이 놀자..
똥이 안나와.

단어만 겨우 열거 하던녀석인데 어느새 말이 길어지고 있다.
영어도 얘기해 주면 무조건 따라하는데 이 시기를 놓치긴 아쉽다.
밤마다 공부도 시켜주고 놀아줘야겠다.

혜승이도 지난번 남해 다녀온 이후 나랑 부쩍 친해졌다, 이래서 여행이 좋은건가 보다. 다음엔 일본여행을 같이 다녀오고 싶다 2년 목표로 예산은 300~400정도? 흠...너무 많나?
매달 20만원씩은 모아야겠네..ㅋㅋ

여하튼 이젠 애들 있을땐 9시 전에 무조건 집에가기로 마음 먹어 본다.

2007년 5월 29일 화요일

java DB Connect 예제..

흠 한 번도 안 해봤는데..되려나?



java.sql.Connection은 어디서 가져와야 하나?









package com.stardeveloper.example; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class JdbcExample2 { public static void main(String args[]) { Connection con = null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); con = DriverManager.getConnection("jdbc:mysql:///test", "root", "secret"); if(!con.isClosed()) System.out.println("Successfully connected to " + "MySQL server using TCP/IP..."); } catch(Exception e) { System.err.println("Exception: " + e.getMessage()); } finally { try { if(con != null) con.close(); } catch(SQLException e) {} } } }

Bind9 설치

http://www.isc.org/index.pl 에 방문해서 Bind 소스를 받는다.

소스를 풀고 컴파일을 한다.

tar -xvzf bind-9.4.1.tar.gz
./configure
./make
./make install

[img1]

bind의 설정파일은 /etc/named.conf 에 저장됨

[img2]

/var/named밑에 존 파일들이 저장된다.

options {
        directory "/var/named";
        dump-file "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        /*
         * If there is a firewall between you and nameservers you want
         * to talk to, you might need to uncomment the query-source
         * directive below.  Previous versions of BIND always asked
         * questions using port 53, but BIND 8.1 uses an unprivileged
         * port by default.
         */
         // query-source address * port 53;
};

// 추가
zone "arbite.com" IN {
        type master;
        file "zone-arbite.com";
};

named.conf의 설정은 /usr/local/dns/sbin/named-checkconf파일로 설정을 확인할 수 있다.

# named-checkconf /etc/named.conf
the default for the 'auth-nxdomain' option is now 'no'


mySQL Bind 설치..

Bind정보를 파일로 보다는 DB로 가지고 있는게 더 좋지...해보자..

Step 1.  mySQL Bind를 다운로드 받는다.
http://sourceforge.net/project/downloading.php?group_id=103722&use_mirror=nchc&filename=mysql-bind-0-1.tgz&40318992
여기서 받았음

Step 2.  서버로 옮긴 후 앞축을 풀었다.
tar -xvzf mysql-bind-0-1.gz

Step 3. mysqldb.c 와 mysqldb.h 를
 bind9/bin/named , bind9/bin/named/include 에 복사 한다.

Step 4. bin/named/Makefile.in 내부에 DBDRIVER_OBJS and DBDRIVER_SRCS 라인을 추가 한다.
(e.g. add mysqldb.c to DBDRIVER_SRCS and mysqldb.@O@ to DBDRIVER_OBJS).

Step 5. mysql_config --cflags 의 결과에 DBDRIVER_INCLUDES 추가한다.
DBDRIVER_INCLUDES = -I'/usr/include/mysql'

Step 6. mysql_config --libs의 결과에 DBRIVER_LIBS 구가
DBDRIVER_LIBS = -L'/usr/lib/mysql' -lmysqlclient -lz -lcrypt -lnsl -lm -lc -lnss_files -lnss_dns -lresolv -lc -lnss_files -lns
s_dns -lresolv

#---------------------------------
#
# Add database drivers here.
#
DBDRIVER_OBJS = mysqldb.c
DBDRIVER_SRCS = mysqldb.@O@
DBDRIVER_INCLUDES = -I'/usr/include/mysql'
DBDRIVER_LIBS = -L'/usr/lib/mysql' -lmysqlclient -lz -lcrypt -lnsl -lm -lc -lnss_files -lnss_dns -lresolv -lc -lnss_files -lnss_dns -lresolv
#---------------------------------



Step 7. bind9/bin/named/main.c 의 내부에 mysqldb.h를 인쿨르드 한다. ( #include "mysqldb.h" )

7-1. main.c의 setup() 내부에 mysqldb_init() 추가
       ns_server_create(ns_g_mctx, &ns_g_server) 앞에 있어야 함
7-2. cleanup()에 mysqldb_clear() 추가

Unregistration should be in cleanup(), by adding the call mysqldb_clear()

Step 8 Bind 새로 설치
You should now be able to change to your BIND directory and build BIND with the commands

./configure
make
make install

ENTRY IN NAMED.CONF
===================

zone "mydomain.com" {
  type master;
  notify no;
  database "mysqldb dbname tablename hostname user password";
};

zone 파일을 변경해야 한다
In the database line, dbname is the name of the MySQL database,
tablename is the name of the table for this domain/zone,
hostname is the name of the database host,
user and password are for access to the database.

DATABASE SCHEMA
===============

You should create a database for the driver and add one table for each domain. The following SQL will create a table for one domain.
 Change mydomain to something that will represent the domain more clearly.

CREATE TABLE mydomain (
  name varchar(255) default NULL,
  ttl int(11) default NULL,
  rdtype varchar(255) default NULL,
  rdata varchar(255) default NULL
) TYPE=MyISAM;


INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'SOA', 'mydomain.com. www.mydomain.com. 200309181 28800 7200 86400 28800');
INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'NS', 'ns0.mydomain.com.');
INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'NS', 'ns1.mydomain.com.');
INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'MX', '10 mail.mydomain.com.');
INSERT INTO mydomain VALUES ('w0.mydomain.com', 259200, 'A', '192.168.1.1');
INSERT INTO mydomain VALUES ('w1.mydomain.com', 259200, 'A', '192.168.1.2');
INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'Cname', 'w0.mydomain.com.');
INSERT INTO mydomain VALUES ('mail.mydomain.com', 259200, 'Cname', 'w0.mydomain.com.');
INSERT INTO mydomain VALUES ('ns0.mydomain.com', 259200, 'Cname', 'w0.mydomain.com.');

2007년 5월 28일 월요일

이클립스에서 내가 궁금한 것들

익히 들어서 이클립스는 알고 있었다. 써보니 좋네.

궁금한 것들
date: 2007.5.28
1. java를 컴파일해서 생깉 class파일이 실행이 안되네..테스트 해봐야겠음

2. class를 jsp로 만들었을 경우 어떻게 실행을 해야 하나?

3. 윈도 프로그램으로 만들경우 실행은 어떻게 하나?

4. 윈도환경에서 만든 프로그램을 리눅스에서 실행을 하려면 어떻게 하나?

이클립스 입문 - 사이버 출판사

이클립스 입문(자바 개발자를 위한)(CD-ROM 1장 포함)
판매가 : 12,750
ISBN-10 : 8955981694
2004년 03월 27일 출간
438쪽


1장 이클립스란 무엇일까?

2장 이클립스로 자바 코드를 적는다

3장 이클립스를 이용한 팀 개발

4장 Swing 애플리케이션과 SWT 애플리케이션

5장 웹 애플리케이션과 JBoss 애플리케이션

6장 플러그인 가이드와 플러그인 개발

이클립스 요술램프 - 아이콘 출판사

책들의 메뉴얼을 체크 해 봄으로써 내가 어떤 주제를 알아야 하는지 파악한다.
이클립스 요술램프(CD 포함)
ISBN-10 : 8989975409
판매가 : 22,500
Section 1 Eclipse 사용

1장 Eclipse란
1.1 Eclipse는 어디에서 왔나
1.2 Eclipse의 탄생

1.3 Eclipse란 무엇인가

1.4 Eclipse의 미래
1.5 요약

2장 Eclipse 워크벤치
2.1 Eclipse 다운로드
2.2 Eclipse 전체보기

2.3 가볍게 훑어보는 Java

2.4 사용자 설정

2.5 요약


3장 자바 개발 사이클: 테스트와 코딩
3.1 Java 개발 툴 방법론

3.2 JUnit 유닛 테스팅 프레임워크

3.3 좀 더 자세히 살펴보는 디버깅
3.4 log4j를 이용한 로깅

3.5 요약
4장 Eclipse에서의 소스코드 작업
4.1 외부 프로젝트 가져오기
4.2 Persistence 컴포넌트 확장

4.3 리팩토링

4.4 요약


5장 Ant를 이용한 빌드
5.1 공식 빌드 프로세스의 필요성

5.2 Make - 잊혀져 가는 툴을 회고하며
5.3 새로운 Java 표준 - Ant

5.4 샘플 Ant 빌드

5.5 요약
6장 CVS와 소스 컨트롤
6.1 소스 컨트롤의 필요성

6.3 요약


7장 웹 개발 툴
7.1 웹에서의 개발

7.1.2 JSP 개요

7.2 Tomcat과 Sysdeo Tomcat 플러그인

7.3 웹 애플리케이션 구축

7.4 샘플 애플리케이션 시작
7.5 요약


Section 2 Eclipse 확장

8장 Eclipse 플러그인
8.1 플러그인과 익스텐션 포인트

8.2 Plug-in Development Environment (PDE)

8.3 "Hello, World" 플러그인 예제

8.4 log4j 라이브러리 플러그인 예제

8.5 플러그인 배치
8.6 요약


9장 Eclipse에서의 플러그인 작업
9.1 log4j 통합 플러그인 예제

9.2 에디터(TextEditor)

9.3 뷰 (ViewPart)

9.4 사용자 설정 (FieldEditorPreferencePage)


부록 A Java 퍼스펙티브 메뉴 레퍼런스


B CVS 설치 매뉴얼

C 플러그인 익스텐션 포인트


D SWT

E Jface

2007년 5월 25일 금요일

Tomcat에 AXIS환경 설정

Tomcat에서 web service를 사용하기 위해선 AXIS가 필요하다.

일단 tomcat만 설치할 경우엔

tomcat 폴더 밑에 axis가 존재하지 않는다.

http://ws.apache.org/axis/java/install.html#Tomcat4.xAndJava1.4

axis에 방문해서 axis를 다운 받는다.

그 후 tomcat폴더 밑에 axis/WEB-INF/lib를 추가해서 받은 파일의 lib의 내용을 부어 주면 오류가 나지 않는다.

해당 환경이 잡혀 있지 않을 경우엔 아래와 같은 오류가 발생한다.

Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled

기분 나쁜 오류녀석...

2007년 5월 21일 월요일

포켓걸 이현지가 가수로 데뷔를 한다네요..

  - 연합뉴스에서 날 고소할까? 큰일인데..

정녕 빨강스타킹을 신고 가수를 해야쓰겠냐?

2007년 5월 19일 토요일

Spreadsheet_Excel_Writer 에 대한 메뉴얼

출처: http://www.phpfreaks.com/pear_manual/page/package.fileformats.spreadsheet-excel-writer.html

그동안
$worksheet->write($i, $j, $this->get_data( $data, $key, $i ) );
를 사용했더니 오류가 발생함 예를 들어 번호가 길 경우 2E... 어쩌구 이런식으로 출력 됨

$worksheet->writeString($i, $j, $this->get_data( $data, $key, $i ) );
으로 수정하면 긴 숫자도 깨지지않고 정상적으로 출력됨

2007년 5월 18일 금요일

[php template] loop와 case를 이용한 예제

로직-----------------------
$t_options   = array("filename"=> _TEMPLATE_ . "G101_result.tmpl", "debug"=>0);
        $_template    = & new Template( $t_options );

        $query = "쿼리";
        $result = mysql_query ( $query, $connect );

        $datas = array();
        while ( $data = mysql_fetch_array ( $result ) )
        {
                if ( $level == $data[level] )
                        $condition=1;
                else
                        $condition=0;

                array_push( $datas, array(
                        "level"=> $data[level],
                        "name" => $data[name] ,
                        "condition" => $condition
                        )
                );
        }

        $_template->AddParam('datas', $datas );
        $_template->EchoOutput();



템플릿------------------
<table border=1 width=450>
    <tr>
        <td width=100>Level</td>
        <td>Name</td>
        <td>Menu</td>
    </tr>
<TMPL_LOOP name="datas">
    <TMPL_IF condition>

        <tr>
            <td><input type=text name=level value='<TMPL_VAR name="level">'></td>
            <td><input type=text name=name value='<TMPL_VAR name="name">'></td>
            <td><a href='javascript:modify(<TMPL_VAR name="level">')>M</a>/D</td>
        </tr>

    <TMPL_ELSE>

        <tr>
            <td><TMPL_VAR name="level"></td>
            <td><TMPL_VAR name="name"></td>
            <td><a href='javascript:modify(<TMPL_VAR name="level">)'>M</a>/D</td>
        </tr>


    </TMPL_IF>

    <tr>
        <td colspan=3 background=images/point.gif height=1></td>
    </tr>
</TMPL_LOOP>
</table>

2007년 5월 16일 수요일

익현이가 말이 늘고 있다.

혜승이는 말을 10개월부터 엄마, 아빠 하더니 대뜸 문장을 나열해 버려서 몰랐는데.
익현이 말 늘어나는건 참 재미나다.

어제는 "아빠 파리가 많이 날아다녀서 싫어" 이런 뜻이였나보다.
"파리가 아빠가 많아 안돼~" ㅋㅋㅋ

그리고 "아빠 책 읽고 있소~" 자기 책 읽는거 자랑하고 싶었나 보다.

보고싶다 익현아..사랑해.

2007년 5월 15일 화요일

방과 후 옥상

이런 썩을...이렇게 재미난 영화를 지금에야 보다니.
난 우리나라 최고의 영화를 개인적으로 반칙왕이라 생각하고 있었다. 보다 숨 넘어가서 죽을뻔 했던 영화는 반칙왕밖에 없었던 것 같다. 헌데...집에서 tv로 보다가 죽을뻔한 영화가 있었으니

방 과 후 옥 상

...ㅠ.ㅠ

혹시 지금 극장에서 하고 있는 무슨웨딩인가 이것도 재미난거 아닐까? ㅎㅎㅎ

DVD 구입 확정...헌데 그 야리꾸리한 여자 주인공은 지금 뭐 할까??

내일의 기억

일본 사람들은 감수성이 예민한걸까? 어떻게 이렇게 여운이 남는 영화를 만들었을까?
나에게 있어 공포영화였다. 가볍게 살고 싶었는데 지금 쥐고 있는 것들을 놓치기 싫었나보다.

잠을 잘 수 없었다. 새벽까지 꼬박....내가 사에키가 된것 같았다.

가족의 행복을 위해 열심히 일 하고 회사에서 큰 프로젝트를 따 내서 승승장구 중에...무언가 이상한 것을 깨닫는다...
사람이름을 잊는것 부터, 고객의 업체를 가는 중 길을 잃기도 하고, 미팅 약속을 잊어버리고..점차 기억도 잊고..그렇다 그는 알츠하이머였던것이다..

그가 의사에게 외친다. "서서히 죽어가는거라 얘기하라".. 그렇다 서서히 죽어가는것이었다.
나도 너무 두려웠다. '내가 애기들의 기억을 잊는다면, 집사람을 잊는다면'... 그 모든것들이 두려웠다. 잠을 자지 못 할 만큼..


머릿속에 계속 마지막 장면이 떠나질 않는다...사에키가 컵을 굽기위해 산에 왔다가 새벽녁 내려가는 길에 에미코와 마주치는 장면..순간 정적이 흐르고 난 숨이 멎었다..아 둘이 다시 만났구나...사에키와 에미코 모두 길에 우뚝서게되고 잠시후 다시 발걸음을 옮기는 사에키..에미코의 옆을 모른척 지나치고 만다. 그렇다 그는 에미코의 기억을 잊었던 것이다..ㅠ.ㅠ 죽을 것 같았다..

첫장면이 생각났다 그녀는 기억을 잊은 사에코 옆을 수년째 지키고 있었던 것이었다..무엇이 그녀를 그의 곁에서 떠나지 못하게 만들었을까? 나와 집사람도 그렇게 할 수 있을까? 나를 몰라보는 사람의 곁에서 계속 지켜주며 보듬어주며...

사랑...위대하다...



2007년 5월 14일 월요일

HTML::Entities 를 사용한 tag 인코딩

Result Description Entity Name Entity Number
" quotation mark &quot; &#34;
' apostrophe &apos; (does not work in IE) &#39;
& ampersand &amp; &#38;
< less-than &lt; &#60;
> greater-than &gt; &#62;




아래는 샘픔
<p>test</p>
<p>Some text with "quotes" in it</p>
<p><img src="/images/picture.gif" alt="Alt text goes here"></p>


use HTML::Entities;

$a = "V&aring;re norske tegn b&oslash;r &#230res";
decode_entities($a);
encode_entities($a, "\200-\377");

soap client sample #1

<?
// date: 2007.5.14 - jk
require_once('SOAP/Client.php');

// soapclient 생성
$soapclient = new SOAP_Client( "http://[domain]/service/service.cgi" );

// parameter
$parameters = array ( "name1"=>"test1", "name2"=>"test2" );

// namespace는 server의 모듈을 의미한다
$soapoptions = array('namespace' => 'urn:Demo', 'trace' => 0);

echo $soapclient->call( "hi", $parameters, $soapoptions);

?>
~               

결과
hi test1
hi test2

별거 아니지만 일단 테스트가 된다...server는 perl의고 client는 php인 case였음 ㅋㅋ

SOAP Client 샘플

<?
	$namespace = "http://www.scit.wlv.ac.uk/~jphb";
	require_once('SOAP/Client.php');
	$info = new SOAP_client("http://info.scit.wlv.ac.uk/~jphb/cp2101/soap/server/helloserver.php");
	$params = array("name" => "Peter");
	$response = $info->call("sayboo",$params,$namespace);
	if(PEAR::iserror($response))
		echo "Error " . $response->getCode() .
			 " [ " . $response->getMessage() . "]\n";
	else	echo $response;
	echo "\n";
	exit;
?>
참조: 



http://www.scit.wlv.ac.uk/~jphb/cp2101/week5/phpsoap.html

PEAR - PHP Extension and Application Repository 설치함

PERL의 CPAN처럼 Reusable한 module들을 설치 할 수 있는 util인듯

url: http://pear.php.net/index.php

여기서 SOAP Client관련 모듈을 다운 받아 개발 하려 한다.


PEAR Installer 설치 on Linux
In PHP 5.0.0+, the PHP CLI binary is php.exe
#
#  > php -r "readfile('http://pear.php.net/go-pear');" > go-pear
#  > php go-pear


# 설치 완료 화면
The 'pear' command is now at your service at /usr/local/php/bin/pear

** The 'pear' command is not currently in your PATH, so you need to
** use '/usr/local/php/bin/pear' until you have added
** '/usr/local/php/bin' to your PATH environment variable.

Run it without parameters to see the available actions, try 'pear list'
to see what packages are installed, or 'pear help' for help.

For more information about PEAR, see:

  http://pear.php.net/faq.php
  http://cvs.php.net/co.php/pearweb/doc/pear_package_manager.txt?p=1
  http://pear.php.net/manual/

Thanks for using go-pear!

TEST
pear install  SOAP

Mashup ... 이제는 필수...

요즘 웹서비스에 대해 공부 중이다..Mashup 우리 프로그램도 결국 Mashup으로 가야 할 듯.
허덕이며 따라가는건지...앞서 가는건지.. 알수가 없구만..

웹 서비스나 공개 API를 제공하는 업체들에서 데이터를 받아 전혀 다른 새로운 서비스나 융합 애플리케이션을 만들어 내는 것. 구글이 공개한 검색 관련 응용 프로그램 인터페이스(API)와 지도 관련 API, 그리고 기타 여러 웹 서비스 정보들을 혼합하여 부동산 매매에 응용(예: HousingMaps.com)한 것처럼 다수의 정보원으로부터 제공되는 콘텐츠를 조합하여 하나의 서비스로 제공하는 웹 사이트 또는 애플리케이션을 가리킨다. 팝 뮤직에서 처음 사용되기 시작한 매시업아티스트디스크자키가 두 곡 또는 그 이상의 곡을 섞어 하나의 곡으로 연주하는 것을 의미한다.

2007년 5월 11일 금요일

SOAP::Data, SOAP::SOM 을 사용해 structured 정보 전달

#### Demo.pm 소스
use SOAP::Lite;

package Demo;
 
  #===============================
  # object Acess
  #
  ....

  # SOAP으로 데이터를 만들어 봄
  sub someMethod3
  {
        # $elem1 = SOAP::Data->name('item' => 123)->type('SomeObject');
        # $elem2 = SOAP::Data->name('item' => 456)->type('SomeObject');

        # 흠 SomeObject는 뭐지?
        $elem1 = SOAP::Data->name('id' => 123);
        $elem2 = SOAP::Data->name('name' => "test 입니다");

        push(@array,$elem1);
        push(@array,$elem2);

        $data = SOAP::Data->name("infos" =>
                \SOAP::Data->value( @array )   
        );
       
        return $data;
  }
  ....

  #===============================
  # 클라이언트 소스
  #
  #!perl -w
   use SOAP::Lite;
   use Data::Dumper;

   use SOAP::Lite +autodispatch =>
         uri => 'http://[Server]/Demo',
         proxy => 'http://[Server]/service/service.cgi';

  my $obj = Demo->new(90);
  $som = SOAP::SOM->new;
  $som = $obj->someMethod3();

  print Dumper( $som );

최고의 영화를 생각해 봤다.

1. 포레스트 검프
    맞아...이건 dvd로 소장하고 있다 가끔 본다.

2. 반칙왕
    재미난 영화중 최고가 아닌가 싶다.

3. 천국의 아이들
    극장에서만 3번을 본 영화...가슴이 따스해 진다.

4. 8월의 크리스마스
   석규형이 유리창 너머로 심은하를 쓰다듬던 장면이 잊혀지지 않는군..공익요원도 나온다. ㅎㅎ

5. 록키1
   최고다, 말이 필요없는 전율~~~
.....

좀 기억이 나는 영화
1. 진주 귀걸이를 한 소녀.
    마지막 장면이 한참 기억이 나더라..

2. JSA
    아트지...그 전율이란

3. 쇼생크 탈출
   멋지삼...한동안 빠져 지냄...프리즌 브레이크의 원작 ㅋㅋㅋ 혼자 생각



개 쓰레기 영화
1. 300
    제길 이게 영화냐? 무슨 도살장 갔다온 기분이다.

2. 스파이더맨 1,2,3
   전부 봤다 눈만 베렸다...

3. 슈퍼맨 리턴스
   몬 내용이냐..쓰봉

슬럼프는 실력이 벽 앞에 쌓이는 시간...

슬럼프는 실력이 벽 앞에 쌓이는 시간...예병일의 경제노트에 타이틀이네.
항상 실력은 계단식으로 된다고 하더라..

물은 100도가 되어야 끓고,
물은 90도가 될때까지도 끓을 기미가 없으니 중도에 끓이는걸 포기해 버릴 수도 있다. 너무 아깝지 않은가 .. 토요타 회장 ??씨가 한 말인데..누구더라..

지금이 슬럼프일까?
회사에 신 제품도 나오고 새로운 길이 보이는 것 같고 적극적으로 임해보자.

2007년 5월 10일 목요일

SOAP::Serializer

SOAP::Serializer
 data를 XML로 만들어 주는 역할을 수행
 $serialize = SOAP::Serializer->new( );
 
메서드 설명
 $serialize = SOAP::Serializer->new( );
 
 envelope(method, data arguments)
 $serialize->envelope(fault => $fault_obj);
  입력된 값을 envelope data로 만들어 줌
 context
 $serialize->context->packager();
  SOAP::Serializer로 만들어진 data를 access가능 하도록 만들어 줌
 
 $serial->soapversion('1.2');
  SOAP의 Version정의
 
 $serial->xmlschema($xml_schema_1999);
 
custom data type
 serialrize는 MyModule::MyPackage가 정의되어 있는지 확인한 후 $foo를 SOAP::Data의 형태로 만들어 준다.

 $foo = MyModule::MyPackage->new;
 my $client = SOAP::Lite
  ->uri($NS)
  ->proxy($HOST);
 $som = $client->someMethod(SOAP::Data->name("foo" => $foo));

흠 사용자 정의 타입 만들기가 의외로 어렵네...어쩐다.

SOAP::SOM Soap return을 functionally 하게 access할 수 있게 해 준다.

SOAP::SOM   
    Web Service의 SOAP Response의 값을 access하는것이 가능함
   
    $som = SOAP::SOM->new;
    my $client = SOAP::Lite
        ->readable(1)
        ->uri($NS)
        ->proxy($HOST)
    $som = $client->someMethod();
   
    위의 예제에서 여기에서 $som은 SOAP::SOM 타입 이였음 dump떠보면 알 수 있겠네..
   
    잠시 dump 예제
    ------------------------------------------
    $VAR1 = bless( {
                 '_name' => 'sign',
                 '_signature' => [],
                 '_value' => [
                               'Aries'
                             ],
                 '_attr' => {}
               }, 'SOAP::Data' );
              
    타입이 'SOAP::Data'라고 분명히 나온다.
    ------------------------------------------
   
    XML data를 바로 사용가능하게 함
    $som = SOAP::SOM->new($message_as_xml);

몇몇 메서드 들   
    match(path)
    $som->match('/Envelope/Body/[1]');
    SOAP의 Body는 Envelope attribute가 시작임


    $envelope = $som->envelope;
        몰 가져오지?
   
    $ns = $som->namespaceof('[1]');
        네임 스페이스
       
    $body = $som->body;
   
   
예제 1 ( xpath와 비슷한 방식 ? )
    <Envelope>
      <Body>
        <fooResponse>
          <bar>abcd</bar>
        </fooResponse>
      </Body>
    </Envelope>
   
   
    my $soap = SOAP::Lite
        ->uri($SOME_NS)
        ->proxy($SOME_HOST);
    my $som = $soap->foo();
    print $som->valueof('//fooResponse/bar');
   
   
예제 2 ( attribute를 찾는 방식 )
    <Envelope>
      <Body>
        <c2fResponse>
          <convertedTemp test="foo">98.6</convertedTemp>
        </c2fResponse>
      </Body>
    </Envelope>
   
    print "The attribute is: " .
      $som->dataof('//c2fResponse/convertedTemp')->attr->{'test'};
   
   
예제 3 ( iterate 방식 )
    <Envelope>
      <Body>
        <catalog>
          <product>
            <title>Programming Web Service with Perl</title>
            <price>$29.95</price>
          </product>
          <product>
            <title>Perl Cookbook</title>
            <price>$49.95</price>
          </product>
        </catalog>
      </Body>
    </Envelope>
   
   
    for my $t ($som->valueof('//catalog/product')) {
      print $t->{title} . " - " . $t->{price} . "\n";
    }
   
예제 4 ( array의 array 처리 )
    $xml = <<END_XML;
    <foo>
      <person>
        <foo>123</foo>
        <foo>456</foo>
      </person>
      <person>
        <foo>789</foo>
        <foo>012</foo>
      </person>
    </foo>
    END_XML

    #
    # 앗 왜 여기서는 Deserializer를 사용했지?
    # $som = SOAP::SOM->new($xml); 과의 차이점은 무얼까?
    #
    my $som = SOAP::Deserializer->deserialize($xml);
    my $i = 0;
    foreach my $a ($som->dataof("//person/*")) {
        $i++;
        my $j = 0;
        foreach my $b ($som->dataof("//person/[$i]/*")) {
            $j++;
            # do something
        }
    }

SOAP::Data 여러가지 타입의 data를 만들어 내기 위해 사용함

여러 타입의 SOAP Data를 만들어 내는데 사용한다.

    $elem1 = SOAP::Data->new(name => 'idx', value => 5);
    $elem2 = SOAP::Data->name('idx' => 5);
    $elem3 = SOAP::Data->name('idx')->value(5);
  
    위의 3개의 예제는 모두 같은 값이다.
   
    <foo>
      <bar>123</bar>
    </foo>
   
    의 구현을 위해서는 아래의 예제를 사용하면 된다.
   
    SOAP::Data->name('foo' => \SOAP::Data->value(
        SOAP::Data->name('bar' => '123')));
       
 Array 예제
    $elem1 = SOAP::Data->name('item' => 123)->type('SomeObject');
    $elem2 = SOAP::Data->name('item' => 456)->type('SomeObject');
    push(@array,$elem1);
    push(@array,$elem2);

    my $client = SOAP::Lite
        ->readable(1)
        ->uri($NS)
        ->proxy($HOST);

    $temp_elements = SOAP::Data
        ->name("CallDetails" => \SOAP::Data->value(
              SOAP::Data->name("elem1" => 'foo'),
              SOAP::Data->name("elem2" => 'baz'),
              SOAP::Data->name("someArray" => \SOAP::Data->value(
                  SOAP::Data->name("someArrayItem" => @array)
                            ->type("SomeObject"))
                       )->type("ArrayOf_SomeObject") ))

        ->type("SomeObject");

    $response = $client->someMethod($temp_elements);
   
    결과물 확인
    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
        xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:namesp2="http://namespaces.soaplite.com/perl"
        SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
      <SOAP-ENV:Body>
        <namesp1:someMethod xmlns:namesp1="urn:TemperatureService">
          <CallDetails xsi:type="namesp2:SomeObject">
            <elem1 xsi:type="xsd:string">foo</elem1>
            <elem2 xsi:type="xsd:string">baz</elem2>
            <someArray xsi:type="namesp2:ArrayOf_SomeObject">
              <item xsi:type="namesp2:SomeObject">123</bar>
              <item xsi:type="namesp2:SomeObject">456</bar>
            </someArray>
          </CallDetails>
        </namesp1:test>
      </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

XML 자체로 Data를 만들어 낼 수도 있음
    $xml_content = "<foo><bar>123</bar></foo>";
    $elem = SOAP::Data->type('xml' => $xml_content);

SOAP Data type

Data Types 
Scalars
Booleans, Integers, Doubles, Strings

Vectors
Arrays, Associative Arrays ("hashes"), Objects, Mixed

Data::Dumper 모듈의

아 무엇에 쓰는 물건인가 생각했는데 참으로 좋은 모듈일쎄..

변수나 레퍼런스를 출력할 수 있고 그 값들을 펄 신텍스에 맞춰 출력해주는 역할 수행

여러가지 메서드가 존재 하지만 간단히 예제를 봐야겠다.

use Data::Dumper;

    package Foo;
    sub new {bless {'a' => 1, 'b' => sub { return "foo" }}, $_[0]};

    package Fuz;                       # a weird REF-REF-SCALAR object
    sub new {bless \($_ = \ 'fu\'z'), $_[0]};

    package main;
    $foo = Foo->new;
    $fuz = Fuz->new;
    $boo = [ 1, [], "abcd", \*foo,
             {1 => 'a', 023 => 'b', 0x45 => 'c'},
             \\"p\q\'r", $foo, $fuz];


    ########
    # simple usage
    ########

    $bar = eval(Dumper($boo));
    print($@) if $@;
    print Dumper($boo), Dumper($bar);  # pretty print (no array indices)


결과..
$VAR1 = [
          1,
          [],
          'abcd',
          \*::foo,
          {
            '69' => 'c',
            '1' => 'a',
            '19' => 'b'
          },
          \\'pq\'r',
          bless( {
                   'a' => 1,
                   'b' => sub { "DUMMY" }
                 }, 'Foo' ),
          bless( do{\(my $o = \'fu\'z')}, 'Fuz' )
        ];
$VAR1 = [
          1,
          [],
          'abcd',
          \*::foo,
          {
            '69' => 'c',
            '1' => 'a',
            '19' => 'b'
          },
          \\'pq\'r',
          bless( {
                   'a' => 1,
                   'b' => sub { "DUMMY" }
                 }, 'Foo' ),
          bless( do{\(my $o = \'fu\'z')}, 'Fuz' )
        ];

2007년 5월 9일 수요일

Upload Files to a Web Server - Simplest Example

흠 이건 처음보는 모듈인데?
아 답답해서 혼 났네
chilkat 이라 CPAN가서 찾아봐야겠네

cpan에 없는 모듈인데?
흠 이건 모지?



use chilkat; $upload = new chilkat::CkUpload(); # Specify the page (ASP, ASP.NET, Perl, Python, Ruby, CGI, etc) # that will process the HTTP Upload. $upload->put_Hostname("www.freeaspupload.net"); $upload->put_Path("/freeaspupload/testUpload.asp"); # Add one or more files to be uploaded. $upload->AddFileReference("file1","dude.gif"); $upload->AddFileReference("file2","pigs.xml"); $upload->AddFileReference("file3","sample.doc"); # Do the upload. The method returns when the upload # is completed. # This component also includes asynchronous upload capability, # which is demonstrated in another example. $success = $upload->BlockingUpload(); if ($success != 1) { print $upload->lastErrorText() . "\n"; } else { print "Files uploaded!" . "\n"; }

CGI::XMLApplication -- Object Oriented Interface for CGI Script Applications

PERL로 SOAP구현을 공부하다 나온 라이브러리

샘플
use CGI::XMLApplication;

  $script = new CGI::XMLApplication;
  $script->setStylesheetPath( "the/path/to/the/stylesheets" );

  # either this for simple scripts
  $script->run();
  # or if you need more control ...
  $script->run(%context_hash); # or a context object

설명
PERL 프로그래머에게 XML/XSLT를 function으로 만들수 있는 기능 제공한다.
 XML::LibXML/ XML::LibXSLT 의 강력한 기능을 사용할 수 있게 해준다.

코드 레벨의 프로젝트 관리가 가능하도록 해준다네? 어떻게 해준다는거지?
웹 어플리케이션을 여러개의 간단한 파트로 나눌 수 있게 해준다라..대부분의 코드들을 심플한 상태로 둘 수 있고 XMLApplication이 이들을 안정적으로 유지시켜 준다.

이 모듈을 기존의 CGI모듈을 확장해 준다. 물론 모든 기존의 CGI모듈을 여전히 사용이 가능하다. ..좋구만...CGI모듈의 확장판이었구나. 그래서 SOAP에서 사용됐던것 같음

흠 결과물의 layout을 읽기 좋게 만들어 주는 효과도 있다네.
그래서 setStylesheetPath가 있나 보네.

flow도 있군...참조 http://search.cpan.org/~phish/CGI-XMLApplication-1.1.3/XMLApplication.pm

어떻게 Event를 catch하는가?

클라이언트
    <!-- SOME HTML CODE -->
    <input type="submit" name="dummy" value="whatever" />
    <!-- SOME MORE HTML :) -->


어플리케이션
 # Application Module
package myApp;

use CGI::XMLApplication;
@ISA = qw(CGI::XMLApplication);

sub registerEvents { qw( dummy ); } # list of event names

# ...

sub event_dummy {
     my ( $self, $context ) = @_;

     # your event code goes here

     return 0;
}

cgi 스크립트들은 submit버튼을 통해 event가 발새되고 한다.
많은경우 쿼리 스트링을 통해 event를 발생시키기 쉽지 않다, 이런경우 XMLApplication은 event_init() 를 사용해 스페셜 event를 전송 할 수 있다(예를들면 application error와 같은), 이 작업은 sendEvent() function을 사용해 구현이 가능하다. 하지만 반듯이 regist된 function만을 사용할 수 있다.

method registerEvents
method run

Event System

XMLApplication은 두가지 부분으로 구성되어 있다. 1) 서버로 부터 스크립트 실행하는 부분 2) 어플리케이션 모듈이 스크립트로 부터 불려져 로드되는 부분

CGI::XMLApplication 두가지 타입의 이벤트 핸들러가 있다.  아 띠...모뇽~
implicit events
registerEvents를 사용해 이름이나 필요치 않은 이벤트 들을 정의?

Common to all applications and explicit events
차이가 뭐지?

package myApp;
  use CGI::XMLApplication;
  @ISA = qw(CGI::XMLApplication);

  sub registerEvents { qw( missing ... ) ; }

  # event_init is an implicit event
  sub event_init {
     my ( $self, $context ) = @_;
     if ( not ( defined $self->param( $paraname ) && length $self->param( $paramname ) ) ){
        # the parameter is not correctly filled
        $self->sendEvent( 'missing' );
     }
     else {

    ... some more initialization ...

     }
     return 0;
  }

  ... more code ...

  # event_missing is an explicit event.
  sub event_missing {
     my ( $self , $context ) = @_;

     ... your error handling code goes ...

     return -4 if $panic;  # just for illustration
     return 0;
  }

솔직히 &missing하는거랑 차이가 뭔지 모르겠네..쓰바..

Implicit Events

the XML Serialization











2007년 5월 8일 화요일

곰곰히 생각해 봤는데 역시 대세는 flex얌

flex관련 모임을 하나 참석을 하던지 해야겠음..
잘 할 수 있을까? ㅎㅎㅎ

사람들도 만나고 공부도 하고 해야지...
flash로 카운터나 이런걸 만들어 보긴 했지만 혼자 하려니 한계가 있었던것 같다.

naver flex 마이나 7기에 들어가려고 하는데 너무 나이가 많은거 아닐까? ㅎㅎㅎ

flash와 action script라 왠지 재미있을 것 같네 어떤 프로젝트를 먼저 해보면 좋을까?

1. input output
2. http 로긴 프로젝트
3. data parsing

4. Open API 생성과 flex연동

2/3 두 개의 파일 비교 webservice , cgi 파일

#!/usr/bin/perl -w
use strict;
use SOAP::Lite;
 ...
my $soap = SOAP::Lite
  -> uri('http://my.host.tld/WebSemDiff')
  -> proxy('http://my.host.tld/cgi-bin/semdiff.cgi')
  -> on_fault( \&fatal_error );

my $result = $soap->compare( $file1, $file2 )->result;

print "Comparing $f1 and $f2...\n";

if ( defined $result and scalar( @{$result} ) == 0 ) {
    print "Files are semantically identical\n";
    exit;
}

foreach my $diff ( @{$result} ) {
print $diff->{context} . ' ' .
      $diff->{startline} . ' - '  .
      $diff->{endline} . ' '  .
      $diff->{message} .
      "\n";

}
#================
#


# auto dispatch를 사용한 version
#

use SOAP::Lite +autodispatch => uri => 'http://my.host.tld/WebSemDiff', proxy =>'http://my.host.tld/cgi-bin/semdiff.cgi', on_fault => \&fatal_error ; my $result = SOAP->compare( $file1, $file2 ); print "Comparing $f1 and $f2...\n";

1/3 두 개의 파일 비교 web service

# 모듈 작성 부분
package WebSemDiff;

use strict;
use CGI::XMLApplication;
use XML::SemanticDiff;
use XML::LibXML::SAX::Builder;
use XML::Generator::PerlData;

use vars qw( @ISA );
@ISA = qw( CGI::XMLApplication );


# 메서드 추가 부분
sub selectStylesheet {
    my ( $self, $context ) = @_;
    my $style = $context->{style} || 'default';
    my $style_path = '/www/site/stylesheets/';
    return $style_path . 'semdiff_' . $style . '.xsl';
}

# XML::LibXML::Document object의 확장

sub getDOM {
    my ( $self, $context ) = @_;
    return $context->{domtree};
}

#
sub getXSLParameter {
    my $self = shift;
    return $self->Vars;
}


# event registration and event callbacks
sub registerEvents {
    return qw( semdiff_result );
}

sub event_semdiff_result {
    my ( $self, $context ) = @_;
    my ( $file1, $file2, $error );
    my $fh1 = $self->upload('file1');
    my $fh2 = $self->upload('file2');
    $context->{style} = 'result';


    if ( defined( $fh1 ) and defined( $fh2 ) ) {
        local $/ = undef;
        $file1 = <$fh1>
        $file2 = <$fh2>;

    eval {
            $context->{domtree} = $self->compare_as_dom( $file1, $file2 );
        };

        if ( $@ ) {
            $error = $@;
        }
    }
    else {
        $error = 'You must select two XML files to compare and wait for them to finish uploading';
    }

    if ( $error ) {
        $context->{domtree} =  $self->dom_from_data( {  error => $error } );
    }
   

    unless ( defined( $context->{domtree} )) {
        my $msg = "Files are semantically identical.";
        $context->{domtree} =  $self->dom_from_data( {  message => $msg } );
    }
}



sub compare {
    my $self = shift;
    my ( $xmlstring1, $xmlstring2 ) = @_;
    my $diff = XML::SemanticDiff->new( keeplinenums => 1 );
    my @results = $diff->compare( $xmlstring1, $xmlstring2 );
    return \@results;
}

2007년 5월 7일 월요일

Array passing simple example

    #======================================
   #  auto dispatching client - 2007.5.3 - jkryu
   #  이 것은 클라이언트
   print "==============\n";
   print "auto dispatching \n";

   use SOAP::Lite +autodispatch =>
     uri => 'http://host/Demo',
     proxy => 'http://host/service/service.cgi';

   # array passing simple case
   # 2007.5.7
   @a = ("aa", "bb", "cc", "dd", "ee");

   my $obj = Demo->new(90);
   $result = $obj->hi( @a );
   print $result;

   #======================================
   #  auto dispatching server - 2007.5.3 - jkryu
   #  서버
   #!/usr/bin/perl -w

  use SOAP::Transport::HTTP;
  use Demo;

  SOAP::Transport::HTTP::CGI
    -> dispatch_to('Demo')
    -> handle;

    #======================================
   #  auto dispatching server - 2007.5.3 - jkryu
   #
   package Demo;

  sub hi {
        my ($class, @a) = @_;
        my $result;

        for ( $i=0; $i <= $#a; $i++ )
        {
                $result .= "hi " . $a[$i] . "\n";
        }

        # return "HI $a \n";
        return $result;
  }

  #===============================
  # object Acess
  #
  sub new {
      my $self = shift;
      my $class = ref($self) || $self;
      bless {_temperature => shift} => $class;
  }  

-----------  결과 ---------------
$ perl client.pl  
hi 123
==============
auto dispatching
hi aa
hi bb
hi cc
hi dd
hi ee

Handling Lists, Structure, Objects ...

'Treat the result of SOAP call as variable of specified type' 으로 처리 함으로써 다양한 type의 결과물을 passing할 수 있다.

Client
#!perl -w
  use SOAP::Lite;
  my $result = SOAP::Lite
        -> uri('urn:xmethodsServicesManager')
        -> proxy('http://www.xmethods.net/soap/servlet/rpcrouter')
        -> getAllSOAPServices();
  if ($result->fault) {
    print $result->faultcode, " ", $result->faultstring, "\n";
  } else {
    # reference to array of structs is returned
    my @listings = @{$result->result};
    # @listings is the array of structs
    foreach my $listing (@listings) {
      print "-----------------------------------------\n";
      # print description for every listing
      foreach my $key (keys %{$listing}) {
        print $key, ": ", $listing->{$key} || '', "\n";
      }        
    }
  }


# 아 놔~~ 서버가 없쟎아. 썩을

2007년 5월 3일 목요일

스파이더맨 후기..

아 뭐야~~
일단 스파이더맨은 좋다 치더라도 강남역 시너스지 정말 너무한거 아녀?
그 허접한 엘리베이터하며 늘 탈 수가 없네..그넘은 맨날 만땅 타고 내려갔다가 다시 올라가야 하나? 여하튼 극장안은 만원이었고 30분쯤 지나자 슬슬 더워지기 시작했고, 목도 타기 시작했고..

영화는 유치하고, 나쁜넘이 갑자기 착한놈이 되고, 메리제인은 이유없이 헤어지고..모뇽.
외계 생명채가 막 뛰어다니고, 이넘은 기생하는 생물인데 사람한테 기생을 하는건지 옷에게 기생을 하는건지..다만 다소 현란한 그래픽? 이런게 볼 만 했는데 솔직히 만화 반 영화반~

개인적으론 거미 친구가 멋이 있던데


얘 말이여....

결론적으로 강남역 씨너스지가서 영화보지 말아야지...정말 쪄 죽음 벌써 여러번째임 ㅋㅋㅋ

SOAP DATA TYPE

PERL은 type이 없지만 SOAP의 경우 타입이 존재한다.

my $var = SOAP::Data->type(string => 123);

my $var = SOAP::Data->type('string')->name(myvar => 123);
my $var = SOAP::Data->type('string')->name('myvar')->value(123);

You may always get/set the value of this variable with the value() method:

  $var->value(321);            # set new value
  my $realvalue = $var->value; # store it in variable


좋구만..허나 내가 알고 싶은건 data set을 전달하는 방법인데?

왜 없지? 흠흠..

SOAP Server Module Dispatch

case 1. Static external
SOAP::Transport::HTTP::CGI  
    -> dispatch_to('Demo')    
    -> handle;

설명 : Demo는 @INC내에 있어야 하며 해당 서버는 Demo 클래스만을 dispatch할 수 있다.

Case 2. Dynamic

      SOAP::Transport::HTTP::CGI
    -> dispatch_to('/home/soaplite/modules')
    -> handle;

설명: 모듈이 저장된 디렉터리를 설정함으로써 모듈 디렉터리 내부의 클래스들을 사용할 수 있다.

Case 3. Mixed
     SOAP::Transport::HTTP::CGI
     -> dispatch_to('/home/soaplite/modules', 'Demo', 'Demo1', 'Demo2')
     -> handle;
설명: 디렉터리와 특정 모듈을 모두 사용할 수 있다.


2007년 5월 2일 수요일

브랜드 유

개인을 재 창조 하라.
울타리 밖의 세상을 두려워 하지 말아야 한다.
세상의 법칙은 어디나 같다.
. 흥이 나야 한다.
. 충격적이어야 한다
. 완전히 달라야 한다.

평생 직장은 없다.
대기업도 안정적인 직장은 아니다.
앞으로는 평균 6개 이상의 직장과 2~3개의 직업을 갖는 시대가 올 것이다.
=> 돈을 여러군데로 부터 벌어야 한다. 다각화 및 분산화가 필요한 시기이다.
독립계약자의 삶을 살아라.

항상 위의 법칙들을 생각하고 실천하기 위해 노력해야 한다. 평범하고 흥이나지 않는다면 죽은것이다. 죽고싶냐?

개인의 능력은 프로젝트의 추진력 여부에 달려 있다고 해도 과언이 아니다.
혼자 하려니 힘드냐? 둘이 하는것 보다 혼자 하는게 더 효율적일 수 있다.

이 칸막이에서 쫒겨나면 무엇을 해야 할까? 너무 무섭다...다들 무섭다. 그건 니가 온실안 화초라서 그래..누가 내 치즈를 옮겼는가? 알지? 항상 귀를 쫑긋 세우고 뛰어나갈 준비를 해야 해...지금 치즈는 얼마나 있지? 난 다른 치즈를 향해 뛰고 있는가?

톰 피터스는 처음부터 계속 얘기 한다.
평범한 성공보다 큰 실패가 훨씬 나은 것이다 라고..

- 당신은 당신 삶의 이야기꾼이며 당신만이 전설을 창조 할 수 있다. (소설가 이사발 아옌데)
- 나는 평범함보다 나쁜것은 없다고 생각한다(영화 아메리칸 뷰티에서 미라수바리)
- 급변하는 시대에는 자아와 정체성에 관해 다시 생각해야 한다

- 나는 "나"라고 불리는 회사를 위해 일한다. - 멋지다....jk
- 남을 탓하지 마라!! 아무것도 기대하지 마라!! 뭔가를 하라 - 뉴욕제즈의 코치 빌 파셀스

브랜드유가 아니면 죽음이다. - 개인이 사회에 대해 내세울 무언가가 없다면 죽는거다.
난 주식회사 나의 CEO다.
튀지 않으면 죽음뿐..

나를 브랜드로 만들기 위해 점수를 매기는 것도 좋은 방법인것 같다.
. 지금 수행하는 프로젝트에 점수를 매긴다.
  나는 WMS, 자동 발주, Open Api, 이미지 서비스 프로젝트를 수행한다.
. 새로 배우고 있는 것들에 대해 점수를 매긴다.
  나는 web service, oop perl 에 대해 공부 중이다.
. 외부의 인정을 받기위한 전략?
  생각해 본적 없는데..
. 내 전화번호부에 몇몇의 사람이 추가 되었고 관리되고 있는가?
. 내 이력서는 update되고 있는가?
  이력서가 있던가? 흠흠....문제가 있군.

브랜드 유 생존의 도구 상자
모험가가 되어야 한다.
최고가 되기 위해 끊임없이 노력해야 한다. (지금 알고 있는 모든것을 open하는 수밖에 없지)
마케팅을 터득? 흠...무엇이 마케팅이지?
  난 마케팅은 기본적으로 고객과 지속적이고 긍정적인 관계를 유지하는 것 이라고 정의 하겠음

익현이 혜승이

익현이랑 혜승이

[SOAP] 간단한 Server / Client 예제 작성 중

URL: http://guide.soaplite.com/#item_uri

Web Service에 대한 대략적 study와 병행해서 실제 perl의 SOAP::Lite를 사용하여  Web Service를 작성해 보고자 한다.

#============================
# business module
# date: 2007.5.2
#
package Demo;

  sub hi {
        my ($class, $a) = @_;

        return "HI $a \n";
  }

  sub bye {
    return "goodbye, cruel world";
  }

  #===============================
  # object Acess
  #
  sub new {
      my $self = shift;
      my $class = ref($self) || $self;
      bless {_temperature => shift} => $class;
  }
  sub as_fahrenheit {
      return shift->{_temperature};
  }
  sub as_celsius {
      return 5/9*(shift->{_temperature}-32);
  }
1;

#================================
# service.cgi
# date: 2007.5.2
#!/usr/bin/perl -w

  use SOAP::Transport::HTTP;
  use Demo;

  SOAP::Transport::HTTP::CGI
    -> dispatch_to('Demo')
    -> handle;


#================================
# client.pl
# date: 2007.5.2
#!perl -w
  use SOAP::Lite;
    # -> uri('http://www.ezadmin.co.kr')
  # uri는 class의 위치?
  print SOAP::Lite
    -> uri('http://[domain]/Demo')
    -> proxy('http://[domain]/service.cgi')
    -> hi( "123" )
    -> result;


결과
$ perl client.pl
HI 123

쩝 이 단순한 결과를 얻기 위해 하루종일 이렇게 저렇게 해보다니..ㅠ.ㅠ 내일은 autodispatch 에 대해서 작업할 예정

2007년 5월 1일 화요일

익현이를 안동에 데려다 주고왔다.

하얀 카우보이 모자를 쓰고 세발 자전거를 타며 트렁크에 굴러다니던 물총을 들고 "개미~~" 를 연발하며 물총으로 개미를 쏘고.
갈아놓은 밭이 푹신한게 좋은듯 노란 장화를 신고 연신 뛰어 다니고.
나비를 잡으러 이러저리 다니기도 하며, 작은 돌맹이를 주워서 논에 하나씩 던지기도 하고.

결국 그리 놀더니 피곤한지 곯아 떨어지고.

잠든 익현이에게 뽀뽀해주고 서울로 올라오는 길이 왜 그리 마음이 편치 않은지.
흙을 밣으면서 지내는게 나쁘지는 않은데, 왠지 험한데다 애기를 놓고 가는 듯 한 기분이라 눈물이 앞을 가리네.

지랭은 떠나기에 앞서 자고있는 익현이를 안고 눈물을 흘려 장모님 및 이모님의 눈시울을 붉히게 만들고, 올라오는 차 안에서도 한 참을 말이 없었고.

아 ~ 익현이 혜승이가 있어서 참 다행이다.

서울에 오니 혜승이가 보조 바퀴 달린 자전거를 할머니가 사주셨다고 보여 줬는데 정말이지 딱 혜승이 스탈..핑크색에 흙받이는 천사의 날개처럼 생긴 것이 아주 좋아 보였다.
녀석...동생은 안동가서 흙밣고 노는데 자기는 서울랜드 가서 놀이기구 탔다고 좋아 하다니..
어찌 이리 극과 극인지 ㅎㅎ

사랑한다 애기들아.