나 자신을 다스리는 자가 세상을 다스린다.

클로즈업 홍콩

2010.09.09 09:05 : 분류없음
클로즈업 홍콩클로즈업 홍콩 - 8점
손미경 외 지음/에디터
홍콩 자유여행 이책 한권이면 됩니다. 홍콩은 교통시설이 잘되어 있어서 가이드 없이 이 책 학권으로 충분할듯.. 다만 마카오 파트가 좀 약하네요.
http://trypsr.tistory.com2010-09-09T00:05:260.3810
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by trypsr Trackback 0 Comment 0

jQuery

2010.07.28 16:26 : 일상다반사/2010 책
jQuery 1.3 작고 강력한 자바스크립트 라이브러리jQuery 1.3 작고 강력한 자바스크립트 라이브러리 - 4점
조나단 채퍼 외 지음, 이승준 옮김/위키북스
jQuery

조금만 익히면 정말 푹 빠져버릴만큼 훌륭한 프레임워크(?)

jQuery 학습은 추천하지만

이 책은 그다지...

소스 설명 위주로 되어 있는데 내용이 중구난방인듯 합니다.
http://trypsr.tistory.com2010-07-28T07:26:420.3410
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'일상다반사 > 2010 책' 카테고리의 다른 글

jQuery  (0) 2010.07.28
Practical Java  (0) 2010.06.17
덕혜옹주  (0) 2010.04.26
마당을 나온 암닭  (0) 2010.04.12
Posted by trypsr Trackback 0 Comment 0
Practical JavaPractical Java - 4점
Peter Haggar 지음, 김승권.김상훈 외 옮김/21세기사
원본은 모르겠으나

번역서로는 정말 아닌 듯..
http://trypsr.tistory.com2010-06-17T14:01:560.3410
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'일상다반사 > 2010 책' 카테고리의 다른 글

jQuery  (0) 2010.07.28
Practical Java  (0) 2010.06.17
덕혜옹주  (0) 2010.04.26
마당을 나온 암닭  (0) 2010.04.12
Posted by trypsr Trackback 0 Comment 0
덕혜옹주덕혜옹주 - 8점
권비영 지음/다산책방
조선의 마지막 황녀로써의 삶은
노비보다 못했다.
http://trypsr.tistory.com2010-04-26T10:23:030.3810
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'일상다반사 > 2010 책' 카테고리의 다른 글

Practical Java  (0) 2010.06.17
덕혜옹주  (0) 2010.04.26
마당을 나온 암닭  (0) 2010.04.12
삼성도 넘볼 수 없는 작은 회사의 브랜드 파워  (0) 2010.04.12
Posted by trypsr Trackback 0 Comment 0
마당을 나온 암탉마당을 나온 암탉 - 10점
황선미 지음, 김환영 그림/사계절출판사
아동용 동화이지만 어른이 봐도 충분한 내용
 지금 보니 성인용으로도 출간이 되어 있네요
 꿈과 희망이 어떠한 역활을 하는지 다시 생각하게 하는 책
http://trypsr.tistory.com2010-04-12T09:33:470.31010
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'일상다반사 > 2010 책' 카테고리의 다른 글

덕혜옹주  (0) 2010.04.26
마당을 나온 암닭  (0) 2010.04.12
삼성도 넘볼 수 없는 작은 회사의 브랜드 파워  (0) 2010.04.12
로스트 심벌  (0) 2010.04.12
Posted by trypsr Trackback 0 Comment 0
삼성도 넘볼 수 없는 작은 회사의 브랜드 파워삼성도 넘볼 수 없는 작은 회사의 브랜드 파워 - 8점
무라오 류스케.하마구치 다카노리 지음, 이동희 옮김/전나무숲
화살표가 안으로 오는 회사~
고객이 팬이 되어 찾아오고, 인재가 들어오는 회사
그것이 브랜드를 만들어가는 것이다.
http://trypsr.tistory.com2010-04-12T09:30:130.3810
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'일상다반사 > 2010 책' 카테고리의 다른 글

