<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>Mimul&#039;s Developer World</title>
  <link>http://mimul.com:80/pebble/default/</link>
  <description>미물의 개발 세상</description>
  <language>ko</language>
  <copyright>미물</copyright>
  <lastBuildDate>Wed, 27 Aug 2008 13:52:00 GMT</lastBuildDate>
  <generator>Pebble (http://pebble.sourceforge.net)</generator>
  <docs>http://backend.userland.com/rss</docs>
  
  <image>
    <url>http://www.mimul.com/pebble/default/images/hhj.jpg</url>
    <title>Mimul&#039;s Developer World</title>
    <link>http://mimul.com:80/pebble/default/</link>
  </image>
  
  
  <item>
    <title>jdk1.5에서 concurrent library를 사용해서 contention 피하기</title>
    <link>http://mimul.com:80/pebble/default/2008/08/27/1219845120000.html</link>
    
      
        <description>
          Java Concurrency in Practice책에 의하면 jdk1.5의 java.util.concurrent 패키지를 활용하면 동기화에 대한 contention의 부하를 줄일 수 있는 방법들을 제시합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;1. ThreadLocal 사용&lt;/strong&gt;&lt;br /&gt;
아래의 예제처럼 ThreadLocal을 통해 synchronization을 대체할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;import java.text.DateFormat;&lt;br /&gt;import java.text.SimpleDateFormat;&lt;br /&gt;import java.util.Date;&lt;br /&gt;&lt;br /&gt;public class DateUtil&lt;br /&gt;{&lt;br /&gt;    private ThreadLocal&amp;lt;DateFormat&amp;gt; sdf = new ThreadLocal&amp;lt;DateFormat&amp;gt;() {&lt;br /&gt;        protected DateFormat initialValue()&lt;br /&gt;        {&lt;br /&gt;            return new SimpleDateFormat(&amp;quot;yyyyMMdd&#039;T&#039;HH:mm:ss&amp;quot;);&lt;br /&gt;        }&lt;br /&gt;    };&lt;br /&gt;&lt;br /&gt;    public String getCurrentDate()&lt;br /&gt;    {&lt;br /&gt;        return sdf.get().format(new Date());&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args)&lt;br /&gt;    {&lt;br /&gt;        DateUtil du = new DateUtil();&lt;br /&gt;        System.out.println(du.getCurrentDate());&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;
&lt;br /&gt;
initialValue를 오버라이드를 통해 최초에 생성자가 호출 될 경우 해당 변수가 초기화되어 사용이 가능해집니다.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;2. ConcurrentMap 사용&lt;/strong&gt;&lt;br /&gt;
java.util.concurrent.ConcurrentHashMap를 사용하여 하나 이상의 쓰레드가 contention하는 것을 보호할 수 있도록 해 줍니다.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;import java.util.concurrent.ConcurrentMap;&lt;br /&gt;import java.util.concurrent.ConcurrentHashMap;&lt;br /&gt;&lt;br /&gt;public class MapUtil&lt;br /&gt;{&lt;br /&gt;    private ConcurrentMap&amp;lt;String, String&amp;gt; userMap;&lt;br /&gt;    private final int CAPACITY = 100;&lt;br /&gt;&lt;br /&gt;    private MapUtil()&lt;br /&gt;    {&lt;br /&gt;	if (userMap == null)&lt;br /&gt;           userMap = new ConcurrentHashMap&amp;lt;String, String&amp;gt;(CAPACITY);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void changeUser(String userId, String name)&lt;br /&gt;    {&lt;br /&gt;        // 동기화 안해도 됨&lt;br /&gt;        String lastValue = curMap.put(userId, name);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private String findUser(String userId)&lt;br /&gt;    {&lt;br /&gt;        // 동기화 안해도 됨&lt;br /&gt;        return curMap.get(userId);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;strong&gt;3. CopyOnWriteArrayList 사용&lt;/strong&gt;&lt;br /&gt;
Listener (AKA observer) pattern에 사용할 경우 많이 사용됩니다.&lt;br /&gt;
&lt;pre&gt;import java.awt.event.ActionEvent;&lt;br /&gt;import java.awt.event.ActionListener;&lt;br /&gt;import java.util.List;&lt;br /&gt;import java.util.concurrent.CopyOnWriteArrayList;&lt;br /&gt;&lt;br /&gt;public class ListenerUtil&lt;br /&gt;{&lt;br /&gt;    private List&amp;lt;ActionListener&amp;gt; listeners;&lt;br /&gt;&lt;br /&gt;    public ListenerUtil()&lt;br /&gt;    {&lt;br /&gt;        listeners = new CopyOnWriteArrayList&amp;lt;ActionListener&amp;gt;();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void addActionListener(ActionListener listener)&lt;br /&gt;    {&lt;br /&gt;        // 동기화 되지 않음&lt;br /&gt;        listeners.add(listener);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void removeActionListener(ActionListener listener)&lt;br /&gt;    {&lt;br /&gt;        // 동기화 되지 않음&lt;br /&gt;        listeners.remove(listener);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void fireActionEvent()&lt;br /&gt;    {&lt;br /&gt;        for (ActionListener listener : listeners)&lt;br /&gt;        {&lt;br /&gt;            listener.actionPerformed(new ActionEvent(this, 1, &amp;quot;HELLO&amp;quot;));&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;
        </description>
      
      
    
    
    
    <category>Java Tech</category>
    
    <comments>http://mimul.com:80/pebble/default/2008/08/27/1219845120000.html#comments</comments>
    <guid isPermaLink="true">http://mimul.com:80/pebble/default/2008/08/27/1219845120000.html</guid>
    <pubDate>Wed, 27 Aug 2008 13:52:00 GMT</pubDate>
  </item>
  
  <item>
    <title>jpg, png, tiff 파일 ImageMagic 툴에서 사용 방법</title>
    <link>http://mimul.com:80/pebble/default/2008/08/25/1219663860000.html</link>
    
      
        <description>
          gif, bmp파일은 thumbnail에서 자동 변환이 가능한데 jpg, png, tiff파일을 컨버팅처리할 경우 아래와 같은 오류(convert: no decode delegate for this image format)를 맞이할 경우 막막하죠? ^^&lt;br /&gt;
하지만, 아래의 방법을 적용하여 순차적으로 처리해 주면 정상적인 컨버팅이 됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt; 1. 다운로드&lt;/strong&gt;&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;JPEG library: http://www.ijg.org/files/jpegsrc.v6b.tar.gz&lt;/li&gt;
    &lt;li&gt;PNG library: http://www.libpng.org/pub/png/libpng.html&lt;/li&gt;
    &lt;li&gt;ImageMagic library : ftp://ftp.carnet.hr/misc/imagemagick/ImageMagick-6.4.3-4.tar.gz&lt;/li&gt;
    &lt;li&gt;libtiff-lzw-compression-kit library : http://dl.maptools.org/dl/libtiff/old/libtiff-lzw-compression-kit-1.5.tar.gz&lt;/li&gt;
    &lt;li&gt;tiff library : http://dl.maptools.org/dl/libtiff/old/tiff-v3.6.1.tar.gz&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;strong&gt; 2. jpeg library 설치&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;tar zxvf jpegsrc.v6b.tar.gz&lt;br /&gt;cd jpeg-6b&lt;br /&gt;cp /usr/share/libtool/config.sub .&lt;br /&gt;cp /usr/share/libtool/config.guess .&lt;br /&gt;mkdir -p /usr/local/man/man1&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;ranlib /usr/local/lib/libjpeg.a&lt;br /&gt;cd ../&lt;br /&gt;&lt;/pre&gt;
&lt;strong&gt; 3. PNG library 설치&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;tar xfz libpng-1.2.18.tar.gz&lt;br /&gt;cd libpng-1.2.18&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;&lt;/pre&gt;
&lt;strong&gt; 4. tiff library 설치&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;tar xvfz libtiff-lzw-compression-kit-1.5.tar.gz&lt;br /&gt;tar xvfz tiff-v3.6.1.tar.gz&lt;br /&gt;cd tiff-v3.6.1/libtiff&lt;br /&gt;cp ../../libtiff-lzw-compression-kit-1.5/tif_lzw.c&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;&lt;/pre&gt;
&lt;strong&gt; 5. ImageMagick 반영&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;tar xfz ImageMagick-6.4.3-4.tar.gz&lt;br /&gt;cd ImageMagick-6.4.3&lt;br /&gt;./configure --enable-shared --enable-lzw --with-jpeg=yes &lt;br /&gt; --with-png=yes --with-tiff=yes --disable-static --without-perl&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;&lt;/pre&gt;
&lt;strong&gt; 6. 커맨드 사용 예&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp;- convert -strip -scale 3%x3% -quality 70 test.jpg thumbnail_test.jpg&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;strong&gt;[관련 포스트]&lt;/strong&gt;&lt;/u&gt;&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href=&#034;http://mimul.com/pebble/default/2008/07/09/1215601920000.html&#034;&gt;Java 기반의 이미지 업로드 및 Thumbnail 생성&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
        </description>
      
      
    
    
    
    <comments>http://mimul.com:80/pebble/default/2008/08/25/1219663860000.html#comments</comments>
    <guid isPermaLink="true">http://mimul.com:80/pebble/default/2008/08/25/1219663860000.html</guid>
    <pubDate>Mon, 25 Aug 2008 11:31:00 GMT</pubDate>
  </item>
  
  <item>
    <title>온라인 Free E-Book</title>
    <link>http://mimul.com:80/pebble/default/2008/08/24/1219505640000.html</link>
    
      
        <description>
          온라인 무료로 책을 다운받거나 볼 수 있는 사이트들입니다.
&lt;ol&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://www.scribd.com/&#034;&gt;Scribd&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://www.storyq.net/&#034;&gt;storyq&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://www.slideshare.net/&#034;&gt;slideshare&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://4ebooks.org/&#034;&gt;4eBooks&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://www.asksam.com/ebooks/&#034;&gt;AskSam Ebooks&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://www.baen.com/library/&#034;&gt;Baen Free Library&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://www.zillr.org/&#034;&gt;BluePortal&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://www.bookyards.com/&#034;&gt;BookYards&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://www.ebook3000.com/&#034;&gt;ebook3000&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://www.ebooklobby.com/&#034;&gt;eBookLobby&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://www.free-ebooks-download.org/&#034;&gt;Free Ebooks Download&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://www.free-ebooks.net/&#034;&gt;Free-eBooks&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://www.freebookspot.com/&#034;&gt;FreeBookSpot&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://freecomputerbooks.com/&#034;&gt;FreeComputerBooks&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://www.freetechbooks.com/&#034;&gt;FreeTechBooks&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://www.getfreeebooks.com/&#034;&gt;GetFreeEBooks&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://www.globusz.com/&#034;&gt;Globusz&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://knowfree.net/&#034;&gt;KnowFree&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://manybooks.net/&#034;&gt;ManyBooks&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://www.memoware.com/&#034;&gt;MemoWare&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://www.onlinecomputerbooks.com/&#034;&gt;OnlineComputerBooks&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://www.onlinefreeebooks.net/&#034;&gt;OnlineFreeEBooks&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://www.snipfiles.com/&#034;&gt;SnipFiles&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target=&#034;_blank&#034; href=&#034;http://digital.library.upenn.edu/books/&#034;&gt;The Online Books Page&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
        </description>
      
      
    
    
    
    <category>Book Cafe</category>
    
    <comments>http://mimul.com:80/pebble/default/2008/08/24/1219505640000.html#comments</comments>
    <guid isPermaLink="true">http://mimul.com:80/pebble/default/2008/08/24/1219505640000.html</guid>
    <pubDate>Sat, 23 Aug 2008 15:34:00 GMT</pubDate>
  </item>
  
  <item>
    <title>ArsClip - 괜찮은 클립 보드 프로그램</title>
    <link>http://mimul.com:80/pebble/default/2008/08/23/1219417680000.html</link>
    
      
        <description>
          &lt;strong&gt;1. 설치용 방법&lt;br /&gt;
&lt;/strong&gt;&amp;nbsp;- &lt;a href=&#034;http://www.joejoesoft.com/cms/showpage.php?cid=97&#034;&gt;다운로드 받은 파일&lt;/a&gt;의 압축만 해제해 놓는 것으로 즉시 사용이 가능함.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt; 2. 특징&lt;/strong&gt;&lt;br /&gt;
- Multiple permanent items groups : 핫키에 클립데이터를 미리 지정할 수 있음.&lt;br /&gt;
- Picture, RichText, File Copy, Unicode, HTML support&lt;br /&gt;
- Keypress emulation&lt;br /&gt;
- Form Mode for pasting multiple fields&lt;br /&gt;
- Highly configurable&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt; 3. 설정&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp;- 아래 그림같이 오른쪽 트래이 아이콘을 오른쪽 마우스 클릭한 다음 Permanent Items..를 클릭해서 추가로 단축카와 저장된 문자열을 붙여넣기가 가능하다.&lt;br /&gt;
&lt;br /&gt;
&lt;img alt=&#034;&#034; src=&#034;http://www.mimul.com/pebble/default/images/blog/tool/ArsClip.PNG&#034; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;4. 사용&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp;- CTRL+SHIFT+Z를 사용하여 기존에 카피된 것들을 CTRL+V를 통해 자동으로 붙여넣기가 됩니다.
        </description>
      
      
    
    
    
    <category>Tools For Developers</category>
    
    <comments>http://mimul.com:80/pebble/default/2008/08/23/1219417680000.html#comments</comments>
    <guid isPermaLink="true">http://mimul.com:80/pebble/default/2008/08/23/1219417680000.html</guid>
    <pubDate>Fri, 22 Aug 2008 15:08:00 GMT</pubDate>
  </item>
  
  </channel>
</rss>
