<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ProActiveRed</title>
	<atom:link href="http://proactivered.es/feed/" rel="self" type="application/rss+xml" />
	<link>http://proactivered.es</link>
	<description>Erlang, Asterisk y Sistemas.</description>
	<lastBuildDate>Fri, 20 Jan 2012 12:32:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>[Erlang] Cargar un fichero config sin reiniciar el sistema</title>
		<link>http://proactivered.es/2012/01/erlang-cargar-un-fichero-config-sin-reiniciar-el-sistema/</link>
		<comments>http://proactivered.es/2012/01/erlang-cargar-un-fichero-config-sin-reiniciar-el-sistema/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 11:40:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Erlang]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[reload]]></category>

		<guid isPermaLink="false">http://proactivered.es/?p=124</guid>
		<description><![CDATA[Para todos los que programamos en Erlang es posible que en algún momento necesitemos hacer un reload (cargar y/o recargar) el fichero de configuración sin tener que reiniciar el sistema. Después de buscar y ver mas aplicaciones encontré una solución que se implementa en el ejabberd. Vamos por partes para aquellos que están empezando a [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p><img src="http://proactivered.es/wp-content/uploads/2012/01/Reload-Page.png" alt="" title="Reload Page" width="256" height="256" class="aligncenter size-full wp-image-147" /></p>
<p>Para todos los que programamos en Erlang es posible que en algún momento necesitemos hacer un reload (cargar y/o recargar) el fichero de configuración sin tener que reiniciar el sistema. Después de buscar y ver mas aplicaciones encontré una solución que se implementa en el <a href="http://www.ejabberd.im/"> ejabberd</a>.</p>
<p>Vamos por partes para aquellos que están empezando a programar en Erlang.</p>
<h3>Cargar un fichero de configuración</h3>
<p>En la documentación [<a href="http://http://www.erlang.org/doc/man/config.html">Erlang: config </a>] podemos encontrar toda la información referente al fichero de configuración. En resumen el fichero debe de tener la siguiente estructura:</p>

<div class="wp_syntax"><div class="code"><pre class="erlang" style="font-family:monospace;"><span style="color: #109ab8;">&#91;</span><span style="color: #109ab8;">&#123;</span><span style="color: #45b3e6;">Application1</span><span style="color: #6bb810;">,</span> <span style="color: #109ab8;">&#91;</span><span style="color: #109ab8;">&#123;</span><span style="color: #45b3e6;">Par11</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Val11</span><span style="color: #109ab8;">&#125;</span><span style="color: #6bb810;">,</span> <span style="color: #6bb810;">..</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#125;</span><span style="color: #6bb810;">,</span>
 <span style="color: #6bb810;">..</span>
 <span style="color: #109ab8;">&#123;</span><span style="color: #45b3e6;">ApplicationN</span><span style="color: #6bb810;">,</span> <span style="color: #109ab8;">&#91;</span><span style="color: #109ab8;">&#123;</span><span style="color: #45b3e6;">ParN1</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">ValN1</span><span style="color: #109ab8;">&#125;</span><span style="color: #6bb810;">,</span> <span style="color: #6bb810;">..</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#125;</span><span style="color: #109ab8;">&#93;</span><span style="color: #6bb810;">.</span></pre></div></div>

<p>Para poder cargarla se debe de especificar en la línea de comando al lanzar el Erlang con el parámetro -config File tal y como se muestra a continuación:</p>

<div class="wp_syntax"><div class="code"><pre class="erlang" style="font-family:monospace;"># erl <span style="color: #014ea4;">-</span>sname <span style="color: #45b3e6;">MaquinaA</span> <span style="color: #014ea4;">-</span>config <span style="color: #014ea4;">/</span><span style="color: #45b3e6;">PATH</span><span style="color: #014ea4;">/</span>file<span style="color: #6bb810;">.</span>config</pre></div></div>

<p>Supondremos que nuestra aplicación tiene por nombre biblioteca y se encarga de registrar los tipos de libros escribiéndolas en un fichero especifico. Nuestro ejemplo de configuración seria de la siguiente manera:</p>

<div class="wp_syntax"><div class="code"><pre class="erlang" style="font-family:monospace;"><span style="color: #109ab8;">&#91;</span><span style="color: #109ab8;">&#123;</span>biblioteca<span style="color: #6bb810;">,</span> <span style="color: #666666; font-style: italic;">%% application name</span>
    <span style="color: #109ab8;">&#91;</span><span style="color: #109ab8;">&#123;</span>rutas<span style="color: #6bb810;">,</span> <span style="color: #666666; font-style: italic;">%% par</span>
           <span style="color: #109ab8;">&#91;</span><span style="color: #109ab8;">&#123;</span>ciencia_ficcion<span style="color: #6bb810;">,</span> <span style="color: #ff7800;">&quot;/tmp/ciencia_ficcion/&quot;</span><span style="color: #109ab8;">&#125;</span><span style="color: #6bb810;">,</span>
           <span style="color: #109ab8;">&#123;</span>historia<span style="color: #6bb810;">,</span> <span style="color: #ff7800;">&quot;/tmp/historia/&quot;</span><span style="color: #109ab8;">&#125;</span><span style="color: #6bb810;">,</span>
           <span style="color: #109ab8;">&#123;</span>novela<span style="color: #6bb810;">,</span> <span style="color: #ff7800;">&quot;/tmp/novela/&quot;</span><span style="color: #109ab8;">&#125;</span><span style="color: #109ab8;">&#93;</span>
    <span style="color: #109ab8;">&#125;</span><span style="color: #109ab8;">&#93;</span>
<span style="color: #109ab8;">&#125;</span><span style="color: #109ab8;">&#93;</span><span style="color: #6bb810;">.</span></pre></div></div>

<p>Para poder obtener estos datos hay que iniciar la aplicación [<a href="http://www.erlang.org/doc/man/application.html">Erlang: application</a>] y exportarlos con el siguiente comando :<br />
<em><strong>application:get_env(Application, Par) -&gt; Env</strong></em> tal y como se muestra a continuación:</p>

<div class="wp_syntax"><div class="code"><pre class="erlang" style="font-family:monospace;"><span style="color: #109ab8;">&#40;</span>nodo1@host<span style="color: #109ab8;">&#41;</span><span style="color: #ff9600;">1</span><span style="color: #014ea4;">&gt;</span> <span style="color: #ff4e18;">application</span>:<span style="color: #ff3c00;">start</span><span style="color: #109ab8;">&#40;</span>biblioteca<span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span>
<span style="color: #ff3c00;">ok</span>
<span style="color: #109ab8;">&#40;</span>nodo1@host<span style="color: #109ab8;">&#41;</span><span style="color: #ff9600;">2</span><span style="color: #014ea4;">&gt;</span> <span style="color: #ff4e18;">application</span>:<span style="color: #ff3c00;">get_env</span><span style="color: #109ab8;">&#40;</span>biblioteca<span style="color: #6bb810;">,</span> rutas<span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span>
<span style="color: #109ab8;">&#91;</span><span style="color: #109ab8;">&#123;</span>biblioteca<span style="color: #6bb810;">,</span><span style="color: #109ab8;">&#91;</span><span style="color: #109ab8;">&#123;</span>rutas<span style="color: #6bb810;">,</span><span style="color: #109ab8;">&#91;</span><span style="color: #109ab8;">&#123;</span>ciencia_ficcion<span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;/tmp/ciencia_ficcion/&quot;</span><span style="color: #109ab8;">&#125;</span><span style="color: #6bb810;">,</span>
   <span style="color: #109ab8;">&#123;</span>historia<span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;/tmp/historia/&quot;</span><span style="color: #109ab8;">&#125;</span><span style="color: #6bb810;">,</span>
   <span style="color: #109ab8;">&#123;</span>novela<span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;/tmp/novela/&quot;</span><span style="color: #109ab8;">&#125;</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#125;</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#125;</span><span style="color: #109ab8;">&#93;</span>
ok</pre></div></div>

<p>Hasta aquí todo muy bonito, pero ¿qué pasa si quiero cambiar la ruta de &#8220;<em>historia</em>&#8221; desde el fichero de configuración.? Con este modelo no es posible ya que la información del config se carga en memoria una sola vez y al iniciar la aplicación.  Entonces ¿cómo hacemos para que sea más dinámico y no tengamos que reiniciar cada vez que realicemos un cambio en la configuración?.</p>
<h3> Divide y vencerás </h3>
<p>¡Fácil.! Creando dos ficheros de configuración.  El primero que se va a cargar al inicio de la aplicación, tendrá <strong>la ruta del segundo fichero</strong> donde vendrá especificada toda la configuración.<br />
Sigamos con el ejemplo, ahora nuestro fichero file.config tendrá lo siguiente:</p>

<div class="wp_syntax"><div class="code"><pre class="erlang" style="font-family:monospace;"><span style="color: #109ab8;">&#91;</span><span style="color: #109ab8;">&#123;</span>biblioteca<span style="color: #6bb810;">,</span> <span style="color: #109ab8;">&#91;</span>
        <span style="color: #109ab8;">&#123;</span>cfg_path<span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;/urs/local/etc/biblioteca/biblioteca.cfg&quot;</span><span style="color: #109ab8;">&#125;</span>
        <span style="color: #109ab8;">&#93;</span>
<span style="color: #109ab8;">&#125;</span><span style="color: #109ab8;">&#93;</span><span style="color: #6bb810;">.</span></pre></div></div>

<p>Podemos observar que especificamos la ruta fija de otro fichero de configuración llamado <strong>biblioteca.cfg</strong>, la estructura que tendrá este cfg es la siguiente:</p>

<div class="wp_syntax"><div class="code"><pre class="erlang" style="font-family:monospace;"><span style="color: #109ab8;">&#123;</span>categorias<span style="color: #6bb810;">,</span><span style="color: #109ab8;">&#91;</span>
        <span style="color: #109ab8;">&#123;</span>ciencia_ficcion<span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;/tmp/ciencia_ficcion/&quot;</span><span style="color: #109ab8;">&#125;</span><span style="color: #6bb810;">,</span>
        <span style="color: #109ab8;">&#123;</span>historia<span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;/tmp/historia/&quot;</span><span style="color: #109ab8;">&#125;</span><span style="color: #6bb810;">,</span>
        <span style="color: #109ab8;">&#123;</span>novela<span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;/tmp/novela/&quot;</span><span style="color: #109ab8;">&#125;</span>
<span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#125;</span><span style="color: #6bb810;">.</span></pre></div></div>

<p>Ahora para poder cargar el segundo fichero utilizamos [ <a href="http://www.erlang.org/doc/man/file.html#consult-1">file:consult</a> ] para rescatar los terms del fichero. Así podemos cambiar los datos y utilizarlos en el sistema sin la necesidad de reiniciar la aplicación. </p>
<p>Nuestro código de configuración estará de la siguiente manera:</p>
<p><strong>config.erl</strong></p>

<div class="wp_syntax"><div class="code"><pre class="erlang" style="font-family:monospace;"><span style="color: #014ea4;">-</span><span style="color: #5400b3;">module</span><span style="color: #109ab8;">&#40;</span>config<span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span>
<span style="color: #014ea4;">-</span><span style="color: #5400b3;">export</span><span style="color: #109ab8;">&#40;</span><span style="color: #109ab8;">&#91;</span>get_config_file<span style="color: #014ea4;">/</span><span style="color: #ff9600;">2</span><span style="color: #6bb810;">,</span> load_file<span style="color: #014ea4;">/</span><span style="color: #ff9600;">1</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span>
&nbsp;
<span style="color: #666666; font-style: italic;">%% @spec get_config_path(App, Par)-&gt; {cgf, Path} | exit</span>
<span style="color: #666666; font-style: italic;">%% @doc Obtenemos el fichero de configuracion </span>
&nbsp;
<span style="color: #ff3c00;">get_config_file</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">App</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Par</span><span style="color: #109ab8;">&#41;</span> <span style="color: #6bb810;">-&gt;</span>
  <span style="color: #186895;">case</span> <span style="color: #ff4e18;">application</span>:<span style="color: #ff3c00;">get_env</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">App</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Par</span><span style="color: #109ab8;">&#41;</span> <span style="color: #186895;">of</span>
    <span style="color: #109ab8;">&#123;</span>ok<span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Config</span><span style="color: #109ab8;">&#125;</span> <span style="color: #6bb810;">-&gt;</span> <span style="color: #45b3e6;">Config</span><span style="color: #6bb810;">;</span>
    undefined <span style="color: #6bb810;">-&gt;</span>
      <span style="color: #ff4e18;">io</span>:<span style="color: #ff3c00;">format</span><span style="color: #109ab8;">&#40;</span><span style="color: #ff7800;">&quot;No existe fichero de configuracion&quot;</span><span style="color: #6bb810;">,</span> <span style="color: #109ab8;">&#91;</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">,</span>
      <span style="color: #fa6fff;">exit</span><span style="color: #109ab8;">&#40;</span>normal<span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">;</span>
    <span style="color: #45b3e6;">Reason</span> <span style="color: #6bb810;">-&gt;</span>
       <span style="color: #ff4e18;">io</span>:<span style="color: #ff3c00;">format</span><span style="color: #109ab8;">&#40;</span><span style="color: #ff7800;">&quot;Error fichero: ~p ~p Reason: ~p&quot;</span><span style="color: #6bb810;">,</span> <span style="color: #109ab8;">&#91;</span><span style="color: #45b3e6;">App</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Par</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Reason</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">,</span>
       <span style="color: #fa6fff;">exit</span><span style="color: #109ab8;">&#40;</span>normal<span style="color: #109ab8;">&#41;</span>
  <span style="color: #186895;">end</span><span style="color: #6bb810;">.</span>
&nbsp;
<span style="color: #666666; font-style: italic;">%% @spec load_file(path/file) -&gt; [terms] | []</span>
<span style="color: #666666; font-style: italic;">%% @doc consultamos el fichero y obtenemos la informacion</span>
&nbsp;
&nbsp;
<span style="color: #ff3c00;">load_file</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">File</span><span style="color: #109ab8;">&#41;</span> <span style="color: #6bb810;">-&gt;</span>
  <span style="color: #186895;">case</span> <span style="color: #ff4e18;">file</span>:<span style="color: #ff3c00;">consult</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">File</span><span style="color: #109ab8;">&#41;</span> <span style="color: #186895;">of</span>
    <span style="color: #109ab8;">&#123;</span>ok<span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Data</span><span style="color: #109ab8;">&#125;</span> <span style="color: #6bb810;">-&gt;</span> 
      <span style="color: #ff4e18;">lists</span>:<span style="color: #ff3c00;">foldl</span><span style="color: #109ab8;">&#40;</span><span style="color: #186895;">fun</span> search_terms<span style="color: #014ea4;">/</span><span style="color: #ff9600;">2</span><span style="color: #6bb810;">,</span> <span style="color: #109ab8;">&#91;</span><span style="color: #109ab8;">&#93;</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Data</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">;</span>
    <span style="color: #109ab8;">&#123;</span>error<span style="color: #6bb810;">,</span> <span style="color: #109ab8;">&#123;</span><span style="color: #45b3e6;">_LineNumber</span><span style="color: #6bb810;">,</span> erl_parse<span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">_ParseMessage</span><span style="color: #109ab8;">&#125;</span> <span style="color: #014ea4;">=</span> <span style="color: #45b3e6;">Reason</span><span style="color: #109ab8;">&#125;</span> <span style="color: #6bb810;">-&gt;</span>
      <span style="color: #45b3e6;">ExitText</span> <span style="color: #014ea4;">=</span> <span style="color: #ff4e18;">lists</span>:<span style="color: #ff3c00;">flatten</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">File</span> <span style="color: #014ea4;">++</span> <span style="color: #ff7800;">&quot; aproximadamente en la linea &quot;</span>
        <span style="color: #014ea4;">++</span> <span style="color: #ff4e18;">file</span>:<span style="color: #ff3c00;">format_error</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">Reason</span><span style="color: #109ab8;">&#41;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">,</span>
      <span style="color: #fa6fff;">exit</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">ExitText</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">;</span>
    <span style="color: #109ab8;">&#123;</span>error<span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Reason</span><span style="color: #109ab8;">&#125;</span> <span style="color: #6bb810;">-&gt;</span>
      <span style="color: #45b3e6;">ExitText</span> <span style="color: #014ea4;">=</span> <span style="color: #ff4e18;">lists</span>:<span style="color: #ff3c00;">flatten</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">File</span> <span style="color: #014ea4;">++</span> <span style="color: #ff7800;">&quot;: &quot;</span>
        <span style="color: #014ea4;">++</span> <span style="color: #ff4e18;">file</span>:<span style="color: #ff3c00;">format_error</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">Reason</span><span style="color: #109ab8;">&#41;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">,</span>
      <span style="color: #fa6fff;">exit</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">ExitText</span><span style="color: #109ab8;">&#41;</span>
 <span style="color: #186895;">end</span><span style="color: #6bb810;">.</span>
&nbsp;
<span style="color: #666666; font-style: italic;">%% @spec search_terms(Term, List)</span>
<span style="color: #666666; font-style: italic;">%% @doc Busca los términos y los añade a una lista</span>
&nbsp;
<span style="color: #ff3c00;">search_terms</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">Term</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">List</span><span style="color: #109ab8;">&#41;</span> <span style="color: #6bb810;">-&gt;</span>
  <span style="color: #186895;">case</span> <span style="color: #45b3e6;">Term</span> <span style="color: #186895;">of</span>
    <span style="color: #109ab8;">&#123;</span>categorias<span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Data</span><span style="color: #109ab8;">&#125;</span> <span style="color: #6bb810;">-&gt;</span> <span style="color: #ff4e18;">lists</span>:<span style="color: #ff3c00;">append</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">List</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Data</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">;</span>
     <span style="color: #45b3e6;">_</span> <span style="color: #6bb810;">-&gt;</span> <span style="color: #45b3e6;">List</span>
   <span style="color: #186895;">end</span><span style="color: #6bb810;">.</span></pre></div></div>

<p>Ahora lo probamos en consola.</p>

<div class="wp_syntax"><div class="code"><pre class="erlang" style="font-family:monospace;">&nbsp;
<span style="color: #109ab8;">&#40;</span>nodo1@host<span style="color: #109ab8;">&#41;</span><span style="color: #ff9600;">1</span><span style="color: #014ea4;">&gt;</span> applicacion:<span style="color: #ff3c00;">start</span><span style="color: #109ab8;">&#40;</span>biblioteca<span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span>
 <span style="color: #ff3c00;">ok</span>
&nbsp;
<span style="color: #109ab8;">&#40;</span>nodo1@host<span style="color: #109ab8;">&#41;</span><span style="color: #ff9600;">2</span><span style="color: #014ea4;">&gt;</span> <span style="color: #45b3e6;">Path</span> <span style="color: #014ea4;">=</span> <span style="color: #ff4e18;">config</span>:<span style="color: #ff3c00;">get_config_file</span><span style="color: #109ab8;">&#40;</span>biblioteca<span style="color: #6bb810;">,</span> cfg_path<span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span>
<span style="color: #109ab8;">&#123;</span>cfg_path<span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;/urs/local/etc/biblioteca/biblioteca.cfg&quot;</span><span style="color: #109ab8;">&#125;</span>
&nbsp;
<span style="color: #109ab8;">&#40;</span>nodo1@host<span style="color: #109ab8;">&#41;</span><span style="color: #ff9600;">3</span><span style="color: #014ea4;">&gt;</span>  <span style="color: #ff4e18;">config</span>:<span style="color: #ff3c00;">load_file</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">Path</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span>
 <span style="color: #109ab8;">&#91;</span><span style="color: #109ab8;">&#123;</span>ciencia_ficcion<span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;/tmp/ciencia_ficcion/&quot;</span><span style="color: #109ab8;">&#125;</span><span style="color: #6bb810;">,</span>
 <span style="color: #109ab8;">&#123;</span>historia<span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;/tmp/historia/&quot;</span><span style="color: #109ab8;">&#125;</span><span style="color: #6bb810;">,</span>
 <span style="color: #109ab8;">&#123;</span>novela<span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;/tmp/novela/&quot;</span><span style="color: #109ab8;">&#125;</span><span style="color: #109ab8;">&#93;</span></pre></div></div>

<p>Si cambias el fichero del cfg y ejecutas el load_file obtendrás los cambios deseados.</p>
<h3>  Conclusiones </h3>
<p>Con estas funciones tendremos un sistema con la opción de hacer un <em>reload</em> de la configuración, les recomiendo ponerlo en un <em>gen_server</em>, de esta manera nos ahorraremos los conflictos de escritura y lectura.</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://proactivered.es/2012/01/erlang-cargar-un-fichero-config-sin-reiniciar-el-sistema/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conectarse a un nodo Erlang en remoto</title>
		<link>http://proactivered.es/2010/05/conectarse-a-un-nodo-erlang-en-remoto/</link>
		<comments>http://proactivered.es/2010/05/conectarse-a-un-nodo-erlang-en-remoto/#comments</comments>
		<pubDate>Thu, 27 May 2010 19:34:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Erlang]]></category>

		<guid isPermaLink="false">http://proactivered.es/?p=76</guid>
		<description><![CDATA[A continuación explicaremos en unos sencillos pasos como podemos conectarnos a un nodo de Erlang en remoto. HostName Es necesario que las máquinas se puedan ver entre sí a través del DNS, por lo cual hay que incluir los hostnames en el fichero de hosts /etc/hosts, en el caso que los nodos estén en diferentes [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>A continuación explicaremos en unos sencillos pasos como podemos conectarnos a un nodo de Erlang en remoto.</p>
<h3>HostName</h3>
<p>Es necesario que las máquinas se puedan ver entre sí a través del DNS, por lo cual hay que incluir los hostnames en el fichero de hosts /etc/hosts, en el caso que los nodos estén en diferentes máquinas.</p>
<h3>Name &amp; Cookie</h3>
<p>Para poder acceder a un nodo de Erlang en remoto es necesario iniciar Erlang con un nombre, utilizando el parámetro de -name si estamos en diferentes máquinas, pero si iniciamos los dos nodos en la misma máquina es necesario utilizar el parámetro -sname.<br />
También debemos de asegurarnos en compartir la misma cookie en los dos nodos, ya que funciona como una clave para poder acceder al nodo.</p>
<p>En este ejemplo utilizaremos nodoA &#8211;  MaquinaA y nodoB &#8211; MaquinaB</p>
<pre class="normal">#erl -setcookie COOKIE1234 -sname nodoA
</pre>
<pre class="normal">#erl -setcookie COOKIE1234 -sname nodoB
</pre>
<p>Es posible también cambiar la cookie una vez que estemos en la consola de erlang, utilizando el siguiente comando:</p>

<div class="wp_syntax"><div class="code"><pre class="erlang" style="font-family:monospace;">nodoA@MaquinaAl<span style="color: #109ab8;">&#41;</span><span style="color: #ff9600;">1</span><span style="color: #014ea4;">&gt;</span> <span style="color: #ff4e18;">erlang</span>:<span style="color: #ff3c00;">set_cookie</span><span style="color: #109ab8;">&#40;</span><span style="color: #fa6fff;">node</span><span style="color: #109ab8;">&#40;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">,</span> <span style="">'COOKIE1234'</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span>
true
nodoA@MaqquinaA<span style="color: #109ab8;">&#41;</span><span style="color: #ff9600;">2</span><span style="color: #014ea4;">&gt;</span> <span style="color: #ff4e18;">erlang</span>:<span style="color: #ff3c00;">get_cookie</span><span style="color: #109ab8;">&#40;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span>
<span style="color: #45b3e6;">COOKIE1234</span></pre></div></div>

<h3>Conectando Nodos</h3>
<p>Para saber si el nodoB puede vernos, podemos hacer un ping utilizando el módulo<a href="http://www.erlang.org/doc/man/net_adm.html" target="_blank"> net_adm </a> y el nombre de la maquina B:</p>

<div class="wp_syntax"><div class="code"><pre class="erlang" style="font-family:monospace;">nodoA@MaquinaAl<span style="color: #109ab8;">&#41;</span><span style="color: #ff9600;">1</span><span style="color: #014ea4;">&gt;</span> <span style="color: #ff4e18;">net_adm</span>:<span style="color: #ff3c00;">ping</span><span style="color: #109ab8;">&#40;</span><span style="">'nodoB@MaquinaB'</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span>
pong
nodoA@MaquinaAl<span style="color: #109ab8;">&#41;</span><span style="color: #ff9600;">2</span><span style="color: #014ea4;">&gt;</span> <span style="color: #ff4e18;">net_adm</span>:<span style="color: #ff3c00;">ping</span><span style="color: #109ab8;">&#40;</span><span style="">'nodoCC@MaquinaCC'</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span>
pang
nodoA@MaquinaAl<span style="color: #109ab8;">&#41;</span><span style="color: #ff9600;">3</span><span style="color: #014ea4;">&gt;</span><span style="color: #fa6fff;">nodes</span><span style="color: #109ab8;">&#40;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span>
<span style="color: #109ab8;">&#91;</span>nodoB@MaquinaB<span style="color: #109ab8;">&#93;</span></pre></div></div>

<h3> Conectarse al nodo </h3>
<p>Una ves que podemos ver el nodoB en la MaquinaA, presionamos Control+G para entrar en el modo de control de trabajos.</p>

<div class="wp_syntax"><div class="code"><pre class="erlang" style="font-family:monospace;"><span style="color: #109ab8;">&#40;</span>nodoA@MaquinaA<span style="color: #109ab8;">&#41;</span><span style="color: #ff9600;">4</span><span style="color: #014ea4;">&gt;</span>
<span style="color: #45b3e6;">User</span> switch command
 <span style="color: #014ea4;">--&gt;</span></pre></div></div>

<p>Si ponemos h, nos mostrará la ayuda de los comandos:</p>

<div class="wp_syntax"><div class="code"><pre class="erlang" style="font-family:monospace;"><span style="color: #45b3e6;">User</span> switch command
 <span style="color: #014ea4;">--&gt;</span> <span style="color: #006600;">h</span>
  c <span style="color: #109ab8;">&#91;</span>nn<span style="color: #109ab8;">&#93;</span>            <span style="color: #014ea4;">-</span> connect to job
  i <span style="color: #109ab8;">&#91;</span>nn<span style="color: #109ab8;">&#93;</span>            <span style="color: #014ea4;">-</span> interrupt job
  k <span style="color: #109ab8;">&#91;</span>nn<span style="color: #109ab8;">&#93;</span>            <span style="color: #014ea4;">-</span> kill job
  j                 <span style="color: #014ea4;">-</span> <span style="color: #fa6fff;">list</span> all jobs
  s <span style="color: #109ab8;">&#91;</span>shell<span style="color: #109ab8;">&#93;</span>         <span style="color: #014ea4;">-</span> start local shell
  r <span style="color: #109ab8;">&#91;</span>node <span style="color: #109ab8;">&#91;</span>shell<span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#93;</span>  <span style="color: #014ea4;">-</span> start remote shell
  q        <span style="color: #014ea4;">-</span> quit erlang
  ? | h             <span style="color: #014ea4;">-</span> this message
 <span style="color: #014ea4;">--&gt;</span></pre></div></div>

<p>Si queremos mostrar los trabajos actuales :</p>

<div class="wp_syntax"><div class="code"><pre class="erlang" style="font-family:monospace;"> <span style="color: #014ea4;">--&gt;</span> <span style="color: #006600;">j</span>
   <span style="color: #ff9600;">1</span><span style="color: #014ea4;">*</span> <span style="color: #109ab8;">&#123;</span>shell<span style="color: #6bb810;">,</span>start<span style="color: #6bb810;">,</span><span style="color: #109ab8;">&#91;</span>init<span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#125;</span></pre></div></div>

<p>Para iniciar la conexión al nodoB debemos utilizar el comando <strong>r</strong> y el nombre del nodo junto con su dns como se muestra a continuación:</p>

<div class="wp_syntax"><div class="code"><pre class="erlang" style="font-family:monospace;"><span style="color: #109ab8;">&#40;</span>nodoA@MaquinaA<span style="color: #109ab8;">&#41;</span><span style="color: #ff9600;">1</span><span style="color: #014ea4;">&gt;</span>
<span style="color: #45b3e6;">User</span> switch command
 <span style="color: #014ea4;">--&gt;</span> <span style="color: #006600;">j</span>
   <span style="color: #ff9600;">1</span><span style="color: #014ea4;">*</span> <span style="color: #109ab8;">&#123;</span>shell<span style="color: #6bb810;">,</span>start<span style="color: #6bb810;">,</span><span style="color: #109ab8;">&#91;</span>init<span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#125;</span>
 <span style="color: #014ea4;">--&gt;</span> <span style="color: #006600;">r</span> nodoB@MaquinaB
 <span style="color: #014ea4;">--&gt;</span> <span style="color: #006600;">j</span>
   <span style="color: #ff9600;">1</span>  <span style="color: #109ab8;">&#123;</span>shell<span style="color: #6bb810;">,</span>start<span style="color: #6bb810;">,</span><span style="color: #109ab8;">&#91;</span>init<span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#125;</span>
   <span style="color: #ff9600;">2</span><span style="color: #014ea4;">*</span> <span style="color: #109ab8;">&#123;</span>nodoB@MaquinaB<span style="color: #6bb810;">,</span>shell<span style="color: #6bb810;">,</span>start<span style="color: #6bb810;">,</span><span style="color: #109ab8;">&#91;</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#125;</span>
 <span style="color: #014ea4;">--&gt;</span></pre></div></div>

<p>Como podemos observar una vez que hacemos la conexión al nodoB y mostramos los trabajos aparece el número 2 conectado al nodoB<br />
Para entrar a la consola del nodoB solo necesitamos utilizar el comando c y el numero de trabajo:</p>

<div class="wp_syntax"><div class="code"><pre class="erlang" style="font-family:monospace;"> <span style="color: #014ea4;">--&gt;</span> <span style="color: #006600;">c</span> <span style="color: #ff9600;">2</span>
<span style="color: #45b3e6;">Eshell</span> <span style="color: #45b3e6;">V5</span><span style="color: #6bb810;">.</span>6<span style="color: #6bb810;">.</span>5  <span style="color: #109ab8;">&#40;</span>abort with ^G<span style="color: #109ab8;">&#41;</span>
<span style="color: #109ab8;">&#40;</span>nodoB@MaquinaB<span style="color: #109ab8;">&#41;</span><span style="color: #ff9600;">1</span><span style="color: #014ea4;">&gt;</span></pre></div></div>

<p>Y listo.!!!! ya estamos dentro.</p>
<h3> Salir del nodoB </h3>
<p>Y ¿ahora cómo salimos?.  Bueno cualquiera pensará, fácil le doy q(). o Control +C y listo, pues no se te ocurra hacer esto en producción ya que pararíamos el nodoB por completo.<br />
Para poder salir debemos regresar al  nodoA, por lo que repetimos el proceso pero ahora conectándonos al trabajo número 1</p>

<div class="wp_syntax"><div class="code"><pre class="erlang" style="font-family:monospace;"><span style="color: #109ab8;">&#40;</span>nodoA@MaquinaA<span style="color: #109ab8;">&#41;</span><span style="color: #ff9600;">1</span><span style="color: #014ea4;">&gt;</span>
<span style="color: #45b3e6;">User</span> switch command
 <span style="color: #014ea4;">--&gt;</span> <span style="color: #006600;">j</span>
   <span style="color: #ff9600;">1</span><span style="color: #014ea4;">*</span> <span style="color: #109ab8;">&#123;</span>shell<span style="color: #6bb810;">,</span>start<span style="color: #6bb810;">,</span><span style="color: #109ab8;">&#91;</span>init<span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#125;</span>
 <span style="color: #014ea4;">--&gt;</span> <span style="color: #006600;">r</span> nodoB@MaquinaB
 <span style="color: #014ea4;">--&gt;</span> <span style="color: #006600;">j</span>
   <span style="color: #ff9600;">1</span>  <span style="color: #109ab8;">&#123;</span>shell<span style="color: #6bb810;">,</span>start<span style="color: #6bb810;">,</span><span style="color: #109ab8;">&#91;</span>init<span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#125;</span>
   <span style="color: #ff9600;">2</span><span style="color: #014ea4;">*</span> <span style="color: #109ab8;">&#123;</span>nodoB@MaquinaB<span style="color: #6bb810;">,</span>shell<span style="color: #6bb810;">,</span>start<span style="color: #6bb810;">,</span><span style="color: #109ab8;">&#91;</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#125;</span>
 <span style="color: #014ea4;">--&gt;</span> <span style="color: #006600;">c</span> <span style="color: #ff9600;">2</span>
<span style="color: #45b3e6;">Eshell</span> <span style="color: #45b3e6;">V5</span><span style="color: #6bb810;">.</span>6<span style="color: #6bb810;">.</span>5  <span style="color: #109ab8;">&#40;</span>abort with ^G<span style="color: #109ab8;">&#41;</span>
<span style="color: #109ab8;">&#40;</span>nodoB@MaquinaB<span style="color: #109ab8;">&#41;</span><span style="color: #ff9600;">1</span><span style="color: #014ea4;">&gt;</span>
<span style="color: #45b3e6;">User</span> switch command
 <span style="color: #014ea4;">--&gt;</span> <span style="color: #006600;">j</span>
   <span style="color: #ff9600;">1</span>  <span style="color: #109ab8;">&#123;</span>shell<span style="color: #6bb810;">,</span>start<span style="color: #6bb810;">,</span><span style="color: #109ab8;">&#91;</span>init<span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#125;</span>
   <span style="color: #ff9600;">2</span><span style="color: #014ea4;">*</span> <span style="color: #109ab8;">&#123;</span>nodoA@MaquinaA<span style="color: #6bb810;">,</span>shell<span style="color: #6bb810;">,</span>start<span style="color: #6bb810;">,</span><span style="color: #109ab8;">&#91;</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#125;</span>
 <span style="color: #014ea4;">--&gt;</span> <span style="color: #006600;">c</span> <span style="color: #ff9600;">1</span>
&nbsp;
<span style="color: #109ab8;">&#40;</span>nodoA@MaquinaA<span style="color: #109ab8;">&#41;</span><span style="color: #ff9600;">2</span><span style="color: #014ea4;">&gt;</span></pre></div></div>

<p>Con estos simples pasos podemos acceder a diferentes nodos de Erlang conectados entre si.</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://proactivered.es/2010/05/conectarse-a-un-nodo-erlang-en-remoto/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Crear un Fail Over Trunk en Asterisk</title>
		<link>http://proactivered.es/2010/04/crear-un-fail-over-trunk-en-asterisk/</link>
		<comments>http://proactivered.es/2010/04/crear-un-fail-over-trunk-en-asterisk/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 14:34:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[asterisk]]></category>
		<category><![CDATA[fail over trunk]]></category>

		<guid isPermaLink="false">http://proactivered.es/?p=55</guid>
		<description><![CDATA[Llevo tiempo queriendo compartir este post, el Fail Over Trunk es una de las macros  en Asterisk que más hemos utilizado y la que más nos ha servido. Aunque es muy sencillo, te puede ayudar en casos que tu troncal por algún motivo deje de funcionar y tengas que sacar las llamadas por otro lado, [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>Llevo tiempo queriendo compartir este post, el Fail Over Trunk es una de las macros  en Asterisk que más hemos utilizado y la que más nos ha servido. Aunque es muy sencillo, te puede ayudar en casos que tu troncal por algún motivo deje de funcionar y tengas que sacar las llamadas por otro lado, sin tener que hacer cambios en el Dialplan.</p>
<p>Supongamos que tenemos dos troncales  Trunk 1 y Trunk 2 podemos configurar hasta Trunk n, las especificaremos como <strong>variables globales</strong> ya que no van hacer modificadas y utilizaremos otra variable que nos dirá el total de troncales que tenemos definidos, en el extensions.conf lo ponemos de la siguiente manera:</p>
<pre class="normal">[globals]

TRUNK_1=10.10.50.50
TRUNK_2=10.10.50.51
TOTAL=2
</pre>
<p>En el Dialplan escribiremos una Macro con el nombre de  &#8220;salida&#8221;  enviando como parámetros la extensión a marcar y el tiempo de marcado:</p>
<pre class="normal">
[macro-salida]
;ARG1 Numero a marcar
;ARG2 Tiempo de marcado

exten => s,1,NooP(Numero a marcar -&gt; ${ARG1}  | tiempo de marcado -&gt; ${ARG2} )
exten => s,n,Set(CONTADOR=1)
exten => s,n(while),GotoIf($["${CONTADOR}" &gt; "${TOTAL}"]?fin)
exten => s,n,Dial(SIP/${ARG1}@${TRUNK_${CONTADOR}}|${ARG2}|g)
exten => s,n,NooP(DIAL STATUS -&gt; ${DIALSTATUS})
exten => s,n,GotoIf($["${DIALSTATUS}" = "ANSWER"]?fin)
exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?fin)
exten => s,n,GotoIf($["${DIALSTATUS}" = "NOANSWER"]?fin)
exten => s,n,Set(CONTADOR=$[${CONTADOR} + 1])
exten => s,n,Goto(while)
exten => s,n(fin),MacroExit
</pre>
<p>Con las <a href="http://www.voip-info.org/wiki/view/Asterisk+variable+DIALSTATUS" target="_blank">variables</a> del DIALSTATUS podemos saber si la llamada ha fallado o si ha tenido un resultado satisfactorio,  por lo que si el dialstatus retorna un <strong>CHANUNAVAIL</strong>, es posible que este caído nuestro Carrier asignado a ese troncal, con lo que intentará utilizar el segundo troncal especificado.</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://proactivered.es/2010/04/crear-un-fail-over-trunk-en-asterisk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¿Dejarías toda tu información a una persona.?</title>
		<link>http://proactivered.es/2010/03/%c2%bfdejarias-toda-tu-informacion-a-una-persona/</link>
		<comments>http://proactivered.es/2010/03/%c2%bfdejarias-toda-tu-informacion-a-una-persona/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 17:20:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[control]]></category>
		<category><![CDATA[empresa]]></category>
		<category><![CDATA[Informacion]]></category>
		<category><![CDATA[libertad]]></category>

		<guid isPermaLink="false">http://proactivered.es/?p=37</guid>
		<description><![CDATA[Imagina por un momento que una persona que no conoces tenga el control de toda la información que manejas  en sus manos, como son tus correos, mensajes, ubicación exacta en todo momento, tu móvil, tu ordenador, fotos, vídeos, música, fotografías, documentos, tu dirección, datos personales,  donde estudiaste, en donde has estado, tus sitios preferidos, quienes [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p><a href="http://proactivered.es/wp-content/uploads/2010/03/cadenas-en-la-manos.jpg"><img class="aligncenter size-medium wp-image-39" title="cadenas en la manos" src="http://proactivered.es/wp-content/uploads/2010/03/cadenas-en-la-manos-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p style="text-align: justify;">Imagina por un momento que una persona que no conoces tenga el control de toda la información que manejas  en sus manos, como son tus correos, mensajes, ubicación exacta en todo momento, tu móvil, tu ordenador, fotos, vídeos, música, fotografías, documentos, tu dirección, datos personales,  donde estudiaste, en donde has estado, tus sitios preferidos, quienes son tu familia, tus amigos,  que pertenencias físicas tienes, hasta conoce cuales son tus sueños y deseos, conoce y maneja tus actividades diarias, las citas que tienes,  etc.  ¿ Lo harías.?</p>
<p style="text-align: justify;">Pues muchos de nosotros lo hacemos sin darnos cuenta.  ¿Hasta dónde crees que podría llegar esto.?<strong> El control siempre se ha basado en la información</strong>,  deja todo lo que estas haciendo y  ponte a pensar, ¿cuánto crees que saben de ti?, ¿nada?, ¿poco?, ¿mucho?.  Creamos, manejamos y compartimos esta información todos los días, información personal que creemos que de alguna manera  solamente vemos y manejamos nosotros .  Pero no es real, todo esto queda almacenado en servidores ubicados en algún lugar de la tierra, lejos de nuestras manos. Ahora te pregunto ¿cuanto sabes tu sobre ellos.? Solamente lo que ellos quieren dar a conocer, nos hacen creer que desarrollan sistemas para una mejor comunicación y que somos libres de utilizarlos,  nos hacen creer que somos libres en todo lo que hacemos, libres de manejar esta información a nuestro antojo.  ¿Lo crees así.? Resumiendo  todo esto en una sola palabra <strong>CONTROL</strong>.</p>
<p style="text-align: justify;">Todo esto puede sonar a paranoia, pero no es así, no estoy en contra de la tecnología, pero siempre y cuando esta tecnología no pueda ser usada en nuestra contra.</p>
<p style="text-align: justify;">Quizá con este vídeo con un final oscuro <img src='http://proactivered.es/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> , pueda darles una mejor idea.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="466" height="281" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://www.youtube.com/v/R7yfV6RzE30&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="466" height="281" src="http://www.youtube.com/v/R7yfV6RzE30&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>(Visto en <a title="Business Insider" href="http://www.businessinsider.com/a-paranoid-overview-of-all-of-googles-businesses-and-why-you-should-be-terrified-2010-3" target="_blank">Business Insider</a>.)</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://proactivered.es/2010/03/%c2%bfdejarias-toda-tu-informacion-a-una-persona/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como obtener la MacAddress en Erlang</title>
		<link>http://proactivered.es/2010/03/como-obtener-la-macaddress-en-erlang/</link>
		<comments>http://proactivered.es/2010/03/como-obtener-la-macaddress-en-erlang/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 15:42:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Erlang]]></category>
		<category><![CDATA[macaddres]]></category>

		<guid isPermaLink="false">http://proactivered.es/?p=7</guid>
		<description><![CDATA[Para que podamos obtener la MacAddress desde Erlang, utilizaremos el módulo Inet, que nos provee acceso a los protocolos de TCP/IP. Pero la parte que vamos a manejar no esta documentada ni soportada, por lo que no les puedo asegurar que funcione en todos los sistemas. Por lo menos en Linux funciona. Para obtener las [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>Para que podamos obtener la MacAddress desde Erlang, utilizaremos el módulo Inet, que nos provee acceso a los protocolos de TCP/IP. Pero la parte que vamos a manejar no esta documentada ni soportada, por lo que no les puedo asegurar que funcione en todos los sistemas. Por lo menos en Linux funciona.<br />
Para obtener las interfaces utilizamos :</p>

<div class="wp_syntax"><div class="code"><pre class="erlang" style="font-family:monospace;"><span style="color: #ff9600;">1</span><span style="color: #014ea4;">&gt;</span> <span style="color: #ff4e18;">inet</span>:<span style="color: #ff3c00;">getiflist</span><span style="color: #109ab8;">&#40;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span>
<span style="color: #109ab8;">&#123;</span>ok<span style="color: #6bb810;">,</span><span style="color: #109ab8;">&#91;</span><span style="color: #ff7800;">&quot;lo&quot;</span><span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;eth0&quot;</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#125;</span></pre></div></div>

<p>Con ifget obtenemos la información de la interfaz que necesitamos como por ejemplo. :<br />
[addr, broadaddr, dstaddr, mtu, netmask, flags, hwaddr]</p>

<div class="wp_syntax"><div class="code"><pre class="erlang" style="font-family:monospace;"><span style="color: #ff9600;">2</span><span style="color: #014ea4;">&gt;</span> <span style="color: #ff4e18;">inet</span>:<span style="color: #006600;">if</span><span style="color: #fa6fff;">get</span><span style="color: #109ab8;">&#40;</span><span style="color: #ff7800;">&quot;eth0&quot;</span><span style="color: #6bb810;">,</span> 
    <span style="color: #109ab8;">&#91;</span>addr<span style="color: #6bb810;">,</span> broadaddr<span style="color: #6bb810;">,</span> dstaddr<span style="color: #6bb810;">,</span> mtu<span style="color: #6bb810;">,</span> netmask<span style="color: #6bb810;">,</span> flags<span style="color: #6bb810;">,</span> hwaddr<span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span>
<span style="color: #109ab8;">&#123;</span>ok<span style="color: #6bb810;">,</span><span style="color: #109ab8;">&#91;</span><span style="color: #109ab8;">&#123;</span>addr<span style="color: #6bb810;">,</span><span style="color: #109ab8;">&#123;</span><span style="color: #ff9600;">10</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">10</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">10</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">53</span><span style="color: #109ab8;">&#125;</span><span style="color: #109ab8;">&#125;</span><span style="color: #6bb810;">,</span>
     <span style="color: #109ab8;">&#123;</span>broadaddr<span style="color: #6bb810;">,</span><span style="color: #109ab8;">&#123;</span><span style="color: #ff9600;">10</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">10</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">10</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">255</span><span style="color: #109ab8;">&#125;</span><span style="color: #109ab8;">&#125;</span><span style="color: #6bb810;">,</span>
     <span style="color: #109ab8;">&#123;</span>dstaddr<span style="color: #6bb810;">,</span><span style="color: #109ab8;">&#123;</span><span style="color: #ff9600;">10</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">10</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">10</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">53</span><span style="color: #109ab8;">&#125;</span><span style="color: #109ab8;">&#125;</span><span style="color: #6bb810;">,</span>
     <span style="color: #109ab8;">&#123;</span>mtu<span style="color: #6bb810;">,</span><span style="color: #ff9600;">1500</span><span style="color: #109ab8;">&#125;</span><span style="color: #6bb810;">,</span>
     <span style="color: #109ab8;">&#123;</span>netmask<span style="color: #6bb810;">,</span><span style="color: #109ab8;">&#123;</span><span style="color: #ff9600;">255</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">255</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">255</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">0</span><span style="color: #109ab8;">&#125;</span><span style="color: #109ab8;">&#125;</span><span style="color: #6bb810;">,</span>
     <span style="color: #109ab8;">&#123;</span>flags<span style="color: #6bb810;">,</span><span style="color: #109ab8;">&#91;</span>up<span style="color: #6bb810;">,</span>broadcast<span style="color: #6bb810;">,</span>running<span style="color: #6bb810;">,</span>multicast<span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#125;</span><span style="color: #6bb810;">,</span>
     <span style="color: #109ab8;">&#123;</span>hwaddr<span style="color: #6bb810;">,</span><span style="color: #109ab8;">&#91;</span><span style="color: #ff9600;">0</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">64</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">203</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">94</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">69</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">179</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#125;</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#125;</span></pre></div></div>

<p>Si podemos observar, el hwaddr no esta convertido en hexadecimal, por lo que tenemos que hacer la conversión utilizando el módulo de io_lib, y hacemos un lists:flatten para unirlos.</p>

<div class="wp_syntax"><div class="code"><pre class="erlang" style="font-family:monospace;"><span style="color: #ff9600;">1</span><span style="color: #014ea4;">&gt;</span> <span style="color: #ff4e18;">io_lib</span>:<span style="color: #ff3c00;">format</span><span style="color: #109ab8;">&#40;</span><span style="color: #ff7800;">&quot;~.16B~.16B~.16B~.16B~.16B~.16B&quot;</span><span style="color: #6bb810;">,</span>
    <span style="color: #109ab8;">&#91;</span><span style="color: #ff9600;">0</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">64</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">203</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">94</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">69</span><span style="color: #6bb810;">,</span><span style="color: #ff9600;">179</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span>
<span style="color: #109ab8;">&#91;</span><span style="color: #ff7800;">&quot;0&quot;</span><span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;40&quot;</span><span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;CB&quot;</span><span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;5E&quot;</span><span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;45&quot;</span><span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;B3&quot;</span><span style="color: #109ab8;">&#93;</span>
<span style="color: #ff9600;">2</span><span style="color: #014ea4;">&gt;</span> <span style="color: #ff4e18;">lists</span>:<span style="color: #ff3c00;">flatten</span><span style="color: #109ab8;">&#40;</span><span style="color: #109ab8;">&#91;</span><span style="color: #ff7800;">&quot;0&quot;</span><span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;40&quot;</span><span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;CB&quot;</span><span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;5E&quot;</span><span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;45&quot;</span><span style="color: #6bb810;">,</span><span style="color: #ff7800;">&quot;B3&quot;</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span>
<span style="color: #ff7800;">&quot;040CB5E45B3&quot;</span></pre></div></div>

<p>Con esto podemos obtener la MacAddres, de la máquina que estemos utilizando.</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://proactivered.es/2010/03/como-obtener-la-macaddress-en-erlang/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