마당을 나온 암닭  (0) 2010.04.12
삼성도 넘볼 수 없는 작은 회사의 브랜드 파워  (0) 2010.04.12
로스트 심벌  (0) 2010.04.12
시크릿 두 번째 이야기  (0) 2010.04.12
Posted by trypsr Trackback 1 Comment 0
로스트 심벌 1로스트 심벌 1 - 6점
댄 브라운 지음, 안종설 옮김/문학수첩
다빈치 코드의 저자 댄 브라운의 최신작!
기대가 컸던 만큼 실망도 큰 법?
이번 작품은 빠져들기에 너무 어려웠다~
http://trypsr.tistory.com2010-04-12T09:26:310.3610
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'일상다반사 > 2010 책' 카테고리의 다른 글

마당을 나온 암닭  (0) 2010.04.12
삼성도 넘볼 수 없는 작은 회사의 브랜드 파워  (0) 2010.04.12
로스트 심벌  (0) 2010.04.12
시크릿 두 번째 이야기  (0) 2010.04.12
Posted by trypsr Trackback 0 Comment 0
시크릿 두 번째 이야기시크릿 두 번째 이야기 - 6점
폴 해링턴 지음, 장정운 옮김/살림
믿음의 힘, 긍정의 힘, 희망을 갖게하는 책이다.
참 재미있게 봤던 시크릿의 2번째 이야기
하지만 1편 보다는 조금 떨어지는 듯...
http://trypsr.tistory.com2010-04-12T09:21:420.3610
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'일상다반사 > 2010 책' 카테고리의 다른 글

마당을 나온 암닭  (0) 2010.04.12
삼성도 넘볼 수 없는 작은 회사의 브랜드 파워  (0) 2010.04.12
로스트 심벌  (0) 2010.04.12
시크릿 두 번째 이야기  (0) 2010.04.12
Posted by trypsr Trackback 0 Comment 0
1. Extended VS Presentation
license : EPL
homepage : http://andrei.gmxhome.de/skins/index.html
url update manager : http://andrei.gmxhome.de/eclipse/
※ 마우스 wheel click 으로 창닫기 기능이 편리하여 잘 사용하고 있음.

2. AnyEdit tools
license : BSD License
homepage : http://andrei.gmxhome.de/anyedit/index.html
url update manager : http://andrei.gmxhome.de/eclipse/

3. Eclipse Web Tools Platform
license:   CPL1.0
homepage:   http://www.eclipse.org/webtools/index.html
url update manager:  http://download.eclipse.org/webtools/updates  (그냥 callisto 사용 또는 all in one 버전 다운로드)

4. myEclipse Enterprise Workbench (상용)
license:       Commercial/Free trial
homepage:   http://www.myeclipseide.com
※ 상용이어서 Web Tools 를 사용하고 있지만 J2EE 쓰기에는 myEclipse 가 제일 나은 듯(개인적인 생각)

5. BEA Workshop JSP Editor
license:   Free
homepage:   http://www.m7.com/epiinfo.do
※ 주의사항 : Workshop 설치 전에 WTP 의 server 를 이미 설정 했을 경우 충돌. server 지우고 다시 생성하면 문제는 없는 듯

6. Log4E (상용)
license:       Free and commercial versions
homepage:       http://log4e.jayefem.de
url update manager:   http://log4e.jayefem.de/update

7. Properties Editor
license : GPL
homepage : http://propedit.sourceforge.jp/index_en.html
url update manager : http://propedit.sourceforge.jp/eclipse/updates/

8. implementors
license : CPL1.0
homepage : http://eclipse-tools.sourceforge.net/implementors
url update manager : http://eclipse-tools.sourceforge.net/updates/
※ interface 를 많이 사용 할 경우에 굉장히 유용한 plug-in. implementation class 로의 jump 가 가능하게 해주는 plug-in

