<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>aero&apos;s Blog</title>
    <link rel="alternate" type="text/html" href="http://aero.sarang.net/blog/" />
    <link rel="self" type="application/atom+xml" href="http://aero.sarang.net/blog/atom.xml" />
    <id>tag:aero.sarang.net,2007-07-27:/blog//1</id>
    <updated>2010-01-15T16:31:18Z</updated>
    <subtitle>Perl, System Architecture, etc.</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.21-en</generator>

<entry>
    <title>Perl 메타프로그래밍</title>
    <link rel="alternate" type="text/html" href="http://aero.sarang.net/blog/2010/01/perl-11.html" />
    <id>tag:aero.sarang.net,2010:/blog//1.151</id>

    <published>2010-01-15T13:37:57Z</published>
    <updated>2010-01-15T16:31:18Z</updated>

    <summary>KLDP에서 어느분이 Ruby로 메타프로그래밍에 대해서 소개하시길래 Perl로 따라해봤다.Perl에서도 현대적이고 최신의...</summary>
    <author>
        <name>aero</name>
        <uri>http://aero.sarang.net/blog</uri>
    </author>
    
    <category term="perlrubymetaprogrammingoopmoose메타프로그래밍" label="perl ruby metaprogramming oop moose 메타프로그래밍" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://aero.sarang.net/blog/">
        <![CDATA[KLDP에서 어느분이 <a href="http://kldp.org/node/111836">Ruby로 메타프로그래밍에 대해서 소개</a>하시길래 Perl로 따라해봤다.<br /><br />Perl에서도 현대적이고 최신의 OOP Framework인 <a href="http://www.iinteractive.com/moose/">Moose</a>를 사용하면 손쉽고 강력한 메타프로그래밍이 가능하다. 그리고 유연하고 풍부한 문법은 다양한 프로그래밍 스타일을 구사하는데 막힘이 없다.<br /><br /><hr><br />use 5.010;<br /><br /># Tool 클래스 정의<br />{<br />&nbsp;&nbsp;&nbsp; package Tool;<br />&nbsp;&nbsp;&nbsp; use MooseX::SingletonMethod;<br /><br />&nbsp;&nbsp;&nbsp; sub setup1 {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; say "setup1";<br />&nbsp;&nbsp;&nbsp; }<br />}<br /><br /># Tool 클래스에 setup2 메소드 추가<br />Tool-&gt;meta-&gt;add_method( setup2 =&gt; sub { say "setup2" } );<br /><br />my $tool = Tool-&gt;new;<br /><br /># $tool 객체에 singleton 메소드 추가<br />$tool-&gt;add_singleton_method( setup3 =&gt; sub { say "setup3" } );<br /><br />$tool-&gt;setup1;<br />$tool-&gt;setup2;<br />$tool-&gt;setup3;<br /><br />my $tool2 = Tool-&gt;new;<br /><br />$tool2-&gt;setup1;<br />$tool2-&gt;setup2;<br />$tool2-&gt;setup3;&nbsp; # error<br /><br /><br /><hr><br />use 5.010;<br /><br /># Brain 클래스 정의<br />{<br />&nbsp;&nbsp;&nbsp; package Brain;<br />&nbsp;&nbsp;&nbsp; use Moose;<br /><br />&nbsp;&nbsp;&nbsp; has iq =&gt; ( isa =&gt; 'Int', is =&gt; 'rw', default =&gt; 100 );<br />}<br /><br />my $brain = Brain-&gt;new;<br /># 클래스 내부 들여다 보기<br />say $brain-&gt;meta-&gt;get_attribute('iq')-&gt;type_constraint;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Int<br />say $brain-&gt;meta-&gt;get_attribute('iq')-&gt;get_value( $brain ); # 100<br /><br /><br /><br /><hr><br /># 블럭 메소드 호출하기<br />use 5.010;<br />sub func {<br />&nbsp;&nbsp;&nbsp; my ( $block ) = @_;<br />&nbsp;&nbsp;&nbsp; $block-&gt;();<br />&nbsp;&nbsp;&nbsp; &amp;$block;&nbsp; # 이렇게도 호출~<br />}<br /><br />sub func2 {<br />&nbsp;&nbsp;&nbsp; $_[0]-&gt;();&nbsp; # 더 간단하게<br />&nbsp;&nbsp;&nbsp; &amp;{ $_[0] }; # 이렇게도 호출~<br />}<br /><br />my $block = sub { say "Block" };<br /><br />func($block);<br />func2($block);<br /><br /><br /><br /><hr><br />use strict;<br />use warnings;<br />use 5.010;<br /><br /># 메소드 호출테이블<br /><br />my $METHOD_TABLE = [ qw/a b c d/ ];<br /><br />sub a { say "sub a" }<br />sub b { say "sub b" }<br />sub c { say "sub c" }<br />sub d { say "sub d" }<br /><br />&amp;{$main::{$_}} for @{$METHOD_TABLE};<br /><br />$main::{$_}-&gt;() for @{$METHOD_TABLE};<br /><br />no strict 'refs';<br />foreach my $i ( 0 .. $#{$METHOD_TABLE} ) {<br />&nbsp;&nbsp;&nbsp; &amp;{ $METHOD_TABLE-&gt;[$i] };<br />}<br /><br />$_-&gt;() for @{$METHOD_TABLE};<br /><br />foreach my $func ( 'a' .. 'd' ) {<br />&nbsp;&nbsp;&nbsp; &amp;$func;<br />}<br /><br />foreach my $func ( 'a' .. 'd' ) {<br />&nbsp;&nbsp;&nbsp; $func-&gt;();<br />}<br /><br /># 이런식이 더 나은?<br /><br />my %METHOD_TABLE2 = (<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a =&gt; sub { say "sub a" },<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b =&gt; sub { say "sub b" },<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c =&gt; sub { say "sub c" },<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d =&gt; sub { say "sub d" },<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<br /><br />$METHOD_TABLE2{$_}-&gt;() for 'a'..'d';<br /><br /><hr><br />참고:<br /><br /><a href="http://fingernailsinoatmeal.com/post/292301859/metaprogramming-ruby-vs-javascript">Ruby &amp; Javascript Metaprogramming</a><br /><a href="http://transfixedbutnotdead.com/2010/01/13/anyone_for_metaprogramming/">Perl 5 Metaprogramming</a><br /><a href="http://transfixedbutnotdead.com/2010/01/14/anyone-for-perl-6-metaprogramming/">Perl 6 Metaprogramming</a><br /><br /><br />]]>
        

    </content>
</entry>

<entry>
    <title>CPAN 으로 모듈설치시 의존모듈 자동설치하기</title>
    <link rel="alternate" type="text/html" href="http://aero.sarang.net/blog/2010/01/cpan-1.html" />
    <id>tag:aero.sarang.net,2010:/blog//1.150</id>

    <published>2010-01-03T14:29:16Z</published>
    <updated>2010-01-03T14:44:18Z</updated>

    <summary>Perl에서 CPAN모듈들을 설치할때 해당 모듈이 필요로 하는 모듈이 많을 경우...</summary>
    <author>
        <name>aero</name>
        <uri>http://aero.sarang.net/blog</uri>
    </author>
    
    <category term="perlcpanmoduleinstall" label="perl CPAN module install" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://aero.sarang.net/blog/">
        <![CDATA[Perl에서 CPAN모듈들을 설치할때 해당 모듈이 필요로 하는 모듈이 많을 경우 다음과 같이 기본적으로 설치할 것인지를 물어보는데 이런 모듈의 수가 많아지면 일일이 확인하며 yes를 해주기가 귀찮을 때가 많다. 특히나 Catalyst 웹프레임웍 같이 의존성을 많이 가지는 모듈일 경우는 더더욱..<br /><br />- Catalyst::Plugin::I18N ...loaded. (0.04)<br />[XMLRPC Support]<br />- Catalyst::Plugin::XMLRPC ...missing.<br />==&gt; Auto-install the 1 optional module(s) from CPAN? [y] y<br />[Pluggable Application Support]<br />- Catalyst::Plugin::Pluggable ...loaded. (0.04)<br />[DBIx::Class Support]<br />- Catalyst::Model::DBIC ...missing.<br />- Catalyst::Model::DBIC::Plain ...missing.<br />==&gt; Auto-install the 2 optional module(s) from CPAN? [y] y<br /><br />이럴때 물어보지 않고 필요할 모듈들을 자동으로 설치하려면 어떻게 해야 할까?<br /><br />방법은 크게 2가지가 있다.<br /><br />PERL__MM_USE_DEFAULT 환경변수를 1로 세팅하는 방법<br /><br />$ PERL_MM_USE_DEFAULT=1 cpan<br />cpan&gt; install Some::Module<br /><br />CPAN설정에서 prerequisites_policy 을 follow로 설정하는 방법<br /><br />$ cpan<br />cpan&gt; o conf prerequisites_policy follow<br />cpan&gt; o conf commit<br />cpan&gt; install Some::Module<br /><br /><br />참고:<br />http://sipb.mit.edu/doc/cpan/<br />http://stackoverflow.com/questions/898782/how-do-i-tell-cpan-to-install-all-dependencies<br /><br /><br /><br />  ]]>
        
    </content>
</entry>

<entry>
    <title>Perl Advent Calendar</title>
    <link rel="alternate" type="text/html" href="http://aero.sarang.net/blog/2009/12/perl-advent-calendar.html" />
    <id>tag:aero.sarang.net,2009:/blog//1.149</id>

    <published>2009-12-14T04:15:09Z</published>
    <updated>2009-12-15T01:05:01Z</updated>

    <summary> Perl 커뮤니티에는 매년 크리스마스 4주 전부터 Advent Calendar라는 것을...</summary>
    <author>
        <name>aero</name>
        <uri>http://aero.sarang.net/blog</uri>
    </author>
    
    <category term="perladventcalendar" label="perl advent calendar" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://aero.sarang.net/blog/">
        <![CDATA[<img src="http://nursery.apartmenttherapy.com/images/uploads/2007-11-26-advent.gif" height="281" width="281" />
<br /><br />Perl 커뮤니티에는 매년 크리스마스 4주 전부터 Advent Calendar라는 것을 만들어서 유용한 팁이나 정보들을 크리스마스 때까지 하나씩 올린다.<br /><br /><a href="http://ask.nate.com/qna/view.html?n=8774933">Advent Calendar란?</a><br /><br />올해도 어김없이 Perl 커뮤니티에서는 여러 Advent Calendar가 개설되어 재미있고 유용한 팁들을 올리고 있는데 정리해보면 다음과 같다.<br /><br /><a href="http://perladvent.pm.org/2009/">Perl Advent Calendar 2009</a><br /><br /><a href="http://perl6advent.wordpress.com/">Perl 6 Advent Calendar 2009</a><br /><br /><a href="http://www.catalystframework.org/calendar/2009">Catalyst Advent Calendar 2009</a><br /><br /><a href="http://advent.plackperl.org/">Plack Advent Calendar 2009</a><br /><br /><a href="http://advent.rjbs.manxome.org/">RJBS Advent Calendar 2009</a><br /><br /><a href="http://perl-users.jp/articles/advent-calendar/2009/">Japan Perl Advent Calendar 2009</a><br />네이버 일한번역으로 보기 <a href="http://j2k.naver.com/j2k_frame.php/korean/perl-users.jp/articles/advent-calendar/2009/">Japan Perl Advent Calendar 2009(일한번역)</a><br /><br /><a href="http://perlchina.org/advent/">China Perl Advent Calendar 2009</a><br /><br />보너스로 Perl과는 관계없지만(?) Perl Advent Calendar를 본딴<br /><br /><a href="http://sysadvent.blogspot.com/">System Administrator's Advent Calendar 2009</a><br /><br />매일매일 읽어보면 뼈와 살이 되는 내용들이 올라오니 많은 도움이 될듯~<br /><br />Korea Perl Advent Calendar는 언제쯤? - -;<br /><br />]]>
        
    </content>
</entry>

<entry>
    <title>Twitter 메시지 Google 번역기로 번역해서 보기</title>
    <link rel="alternate" type="text/html" href="http://aero.sarang.net/blog/2009/11/twitter-google.html" />
    <id>tag:aero.sarang.net,2009:/blog//1.148</id>

    <published>2009-11-23T11:33:33Z</published>
    <updated>2009-11-23T11:57:10Z</updated>

    <summary>Twitter를 하다 보면 전세계의 여러 언어들을 접하게 된다. 뭐 영어쯤은...</summary>
    <author>
        <name>aero</name>
        <uri>http://aero.sarang.net/blog</uri>
    </author>
    
    <category term="번역" label="번역" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="greasmonkey" label="greasmonkey" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="트위터" label="트위터" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="translation" label="translation" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="twitter" label="twitter" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://aero.sarang.net/blog/">
        <![CDATA[Twitter를 하다 보면 전세계의 여러 언어들을 접하게 된다. 뭐 영어쯤은 고등교육을 받은 사람이면 해석해서 이해하는데 별 무리가 없지만 그 이외의 언어들은 2외국어로 배우거나 따로 공부하지 않은 사람이면 이해하기 힘들다. 이럴때 인터넷상에 제공되는 각종 온라인 번역기를 사용할 수 있기는 하지만 번역페이지에 가서 원문을 긁어다 붙이는 등의 작업이 귀찮을 때가 많다.<br /><br />그러한 상황에서 편하게 Twitter메시지를 번역해서 볼 수 있는 유용한 스크립트를 소개하고자 한다.<br /><br />일단 브라우저는 Firefox를 사용하고 <a href="https://addons.mozilla.org/en-US/firefox/addon/748">Greasemonkey</a>라는 플러그인을 설치한 후 <a href="http://userscripts.org/scripts/show/43115">Twitter - Google Translate</a> 유저스크립트를 설치한다. (설치는 해당 페이지의 우측 상단의 Install 버튼을 누르면 바로 적용된다.)<br /><br />Greasemonkey 플러그인과 Twitter - Google Transelate 유저스크립트 설치가 끝났다면 Firefox 브라우저 우측하단에 원숭이 모양의 아이콘이 생성되어 있을 것이다. 원숭이 모양이 흑백이라면 Greasemonkey가 활성화 상태가 아니라는 의미이므로 마우스 왼쪽 버튼을 클릭하여 활성화/비활성화 시킬 수 있다.<br /><br />활성화된 상태에서 원숭이 모양의 아이콘에서 왼쪽 마우스 버튼을 누르면 뜨는 메뉴에서 "유저스크립트 관리"를 선택하면 새로운 대화창이 뜬다. 대화창 왼쪽 패널에서 Google Translate를 선택하고 왼쪽 하단의 편집 버튼을 누른후 스크립트 파일을 편집할 편집기를 지정하라는 파일 대화창이 뜨면 C:\windows 폴더로 이동하여 notepad.exe를 지정한다.(이것은 자기가 사용할 다른 에디터를 지정가능) 그러면 자바스크립트 파일이 열리는데 해당 자바스크립트 파일의 첫부분에<br /><br />var url = 'http://ajax.googleapis.com/ajax/services/language/translate?v=1.0',<br />&nbsp;&nbsp;&nbsp; langpair = '%7Cen',<br /><br />에서 번역이 한국어로 되게 하기위하여 langpair = '%7Cen' 을 langpair = '%7Cko' 로 바꾸고 저장한다. <br /><br />위 작업이 끝난 후 Twiiter에 접속하면 다음과 같이 각 메시지 옆에 번역 아이콘이 보이는데 ( t로 안보이고 작은 점으로 보이는 경우도 있음) 그 부분을 마우스로 클릭하면 구글 번역을 통해 자기가 지정한 언어로 번역된 메시지가 하단에 나타나게 된다.<br /><pre class="sh_javascript sh_sourceCode" id="source">  
<img src="http://static.jackhsu.com/greasemonkey/twitter-screenshot.jpg" />
</pre></br></br>
Happy Twitting!
]]>
        
    </content>
</entry>

<entry>
    <title>perl.org 싸이트 새단장</title>
    <link rel="alternate" type="text/html" href="http://aero.sarang.net/blog/2009/11/perlorg.html" />
    <id>tag:aero.sarang.net,2009:/blog//1.147</id>

    <published>2009-11-13T01:23:52Z</published>
    <updated>2009-11-13T01:48:59Z</updated>

    <summary>Perl의 대문 싸이트인 http://www.perl.org가 새단장 되었다.그동안 Perl싸이트들은 오래된 Perl의 역사만큼이나...</summary>
    <author>
        <name>aero</name>
        <uri>http://aero.sarang.net/blog</uri>
    </author>
    
    <category term="새단장" label="새단장" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="renewal" label="renewal" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://aero.sarang.net/blog/">
        <![CDATA[Perl의 대문 싸이트인 http://www.perl.org가 새단장 되었다.<br /><br />그동안 Perl싸이트들은 오래된 Perl의 역사만큼이나 그 외향이 현대적감각과 약간 동떨어진 정적이고 산만한 형태를 띄어서 사용자들에게 매력을 주지 못한점이 있었다.<br />&nbsp;이것을 두고 Perl 커뮤니티에서는 현대적감각에 뒤떨어지고 딱딱해보이는 싸이트들이 새로운 사용자들을 끌어들이는데 장애물이 된다라는 의견과 그런 껍데기를 치장하는데 노력을 쏟는 것은 여타 신진 언어들에서 보이는 fanboy들이나 하는 것이지 내실만 다지면 된다라는 의견이 분분했는데 결국에는 마케팅에 있어 적절한 포장도 중요하다는 결론에 이르른 것 같다.<br /><br />이미 <a href="http://news.perlfoundation.org/2009/10/the_perl_foundation_marketing.html">Perl Foundation에서는 마케팅전문가를 영입하여 Perl을 체계적으로 홍보하기위한 전략수립과 함께 전략을 행동으로 옮기고 있으며</a> 얼마전 리뉴얼한 Perl문서 싸이트 http://perldoc.perl.org 에 이어 Perl의 대표 대문 싸이트인 http://www.perl.org 가 재단장된 것도 다 이런한 작업의 연장선에 있다고 볼 수 있다.<br /><br />어떻게 바뀌었는지는 실제 비교해서 보자<br />(과거 싸이트는 http://www.archive.org 에서 가져옴)<br /><br />* http://perldoc.perl.org<br />&nbsp; <a href="http://web.archive.org/web/20080722175324/http://perldoc.perl.org/">과거</a>&nbsp; <a href="http://perldoc.perl.org/">현재</a><br /><br />* http://www.perl.rog&nbsp;&nbsp; <br />&nbsp; <a href="http://web.archive.org/web/20080618070015/http://www.perl.org/">과거</a>&nbsp; <a href="http://www.perl.org/">현재</a><br /><br /><br /><br /> ]]>
        
    </content>
</entry>

<entry>
    <title>Perl 미신 (개정판)</title>
    <link rel="alternate" type="text/html" href="http://aero.sarang.net/blog/2009/09/perl-10.html" />
    <id>tag:aero.sarang.net,2009:/blog//1.146</id>

    <published>2009-09-24T02:22:15Z</published>
    <updated>2009-09-24T02:38:45Z</updated>

    <summary>작년에 올린적이 있는 Tim Bunce씨의 자료 Perl Myth(펄 미신)의 내용을...</summary>
    <author>
        <name>aero</name>
        <uri>http://aero.sarang.net/blog</uri>
    </author>
    
    <category term="미신" label="미신" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="myth" label="Myth" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="Perl" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://aero.sarang.net/blog/">
        <![CDATA[작년에 올린적이 있는 <a href="http://www.oreillynet.com/pub/au/653">Tim Bunce</a>씨의 자료 <a href="http://aero.sarang.net/blog/2008/03/perl-4.html">Perl Myth(펄 미신)</a>의 내용을 갱신한 개정판 Perl Myth가 나왔다.<br /><br />더불어 <a href="http://ironman.enlightenedperl.org/">Planet Perl Iron Man</a> 의 RSS 구독하면 현대적 펄의 역동성을 느낄 수 있을 것이다.<br /><br />

<div style="width: 425px; text-align: left;" id="__ss_2044080"><a style="margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;" href="http://www.slideshare.net/Tim.Bunce/perl-myths-200909" title="Perl Myths 200909">Perl Myths 200909</a><object style="margin: 0px;" height="355" width="425"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=perl-myths-200909-090922145348-phpapp01&amp;stripped_title=perl-myths-200909" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=perl-myths-200909-090922145348-phpapp01&amp;stripped_title=perl-myths-200909" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="525" width="640"></object><div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration: underline;" href="http://www.slideshare.net/">documents</a> from <a style="text-decoration: underline;" href="http://www.slideshare.net/Tim.Bunce">Tim Bunce</a>.</div></div>]]>
        
    </content>
</entry>

<entry>
    <title>YAPC::Asia 2009</title>
    <link rel="alternate" type="text/html" href="http://aero.sarang.net/blog/2009/09/yapcasia-2009.html" />
    <id>tag:aero.sarang.net,2009:/blog//1.145</id>

    <published>2009-09-19T00:20:38Z</published>
    <updated>2009-09-19T00:32:59Z</updated>

    <summary> 참가자가 500명이 넘을정도의 세계최대의 Perl컨퍼런스로 성장한 YAPC::Asia 2009가 9월...</summary>
    <author>
        <name>aero</name>
        <uri>http://aero.sarang.net/blog</uri>
    </author>
    
    <category term="perl" label="Perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="yapc" label="YAPC" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="yapcasia" label="YAPC::Asia" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://aero.sarang.net/blog/">
        <![CDATA[<img src="http://conferences.yapcasia.org/ya2009/css/themes/ya2009/images/yapc2009_logo.gif" />
<br /><br />참가자가 500명이 넘을정도의 세계최대의 Perl컨퍼런스로 성장한 <a href="http://conferences.yapcasia.org/ya2009/">YAPC::Asia 2009</a>가 9월 10~11 일본 동경에서 개최되었다. 2008년도 YAPC::Asia에는 <a href="http://aero.sarang.net/blog/2008/05/yapc-asia-2008.html">직접 갔었는데</a> 이번에는 사정상 가보지 못해서 많이 아쉽다. 그래서 각종 자료들이나마 정리해본다.<br /><br /><a href="http://conferences.yapcasia.org/ya2009/">YAPC::Asia 2009 공식홈페이지</a><br /><br /><a href="http://www.google.com/translate?u=http%3A%2F%2Fd.hatena.ne.jp%2Fhiratara%2F20090911%2Fp2&amp;hl=ko&amp;ie=UTF8&amp;tl=ko&amp;sl=ja">YAPC::Asia 2009 후기 (구글 번역)</a><br /><br />YAPC::Asia 2009 사진<br /><a href="http://yapcasia2009.ficia.com/"> 사진자료1</a>, <a href="http://www.flickr.com/search/?q=yapcasia2009">사진자료2</a><br /><br />YAPC::Asia 2009 발표자료<br />&nbsp;<a href="http://www.slideshare.net/event/yapcasia-2009/slideshows">slideshare에 올려진 자료</a><br />&nbsp;<a href="http://www.dan.co.jp/%7Edankogai/yapcasia2009/perls.html">Dan Kogai씨의 Which Perl?</a><br /><br /> ]]>
        
    </content>
</entry>

<entry>
    <title>Monitoring Forge</title>
    <link rel="alternate" type="text/html" href="http://aero.sarang.net/blog/2009/09/monitoring-forge.html" />
    <id>tag:aero.sarang.net,2009:/blog//1.144</id>

    <published>2009-09-17T05:39:08Z</published>
    <updated>2009-09-17T06:09:26Z</updated>

    <summary> 각종 서버/네트웍 모니터링 시스템 및 각종 플러그인 정보를 모아놓은...</summary>
    <author>
        <name>aero</name>
        <uri>http://aero.sarang.net/blog</uri>
    </author>
    
    <category term="모니터링시스템" label="모니터링시스템" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="monitoringforge" label="Monitoring Forge" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="nagios" label="Nagios" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://aero.sarang.net/blog/">
        <![CDATA[ <img src="http://monitoringforge.org/themes/monitoring/images/gwlogo.gif" /><br /><br />각종 서버/네트웍 모니터링 시스템 및 각종 플러그인 정보를 모아놓은 새로운 사이트 <a href="http://monitoringforge.org/">Monitoring Forge</a> 란 싸이트가 오픈했다.<br /><br />모니터링 시스템은 아주 종류가 다양하고 지원 수준도 다양하기 때문에 인프라의 규모나 용도 및 요구사항을 잘 분석한다음 적절한 솔루션을 찾아야 한다. 그런 의미에서 다양한 정보를 모아서 보여주는 Monitoring Forge란 싸이트는 많은 도움이 될 수 있을 듯 하다.<br /><br />개인적으로는 이것 저것 많이 써봤지만 <a href="http://nagios.org/">Nagios</a>를 기반으로 하는 모니터링 시스템들이 가장 안정적이고 성능이 뛰어난 것 같다. 겉보기에는 번지르르한 모니터링 시스템들도  많지만 역시나 규모가 커지면 안정성과 성능이 못따라오는 경우가 많았다. 특히 Nagios의 Core와 <a href="http://nagios.sourceforge.net/docs/3_0/tuning.html">각종 최적화등을 위한 설정옵션</a>들을 보고 있자면 오랫동안 얼마나 다양한 상황에 대해서 고민하고 시행착오를 거치면서 만들어졌는지 느낄 수 있다.<br />]]>
        
    </content>
</entry>

<entry>
    <title>Perl 5.10.1 릴리즈</title>
    <link rel="alternate" type="text/html" href="http://aero.sarang.net/blog/2009/08/perl-5101.html" />
    <id>tag:aero.sarang.net,2009:/blog//1.143</id>

    <published>2009-08-24T05:27:13Z</published>
    <updated>2009-08-24T13:59:43Z</updated>

    <summary>2007년 12월 Perl 5.10 버젼( 드디어 Perl 5.10 출시 ,...</summary>
    <author>
        <name>aero</name>
        <uri>http://aero.sarang.net/blog</uri>
    </author>
    
    <category term="5101" label="5.10.1" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="android" label="android" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="출시" label="출시" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="Perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="release" label="Release" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://aero.sarang.net/blog/">
        <![CDATA[2007년 12월 Perl 5.10 버젼( <a href="http://aero.sarang.net/blog/2007/12/-perl-510.html">드디어 Perl 5.10 출시</a> , <a href="http://aero.sarang.net/blog/2007/12/perl-510-1.html">Perl 5.10 추가된 기능 정리</a> 참고 )이 나온지 20여 개월이 지난 2009년 8월 23일 Perl 5.10.1 버젼이 릴리즈 되었다.<br /><br /><a href="http://search.cpan.org/%7Edapm/perl-5.10.1/">Perl 5.10.1 릴리즈</a><br /><br />아직 production 환경에서 5.8.x 버젼대 Perl을 쓰는 곳도 많고 5.10버젼이 초창기 메모리 누수등 소소한 문제점들이 있어서 5.10.x 버젼으로 넘어가기를 꺼리는 사람들도 있었는데 이번에 안정적인 5.10.1 minor patch 버젼이 나와서 5.10.x 버젼대로의 이동이 가속화 되리라 생각된다. 자세한 변경사항은 <a href="http://search.cpan.org/%7Edapm/perl-5.10.1/pod/perl5101delta.pod">perl5101delta</a> 참고<br /><br /><br />perl 5.10.1을 자신의 홈 디렉토리에 독립적으로 설치하려면 다음과 같이 하면 된다.<br /><br />위 5.10.1릴리즈 링크에서 download 링크( http://search.cpan.org/CPAN/authors/id/D/DA/DAPM/perl-5.10.1.tar.gz )로 부터 perl-5.10.1.tar.gz 를 다운 받는다.<br /><br />$ tar zxvf perl-5.10.1.tar.gz<br />$ cd perl-5.10.1<br />$ ./Configure -de -Dprefix=${HOME}/perl/5.10.1/ -Dusethreads<br />$ make<br />$ make test<br />$ make install<br /><br />여기까지 오면 자신의 home디렉토리의 ~/perl/5.10.1 아래에 독립적인 Perl이 설치된다.<br /><br />그러면 다음 행을 .bashrc등에 넣고 재로그인 하거나 쉘상에서 실행시킨다. 그러면 perl 5.10.1 바이너리가 제일 우선순위를 가지게 된다. ( 만약<a href="http://aero.sarang.net/blog/2009/04/locallib-cpan.html"> local::lib 모듈</a>을 써서 추가된 환경변수가 있다면 지워주거나 .bashrc에서 임시로 주석을 넣어 적용되지 않도록 한다. )<br /><br />export PATH=${HOME}/perl/5.10.1/bin:$PATH<br /><br />다음과 같이 version을 확인<br /><br />$ perl -v<br /><br />This is perl, v5.10.1 (*) built for i686-linux<br /><br />Copyright 1987-2009, Larry Wall<br />....<br /><br />추가로 CPAN 사용환경을 자동으로 설정하려면<br />
<br />
$ PERL_MM_USE_DEFAULT=1 cpan Bundle::CPANxxl<br />
<br />
과 같이 명령을 내린다.<br /><br />이제 cpan 명령으로 필요한 모듈을 추가로 설치할 수 있다. 독립적인 Perl 5.10.1 환경에서 설치한 모듈은 ${HOME}/perl/5.10.1/ 아래의 적절한 경로에 설치된다.( Perl 배포폰 자체가 홈 디렉토리에 독립적으로 설치되었으므로 굳이 local::lib을 안써도 자신의 독립적인 환경이 보장 됨 ) <br /><br />다시 이전의 Perl환경으로 돌아가려면 PATH환경변수를 설정하는 줄을 주석걸고 local::lib을 사용한다면 주석걸었던 줄을 풀어주면 된다. 이런 식으로 마음대로 여러 Perl 환경을 바꿔가며 쓸 수 있다.<br /><br />Enjoy Perl 5.10.1<br /><br /><br /><br /><br />아 그리고 기쁜소식 하나더<br />Google Android에 스크립트 언어를 쓰기위한 환경인 ASE(Android Scripting Environment) 0.11 버젼에 Perl 지원이 추가되었다.<br /><br />참고: <a href="http://perlbuzz.com/2009/08/perl-coming-to-android-phones.html">Perl coming to Android phones</a><br /><br />본인이 시작한 <a href="http://code.google.com/p/android-scripting/issues/detail?id=32">청원</a>(?)이라 더 보람이 크다능...<br /><br />]]>
        
    </content>
</entry>

<entry>
    <title>Automating System Administration with Perl 서평</title>
    <link rel="alternate" type="text/html" href="http://aero.sarang.net/blog/2009/07/automating-system-administrati.html" />
    <id>tag:aero.sarang.net,2009:/blog//1.142</id>

    <published>2009-07-31T14:41:39Z</published>
    <updated>2009-07-31T16:10:19Z</updated>

    <summary>예전에 기대되는 Perl 신간 서적에서 Automating System Administrationwith Perl: Tools...</summary>
    <author>
        <name>aero</name>
        <uri>http://aero.sarang.net/blog</uri>
    </author>
    
    <category term="book" label="Book" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="서평" label="서평" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="책" label="책" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="Perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="systemadministration" label="System Administration" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://aero.sarang.net/blog/">
        <![CDATA[예전에 <a href="http://aero.sarang.net/blog/2009/03/-perl-4.html">기대되는 Perl 신간 서적</a>에서 <br /><br /> <img src="http://ecx.images-amazon.com/images/I/51edGImXZbL._SS500_.jpg" /><br /><br /><br /><a href="http://www.amazon.com/Automating-System-Administration-Perl-Efficient/dp/059600639X">Automating System Administration</a><a href="http://www.amazon.com/Automating-System-Administration-Perl-Efficient/dp/059600639X">with Perl: Tools to Make You More Efficient</a> 란 책에 대해서 언급한적이 있는데 오늘 책을 구해서 대강 훑어보았다.<br /><br />이번 2판이 1판과 다른 점은 내용이 보강된 점도 있지만 가장 큰 변화는 뭐니뭐니해도 Perl 코드 형식이 최신경향으로 전부 바뀌었다는 점이다. Perl은 범용언어이지만 시스템관리 쪽에서도 많이 쓰여왔는데 특히 시스템관리쪽 코드들은 과거 Perl 4시절 코드형태를 띄는 경우가 많으며 요즘도 그런 식으로 Perl 코딩하는 사람들을 종종 본다. 일례로 1판과 2판의 같은 기능을 하는 코드를 비교해보자.<br /><br /><font style="font-size: 1.25em;"><b>&lt;1판 코드&gt;</b></font><br /><br />use User::pwent;<br /><br />$shells = "/etc/shells";<br />open (SHELLS,$shells) or die "Unable to open $shells:$!\n";<br />while(&lt;SHELLS&gt;){<br />&nbsp;&nbsp;&nbsp; chomp;<br />&nbsp;&nbsp;&nbsp; $okshell{$_}++;<br />}<br />close(SHELLS);<br /><br />while($pwent = getpwent()){<br />&nbsp;&nbsp; warn $pwent-&gt;name." has a bad shell (".$pwent-&gt;shell.")!\n"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unless (exists $okshell{$pwent-&gt;shell});<br />}<br />endpwent();<br /><br /><br /><b><font style="font-size: 1.25em;">&lt;2판 코드&gt;</font></b><br /><br />use User::pwent;<br /><br />my $shells = '/etc/shells';<br />open my $SHELLS, '&lt;', $shells or die "Unable to open $shells:$!\n";<br /><br />my %okshell;<br />while (&lt;$SHELLS&gt;) {<br />&nbsp;&nbsp;&nbsp; chomp;<br />&nbsp;&nbsp;&nbsp; $okshell{$_}++;<br />}<br />close $SHELLS;<br />while ( my $pwent = getpwent() ) {<br />&nbsp;&nbsp;&nbsp; warn $pwent-&gt;name . ' has a bad shell (' . $pwent-&gt;shell . ")!\n"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unless ( exists $okshell{ $pwent-&gt;shell } );<br />}<br />endpwent();<br /><br /><br />현대 Perl코드는 거의 필수적으로 strict와 warnings 프래그마를 사용하여<br /><br />#!/usr/bin/perl<br />use strict;<br />use warnings;<br /><br />로 코드를 시작한다. 1판의 소스에서 이 두 줄을 추가한다면 $shell = "/etc/shells"; 에서부터<br /><br />Global symbol "$shells" requires explicit package name at ... <br /><br />이런 에러가 나면서 동작하지 않을 것이다. 보통 여기서 strict와 warnings를 쓰라고 하는 건 어디서 들어본 것 같은데 쓰면 변수선언부터 에러가 나고 my는 서브루틴 같은 곳에서 렉시컬 변수로 쓴다고 대강 알고 있지만 이것이 정확히 뭘 의미하는지 모르니 1판 같은 소스를 계속 쓰게 되는 악순환을 겪게 된다. 2판의 소스도 strict와 warnings 프래그마를 넣지는 않았지만 넣어도 완벽하게 아무런 문제를 일으키지 않고 동작하는 코드이다. 특히 전역변수랍치고 $shells = "/etc/shells"; 이런 식으로 my,our,local같은 변수 범위선언자를 붙이지 않고 변수를 선언해서 사용하는 Perl코드를 쓰는 사람을 보면 이 사람 Perl 기초를 제대로 이해하지 못하고 나도는 예제코드들 보고 대강 베껴 쓰는구나 하고 생각하게 된다.<br /><br />1판 소스가 어떻게 2판 소스처럼 바뀌게 되는지 알고 싶으면 <a href="http://aero.sarang.net/presentation/kpw2008_new_perl/">최신 스타일 Perl로 개과천선하기</a>를 읽어보시고 이제 제발 1판 같은 Perl코드는 양산하지 말아 주셨으면 좋겠다.<br /><br />하지만 2판에서도 최신경향 Perl방식을 따르지 않는 부분이 간혹 있는데 그것은 다음과 같은 객체의 메소드를 호출하는 방법이다.<br /><br />use Win32::Perms;<br />$acl&nbsp; = new Win32::Perms();<br /><br />위 코드는 Win32::Perms라는 객체를 간접호출 방식으로 생성하는 코드인데 마치 Java,C++의 new생성자와 유사한 형식이라 익숙해 보일 수도 있지만 Perl에서는 여러 가지 side effect를 회피하기 위해 다음과 같이 직접호출 방식을 쓰는 게 좋으며 그것이 최신 형식이다.<br /><br />use Win32::Perms;<br />my $acl&nbsp; = Win32::Perms-&gt;new();<br /><br />Perl OOP에 관한 내용은 <a href="http://aero.sarang.net/presentation/New_Perl_OOP.pdf">새로운 Perl OOP로 개과천선하기</a>를 참고<br /><br /><br />이상 코드형식에 대해서 얘기했지만, 2판은 요즘 새롭게 등장한 Windows용 <a href="http://strawberryperl.com/">Strawberry Perl</a>도 언급하는 등 Perl의 최신정보들을 최대한 반영하려는 노력을 보이고 있으며 1판에 비해 시스템관리 전 영역에 걸쳐 많은 내용이 보강되었고 Perl이 다양한 플랫폼에 포팅된 언어 인만큼 UNIX/LINUX뿐만 아니라 Windows 플랫폼에 관해서도 많은 부분을 할애하여 Perl을 플랫폼을 가리지 않는 시스템관리용 언어로 사용할 수 있도록 배려하고 있다.<br /><br />책이 포함하고 있는 자세한 내용은 다음과 같으며<br /><br />&nbsp;&nbsp;&nbsp; * Manage user accounts<br />&nbsp;&nbsp;&nbsp; * Monitor filesystems and processes<br />&nbsp;&nbsp;&nbsp; * Work with configuration files in important formats such as XML and YAML<br />&nbsp;&nbsp;&nbsp; * Administer databases, including MySQL, MS-SQL, and Oracle with DBI<br />&nbsp;&nbsp;&nbsp; * Work with directory services like LDAP and Active Directory<br />&nbsp;&nbsp;&nbsp; * Script email protocols and spam control<br />&nbsp;&nbsp;&nbsp; * Effectively create, handle, and analyze log files<br />&nbsp;&nbsp;&nbsp; * Administer network name and configuration services, including NIS, DNS and DHCP<br />&nbsp;&nbsp;&nbsp; * Maintain, monitor, and map network services, using technologies and tools such as SNMP, nmap, libpcap, GraphViz and RRDtool<br />&nbsp;&nbsp;&nbsp; * Improve filesystem, process, and network security <br /><br />This edition includes additional appendixes to get you up to speed on technologies such as XML/XPath, LDAP, SNMP, and SQL. With this book in hand and Perl in your toolbox, you can do more with less -- fewer resources, less effort, and far less hassle.<br /><br />시스템관리자 뿐만 아니라 개발자들에게도 시스템을 이해하는데 아주 도움이 되는 책이라고 생각한다.<br />

]]>
        
    </content>
</entry>

<entry>
    <title>ssh를 socks proxy를 통해서 접속하기</title>
    <link rel="alternate" type="text/html" href="http://aero.sarang.net/blog/2009/07/ssh-socks-proxy.html" />
    <id>tag:aero.sarang.net,2009:/blog//1.141</id>

    <published>2009-07-29T14:57:57Z</published>
    <updated>2009-07-30T02:38:06Z</updated>

    <summary>JEEN님의 [ SSH ] .ssh/config 에 대해서... 라는 블로그 포스팅을...</summary>
    <author>
        <name>aero</name>
        <uri>http://aero.sarang.net/blog</uri>
    </author>
    
    <category term="connect" label="connect" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="proxy" label="proxy" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="socks" label="socks" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="socksify" label="socksify" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ssh" label="ssh" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://aero.sarang.net/blog/">
        <![CDATA[JEEN님의 <a href="http://jeen.tistory.com/entry/SSH-sshconfig-%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C">[ SSH ] .ssh/config 에 대해서...</a> 라는 블로그 포스팅을 보고 뭔가 복잡한 것 같아 윈도우용 ssh클라이언트인 putty에서 socks proxy를 지정해서 ssh접속하는 기능이 생각나서 LINUX의 일반 ssh 명령에서는 어떻게 사용할까 궁금해서 여러자료를 찾아서 시도해봤다.<br /><br />JEEN님의 문제는 A,B 서버가 있다면 B서버는 A서버를 통해서만 접속할 수 있어서 편리하게 B서버에 접속하고 싶다는 것인데 JEEN님의 방법은 ssh설정을 사용해서 B서버에 접속을 하면 차례로 A,B 서버 인증을 거치며 들어가는 것이다.<br /><br />하지만 A가 proxy서버의 역할을 한다면 A서버를 proxy로 지정하고 B에 접속하면 B에 대한 인증만 통과하면 된다. 그럼 먼저 A를 proxy서버 역할을 하도록 ssh의 Dynamic Port Forwarding기능을 이용하여 다음처럼<br /><br />ssh -N -D localhost:8888 user@hostA<br /><br />명령을 내리면 password를 물어보는데 password를 입력하여&nbsp; A서버에 로그인한 상태가 되고나면 이제 localhost의 8888 포트(포트는 마음대로 바꿔도 됨)는 A서버와 ssh채널로 이어져서 proxy처럼(socks4, socks5 proxy프로토콜을 지원한다.) 동작하기 때문에 이것을 proxy로 지정한 모든 접속은 ssh연결을 통해 A서버를 통해서 나가게 된다.<br /><br />그러면 이제 proxy를 지정하고 B서버에 접속하려고 하면 실제 접속은 A서버를 통해서 이루어지게 될 것이므로 문제 없이 접속될 것이다.<br /><br />여기서 일반적인 ssh명령이 proxy( localhost:8888 )를 사용하게 하려면 어떻게 할까?<br /><br />먼저 connect라는 유틸리티를 <a href="http://bent.latency.net/bent/darcs/goto-san-connect-1.85/src/connect.html">여기</a>서 받은 다음 gcc -o connect connect.c 로 컴파일하고 컴파일된 connect 바이너리를 path가 잡힌곳에 복사한다. 그 다음<br /><br />ssh -o "ProxyCommand connect -5 -S localhost:8888 %h %p" user@hostB<br /><br />처럼 명령을 내리면 proxy(ssh채널로 이어진 A서버)를 통해서 B서버로 접속하게 된다.<br /><br />(옵션들의 사용법과 동작방식은 메뉴얼에 다 잘 나와있으므로 자세한 설명은 생략...)<br /><br /><br /><br /><font style="font-size: 1.25em;"><b>추가:</b></font><br />connect를 사용해서 proxy를 지정하는 방법은 별도의 shell 스크립트를 만들거나 ssh설정에 미리 넣어놓을 수 있지만 약간 번거로운 감이 있다. 이때는 dante( http://www.inet.no/dante/ )라는 socks서버에 포함되어 있는 socksify라는 명령을 이용해서도 socks proxy를 통해서 ssh접속을 할 수 있다. ubuntu라면 sudo apt-get install dante-client 로 패키지를 설치하고 나면 socksify라는 명령도 같이 설치된다. socksify가 사용하는 proxy를 지정하기 위해서는 /etc/dante.conf 파일을 열어 다음 내용을 추가해준다.<br /><br />route {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from: 0.0.0.0/0&nbsp;&nbsp; to: 0.0.0.0/0&nbsp;&nbsp; via: 127.0.0.1 port = 8888<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protocol: tcp udp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # server supports tcp and udp.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxyprotocol: socks_v4 socks_v5 # server supports socks v4 and v5.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method: none #username&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # we are willing to authenticate via<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # method "none", not "username".<br />}<br /><br />설정이 어떤 의미를 가지는지는 주석이 다 설명해주고 있으므로 패스~<br /><br />이제<br /><br />socksify ssh user@hostB<br /><br />라고 명령을 내리면 socksify뒤에 오는 명령이 접속하려는 네트웍접속은 후킹되어서 자동으로 socks proxy를 통해서 나가게 된다. socksify는 ssh뿐만 아니라 기본으로 proxy설정을 지원하지 않는 어플리케이션에도&nbsp; 모두 사용할 수 있다는 장점이 있다.<br />]]>
        
    </content>
</entry>

<entry>
    <title>Shebang Line을 바로쓰자</title>
    <link rel="alternate" type="text/html" href="http://aero.sarang.net/blog/2009/07/shebang-line.html" />
    <id>tag:aero.sarang.net,2009:/blog//1.140</id>

    <published>2009-07-27T06:26:43Z</published>
    <updated>2009-07-27T08:28:01Z</updated>

    <summary>보통 UNIX Shell Script를 만들 때 파일의 첫 줄에#!/bin/sh처럼 넣는...</summary>
    <author>
        <name>aero</name>
        <uri>http://aero.sarang.net/blog</uri>
    </author>
    
    <category term="perl" label="Perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="shebangline" label="Shebang Line" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="windows" label="Windows" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://aero.sarang.net/blog/">
        <![CDATA[보통 UNIX Shell Script를 만들 때 파일의 첫 줄에<br /><br />#!/bin/sh<br /><br />처럼 넣는 것을 <a href="http://en.wikipedia.org/wiki/Shebang_%28Unix%29">shebang line</a>이라고 한다.<br /><br />이것은 어떤 스크립트파일이 실행될 수 있도록 권한을 주고 해당 스크립트를 실행시켰을 때 shebang line 이후의 줄들을 어떤 명령이 해석할 것인가를 지정해주는 것으로 Perl같은 동적 스크립트언어( Python,Ruby도 마찬가지)에도 마찬가지로 다음과 같이 적용된다.<br /><br />&lt;test.pl&gt;<br />#!/usr/bin/perl<br />print "Hello World\n";<br /><br />&lt;실행&gt;<br />chmod a+x test.pl<br />./test.pl<br /><br />만약에 shebang line이 없는 상태에서 적절한 해석기를 통해 실행시키려면<br /><br />perl test.pl<br /><br />처럼 [스크립트해석기] [스크립트] 형식으로 명령을 실행시켜야 할 것이다. 이 경우에는 해석기를 지정하여 스크립트를 실행시키므로 스크립트 파일에 굳이 shebang line을 쓸 필요가 없다.<br /><br />그런데 가끔 보면 Windows용 Perl ( <a href="http://www.activestate.com/activeperl/">Activestate Perl</a> 또는 <a href="http://strawberryperl.com/">Strawberry Perl</a> )을 사용해서 Perl 프로그래밍 하는 사람들이 <br /><br />#!C:/Perl/bin/perl.exe<br /><br />print "Hello World\n";<br /><br />이런식으로 UNIX에서 했던 것과 같이 perl실행파일이 있는 Windows 드라이브 상의 path를 그대로 요상한 모양으로 적어주는 경우를 종종 보는데, 간단히 결론만 말하자면 Windows에서는 shebang line은 아무런 의미가 없다.<br /><br />스크립트를 Perl을 통해 실행시키고자 하면 unix에서와 마찬가지로 perl 바이너리가 path에 잡혀 있다면<br /><br />perl test.pl<br /><br />하면 실행된다. 그럼 unix에서 스크립트 파일을 실행가능하도록 해서 스크립트 파일이름만으로 실행되게 하려면 어떻게 해야할까?<br /><br />방법은 단지 Windows가 특정확장자의 파일을 어떤 실행파일을 통해서 열 것인가를 지정하는 기능을 사용하는 것이다.( txt파일을 더블클릭하면 notepad가 실행되며 파일이 열리는 것을 떠올리면 됨 ) 이것은 파일탐색기 메뉴를 통해서 설정할 수도 있고 다음과 같은 dos명령을 통해서도 설정할 수 있다.<br /><br />ASSOC .pl=PerlScript<br />FTYPE PerlScript=C:\strawberry\perl\bin\perl.exe %1 %*<br /><br />하지만 개인적으로 Windows에서 이런 식으로 사용하는 건 별로 좋아하지 않는다.<br /><br />다시 말하면 Windows에서 shebang line은 단지 장식용(?)일 뿐이다. 따라서 응용력을 과도하게 발휘해서 이상한 모양의 shebang line을 쓰지말고 나중에 UNIX에 가져가서라도 그냥 쓸 수 있게 보통 UNIX에서 하던 것처럼 그냥&nbsp; #!/usr/bin/perl 이라고 해주자.<br /><br />그런데 UNIX에서도 shebang line이 꼭 #!/usr/bin/perl 일 필요는 없다. 대게는 UNIX에서 기본으로 perl 바이너리가 /usr/bin에 있기 때문에 저렇게 쓰는 것이지 만약에 자신만의 Perl을 소스를 받아서 따로 컴파일해서 /usr/local/bin/perl 에 깔았고 그 Perl을 이용하고 싶으면&nbsp; shebang line을&nbsp; #!/usr/local/bin/perl 이라고 지정하면 된다.<br /><br />그런데 시스템에 여러 종류의 Perl이 존재할 경우 필요할 때마다 shebang line을 변경하는 것은 매우 귀찮은 일일 것이다. 이런 경우에는 스크립트 소스는 건드리지 않고 PATH 환경변수만 적절하게 바꿔서 유연하게 사용할 수 있는 방법이 있다.<br /><br />사용하고 싶은 Perl 바이너리가 있는 경로를 PATH환경변수에 세팅하고 ( 만약 perl 바이너리가 PATH환경변수의 여러 곳에 있다면 예- /usr/local/bin, /usr/bin PATH환경변수에 먼저 나오는 것이 우선된다. )<br /><br />#!/usr/bin/env perl<br /><br />이라고 shebang line을 적어주면 PATH환경변수에서 가장 우선되는 perl 바이너리를 찾아 스크립트를 실행한다.<br /><br />여기서 env는 뒤따르는 명령의 수정된 환경변수를 스크립트 해석시 적용하는 명령이다. perl은 컴파일되서 설치될 때 자신만의 고유의 라이브러리 경로등의 정보를 가지는데, 따라서 어떤 perl 바이너리가 실행되느냐에 따라 그러한 정보들이 다르게 적용되므로 env를 통해서 실제 실행되는 바이너리의 환경을 자동으로 적용될 수 있게 해주는 것이다.<br /><br /> ]]>
        
    </content>
</entry>

<entry>
    <title>Catalyst vs Ruby on Rails</title>
    <link rel="alternate" type="text/html" href="http://aero.sarang.net/blog/2009/07/catalyst-vs-ruby-on-rails.html" />
    <id>tag:aero.sarang.net,2009:/blog//1.139</id>

    <published>2009-07-03T13:30:08Z</published>
    <updated>2009-07-06T13:39:16Z</updated>

    <summary><![CDATA[ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ruby on Rails는 Perl, Python에 밀려&nbsp; 그렇게 주목받지...]]></summary>
    <author>
        <name>aero</name>
        <uri>http://aero.sarang.net/blog</uri>
    </author>
    
    <category term="catalyst" label="catalyst" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="성능비교" label="성능비교" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="performance" label="performance" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="Perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ruby" label="Ruby" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="rubyonrails" label="Ruby on Rails" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://aero.sarang.net/blog/">
        <![CDATA[<img src="http://www.wikivs.com/images/8/8f/Catalyst_logo.png" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<img src="http://www.wikivs.com/images/1/1d/Rails.png" />

<br /><br /><br /><a href="http://rubyonrails.org/">Ruby on Rails</a>는 Perl, Python에 밀려&nbsp; 그렇게 주목받지 못하던 Ruby라는 언어를 화려한 주류언어의 무대로 끌어올린 대표적인 스타 웹프레임웍이다.<br /><br />Perl하면 옛날의 CGI기반 게시판 등 고리타분 한 인식을 가진 사람들도 있겠지만 그건 호랑이 담배피던 시절 이야기고 현재에는 Perl에도 Ruby on Rails 못지않은 <a href="http://www.perlfoundation.org/perl5/index.cgi?web_frameworks">많은 MVC기반 웹 프레임웍</a>들이 존재한다. 그중에서 제일 대표적인 것이 <a href="http://www.catalystframework.org/">Catalyst</a>인데 최근 Ruby on Rails와 Catalyst의 성능을 비교한 흥미로운 글이 있어 소개하려고 한다.<br /><br />예전 2009년 4월 Victor Igumnov란 사람이 <a href="http://letsgetdugg.com/2009/04/19/catalyst-vs-rails-vs-django-cook-off/">Catalyst vs Ruby on Rails의 성능을 비교한 글</a>이 있었는데 그때 당시 결과는 Ruby on Rails 가 Catalyst 보다 약 62%정도 빨랐다. 그래서 인터프리터의 성능이 여타 언어보다 빠르다고 알려진 Perl이 비교적 느리다는 Ruby에서 구현된 웹프레임웍 보다 성능이 떨어지는데 의문을 품고 분석한 결과 Catalyst의 Controller구현에서 다중상속에서 메소드의 연속적 호출에 쓰이는 <a href="http://search.cpan.org/dist/NEXT/">NEXT 모듈</a>의 병목 때문에 성능이 떨어짐을 알아내고 Catalyst개발자에게 알려 이것을 새로운 <a href="http://search.cpan.org/dist/Catalyst-Plugin-C3/">C3 모듈</a>로 교체하여 성능을 개선했는데<br /><br />그 후 이런 개선사항이 반영된 새로운 Catalyst 5.8 버젼으로 <a href="http://letsgetdugg.com/2009/04/30/catalyst-vs-rails-round-two/">다시 둘의 성능을 비교했더니</a> 놀랍게도 Catalyst가 single process일때 Ruby on Rails 보다 <b>135%</b>, forking 된 multi process 환경에서는 <b>471%</b> 빨랐다고 한다.<br /><br />Catalyst는 약간의 진입 장벽은 있지만 여타 프레임웍과는 다르게 ORM과 Template엔진을 필요에 따라 여러 가지로 교체해서 사용할 수 있어 개방적이고 확장성이 뛰어나다고 알려져 있다.<br /><br />그런데 벤치마크결과에서 더 놀라운 것은 성능이 대폭적으로 향상된 Catalyst 5.8은 예전 5.7대 버젼에서는 OOP구현을 위해 <a href="http://search.cpan.org/dist/Class-Accessor/">Class::Accessor::Fast</a> 라는 모듈을 사용한데 반해 <a href="http://www.iinteractive.com/moose/">Moose</a> 라는 Meta Object Protocol 기반의 진보된 OOP프레임웍으로 교체하였다는 것이다. Moose는 다소 번거로움이 많았던 Perl OOP구현을 어느 언어보다 편리하고 획기적이며 진보적인 방법으로 할 수 있도록 발전시킨 OOP프레임웍으로 다소 메모리를 좀 더 소비하고 속도가 떨어진다는 비판을 받았는데 Moose가 기반이 된 Catalyst 5.8의 성능이 이 정도로 나오는 걸 보면 그런 걱정은 기우에 지나지 않았나 생각된다.<br /><br />Catalyst가 쓰이는 대표적인 서비스로는 일본 최대의 Social Network 싸이트인 <a href="http://mixi.jp/">mixi</a>, 세계 최대규모 도색 동영상 싸이트 중 하나인 <a href="http://en.wikipedia.org/wiki/YouPorn">Youporn</a>( Alexa 싸이트순위 44위 참고로 우리나라 최대 포털 naver는 60위권) 영국 BBC의 <a href="http://news.bbc.co.uk/">BBC News</a>, <a href="http://www.bbc.co.uk/iplayer/">BBC iplayer</a>, <a href="http://www.vox.com/">Vox</a>, <a href="http://www.ticketmaster.com/">Ticketmaster</a>, <a href="http://www.shopzilla.com/">Shopzilla</a>, Takkle, Editgrid, IUseThis, MighTyV 등이 있다. ( <a href="http://dev.catalyst.perl.org/wiki/SitesRunningCatalyst">Site running Catalyst</a> )<br /><br />
Perl Catalyst 한 번 해보시지 않으시겠습니까?<br /><br />참고: 또 다른 <a href="http://www.wikivs.com/wiki/Catalyst_vs_Ruby_on_Rails">Catalyst vs Ruby on Rails</a> 자료<br /><br />]]>
        
    </content>
</entry>

<entry>
    <title>serverfault.com 을 아십니까?</title>
    <link rel="alternate" type="text/html" href="http://aero.sarang.net/blog/2009/06/serverfaultcom.html" />
    <id>tag:aero.sarang.net,2009:/blog//1.138</id>

    <published>2009-06-16T07:25:51Z</published>
    <updated>2009-06-16T07:37:47Z</updated>

    <summary> Na*er 지식인 같이 프로그래머들이 각종 언어에 대한 질문과 답변을...</summary>
    <author>
        <name>aero</name>
        <uri>http://aero.sarang.net/blog</uri>
    </author>
    
    <category term="시스템관리" label="시스템관리" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="serverfaultcom" label="serverfault.com" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="systemadministration" label="system administration" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://aero.sarang.net/blog/">
        <![CDATA[<img src="http://serverfault.com/content/img/sf/logo.png" />

<br /><br />Na*er 지식인 같이 프로그래머들이 각종 언어에 대한 질문과 답변을 올려서 지식을 공유하는 <a href="http://stackoverflow.com/">Stack Overflow</a> 라는 알만한 사람들은 다 아는 싸이트가 현재 인기리에 운영중인데, 해당 업체에서 그 자매 뻘 정도 되는 시스템관리자들을 위한 질문과 답변 싸이트를 오픈했다. 이름하야 Server Fault !!<br /><br />링크:&nbsp; <a href="http://serverfault.com/">Server Fault</a><br /><br />뇌리에 팍팍 와 닿는 얘들의 작명센스 하나는 인정~<br /><br />]]>
        
    </content>
</entry>

<entry>
    <title>An Introduction to the Design of Warehouse-Scale Machines</title>
    <link rel="alternate" type="text/html" href="http://aero.sarang.net/blog/2009/05/an-introduction-to-the-design.html" />
    <id>tag:aero.sarang.net,2009:/blog//1.137</id>

    <published>2009-05-19T13:53:13Z</published>
    <updated>2009-05-19T14:24:33Z</updated>

    <summary>구글의 인프라는 관련 싸이트에서도 보다시피 거대한 창고에 컨테이너랙들을 배치할 정도로...</summary>
    <author>
        <name>aero</name>
        <uri>http://aero.sarang.net/blog</uri>
    </author>
    
    <category term="구글" label="구글" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="google" label="google" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="idc" label="IDC" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="시스템관리" label="시스템관리" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="인프라" label="인프라" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://aero.sarang.net/blog/">
        <![CDATA[구글의 인프라는 <a href="http://www.google.com/corporate/green/datacenters/summit.html">관련 싸이트</a>에서도 보다시피 거대한 창고에 컨테이너랙들을 배치할 정도로 큰 규모를 가진 만큼 어떻게 효율적인 인프라를 구축하고 비용을 줄일 것인가에 대해서도 규모에 걸맞게 스케일 크게 고민하고 있다.<br /><br />최근 구글이 이런 거대규모 인프라를 어떻게 설계했는지를 소개하는 120여 페이지에 이르는 문서를 새로 내놓았다.<br /><br /><a href="http://www.morganclaypool.com/doi/pdf/10.2200/S00193ED1V01Y200905CAC006">문서링크1</a> 또는 <a href="http://www.morganclaypool.com/doi/pdfplus/10.2200/S00193ED1V01Y200905CAC006">문서링크2</a><br /><br />문서에 많은 그림과 그래프가 삽입되어 있어서 지루하지 않고 재미있게 볼 수 있을 듯...<br /><br />]]>
        
    </content>
</entry>

</feed>
