<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Atividades e Interesses</title>
	<atom:link href="http://joaodubas.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://joaodubas.wordpress.com</link>
	<description>Um pouco sobre experiências e práticas do dia-a-dia</description>
	<lastBuildDate>Thu, 27 Aug 2009 01:30:01 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='joaodubas.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/47720f0bb6ac0a76aaa2fa58935fea3f?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Atividades e Interesses</title>
		<link>http://joaodubas.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://joaodubas.wordpress.com/osd.xml" title="Atividades e Interesses" />
	<atom:link rel='hub' href='http://joaodubas.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Event delegation no javascript</title>
		<link>http://joaodubas.wordpress.com/2009/08/26/event-delegation-no-javascript/</link>
		<comments>http://joaodubas.wordpress.com/2009/08/26/event-delegation-no-javascript/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 01:29:38 +0000</pubDate>
		<dc:creator>joaodubas</dc:creator>
				<category><![CDATA[Desenvolvimento web]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://joaodubas.wordpress.com/?p=39</guid>
		<description><![CDATA[Em meu primeiro post, comentei um pouco sobre os problemas de se referenciar nós criados dinamicamente no IE. Hoje vou apresentar uma segunda solução bastante interessante e econômica, quando pensamos em memory leak no IE, o event delegation ou delegação de eventos (tradução literal). Para fazer uma breve introdução, este não é um tópico recente, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joaodubas.wordpress.com&amp;blog=5520422&amp;post=39&amp;subd=joaodubas&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Em meu primeiro post, comentei um pouco sobre os problemas de se referenciar nós criados dinamicamente no <acronym title="Internet Explorer">IE</acronym>. Hoje vou apresentar uma segunda solução bastante interessante e econômica, quando pensamos em <a href="http://javascript.crockford.com/memory/leak.html"><span lang="en">memory leak</span></a> no <a href="http://msdn.microsoft.com/en-us/library/bb250448%28VS.85%29.aspx"><acronym title="Internet Explorer">IE</acronym></a>, o <span lang="en">event delegation</span> ou delegação de eventos (tradução literal).</p>
<p>Para fazer uma breve introdução, este não é um tópico recente, a apresentação deste conceito já foi realizado por <a href="http://www.quirksmode.org/">Peter Paul-Kock</a>, <a href="http://cherny.com/webdev/70/javascript-event-delegation-and-event-hanlders">Rob Cherny</a>, <a href="http://robertnyman.com/2008/05/04/event-delegation-with-javascript/">Robert Nyman</a>, <a href="http://www.nczonline.net/blog/2009/06/30/event-delegation-in-javascript/">Nicholas C. Zakas</a>, <a href="http://www.danwebb.net/2008/2/8/event-delegation-made-easy-in-jquery">Dan Webb</a>, entre outros. Não vou me extender sobre a explicação das fases dos evento (captura e bubble), recomendo a vocês ler os posts sobre eventos publicados por Peter Paul-Kock.</p>
<ul>
<li><a href="http://quirksmode.org/js/introevents.html">Introduction to events</a></li>
<li><a href="http://quirksmode.org/js/events_tradmod.html">Traditional event registration model</a></li>
<li><a href="http://quirksmode.org/js/events_advanced.html">Advanced event registration models</a></li>
<li><a href="http://quirksmode.org/js/events_order.html">Event order</a></li>
</ul>
<p>A grande idéia por trás da delegação de eventos, é que não associamos mais os eventos aos elementos que os disparam e sim associamos o evento que desejamos avaliar a um ancestral e realizamos a análise deste posteriormente. Com isso ganhamos em memória alocada, ao invés de declararmos o evento para cada elemento que o dispara, o declaramos apenas uma vez para o ancestral, além de ganharmos na centralização dos eventos. Abaixo mostro o código relativo a uma comparação entre a forma tradicional de associarmos eventos e a delegação de eventos.</p>
<pre>
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;head&gt;
        &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
        &lt;title&gt;Event delegation&lt;/title&gt;
        &lt;style type="text/css"&gt;
            #container {
                background: #eaeaea;
                border: 1px solid #c0c0c0;
                margin: 10px auto;
                width: 960px;
                padding: 0;
            }
            #displayMessage, #botaoAdicao {
                width: 920px;
                margin: 10px auto;
            }
            #displayMessage {
                background: #fff;
                border: 1px solid #c0c0c0;
                color: #c0c0c0;
                text-align: center;
            }
            #botaoAdicao a {
                border: 1px solid #c0c0c0;
                background: #fff;
                font-weight: bold;
                padding: 0.125em;
                text-decoration: none;
            }
            #botaoAdicao a:link, #botaoAdicao a:visited {
                color: #039090;
            }
            #botaoAdicao a:hover {
                background: #f3f3f3;
                color: #36c3c3;
            }
            #botaoAdicao a:active {
                color: #ff0000;
            }
            .clearFloat {
                clear: both;
                line-height: normal;
                margin: 0;
                padding: 0;
            }
            #traditionalEvent, #delegationEvent {
                background: #fdfdfd;
                border-width: 0 1px 1px;
                border-style: solid;
                border-color: #c0c0c0;
                margin: 0;
                padding: 0;
                width: 45%;
            }
            #traditionalEvent {
                float: left;
                margin-left: 2.5%;
            }
            #delegationEvent {
                float: right;
                margin-right: 2.5%;
            }
            #traditionalEvent p, #delegationEvent p {
                font-weight: bold;
                background: #eaeaea;
                margin: 0 -1px;
                padding: 0 15em 0 0.5em;
                text-align: center;
                width: auto;
            }
            #traditionalEvent p span, #delegationEvent p span {
                background: #fdfdfd;
                border-width: 1px 1px 0;
                border-style: solid;
                border-color: #c0c0c0;
                display: block;
                margin: 0 0;
                padding: 0.25em 0 0.35em;
            }
            #traditionalEvent ul, #delegationEvent ul {
                margin: 0;
                padding: 0;
                list-style: none;
            }
            #traditionalEvent ul li, #delegationEvent ul li {
                margin: 0;
                padding: 0.25em 0.5em;
                border-top: 1px solid #c0c0c0;
            }
        &lt;/style&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;div id="container"&gt;
            &lt;div id="displayMessage"&gt;&nbsp;&lt;/div&gt;
            &lt;div class="clearFloat"&gt;&nbsp;&lt;/div&gt;
            &lt;div id="traditionalEvent"&gt;
                &lt;p&gt;&lt;span&gt;Tradicional&lt;/span&gt;&lt;/p&gt;
                &lt;ul&gt;
                    &lt;li&gt;&lt;input type="checkbox" /&gt; &lt;input type="text" disabled="disabled" value="" /&gt;&lt;/li&gt;
                    &lt;li&gt;&lt;input type="checkbox" /&gt; &lt;input type="text" disabled="disabled" value="" /&gt;&lt;/li&gt;
                    &lt;li&gt;&lt;input type="checkbox" /&gt; &lt;input type="text" disabled="disabled" value="" /&gt;&lt;/li&gt;
                    &lt;li&gt;&lt;input type="checkbox" /&gt; &lt;input type="text" disabled="disabled" value="" /&gt;&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/div&gt;
            &lt;div id="delegationEvent"&gt;
                &lt;p&gt;&lt;span&gt;Delegation&lt;/span&gt;&lt;/p&gt;
                &lt;ul&gt;
                    &lt;li&gt;&lt;input type="checkbox" /&gt; &lt;input type="text" disabled="disabled" value="" /&gt;&lt;/li&gt;
                    &lt;li&gt;&lt;input type="checkbox" /&gt; &lt;input type="text" disabled="disabled" value="" /&gt;&lt;/li&gt;
                    &lt;li&gt;&lt;input type="checkbox" /&gt; &lt;input type="text" disabled="disabled" value="" /&gt;&lt;/li&gt;
                    &lt;li&gt;&lt;input type="checkbox" /&gt; &lt;input type="text" disabled="disabled" value="" /&gt;&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/div&gt;
            &lt;div class="clearFloat"&gt;&nbsp;&lt;/div&gt;
            &lt;div id="botaoAdicao"&gt;
                &lt;a href="#" title="teste de evento"&gt;Adicionar item&lt;/a&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        &lt;script type="text/javascript"&gt;
&lt;!--//--&gt;&lt;![CDATA[//&gt;&lt;!--
/**
 * Obtem o elemento que disparou o evento de interesse
 * @param {Object} e representa o objeto que lancou o evento
 */
function _getTarget(e){
    e = e || window.event;
    return e.target || e.srcElement;
}
/**
 * Funcao para faciliar a obtencao de elementos pelo atributo ID
 * @param {String} idElemento identidade do elemento
 */
function $(idElemento){
    return document.getElementById(idElemento);
}
/**
 * Funcao para padronizar o nome do elemento
 * @param {Object} elemento referencia ao objeto que se deseja obter o nome
 */
function _formataNomeNo(elemento){
    return elemento.nodeName.toUpperCase();
}
/**
 * Funcao auxiliar para criar um novo item de lista
 */
function _createLi(){
    var novoElemento = document.createElement('li');
    return novoElemento;
}
/**
 * Funcao auxiliar para criar um novo checkbox
 */
function _createCheckbox(){
    var novoElemento = document.createElement('input');
    novoElemento.type = 'checkbox';
    return novoElemento;
}
/**
 * Funcao auxiliar para criar um novo input text
 */
function _createInputText(){
    var novoElemento = document.createElement('input');
    novoElemento.type = 'text';
    novoElemento.disabled = true;
    novoElemento.value = '';
    return novoElemento;
}
/**
 * Funcao auxiliar para criar item complexo
 */
function _createLiForm(){
    var novoElemento = _createLi();
    novoElemento.appendChild(_createCheckbox());
    novoElemento.appendChild(document.createTextNode(" "));
    novoElemento.appendChild(_createInputText());
    return novoElemento;
}
/**
 * Funcao auxiliar para definir status do checkbox e passa-lo para o text
 * @param {Object} elementoPai elemento que contem os inputs
 */
function _eventInput(elementoPai){
    var inputFilho = elementoPai.getElementsByTagName('input');
    var inputCheckbox, inputText, inputTemp;
    for(var i = 0, j = inputFilho.length; i &lt; j; i++){
        inputTemp = inputFilho[i];
        if(inputTemp.type == 'checkbox'){
            inputCheckbox = inputTemp;
        } else if(inputTemp.type == 'text'){
            inputText = inputTemp;
        }
    }
    if(inputCheckbox.checked){
        inputText.value = '00:00';
    } else {
        inputText.value = ' ';
    }
    inputText.disabled = !inputCheckbox.checked;
}
var divMensagem = $('displayMessage');
var divBotaoAdicao = $('botaoAdicao');
var divTradicional = $('traditionalEvent');
var divDelegation = $('delegationEvent');

divBotaoAdicao.onclick = function(e){
    //obtem referencia ao elemento que disparou o evento
    var elemento = _getTarget(e);
    if(_formataNomeNo(elemento) == 'A'){
        var ulTradicional = $('traditionalEvent').getElementsByTagName('ul')[0];
        var ulDelegation = $('delegationEvent').getElementsByTagName('ul')[0];
        ulTradicional.appendChild(_createLiForm());
        ulDelegation.appendChild(_createLiForm());
    }
    return false;
}

var liTradicional = divTradicional.getElementsByTagName('li');
for(var i = 0, j = liTradicional.length; i &lt; j; i++){
    var liTemp = liTradicional[i];
    liTemp.onclick = function(){
        divMensagem.innerHTML = "";
        divMensagem.innerHTML = "Clicou em um elemento com evento tradicional";
    };
}

var checkboxTradicional = divTradicional.getElementsByTagName('input');
for(var i = 0, j = checkboxTradicional.length; i &lt; j; i++){
    var inputTemp = checkboxTradicional[i];
    if(inputTemp.type == 'checkbox'){
        inputTemp.onclick = function(){
            _eventInput(this.parentNode);
        };
    }
}

divDelegation.onclick = function(e){
    var elemento = _getTarget(e);
    if(_formataNomeNo(elemento) == 'LI'){
        divMensagem.innerHTML = "";
        divMensagem.innerHTML = "Clicou em um elemento com evento delegado";
    } else if(_formataNomeNo(elemento) == 'INPUT' &amp;&amp; elemento.type == 'checkbox'){
        divMensagem.innerHTML = "";
        divMensagem.innerHTML = "Clicou em um elemento com evento delegado";
        var elementoPai = elemento.parentNode;
        _eventInput(elementoPai);
    }
};
//--&gt;&lt;!]]&gt;
        &lt;/script&gt;
    &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Lógico que poderia ter separado as camadas de apresentação, lógica e de conteúdo,  mas por simplicidade optei por deixar o código todo junto.</p>
<p>Agora vamos discutir os aspectos interessantes do códigos apresentado anteriormente:</p>
<dl>
<dt>
<pre>var divTradicional = $('traditionalEvent');</pre>
</dt>
<dd>Obtenho uma referência ao nó pai dos elementos que irão disparar em função do evento associado.</dd>
<dt>
<pre>
var liTradicional = divTradicional.getElementsByTagName('li');
for(var i = 0, j = liTradicional.length; i &lt; j; i++){
    var liTemp = liTradicional[i];
    liTemp.onclick = function(){
        divMensagem.innerHTML = "";
        divMensagem.innerHTML = "Clicou em um elemento com evento tradicional";
    };
}
</pre>
</dt>
<dd>Obtenho uma referência à array de elementos <var>li</var> aos quais desejo associar o comportamento quando clicados. Para conseguir associar o comportamento, realizo um loop por toda a lista e associo a cada elemento o evento <var>onclick</var>.</dd>
<dt>
<pre>
var checkboxTradicional = divTradicional.getElementsByTagName('input');
for(var i = 0, j = checkboxTradicional.length; i &lt; j; i++){
    var inputTemp = checkboxTradicional[i];
    if(inputTemp.type == 'checkbox'){
        inputTemp.onclick = function(){
            _eventInput(this.parentNode);
        };
    }
}
</pre>
</dt>
<dd>Assim como realizado para os elementos <var>li</var>, repito o mesmo para os elementos <var>input[type=checkbox]</var>.</dd>
</dl>
<p>Vamos ver como tudo é processado por meio do <span lang="en">event delegation</span>:</p>
<dl>
<dt>
<pre>var divDelegation = $('delegationEvent');</pre>
</dt>
<dd>Obtenho uma referência ao container dos elementos que irão disparar a função</dd>
<dt>
<pre>
divDelegation.onclick = function(e){
    var elemento = _getTarget(e);
    if(_formataNomeNo(elemento) == 'LI'){
        divMensagem.innerHTML = "";
        divMensagem.innerHTML = "Clicou em um elemento com evento delegado";
    } else if(_formataNomeNo(elemento) == 'INPUT' &amp;&amp; elemento.type == 'checkbox'){
        divMensagem.innerHTML = "";
        divMensagem.innerHTML = "Clicou em um elemento com evento delegado";
        var elementoPai = elemento.parentNode;
        _eventInput(elementoPai);
    }
};
</pre>
</dt>
<dd>Diferente do que foi feito para os elementos que receberam os eventos tradicionais, na delegação de eventos associo ao nó ancestral o evento <var>onclick</var>. A partir dele avaliarei qual elemento esta disparando o evento (por meio das condições <var>if</var>, e caso eles sejam os elementos de interesse disparo as funções que deveriam ser executadas.</dd>
</dl>
<p>Podemos verificar que a quantidade de código é bastante inferior, além disso, a quantidade de eventos associados é muito menor.</p>
<p>Na associção de eventos na forma tradicional precisariamos de um loop para definirmos os eventos sendo avaliados, no caso da delegação, só precisamos associar aos elementos chaves. Isso torna a manutenção do código também mais simples, podemos perceber facilmente a qual elemento o evento está associado e podemos adicionar mais facilmente outros comportamentos</p>
<p>Posso dizer, em minha prática, que a delegação de eventos tem me poupado muito trabalho em meus códigos, além de evitar que eu tenha problemas com o <acronym title="Internet Explorer">IE</acronym>, uma vez que tenho uma quantidade de eventos muito menor a mapear, o que torna bastante improvável o <span lang="en">memory leak</span>.</p>
<p>Até o próximo post</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=1f333cf8-9804-88af-a57d-0010bcabb7bf" /></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/joaodubas.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/joaodubas.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/joaodubas.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/joaodubas.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/joaodubas.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/joaodubas.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/joaodubas.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/joaodubas.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/joaodubas.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/joaodubas.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/joaodubas.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/joaodubas.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/joaodubas.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/joaodubas.wordpress.com/39/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joaodubas.wordpress.com&amp;blog=5520422&amp;post=39&amp;subd=joaodubas&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://joaodubas.wordpress.com/2009/08/26/event-delegation-no-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/744fdf6754d94f2c3daa614b36e6584c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">joaodubas</media:title>
		</media:content>

		<media:content url="http://img.zemanta.com/pixy.gif?x-id=1f333cf8-9804-88af-a57d-0010bcabb7bf" medium="image" />
	</item>
		<item>
		<title>Compilando R no Linux</title>
		<link>http://joaodubas.wordpress.com/2009/04/17/compilando-r-no-linux/</link>
		<comments>http://joaodubas.wordpress.com/2009/04/17/compilando-r-no-linux/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 22:18:07 +0000</pubDate>
		<dc:creator>joaodubas</dc:creator>
				<category><![CDATA[Estatística]]></category>
		<category><![CDATA[compilação]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[R]]></category>

		<guid isPermaLink="false">http://joaodubas.wordpress.com/?p=18</guid>
		<description><![CDATA[Seja pelo aprendizado, seja pela flexibilidade obtida no processo, compilar programas é uma tarefa quase que inevitável para aqueles que utilizam sistemas operacionas *nix. Apresento meu passo a passo durante a instalação do ambiente estatístico R.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joaodubas.wordpress.com&amp;blog=5520422&amp;post=18&amp;subd=joaodubas&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Impressionante a falta do que fazer&#8230; Mesmo com as vantagens de se utilizar gerenciados de pacotes como <a href="http://www.nongnu.org/synaptic/">Synaptic</a> ou <a href="http://www.packagekit.org/">PackageKit</a> ou <a href="http://en.opensuse.org/YaST2-GTK">Yast2</a>, entre outros. Existem algumas coisas que valem a pena ser realizadas, ou por aprendizado ou pela flexibilidade oferecida, a compilação é uma delas.</p>
<p>Mostro minhas anotações para compilação do R, um grande ambiente estatístico que utilizo em meu dia-a-dia na consultoria de estatística.</p>
<p>Importante: não se esqueçam de verificar se os programas para compilação estão devidamente instalados, muitos erros no processo de compilação ocorrem devido à falta de algumas dependências!!! Caso estes ocorram veja o nome do erro ou do que está faltando e procure por um pacote com nome similar. Exemplo: o script <var>configure</var> vem configurado por <span lang="en">default</span> com a opção <code>--with-readline</code>. Caso haja alguma problema com ele, haverá um erro relacionado à esta opção, neste caso verifique se sua instalação possui as bibliotecas relacionadas (pode-se utilizar os comandos <code>dpkg -l | grep readline</code> ou <code>rpm -qa | grep readline</code></p>
<ol>
<li>Baixe em seu computador o arquivo <a href="http://www.r-project.org/">tar.gz do ambiente estatístico</a>.</li>
<li>Descompacte-o (<code>$ tar -xzf R-x.x.x.tar.gz</code>).</li>
<li>Entre no diretório criado no passo anterior (<code>$ cd R-x.x.x/</code>).</li>
<li>Entre no diretório <var>tools</var> e execute o script <var>$ rsync-recommended</var>.</li>
<li>Retorne ao diretório raiz e execute o <var>$ ./configure</var>, lembre-se que agora é o momento de definir como sua instalação do R será configurada, em geral, habilito de antemão a opção <var>&#8211;enable-R-shlib</var> que me permite criar uma biblioteca compartilhada do R (para habilitar esta opção digite <code>$ ./configure --enable-R-shlib</code>.</li>
<li>Após executar o <code>$./configure</code> podemos partir para o comando <code>$ make</code> e, com direitos administrativos, também executamos o comando <code># make install</code>.</li>
<li>Para que possamos nos valer da biblioteca compartilhada (<em>shared</em>), <strong>também</strong> devemos executar o comando <code># make install-libR</code>.</li>
</ol>
<p>Para facilitar o processo de atualização, vale a pena definir um grupo que tenha acesso de escrita no diretório onde se encontra o R (em meu caso <var>/usr/local/lib/R/</var>). Para tal, executaremos os comandos abaixo (<strong>como root</strong>):</p>
<ul>
<li><code>groupadd desenvolvimento</code> (lembre-se que o nome do grupo pode ser qualquer um).</li>
<li><code>usermod -a -G desenvolvimento <var>{nomeUsuario}</var><code> (onde <var>{nomeUsuario}</var> é o seu nome de usuário).</li>
<li><code>cd <var>R_HOME</var></code></li>
<li><code>chmod -R 775 <var>R_HOME</var> (onde <var>R_HOME</var> é o local onde está instalado o R).</code>
</ul>
<p>Agora temos uma instalação perfeita do R em nosso computador, com os pacotes recomendados.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/joaodubas.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/joaodubas.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/joaodubas.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/joaodubas.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/joaodubas.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/joaodubas.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/joaodubas.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/joaodubas.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/joaodubas.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/joaodubas.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/joaodubas.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/joaodubas.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/joaodubas.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/joaodubas.wordpress.com/18/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joaodubas.wordpress.com&amp;blog=5520422&amp;post=18&amp;subd=joaodubas&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://joaodubas.wordpress.com/2009/04/17/compilando-r-no-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/744fdf6754d94f2c3daa614b36e6584c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">joaodubas</media:title>
		</media:content>
	</item>
		<item>
		<title>Referenciando nós criados dinamicamente no IE</title>
		<link>http://joaodubas.wordpress.com/2009/04/16/referenciando-nos-criado-dinamicamente-no-ie/</link>
		<comments>http://joaodubas.wordpress.com/2009/04/16/referenciando-nos-criado-dinamicamente-no-ie/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 16:22:22 +0000</pubDate>
		<dc:creator>joaodubas</dc:creator>
				<category><![CDATA[Desenvolvimento web]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://joaodubas.wordpress.com/?p=3</guid>
		<description><![CDATA[Apesar de aplicar muitos dos métodos e propriedades do <acronym title="Document Object Model">DOM</acronym>, o <acronym title="Internet Explorer">IE</acronym> apresenta alguns problemas. Discuto um que vivenciei nas últimas semanas, a incapacidade de referencias nós criados dinamicamente.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joaodubas.wordpress.com&amp;blog=5520422&amp;post=3&amp;subd=joaodubas&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recentemente tive problemas ao referenciar nós criados por meio de <acronym title="Document Object Model">DOM</acronym> no <acronym title="Internet Explorer">IE</acronym>.</p>
<p>Por mais que você atribua as propriedades <code>id</code> e <code>name</code>, o <acronym title="Internet Explorer">IE</acronym> simplesmente se recusa a encontrar estes elementos. Dessa forma um elemento criado da seguinte forma:</p>
<p><code>var paragrafo = document.createElement('p');<br />
paragrafo.name = 'meuNome'<br />
paragrafo.id = 'minhaId';<br />
document.appendChild(paragrafo)</code></p>
<p>Não será encontrado no <acronym title="Internet Explorer">IE</acronym>.</p>
<p>Para correção deste problema é necessário criar o elemento da seguinte forma:</p>
<p><code>var paragrafo = document.createElement('&lt;p name="meuNome" id="minhaId"&gt;');</code></p>
<p>Logicamente esta solução somente funcionará no <acronym title="Internet Explorer">IE</acronym>. Para que possamos rodar nosso script em outros navegadores é preciso fazer algumas alterações, como apresentado abaixo.</p>
<p><code>var paragrafo;<br />
if(document.all)<br />
{<br />
    paragrafo = document.createElement('&lt;p name="meuNome" id="minhaId"&gt;');<br />
} else {<br />
    paragrafo = document.createElement('p');<br />
}<br />
paragrafo.name = 'meuNome';<br />
paragrafo.id = 'minhaId';</code></p>
<p>Infelizmente a solução no meu caso não chegou a tempo, acabei mudando bastante a lógica do meu script para que pudesse funcionar no <acronym title="Internet Explorer">IE</acronym>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/joaodubas.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/joaodubas.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/joaodubas.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/joaodubas.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/joaodubas.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/joaodubas.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/joaodubas.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/joaodubas.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/joaodubas.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/joaodubas.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/joaodubas.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/joaodubas.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/joaodubas.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/joaodubas.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joaodubas.wordpress.com&amp;blog=5520422&amp;post=3&amp;subd=joaodubas&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://joaodubas.wordpress.com/2009/04/16/referenciando-nos-criado-dinamicamente-no-ie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/744fdf6754d94f2c3daa614b36e6584c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">joaodubas</media:title>
		</media:content>
	</item>
	</channel>
</rss>