9. QuantumDB
license : Common Public License
homepage : http://quantum.sourceforge.net/index.html
url update manager : http://quantum.sourceforge.net/update-site

10. PDT (PHP Development Tools)
license : Eclipse Public License
homepage : http://www.eclipse.org/pdt/index.php
url update manager : http://download.eclipse.org/tools/pdt/updates/

11. Eclipse Status Monitor
license : Creative Commons Attribution v3.0
homepage : http://www.kyrsoft.com
url update manager : http://www.kyrsoft.com/updates

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by trypsr Trackback 0 Comment 0
경력 만 6년
3번의 정규직과 1번의 프리
솔루션, SI, SM, 기술지원, 전산관리
관공서, 이통사, 금융회사

어떻게 보면 참 많은 것을 경험한 것 처럼 보이지만 한편으로는 떠돌이에 부적응자였던거 같다.

이번에 입사한 회사는 보험회사의 SM 을 주로 하는 회사이다

약 2주간 파악한 회사 분위기는 기존에 근무했던 회사와는 완전 다르다..

고등학교 같은 복장 규정(뺏지 착용까지..ㅠ.ㅠ) 및 단속(임원분들한테 걸리면 혼나요.ㅠ.ㅠ)

보수적인 임원분들과 갑 회사의 임직원들..

인사고과에 연연하고 기술력 보다는 업무가 우선인 회사

그 동안 '이런 회사를 어떻게 다닐까' 라고 생각했던 나에겐 정말 놀라운 세상이다.

평생 코딩만 하면서 살고 싶었는데......
개발자는 마음이 편하고 개발에만 집중하도록 해줘야 한다고 생각했었는데....
흑흑..



그렇다고 당장 때려치우고 싶은 건 아니다.

꼭 개발 스킬만 뛰어나야 좋은 개발자가 아닐 것이다.

업무 능력과 관리 능력도 중요할 것 같아서 최대한 빨리 적응하려고 노력중....

당분간은 개발 스킬은 취미(?)로 키워 나가야 할 듯 싶다.
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by trypsr Trackback 0 Comment 0
Talk about Software with hani 블로그에서 Release it! 출판기념 이벤트를 하네요

요즘 출판 기념 이벤트가 관례가 된 듯.ㅋㅋ

가끔 보고싶은 책이 이렇게 이벤트를 하면 바로 참여~~
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by trypsr Trackback 0 Comment 1
번역서 제목이 [똑똑하고 100배 일 잘하는 개발자 모시기] 라고 하네요.

볼 책은 많은데 몸이 게으르니...ㅠ.ㅠ

요즘 트랙백 이벤트 재미 붙여서... ^^
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by trypsr Trackback 0 Comment 0
김창준 님의 블로그에서 도요타식 소프트웨어 개발 글을 보고 린 소프트웨어 개발에 관심을 갖고 있던 중...

린 소프트웨어 개발의 적용 출간 이벤트를 하는 것을 알게되었네요..

망설임 없이 이벤트 참여~~~

감사히 보겠습니다. ^^ (Secret 식 사고 ^^)

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by trypsr Trackback 0 Comment 0
어제 서점에 갈 일이 있어서 살짝 들여다 보았는데..신간이라 따끈따끈.. ㅋ

한국어판에는 특별부록 더 있더라구요.

윤석찬님과 강규영님이 한 part 씩 쓰신거 같던데..

잠깐 들여다 봤지만 실용 예제 위주로 설명이 되어 있어서 쉽게 읽을 수 있을 것 같았습니다..

하나 구입할까 했는데 이벤트를 하신다니.. 우선 참여~~^^
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by trypsr Trackback 0 Comment 0
맨날 까먹는다..
이제 잊지말자.

프로젝트의 properties > Info > New text file line delimiter 에서 Unix 로 설정
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by trypsr Trackback 0 Comment 0
그 동안 iBATIS 를 Oracle 과 mySQL 에서만 사용해 오다가 JDBC를 사용하며 RDBMS이면 거의 다 지원한다고 하는 iBATIS를 믿고 Altibase 와 연동을 해보았다.

