Rath World » 2012 » March

Archive

Archive for March, 2012

에너지

March 3rd, 2012 3 comments

우울해서 무기력해졌다면 모를까, 천진반의 기공포처럼 기력을 정말 다 써서 무기력해진 경우라면 쉬면서 몸조리를 잘 하는 것 외에 별 다른 방법이 없다.

그러나 써야할 기력을 쓰지 못해서 무기력해진 경우도 많다. 주중에 생업에 너무 치여서 주말에 하고 싶은 다른 일을 할 기력이 전혀 남아있지 않다고 속단하지 마시길. 균형을 맞추기 위해서는 많아진 쪽을 줄이는 방법 말고도 적은 쪽을 늘리는 방법도 있다. 시간 끌지 말자.

 

 

Categories: Daily, Life, productivity Tags:

생업에 치이느라 Java 7의 NIO.2에 관심없던 분들을 위한

March 2nd, 2012 2 comments

Java 7 에 java.nio.file 패키지가 들어왔다.

java.io.File은 OS 에서 제공하는 다양한 파일시스템 특성들을 대부분 무시했기 때문에 쉘스크립트에서 $ cp src /path/to/dest 면 끝날 것을 꽤나 긴 코드를 쓰거나 commons-io FileUtils.copyFile 따위를 써야했었는데 이제는 java.nio.file.Files.copy(Path src, Path dest, CopyOption option)으로 작업을 마칠 수 있다. java.nio.file.Files.move의 CopyOption은 자바답지 않게 무려 ATOMIC_MOVE를 지원하는데 이는 Windows OS인 경우 MoveFileEx 콜이고, Linux/Solaris의 경우 rename(2) 콜이라, 동일 파티션 내의 큰 파일을 옮기더라도 광속이다.

Python의 open(‘.vimrc’).readlines() 과 동일한 작업을 하는 Files.readAllLines(Path, Charset) 도 반겨줄만하다.

이전에는 특정 디렉토리 밑의 모든 파일들에 대한 처리를 하기 위해 재귀호출을 하는 수고를 피할 수 없었는데 Files.walkFileTree(Path, FileVisitor<T>)를 통해 아래와 같이 간단히 처리할 수 있다.

import java.nio.file.*;
import java.nio.file.attribute.*;
...
    FileSystem fs = FileSystems.getDefault();
    Files.walkFileTree(fs.getPath("./rust-0.1/"), new SimpleFileVisitor() {
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
            throws IOException {
            System.out.println(file);
            return FileVisitResult.CONTINUE;
        }
    });

마지막으로 언급하지 않을 수 없는 WatchService ! 파일시스템 이벤트들을 받을 수 있다. 예를들어 특정 디렉토리 속에 임의의 파일이 생기고 지워지는 등의 각종 이벤트들 말이다. 리눅스의 경우 inotify_add_watch(2) poll(2) 콜이고, 솔라리스는 <port.h> 속의 각종 port_create, port_associate, port_send 등이며, 윈도우즈는 kernel32.dll의 ReadDirectoryChanges 콜이다. WatchService를 잘 활용한다면 개발환경 품질 향상을 꾀할 수 있다. 상상은 각자 알아서.

NIO.2 소개는 여기까지다.

Categories: Development, productivity Tags: