<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3526487000938261036</id><updated>2012-02-17T11:49:45.457+09:00</updated><category term='squid'/><category term='nat'/><category term='IPv6'/><category term='IEEE EUI-64'/><category term='멀티미디어'/><category term='책'/><category term='재테크'/><category term='erlang'/><category term='sftp'/><category term='컴퓨팅'/><category term='apt-get'/><category term='boost'/><category term='리눅스'/><category term='windows'/><category term='ssh'/><category term='freebsd'/><category term='network'/><category term='rebar'/><category term='odbc'/><category term='cas'/><category term='IEEE 802 MAC'/><category term='프로그래밍'/><category term='삶'/><title type='text'>Core-Station :: Client-Server</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.ersoul.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default?start-index=26&amp;max-results=25'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>57</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-4282223541038015800</id><published>2012-02-09T17:51:00.002+09:00</published><updated>2012-02-09T17:51:54.176+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='rebar'/><title type='text'>rebar 에서 소스를 함께 배포하려면.</title><content type='html'>&lt;a href="https://github.com/basho/rebar"&gt;rebar&lt;/a&gt; 에서 rel/reltool.config 의&amp;nbsp; {profile, embedded} 를 주석처리하면&lt;br /&gt;&lt;br /&gt;src 도 같이 복사가 된다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-4282223541038015800?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/4282223541038015800/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2012/02/rebar.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/4282223541038015800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/4282223541038015800'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2012/02/rebar.html' title='rebar 에서 소스를 함께 배포하려면.'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-103091296146504970</id><published>2012-01-05T17:47:00.001+09:00</published><updated>2012-01-05T17:47:54.617+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IPv6'/><category scheme='http://www.blogger.com/atom/ns#' term='IEEE 802 MAC'/><category scheme='http://www.blogger.com/atom/ns#' term='IEEE EUI-64'/><title type='text'>IPv6 인터페이스 식별자</title><content type='html'>&lt;br /&gt;&lt;div class="title" style="font-family: Arial, Helvetica, sans-serif; font-size: 21px; font-weight: bold; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;IPv6 인터페이스 식별자&lt;/div&gt;&lt;div id="mainSection"&gt;&lt;div id="mainBody"&gt;&lt;h2 class="heading" style="font-size: 13px; margin-bottom: 8px; margin-top: 18px;"&gt;IPv6 인터페이스 식별자&lt;/h2&gt;&lt;div class="section" id="sectionSection0"&gt;&lt;div style="margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;IPv6 주소의 마지막 64비트는 IPv6 주소의 64비트 접두사에 고유한 인터페이스 식별자입니다. 인터페이스 식별자를 규정하는 방식은 다음과 같습니다.&lt;/div&gt;&lt;ul style="line-height: 15px; list-style-position: outside; margin-bottom: 15px;"&gt;&lt;li style="list-style-image: url(http://i3.technet.microsoft.com/Platform/MasterPages/Library/b.gif); margin-bottom: 3px; margin-left: 0px;"&gt;RFC 2373에서는 접두사 001에서 111까지 사용하는 모든 유니캐스트 주소는 EUI(확장 고유 식별자)-64 주소에서 파생된 64비트 인터페이스 식별자를 사용해야 한다고 설명합니다.&amp;nbsp;&lt;/li&gt;&lt;li style="list-style-image: url(http://i3.technet.microsoft.com/Platform/MasterPages/Library/b.gif); margin-bottom: 3px; margin-left: 0px;"&gt;RFC 3041에서는 익명 수준을 제공하기 위해 시간에 따라 변하며 임의로 생성되는 인터페이스 식별자에 대해 설명합니다.&amp;nbsp;&lt;/li&gt;&lt;li style="list-style-image: url(http://i3.technet.microsoft.com/Platform/MasterPages/Library/b.gif); margin-bottom: 3px; margin-left: 0px;"&gt;인터페이스 식별자는 DHCPv6 등을 통해 상태 저장 주소 자동 구성 중에 할당됩니다. DHCPv6 표준은 현재 정의 중입니다.&amp;nbsp;&lt;/li&gt;&lt;li style="list-style-image: url(http://i3.technet.microsoft.com/Platform/MasterPages/Library/b.gif); margin-bottom: 3px; margin-left: 0px;"&gt;인터페이스 식별자는 수동으로 구성됩니다.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;h2 class="heading" style="font-size: 13px; margin-bottom: 8px; margin-top: 18px;"&gt;EUI-64 주소 기반 인터페이스 식별자&lt;/h2&gt;&lt;div class="section" id="sectionSection1"&gt;&lt;div style="margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;64비트 EUI-64 주소는 IEEE(Institute of Electrical and Electronic Engineers)에서 정의합니다. EUI-64 주소는 네트워크 어댑터에 할당되거나 IEEE 802 주소에서 파생됩니다.&lt;/div&gt;&lt;/div&gt;&lt;h2 class="heading" style="font-size: 13px; margin-bottom: 8px; margin-top: 18px;"&gt;IEEE 802 주소&lt;/h2&gt;&lt;div class="section" id="sectionSection2"&gt;&lt;div style="margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;네트워크 어댑터의 일반적인 인터페이스 식별자는 IEEE 802 주소라고 하는 48비트 주소를 사용합니다. 이 주소는 제조업체 ID라고도 하는 24비트 회사 ID와 보드 ID라고도 하는 24비트 확장 ID로 구성됩니다. 네트워크 어댑터의 각 제조업체에 고유하게 할당된 회사 ID와 조립 시 각 네트워크 어댑터에 고유하게 할당되는 보드 ID를 조합하여 전역적으로 고유한 48비트 주소를 생성합니다. 이 48비트 주소는 실제 주소, 하드웨어 주소 또는 MAC(미디어 액세스 제어) 주소라고도 합니다.&lt;/div&gt;&lt;img alt="48비트 IEEE 802 주소의 구조" src="http://i.technet.microsoft.com/cc736439.13651be5-7fb3-41b8-89f8-03e5033ad5cf(ko-kr,WS.10).gif" /&gt;&lt;div style="margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;IEEE 802 주소 내에 정의된 비트는 다음과 같습니다.&lt;/div&gt;&lt;ul style="line-height: 15px; list-style-position: outside; margin-bottom: 15px;"&gt;&lt;li style="list-style-image: url(http://i3.technet.microsoft.com/Platform/MasterPages/Library/b.gif); margin-bottom: 3px; margin-left: 0px;"&gt;U/L(유니버설/로컬)&lt;br /&gt;U/L 비트는 첫째 바이트의 일곱 번째 비트이며 주소를 유니버설하게 관리할지 로컬로 관리할지 여부를 결정하는 데 사용됩니다. U/L 비트를 0으로 설정하면 고유한 회사 ID를 지정하여 IEEE에서 주소를 관리합니다. U/L 비트를 1로 설정하면 주소를 로컬로 관리합니다. 네트워크 관리자는 제조업체 주소를 무시하고 다른 주소를 지정합니다.&lt;/li&gt;&lt;li style="list-style-image: url(http://i3.technet.microsoft.com/Platform/MasterPages/Library/b.gif); margin-bottom: 3px; margin-left: 0px;"&gt;I/G(개별/그룹)&lt;br /&gt;I/G 비트는 첫째 바이트의 하위 비트이며 주소가 개별 주소(유니캐스트)인지 그룹 주소(멀티캐스트)인지 여부를 결정하는 데 사용됩니다. 0으로 설정하면 유니캐스트 주소가 되고 1로 설정하면 멀티캐스트 주소가 됩니다.&lt;/li&gt;&lt;/ul&gt;&lt;div style="margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;일반 802.x 네트워크 어댑터 주소의 경우 U/L과 I/G 비트 모두 0으로 설정되며 유니버설하게 관리되는 유니캐스트 MAC 주소에 해당합니다.&lt;/div&gt;&lt;/div&gt;&lt;h2 class="heading" style="font-size: 13px; margin-bottom: 8px; margin-top: 18px;"&gt;IEEE EUI-64 주소&lt;/h2&gt;&lt;div class="section" id="sectionSection3"&gt;&lt;div style="margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;IEEE EUI-64 주소는 네트워크 인터페이스 주소를 지정하는 데 사용하는 새로운 표준입니다. 회사 ID의 길이는 여전히 24비트이지만 확장 ID는 40비트로 늘어나 네트워크 어댑터 제조업체를 위해 훨씬 큰 주소 공간이 만들어집니다. EUI-64 주소는 IEEE 802 주소와 같은 방식으로 U/L 및 I/G 비트를 사용합니다.&lt;/div&gt;&lt;img alt="EUI-64 주소의 구조" src="http://i.technet.microsoft.com/cc736439.aacd7abc-9dbc-479b-9301-493d5cc26882(ko-kr,WS.10).gif" /&gt;&lt;/div&gt;&lt;h2 class="heading" style="font-size: 13px; margin-bottom: 8px; margin-top: 18px;"&gt;IEEE 802 주소와 EUI-64 주소 매핑&lt;/h2&gt;&lt;div class="section" id="sectionSection4"&gt;&lt;div style="margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;IEEE 802 주소에서 EUI-64 주소를 만들려면 11111111 11111110(0xFFFE)의 16비트를 회사 ID와 확장 ID 사이의 IEEE 802 주소에 삽입합니다. 다음 그림은 IEEE 802 주소를 EUI-64 주소로 변환하는 것을 보여 줍니다.&lt;/div&gt;&lt;img alt="IEEE 802 주소에서 EUI-64 주소로 변환" src="http://i.technet.microsoft.com/cc736439.a655a650-11bd-4b7d-bfe7-ed8d7eb3e48a(ko-kr,WS.10).gif" /&gt;&lt;/div&gt;&lt;h2 class="heading" style="font-size: 13px; margin-bottom: 8px; margin-top: 18px;"&gt;EUI-64 주소와 IPv6 인터페이스 식별자 매핑&lt;/h2&gt;&lt;div class="section" id="sectionSection5"&gt;&lt;div style="margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;IPv6 유니캐스트 주소의 64비트 인터페이스 식별자를 얻으려면 EUI-64 주소의 U/L 비트를 보완합니다. 즉, 1인 경우 0으로 설정하고 0인 경우 1로 설정합니다. 다음 그림은 유니버설하게 관리되는 유니캐스트 EUI-64 주소에 대한 변환을 보여 줍니다.&lt;/div&gt;&lt;img alt="IPv6 식별자로 변환된 EUI-64 주소" src="http://i.technet.microsoft.com/cc736439.183c5c38-e3d4-4449-ba91-1a513453369e(ko-kr,WS.10).gif" /&gt;&lt;div style="margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;IEEE 802 주소에서 IPv6 인터페이스 식별자를 얻으려면 먼저 IEEE 802 주소를 EUI-64 주소로 매핑한 다음 U/L 비트를 보완해야 합니다. 다음 그림은 유니버설하게 관리되는 유니캐스트 IEEE 802 주소에 대한 변환 과정을 보여 줍니다.&lt;/div&gt;&lt;img alt="IPv6 식별자로 변환된 IEEE 802 주소" src="http://i.technet.microsoft.com/cc736439.b947a30a-487b-46fa-998e-f4302e6e2db2(ko-kr,WS.10).gif" /&gt;&lt;/div&gt;&lt;h2 class="heading" style="font-size: 13px; margin-bottom: 8px; margin-top: 18px;"&gt;IEEE 802 주소 변환 예제&lt;/h2&gt;&lt;div class="section" id="sectionSection6"&gt;&lt;div style="margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;호스트 A에는 이더넷 MAC 주소 00-AA-00-3F-2A-1C가 있다고 가정합니다. 먼저 이 주소는 세 번째와 네 번째 바이트 사이에 FF-FE가 삽입되어 EUI-64 형식으로 변환되고 00-AA-00-FF-FE-3F-2A-1C를 생성합니다. 그런 다음 첫째 바이트에서 일곱 번째 비트인 U/L 비트를 보완합니다. 이진 형식의 첫째 바이트는 00000000입니다. 일곱 번째 비트를 보완하면 00000010(0x02)이 됩니다. 최종 주소는 02-AA-00-FF-FE-3F-2A-1C이며 콜론으로 구분된 16진수 표시법으로 변환하면 인터페이스 식별자는 2AA:FF:FE3F:2A1C가 됩니다. 결과적으로 MAC 주소가 00-AA-00-3F-2A-1C인 네트워크 어댑터에 해당하는 로컬 링크 주소는 FE80::2AA:FF:FE3F:2A1C입니다.&lt;/div&gt;&lt;div style="margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong&gt;참고&lt;/strong&gt;&lt;/div&gt;&lt;ul style="line-height: 15px; list-style-position: outside; margin-bottom: 15px;"&gt;&lt;li style="list-style-image: url(http://i3.technet.microsoft.com/Platform/MasterPages/Library/b.gif); margin-bottom: 3px; margin-left: 0px;"&gt;U/L 비트를 보완할 때 EUI-64 주소가 유니버설하게 관리되는 경우에는 첫 번째 바이트에 0x2를 더하고 EUI-64 주소가 로컬로 관리되는 경우에는 첫 번째 바이트에서 0x2를 뺍니다.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;a href="" id="anon" style="color: #0033cc; text-decoration: none;"&gt;&lt;/a&gt;&lt;h2 class="heading" style="font-size: 13px; margin-bottom: 8px; margin-top: 18px;"&gt;임시 주소 인터페이스 식별자&lt;/h2&gt;&lt;div class="section" id="sectionSection7"&gt;&lt;div style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;현재 IPv4 기반 인터넷을 사용하는 일반 인터넷 사용자는 ISP(인터넷 서비스 공급자)에 연결한 다음 PPP(지점간 프로토콜)와 IPCP(Internet Protocol Control Protocol)를 사용하여 IPv4 주소를 가져옵니다. 사용자가 연결할 때마다 다른 IPv4 주소를 가져올 수 있으므로 IP 주소를 기반으로 하는 인터넷에서는 사용자 트래픽을 추적하기 어렵습니다.&lt;/div&gt;&lt;div style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;IPv6 기반 전화 접속 연결의 경우 라우터 검색과 상태 비저장 주소 자동 구성을 통해 연결된 후에 사용자에게 64비트 접두사가 할당됩니다. 인터페이스 식별자가 정적 IEEE 802 주소에서 파생된 것과 같이 항상 EUI-64 주소를 기반으로 하는 경우 접두사에 관계없이 특정 노드의 트래픽을 식별할 수 있으므로 특정 사용자와 그 사용자의 인터넷 사용을 추적하기 쉽습니다. 이 문제를 해결하고 익명 수준을 제공하기 위해 임의로 생성되며 시간에 따라 변하는 대체 IPv6 인터페이스 식별자는 RFC 3041에 설명되어 있습니다.&lt;/div&gt;&lt;div style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;첫 번째 인터페이스 식별자는 임의의 숫자를 사용하여 생성됩니다. 나중에 인터페이스 식별자 값을 생성하기 위해 기록 정보를 저장할 수 없는 IPv6 시스템의 경우에는 IPv6 프로토콜을 초기화할 때마다 새 임의 인터페이스 식별자가 생성됩니다. 저장 기능이 있는 IPv6 시스템의 경우 기록 값이 저장되고 IPv6 프로토콜이 초기화되면 다음 과정을 통해 새 인터페이스 식별자가 만들어집니다.&lt;/div&gt;&lt;ol class="ordered" style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 15px; margin-bottom: 15px;"&gt;&lt;li style="margin-bottom: 3px; margin-left: 0px;"&gt;저장소에서 기록 값을 검색하여 어댑터의 EUI-64 주소를 기반으로 하는 인터페이스 식별자를 추가합니다.&amp;nbsp;&lt;/li&gt;&lt;li style="margin-bottom: 3px; margin-left: 0px;"&gt;1단계에서 검색한 값으로 MD5(Message Digest-5) 단방향 암호화 해시를 계산합니다.&amp;nbsp;&lt;/li&gt;&lt;li style="margin-bottom: 3px; margin-left: 0px;"&gt;다음 인터페이스 식별자를 계산하기 위해 2단계에서 계산한 MD5 해시의 마지막 64비트를 기록 값으로 저장합니다.&amp;nbsp;&lt;/li&gt;&lt;li style="margin-bottom: 3px; margin-left: 0px;"&gt;2단계에서 계산한 MD5 해시의 처음 64비트를 사용하고 일곱 번째 비트를 0으로 설정합니다. 일곱 번째 비트는 U/L 비트에 해당하며 0으로 설정하면 로컬에서 관리되는 인터페이스 식별자를 나타냅니다. 이렇게 하면 인터페이스 식별자가 만들어집니다.&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&lt;div style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;이러한 임시 인터페이스 식별자를 기반으로 만들어진 IPv6 주소를 임시 주소라고 합니다. 임시 주소는 상태 비저장 주소 자동 구성 방식을 사용하는 공개 주소 접두사에 대해 생성됩니다. 임시 주소는 유효 수명과 기본 수명의 다음 값 중 더 작은 값에 사용됩니다.&lt;/div&gt;&lt;ul style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 15px; list-style-position: outside; margin-bottom: 15px;"&gt;&lt;li style="list-style-image: url(http://i3.technet.microsoft.com/Platform/MasterPages/Library/b.gif); margin-bottom: 3px; margin-left: 0px;"&gt;수신한 라우터 알림 메시지의 접두사 정보 옵션에 포함된 수명&amp;nbsp;&lt;/li&gt;&lt;li style="list-style-image: url(http://i3.technet.microsoft.com/Platform/MasterPages/Library/b.gif); margin-bottom: 3px; margin-left: 0px;"&gt;유효 수명은 일주일, 기본 수명은 하루인 로컬 기본값&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;div style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-bottom: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;임시 주소의 유효 수명이 만료되면 새 인터페이스 식별자와 임시 주소가 생성됩니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;출처 :&amp;nbsp;&lt;a href="http://technet.microsoft.com/ko-kr/library/cc736439(WS.10).aspx"&gt;http://technet.microsoft.com/ko-kr/library/cc736439(WS.10).aspx&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-103091296146504970?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/103091296146504970/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2012/01/ipv6.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/103091296146504970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/103091296146504970'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2012/01/ipv6.html' title='IPv6 인터페이스 식별자'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-350756472660203004</id><published>2012-01-04T15:26:00.001+09:00</published><updated>2012-01-04T15:26:09.714+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><title type='text'>binary_to_integer, integer_to_binary</title><content type='html'>&lt;br /&gt;binary_to_integer(Bin)-&amp;gt; erlang:list_to_integer(bin_to_hex(Bin), 16).&lt;br /&gt;&lt;br /&gt;bin_to_hex(Bin) -&amp;gt; [hd(erlang:integer_to_list(I, 16)) || &amp;lt;&amp;lt; I:4 &amp;gt;&amp;gt; &amp;lt;= Bin ].&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;integer_to_binary(Int)-&amp;gt; hex_to_bin(erlang:integer_to_list(Int, 16)).&lt;br /&gt;&lt;br /&gt;hex_to_bin(Str) -&amp;gt; &amp;lt;&amp;lt; &amp;lt;&amp;lt; (erlang:list_to_integer([H], 16)):4 &amp;gt;&amp;gt; || H &amp;lt;- Str &amp;gt;&amp;gt;.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Hint from :&amp;nbsp;&lt;a href="http://stackoverflow.com/questions/965038/hex-to-64-signed-decimal"&gt;http://stackoverflow.com/questions/965038/hex-to-64-signed-decimal&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-350756472660203004?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/350756472660203004/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2012/01/binarytointeger-integertobinary.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/350756472660203004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/350756472660203004'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2012/01/binarytointeger-integertobinary.html' title='binary_to_integer, integer_to_binary'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-3200493349696503162</id><published>2012-01-04T11:31:00.001+09:00</published><updated>2012-01-04T11:33:03.799+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apt-get'/><category scheme='http://www.blogger.com/atom/ns#' term='squid'/><title type='text'>프록시 서버뒤에서 apt-get 사용하기</title><content type='html'>프록시 서버 (squid) 뒤에서 apt-get 을 사용하려면 아래와 같이 하면 된다.&lt;br /&gt;&lt;br /&gt;1. squid 설정&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; /etc/squid/squid.conf 를 보면 아래와 같이 acl 부분이 있다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; 자신의 로컬네트워크 주소가 없으면 추가한다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;acl localnet src 10.0.0.0/8&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;acl localnet src 172.16.0.0./12&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;acl localnet src 192.168.0.0/16&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;그리고 http_access 를 허용하기 위해서 localhost 주석처리하고 localnet 을 살린다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #http_access allow localhost&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; http_access allow localnet&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;squid 를 재시작 한다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $ service squid restart&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. 프록시 서버에 접근할 클라이언트 설정&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;프록시 서버에 대한 정보를 &amp;nbsp;/etc/bash.bashrc 에 추가한다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;단, squid listen port (3128) 가 바뀌지 않았다고 가정한다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; export http_proxy=http://squid_서버주소:3128/&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; export ftp_proxy=http://squid_서버주소:3128/&lt;br /&gt;&lt;br /&gt;3. apt-get 명령을 하면 잘 될 것이다. ( source /etc/bash.bashrc 또는 다시 로그인!!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-3200493349696503162?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/3200493349696503162/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2012/01/apt-get.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/3200493349696503162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/3200493349696503162'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2012/01/apt-get.html' title='프록시 서버뒤에서 apt-get 사용하기'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-6990099098423369772</id><published>2012-01-03T21:49:00.003+09:00</published><updated>2012-01-03T21:50:07.316+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nat'/><title type='text'>Peer-to-Peer Communication Across Network Address Translators</title><content type='html'>번역문&amp;nbsp;&lt;a href="http://lshsblog.blogspot.com/2011/04/hole-punching_18.html"&gt;http://lshsblog.blogspot.com/2011/04/hole-punching_18.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; border-collapse: collapse; color: #8a837e; font-family: 돋움; font-size: 12px; line-height: 18px;"&gt;원문 :&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; border-collapse: collapse; color: #8a837e; font-family: 돋움; font-size: 12px; line-height: 18px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; border-collapse: collapse; color: #8a837e; font-family: 돋움; font-size: 12px; line-height: 18px;"&gt;&lt;a class="con_link" closure_hashcode_ndtm5a="4" href="http://www.brynosaurus.com/pub/net/p2pnat/" id="ocnz" style="color: #888888; text-decoration: none; word-wrap: break-word;" target="_blank" title="http://www.brynosaurus.com/pub/net/p2pnat/"&gt;http://www.brynosaurus.com/pub/net/p2pnat/&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-6990099098423369772?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/6990099098423369772/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2012/01/peer-to-peer-communication-across.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/6990099098423369772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/6990099098423369772'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2012/01/peer-to-peer-communication-across.html' title='Peer-to-Peer Communication Across Network Address Translators'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-7842031976075098425</id><published>2011-12-28T03:21:00.002+09:00</published><updated>2011-12-28T03:21:17.571+09:00</updated><title type='text'></title><content type='html'>&lt;a href="http://blog.naver.com/PostList.nhn?blogId=dw21008&amp;amp;categoryNo=33&amp;amp;currentPage=12"&gt;&lt;span class="pcol1 itemSubjectBoldfont" style="background-color: white; color: #009e25; display: inline; font-family: 돋움; font-size: 18px; font-weight: bold; letter-spacing: -1px; text-align: left;"&gt;CAS(Conditional Access System) 동작원리에 대하여&lt;/span&gt;&lt;span style="background-color: white; font-family: 돋움; font-size: 12px; text-align: left;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="autosourcing-stub-extra" style="background-color: white; font-family: 돋움; font-size: 12px; opacity: 0; position: absolute; text-align: left;"&gt;&lt;div style="font-family: Dotum; margin-bottom: 7px; margin-top: 11px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="padding-bottom: 0px; padding-left: 0px; padding-right: 7px; padding-top: 0px;"&gt;[출처]&lt;/strong&gt;&amp;nbsp;&lt;a href="http://blog.naver.com/dw21008/90084558948" style="text-decoration: none;" target="_blank"&gt;CAS(Conditional Access System) 동작원리에 대하여&lt;/a&gt;&lt;span style="padding-bottom: 0px; padding-left: 5px; padding-right: 7px; padding-top: 0px;"&gt;|&lt;/span&gt;&lt;strong style="padding-bottom: 0px; padding-left: 0px; padding-right: 7px; padding-top: 0px;"&gt;작성자&lt;/strong&gt;&amp;nbsp;&lt;a href="http://blog.naver.com/dw21008" style="text-decoration: none;" target="_blank"&gt;dw21008&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="background-color: white; font-family: 돋움; font-size: 12px; text-align: left;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-7842031976075098425?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/7842031976075098425/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2011/12/casconditional-access-system.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/7842031976075098425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/7842031976075098425'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2011/12/casconditional-access-system.html' title=''/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-3439909451707738007</id><published>2011-12-28T02:59:00.003+09:00</published><updated>2011-12-28T03:00:32.705+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cas'/><title type='text'></title><content type='html'>&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="post-body" id="printPost1" style="background-color: white; border-collapse: collapse; color: black; table-layout: fixed; text-align: left; width: 580px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="bcc" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial;"&gt;&lt;br /&gt;&lt;table class="post-top" style="border-collapse: collapse; table-layout: fixed; width: 550px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="p12" valign="bottom"&gt;&lt;div class="htitle" id="title_1" style="clear: both; font-family: 돋움; font-size: 12px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 5px; padding-left: 3px; padding-right: 0px; padding-top: 3px; word-break: break-all; word-wrap: break-word; zoom: 1;"&gt;&lt;span class="pcol1 itemSubjectBoldfont" style="color: #009e25; display: inline; font-size: 18px; font-weight: bold; letter-spacing: -1px;"&gt;&lt;a href="http://blog.naver.com/PostView.nhn?blogId=dw21008&amp;amp;logNo=90084559074&amp;amp;viewDate=&amp;amp;currentPage=1&amp;amp;listtype=0&amp;amp;userTopListOpen=false&amp;amp;userTopListCount=5&amp;amp;userTopListManageOpen=false&amp;amp;userTopListCurrentPage=undefined"&gt;디지털방송에서 암호화 없이 가입자 접근을 통제하는 방법&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="htitle" id="title_1" style="clear: both; font-family: 돋움; overflow-x: hidden; overflow-y: hidden; padding-bottom: 5px; padding-left: 3px; padding-right: 0px; padding-top: 3px; word-break: break-all; word-wrap: break-word; zoom: 1;"&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;본 포스트는 디지털방송에서 암호화 없이 가입자 접근을 통제하는 방법에 대해 소개합니다. 소위 '가짜 CAS'라는 방법이죠. 어떤분이 질문을 하셨고 이에 대한 답변이 되겠습니다.&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;긁어가도 좋은데 출처와 원문을 훼손하지 않도록 해주세요. 가끔씩 손발이 오그라드는 변형들을 보곤합니다. 아주 치사하거나 거의 마사루 수준의 손발 오그라드는 변형도 있는데 같잖은 저작권이지만 좀 인정해주셨으면 합니다.&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;&lt;a class="con_link" href="http://blog.naver.com/windheim" style="text-decoration: none; word-wrap: break-word;" target="_blank"&gt;http://blog.naver.com/windheim&lt;/a&gt;&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;어떤분이 CAS 관련하여 메일로 질문을 하셨습니다.&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;&lt;/div&gt;&lt;table bgcolor="#b7bbb5" border="0" cellpadding="0" cellspacing="3" height="40" style="color: #8a8a8a; font-size: 12px; line-height: 18px; text-align: left; width: 735px;"&gt;&lt;tbody&gt;&lt;tr bgcolor="#ffffff"&gt;&lt;td width="735"&gt;&lt;strong&gt;다름이 아니라 관련 하여 궁금한 점이 있습니다. 디지털케이블의 경우, 지상파 HD를 VSB로 재송신하고&lt;br /&gt;있다고 합니다. 그것도 scramblr도 걸지 않고 재송신 하고 있다고 합니다. 이런 경우 처럼 스크램블을 &lt;br /&gt;걸지 않은 채널에 대하여서는 CAS 적용을 아예 할 수 없는지요? 제가 알기론 케이블의 채널번호가 &lt;br /&gt;전부 가상채널인걸로 아는데 이를 Mapping 하여서 가입자들에게 보여준다고 하던데요. 사실인가요? &lt;br /&gt;만약 그게 사실이라면, 스크램블을 걸지 않은 채널도 특정 가입자에게 볼 수 없도록 통제가 &lt;br /&gt;가능한가요?&amp;nbsp;&lt;/strong&gt;&lt;strong style="line-height: 1.5;"&gt;만약 가능하지 않다면, 채널에 스크램블을 걸어야 하는지요? 이럴경우, 소요비용이 많이 &lt;br /&gt;드나요?&amp;nbsp;&lt;/strong&gt;&lt;strong style="line-height: 1.5;"&gt;기본적으로 CAS는 암호화와 복호화의 개념이라, 이러한 궁금점이 생깁니다. 관련하여 &lt;br /&gt;디지털케이블의 셋톱박스에서 CAS이외의 기능으로 스크램블되지 않은 채널을 통제할 수 있는 방법이&lt;br /&gt;있는지도 궁금합니다.&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;스크램블의 의미는&amp;nbsp;&lt;strong&gt;'스트림을 암호화 했다'&lt;/strong&gt;는 의미입니다. DVB의 경우&amp;nbsp;DVB-CSA로&amp;nbsp;스트림을 암호화 합니다. 스크램블 되지&amp;nbsp;않았다는 것은 스트림이 암호화 되지 않아 해당 스트림을 디코더에 넣으면&amp;nbsp;그대로 화면이 재생되다는 것 입니다.&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;"스크램블하지 않고 사용자(가입자)를 통제할 수 있느냐?" 라는 질문에 대해서 답변드리자면 "그렇다" 입니다.&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;엘리먼트리 스트림을 스크램블 하는 장비는 일반인 입장에서 고가의&amp;nbsp;장비로 이는 (우리식으로 따지면 강원케이블방송 이런식의 군소 케이블 업체 따위의) 군소 OP 입장에서도 마찬가지 입니다. 유럽에는 (특히 동유럽의 경우)&amp;nbsp;이런 군소 OP들이 꽤 있는데 정식 CAS를 적용하자면 CAS社에 지불해야하는 로열티따위의 비용이나 셋탑업체에게 지불해야 할 S/W 비용이 만만치 않습니다.&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;스크램블(이것의 의미를 확실히 이해하시길) 없이 가입자를 통제하는 가장 간단한 방법은 PID를 감추는 방법입니다. 이하의 설명을 이해하시려면&amp;nbsp;&lt;strong&gt;[CAS(Conditional Access System) 동작원리에 대하여]&lt;/strong&gt;(&lt;a class="con_link" href="http://blog.naver.com/windheim/90070856870" style="text-decoration: none; word-wrap: break-word;" target="_blank"&gt;http://blog.naver.com/windheim/90070856870&lt;/a&gt;) 라는 포스트와&amp;nbsp;&lt;strong&gt;[디지털 방송 재핑 과정 및 녹화 과정에 대하여]&lt;/strong&gt;&amp;nbsp;(&lt;a class="con_link" href="http://blog.naver.com/windheim/90071576814" style="text-decoration: none; word-wrap: break-word;" target="_blank"&gt;http://blog.naver.com/windheim/90071576814&lt;/a&gt;)라는 포스트를 잘 이해하셨으면 좋겠습니다.&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;잠깐 복습하자면,&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;CAS에서 사용자가 화면을 보기&amp;nbsp;위한 동작단계를 간단히 묘사하자면, EMM 패킷을&amp;nbsp;사용해 권한을 얻고 ECM 패킷을 사용해 비밀번호인 CW를 얻는 과정이라고 할 수 있습니다. 그리고 CW를 사용해 스트림을 복호화 하는거죠.&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;방송을 재생하는 재핑 과정은, PAT를 파싱해 해당방송의 PMT를 얻고 그 PMT에서 audio/video PID들을 얻어 방송을 재생하는 과정입니다.&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;그러면 스트림의 암호화 없이 (스크램블 없이) 사용자를 통제하는 방법은 아래와 같습니다.&lt;/div&gt;&lt;ol style="color: #8a8a8a; font-size: 12px; line-height: 18px; list-style-image: initial; list-style-position: initial; margin-bottom: 0px; margin-left: 3.5em; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;&lt;li&gt;PMT에&amp;nbsp; audio/video PID를 적어두지 않습니다. 이러면 일반 STB는 PID를 몰라서 방송을 볼 수 없죠&lt;/li&gt;&lt;li&gt;일반 CAS처럼 EMM으로 권한을 얻습니다.(이 과정이 꼭 스마트카드가 필요한것은 아닙니다, 그냥 세트의 플래시 메모리에 시리얼번호를 박아두는걸로 충분하죠)&lt;/li&gt;&lt;li&gt;ECM을 사용해 CW가 아니라&amp;nbsp;&lt;strong&gt;Audio/Video PID&lt;/strong&gt;를 얻습니다.&lt;/li&gt;&lt;li&gt;얻어낸 (감춰진) Audio/Video PID를 사용해 스트림을 재생합니다.&lt;/li&gt;&lt;li&gt;하루 또는 반나절에 한번꼴로 Audio/Video PID를 바꿔서 송신하여 해킹을 막습니다.&lt;/li&gt;&lt;/ol&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;이것이 소위 말하는 '가짜 CAS' 라고 하는 방법입니다. 사용자는 사용자대로 통제할 수 있고 방송국(OP)은 비싼 스크램블 장비 없이 스트림을 내보낼 수 있습니다.&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;답변이 되셨나요?&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;&lt;a class="con_link" href="http://blog.naver.com/windheim" style="text-decoration: none; word-wrap: break-word;" target="_blank"&gt;http://blog.naver.com/windheim&lt;/a&gt;&lt;/div&gt;&lt;div style="color: #8a8a8a; font-size: 12px; line-height: 18px; margin-top: 2px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;"&gt;2009.10.23&lt;/div&gt;&lt;div class="autosourcing-stub-extra" style="line-height: 1.5; opacity: 0; position: absolute;"&gt;&lt;div style="font-family: Dotum; font-size: 12px; line-height: 1.5; margin-bottom: 7px; margin-top: 11px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="padding-bottom: 0px; padding-left: 0px; padding-right: 7px; padding-top: 0px;"&gt;[출처]&lt;/strong&gt;&amp;nbsp;&lt;a href="http://blog.naver.com/dw21008/90084559074" style="text-decoration: none;" target="_blank"&gt;디지털방송에서 암호화 없이 가입자 접근을 통제하는 방법&lt;/a&gt;&lt;span style="padding-bottom: 0px; padding-left: 5px; padding-right: 7px; padding-top: 0px;"&gt;|&lt;/span&gt;&lt;strong style="padding-bottom: 0px; padding-left: 0px; padding-right: 7px; padding-top: 0px;"&gt;작성자&lt;/strong&gt;&amp;nbsp;&lt;a href="http://blog.naver.com/dw21008" style="text-decoration: none;" target="_blank"&gt;dw21008&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="pcol1 itemSubjectBoldfont" style="color: #009e25; display: inline; font-size: 18px; font-weight: bold; letter-spacing: -1px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="autosourcing-stub-extra" style="opacity: 0; position: absolute;"&gt;&lt;div style="font-family: Dotum; font-size: 12px; font-weight: normal; margin-bottom: 7px; margin-top: 11px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="pcol1 itemSubjectBoldfont" style="color: #009e25; display: inline; font-size: 18px; font-weight: bold; letter-spacing: -1px;"&gt;&lt;strong style="padding-bottom: 0px; padding-left: 0px; padding-right: 7px; padding-top: 0px;"&gt;[출처]&lt;/strong&gt;&amp;nbsp;&lt;a href="http://blog.naver.com/dw21008/90084559074" style="text-decoration: none;" target="_blank"&gt;디지털방송에서 암호화 없이 가입자 접근을 통제하는 방법&lt;/a&gt;&lt;span style="padding-bottom: 0px; padding-left: 5px; padding-right: 7px; padding-top: 0px;"&gt;|&lt;/span&gt;&lt;strong style="padding-bottom: 0px; padding-left: 0px; padding-right: 7px; padding-top: 0px;"&gt;작성자&lt;/strong&gt;&amp;nbsp;&lt;a href="http://blog.naver.com/dw21008" style="text-decoration: none;" target="_blank"&gt;dw21008&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="pcol1 itemSubjectBoldfont" style="color: #009e25; display: inline; font-size: 18px; font-weight: bold; letter-spacing: -1px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="pcol1 itemSubjectBoldfont" style="color: #009e25; display: inline; font-size: 18px; font-weight: bold; letter-spacing: -1px;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-3439909451707738007?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/3439909451707738007/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2011/12/blog-post.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/3439909451707738007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/3439909451707738007'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2011/12/blog-post.html' title=''/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-3249750514941132332</id><published>2011-12-21T11:37:00.004+09:00</published><updated>2011-12-21T11:37:53.559+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><title type='text'>-enum declarations</title><content type='html'>&lt;a href="http://www.erlang.org/eeps/eep-0013.html"&gt;http://www.erlang.org/eeps/eep-0013.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;Author: Richard A. O'Keefe &amp;lt;ok(at)cs(dot)otago(dot)ac(dot)nz&amp;gt;&lt;br /&gt;Status: Draft&lt;br /&gt;Type: Standards Track&lt;br /&gt;Erlang-Version: R12B-4&lt;br /&gt;Created: 09-Jul-2008&lt;br /&gt;Post-History:&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;hr style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;" /&gt;&lt;h2 style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; text-align: left;"&gt;&lt;a href="http://www.erlang.org/eeps/eep-0000.html" style="color: #9b0000; text-decoration: none;" title="EEP Index"&gt;EEP&lt;/a&gt;&amp;nbsp;13:&amp;nbsp;&lt;a href="http://www.erlang.org/eeps/eep-0013.md" style="color: #9b0000; text-decoration: none;" title="EEP Source"&gt;-enum declarations&lt;/a&gt;&lt;/h2&gt;&lt;h1 style="background-color: #e8e8e8; color: #9b0000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;Abstract&lt;/h1&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;Erlang programs often need to process data streams using data formats devised without reference to Erlang. For this reason OTP supports ASN.1 and CORBA, amongst other interface techniques. Binary data streams often contain "symbolic" values that are represented in the original description by some kind of enumeration declaration, often literally a C "enum" declaration.&lt;/div&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;This EEP proposes an "&lt;code&gt;-enum&lt;/code&gt;" declaration for Erlang for convenient mapping between atoms on one side of an interface and integers on the other, especially in the bit syntax.&lt;/div&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;This replaces some uses of the preprocessor with something that permits the clearer expression of the programmer's intent.&lt;/div&gt;&lt;h1 style="background-color: #e8e8e8; color: #9b0000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;Specification&lt;/h1&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;A new form of declaration is added, four new guard BIFs, and a new type specifier for bit syntax.&lt;/div&gt;&lt;h2 style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; text-align: left;"&gt;Declaration&lt;/h2&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;'-' 'enum' '(' identifier-and-size ',' '{' enum-binding&lt;br /&gt;    {',' enum-binding}* ')' '.'&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;where identifier-and-size is&lt;/div&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;identifier&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;or&lt;/div&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;identifier : size&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;or&lt;/div&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;identifier / type-specifier-list&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;or&lt;/div&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;identifier : size / type-specifier-list&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;and enum-binding is&lt;/div&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;identifier '=' constant-integer-expression&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;or&lt;/div&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;identifier&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;size and type-specifier-list are as in the bit syntax, except that the type-specifier-list may not include a Type. If the size is missing, it will be the first of [8,16,32,64] that is compatible with the integer values, as described later. If the size is present, it must be an integer that is compatible with the integer values. Signedness, if present, must agree with the integer values.&lt;/div&gt;&lt;h2 style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; text-align: left;"&gt;Example&lt;/h2&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;-enum(colour, {red,orange,yellow,green,blue}).&lt;br /&gt;-enum(fruit:32,  {quandong,lime,banana,orange,apple}).&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;The identifier following the left parenthesis is called the "enumeration identifier" and the identifiers bound by the bindings are called "enumerals".&lt;/div&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;After&amp;nbsp;&lt;code&gt;-include&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;-if&lt;/code&gt;&amp;nbsp;processing, there should be at most one enum declaration for any identifier. The identifier must not be one of&lt;/div&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;integer | float | binary | bytes | bitstring | bits&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;Such a declaration only has significance within the constructs defined in this EEP; the only existing notation which is affected is the bit syntax.&lt;/div&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;Within a single enum declaration, an enumeral may not be bound in two or more bindings.&lt;/div&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;If the first binding does not have an integer-constant-expression, it is as if "= 0" appeared. If a later binding does not have an integer-constant-expression, it is as if "= N" appeared, where N is one more than the integer value of the previous binding.&lt;/div&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;Within a single enum declaration, an integer value may not be used in two or more bindings, whether implicitly or explicitly.&lt;/div&gt;&lt;h2 style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; text-align: left;"&gt;Built-in functions&lt;/h2&gt;&lt;h3 style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; font-weight: normal; margin-bottom: 6px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;&lt;code&gt;is_enum_atom(Atom, Enumeration_Identifier)&lt;/code&gt;&lt;/h3&gt;&lt;ul style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;&lt;li&gt;&lt;code&gt;true&lt;/code&gt;&amp;nbsp;when Enumeration_Identifier is an atom that is declared as an enumeration identifier and Atom is one of the enumerals in that declaration,&lt;/li&gt;&lt;li&gt;&lt;code&gt;false&lt;/code&gt;&amp;nbsp;otherwise.&lt;/li&gt;&lt;/ul&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;May be used as a guard test provided Enumeration_Identifier is a literal atom, with a compile-time error if it has no enum declaration.&lt;/div&gt;&lt;h3 style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; font-weight: normal; margin-bottom: 6px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;&lt;code&gt;is_enum_integer(Integer, Enumeration_Identifier)&lt;/code&gt;&lt;/h3&gt;&lt;ul style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;&lt;li&gt;&lt;code&gt;true&lt;/code&gt;&amp;nbsp;when Enumeration_Identifier is an atom that is declared as an enumeration identifier and Integer is an integer that is used as the value in one of the bindings in that declaration,&lt;/li&gt;&lt;li&gt;&lt;code&gt;false&lt;/code&gt;&amp;nbsp;otherwise.&lt;/li&gt;&lt;/ul&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;May be used as a guard test provided Enumeration_Identifier is a literal atom, with a compile-time error if it has no enum declaration.&lt;/div&gt;&lt;h3 style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; font-weight: normal; margin-bottom: 6px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;&lt;code&gt;enum_to_atom(Integer, Enumeration_Identifier)&lt;/code&gt;&lt;/h3&gt;&lt;ul style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;&lt;li&gt;when&amp;nbsp;&lt;code&gt;is_enum_integer(Integer, Enumeration_Identifier)&lt;/code&gt;&amp;nbsp;-&amp;gt;&lt;br /&gt;the enumeral bound to Integer in the declaration of Enumeration_Identifier&lt;/li&gt;&lt;li&gt;otherwise exits with&amp;nbsp;&lt;code&gt;badarg&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;May be used in a guard expression provided Enumeration_Identifier is a literal atom, with a compile-time error if it has no enum declaration.&lt;/div&gt;&lt;h3 style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; font-weight: normal; margin-bottom: 6px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;&lt;code&gt;enum_to_integer(Atom, Enumeration_Identifier)&lt;/code&gt;&lt;/h3&gt;&lt;ul style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;&lt;li&gt;when&amp;nbsp;&lt;code&gt;is_enum_atom(Atom, Enumeration_Identifier)&lt;/code&gt;&amp;nbsp;-&amp;gt;&lt;br /&gt;the integer value that Atom is bound to in the declaration of Enumeration_Identifier&lt;/li&gt;&lt;li&gt;otherwise exits with&amp;nbsp;&lt;code&gt;badarg&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;May be used in a guard expression provided Enumeration_Identifier is a literal atom, with a compile-time error if it has no enum declaration.&lt;/div&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;All four of these functions are expected to take O(1) time and to allocate no storage at run time.&lt;/div&gt;&lt;h2 style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; text-align: left;"&gt;Bit syntax extension&lt;/h2&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;The Type in a segment of the bit syntax may additionally be an Enumeration_Identifier, and the corresponding Value will then be an atom. The value in the bit string that is being matched or constructed is or will be the integer bound to the atom; as such the Size, Endianness, Signedness, and Unit are interpreted as for the&amp;nbsp;&lt;code&gt;integer&lt;/code&gt;&amp;nbsp;Type.&lt;/div&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;In constructing a bit string,&lt;/div&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;    V / Enumeration_Identifier ...&lt;br /&gt;or  V : Size / Enumeration_Identifier ...&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;acts as if&lt;/div&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;    enum_to_integer(V, Enumeration_Identifier) / integer ...&lt;br /&gt;or  enum_to_integer(V, Enumeration_Identifier) : Size / integer ...&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;had been written, with one exception, which is now described.&lt;/div&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;If all the integer values in an enum declaration are non-negative, let k be the smallest integer such that 2^k is greater than all of them. If some are negative, let k be the smallest integer such that 2^(k-1) is greater than all of them and -(2^(k-1)) is less than or equal to all of them. The size of a segment for an enumeration value must then be at least k bits, whatever the actual value. A programmer who finds a need to bypass this can do the enumeral&amp;lt;-&amp;gt;integer conversion manually; what this limit does is to prevent accidental mis-specification. The size given in the enum declaration must be at least k. If no size is given in the bit syntax, the size given (or defaulted) in the enum declaration will be used.&lt;/div&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;When such a segment is used in pattern matching, it is as if&lt;/div&gt;&lt;ul style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;&lt;li&gt;first an integer is extracted as if the Type had been&amp;nbsp;&lt;code&gt;integer&lt;/code&gt;,&lt;/li&gt;&lt;li&gt;then the value is converted to an atom as if by&amp;nbsp;&lt;code&gt;enum_to_atom&lt;/code&gt;,&lt;/li&gt;&lt;li&gt;and finally the atom is matched to whatever pattern appeared.&lt;/li&gt;&lt;/ul&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;One expects that cases where the value V is an explicit atom will be translated completely at compile time, therefore having no overhead compared with using macros and&amp;nbsp;&lt;code&gt;/integer&lt;/code&gt;.&lt;/div&gt;&lt;h1 style="background-color: #e8e8e8; color: #9b0000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;Motivation&lt;/h1&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;This was inspired by thinking about PADS and other data description languages. Imagine a C program doing something like&lt;/div&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;enum seriousness {&lt;br /&gt;    not_serious = 'N',&lt;br /&gt;    hospitalised = 'H',&lt;br /&gt;    life_threatening = 'L',&lt;br /&gt;    congenital_abnormality = 'C',&lt;br /&gt;    persisting_disability = 'P',&lt;br /&gt;    intervention_required = 'I',&lt;br /&gt;    death = 'D'&lt;br /&gt;};&lt;br /&gt;struct Message {&lt;br /&gt;    char tag;                       /* a seriousness */&lt;br /&gt;    union {&lt;br /&gt;        int   number_of_days;       /* H */&lt;br /&gt;        float extent_of_disability; /* C or P */&lt;br /&gt;        char  procedure_code[5];    /* I */&lt;br /&gt;    } supplement;&lt;br /&gt;};&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;(The Message structure has been considerably simplified.)&lt;br /&gt;Now imagine matching it.&lt;/div&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;-define(NOT_SERIOUS, $N).&lt;br /&gt;-define(HOSPITALISED, $H).&lt;br /&gt;-define(LIFE_THREATENING, $L).&lt;br /&gt;-define(CONGENITAL_ABNORMALITY, $C).&lt;br /&gt;-define(PERSISTING_DISABILITY, $P).&lt;br /&gt;-define(INTERVENTION_REQUIRED, $I).&lt;br /&gt;-define(DEATH, $D).&lt;br /&gt;&lt;br /&gt;decode_message(B0) -&amp;gt;&lt;br /&gt;    case B0&lt;br /&gt;      of &amp;lt;&amp;lt;?NOT_SERIOUS, B1/binary&amp;gt;&amp;gt; -&amp;gt;&lt;br /&gt;            {{not_serious}, B1}&lt;br /&gt;       ; &amp;lt;&amp;lt;?HOSPITALISED, NDays:32, B1/binary&amp;gt;&amp;gt; -&amp;gt;&lt;br /&gt;            {{hospitalised,NDays}, B1}&lt;br /&gt;       ; &amp;lt;&amp;lt;?LIFE_THREATENING, B1/binary&amp;gt;&amp;gt; -&amp;gt;&lt;br /&gt;            {{life_threatening}, B1}&lt;br /&gt;       ; &amp;lt;&amp;lt;?CONGENITAL_ABNORMALITY, Extent/float, B1/binary&amp;gt;&amp;gt; -&amp;gt;&lt;br /&gt;            {{congenital_abnormality,Extent}, B1}&lt;br /&gt;       ; &amp;lt;&amp;lt;?PERSISTING_DISABILITY, Extent/float, B1/binary&amp;gt;&amp;gt; -&amp;gt;&lt;br /&gt;            {{persisting_abnormality,Extent}, B1}&lt;br /&gt;       ; &amp;lt;&amp;lt;?INTERVENTION_REQUIRED, Code:5/bytes, B1/binary&amp;gt;&amp;gt; -&amp;gt;&lt;br /&gt;            {{intervention_required,Code}, B1}&lt;br /&gt;       ; &amp;lt;&amp;lt;?DEATH, B1/binary&amp;gt;&amp;gt; -&amp;gt;&lt;br /&gt;            {{death}, B1}&lt;br /&gt;    end.&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;There are a number of problems with this.&lt;/div&gt;&lt;ul style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;&lt;li&gt;You have to use macros; functions are not allowed in patterns.&lt;/li&gt;&lt;li&gt;There is nothing to link these macros together as a group.&lt;/li&gt;&lt;li&gt;So there is no help checking that you are using the right ones.&lt;/li&gt;&lt;li&gt;There is no word to relate them back to the original enum.&lt;/li&gt;&lt;li&gt;If the size isn't 8, it must be repeated in each pattern.&lt;/li&gt;&lt;li&gt;If the Endianness isn't&amp;nbsp;&lt;code&gt;big&lt;/code&gt;, it must be repeated in each pattern.&lt;/li&gt;&lt;li&gt;If the size is wrong, too bad.&lt;/li&gt;&lt;li&gt;If a macro from the wrong list is used, too bad.&lt;/li&gt;&lt;li&gt;You cannot use the same enumeral name for more than one enumeration, unless it happens to have the same value in both.&lt;/li&gt;&lt;li&gt;If you pass the macros around in a computation, they look just like numbers to tracers and debuggers; they have no run-time symbolic value.&lt;/li&gt;&lt;/ul&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;Now here's the version using&amp;nbsp;&lt;code&gt;-enum&lt;/code&gt;.&lt;/div&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;-enum(seriousness : 8, {&lt;br /&gt;    not_serious = $N,&lt;br /&gt;    hospitalised = $H&lt;br /&gt;    life_threatening = $L,&lt;br /&gt;    congenital_abnormality = $C,&lt;br /&gt;    persisting_disability = $P,&lt;br /&gt;    intervention_required = $I,&lt;br /&gt;    death = $D&lt;br /&gt;}).&lt;br /&gt;&lt;br /&gt;decode_message(B0) -&amp;gt;&lt;br /&gt;    case B0&lt;br /&gt;      of &amp;lt;&amp;lt;not_serious/seriousness,&lt;br /&gt;          B1/binary&amp;gt;&amp;gt; -&amp;gt;&lt;br /&gt;            {{not_serious}, B1}&lt;br /&gt;       ; &amp;lt;&amp;lt;hospitalised/seriousness,&lt;br /&gt;           NDays:32, B1/binary&amp;gt;&amp;gt; -&amp;gt;&lt;br /&gt;            {{hospitalised,NDays}, B1}&lt;br /&gt;       ; &amp;lt;&amp;lt;life_threatening/seriousness,&lt;br /&gt;           B1/binary&amp;gt;&amp;gt; -&amp;gt;&lt;br /&gt;            {{life_threatening}, B1}&lt;br /&gt;       ; &amp;lt;&amp;lt;congenital_abnormality/seriousness,&lt;br /&gt;           Extent/float, B1/binary&amp;gt;&amp;gt; -&amp;gt;&lt;br /&gt;            {{congenital_abnormality,Extent}, B1}&lt;br /&gt;       ; &amp;lt;&amp;lt;persisting_disability/seriousness,&lt;br /&gt;            Extent/float, B1/binary&amp;gt;&amp;gt; -&amp;gt;&lt;br /&gt;            {{persisting_abnormality,Extent}, B1}&lt;br /&gt;       ; &amp;lt;&amp;lt;intervention_required/seriousness,&lt;br /&gt;            Code:5/bytes, B1/binary&amp;gt;&amp;gt; -&amp;gt;&lt;br /&gt;            {{intervention_required,Code}, B1}&lt;br /&gt;       ; &amp;lt;&amp;lt;death/seriousness,&lt;br /&gt;           B1/binary&amp;gt;&amp;gt; -&amp;gt;&lt;br /&gt;            {{death}, B1}&lt;br /&gt;    end.&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;Rather fortuitously, this feature also provides a way of accepting any of a set of atoms or integers with a single guard test. Let's restructure the previous example to first extract the seriousness and then match the body, but this time, have just one body of each shape.&lt;/div&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;-enum(seriousness, {&lt;br /&gt;    not_serious = $N,&lt;br /&gt;    hospitalised = $H&lt;br /&gt;    life_threatening = $L,&lt;br /&gt;    congenital_abnormality = $C,&lt;br /&gt;    persisting_disability = $P,&lt;br /&gt;    intervention_required = $I,&lt;br /&gt;    death = $D&lt;br /&gt;}).&lt;br /&gt;-enum(no_more_info, {&lt;br /&gt;    not_serious = $N,&lt;br /&gt;    life_threatening = $L,&lt;br /&gt;    death = $D&lt;br /&gt;}).&lt;br /&gt;-enum(extent_of_impairment, {&lt;br /&gt;    congenital_abnormality = $C,&lt;br /&gt;    persisting_disability = $P&lt;br /&gt;}).&lt;br /&gt;&lt;br /&gt;decode_message(&amp;lt;&amp;lt;Seriousness/seriousness, B0/binary&amp;gt;&amp;gt;) -&amp;gt;&lt;br /&gt;    if is_enum_atom(Seriousness, no_more_info) -&amp;gt;&lt;br /&gt;       {{Seriousness}, B0}&lt;br /&gt;     ; is_enum_atom(Seriousness, extent_of_impairment) -&amp;gt;&lt;br /&gt;       &amp;lt;&amp;lt;Extent/float, B1/binary&amp;gt;&amp;gt; = B0,&lt;br /&gt;       {{Seriousness,Extent}, B1}&lt;br /&gt;     ; Seriousness =:= hospitalised -&amp;gt;&lt;br /&gt;       &amp;lt;&amp;lt;NDays:32, B1/binary&amp;gt;&amp;gt; = B0,&lt;br /&gt;       {{Seriousness,NDays}, B1}&lt;br /&gt;     ; Seriousness =:= intervention_required -&amp;gt;&lt;br /&gt;       &amp;lt;&amp;lt;Code:5/bytes, B1/binary&amp;gt;&amp;gt; = B0,&lt;br /&gt;       {{Seriousness,Code}, B1}&lt;br /&gt;    end.&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h1 style="background-color: #e8e8e8; color: #9b0000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;Rationale&lt;/h1&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;Since this is supposed to make it easy to convert descriptions&lt;br /&gt;from C or PADS or similar forms, an enum declaration looks like a C enum declaration.&lt;/div&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;Since size, signedness, and endianness may be needed in multiple places, it makes sense to put them all in the declaration so that they don't have to be repeated (and therefore cannot be repeated incorrectly).&lt;/div&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;The order of the arguments in the new BIFs is chosen to match the order of the arguments in&amp;nbsp;&lt;code&gt;is_record/2&lt;/code&gt;, so as to be familiar to Erlang programmers.&lt;/div&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;The new BIFs are needed to explain the extended bit syntax. The only abbreviation in their names is&amp;nbsp;&lt;code&gt;enum&lt;/code&gt;, which exactly matches the keyword in the declaration.&lt;/div&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;The new BIFs can also be used to implement the extended bit syntax by source-to-source transformation; no actual change to the bit syntax machinery is required.&lt;/div&gt;&lt;h1 style="background-color: #e8e8e8; color: #9b0000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;Backwards Compatibility&lt;/h1&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;Code that uses any of the four new BIFs will be affected. The nearest that the Erlang/OTP sources come to mentioning any of those atoms is&amp;nbsp;&lt;code&gt;enum_to_int&lt;/code&gt;, which is used. Code that does use any of these BIFs can be found using cross-reference tools.&lt;/div&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;A simple approach would be to say that the BIFs&amp;nbsp;&lt;code&gt;is_enum_atom/2&lt;/code&gt;,&amp;nbsp;&lt;code&gt;is_enum_integer/2&lt;/code&gt;,&amp;nbsp;&lt;code&gt;enum_to_atom/2&lt;/code&gt;,&amp;nbsp;&lt;code&gt;and enum_to_integer/2&lt;/code&gt;&amp;nbsp;are in scope in a module if and only if there is an&amp;nbsp;&lt;code&gt;-enum&lt;/code&gt;&amp;nbsp;declaration in that module, in which case existing code would be entirely unaffected.&lt;/div&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;The effect on the bit syntax is that previously illegal forms (where Type is not one of the existing numeric or bit string types or Value is an atom) become legal, but only if licensed by appropriate&amp;nbsp;&lt;code&gt;-enum&lt;/code&gt;&amp;nbsp;declarations.&lt;/div&gt;&lt;h1 style="background-color: #e8e8e8; color: #9b0000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;Reference Implementation&lt;/h1&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;There is none. However, we can sketch one. The four new BIFs are all simple table lookups of the kind that the Erlang compiler already has to be able to generate for indexed clause selection. As such, they are safe to call in guards. Since the Type in the bit syntax may only be an enumeration name when it is a literal atom known to the compiler as an enumeration name, the constructor&lt;/div&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;&amp;lt;&amp;lt;... V : S / T X ...&amp;gt;&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;can be translated as&lt;/div&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;( V1 = enum_to_integer(V, X), &amp;lt;&amp;lt;... V1 : S / integer X ...&amp;gt;&amp;gt;)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;and the pattern&lt;/div&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;&amp;lt;&amp;lt;... V : S / T X ...&amp;gt;&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;can be translated to&lt;/div&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;&amp;lt;&amp;lt;... V' : S / integer X ...&amp;gt;&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;by adding&lt;/div&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;V =:= enum_to_atom(V', T)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;to the guard if V occurs elsewhere in the pattern or will be bound in the context, or&lt;/div&gt;&lt;pre style="background-color: #e8e8e8; font-size: 12px; text-align: left;"&gt;&lt;code&gt;   V = enum_to_atom(V', T)&lt;br /&gt;if V would not otherwise become bound.&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;Binding like this should be allowed in guards anyway, but in this case it is perfectly safe because it is O(1) and does not require any dynamic storage allocation (unlike, say, arithmetic).&lt;/div&gt;&lt;h1 style="background-color: #e8e8e8; color: #9b0000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;Copyright&lt;/h1&gt;&lt;div style="background-color: #e8e8e8; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align: left;"&gt;This document has been placed in the public domain.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-3249750514941132332?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/3249750514941132332/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2011/12/enum-declarations.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/3249750514941132332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/3249750514941132332'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2011/12/enum-declarations.html' title='-enum declarations'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-6234127558224649389</id><published>2011-10-27T16:46:00.002+09:00</published><updated>2011-12-21T11:38:13.604+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><title type='text'>Starting a set of Erlang cluster nodes</title><content type='html'>&lt;span class="Apple-style-span" style="background-color: white; font-family: Helvetica, Arial, sans-serif; font-size: 13px; line-height: 17px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="wiki-content" style="line-height: 13pt;"&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;This tutorial explains how to configure your cluster computers to easily start a set of Erlang nodes on every machine through SSH. It shows how to use the slave module to start Erlang nodes that are linked to a main controler.&lt;/div&gt;&lt;h2 style="border-bottom-color: rgb(102, 153, 204); color: #003366; font-size: 18pt; font-weight: bold; line-height: normal; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 32px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=3526487000938261036" name="StartingasetofErlangclusternodes-ConfiguringSSHservers"&gt;&lt;/a&gt;Configuring SSH servers&lt;/h2&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;SSH server is generally properly installed and configured by Linux distributions, if you ask for SSH server installation. The SSH server is sometime called sshd, standing for SSH deamon.&lt;/div&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;You need to have SSH servers running on all your cluster nodes.&lt;/div&gt;&lt;h2 style="border-bottom-color: rgb(102, 153, 204); color: #003366; font-size: 18pt; font-weight: bold; line-height: normal; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 32px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=3526487000938261036" name="StartingasetofErlangclusternodes-ConfiguringyourSSHclient%3Aconnectionwithoutpassword"&gt;&lt;/a&gt;Configuring your SSH client: connection without password&lt;/h2&gt;&lt;h3 style="color: #003366; font-size: 15pt; font-weight: bold; line-height: normal; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 28px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=3526487000938261036" name="StartingasetofErlangclusternodes-SSHclientRSAkeyauthentification"&gt;&lt;/a&gt;SSH client RSA key authentification&lt;/h3&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;To be able to manage your cluster as a whole, you need to set up your SSH access to the cluster nodes so that you can log into them without being prompt for a password or passphrase. Here are the needed steps to configure your SSH client and server to use RSA key for authentification. You only need to do this procedure once, for each client/server.&lt;/div&gt;&lt;ol style="font-size: 10pt; line-height: 13pt; list-style-type: decimal;"&gt;&lt;li style="font-size: 10pt; line-height: 13pt; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Generate an SSH RSA key, if you do not already have one:&lt;div class="code panel" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(102, 153, 204); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(102, 153, 204); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(102, 153, 204); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(102, 153, 204); border-top-style: dashed; border-top-width: 1px; color: black; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div class="codeContent panelContent" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-size: 0.95em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 12px; padding-left: 10px; padding-right: 10px; padding-top: 12px; text-align: left;"&gt;&lt;pre class="code-none" style="font-family: 'Courier New', Courier, monospace; line-height: 1.3; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;ssh-keygen -t rsa&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style="font-size: 10pt; line-height: 13pt; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Copy the id_rsa.pub file to the target machine:&lt;div class="code panel" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(102, 153, 204); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(102, 153, 204); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(102, 153, 204); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(102, 153, 204); border-top-style: dashed; border-top-width: 1px; color: black; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div class="codeContent panelContent" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-size: 0.95em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 12px; padding-left: 10px; padding-right: 10px; padding-top: 12px; text-align: left;"&gt;&lt;pre class="code-none" style="font-family: 'Courier New', Courier, monospace; line-height: 1.3; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;scp .ssh/id_rsa.pub userid@ssh2-server:id_rsa.pub&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style="font-size: 10pt; line-height: 13pt; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Connect through SSH on the server:&lt;div class="code panel" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(102, 153, 204); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(102, 153, 204); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(102, 153, 204); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(102, 153, 204); border-top-style: dashed; border-top-width: 1px; color: black; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div class="codeContent panelContent" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-size: 0.95em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 12px; padding-left: 10px; padding-right: 10px; padding-top: 12px; text-align: left;"&gt;&lt;pre class="code-none" style="font-family: 'Courier New', Courier, monospace; line-height: 1.3; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;ssh userid@ssh2-server&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style="font-size: 10pt; line-height: 13pt; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Create a .ssh directory in the user home directory (if necessary):&lt;div class="code panel" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(102, 153, 204); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(102, 153, 204); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(102, 153, 204); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(102, 153, 204); border-top-style: dashed; border-top-width: 1px; color: black; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div class="codeContent panelContent" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-size: 0.95em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 12px; padding-left: 10px; padding-right: 10px; padding-top: 12px; text-align: left;"&gt;&lt;pre class="code-none" style="font-family: 'Courier New', Courier, monospace; line-height: 1.3; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;mkdir .ssh&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style="font-size: 10pt; line-height: 13pt; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Copy the contents of the id_rsa.pub file to the authorization file for protocol 2 connections:&lt;div class="code panel" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(102, 153, 204); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(102, 153, 204); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(102, 153, 204); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(102, 153, 204); border-top-style: dashed; border-top-width: 1px; color: black; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div class="codeContent panelContent" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-size: 0.95em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 12px; padding-left: 10px; padding-right: 10px; padding-top: 12px; text-align: left;"&gt;&lt;pre class="code-none" style="font-family: 'Courier New', Courier, monospace; line-height: 1.3; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;cat id_rsa.pub &amp;gt;&amp;gt;$HOME/.ssh/authorized_keys&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style="font-size: 10pt; line-height: 13pt; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Remove the id_rsa.pub file:&lt;div class="code panel" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(102, 153, 204); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(102, 153, 204); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(102, 153, 204); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(102, 153, 204); border-top-style: dashed; border-top-width: 1px; color: black; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div class="codeContent panelContent" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-size: 0.95em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 12px; padding-left: 10px; padding-right: 10px; padding-top: 12px; text-align: left;"&gt;&lt;pre class="code-none" style="font-family: 'Courier New', Courier, monospace; line-height: 1.3; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;rm $HOME/id_rsa.pub&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Alternatively, you can use the command ssh-copy-id ssh2-server, if it is available on your computer, to replace step 2 to 6. ssh-copy-id is for example available on Linux Mandrake and Debian distributions.&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3 style="color: #003366; font-size: 15pt; font-weight: bold; line-height: normal; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 28px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=3526487000938261036" name="StartingasetofErlangclusternodes-AddingyouridentitytotheSSHagentsoftware"&gt;&lt;/a&gt;Adding your identity to the SSH-agent software&lt;/h3&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;After the previous step, you will be prompted for the passphrase of your RSA key each time you are initialising a connection. To avoid typing the passphrase many time, you can add your identity to a program called ssh-agent that will keep your passphrase for the work session duration. Use of the SSH protocol will thus be simplified:&lt;/div&gt;&lt;ol style="font-size: 10pt; line-height: 13pt; list-style-type: decimal;"&gt;&lt;li style="font-size: 10pt; line-height: 13pt; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Ensure a program called ssh-agent is running. Type:&lt;div class="code panel" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(102, 153, 204); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(102, 153, 204); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(102, 153, 204); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(102, 153, 204); border-top-style: dashed; border-top-width: 1px; color: black; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div class="codeContent panelContent" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-size: 0.95em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 12px; padding-left: 10px; padding-right: 10px; padding-top: 12px; text-align: left;"&gt;&lt;pre class="code-none" style="font-family: 'Courier New', Courier, monospace; line-height: 1.3; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;ps aux | grep ssh-agent&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;to check if ssh-agent is running under your userid. Type:&lt;/div&gt;&lt;div class="code panel" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(102, 153, 204); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(102, 153, 204); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(102, 153, 204); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(102, 153, 204); border-top-style: dashed; border-top-width: 1px; color: black; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div class="codeContent panelContent" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-size: 0.95em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 12px; padding-left: 10px; padding-right: 10px; padding-top: 12px; text-align: left;"&gt;&lt;pre class="code-none" style="font-family: 'Courier New', Courier, monospace; line-height: 1.3; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;pstree&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;to check that ssh-agent is linked to your current window manager session or shell process.&lt;/div&gt;&lt;/li&gt;&lt;li style="font-size: 10pt; line-height: 13pt; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;If ssh-agent is not started, you can create an ssh-agent session in the shell with, for example, the screen program:&lt;div class="code panel" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(102, 153, 204); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(102, 153, 204); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(102, 153, 204); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(102, 153, 204); border-top-style: dashed; border-top-width: 1px; color: black; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div class="codeContent panelContent" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-size: 0.95em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 12px; padding-left: 10px; padding-right: 10px; padding-top: 12px; text-align: left;"&gt;&lt;pre class="code-none" style="font-family: 'Courier New', Courier, monospace; line-height: 1.3; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;ssh-agent screen&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;After this command, SSH actions typed into the screen console will be handle through the ssh-agent.&lt;/div&gt;&lt;/li&gt;&lt;li style="font-size: 10pt; line-height: 13pt; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Add your identity to the agent:&lt;div class="code panel" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(102, 153, 204); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(102, 153, 204); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(102, 153, 204); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(102, 153, 204); border-top-style: dashed; border-top-width: 1px; color: black; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div class="codeContent panelContent" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-size: 0.95em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 12px; padding-left: 10px; padding-right: 10px; padding-top: 12px; text-align: left;"&gt;&lt;pre class="code-none" style="font-family: 'Courier New', Courier, monospace; line-height: 1.3; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;ssh-add&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Type your passphrase when prompted.&lt;/div&gt;&lt;/li&gt;&lt;li style="font-size: 10pt; line-height: 13pt; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;You can list the identity that have been added into the running ssh-agent:&lt;div class="code panel" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(102, 153, 204); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(102, 153, 204); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(102, 153, 204); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(102, 153, 204); border-top-style: dashed; border-top-width: 1px; color: black; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div class="codeContent panelContent" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-size: 0.95em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 12px; padding-left: 10px; padding-right: 10px; padding-top: 12px; text-align: left;"&gt;&lt;pre class="code-none" style="font-family: 'Courier New', Courier, monospace; line-height: 1.3; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;ssh-add -l&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style="font-size: 10pt; line-height: 13pt; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;You can remove an identity from the ssh-agent with:&lt;div class="code panel" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(102, 153, 204); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(102, 153, 204); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(102, 153, 204); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(102, 153, 204); border-top-style: dashed; border-top-width: 1px; color: black; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div class="codeContent panelContent" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-size: 0.95em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 12px; padding-left: 10px; padding-right: 10px; padding-top: 12px; text-align: left;"&gt;&lt;pre class="code-none" style="font-family: 'Courier New', Courier, monospace; line-height: 1.3; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;ssh-add -d&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Please consult ssh-add manual for more options (identity lifetime, agent locking, ...)&lt;/div&gt;&lt;h2 style="border-bottom-color: rgb(102, 153, 204); color: #003366; font-size: 18pt; font-weight: bold; line-height: normal; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 32px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=3526487000938261036" name="StartingasetofErlangclusternodes-Routingtoandfromthecluster"&gt;&lt;/a&gt;Routing to and from the cluster&lt;/h2&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;When setting up clusters, you can often only access the gateway/load balancer front computer. To access the other node, you need to tell the gateway machine to route your requests to the cluster nodes.&lt;/div&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;To take an example, suppose your gateway to the cluster is 80.65.232.137. The controler machine is a computer outside the cluster. This is computer where the operator is controling the cluster behaviour. Your cluster internal adresses form the following network: 192.0.0.0. On your client computer, launch the command:&lt;/div&gt;&lt;div class="code panel" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-color: rgb(102, 153, 204); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(102, 153, 204); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(102, 153, 204); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(102, 153, 204); border-top-style: dashed; border-top-width: 1px; color: black; font-size: 10pt; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div class="codeContent panelContent" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-size: 0.95em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 12px; padding-left: 10px; padding-right: 10px; padding-top: 12px; text-align: left;"&gt;&lt;pre class="code-none" style="font-family: 'Courier New', Courier, monospace; line-height: 1.3; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;route add -net 192.0.0.0 gw 80.65.232.137 netmask 255.255.255.0&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="panelMacro" style="font-size: 10pt; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; overflow-x: hidden; overflow-y: hidden;"&gt;&lt;table class="noteMacro" style="background-color: #ffffce; clear: left; color: black; font-size: 10pt; line-height: 13pt; padding-bottom: 0px; padding-left: 20px; padding-right: 20px; padding-top: 0px; text-align: left; width: 1200px;"&gt;&lt;colgroup&gt;&lt;col width="24"&gt;&lt;/col&gt;&lt;col&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="color: black; font-size: 10pt; line-height: 13pt;"&gt;&lt;td style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; color: black; font-size: 1em; line-height: 13pt; padding-bottom: 14px; padding-left: 0px; padding-right: 0px; padding-top: 14px;" valign="top"&gt;&lt;img align="absmiddle" alt="" border="0" height="16" src="https://support.process-one.net/doc/images/icons/emoticons/warning.gif" width="16" /&gt;&lt;/td&gt;&lt;td style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; color: black; font-size: 1em; line-height: 13pt; padding-bottom: 14px; padding-left: 0px; padding-right: 0px; padding-top: 14px;"&gt;This will only works if IP forwarding is activated on the gateway computer.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;To ensure proper routing, you can maintain an common /etc/hosts file with entries for all computers in your cluster. In our example, with a seven-computers cluster, the file /etc/hosts could look like:&lt;/div&gt;&lt;div class="code panel" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-color: rgb(102, 153, 204); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(102, 153, 204); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(102, 153, 204); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(102, 153, 204); border-top-style: dashed; border-top-width: 1px; color: black; font-size: 10pt; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div class="codeContent panelContent" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-size: 0.95em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 12px; padding-left: 10px; padding-right: 10px; padding-top: 12px; text-align: left;"&gt;&lt;pre class="code-none" style="font-family: 'Courier New', Courier, monospace; line-height: 1.3; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;10.9.195.12   controler&lt;br /&gt;80.65.232.137 gateway&lt;br /&gt;192.0.0.11    eddieware&lt;br /&gt;192.0.0.21    yaws1&lt;br /&gt;192.0.0.22    yaws2&lt;br /&gt;192.0.0.31    mnesia1 &lt;br /&gt;192.0.0.32    mnesia2&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;You could also add a DNS server, but for relatively small cluster, it is probably easier to manage an /etc/hosts file.&lt;/div&gt;&lt;h2 style="border-bottom-color: rgb(102, 153, 204); color: #003366; font-size: 18pt; font-weight: bold; line-height: normal; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 32px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=3526487000938261036" name="StartingasetofErlangclusternodes-StartingErlangnodesandsettinguptheErlangcluster"&gt;&lt;/a&gt;Starting Erlang nodes and setting up the Erlang cluster&lt;/h2&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Starting a whole Erlang cluster can be done very easily once you can connect with SSH to all cluster node without being prompt for a password.&lt;/div&gt;&lt;h3 style="color: #003366; font-size: 15pt; font-weight: bold; line-height: normal; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 28px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=3526487000938261036" name="StartingasetofErlangclusternodes-StartingtheErlangmasternode"&gt;&lt;/a&gt;Starting the Erlang master node&lt;/h3&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Erlang needs to be started with the -rsh ssh parameters to use ssh connection to the target nodes within the slave command, instead of rsh connection. It also need to be started with network enable with the -sname node parameter.&lt;/div&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Here is an example Erlang command to start the Erlang master node:&lt;/div&gt;&lt;div class="code panel" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-color: rgb(102, 153, 204); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(102, 153, 204); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(102, 153, 204); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(102, 153, 204); border-top-style: dashed; border-top-width: 1px; color: black; font-size: 10pt; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div class="codeContent panelContent" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-size: 0.95em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 12px; padding-left: 10px; padding-right: 10px; padding-top: 12px; text-align: left;"&gt;&lt;pre class="code-none" style="font-family: 'Courier New', Courier, monospace; line-height: 1.3; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;erl -rsh ssh -sname clustmaster&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Be carefull, your master node short name has to be sufficent to route from the slave nodes in the cluster to your master node. The slave:start timeout if it cannot connect back from the slave to your master node.&lt;/div&gt;&lt;h3 style="color: #003366; font-size: 15pt; font-weight: bold; line-height: normal; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 28px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=3526487000938261036" name="StartingasetofErlangclusternodes-Startingtheslavenodes%28cluster%29"&gt;&lt;/a&gt;Starting the slave nodes (cluster)&lt;/h3&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;The custom function cluster:slaves/1 is a wrapper to the Erlang slave function. It allows to easily start a set of Erlang node on target hosts with the same cookie.&lt;/div&gt;&lt;div class="code panel" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-color: rgb(102, 153, 204); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(102, 153, 204); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(102, 153, 204); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(102, 153, 204); border-top-style: dashed; border-top-width: 1px; color: black; font-size: 10pt; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div class="codeContent panelContent" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-size: 0.95em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 12px; padding-left: 10px; padding-right: 10px; padding-top: 12px; text-align: left;"&gt;&lt;pre class="code-none" style="font-family: 'Courier New', Courier, monospace; line-height: 1.3; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;-module(cluster).&lt;br /&gt;-export([slaves/1]).&lt;br /&gt;&lt;br /&gt;%% Argument:&lt;br /&gt;%% Hosts: List of hostname (string)&lt;br /&gt;slaves([]) -&amp;gt;&lt;br /&gt;ok;&lt;br /&gt;slaves([Host|Hosts]) -&amp;gt;&lt;br /&gt;  Args = erl_system_args(),&lt;br /&gt;  NodeName = "cluster",&lt;br /&gt;  {ok, Node} = slave:start_link(Host, NodeName, Args),&lt;br /&gt;  io:format("Erlang node started = [~p]~n", [Node]),&lt;br /&gt;  slaves(Hosts).&lt;br /&gt;&lt;br /&gt;erl_system_args()-&amp;gt;&lt;br /&gt;  Shared = case init:get_argument(shared) of&lt;br /&gt;    error -&amp;gt; " ";&lt;br /&gt;    {ok,[[]]} -&amp;gt; " -shared "&lt;br /&gt;  end,&lt;br /&gt;  lists:append(["-rsh ssh -setcookie",&lt;br /&gt;                atom_to_list(erlang:get_cookie()),&lt;br /&gt;                Shared, " +Mea r10b "]).&lt;br /&gt;&lt;br /&gt;%% Do not forget to start erlang with a command like:&lt;br /&gt;%% erl -rsh ssh -sname clustmaster&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Here is a sample session:&lt;/div&gt;&lt;div class="code panel" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-color: rgb(102, 153, 204); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(102, 153, 204); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(102, 153, 204); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(102, 153, 204); border-top-style: dashed; border-top-width: 1px; color: black; font-size: 10pt; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div class="codeContent panelContent" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-size: 0.95em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 12px; padding-left: 10px; padding-right: 10px; padding-top: 12px; text-align: left;"&gt;&lt;pre class="code-none" style="font-family: 'Courier New', Courier, monospace; line-height: 1.3; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;mremond@controler:~/cvs/cluster$ erl -rsh ssh -sname demo&lt;br /&gt;Erlang (BEAM) emulator version 5.3 [source] [hipe]&lt;br /&gt;Eshell V5.3 (abort with ^G)&lt;br /&gt;(demo@controler)1&amp;gt; cluster:slaves(["gateway", "yaws1", "yaws2", "mnesia1", "mnesia2", "eddieware"]).&lt;br /&gt;Erlang node started = [cluster@gateway]&lt;br /&gt;Erlang node started = [cluster@yaws1]&lt;br /&gt;Erlang node started = [cluster@yaws2]&lt;br /&gt;Erlang node started = [cluster@mnesia1]&lt;br /&gt;Erlang node started = [cluster@mnesia2]&lt;br /&gt;Erlang node started = [cluster@eddieware]&lt;br /&gt;ok&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;The order of the nodes in the cluster:slaves/1 list parameter does not matter.&lt;/div&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;You can check the list of known nodes:&lt;/div&gt;&lt;div class="code panel" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-color: rgb(102, 153, 204); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(102, 153, 204); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(102, 153, 204); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(102, 153, 204); border-top-style: dashed; border-top-width: 1px; color: black; font-size: 10pt; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div class="codeContent panelContent" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-size: 0.95em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 12px; padding-left: 10px; padding-right: 10px; padding-top: 12px; text-align: left;"&gt;&lt;pre class="code-none" style="font-family: 'Courier New', Courier, monospace; line-height: 1.3; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;(demo@controler)2&amp;gt; nodes().&lt;br /&gt;[cluster@gateway,&lt;br /&gt;cluster@yaws1,&lt;br /&gt;cluster@yaws2,&lt;br /&gt;cluster@mnesia1,&lt;br /&gt;cluster@mnesia2,&lt;br /&gt;cluster@eddieware]&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="color: black; font-size: 10pt; line-height: 13pt; margin-bottom: 10px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;And you can start executing code on cluster nodes:&lt;/div&gt;&lt;div class="code panel" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-color: rgb(102, 153, 204); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(102, 153, 204); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(102, 153, 204); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(102, 153, 204); border-top-style: dashed; border-top-width: 1px; color: black; font-size: 10pt; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div class="codeContent panelContent" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-size: 0.95em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 12px; padding-left: 10px; padding-right: 10px; padding-top: 12px; text-align: left;"&gt;&lt;pre class="code-none" style="font-family: 'Courier New', Courier, monospace; line-height: 1.3; overflow-x: auto; overflow-y: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left;"&gt;(demo@controler)3&amp;gt; rpc:multicall(nodes(), io, format, ["Hello world!~n", []]).&lt;br /&gt;Hello world!&lt;br /&gt;Hello world!&lt;br /&gt;Hello world!&lt;br /&gt;Hello world!&lt;br /&gt;Hello world!&lt;br /&gt;Hello world!&lt;br /&gt;{[ok,ok,ok,ok,ok,ok],[]}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="panelMacro" style="margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; overflow-x: hidden; overflow-y: hidden;"&gt;&lt;table class="noteMacro" style="background-color: #ffffce; clear: left; color: black; font-size: 10pt; line-height: 13pt; padding-bottom: 0px; padding-left: 20px; padding-right: 20px; padding-top: 0px; text-align: left; width: 1200px;"&gt;&lt;colgroup&gt;&lt;col width="24"&gt;&lt;/col&gt;&lt;col&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="color: black; font-size: 10pt; line-height: 13pt;"&gt;&lt;td style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; color: black; font-size: 1em; line-height: 13pt; padding-bottom: 14px; padding-left: 0px; padding-right: 0px; padding-top: 14px;" valign="top"&gt;&lt;img align="absmiddle" alt="" border="0" height="16" src="https://support.process-one.net/doc/images/icons/emoticons/warning.gif" width="16" /&gt;&lt;/td&gt;&lt;td style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; color: black; font-size: 1em; line-height: 13pt; padding-bottom: 14px; padding-left: 0px; padding-right: 0px; padding-top: 14px;"&gt;If you have trouble with slave start, you can uncomment the line:&lt;br /&gt;%%io:format("Command: ~s~n", [Cmd])&lt;br /&gt;before the open_port instruction:&lt;br /&gt;open_port({spawn, Cmd}, [stream]),&lt;br /&gt;in the slave:wait_for_slave/7 function.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="font-size: 10pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 10pt;"&gt;&lt;br /&gt;&lt;/div&gt;from &amp;nbsp;&lt;a href="https://support.process-one.net/doc/display/ERL/Starting+a+set+of+Erlang+cluster+nodes"&gt;https://support.process-one.net/doc/display/ERL/Starting+a+set+of+Erlang+cluster+nodes&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="pageSection" id="labels-section" style="clear: both; margin-top: 10px;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-6234127558224649389?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/6234127558224649389/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2011/10/starting-set-of-erlang-cluster-nodes.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/6234127558224649389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/6234127558224649389'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2011/10/starting-set-of-erlang-cluster-nodes.html' title='Starting a set of Erlang cluster nodes'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-7869477907668843376</id><published>2011-10-20T02:04:00.002+09:00</published><updated>2012-01-04T11:32:47.715+09:00</updated><title type='text'>building WxWidgets 2.9.2 on os x lion</title><content type='html'>&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Lucida Grande', 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;./configure --enable-unicode --enable-debug --disable-shared --with-osx_cocoa --with-macosx-sdk=/Developer/SDKs/MacOSX10.6.sdk --with-macosx-version-min=10.5&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Lucida Grande', 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Lucida Grande', 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Lucida Grande', 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://forums.wxwidgets.org/viewtopic.php?f=23&amp;amp;t=30897"&gt;http://forums.wxwidgets.org/viewtopic.php?f=23&amp;amp;t=30897&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-7869477907668843376?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/7869477907668843376/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2011/10/building-292-on-os-x-lion.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/7869477907668843376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/7869477907668843376'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2011/10/building-292-on-os-x-lion.html' title='building WxWidgets 2.9.2 on os x lion'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-5676642507420375371</id><published>2011-10-17T18:33:00.001+09:00</published><updated>2011-10-17T18:33:04.705+09:00</updated><title type='text'></title><content type='html'>&lt;h1&gt;&lt;a href="http://www.pawprint.net/news/article/105/Compiling-FFMpeg-on-Centos-5/" title="Permalink"&gt;Compiling FFMpeg on Centos 5&lt;/a&gt;&lt;/h1&gt;&lt;h4&gt;a procedural guide to getting ffmpeg to work with webm, mp4(x264) and ogg(theora) output&lt;/h4&gt;&lt;em&gt;**Updated May 24th 2011 to change to ffmpeg git repository per comments.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;This is a highly technical guide to how we managed to install ffmpeg on several CentOS 5.5 32 and 64bit platforms to achieve an effective modern web video transcoder.&lt;br /&gt;&lt;br /&gt;For those struggling to figure out how to get ffmpeg to install and to have it work with as many input video formats as possible, we hope this guide saves you some time. It took us roughly a month of searching, trial and error, and tests to eventually get this to work over a period of a year on and off.&lt;br /&gt;&lt;br /&gt;Some Assumptions:&lt;br /&gt;1) &lt;strong&gt;CentOS5.x 32 or 64 bit&lt;/strong&gt; This may work for other platforms - probably should on RHEL and Fedora, but I have only tested it on CentOS.&lt;br /&gt;&lt;br /&gt;2) &lt;strong&gt;Minimal extra repositories&lt;/strong&gt; We know you can add yum repos that will give you ffmpeg, our goal here was a finer level of control and to get the latest latest libraries and svn of ffmpeg itself - also to keep our CentOS yum repo as clean as possible. Therefore - this is taking the long/manual way around.&lt;br /&gt;&lt;br /&gt;3) &lt;strong&gt;If ffmpeg fails - CLEAN IT&lt;/strong&gt; if you hit an error trying to build ffmpeg (we certainly hope you won't) be sure to completely clean that folder out (heck, I'd suggest even just re-grabbing the snapshot again) because you start to get unusual errors when you try to build on top of a failed build even if you "make clean" first.&lt;br /&gt;&lt;br /&gt;4) &lt;strong&gt;Video Encoding Tests&lt;/strong&gt; The video encoding tests at the bottom of the procedure were our own tests comprising videos we have had troubles encoding in the past. You can obviously replace these with your own test videos, we only left the command lines in there for your reference. These are not necessarily sane values and switches for encoding ffmpeg for the web - we're still researching the best solutions for that - they are merely tests to see if it works.&lt;br /&gt;&lt;br /&gt;5) &lt;strong&gt;The ffmpeg SVN Works&lt;/strong&gt; is it working right now, it may not when you try this - you should be able to switch to the ffmpeg release 0.61 if the svn download failes to work. That had just been released when these guide was prepared so we expect it will serve as a baseline for a functioning code base to use.&lt;br /&gt;&lt;br /&gt;6) &lt;strong&gt;VERSIONS CHANGE!!!!&lt;/strong&gt; to simplify things we have added a lot of direct download links for various libraries - if you are working through this guide and more then a month or two has elapsed since it was written (October 20th 2010) you should check if newer versions of the various libraries are available. As time passes this guide will obviously become obsolete.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;##################################################&lt;br /&gt;# FFMPEG Install Notes: 2010-10-20&lt;br /&gt;# &lt;br /&gt;# This install of FFMPEG has been designed to work on CentOS 5 platforms.&lt;br /&gt;# It have installed several systems 32 and 64 bit as well as on the EC2 cloud using this procedure.&lt;br /&gt;#&lt;br /&gt;# The goal here was to generate a web-focuse FFMPEG install that will read as many different formats as possible&lt;br /&gt;# and output to x264, webm, and ogg suitable for HTML5 web-based and mobile delivery.&lt;br /&gt;# If this is roughly your need then hopefully this procedure will help you as it took me several days to sort&lt;br /&gt;# it all out and get everything working.&lt;br /&gt;#&lt;br /&gt;# The following "scripted" install is designed to be manually copy and pasted&lt;br /&gt;# Watch each step and check for errors.&lt;br /&gt;#&lt;br /&gt;###################################################&lt;br /&gt;#&lt;br /&gt;# Might Be Required:&lt;br /&gt;# If you don't already have the epel repository&lt;br /&gt;# note: several install guides suggest adding other repositories - this procedure attempts&lt;br /&gt;# a manual compilation of ffmpeg specifically to avoid adding extra repositories that may&lt;br /&gt;# cause other problems with CentOS - thus only the epel and centos repos are assumed here.&lt;br /&gt;#&lt;br /&gt;wget &lt;a class="newWindow" href="http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm" title="inserted link"&gt;http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm&lt;/a&gt; &lt;br /&gt;rpm -Uvh epel-release-5*.rpm&lt;br /&gt;#&lt;br /&gt;##################################################&lt;br /&gt;# If you already have epel start here:&lt;br /&gt;# First Download all required libraries&lt;br /&gt;#&lt;br /&gt;git clone git://git.videolan.org/ffmpeg.git ffmpeg&lt;br /&gt;wget &lt;a class="newWindow" href="http://downloads.sourceforge.net/project/lame/lame/3.98.4/lame-3.98.4.tar.gz" title="inserted link"&gt;http://downloads.sourceforge.net/project/lame/lame/3.98.4/lame-3.98.4.tar.gz&lt;/a&gt; &lt;br /&gt;wget &lt;a class="newWindow" href="http://downloads.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2" title="inserted link"&gt;http://downloads.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2&lt;/a&gt; &lt;br /&gt;wget &lt;a class="newWindow" href="http://downloads.xvid.org/downloads/xvidcore-1.2.2.tar.gz" title="inserted link"&gt;http://downloads.xvid.org/downloads/xvidcore-1.2.2.tar.gz&lt;/a&gt; &lt;br /&gt;wget &lt;a class="newWindow" href="http://liba52.sourceforge.net/files/a52dec-0.7.4.tar.gz" title="inserted link"&gt;http://liba52.sourceforge.net/files/a52dec-0.7.4.tar.gz&lt;/a&gt; &lt;br /&gt;wget &lt;a class="newWindow" href="http://downloads.sourceforge.net/faac/faad2-2.7.tar.gz" title="inserted link"&gt;http://downloads.sourceforge.net/faac/faad2-2.7.tar.gz&lt;/a&gt; &lt;br /&gt;wget &lt;a class="newWindow" href="http://downloads.sourceforge.net/faac/faac-1.28.tar.gz" title="inserted link"&gt;http://downloads.sourceforge.net/faac/faac-1.28.tar.gz&lt;/a&gt; &lt;br /&gt;wget &lt;a class="newWindow" href="http://downloads.sourceforge.net/project/libraw1394/libraw1394/libraw1394-2.0.5.tar.gz" title="inserted link"&gt;http://downloads.sourceforge.net/project/libraw1394/libraw1394/libraw1394-2.0.5.tar.gz&lt;/a&gt; &lt;br /&gt;wget &lt;a class="newWindow" href="http://downloads.sourceforge.net/project/libdc1394/libdc1394-2/2.1.2/libdc1394-2.1.2.tar.gz" title="inserted link"&gt;http://downloads.sourceforge.net/project/libdc1394/libdc1394-2/2.1.2/libdc1394-2.1.2.tar.gz&lt;/a&gt; &lt;br /&gt;wget &lt;a class="newWindow" href="http://downloads.sourceforge.net/project/opencore-amr/opencore-amr/0.1.2/opencore-amr-0.1.2.tar.gz" title="inserted link"&gt;http://downloads.sourceforge.net/project/opencore-amr/opencore-amr/0.1.2/opencore-amr-0.1.2.tar.gz&lt;/a&gt; &lt;br /&gt;wget &lt;a class="newWindow" href="http://www3.mplayerhq.hu/MPlayer/releases/codecs/essential-20071007.tar.bz2" title="inserted link"&gt;http://www3.mplayerhq.hu/MPlayer/releases/codecs/essential-20071007.tar.bz2&lt;/a&gt; &lt;br /&gt;wget &lt;a class="newWindow" href="http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.bz2" title="inserted link"&gt;http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.bz2&lt;/a&gt; &lt;br /&gt;wget &lt;a class="newWindow" href="http://downloads.xiph.org/releases/ogg/libogg-1.1.4.tar.gz" title="inserted link"&gt;http://downloads.xiph.org/releases/ogg/libogg-1.1.4.tar.gz&lt;/a&gt; &lt;br /&gt;wget &lt;a class="newWindow" href="http://downloads.xiph.org/releases/vorbis/libvorbis-1.2.3.tar.gz" title="inserted link"&gt;http://downloads.xiph.org/releases/vorbis/libvorbis-1.2.3.tar.gz&lt;/a&gt; &lt;br /&gt;yum install yasm nasm&lt;br /&gt;yum install php-devel&lt;br /&gt;yum install libvpx*&lt;br /&gt;yum install git&lt;br /&gt;git clone git://git.videolan.org/x264.git&lt;br /&gt;&lt;br /&gt;tar -zxf lame-3.98.4.tar.gz&lt;br /&gt;tar -zxf xvidcore-1.2.2.tar.gz&lt;br /&gt;tar -jxf ffmpeg-php-0.6.0.tbz2&lt;br /&gt;tar -zxf a52dec-0.7.4.tar.gz&lt;br /&gt;tar -zxf faad2-2.7.tar.gz&lt;br /&gt;tar -zxf faac-1.28.tar.gz&lt;br /&gt;tar -zxf libraw1394-2.0.5.tar.gz&lt;br /&gt;tar -zxf libdc1394-2.1.2.tar.gz&lt;br /&gt;tar -zxf opencore-amr-0.1.2.tar.gz&lt;br /&gt;tar -jxf essential-20071007.tar.bz2&lt;br /&gt;tar -jxf libtheora-1.1.1.tar.bz2&lt;br /&gt;tar -zxf libogg-1.1.4.tar.gz&lt;br /&gt;tar -zxf libvorbis-1.2.3.tar.gz&lt;br /&gt;&lt;br /&gt;mkdir /usr/local/lib/codecs/&lt;br /&gt;cp ./essential-20071007/* /usr/local/lib/codecs/&lt;br /&gt;chmod -R 755 /usr/local/lib/codecs/&lt;br /&gt;##############&lt;br /&gt;# For 64 Bit Systems ALSO do this:&lt;br /&gt;#&lt;br /&gt;mkdir /usr/local/lib64/codecs/&lt;br /&gt;cp ./essential-20071007/* /usr/local/lib64/codecs/&lt;br /&gt;chmod -R 755 /usr/local/lib64/codecs/&lt;br /&gt;##############&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;cd x264&lt;br /&gt;./configure --enable-shared&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;&lt;br /&gt;cd xvidcore/build/generic&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ../../../&lt;br /&gt;&lt;br /&gt;cd lame-3.98.4&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;&lt;br /&gt;cd a52dec-0.7.4&lt;br /&gt;./configure --enable-shared=PKGS&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;&lt;br /&gt;cd faad2-2.7&lt;br /&gt;autoreconf -vif&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;&lt;br /&gt;cd faac-1.28&lt;br /&gt;./bootstrap&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;&lt;br /&gt;cd libraw1394-2.0.5&lt;br /&gt;./bootstrap&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;&lt;br /&gt;cd libdc1394-2.1.2&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;&lt;br /&gt;cd opencore-amr-0.1.2&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;&lt;br /&gt;cd libogg-1.1.4&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;&lt;br /&gt;cd libvorbis-1.2.3&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;&lt;br /&gt;cd libtheora-1.1.1&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;&lt;br /&gt;export LD_LIBRARY_PATH=/usr/local/lib/&lt;br /&gt;echo /usr/local/lib &amp;gt; /etc/ld.so.conf.d/custom-libs.conf&lt;br /&gt;ldconfig&lt;br /&gt;&lt;br /&gt;cd ffmpeg&lt;br /&gt;./configure --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvpx --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --disable-ffplay --enable-shared --enable-gpl --enable-postproc --enable-nonfree --enable-avfilter --enable-pthreads --extra-cflags=-fPIC&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;&lt;br /&gt;ldconfig&lt;br /&gt;&lt;br /&gt;##################################################&lt;br /&gt;#&lt;br /&gt;# The following is to add ffmpeg-php if you need that&lt;br /&gt;#&lt;br /&gt;#&lt;br /&gt;cd ffmpeg-php-0.6.0&lt;br /&gt;######################################################&lt;br /&gt;# For version 0.6.0 fix a typo in the framer function:&lt;br /&gt;# Copy &amp;amp; Paste each line seperately&lt;br /&gt;&lt;br /&gt;vi ffmpeg_frame.c&lt;br /&gt;&lt;br /&gt;:%s/PIX_FMT_RGBA32/PIX_FMT_RGB32&lt;br /&gt;&lt;br /&gt;:wq&lt;br /&gt;######################################################&lt;br /&gt;phpize&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ..&lt;br /&gt;#&lt;br /&gt;# your php.ini may be somewhere else:&lt;br /&gt;#&lt;br /&gt;vi /etc/into php.ini&lt;br /&gt;# add the line: &lt;br /&gt;extension=ffmpeg.so&lt;br /&gt;&lt;br /&gt;:wq&lt;br /&gt;#&lt;br /&gt;/etc/rc.d/init.d/httpd restart&lt;br /&gt;&lt;br /&gt;##################################################&lt;br /&gt;# Encoding Tests&lt;br /&gt;#&lt;br /&gt;# The following assume 5 source video files exist in the current directory.&lt;br /&gt;# This part was added to test several video files that have caused problems in the past as a baseline and&lt;br /&gt;# to prove the various encoding outputs can handle them.&lt;br /&gt;#&lt;br /&gt;# alien.mpg&lt;br /&gt;# soccer.flv&lt;br /&gt;# scratch.wmv&lt;br /&gt;# pump.asf&lt;br /&gt;# recent.mp4&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#############################################&lt;br /&gt;# MPEG Source&lt;br /&gt;# Baseline MP4&lt;br /&gt;ffmpeg -i alien.mpg -vcodec libx264 -vpre main -b 340000 -bt 400000 -threads 0 -y alienBase.mp4&lt;br /&gt;&lt;br /&gt;# iPod MP4&lt;br /&gt;ffmpeg -i alien.mpg -acodec libfaac -ab 96000 -vcodec libx264 -vpre slow -vpre ipod640 -b 348160 -bt 524288 -aspect 16:9 -threads 0 -f ipod -y alienPod.mp4&lt;br /&gt;&lt;br /&gt;# WebM&lt;br /&gt;ffmpeg -i alien.mpg -b 348160 -bt 524288 -acodec libvorbis -ab 96000 -threads 0 -y alienWeb.webm&lt;br /&gt;&lt;br /&gt;# Ogg Vorbis&lt;br /&gt;ffmpeg -i alien.mpg -b 348160 -bt 524288 -acodec libvorbis -ab 96000 -threads 0 -y alienWeb.ogg&lt;br /&gt;&lt;br /&gt;#############################################&lt;br /&gt;# FLV Source&lt;br /&gt;# iPod MP4&lt;br /&gt;ffmpeg -i soccer.flv -acodec libfaac -ab 96000 -vcodec libx264 -vpre slow -vpre ipod640 -b 348160 -bt 524288 -aspect 16:9 -threads 0 -f ipod -y soccerPod.mp4&lt;br /&gt;&lt;br /&gt;# WebM&lt;br /&gt;ffmpeg -i soccer.flv -b 348160 -bt 524288 -acodec libvorbis -ab 96000 -threads 0 -y soccerWeb.webm&lt;br /&gt;&lt;br /&gt;# Ogg Vorbis&lt;br /&gt;ffmpeg -i soccer.flv -b 348160 -bt 524288 -acodec libvorbis -ab 96000 -threads 0 -y soccerWeb.ogg&lt;br /&gt;&lt;br /&gt;#############################################&lt;br /&gt;# WMV Source&lt;br /&gt;# iPod MP4&lt;br /&gt;ffmpeg -i scratch.wmv -acodec libfaac -ab 96000 -vcodec libx264 -vpre slow -vpre ipod640 -b 348160 -bt 524288 -aspect 16:9 -threads 0 -f ipod -y scratchPod.mp4&lt;br /&gt;&lt;br /&gt;# WebM&lt;br /&gt;ffmpeg -i scratch.wmv -b 348160 -bt 524288 -acodec libvorbis -ab 96000 -threads 0 -y scratchWeb.webm&lt;br /&gt;&lt;br /&gt;# Ogg Vorbis&lt;br /&gt;ffmpeg -i scratch.wmv -b 348160 -bt 524288 -acodec libvorbis -ab 96000 -threads 0 -y scratchWeb.ogg&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#############################################&lt;br /&gt;# ASF Source&lt;br /&gt;# iPod MP4&lt;br /&gt;ffmpeg -i pump.asf -acodec libfaac -ab 96000 -vcodec libx264 -vpre slow -vpre ipod640 -b 348160 -bt 524288 -aspect 16:9 -threads 0 -f ipod -y pumpPod.mp4&lt;br /&gt;&lt;br /&gt;# WebM&lt;br /&gt;ffmpeg -i pump.asf -b 348160 -bt 524288 -acodec libvorbis -ab 96000 -threads 0 -y pumpWeb.webm&lt;br /&gt;&lt;br /&gt;# Ogg Vorbis&lt;br /&gt;ffmpeg -i pump.asf -b 348160 -bt 524288 -acodec libvorbis -ab 96000 -threads 0 -y pumpWeb.ogg&lt;br /&gt;&lt;br /&gt;#############################################&lt;br /&gt;# mp4 Source&lt;br /&gt;# iPod MP4&lt;br /&gt;ffmpeg -i recent.mp4 -acodec libfaac -ab 96000 -vcodec libx264 -vpre slow -vpre ipod640 -b 348160 -bt 524288 -aspect 16:9 -threads 0 -f ipod -y recentPod.mp4&lt;br /&gt;&lt;br /&gt;# WebM&lt;br /&gt;ffmpeg -i recent.mp4 -b 348160 -bt 524288 -acodec libvorbis -ab 96000 -threads 0 -y recentWeb.webm&lt;br /&gt;&lt;br /&gt;# Ogg Vorbis&lt;br /&gt;ffmpeg -i recent.mp4 -b 348160 -bt 524288 -acodec libvorbis -ab 96000 -threads 0 -y recentWeb.ogg&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-5676642507420375371?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/5676642507420375371/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2011/10/compiling-ffmpeg-on-centos-5-procedural.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/5676642507420375371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/5676642507420375371'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2011/10/compiling-ffmpeg-on-centos-5-procedural.html' title=''/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-551392239223348765</id><published>2011-10-14T12:30:00.002+09:00</published><updated>2011-10-15T15:55:15.457+09:00</updated><title type='text'>RedHat Enterprise Linux 5 (x86_64) 에서 yum 사용하기</title><content type='html'>&lt;span class="Apple-style-span" style="background-color: white; color: #666666; font-family: Dotum, Verdana, AppleGothic, sans-serif; font-size: 12px; line-height: 18px;"&gt;&lt;/span&gt;&lt;br /&gt;#cd /etc/yum.repos.d&lt;br /&gt;#mv rhel-debuginfo.repo rhel-debuginfo.repo.bak&lt;br /&gt;#vi rhel-debuginfo.repo&lt;br /&gt;--------------------------&lt;br /&gt;[base]&lt;br /&gt;name=CentOS-$releasever - Base&lt;br /&gt;baseurl=http://mirror.centos.org/centos/5/os/$basearch/&lt;br /&gt;gpgcheck=1&lt;br /&gt;&lt;br /&gt;#released updates&lt;br /&gt;[update]&lt;br /&gt;name=CentOS-$releasever - Updates&lt;br /&gt;baseurl=http://mirror.centos.org/centos/5/updates/$basearch/&lt;br /&gt;gpgcheck=1&lt;br /&gt;--------------------------&lt;br /&gt;&lt;br /&gt;#rpm --import http://mirror.centos.org/centos/5/os/x86_64/RPM-GPG-KEY-CentOS-5&lt;br /&gt;&lt;br /&gt;#rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm&lt;br /&gt;#yum list&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-551392239223348765?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/551392239223348765/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2011/10/redhat-enterprise-linux-5-yum.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/551392239223348765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/551392239223348765'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2011/10/redhat-enterprise-linux-5-yum.html' title='RedHat Enterprise Linux 5 (x86_64) 에서 yum 사용하기'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-4722223322971031774</id><published>2011-07-08T17:47:00.000+09:00</published><updated>2011-07-08T17:47:25.209+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='ssh'/><category scheme='http://www.blogger.com/atom/ns#' term='sftp'/><title type='text'>erlang에서 sftp 실행하기</title><content type='html'>&lt;span style="color: blue;"&gt;application:start(crypto).&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;application:start(ssh).&lt;/span&gt;&lt;br /&gt;{ok, ConnectionRef} = ssh:connect(Host,Port,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [{silently_accept_hosts, true}, {timeout, Timeout},{user,User},{password,Password}]).&lt;br /&gt;{ok,ChannelPid}=ssh_sftp:start_channel(ConnectionRef).&lt;br /&gt;&lt;br /&gt;Data=ssh_sftp:read_file(ChannelPid, File).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-4722223322971031774?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/4722223322971031774/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2011/07/erlang-sftp.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/4722223322971031774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/4722223322971031774'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2011/07/erlang-sftp.html' title='erlang에서 sftp 실행하기'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-5797085431711688494</id><published>2011-06-13T14:32:00.003+09:00</published><updated>2011-07-08T17:44:45.959+09:00</updated><title type='text'>도미니크의 블로그</title><content type='html'>&lt;a href="http://blog.daum.net/ilovedominic"&gt;http://blog.daum.net/ilovedominic&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-5797085431711688494?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/5797085431711688494/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2011/06/blog-post.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/5797085431711688494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/5797085431711688494'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2011/06/blog-post.html' title='도미니크의 블로그'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-3263276392063219737</id><published>2011-04-20T12:04:00.001+09:00</published><updated>2011-04-20T12:05:01.047+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='odbc'/><title type='text'>erlang 에서 odbc 사용하기</title><content type='html'>========================================&lt;br /&gt;cat /etc/odbc.ini&lt;br /&gt;------------------------------------------------------&lt;br /&gt;[myodbc]&lt;br /&gt;Driver = /usr/lib/odbc/libmyodbc.so&lt;br /&gt;Description = MySQL ODBC Driver DSN&lt;br /&gt;SERVER = localhost&lt;br /&gt;PORT&amp;nbsp;&amp;nbsp;&amp;nbsp; =&lt;br /&gt;USER&amp;nbsp;&amp;nbsp;&amp;nbsp; = &lt;br /&gt;Password&amp;nbsp;&amp;nbsp;&amp;nbsp; = &lt;br /&gt;Database&amp;nbsp;&amp;nbsp;&amp;nbsp; = &lt;br /&gt;OPTION&amp;nbsp;&amp;nbsp;&amp;nbsp; = 3&lt;br /&gt;SOCKET&amp;nbsp;&amp;nbsp;&amp;nbsp; =&lt;br /&gt;========================================&lt;br /&gt;&lt;br /&gt;========================================&lt;br /&gt;cat /etc/odbcinst.ini &lt;br /&gt;------------------------------------------------------&lt;br /&gt;[MySQL]&lt;br /&gt;Description&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; = MySQL ODBC Driver&lt;br /&gt;Driver&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; = /usr/lib/odbc/libmyodbc.so&lt;br /&gt;Setup&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; = /usr/lib/odbc/libmyodbc.so&lt;br /&gt;UsageCount&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; = 1&lt;br /&gt;========================================&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;application:start(odbc).&lt;br /&gt;{ok,Ref} = odbc:connect("DSN=myodbc;UID=root;PWD=myPassword",[]).&lt;br /&gt;odbc:sql_query(Ref,"select version();").&lt;br /&gt;odbc:sql_query(Ref,"use mydatabase;").&lt;br /&gt;odbc:sql_query(Ref,"select * from MyTable;").&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-3263276392063219737?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/3263276392063219737/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2011/04/erlang-odbc.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/3263276392063219737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/3263276392063219737'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2011/04/erlang-odbc.html' title='erlang 에서 odbc 사용하기'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-6986699694833627136</id><published>2010-12-28T21:16:00.002+09:00</published><updated>2011-12-21T11:38:34.618+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><title type='text'>erlang 에서 MAC 값 구하기</title><content type='html'>{ok, [{hwaddr, PL}]}=inet:ifget("eth0", [hwaddr]).&lt;br /&gt;string:join([hd(io_lib:format("~2.16.0B",[X])) || X &amp;lt;- PL], ":").&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-6986699694833627136?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/6986699694833627136/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2010/12/erlang-mac.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/6986699694833627136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/6986699694833627136'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2010/12/erlang-mac.html' title='erlang 에서 MAC 값 구하기'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-3997977590491613688</id><published>2010-10-28T22:04:00.000+09:00</published><updated>2011-12-21T11:38:54.023+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><title type='text'>erlang OTP R14A  source compile</title><content type='html'>&lt;span style="font-family: 'Courier New';"&gt;wx 관련 에러때문에 아래 개발 패키지를 먼저 설치해야 한다.&lt;br /&gt;sudo apt-get install libwxbase2.8-dev libwxgtk2.8-dev libgl1-mesa-dev libglu1-mesa-dev libglut3-dev&lt;br /&gt;&lt;/span&gt;NOTE2: &lt;span style="font-family: 'Courier New';"&gt;configure&lt;/span&gt; 시에 &lt;span style="font-family: 'Courier New';"&gt;--enable-smp-support&lt;/span&gt; 옵션을 꼭 줘야하고, 실행시에는 &lt;span style="font-family: 'Courier New';"&gt;-smp&lt;/span&gt; 옵션을 주어야한다(&lt;span style="font-family: 'Courier New';"&gt;erl -smp&lt;/span&gt;). 안 그러면 runtime에 다음과 같은 에러가 나면서 실행이 안된다.&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #fedec7; border: 1px dashed rgb(254, 137, 67); padding: 10px;"&gt;&lt;span style="font-family: 'Courier New';"&gt;WX ERROR: SMP emulator required** exception error: not_smp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in function&amp;nbsp; wxe_server:start/0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in call from wx:new/1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in call from hello:start/0&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;hr size="2" width="100%" /&gt;&lt;span style="font-family: 'Courier New';"&gt;&lt;br /&gt;&lt;/span&gt;gcj 를 사용하면 jinterface 에서 에러난다. sun-java 를 쓴다.&lt;br /&gt;&lt;br /&gt;cd&amp;nbsp; /usr/local/src&lt;br /&gt;git clone http://github.com/erlang/otp.git&lt;br /&gt;cd otp&lt;br /&gt;git checkout -b R14A OTP_R14A&lt;br /&gt;&lt;br /&gt;sudo ./otp_build setup -a --enable-smp-support&lt;br /&gt;sudo ./otp_build release -a /usr/local/erlang&lt;br /&gt;sudo make install&lt;br /&gt;sudo ln -s /usr/local/erlang/lib/erl_interface-3.7/include/ei.h&amp;nbsp; /usr/include&lt;br /&gt;&lt;hr size="2" width="100%" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-3997977590491613688?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/3997977590491613688/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2010/10/erlang-otp-r14a-source-compile.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/3997977590491613688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/3997977590491613688'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2010/10/erlang-otp-r14a-source-compile.html' title='erlang OTP R14A  source compile'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-8504682011317749065</id><published>2010-10-18T18:35:00.002+09:00</published><updated>2010-10-18T18:35:51.731+09:00</updated><title type='text'></title><content type='html'>&lt;ul id="pagelocation"&gt;&lt;li&gt;&lt;a class="backlink" href="https://help.ubuntu.com/community/UbuntuBonding?action=fullsearch&amp;amp;context=180&amp;amp;value=linkto%3A%22UbuntuBonding%22" rel="nofollow" title="이 문서 제목이 포함된 다른 문서를 찾으시려면 여기를 누르세요"&gt;UbuntuBonding&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div dir="ltr" id="content" lang="en"&gt;&lt;span class="anchor" id="top"&gt;&lt;/span&gt; &lt;span class="anchor" id="line-1"&gt;&lt;/span&gt;&lt;div&gt;&lt;table style="background: none repeat scroll 0% 0% rgb(241, 241, 237); float: right; font-size: 0.9em; margin: 0pt 0pt 1em 1em; width: 40%;"&gt;&lt;tbody&gt;&lt;tr&gt;  &lt;td style="padding: 0.5em;"&gt;&lt;div class="table-of-contents"&gt;&lt;div class="table-of-contents-heading"&gt;차례&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="https://help.ubuntu.com/community/UbuntuBonding#Introduction"&gt;Introduction&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://help.ubuntu.com/community/UbuntuBonding#Installation"&gt;Installation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://help.ubuntu.com/community/UbuntuBonding#Module%20Alias%20Configuration"&gt;Module Alias Configuration&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://help.ubuntu.com/community/UbuntuBonding#Interface%20Configuration"&gt;Interface Configuration&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://help.ubuntu.com/community/UbuntuBonding#See%20Also"&gt;See Also&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;span class="anchor" id="line-2"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-3"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-4"&gt;&lt;/span&gt;&lt;div class="line867"&gt; &lt;/div&gt;&lt;h1 id="Introduction"&gt;Introduction&lt;/h1&gt;&lt;span class="anchor" id="line-5"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-6"&gt;&lt;/span&gt;&lt;div class="line874"&gt;I  hope this will be useful for those of you out there who want to  configure the bonding driver.  I am not going to cover 802.3ad as i do  not have a managed switch yet. &lt;span class="anchor" id="line-7"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-8"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line867"&gt; &lt;/div&gt;&lt;h1 id="Installation"&gt;Installation&lt;/h1&gt;&lt;span class="anchor" id="line-9"&gt;&lt;/span&gt;&lt;div class="line862"&gt;You have to install &lt;tt&gt;ifenslave&lt;/tt&gt;, it is a tool to attach and detach slave network interfaces to a bonding device. &lt;span class="anchor" id="line-10"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-11"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-12"&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre&gt;sudo apt-get install ifenslave&lt;/pre&gt;&lt;span class="anchor" id="line-13"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-14"&gt;&lt;/span&gt;&lt;div class="line867"&gt; &lt;/div&gt;&lt;h1 id="Module Alias Configuration"&gt;Module Alias Configuration&lt;/h1&gt;&lt;span class="anchor" id="line-15"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-16"&gt;&lt;/span&gt;&lt;div class="line874"&gt;create the following file: &lt;span class="anchor" id="line-17"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-18"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-19"&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre&gt;sudo vi /etc/modprobe.d/bonding.conf&lt;/pre&gt;&lt;span class="anchor" id="line-20"&gt;&lt;/span&gt;&lt;div class="line874"&gt;with the following contents &lt;span class="anchor" id="line-21"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-22"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-23"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-24"&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre&gt;alias bond0 bonding&lt;br /&gt; options bonding mode=0 miimon=100&lt;/pre&gt;&lt;span class="anchor" id="line-25"&gt;&lt;/span&gt;&lt;div class="line874"&gt;The  bonding options (except Hardy) can also be configured at network  interface level in /etc/network/interfaces, see further below for an  example. &lt;span class="anchor" id="line-26"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-27"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line874"&gt;If  you wish you can go further and lock put in aliases for your Ethernet  cards, but as these days everything seems to be locked to the mac  address I haven't &lt;span class="anchor" id="line-28"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-29"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line874"&gt;mode=0 (balance-rr) &lt;span class="anchor" id="line-30"&gt;&lt;/span&gt;Round-robin  policy: Transmit packets in sequential order from the first available  slave through the last. This mode provides load balancing and fault  tolerance. &lt;span class="anchor" id="line-31"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-32"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line874"&gt;mode=1 (active-backup) &lt;span class="anchor" id="line-33"&gt;&lt;/span&gt;Active-backup  policy: Only one slave in the bond is active. A different slave becomes  active if, and only if, the active slave fails. The bond's MAC address  is externally visible on only one port (network adapter) to avoid  confusing the switch. This mode provides fault tolerance. The primary  option affects the behavior of this mode. &lt;span class="anchor" id="line-34"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-35"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line874"&gt;mode=2 (balance-xor) &lt;span class="anchor" id="line-36"&gt;&lt;/span&gt;XOR  policy: Transmit based on [(source MAC address XOR'd with destination  MAC address) modulo slave count]. This selects the same slave for each  destination MAC address. This mode provides load balancing and fault  tolerance. &lt;span class="anchor" id="line-37"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-38"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line874"&gt;mode=3 (broadcast) &lt;span class="anchor" id="line-39"&gt;&lt;/span&gt;Broadcast policy: transmits everything on all slave interfaces. This mode provides fault tolerance. &lt;span class="anchor" id="line-40"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-41"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line874"&gt;mode=4 (802.3ad) &lt;span class="anchor" id="line-42"&gt;&lt;/span&gt;IEEE  802.3ad Dynamic link aggregation. Creates aggregation groups that share  the same speed and duplex settings. Utilizes all slaves in the active  aggregator according to the 802.3ad specification. &lt;span class="anchor" id="line-43"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-44"&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="list-style-type: none;"&gt;Pre-requisites: &lt;span class="anchor" id="line-45"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Ethtool support in the base drivers for retrieving &lt;span class="anchor" id="line-46"&gt;&lt;/span&gt;the speed and duplex of each slave. &lt;span class="anchor" id="line-47"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;A switch that supports IEEE 802.3ad Dynamic link &lt;span class="anchor" id="line-48"&gt;&lt;/span&gt;aggregation. &lt;span class="anchor" id="line-49"&gt;&lt;/span&gt;Most switches will require some type of configuration &lt;span class="anchor" id="line-50"&gt;&lt;/span&gt;to enable 802.3ad mode. &lt;span class="anchor" id="line-51"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-52"&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="line874"&gt;mode=5 (balance-tlb) &lt;span class="anchor" id="line-53"&gt;&lt;/span&gt;Adaptive  transmit load balancing: channel bonding that does not require any  special switch support. The outgoing traffic is distributed according to  the current load (computed relative to the speed) on each slave.  Incoming traffic is received by the current slave. If the receiving  slave fails, another slave takes over the MAC address of the failed  receiving slave. &lt;span class="anchor" id="line-54"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-55"&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="list-style-type: none;"&gt;Prerequisite: &lt;span class="anchor" id="line-56"&gt;&lt;/span&gt;Ethtool support in the base drivers for retrieving the &lt;span class="anchor" id="line-57"&gt;&lt;/span&gt;speed of each slave. &lt;span class="anchor" id="line-58"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-59"&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="line874"&gt;mode=6 (balance-alb) &lt;span class="anchor" id="line-60"&gt;&lt;/span&gt;Adaptive  load balancing: includes balance-tlb plus receive load balancing (rlb)  for IPV4 traffic, and does not require any special switch support. The  receive load balancing is achieved by ARP negotiation. The bonding  driver intercepts the ARP Replies sent by the local system on their way  out and overwrites the source hardware address with the unique hardware  address of one of the slaves in the bond such that different peers use  different hardware addresses for the server. &lt;span class="anchor" id="line-61"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-62"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line874"&gt;The most used are the first four mode types... &lt;span class="anchor" id="line-63"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-64"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-65"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line867"&gt; &lt;/div&gt;&lt;h1 id="Interface Configuration"&gt;Interface Configuration&lt;/h1&gt;&lt;span class="anchor" id="line-66"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-67"&gt;&lt;/span&gt;&lt;div class="line874"&gt;now we need to create some entries in our network configuration. &lt;span class="anchor" id="line-68"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-69"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-70"&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre&gt;sudo vi /etc/network/interfaces&lt;/pre&gt;&lt;span class="anchor" id="line-71"&gt;&lt;/span&gt;&lt;div class="line862"&gt;Have a look at &lt;tt&gt;/usr/share/doc/ifenslave-2.6/README.Debian&lt;/tt&gt;. Your config file could look something like this &lt;span class="anchor" id="line-72"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-73"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-74"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-75"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-76"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-77"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-78"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-79"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-80"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-81"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-82"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-83"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-84"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-85"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-86"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-87"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-88"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-89"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-90"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-91"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-92"&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre&gt;# This file describes the network interfaces available on your system&lt;br /&gt; # and how to activate them. For more information, see interfaces(5).&lt;br /&gt;&lt;br /&gt; # The loopback network interface&lt;br /&gt; auto lo&lt;br /&gt; iface lo inet loopback&lt;br /&gt;&lt;br /&gt; # The primary network interface&lt;br /&gt; #auto eth0&lt;br /&gt; #iface eth0 inet dhcp&lt;br /&gt;&lt;br /&gt; auto bond0&lt;br /&gt; iface bond0 inet static&lt;br /&gt; address 192.168.1.10&lt;br /&gt; gateway 192.168.1.1&lt;br /&gt; netmask 255.255.255.0&lt;br /&gt; slaves eth0 eth1&lt;br /&gt; bond-mode 4&lt;br /&gt; bond-miimon 100&lt;/pre&gt;&lt;span class="anchor" id="line-93"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-94"&gt;&lt;/span&gt;&lt;div class="line874"&gt;Some older howto's sometimes mention another method to configure the bond &lt;span class="anchor" id="line-95"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-96"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-97"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-98"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-99"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-100"&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre&gt;pre-up modprobe bonding&lt;br /&gt; up ifenslave bond0 eth1 eth2&lt;br /&gt; pre-down ifenslave bond0 -d eth1 eth2&lt;br /&gt; post-down rmmod bonding&lt;/pre&gt;&lt;span class="anchor" id="line-101"&gt;&lt;/span&gt;&lt;div class="line874"&gt;This  method has some downturns. First, loading and unloading the module  through pre-up and post-down statements is not necessary, as the loading  already happens in the modprope.d config, and it might even be unwanted  in the case were one has multiple bonds configured, which would (try  to) unload the module after bringing one bond down, whilst it still  being in use for another &lt;span class="anchor" id="line-102"&gt;&lt;/span&gt;one.  Secondly, configuring the bond  (ifenslave bond0 eth1 eth2) in the  (post-)up statements didn't work for me: it seemed (post-)up happens  after &lt;span class="anchor" id="line-103"&gt;&lt;/span&gt;configuring an ip, but at that time the bond is not configured yet, &lt;span class="anchor" id="line-104"&gt;&lt;/span&gt;and configuring the ip results in an error. &lt;span class="anchor" id="line-105"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-106"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line867"&gt; &lt;/div&gt;&lt;h1 id="See Also"&gt;See Also&lt;/h1&gt;&lt;span class="anchor" id="line-107"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-108"&gt;&lt;/span&gt;&lt;div class="line867"&gt;&lt;a href="https://help.ubuntu.com/community/LinkAggregation"&gt;LinkAggregation&lt;/a&gt; &lt;span class="anchor" id="line-109"&gt;&lt;/span&gt;&lt;/div&gt;&lt;hr /&gt;&lt;div class="line874"&gt; &lt;span class="anchor" id="line-110"&gt;&lt;/span&gt;&lt;span class="anchor" id="bottom"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="info" dir="ltr" id="pageinfo" lang="ko"&gt;UbuntuBonding  (2009-12-09 22:31:33에 &lt;span title="https://login.launchpad.net/+id/FDAAcWY @ 146.174.250.5[146.174.250.5]"&gt;&lt;a class="interwiki" href="https://launchpad.net/%7Edon-doerner" title="https://login.launchpad.net/+id/FDAAcWY @ 146.174.250.5[146.174.250.5]"&gt;Don Doerner&lt;/a&gt;&lt;/span&gt;가(이) 마지막으로 수정)&lt;/div&gt;&lt;div class="info" dir="ltr" id="pageinfo" lang="ko"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="info" dir="ltr" id="pageinfo" lang="ko"&gt;&lt;a href="https://help.ubuntu.com/community/UbuntuBonding"&gt;https://help.ubuntu.com/community/UbuntuBonding&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-8504682011317749065?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/8504682011317749065/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2010/10/ubuntubonding-introduction-installation.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/8504682011317749065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/8504682011317749065'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2010/10/ubuntubonding-introduction-installation.html' title=''/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-383834876756632585</id><published>2010-09-03T16:45:00.000+09:00</published><updated>2010-09-03T16:45:55.604+09:00</updated><title type='text'>STLinux 에 boost 라이브러리 크로스 컴파일</title><content type='html'>vi tools/build/v2/user-config.jam&lt;br /&gt;add follows &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; using gcc : sh4 : /opt/STM/STLinux-2.4/devkit/sh4/bin/sh4-linux-gcc&lt;br /&gt;&lt;br /&gt;./bjam toolset=gcc-sh4&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-383834876756632585?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/383834876756632585/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2010/09/stlinux-boost.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/383834876756632585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/383834876756632585'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2010/09/stlinux-boost.html' title='STLinux 에 boost 라이브러리 크로스 컴파일'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-5386003628558649060</id><published>2010-08-25T02:01:00.002+09:00</published><updated>2010-08-25T02:01:47.057+09:00</updated><title type='text'>How to configure VLC player to stream RTSP/RTP over TCP (RTSP/RTP interleaved)</title><content type='html'>&lt;ol style="list-style-type: decimal;"&gt;&lt;li&gt;Open VLC&lt;/li&gt;&lt;li&gt;Select menu item &lt;b&gt;Tools: Preferences&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Select the &lt;b&gt;Input &amp;amp; Codecs&lt;/b&gt; section&lt;/li&gt;&lt;li&gt;Check the box &lt;b&gt;User RTP over RTSP (TCP)&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Click &lt;b&gt;Save&lt;/b&gt; button&lt;/li&gt;&lt;/ol&gt;http://www.wowzamedia.com/forums/showthread.php?t=7871&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-5386003628558649060?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/5386003628558649060/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2010/08/how-to-configure-vlc-player-to-stream.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/5386003628558649060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/5386003628558649060'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2010/08/how-to-configure-vlc-player-to-stream.html' title='How to configure VLC player to stream RTSP/RTP over TCP (RTSP/RTP interleaved)'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-1594187495159581688</id><published>2010-03-03T19:24:00.000+09:00</published><updated>2010-03-03T19:24:32.930+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><title type='text'>nodes() 에서 노드들이 안보일때</title><content type='html'>net_adm:ping(Node)&amp;nbsp; 로 핑을 하고 나서&lt;br /&gt;&lt;br /&gt;nodes()를 했더니 보인다.&lt;br /&gt;&lt;br /&gt;왜일까?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-1594187495159581688?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/1594187495159581688/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2010/03/nodes.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/1594187495159581688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/1594187495159581688'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2010/03/nodes.html' title='nodes() 에서 노드들이 안보일때'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-8376460058273020796</id><published>2010-02-26T11:35:00.003+09:00</published><updated>2010-02-26T11:36:35.409+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><title type='text'>yaws에서 RSS 제공하기</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-8376460058273020796?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.trapexit.org/How_to_setup_an_RSS_feed_with_Yaws' title='yaws에서 RSS 제공하기'/><link rel='enclosure' type='' href='http://www.trapexit.org/How_to_setup_an_RSS_feed_with_Yaws' length='0'/><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/8376460058273020796/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2010/02/yaws-rss.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/8376460058273020796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/8376460058273020796'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2010/02/yaws-rss.html' title='yaws에서 RSS 제공하기'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-4961800818720693686</id><published>2010-02-22T14:53:00.003+09:00</published><updated>2010-02-23T03:40:21.256+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><title type='text'>wake on lan</title><content type='html'>if target IP == 192.168.0.4, &amp;nbsp;&amp;nbsp; target MAC == 01:23:45:67:89:ab &lt;br /&gt;&lt;br /&gt;1&amp;gt; {ok,S}=gen_udp:open(0,[{broadcast,true}]).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2&amp;gt;&amp;nbsp; gen_udp:send(S, {192,168,0,4},&amp;nbsp; 9,&amp;nbsp; &amp;lt;&amp;lt;16#0123456789ab&amp;gt;&amp;gt;).&lt;br /&gt;&lt;br /&gt;or&amp;nbsp; &lt;br /&gt;&lt;br /&gt;2&amp;gt;&amp;nbsp; gen_udp:send(S, "192.168.0.4",&amp;nbsp; 9,&amp;nbsp; &amp;lt;&amp;lt;16#0123456789ab&amp;gt;&amp;gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-4961800818720693686?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/4961800818720693686/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2010/02/wake-on-lan.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/4961800818720693686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/4961800818720693686'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2010/02/wake-on-lan.html' title='wake on lan'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-8158472444585013908</id><published>2009-12-06T22:43:00.003+09:00</published><updated>2010-01-08T14:36:50.337+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='멀티미디어'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><title type='text'>XBMC</title><content type='html'>&lt;a href="http://xbmc-korea.com/"&gt;http://xbmc-korea.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://xbmc.org/"&gt;http://xbmc.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fxbmc.org%2Fwiki%2F%3Ftitle%3DHOW-TO_install_XBMC_for_Linux_on_Ubuntu_with_a_minimal_installation_step-by-step&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFrqEze7iD2OnnAVpq-iCj4CbjgnIBOHRg"&gt;ubuntu에 설치&lt;/a&gt;&lt;br /&gt;한글 메뉴&lt;br /&gt;=&amp;gt;&amp;nbsp; 한글 폰트가 있는 폰트가 등록되어야 한다. &lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; /usr/share/xbmc/skin/테마/720p/Font.xml 에 한글 폰트 추가. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; 아니면, 기존 폰트를 다른 것으로 링크를 바꾸면 된다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ln -s /usr/share/fonts/truetype/unfonts/UnBatang.ttf&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /usr/share/xbmc/media/Fonts/arial.ttf&lt;br /&gt;Rss&lt;br /&gt;=&amp;gt;&amp;nbsp; /usr/share/xbmc/userdata/RssFeeds.xml&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-8158472444585013908?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/8158472444585013908/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2009/12/xbmc.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/8158472444585013908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/8158472444585013908'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2009/12/xbmc.html' title='XBMC'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3526487000938261036.post-1818367653639704684</id><published>2009-10-02T20:52:00.002+09:00</published><updated>2010-01-10T01:01:23.935+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='삶'/><title type='text'>채근담 중에서..</title><content type='html'>天地寂然不動 천지적연부동&lt;br /&gt;而氣機無息少停 이기기무식소정&lt;br /&gt;日月晝夜奔馳 일월주야분치&lt;br /&gt;而貞明萬古不易 이정명만고불이&lt;br /&gt;故君子 고군자&lt;br /&gt;閒時要有喫緊的心思 한시요유끽긴적심사&lt;br /&gt;忙處要有悠閒的趣味 망처요유유한적취미&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;천지는 고요하여 움직임이 없지만&lt;br /&gt;그 기운은 쉬거나 작은 머뭄도 없다&lt;br /&gt;해와 달은 밤낮으로 분주하게 움직이지만&lt;br /&gt;그 밝음만은 만고에 조금의 움직임도 없다.&lt;br /&gt;이와 같이 군자도&lt;br /&gt;한가할때 긴박한 마음가짐을 갖추어야 하고&lt;br /&gt;분망해도 유연한 마음의 기상이 있어야 한다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3526487000938261036-1818367653639704684?l=blog.ersoul.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ersoul.com/feeds/1818367653639704684/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://blog.ersoul.com/2009/10/blog-post.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/1818367653639704684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3526487000938261036/posts/default/1818367653639704684'/><link rel='alternate' type='text/html' href='http://blog.ersoul.com/2009/10/blog-post.html' title='채근담 중에서..'/><author><name>CoRe</name><uri>http://www.blogger.com/profile/00783349522037243568</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_KV1rAu9OZwM/SLqTap_s2TI/AAAAAAAAAGU/pIjGXCCfo4c/S220/DSC00571.JPG'/></author><thr:total>0</thr:total></entry></feed>