connection pool 로는 DBCP 를 사용하였다.

그런데 이 Altibase 라는 놈이 기존 DB 들과는 다르게 Encoding 을 connection 맺을 때 properties 로 받고 있었다.

30 분 정도 실랑이 후 지인의 도움으로 해결 방법을 겨우 찾았다.


드라이버에 종속적인 properties 를 사용하기 위해서는 기존의 접두사 방식의 설정을 사용해서는 안된다.

bean 스타일의 셋팅을 사용해야 한다.
드라이버에 종속적인 properties 를 명시하기 위해서는 Driver 라는 새로운 접두사를 사용해서 하면 된다.

Driver.properitiesName = propertiesValue

그러나 기존의 접두사 방식과 Driver 접두사 를 같이 사용하면 적용이 안된다는 사실...(이건 내부적으로 어떻게 그리고 왜 구분 하는지? 소스 한번 봐? 귀찮다. -.-;)
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by trypsr Trackback 0 Comment 0
테스트 없이 눈으로만 코딩할 때 가장 틀리기 쉬운 부분이 call by value 와 call by refence 를 정확히 이해하지 못할 때 생기는 오류가 아닐까 싶다.

기본형과 객체가 있는데
기본형은 call by value 이고 객체는 call by refence 라는 것은 대부분의 java 개발자들이 알고 있을꺼라 생각한다.

그 예로 swap 함수를 가장 많이 설명하는데..

예제 1)

class Test {
    private static void swap(int a, int b) {
        int temp = a;
        a = b;
        b = temp;
    }

    public static void main(String args[]) {
        int a = 1;
        int b = 2;

        System.out.println("a => " + a);
        System.out.println("b => " + b);

        swap(a, b);

        System.out.println("------- swap 후 -------");

        System.out.println("a => " + a);
        System.out.println("b => " + b);
    }
}

예제 1 의 경우 원하던 결과가 아닌 것을 바로 알아 낼 수 있을 것이다.
swap 메소드에 넘기는 것은 reference 가 아닌 value 이기 때문에...
쉽다. 넘어가자.

다음 예제 2 를 보자
예제 2)

class Test {
    private static void swap(Integer a, Integer b) {
        Integer temp = a;
        a = b;
        b = temp;
    }

    public static void main(String args[]) {
        Integer a = new Integer(1);
        Integer b = new Integer(2);

        System.out.println("a => " + a.intValue());
        System.out.println("b => " + b.intValue());

        swap(a, b);

        System.out.println("------- swap 후 -------");

        System.out.println("a => " + a.intValue());
        System.out.println("b => " + b.intValue());
    }
}

예제 2 의 경우 Integer 는 Object 이다. Object 는 call by reference 다.
따라서 위의 예제는 원하는 결과를 가져올 것이다.
그러나 실행을 하면 예제 1과 전혀 다르지 않다는 것을 알 수 있다.

왜? 객체는 call by reference 라며 사기친거야?

결론부터 말하면 객체는 call by reference 맞다

그러나 해당 객체를 보는 새로운 reference 를 참조해서 넘기는 것이다.

따라서 동일한 객체를 가르키고 있지만
main 에서의 reference 값과 swap 함수에서의 reference 값은 다르다.

따라서 위의 예제의 경우 원하는 결과가 나오지 않는다.

그렇다면 어떻게 해야 해?

예제 3 을 보자.

예제 3)

class Test {
    int value;

    Test(int value) {
        this.value = value;
    }

    private static void swap(Test a, Test b) {
        int temp = a.value;
        a.value = b.value;
        b.value = temp;
    }

    public static void main(String args[]) {
        Test a = new Test(1);
        Test b = new Test(2);

        System.out.println("a => " + a.value);
        System.out.println("b => " + b.value);

        swap(a, b);

        System.out.println("------- swap 후 -------");

        System.out.println("a => " + a.value);
        System.out.println("b => " + b.value);
    }
}

예제 2와 같이 객체의 reference 를 넘긴다.
reference 를 직접 변경하는 게 아니라.
reference 가 참조하는 객체의 value 를 변경하고 있다.
따라서 같은 객체를 보고 있는 main 에서도 값이 바뀌는 것을 알 수 있다.

call by reference

해당 객체의 주소값을 직접 넘기는 게 아닌 객체를 보는 또 다른 주소값을 만들어서 넘기다는 사실을 잊지 말자~
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
TAGjava
Posted by trypsr Trackback 0 Comment 2

나를 정말 방황하게 만드는 단어들
- 웹2.0, 롱테일, 개인화 서비스

지금의 나를 포기하고 새로운 나를 위해 준비 과정으로 가야하는데....

너무 두렵다..ㅠ.ㅠ
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by trypsr Trackback 0 Comment 0
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

import org.apache.commons.lang.StringUtils;

public class ZipUtils {

    private static final int COMPRESSION_LEVEL = 8;

    private static final int BUFFER_SIZE = 1024 * 2;

    /**
     * 지정된 폴더를 Zip 파일로 압축한다.
     * @param sourcePath - 압축 대상 디렉토리
     * @param output - 저장 zip 파일 이름
     * @throws Exception
     */
    public static void zip(String sourcePath, String output) throws Exception {

        // 압축 대상(sourcePath)이 디렉토리나 파일이 아니면 리턴한다.
        File sourceFile = new File(sourcePath);
        if (!sourceFile.isFile() && !sourceFile.isDirectory()) {
            throw new Exception("압축 대상의 파일을 찾을 수가 없습니다.");
        }

        // output 의 확장자가 zip이 아니면 리턴한다.
        if (!(StringUtils.substringAfterLast(output, ".")).equalsIgnoreCase("zip")) {
            throw new Exception("압축 후 저장 파일명의 확장자를 확인하세요");
        }

        FileOutputStream fos = null;
        BufferedOutputStream bos = null;
        ZipOutputStream zos = null;

        try {
            fos = new FileOutputStream(output); // FileOutputStream
            bos = new BufferedOutputStream(fos); // BufferedStream
            zos = new ZipOutputStream(bos); // ZipOutputStream
            zos.setLevel(COMPRESSION_LEVEL); // 압축 레벨 - 최대 압축률은 9, 디폴트 8
            zipEntry(sourceFile, sourcePath, zos); // Zip 파일 생성
            zos.finish(); // ZipOutputStream finish
        } finally {
            if (zos != null) {
                zos.close();
            }
            if (bos != null) {
                bos.close();
            }
            if (fos != null) {
                fos.close();
            }
        }
    }

    /**
     * 압축
     * @param sourceFile
     * @param sourcePath
     * @param zos
     * @throws Exception
     */
    private static void zipEntry(File sourceFile, String sourcePath, ZipOutputStream zos) throws Exception {
        // sourceFile 이 디렉토리인 경우 하위 파일 리스트 가져와 재귀호출
        if (sourceFile.isDirectory()) {
            if (sourceFile.getName().equalsIgnoreCase(".metadata")) { // .metadata 디렉토리 return
                return;
            }
            File[] fileArray = sourceFile.listFiles(); // sourceFile 의 하위 파일 리스트
            for (int i = 0; i < fileArray.length; i++) {
                zipEntry(fileArray[i], sourcePath, zos); // 재귀 호출
            }
        } else { // sourcehFile 이 디렉토리가 아닌 경우
            BufferedInputStream bis = null;
            try {
                String sFilePath = sourceFile.getPath();
                String zipEntryName = sFilePath.substring(sourcePath.length() + 1, sFilePath.length());

                bis = new BufferedInputStream(new FileInputStream(sourceFile));
                ZipEntry zentry = new ZipEntry(zipEntryName);
                zentry.setTime(sourceFile.lastModified());
                zos.putNextEntry(zentry);

                byte[] buffer = new byte[BUFFER_SIZE];
                int cnt = 0;
                while ((cnt = bis.read(buffer, 0, BUFFER_SIZE)) != -1) {
                    zos.write(buffer, 0, cnt);
                }
                zos.closeEntry();
            } finally {
                if (bis != null) {
                    bis.close();
                }
            }
        }
    }

    /**
     * Zip 파일의 압축을 푼다.
     *
     * @param zipFile - 압축 풀 Zip 파일
     * @param targetDir - 압축 푼 파일이 들어간 디렉토리
     * @param fileNameToLowerCase - 파일명을 소문자로 바꿀지 여부
     * @throws Exception
     */
    public static void unzip(File zipFile, File targetDir, boolean fileNameToLowerCase) throws Exception {
        FileInputStream fis = null;
        ZipInputStream zis = null;
        ZipEntry zentry = null;

        try {
            fis = new FileInputStream(zipFile); // FileInputStream
            zis = new ZipInputStream(fis); // ZipInputStream

            while ((zentry = zis.getNextEntry()) != null) {
                String fileNameToUnzip = zentry.getName();
                if (fileNameToLowerCase) { // fileName toLowerCase
                    fileNameToUnzip = fileNameToUnzip.toLowerCase();
                }

                File targetFile = new File(targetDir, fileNameToUnzip);

                if (zentry.isDirectory()) {// Directory 인 경우
                    FileUtils.makeDir(targetFile.getAbsolutePath()); // 디렉토리 생성
                } else { // File 인 경우
                    // parent Directory 생성
                    FileUtils.makeDir(targetFile.getParent());
                    unzipEntry(zis, targetFile);
                }
            }
        } finally {
            if (zis != null) {
                zis.close();
            }
            if (fis != null) {
                fis.close();
            }
        }
    }

    /**
     * Zip 파일의 한 개 엔트리의 압축을 푼다.
     *
     * @param zis - Zip Input Stream
     * @param filePath - 압축 풀린 파일의 경로
     * @return
     * @throws Exception
     */
    protected static File unzipEntry(ZipInputStream zis, File targetFile) throws Exception {
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(targetFile);

            byte[] buffer = new byte[BUFFER_SIZE];
            int len = 0;
            while ((len = zis.read(buffer)) != -1) {
                fos.write(buffer, 0, len);
            }
        } finally {
            if (fos != null) {
                fos.close();
            }
        }
        return targetFile;
    }
}

위의 소스는 문제점이 있다.
사실 소스문제라기 보다는 java.util.zip 문제이다.
zip 파일안의 파일명의 인코딩을 UTF-8 로 하기 때문에 압축 대상 파일명에 한글이 있을경우 문제가 생긴다.
만약 압축 대상 파일명에 한글이 포함되어 있다면 jazzlib 를 사용하기 바란다.

jazzlib 는 java.util.zip 과 구조 및 사용법이 똑같으므로 위의 소스에서 ZipEntry, ZipOutputStream 의 import 문만 변경하여 주면 된다.

import net.sf.jazzlib.ZipEntry;
import net.sf.jazzlib.ZipInputStream;
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
TAGjava
Posted by trypsr Trackback 0 Comment 1
최근들어 블로그 글을 보는 재미에 사는데 오늘도 역시 좋은 글들이 많이 올라와 있군요.

어떤 한 분이 구글 애드센스를 참조(?) 하여 미아찾기 배너를 만들었다고 하시네요.


그걸을 보고 또 한 분은 아이디어를 더 하는군요


꼬리에 꼬리를 무는 아이디어들..

그런데 이런 것도 광고비용을 줘야 하나?

여하튼, 돈을 떠나서....

우리 나라의 열정적인 누리꾼들에 의해
미아찾기 배너 달기 운동 이라도 했으면 좋겠네요~~

나도 얼릉 달아봐야지...
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by trypsr Trackback 3 Comment 0


티스토리 툴바