<?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:blogger='http://schemas.google.com/blogger/2008' 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-4079627930700944368</id><updated>2024-11-01T07:07:17.970-03:00</updated><title type='text'>Pão de queijo com Java</title><subtitle type='html'>Algoritmos, programas e boas práticas usando linguagem de programação Java</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>196</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-1390298024848827187</id><published>2017-10-18T17:23:00.001-02:00</published><updated>2017-10-18T17:23:11.611-02:00</updated><title type='text'>Módulos em Java 9</title><content type='html'>Em 2017 saiu a versão nova do Java - o Java 9. Com esta versão sai um novo sistema de módulos chamado Jigsaw. Os módulos do Java 9 são uma das maiores mudanças na estrutura do java.&lt;br /&gt;
Um &lt;b&gt;Módulo&lt;/b&gt; é uma coleção auto-descritiva de Código, Dados e Recursos. Um módulo é um conjunto de Pacotes, Tipos (classes, classes abstratas, interfaces, etc.) com Código e Dados e Recursos.&lt;br /&gt;
&lt;br /&gt;
As aplicações escritas em Java 8 ou anteriores não conhecem suas próprias dependências.&lt;br /&gt;
Claro que o javac não compilará nosso código se faltarem dependências de tempo de compilação e, claro, temos ferramentas de compilação e IDEs para nos apoiar com esses casos. Contudo, no tempo de execução, a JVM precisa pesquisar classes necessárias no CLASSPTH novamente, em alguns casos, resultando em diferentes classes sendo carregadas pelo classloader. Assim podemos ter problemas em tempo de execução.&lt;br /&gt;
A estrutura modular vem para resolver este problema.&lt;br /&gt;
Além disto&amp;nbsp;o sistema JDK atual é muito grande. No Java 9, o próprio JDK foi dividido em pequenos módulos.&amp;nbsp;Portanto, é muito fácil reduzir o aplicativo Java para dispositivos pequenos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O JDK 9 não contém JRE. No JDK 9, o JRE é separado em uma pasta de distribuição separada. O software JDK 9 contém uma nova pasta &quot;jmods&quot;, que contém um conjunto de módulos Java 9 como mostrado abaixo.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgehB4xbREANE9rGUCUdqPchP10tfn-dOGPXpWrAvK_Uu-1EsCiW42wXuCiCNREsO3JfdDtYEuVEd_aVHGRj2HDUlSnXGNn1UDKfYr6AjTwnMyluK-s_U0H-x8grhpbLDmxji3KluiMD7E/s1600/jmods.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;498&quot; data-original-width=&quot;1505&quot; height=&quot;210&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgehB4xbREANE9rGUCUdqPchP10tfn-dOGPXpWrAvK_Uu-1EsCiW42wXuCiCNREsO3JfdDtYEuVEd_aVHGRj2HDUlSnXGNn1UDKfYr6AjTwnMyluK-s_U0H-x8grhpbLDmxji3KluiMD7E/s640/jmods.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
No Youtube estão 3 vídeos que trazem uma introdução a este tema.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe width=&quot;320&quot; height=&quot;266&quot; class=&quot;YOUTUBE-iframe-video&quot; data-thumbnail-src=&quot;https://i.ytimg.com/vi/B31EmzawqgM/0.jpg&quot; src=&quot;https://www.youtube.com/embed/B31EmzawqgM?feature=player_embedded&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe width=&quot;320&quot; height=&quot;266&quot; class=&quot;YOUTUBE-iframe-video&quot; data-thumbnail-src=&quot;https://i.ytimg.com/vi/PGX8ChZ02A8/0.jpg&quot; src=&quot;https://www.youtube.com/embed/PGX8ChZ02A8?feature=player_embedded&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe width=&quot;320&quot; height=&quot;266&quot; class=&quot;YOUTUBE-iframe-video&quot; data-thumbnail-src=&quot;https://i.ytimg.com/vi/lkOdywk2yeM/0.jpg&quot; src=&quot;https://www.youtube.com/embed/lkOdywk2yeM?feature=player_embedded&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/1390298024848827187/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2017/10/modulos-em-java-9.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/1390298024848827187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/1390298024848827187'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2017/10/modulos-em-java-9.html' title='Módulos em Java 9'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgehB4xbREANE9rGUCUdqPchP10tfn-dOGPXpWrAvK_Uu-1EsCiW42wXuCiCNREsO3JfdDtYEuVEd_aVHGRj2HDUlSnXGNn1UDKfYr6AjTwnMyluK-s_U0H-x8grhpbLDmxji3KluiMD7E/s72-c/jmods.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-3948637657590366043</id><published>2017-06-07T08:35:00.001-03:00</published><updated>2017-06-07T08:35:28.600-03:00</updated><title type='text'>Tratando CTRL-C em python</title><content type='html'>Quando pressionamos CTRL-C no teclado e nosso programa está rodando, normalmente isto significa que o programa deverá parar. Quando pressionamos CTRL-C é gerado um sinal para o programa.&lt;br /&gt;
Um sinal é uma forma de comunicação entre processos utilizada nos sistemas operacionais compatíveis com POSIX. Um sinal é uma notificação assíncrona enviada para um processo ou para um segmento específico dentro do mesmo processo para notificá-lo de um evento que ocorreu.&lt;br /&gt;
&lt;br /&gt;
Quando um sinal é enviado, o sistema operacional interrompe o fluxo normal de execução do processo alvo para entregar o sinal. A execução pode ser interrompida durante qualquer instrução não atômica. Se o processo já registrou um manipulador de sinal, essa rotina é executada. Caso contrário, o manipulador de sinal padrão é executado.&lt;br /&gt;
&lt;br /&gt;
O python permite que troquemos como os sinais serão tratados, assim dá para capturar o envio do CTRL-C e executar um procedimento de tratamento personalizado. Abaixo a gente pode observar um exemplo de como fazer este tratamento de sinal.&lt;br /&gt;
Precisamos importar a biblioteca SIGNAL do Python.&lt;br /&gt;
Utilizamos na linha 23 o comando para atribuir uma função de tratamento &lt;i&gt;signal_handler()&lt;/i&gt; para o sinal CTRL-C (SIGINT). Nas linhas 11 a 17 criamos o nosso tratador &lt;i&gt;signal_handler()&lt;/i&gt;.&lt;br /&gt;
Note que ele recebe dois parâmetros, o número do sinal (pois a gente pode usar a mesma função para tratar vários sinais) e os dados da pilha.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDAqNsE_kVuXw4UTxdQXaaVe3uZM2xpoNoKU30CMSKrZtn9uRU-m_rrvEPU1UvwCuSL9krVuDtiN1b0-8C_55ek3IAxwev7uIvlt8LP-xuQA5VixrmcyyxQ6K4ZfysKzUC04R7u9dLrxc/s1600/ctrl-c.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;803&quot; data-original-width=&quot;993&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDAqNsE_kVuXw4UTxdQXaaVe3uZM2xpoNoKU30CMSKrZtn9uRU-m_rrvEPU1UvwCuSL9krVuDtiN1b0-8C_55ek3IAxwev7uIvlt8LP-xuQA5VixrmcyyxQ6K4ZfysKzUC04R7u9dLrxc/s1600/ctrl-c.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;span id=&quot;goog_266971624&quot;&gt;&lt;/span&gt;
Você pode obter este módulo em meu repositório &lt;a href=&quot;https://github.com/h3dema/python_codes/tree/master/signal_handling&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;python_codes&lt;/a&gt; no github.&lt;br /&gt;
&lt;h3&gt;
Referências&lt;/h3&gt;
&lt;div&gt;
Quer saber com mais detalhes como este processo de sinalização ocorre no sistema operacional?&lt;/div&gt;
&lt;div&gt;
Leia a seção 4.6.2 sobre manipulação de sinais do livro do &lt;a href=&quot;http://www.grupogen.com.br/fundamentos-de-sistemas-operacionais-principios-basicos&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Silberschatz&lt;/a&gt;.&lt;/div&gt;
Se quiser ler mais sobre a manipulação de sinais no Pythom, veja em &lt;a href=&quot;https://docs.python.org/2/library/signal.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;python docs&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/3948637657590366043/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2017/06/tratando-ctrl-c-em-python.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/3948637657590366043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/3948637657590366043'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2017/06/tratando-ctrl-c-em-python.html' title='Tratando CTRL-C em python'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDAqNsE_kVuXw4UTxdQXaaVe3uZM2xpoNoKU30CMSKrZtn9uRU-m_rrvEPU1UvwCuSL9krVuDtiN1b0-8C_55ek3IAxwev7uIvlt8LP-xuQA5VixrmcyyxQ6K4ZfysKzUC04R7u9dLrxc/s72-c/ctrl-c.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-2442071439300603443</id><published>2017-04-14T09:33:00.003-03:00</published><updated>2017-04-14T09:33:47.088-03:00</updated><title type='text'>Rodando Docker sem sudo</title><content type='html'>Quando instalamos o &lt;b&gt;docker&lt;/b&gt;, o nosso usuário não fica automaticamente habilitado para rodar o &lt;b&gt;docker&lt;/b&gt; sem utilização do comando sudo. Isto acontece porque o daemon do &lt;b&gt;docker&lt;/b&gt; sempre é executado como o usuário root. Desde &lt;b&gt;docker&lt;/b&gt; versão 0.5.2, o daemon &lt;b&gt;docker&lt;/b&gt; se liga a um socket Unix em vez de uma porta TCP. Por padrão, esse socket Unix é propriedade da usuário &lt;b&gt;root&lt;/b&gt; e, portanto, por padrão, você pode acessá-lo com o sudo. Se você tentar rodar terá o seguinte erro:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI8goc_HeMBZ2_XcXUT1iZvg4KbT2Rohg-B-cfqczxuJmMA8hI5xKBz5kjbL2MlRNEUZsfoHjrnm2WucsNT5q5E_HXNdagW_ftG5PpYjsy2sAFsNj9UgJnuWPL6FaCC9aXnFbYHiuYClY/s1600/docker1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI8goc_HeMBZ2_XcXUT1iZvg4KbT2Rohg-B-cfqczxuJmMA8hI5xKBz5kjbL2MlRNEUZsfoHjrnm2WucsNT5q5E_HXNdagW_ftG5PpYjsy2sAFsNj9UgJnuWPL6FaCC9aXnFbYHiuYClY/s640/docker1.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
A partir da versão 0.5.3, se você criar um grupo Unix chamado docker e adicionar usuários a ele, então o daemon do &lt;b&gt;docker&lt;/b&gt; fará com que o grupo tenha acesso de leitura e escrita neste socket Unix quando o daemon for iniciado .&lt;br /&gt;
&lt;br /&gt;
O daemon do &lt;b&gt;docker&lt;/b&gt; deve sempre ser executado como o usuário root, mas se você executar o cliente docker como um usuário no grupo do docker, então você não precisa adicionar o sudo a todos os comandos do cliente.&lt;br /&gt;
&lt;br /&gt;
Então como fazer para rodar. Os passos são:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;adicionar o grupo docker, caso ele ainda não exista (no meu caso ele já existe)&lt;/li&gt;
&lt;li&gt;adicionar o seu usuário (e qualquer outro que você queira) ao grupo do docker&lt;/li&gt;
&lt;li&gt;reiniciar o daemon: no meu caso o processo chama &lt;b&gt;docker&lt;/b&gt;, mas em algumas versões de SO o nome é &lt;b&gt;docker.io&lt;/b&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigG4tIuaBc8WI9i51xYrOvxYi4Q3P5iigNDdpBTXkrsPgKeADT5WmLzfvaqcQ0qVqp6D9DqWJXdm2ESCII0Dp2FlAm1u0hZT8vEmFSGBfLTtOsZ7ML1nu0xFHjP_mvnALIaUQxl_Q2qHY/s1600/docker2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;204&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigG4tIuaBc8WI9i51xYrOvxYi4Q3P5iigNDdpBTXkrsPgKeADT5WmLzfvaqcQ0qVqp6D9DqWJXdm2ESCII0Dp2FlAm1u0hZT8vEmFSGBfLTtOsZ7ML1nu0xFHjP_mvnALIaUQxl_Q2qHY/s640/docker2.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Você precisa carregar nas configurações de seu usuário o novo grupo. Você pode: (1) fazer log out e entrar novamente ou (2) usar o comando &quot;newgrp docker&quot; para carregar estas configurações. No meu exemplo abaixo eu usei a segunda opção. Com isto agora meu usuário consegue carregar o hello-world sem utilizar o sudo.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikBIxKwh1dhP4O_13VYgnwBkFfGrFtFMlJTVZuKqHgdEc7wypzTXy0h29T_bDuyocO3X1nB5fn1gwBRQSeAAqgP0sAqIAPteOACahK0TrGNT42ezKJW6m72rOc16OjuIjFnH4n90wgIHE/s1600/docker3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;494&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikBIxKwh1dhP4O_13VYgnwBkFfGrFtFMlJTVZuKqHgdEc7wypzTXy0h29T_bDuyocO3X1nB5fn1gwBRQSeAAqgP0sAqIAPteOACahK0TrGNT42ezKJW6m72rOc16OjuIjFnH4n90wgIHE/s640/docker3.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/2442071439300603443/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2017/04/rodando-docker-sem-sudo.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/2442071439300603443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/2442071439300603443'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2017/04/rodando-docker-sem-sudo.html' title='Rodando Docker sem sudo'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI8goc_HeMBZ2_XcXUT1iZvg4KbT2Rohg-B-cfqczxuJmMA8hI5xKBz5kjbL2MlRNEUZsfoHjrnm2WucsNT5q5E_HXNdagW_ftG5PpYjsy2sAFsNj9UgJnuWPL6FaCC9aXnFbYHiuYClY/s72-c/docker1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-6901138673871482040</id><published>2017-03-01T08:14:00.000-03:00</published><updated>2017-05-28T08:17:12.037-03:00</updated><title type='text'>Docker e Java</title><content type='html'>Normalmente eu preciso utilizar o java. Meu sistema operacional preferido é o Ubuntu, mas na Universidade o sistema operacional apesar de ser linux, não é o Ubuntu. A utilização do Docker é ideal neste caso, pois posso utilizar meu ambiente favorito, não necessário um ambiente de virtualização na estação que estou utilizando, bastando ter o docker instalado e meu usuário no grupo docker.&lt;br /&gt;
&lt;br /&gt;
Um jeito de automatizar o processo é utilizar um &lt;b&gt;dockerfile&lt;/b&gt; e criar um docker local usando o comando &lt;b&gt;docker build&lt;/b&gt;. Se você quiser ter mais informações leia a documentação no site do docker em&amp;nbsp;&lt;a href=&quot;https://docs.docker.com/engine/reference/builder/&quot;&gt;https://docs.docker.com/engine/reference/builder/&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHMP51jQdAElFCta9m3qgZrTLDZJvhFodfhoe1FC4-VKFkm-fyFDr-0XssmVsVP5dlX_PCH1I5Am_X419qUB5r5ZbDVXu5a4uyB6fmdx2h8KTR-U7ojHgbO50nFbeDGIJxYPlVVWyUSu8/s1600/large_v-trans.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1208&quot; data-original-width=&quot;1354&quot; height=&quot;285&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHMP51jQdAElFCta9m3qgZrTLDZJvhFodfhoe1FC4-VKFkm-fyFDr-0XssmVsVP5dlX_PCH1I5Am_X419qUB5r5ZbDVXu5a4uyB6fmdx2h8KTR-U7ojHgbO50nFbeDGIJxYPlVVWyUSu8/s320/large_v-trans.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Vamos então a instalação e criação de um docker com java 9.&lt;br /&gt;
São dois passos:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Instale o docker no seu computador&lt;/li&gt;
&lt;li&gt;Rode o comando docker build github.com/h3dema/ubuntu_java&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Vá tomar um café pois demora um pouco. Será feito o download do programa e seu docker será criado.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1gFAeaKo9j9Bml_oE5Es0jQDLXsmHaYpWv3sVzqADv5S_dZDBz5Pz0A6HNqLWFYNJ40_9hZfmDELyffSz4hwYY0bKn1UHhK9zZ045vGGIk43EiKTiVXkgfRYfCfyxvn6Yo4NNk_wUkEU/s1600/Terminal_009.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;462&quot; data-original-width=&quot;722&quot; height=&quot;408&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1gFAeaKo9j9Bml_oE5Es0jQDLXsmHaYpWv3sVzqADv5S_dZDBz5Pz0A6HNqLWFYNJ40_9hZfmDELyffSz4hwYY0bKn1UHhK9zZ045vGGIk43EiKTiVXkgfRYfCfyxvn6Yo4NNk_wUkEU/s640/Terminal_009.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Pronto!&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PS: Hoje (29/05/2017) este procedimento não está funcionando mais. A Oracle retirou do ar o site java.net que era onde era baixado o JDK. Assim que o pessoal do webupd8 atualizar o script, eu indico aqui também.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwMm8w0DWiETkGCZKPHT5Lp6KDRxw6Ia3tWlfSpTKOsI5NWgZ6z6359pvlpdpoy7RefgsessYjOAslMnSwkzRo2GEN7_1MbmzLzLpbwGjFnbak5y5smdKQXj0aurmcGI5YpRQN8Hx9hq0/s1600/Terminal_010.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;462&quot; data-original-width=&quot;722&quot; height=&quot;255&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwMm8w0DWiETkGCZKPHT5Lp6KDRxw6Ia3tWlfSpTKOsI5NWgZ6z6359pvlpdpoy7RefgsessYjOAslMnSwkzRo2GEN7_1MbmzLzLpbwGjFnbak5y5smdKQXj0aurmcGI5YpRQN8Hx9hq0/s400/Terminal_010.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/6901138673871482040/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2017/05/doker-e-java.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/6901138673871482040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/6901138673871482040'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2017/05/doker-e-java.html' title='Docker e Java'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHMP51jQdAElFCta9m3qgZrTLDZJvhFodfhoe1FC4-VKFkm-fyFDr-0XssmVsVP5dlX_PCH1I5Am_X419qUB5r5ZbDVXu5a4uyB6fmdx2h8KTR-U7ojHgbO50nFbeDGIJxYPlVVWyUSu8/s72-c/large_v-trans.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-6324063332013089391</id><published>2017-01-03T21:07:00.001-02:00</published><updated>2017-01-03T21:07:31.797-02:00</updated><title type='text'>Java 9 terminou os testes de unidade</title><content type='html'>O Java 9 está começando a sair do forno. Agora em dezembro o desenvolvimento alcançou a marca de &quot;Recurso Completo&quot;, ou seja, todos os recursos foram implementados e integrados na floresta principal do Java, inclusive sendo feitos os testes de unidade.&lt;br /&gt;
A lista de recursos do JDK 9 incluídos no &lt;a href=&quot;https://jdk9.java.net/download/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;JDK 9 Early Access Downloads&lt;/a&gt; pode ser encontrada na página do &lt;a href=&quot;http://openjdk.java.net/projects/jdk9/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Projeto JDK 9&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Para instalação no Ubuntu (funciona em outras variantes do Debian também) basta seguir os passos em um terminal:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;$ sudo add-apt-repository ppa:webupd8team/java&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;$ sudo apt-get update&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;$ sudo apt-get install oracle-java9-installer&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Se você quiser configurar o Oracle Java 9 como padrão, não importa quais outras versões Java estejam instaladas, certifique-se de instalar o pacote oracle-java9-set-default, digitando no terminal:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;$sudo apt-get install oracle-java9-set-default&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Note que ainda é um release recente para testes.&lt;br /&gt;
&lt;b&gt;Não deve ser utilizado hoje em um ambiente de produção!&lt;/b&gt;</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/6324063332013089391/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2017/01/java-9-terminou-os-testes-de-unidade.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/6324063332013089391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/6324063332013089391'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2017/01/java-9-terminou-os-testes-de-unidade.html' title='Java 9 terminou os testes de unidade'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-2050921926058621762</id><published>2017-01-03T20:57:00.003-02:00</published><updated>2017-01-03T20:57:44.684-02:00</updated><title type='text'>Alterando o local padrão para as máquinas virtuais no VMware Player</title><content type='html'>Eu uso muito os ambientes de virtualização da VMware, Xen e Virtualbox.&lt;br /&gt;
Na versão gratuita do VMware, chamada VMware Player, você pode criar diversas máquinas virtuais para uso não comercial. Uma das maiores dificuldades que tive é em organizar onde as máquinas serão criadas. Eu normalmente coloco todas em um subdiretório assim fica fácil fazer backup delas.&lt;br /&gt;
&lt;br /&gt;
Na GUI do VMware Player não existe uma opção para definir onde é a localização default das VMs.&lt;br /&gt;
Se você está utilizando linux, procure dentro do HOME do seu usuário o diretório .vmware (note que começa com ponto). Abra o arquivo &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;~/.vmware/preferences&lt;/b&gt;&lt;/span&gt; e acrescente a seguinte linha:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;prefvmx.defaultvmpath = /&amp;lt;seu diretório&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Salve o arquivo, reinicie o VMware Player. Pronto, agora quando você for criar uma nova VM você será direcionado para o diretório que você definiu.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
No Windows é necessário acrescentar a mesma linha, contudo o caminho completo do arquivo de preferências é: &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;%Appdata%\VMware\preferences.ini&lt;/b&gt;&lt;/span&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/2050921926058621762/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2017/01/alterando-o-local-padrao-para-as.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/2050921926058621762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/2050921926058621762'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2017/01/alterando-o-local-padrao-para-as.html' title='Alterando o local padrão para as máquinas virtuais no VMware Player'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-4702323836220873673</id><published>2016-10-30T07:57:00.000-02:00</published><updated>2016-10-30T07:57:17.992-02:00</updated><title type='text'>Componentes conectados em Grafos</title><content type='html'>Em um grafo não-direcionado G, dois vértices u e v são ditos conectados se G contém um caminho de u para v. Senão, eles são chamados de desconectados. &amp;nbsp;Um grafo orientado (ou direcionado) é chamado de fracamente conectado se a substituição de todas as suas arestas direcionadas por arestas não direcionadas produz um grafo (não-direcionado) conectado. Ele é chamado de conectado se possui um caminho direcionado de u para v ou um caminho direcionado de v para u para cada par de vértices u, v. Ele é fortemente conexo se contém um caminho direto de u para v e um caminho direto v para u para cada par de vértices u, v.&amp;nbsp;Um vértice de corte de um grafo conexo G é um conjunto de vértices que quando removidos torna G desconexo.&lt;br /&gt;
&lt;br /&gt;
Um grafo não direcionado é conectado se
cada par de vértices está conectado por um
caminho.
  Os componentes conectados são as porções
conectadas de um grafo.
  Um grafo não direcionado é conectado se ele
tem exatamente um componente conectado.&lt;br /&gt;
Os componentes fortemente conexos são os subgrafos maximais fortemente conectados.&lt;br /&gt;
&lt;div&gt;
Os componentes fortemente conectados de
um grafo direcionado são conjuntos de
vértices sob a relação “são mutuamente
alcançáveis”.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Por exemplo {0, 1, 2, 3}, {4} e {5} são os componentes
fortemente conectados, {4, 5} não o é, pois o
vértice 5 não é alcançável a partir do vértice 4.&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdD-k2_8CozgMHaPzXSRHY2eM8CUpzGMhqtrmd3t6khQrGog-ULRgHFS2bcudcQtVre60a_5_G0IIiIqcjpnIwa98lWsVWxGYl5HEOmPqkklpJmPx4oqWc_WR3-ongonSEunVJFbw08wk/s1600/a.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;217&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdD-k2_8CozgMHaPzXSRHY2eM8CUpzGMhqtrmd3t6khQrGog-ULRgHFS2bcudcQtVre60a_5_G0IIiIqcjpnIwa98lWsVWxGYl5HEOmPqkklpJmPx4oqWc_WR3-ongonSEunVJFbw08wk/s320/a.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
O Algoritmo para achar estes componentes é:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Aplicar a busca em profundidade no grafo
G para
obter os tempos de término t[u] para cada vértice
u.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Obter o grafo G&#39;, que é o grafo transposto, isto é, são os mesmos vértices mas as arestas são invertidas. Assim existe uma arestas (u,v) em G&#39; se existe uma aresta (v,u) em G.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Aplicar a busca em profundidade no grafo
G&#39; realizando a busca a partir do vértice de maior t[u]
obtido na linha 1.&lt;/li&gt;
&lt;li&gt;Se a busca em profundidade não
alcançar todos os vértices, inicie uma nova busca
em profundidade a partir do vértice de maior t[u]
dentre os vértices restantes.&lt;/li&gt;
&lt;li&gt;Retornar os vértices de cada árvore da floresta
obtida na busca em profundidade na linha 3 como
um componente fortemente conectado separado.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/4702323836220873673/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2016/10/componentes-conectados-em-grafos.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/4702323836220873673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/4702323836220873673'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2016/10/componentes-conectados-em-grafos.html' title='Componentes conectados em Grafos'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdD-k2_8CozgMHaPzXSRHY2eM8CUpzGMhqtrmd3t6khQrGog-ULRgHFS2bcudcQtVre60a_5_G0IIiIqcjpnIwa98lWsVWxGYl5HEOmPqkklpJmPx4oqWc_WR3-ongonSEunVJFbw08wk/s72-c/a.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-2919696296278956878</id><published>2016-09-22T18:43:00.002-03:00</published><updated>2016-09-22T18:43:57.648-03:00</updated><title type='text'>Ativando Wi-Fi no Raspberry PI 2/3 usando a linha de comando</title><content type='html'>Para rodar o wifi (contando que o driver da placa wifi tenha sido reconhecida e carregada), você precisa do wpa_supplicant. Ele pode ser instalado usando&lt;br /&gt;
&lt;br /&gt;
sudo apt-get instal wpa_supplicant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Você pode tentar seguir o &lt;a href=&quot;https://www.raspberrypi.org/documentation/configuration/wireless/README.md&quot; target=&quot;_blank&quot;&gt;guia&lt;/a&gt; do site do Raspberry Pi. No meu caso o guia não funcionou pois ele considera a alteração no arquivo /etc/network/interfaces, mas no meu Pi &amp;nbsp;esta alteração não tem efeito.&lt;br /&gt;
&lt;br /&gt;
1) criar o arquivo de configuração do wpa_supplicant&lt;br /&gt;
Você terá que editar (criar) o arquivo &lt;b&gt;/etc/wpa_supplicant/wpa_supplicant.conf&lt;/b&gt;. Ele deverá ter no mínimo as linhas abaixo.&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: white; color: red; font-family: Courier New, Courier, monospace;&quot;&gt;country=BR&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: red; font-family: Courier New, Courier, monospace;&quot;&gt;ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: red; font-family: Courier New, Courier, monospace;&quot;&gt;update_config=1&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: red; font-family: Courier New, Courier, monospace;&quot;&gt;network={&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; ssid=&quot;SSID do seu AP&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; psk=&quot;senha do seu AP&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: red; font-family: Courier New, Courier, monospace;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Edite as linhas SSID e psk para conter o nome da sua rede sem fio (ESSID) e a senha da rede.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
2) criar um script para rodar o wpa_supplicant. No meu caso eu coloquei em &lt;b&gt;/etc/init.d/wpa_supplicant&lt;/b&gt;. Veja no script que está indicado a interface wlan0 onde será feita a conexão. No caso do seu Pi, você tem que configurar para o nome correto da interface.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;#! /bin/sh&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;### BEGIN INIT INFO&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;# Provides: wpa_supplicant&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;# Required-Start: &amp;nbsp; &amp;nbsp;$local_fs $syslog $remote_fs dbus&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;# Required-Stop: &amp;nbsp; &amp;nbsp; $local_fs $syslog $remote_fs&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;# Default-Start: &amp;nbsp; &amp;nbsp; 2 3 4 5&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;# Default-Stop: &amp;nbsp; &amp;nbsp; &amp;nbsp;0 1 6&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;# Short-Description: Start wpa_supplicant daemon&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;### END INIT INFO&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;# este script não estava rodando nos diretorios rcX.d&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;# ele deveria ficar ativo usando&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;# update_rc.d wpa_supplicant enable&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;# contudo apesar de criar os links ele não funcionou&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;#&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;# para ativá-lo eu tive que chamar o script em /etc/rc.local&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;DAEMON=/sbin/wpa_supplicant&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;DESC=&quot;wpa_supplicant wlan0&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;CONF=/etc/wpa_supplicant/wpa_supplicant.conf&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;test -f $DAEMON || exit 0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;# FIXME: any of the sourced files may fail if/with syntax errors&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;test -f $CONF&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;case $1 in&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; start)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; echo &quot;Starting $DESC&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; $DAEMON -i &lt;/span&gt;&lt;span style=&quot;color: magenta; font-family: Courier New, Courier, monospace;&quot;&gt;&lt;b&gt;wlan0&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt; -c $CONF -B&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; ;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; stop)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; echo &quot;Stopping $DESC&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; pkill wpa_supplicant&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; ;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; restart|force-reload)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; $0 stop&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; sleep 1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; $0 start&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; ;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; *)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; echo &quot;Usage: $0 {start|stop|restart}&quot; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; exit 1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; ;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;esac&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;exit 0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
3) alterar o arquivo /etc/rc.local para chamar o script criado no passo (2). No meu caso eu simplesmente inseri a linha abaixo&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;/etc/init.d/wpa_supplicant start&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Não é necessária nenhuma outra configuração. Meu arquivo&amp;nbsp;/etc/network/interfaces possui 3 linhas relacionadas com wlan0, contudo elas não fazem efeito real. Reproduzo abaixo somente para vocês verem o que são.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;allow-hotplug wlan0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;iface wlan0 inet manual&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red; font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/2919696296278956878/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2016/09/ativando-wi-fi-no-raspberry-pi-23.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/2919696296278956878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/2919696296278956878'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2016/09/ativando-wi-fi-no-raspberry-pi-23.html' title='Ativando Wi-Fi no Raspberry PI 2/3 usando a linha de comando'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-6484161369212748197</id><published>2016-09-06T14:24:00.001-03:00</published><updated>2016-09-06T14:25:23.030-03:00</updated><title type='text'>Bug PCManFM - Não abre o terminal</title><content type='html'>&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Se você é como eu e usa bastante o terminal no linux, tem uma característica interessante que é abrir o terminal no diretório corrente dentro do navegador. O Ubuntu é possível adicional ao menu de contexto uma opção &quot;Abrir no terminal&quot;. Para isto basta instalar &amp;nbsp;esta opção ao Nautilus:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eff0f1; border: 0px; color: #111111; font-family: Consolas, Menlo, Monaco, &amp;quot;Lucida Console&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: Consolas, Menlo, Monaco, &amp;quot;Lucida Console&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;&quot;&gt;sudo apt-get install nautilus-open-terminal
&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;code style=&quot;border: 0px; margin: 0px; padding: 0px; white-space: inherit;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Basta reiniciar o nautilus com (&lt;span style=&quot;background-color: #cccccc;&quot;&gt;nautilus -q&lt;/span&gt;) para que a opção já esteja ativa.&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code style=&quot;border: 0px; margin: 0px; padding: 0px; white-space: inherit;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;
&lt;code style=&quot;border: 0px; margin: 0px; padding: 0px; white-space: inherit;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Contudo se você utiliza o LUbuntu, o navegador é o PCManFM. Ele tem está opção no menu de ferramenta que é acionada via teclado usando &amp;lt;F4&amp;gt;. Contudo ela tem um bug.&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
&lt;code style=&quot;border: 0px; margin: 0px; padding: 0px; white-space: inherit;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW2Hcq7vIX9553oPqf-q8aDTEat7octMWTuGTuzEr5eM9n_iojB2giNRld35OS3U2WnR-oxvVsFplxqfKBVVIq7lp6MWeOYZiKY40FRjPukxcsc3oCR9RT_HjOCXN_q5B5RJMt9IONnG0/s1600/a.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW2Hcq7vIX9553oPqf-q8aDTEat7octMWTuGTuzEr5eM9n_iojB2giNRld35OS3U2WnR-oxvVsFplxqfKBVVIq7lp6MWeOYZiKY40FRjPukxcsc3oCR9RT_HjOCXN_q5B5RJMt9IONnG0/s1600/a.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;code style=&quot;border: 0px; margin: 0px; padding: 0px; white-space: inherit;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
&lt;code style=&quot;border: 0px; margin: 0px; padding: 0px; white-space: inherit;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;A instalação padrão não abre diretórios com espaços como no meu exemplo da &quot;Área de Trabalho&quot;. Esta opção de menu aciona um script que está no arquivo /usr/bin/&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;lxsession-default-terminal. Dentro deste script vemos que a variável $PWD não está entre aspas. Basta consertar como na imagem abaixo e pronto. O &amp;lt;F4&amp;gt; funciona.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;code style=&quot;border: 0px; margin: 0px; padding: 0px; white-space: inherit;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH8UhUU9WrsHD1bfyK67ZeWbvVE96pjhlUvK4RY5mPFu3TTX6fCTB9eISRB-6p56kBFlnu-EJw9DmnT_q5xf4WsZ4wqpsIqfj5qyG5hQnOD60hXbS56gg7cmQY_fh_HPbcoy92yY5Xldo/s1600/b.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH8UhUU9WrsHD1bfyK67ZeWbvVE96pjhlUvK4RY5mPFu3TTX6fCTB9eISRB-6p56kBFlnu-EJw9DmnT_q5xf4WsZ4wqpsIqfj5qyG5hQnOD60hXbS56gg7cmQY_fh_HPbcoy92yY5Xldo/s1600/b.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;code style=&quot;border: 0px; margin: 0px; padding: 0px; white-space: inherit;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/6484161369212748197/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2016/09/bug-pcmanfm-nao-abre-o-terminal.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/6484161369212748197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/6484161369212748197'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2016/09/bug-pcmanfm-nao-abre-o-terminal.html' title='Bug PCManFM - Não abre o terminal'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW2Hcq7vIX9553oPqf-q8aDTEat7octMWTuGTuzEr5eM9n_iojB2giNRld35OS3U2WnR-oxvVsFplxqfKBVVIq7lp6MWeOYZiKY40FRjPukxcsc3oCR9RT_HjOCXN_q5B5RJMt9IONnG0/s72-c/a.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-5067634845233977610</id><published>2016-07-03T08:29:00.005-03:00</published><updated>2016-07-03T08:56:42.127-03:00</updated><title type='text'>Instalando owncloud no Raspberry PI 2</title><content type='html'>Neste nosso post, vou mostrar como instalar o owncloud no seu raspberry pi 2. Eu já vi alguns locais mostrando a instalação e não achei que estavam completos, sempre faltava alguma coisa que a gente tinha que adivinhar.&lt;br /&gt;
&lt;br /&gt;
Assim vamos começar com uma instalação a partir do zero, isto é, baixamos o raspbian jesse lite do site (&lt;a href=&quot;https://www.raspberrypi.org/downloads/&quot;&gt;https://www.raspberrypi.org/downloads/&lt;/a&gt;). Nossa escolha pela versão Lite é que assim temos uma instalação limpa com poucos programas instalados. Esta versão não tem nem mesmo a interface gráfica. Desta forma ganhamos também em desempenho, pois não tem programas que não precisamos rodando no PI2.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
Instalando imagem&lt;/h4&gt;
&lt;br /&gt;
No nosso caso estamos usando Windows, desta forma precisamos de um aplicativo para copiar o Jesse para dentro do miniSD. O procedimento em &lt;a href=&quot;https://www.raspberrypi.org/documentation/installation/installing-images/windows.md&quot;&gt;raspberry&lt;/a&gt; é bastante eficiente. Basicamente você tem que baixar o programa Win32DiskImager do site da Sourceforge e instalá-lo no seu comptuador. Depois de instalado, basta rodar, selecionar a imagem que você fez download (normalmente a iamgem baixada está zipada, portanto você tem que descompactar), selecionar a unidade onde está o miniSD e selecionar a opção de WRITE. Quando acabar a cópia, basta remover o SD e colocá-lo no PI2.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
 Rodando o PI pela primeira vez  &lt;/h4&gt;
Ligue o seu PI2. Ele dará o boot e você poderá entrar. O usuário padrão é &lt;b&gt;pi&lt;/b&gt; com a senha &lt;b&gt;raspberry&lt;/b&gt;. Você pode configurar as opções regionais usando o comando &lt;i&gt;sudo raspi-config&lt;/i&gt;. O raspi-config apresenta uma tela como a mostrada abaixo:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK2KSPfEln7SK-gG5R5896KpgprzFUgYOvr4SVqTK8kPHwsRXIZL9e6ns4HLPPansZ7VbjeM4mxO6qJjV3EBCFXZYmG3nqbgYUXd6QvXoO2rVjjSwC15PKwZXvyTIW6X6NjQP7kUZb8MU/s1600/01.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;254&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK2KSPfEln7SK-gG5R5896KpgprzFUgYOvr4SVqTK8kPHwsRXIZL9e6ns4HLPPansZ7VbjeM4mxO6qJjV3EBCFXZYmG3nqbgYUXd6QvXoO2rVjjSwC15PKwZXvyTIW6X6NjQP7kUZb8MU/s400/01.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
No meu caso eu começei para trocar as opções de locale para pt-BR.UTF-8, o timezone para São Paulo, o layout para brasileiro e Wifi country para BR. Neste post não mostro o uso do Wifi, fica para uma outra oportunidade. Nossa conexão foi ethernet.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFXE7q4_08my8zUM6kQj3RuPscs5oE_jeJoZgI9YEPj16VP638gQiu_xSVE-cix0UIR0h2i6IoFAfft77PKFq8vszTXXIkhMCxlFfHu1-DXxvM7hNWTAUfmwgAJKbamSFy90Utmno-2gY/s1600/02.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;256&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFXE7q4_08my8zUM6kQj3RuPscs5oE_jeJoZgI9YEPj16VP638gQiu_xSVE-cix0UIR0h2i6IoFAfft77PKFq8vszTXXIkhMCxlFfHu1-DXxvM7hNWTAUfmwgAJKbamSFy90Utmno-2gY/s400/02.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Também aproveitei para trocar o nome do host. Por default o SSH server está habilitado, se no seu caso não estiver também é nesta opção que podemos ativá-lo.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqD8Y-V7VAXLWbaLkQvllq5qL4dLMxh2ViurESHx488jBy6KKESsUOgGGTjs0HrJ-P9unCUMhECpsuCAVDTJRkSbao2jP3PqXRD2Xdf7sNYLRkmNnA0ub_cI3QwpBfu23pkNVYZV2YHgU/s1600/03.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;255&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqD8Y-V7VAXLWbaLkQvllq5qL4dLMxh2ViurESHx488jBy6KKESsUOgGGTjs0HrJ-P9unCUMhECpsuCAVDTJRkSbao2jP3PqXRD2Xdf7sNYLRkmNnA0ub_cI3QwpBfu23pkNVYZV2YHgU/s400/03.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aparentemente as novas versões do Raspian (a minha é Jesse) já fazem durante a inicialização a expansão do filesystem para ocupar todo o seu cartão SD. O meu por exemplo tem 32GB e já foi totalmente reconhecido pelo PI2. Se no seu caso isto não ocorrer e você quiser aumentar o espaço, use a opção (1) do menu de opções avançadas do raspi-config.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9VitVxYt3RF7tdPRjODeECM3tKYWRkHXsJGQfINbNjjrvm4TJXEWpyk1lLrQlCk8ASzmOfYFJPubPbjiDGemriCt2mYSCG7E_ovpsV1NNpmXumEgzUOG740hm0PVzxKxU3TsLDnC5_HE/s1600/04.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9VitVxYt3RF7tdPRjODeECM3tKYWRkHXsJGQfINbNjjrvm4TJXEWpyk1lLrQlCk8ASzmOfYFJPubPbjiDGemriCt2mYSCG7E_ovpsV1NNpmXumEgzUOG740hm0PVzxKxU3TsLDnC5_HE/s640/04.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
Instalações adicionais e configuração inicial  &lt;/h4&gt;
Para usar o owncloud é necessário ter um servidor web instalado. Iremos usar o &lt;a href=&quot;https://www.nginx.com/&quot;&gt;NGINX&lt;/a&gt; que é bem leve e funciona com o PI2. Iniciamos configurando o usuário:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;i&gt;$ sudo usermod -a -G www-data www-data &lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Agora precisamos instalar uns pacotes que incluem o nginx, php5, sqlite, certificados, php5-fpm etc. Demora um pouco esta atualização. Pode ser que você tenha um &lt;i&gt;update&lt;/i&gt; primeiro.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ sudo sudo apt-get update&lt;br /&gt;&lt;br /&gt;$ sudo sudo apt-get install curl libapr1 libcurl4-openssl-dev libtool memcached nginx openssl php-apc php-pear php5 php5-curl php5-cgi php5-cli php5-dev php5-fpm php5-gd php5-imagick php5-intl php5-json php5-mcrypt php5-sqlite php5-common php5-memcache php-xml-parser sqlite sqlite3 ssl-cert varnish     &lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vamos criar um certificado SSL. Note que estamos criando um certificado válido por 3 anos (se você quiser mudar o tempo basta alterar 1095 para a quantidade de dias desejada). Você precisará preencher uma perguntas durante a execução da criação do certificado. O comando abaixo irá gerar uma chave RSA de 2048 bits. Você pode dar uma olhada em &lt;a href=&quot;https://www.openssl.org/docs/manmaster/apps/req.html&quot;&gt;https://www.openssl.org/docs/manmaster/apps/req.html&lt;/a&gt; para mais opções.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;i&gt;$ sudo openssl req $@-new -x509 -days 1095 -nodes -out /etc/nginx/cert.pem -keyout /etc/nginx/cert.key &lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Modifique as permissões para garantir segurança.&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;$ sudo chmod 600 /etc/nginx/cert.pem&lt;br /&gt;&lt;br /&gt;$ sudo chmod 600 /etc/nginx/cert.key &lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Eu alterei meu arquivo /etc/hosts para poder chamar o meu PI2 de pi-owncloud.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNrgH-0rUsO41ynDwfBgWK8orgqqrk0sB2aT-EnynwWkTY_ePJd4e3KSGgUeD1mS-WxEgSNnFkfuyNbBFLw0V7xt3nttqUcHWv_xzkGC_cm5kZO24EAk1ZuP8sXp84RzP67iIpR09tvpU/s1600/05.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNrgH-0rUsO41ynDwfBgWK8orgqqrk0sB2aT-EnynwWkTY_ePJd4e3KSGgUeD1mS-WxEgSNnFkfuyNbBFLw0V7xt3nttqUcHWv_xzkGC_cm5kZO24EAk1ZuP8sXp84RzP67iIpR09tvpU/s400/05.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Altere o arquivo /etc/php5/fpm/php.ini:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Ache upload_max_filesize e troque o valor para 2000M&lt;/li&gt;
&lt;li&gt;Ache post_max_size e troque o valor para 2000M&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Grave o arquivo alterado. Isto vai permitir transferências de arquivos de 2GB (este é o limite).&lt;br /&gt;
&lt;br /&gt;
Altere o arquivo /etc/php5/fpm/pool.d/www.conf. Ache a linha:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;listen = /var/run/php5-fpm.sock&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
e troque para&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;listen = 127.0.0.1:9000&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Grave o arquivo.&lt;br /&gt;
&lt;br /&gt;
Abra o arquivo /etc/dphys-swapfile e altere a linha contendo:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;CONF_SWAPSIZE=100&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
para&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;CONF_SWAPSIZE=512&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Grave o arquivo.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
Vamos ativar o fpm:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;i&gt;$ sudo update-rc.d php5-fpm enable &lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Altere o arquivo /etc/nginx/site-available/default (este é o conteúdo completo do meu arquivo de configuração):&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;upstream php-handler {&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; # para usar php5-fpm&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &lt;span style=&quot;color: red;&quot;&gt;server 127.0.0.1:9000;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; #server unix:/var/run/php5-fpm.sock;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;server {&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; listen 80;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; server_name &lt;span style=&quot;color: red;&quot;&gt;pi-owncloud&lt;/span&gt;;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; # garante que será https&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; # fazendo um redirecionamento&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; return 301 https://$server_name$request_uri;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;server {&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; # SSL configuration (ipv4 e ipv6)&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; listen 443 ssl ;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; listen [::]:443 ssl ;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;color: red; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; ssl_certificate /etc/nginx/cert.pem;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;color: red; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; ssl_certificate_key /etc/nginx/cert.key;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; root &lt;span style=&quot;color: red;&quot;&gt;/var/www/owncloud&lt;/span&gt;;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; # Add index.php to the list if you are using PHP&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; index index.php&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; server_name _;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; add_header X-Content-Type-Options nosniff;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; a&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;dd_header X-Frame-Options &quot;SAMEORIGIN&quot;;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;add_header X-XSS-Protection &quot;1; mode=block&quot;;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;add_header X-Robots-Tag none;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;add_header X-Download-Options noopen;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; add_header X-Permitted-Cross-Domain-Policies none;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; location = /robots.txt {&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; allow all;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;log_not_found off;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;access_log off;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; # alterar o &quot;max upload size&quot;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; client_max_body_size &lt;span style=&quot;color: red;&quot;&gt;2000M&lt;/span&gt;;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; Fastcgi_buffers 64 4K;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; # Disable gzip to avoid the removal of the ETag header&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; gzip off;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; location / {&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; # garante que sempre será chamado o index.php&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; rewrite ^ /index.php$uri;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;deny all;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;i&gt;&amp;nbsp; }&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;deny all;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; location ~&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;include fastcgi_params;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;fastcgi_split_path_info ^(.+\.php)(/.+)$;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;fastcgi_param PATH_INFO $fastcgi_path_info;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;fastcgi_param HTTPS on;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;#Avoid sending the security headers twice&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;fastcgi_param modHeadersAvailable true;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;fastcgi_param front_controller_active true;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;fastcgi_pass php-handler;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;fastcgi_intercept_errors on;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; location ~ ^/(?:updater|ocs-provider)(?:$|/) {&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;try_files $uri/ =404;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;index index.php;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; # Adding the cache control header for js and css files&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; # Make sure it is BELOW the PHP block&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; location ~* \.(?:css|js)$ {&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;try_files $uri /index.php$uri$is_args$args;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;add_header Cache-Control &quot;public, max-age=7200&quot;;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;# Add headers to serve security related headers (It is intended&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;# to have those duplicated to the ones above)&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; # Before enabling Strict-Transport-Security headers please&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; #&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;read into&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp;this topic first.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; add_header Strict-Transport-Security &quot;max-age=15768000;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;#  includeSubDomains; preload;&quot;;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;add_header X-Content-Type-Options nosniff;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;add_header X-Frame-Options &quot;SAMEORIGIN&quot;;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;add_header X-XSS-Protection &quot;1; mode=block&quot;;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;add_header X-Robots-Tag none;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;add_header X-Download-Options noopen;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;add_header X-Permitted-Cross-Domain-Policies none;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;# Optional: Don&#39;t log access to assets&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;access_log off;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;try_files $uri /index.php$uri$is_args$args;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;# Optional: Don&#39;t log access to other assets&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;access_log off;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note que na minha configuração o owncloud ficará em /var/www/owncloud.&lt;br /&gt;
Se você quiser mais informações olhe em na &lt;a href=&quot;https://doc.owncloud.org/server/9.0/admin_manual/installation/nginx_owncloud_9x.html&quot;&gt;documentação do owncloud&lt;/a&gt;, ela é bastante precisa.&lt;br /&gt;
&lt;h4&gt;
Instalando owncloud&lt;/h4&gt;
Faça o download do ownload no site &lt;a href=&quot;https://owncloud.org/install/&quot;&gt;https://owncloud.org/install/&lt;/a&gt;.&lt;br /&gt;
O meu caso estou utilizando a versão 9.0.3.&lt;br /&gt;
As linhas abaixo copiam o owncloud zipado do site para dentro do diretório tmp, descompactam os arquivos no diretório owncloud. Move este diretório para dentro do diretório onde ele irá rodar e acerta as permissões. No meu caso o diretório final será /var/www/owncloud. E por fim apaga o download.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ cd /tmp&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ wget https://download.owncloud.org/community/owncloud-9.0.3.tar.bz2&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ tar xvf owncloud-9.0.3.tar.bz2&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ sudo mv owncloud/ /var/www/&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ sudo chown -R www-data:www-data /var/www&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ rm -rf owncloud*&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ sudo mkdir -p /var/owncloud/data&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ sudo chown -R www-data:www-data /var/owncloud/data&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
É necessário fazer uma alteração do arquivo /etc/php5/fpm/pool.d/www.conf. Localize as linhas abaixo de descomente. A linha contendo env[PATH] deve conter o resultado de echo $PATH no shell.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;i&gt;; Pass environment variables like LD_LIBRARY_PATH.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;i&gt;; All $VARIABLEs are taken from&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;i style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;; the current environment.&lt;/i&gt;&lt;br /&gt;
&lt;i style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;; Default Value: clean env&lt;/i&gt;&lt;br /&gt;
&lt;i style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;env[HOSTNAME] = $HOSTNAME&lt;/i&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;
&lt;i style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;env[PATH] = &lt;span style=&quot;color: red;&quot;&gt;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;
&lt;i style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;env[TMP] = /tmp&lt;/i&gt;&lt;br /&gt;
&lt;i style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;env[TMPDIR] = /tmp&lt;/i&gt;&lt;br /&gt;
&lt;i style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;env[TEMP] = /tmp&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Reinicie o PI2.&lt;br /&gt;
&lt;br /&gt;
A configuração agora é feita via web. No meu caso https://192.168.10.12.&lt;br /&gt;
Se você tentar acessar via http, você será redirecionado para https. O meu navegador (chrome) apresenta a seguinte tela ao tentar acesso:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0XqcObViGGhio8FMc6vg7yJkr4vC7OVnMtIuKyoTIgLbhlr8t2TepZ3CFNDGRH51ZibCRNKvSpZSAT799hBaHnHcqHAxbd6TJult-ycpq6I4rG-TQAfM5XxCADYHmkM5USCWZHEJ76sU/s1600/06.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;345&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0XqcObViGGhio8FMc6vg7yJkr4vC7OVnMtIuKyoTIgLbhlr8t2TepZ3CFNDGRH51ZibCRNKvSpZSAT799hBaHnHcqHAxbd6TJult-ycpq6I4rG-TQAfM5XxCADYHmkM5USCWZHEJ76sU/s400/06.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
É necessário aceitar a exceção para entrar o owncloud:&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfM0H_UMopq-HJHBumf3p_0E87TaWJPafn9A8qf5lDzof6lAfrYO6FmsZ5QaKYB-IrmdtYWWqBwethqyzXQqBfj5mGtc7z1eUTSg49-9xo6TLNmyWqpwTk3FKQTCnELyqVeR6Q755HGQk/s1600/07.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfM0H_UMopq-HJHBumf3p_0E87TaWJPafn9A8qf5lDzof6lAfrYO6FmsZ5QaKYB-IrmdtYWWqBwethqyzXQqBfj5mGtc7z1eUTSg49-9xo6TLNmyWqpwTk3FKQTCnELyqVeR6Q755HGQk/s400/07.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Você deve preencher o nome do primeiro usuário (e que será o administrador) do owncloud. Digite a senha (tem um bug que às vezes indica que sua senha é fraca mesmo quando não é - veja meu exemplo). Você pode escolher qualquer senha. Você precisa clicar em &quot;Armazenamento &amp;amp; Banco de dados&quot; para poder indicar onde os dados do owncloud ficarão. No meu caso usei o diretório que criamos no passo inicial (/var/owncloud/data).&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrj6EHLdBZoYg6rnzCUwAoq1RydaI0v7w9ViVh5AoYBV7TpPUBanXhyphenhyphenJ70NtHsxrd4r88u2XoAO3KIUR6syv1Wy_ILqSkQZEBdMA53qwFIkZzcUxVUeG3DNXgJgmGaF9Igstq_FHllqtA/s1600/08.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrj6EHLdBZoYg6rnzCUwAoq1RydaI0v7w9ViVh5AoYBV7TpPUBanXhyphenhyphenJ70NtHsxrd4r88u2XoAO3KIUR6syv1Wy_ILqSkQZEBdMA53qwFIkZzcUxVUeG3DNXgJgmGaF9Igstq_FHllqtA/s640/08.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Se você quiser criar seu armazenamento em um pendrive sugiro dar uma olhada &lt;a href=&quot;https://www.element14.com/community/community/raspberry-pi/raspberrypi_projects/blog/2015/05/05/owncloud-v8-server-on-raspberry-pi-2-create-your-own-dropbox&quot;&gt;neste tutorial&lt;/a&gt;. Ele tem um passo a passo da instalação do owncloud (com apenas uns passos faltando), mas tem uma parte bacana sobre como montar automaticamente o pendrive (e com NTFS). Se você for utilizar fat, basta trocar a opção ntfs-3g do fstab que ele mostra para vfat.&lt;br /&gt;
&lt;br /&gt;
Após clicar em &quot;Concluir configuração&quot;, será aberta a tela inicial do owncloud.&lt;br /&gt;
&lt;br /&gt;
No menu no alto à esquerda, onde está escrito &quot;pi&quot; na minha tela abaixo, você encontrará a opção de administração que permite criar novos usuários.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aproveite...&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG6VpasRYedAIs3C2wlesOM3ar2Luyl1axF11ZXMy6m07TFWYG4J65gj9NZBQaAgamsQtuAJTWUNdLBDhutr6wP-BkFyohckSEiwpPmpOF28WUkM37Wot8YtJcHg3-DVrlDX1hvOc1rOY/s1600/09.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG6VpasRYedAIs3C2wlesOM3ar2Luyl1axF11ZXMy6m07TFWYG4J65gj9NZBQaAgamsQtuAJTWUNdLBDhutr6wP-BkFyohckSEiwpPmpOF28WUkM37Wot8YtJcHg3-DVrlDX1hvOc1rOY/s640/09.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/5067634845233977610/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2016/07/instalando-owncloud-no-raspberry-pi-2_3.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/5067634845233977610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/5067634845233977610'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2016/07/instalando-owncloud-no-raspberry-pi-2_3.html' title='Instalando owncloud no Raspberry PI 2'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK2KSPfEln7SK-gG5R5896KpgprzFUgYOvr4SVqTK8kPHwsRXIZL9e6ns4HLPPansZ7VbjeM4mxO6qJjV3EBCFXZYmG3nqbgYUXd6QvXoO2rVjjSwC15PKwZXvyTIW6X6NjQP7kUZb8MU/s72-c/01.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-4120328534557743034</id><published>2016-01-28T15:58:00.001-02:00</published><updated>2016-01-28T15:58:50.924-02:00</updated><title type='text'>Instalando Hadoop</title><content type='html'>Recentemente tive que instalar o Hadoop para um projeto de computação. O Hadoop é uma plataforma de software em Java de computação distribuída voltada para clusters e processamento de grandes massas de dados desenvolvida pelo &lt;a href=&quot;http://hadoop.apache.org/&quot; target=&quot;_blank&quot;&gt;Apache&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Hadoop possui diversos módulos. Hadoop Common contém as bibliotecas e arquivos comuns utiizados pelos outros os módulos Hadoop. Neste exemplo utilizaremos um sistema de arquivos distribuído que armazena dados em máquinas dentro do cluster, sob demanda, denominado Hadoop Distributed File System ou HDFS.&lt;br /&gt;
&lt;br /&gt;
Hadoop fornece uma plataforma de gerenciamento de recursos responsável pelo gerenciamento dos recursos computacionais do cluster e pelo agendamento dos recursos, denominado Hadoop Yarn. O framework YARN no Hadoop permite utilizar o MapReduce para processsamento de grandes quantidades de dados.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
A documentação do Hadoop pode ser achada &lt;a href=&quot;http://hadoop.apache.org/docs/current/&quot; target=&quot;_blank&quot;&gt;aqui&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
No nosso exemplo fazemos a instalação de 3 máquinas virtuais: uma computador mestre e dois escravos.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://youtu.be/qntxGIkokIo&quot; target=&quot;_blank&quot;&gt;Vídeo 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://youtu.be/TE4XEXwTFbU&quot; target=&quot;_blank&quot;&gt;Vídeo 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://youtu.be/7CVyCyHxmek&quot; target=&quot;_blank&quot;&gt;Vídeo 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://youtu.be/MdVUFF0b3zs&quot; target=&quot;_blank&quot;&gt;Vídeo 4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://youtu.be/AmQAPmoujWQ&quot; target=&quot;_blank&quot;&gt;Vídeo 5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://youtu.be/kycSWpTwXck&quot; target=&quot;_blank&quot;&gt;Vídeo 6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://youtu.be/74LiLP9yHBw&quot; target=&quot;_blank&quot;&gt;Vídeo 7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Vídeo 8&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/4120328534557743034/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2016/01/instalando-hadoop.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/4120328534557743034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/4120328534557743034'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2016/01/instalando-hadoop.html' title='Instalando Hadoop'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-8163095996996336887</id><published>2015-12-21T14:58:00.002-02:00</published><updated>2015-12-21T14:58:51.492-02:00</updated><title type='text'>DP - Problema das k curvas</title><content type='html'>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDVBXCSeRqNB7YCCQWL1zmAlDZGZiVRlg3ST0owU3m-teiVxrFM2X5bIBW5fhtGciV5adUlhDha32TuYz64CENtbLqZO3nV-0DqWZpfBsn2nvUNR_w0onCkT2RXtuBOBTpWaAaYCfxX6c/s1600/k-turns.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;262&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDVBXCSeRqNB7YCCQWL1zmAlDZGZiVRlg3ST0owU3m-teiVxrFM2X5bIBW5fhtGciV5adUlhDha32TuYz64CENtbLqZO3nV-0DqWZpfBsn2nvUNR_w0onCkT2RXtuBOBTpWaAaYCfxX6c/s320/k-turns.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;Este problema consiste em&amp;nbsp;&amp;nbsp;contar o número de caminhos para chegar iniciando até parte inferior direita em uma matriz MxN realizando no máximo k curvas como mostrado na figura.&lt;br /&gt;
&lt;br /&gt;
O que é uma curva?&lt;br /&gt;
Cada movimento que altera a direção é considerado uma curva, isto é,&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;se nós estávamos nos movendo ao longo da linha e passamos a nos mover ao longo da coluna&lt;/li&gt;
&lt;li&gt;ou se estávamos nos movendo ao longo da coluna e agora passamos a mover ao longo da linha.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;Podemos resolver este problema em tempo polinomial, utilizando uma matriz multidimensional com 4 dimensões para guardar a quantidade de caminho nas células considerando a quantidade de curvas e mudanças de direção.&lt;br /&gt;
&lt;br /&gt;
O vídeo mostra como implementar a solução deste problema.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe width=&quot;320&quot; height=&quot;266&quot; class=&quot;YOUTUBE-iframe-video&quot; data-thumbnail-src=&quot;https://i.ytimg.com/vi/ooa9Zysbq_I/0.jpg&quot; src=&quot;https://www.youtube.com/embed/ooa9Zysbq_I?feature=player_embedded&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/8163095996996336887/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2015/12/dp-problema-das-k-curvas.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/8163095996996336887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/8163095996996336887'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2015/12/dp-problema-das-k-curvas.html' title='DP - Problema das k curvas'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDVBXCSeRqNB7YCCQWL1zmAlDZGZiVRlg3ST0owU3m-teiVxrFM2X5bIBW5fhtGciV5adUlhDha32TuYz64CENtbLqZO3nV-0DqWZpfBsn2nvUNR_w0onCkT2RXtuBOBTpWaAaYCfxX6c/s72-c/k-turns.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-7235437415887097846</id><published>2015-12-21T12:37:00.000-02:00</published><updated>2015-12-21T12:37:05.351-02:00</updated><title type='text'>DP - Problema de mochila</title><content type='html'>&lt;br /&gt;
O problema da mochila é um problema de otimização combinatória. Isto que dizer que temos que trabalhar com diversas combinações e obter uma combinação que é ótima, ou seja, é a melhor segundo algum critério. O problema da mochila é um dos 21 problemas NP-completos de Richard Karp.&lt;br /&gt;
&lt;br /&gt;
Este tipo de problema queremos preencher uma mochila com objetos de diferentes pesos e valores. O objetivo é preencher a mochila com o maior valor possível, contudo não podemos ultrapassar o peso máximo. Vemos portanto que formulação do problema é extremamente simples, porém sua solução é mais complexa.&lt;br /&gt;
&lt;br /&gt;
No vídeo apresentamos como resolver esta versão da mochila.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe width=&quot;320&quot; height=&quot;266&quot; class=&quot;YOUTUBE-iframe-video&quot; data-thumbnail-src=&quot;https://i.ytimg.com/vi/gXt5Xm0CqIY/0.jpg&quot; src=&quot;https://www.youtube.com/embed/gXt5Xm0CqIY?feature=player_embedded&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Existem diversas variações do problema da mochila. Se você estiver curioso dê uma olhada na &lt;a href=&quot;https://pt.wikipedia.org/wiki/Problema_da_mochila&quot; target=&quot;_blank&quot;&gt;wikipedia&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/7235437415887097846/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2015/12/dp-problema-de-mochila.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/7235437415887097846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/7235437415887097846'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2015/12/dp-problema-de-mochila.html' title='DP - Problema de mochila'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/gXt5Xm0CqIY/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-1576367140678161413</id><published>2015-12-21T11:05:00.003-02:00</published><updated>2015-12-21T11:05:59.136-02:00</updated><title type='text'>DP - Sequência de Fibonacci</title><content type='html'>A sequência de Fibonacci é uma sucessão de números que, misteriosamente, aparece em muitos fenômenos da natureza. Ela foi descrita no final do século 12 pelo italiano Leonardo Fibonacci. É uma sequência infinita que começa com 0 e 1 ou 1 e 1 (depende de onde você está lendo a informação). Os números seguintes são sempre a soma dos dois números anteriores. Portanto, depois de 0 e 1, vêm 1, 2, 3, 5, 8, 13, 21, 34…&lt;br /&gt;
&lt;br /&gt;
Logo&lt;br /&gt;
&lt;br /&gt;
F[1] = 1&lt;br /&gt;
F[2] = 1&lt;br /&gt;
F[n] = F[n-1]&amp;nbsp;+ F[n-2], para n &amp;gt; 3&lt;br /&gt;
&lt;br /&gt;
Esta definição mostra claramente como podemos implementar a sequência usando recursividade, isto é, podemos criar uma função e chamá-la recursivamente para obter os valores F[n-1] e F[n-2] até chegar nos casos base que são F[1] e F[2].&lt;br /&gt;
&lt;br /&gt;
Contudo podemos ver na figura abaixo que existe muito trabalho repetido. Podemos usar os recursos da programação dinâmica para melhorar o desempenho deste cálculo.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcZgy2M0SQruKNQv6xBFdsD1PQRXEIcqZ7_ejrcQXTPl0KEecg4mMEZTutDX-IqmoONb_34O9Yd8trrVqe54YHIsGbJfcBO21E14zZ1b6l3n4gADQv8PsPUlzt53dHGcN1609Hf_OQie8/s1600/Fibonacci.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;201&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcZgy2M0SQruKNQv6xBFdsD1PQRXEIcqZ7_ejrcQXTPl0KEecg4mMEZTutDX-IqmoONb_34O9Yd8trrVqe54YHIsGbJfcBO21E14zZ1b6l3n4gADQv8PsPUlzt53dHGcN1609Hf_OQie8/s400/Fibonacci.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
No vídeo vemos como implementar a sequência de Fibonacci usando recursividade e usando programação dinâmica.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe width=&quot;320&quot; height=&quot;266&quot; class=&quot;YOUTUBE-iframe-video&quot; data-thumbnail-src=&quot;https://i.ytimg.com/s_vi/dnj5QeW7NHY/default.jpg?sqp=CPzx37MF&amp;rs=AOn4CLDZc0IWTUe-P_p_pWYPs91AgdCgow&quot; src=&quot;https://www.youtube.com/embed/dnj5QeW7NHY?feature=player_embedded&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/1576367140678161413/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2015/12/dp-sequencia-de-fibonacci.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/1576367140678161413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/1576367140678161413'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2015/12/dp-sequencia-de-fibonacci.html' title='DP - Sequência de Fibonacci'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcZgy2M0SQruKNQv6xBFdsD1PQRXEIcqZ7_ejrcQXTPl0KEecg4mMEZTutDX-IqmoONb_34O9Yd8trrVqe54YHIsGbJfcBO21E14zZ1b6l3n4gADQv8PsPUlzt53dHGcN1609Hf_OQie8/s72-c/Fibonacci.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-3288088055042372424</id><published>2015-10-25T21:02:00.001-02:00</published><updated>2015-10-29T20:33:22.240-02:00</updated><title type='text'>DP - Problema do Troco em Moedas</title><content type='html'>Este problema pode ser enunciado como:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Dado um valor de troco N (um número inteiro no nosso exemplo).&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Nós temos suprimento infinito de cada tipo de moeda do conjunto S = {S1, S2, .., SM}.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Note que temos portanto M tipos de moedas e teoricamente temos infinitas delas.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Quantas maneiras podemos combinar as moedas para obter um troco exato?&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;A ordem das moedas não importa.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Por exemplo temos que dar um troco de N = 4 dinheiros.&lt;br /&gt;
O conjunto de moedas que temos é S = {1,2,3}.&lt;br /&gt;
Podemos ver que existem quatro soluções: {1,1,1,1}, {1,1,2}, {2,2}, {1, 3}.&lt;br /&gt;
Assim a resposta do programa deve ser 4.&lt;br /&gt;
&lt;br /&gt;
Este problema pode ser resolvido por DP. Identificamos as duas características:&lt;br /&gt;
&lt;br /&gt;
1) Subestrutura ótima&lt;br /&gt;
&lt;br /&gt;
Para contar soluções, podemos dividir todas as soluções em dois subconjuntos:&lt;br /&gt;
a) Todas as soluções que não contêm moeda &quot;i&quot; (ou seja Si).&lt;br /&gt;
b) As soluções que contêm pelo menos uma moeda Si.&lt;br /&gt;
Desta forma podemos escrever o problema de contagem como&lt;br /&gt;
&lt;br /&gt;
C(S, n) = C(S&#39;, n) + C(S, N-Si)&lt;br /&gt;
&lt;br /&gt;
Onde S&#39; = S - {Si}&lt;br /&gt;
&lt;br /&gt;
Desta forma vemos que o problema tem a propriedade subestrutura ótima como o problema pode ser resolvido usando soluções de subproblemas. A equação e as condições abaixa deixam claro também que os problemas são sobrepostos.&lt;br /&gt;
&lt;br /&gt;
Temos que notar que existem algumas condições:&lt;br /&gt;
&lt;br /&gt;
a) C(S,0) = 1, pois se n=0 existe uma solução que não precisa de mais moedas&lt;br /&gt;
b) C(S,n) = 0, se n&amp;lt;0, pois n negativo, não há uma solução do problema (subtraiu demais)&lt;br /&gt;
c) C(S,n) = 0, se S = {} e n &amp;gt; 0, pois se não temos moedas para dar um troco &quot;n&quot; (já que n é maior que zero), não tem como acharmos uma solução.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; class=&quot;YOUTUBE-iframe-video&quot; data-thumbnail-src=&quot;https://i.ytimg.com/vi/EGIMSyqftHc/0.jpg&quot; frameborder=&quot;0&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/EGIMSyqftHc?feature=player_embedded&quot; width=&quot;320&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
O que falta no exemplo acima? Se você falou a memorização dos dados... acertou!&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
A memorização aumenta bastante a velocidade, uma vez que não precisamos recalcular.&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/3288088055042372424/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2015/10/dp-problema-do-troco-em-moedas.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/3288088055042372424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/3288088055042372424'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2015/10/dp-problema-do-troco-em-moedas.html' title='DP - Problema do Troco em Moedas'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/EGIMSyqftHc/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-8366406839200055302</id><published>2015-10-25T20:54:00.002-02:00</published><updated>2015-10-26T07:59:22.126-02:00</updated><title type='text'>Programação Dinâmica</title><content type='html'>Em computação a programação dinâmica é um método utilizado para a construção de algoritmos capazes de resolver problemas computacionais. Este método é aplicável aos problemas cuja solução ótima pode ser computada a partir da solução ótima previamente calculada e memorizada.&lt;br /&gt;
A solução anterior é memorizada para evitar recálculo.&lt;br /&gt;
Desta forma a programação dinâmica ou DP (&lt;i&gt;Dynamic Programming&lt;/i&gt;) resolve um problema a partir de subproblemas que sobrepostos compõem o problema original.&lt;br /&gt;
&lt;br /&gt;
Um problema computacional pode ser resolvido por DP se possuir duas características denominadas (1) subestrutura ótima e (2) superposição de subproblemas. Um problema apresenta uma subestrutura ótima quando uma solução para o problema contém em seu interior soluções para subproblemas - isto é temos a mesma fórmula de recorrência. A superposição de subproblemas acontece quando um algoritmo recursivo reexamina o mesmo problema muitas vezes - é aí que entra a memorização.&lt;br /&gt;
&lt;br /&gt;
A DP não é uma forma intuitiva de pensar, portanto temos que ver diversos exemplos para conseguir compreender e assimilar como ela trabalha. Vou criar a partir de agora um conjunto de posts que mostram como solucionar alguns problemas usado DP. Estes posts virão com uma implementação completa em Java para o problema. O &lt;a href=&quot;http://h3dema.blogspot.com.br/2015/10/dp-problema-do-troco-em-moedas.html&quot; target=&quot;_blank&quot;&gt;primeiro da série&lt;/a&gt; busca descobrir de quantas maneiras é possível dar um troco (N) utilizando um determinado conjunto de moedas.</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/8366406839200055302/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2015/10/programacao-dinamica.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/8366406839200055302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/8366406839200055302'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2015/10/programacao-dinamica.html' title='Programação Dinâmica'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-6716673498117042510</id><published>2015-07-29T12:32:00.004-03:00</published><updated>2018-02-19T20:51:02.467-03:00</updated><title type='text'>Versão inicial do livro Padrões em Java está disponível para download</title><content type='html'>Um versão inicial do livro sobre uso de Padrões em Java está disponível para download no endereço&amp;nbsp;https://goo.gl/smbjtX. Este livro mostra alguns padrões de projeto que eu utilizei com mais frequência neste Blog. O livro está sendo distribuído com a licença Creative Commons.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://goo.gl/smbjtX&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgkVN8nxe1x-I0Z_nYgiJLjMdYU9VCG542Wcw4UKADMNH0W8lhiLOukCJRZ7E_MB9670eMhJTwBAF-INzR-jhZtQTqg7zYIKyWcq6fKY-uC72waWgj_zeO6Zy8Pg88ksf9FzXlg-TJzKE/s320/PadroesEmJava.png&quot; title=&quot;Livro padrões em Java&quot; width=&quot;223&quot; /&gt;&lt;/a&gt;&lt;span id=&quot;goog_2012818285&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_2012818286&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
Aproveitem a leitura e mandem sugestões. ;-)))</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/6716673498117042510/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2015/07/versao-inicial-do-livro-padroes-em-java.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/6716673498117042510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/6716673498117042510'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2015/07/versao-inicial-do-livro-padroes-em-java.html' title='Versão inicial do livro Padrões em Java está disponível para download'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgkVN8nxe1x-I0Z_nYgiJLjMdYU9VCG542Wcw4UKADMNH0W8lhiLOukCJRZ7E_MB9670eMhJTwBAF-INzR-jhZtQTqg7zYIKyWcq6fKY-uC72waWgj_zeO6Zy8Pg88ksf9FzXlg-TJzKE/s72-c/PadroesEmJava.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-2516705766185249191</id><published>2015-07-29T12:30:00.002-03:00</published><updated>2018-02-19T20:52:25.179-03:00</updated><title type='text'>Lançamento da primeira versão do livro Introdução ao Java</title><content type='html'>Um versão inicial do livro Introdução ao Java está disponível para download no endereço https://goo.gl/paqpmv. Neste livro faço um apanhado condensado das informações e vídeos que posto neste Blog sobre a utilização da linguagem Java. O livro está sendo distribuído com a licença Creative Commons.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://goo.gl/paqpmv&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpU1YsyeKoTpDpZ9Yh7P2__lqoPIHTUTph1-M7vfHbs6ORFPBSTWGRtrKnmpgJsGCtbhKzvhTWepFYnAT2vhbFg0ng9Lp-Zte5aDVQy8SRfRGbAU8C-9BOCS6WbtnmYEbEzUg-9FyUBdo/s320/Introdu%25C3%25A7%25C3%25A3oAoJava.png&quot; width=&quot;220&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
O material ainda não está completo. Vocês verão dois grandes capítulos ainda não escritos. Este livro também não foi sujeito a revisão, portanto cuidado com os erros de português. Toda sugestão será bem vinda.&lt;br /&gt;
&lt;br /&gt;
Boa leitura!!!</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/2516705766185249191/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2015/07/lancamento-da-primeira-versao-do-livro.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/2516705766185249191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/2516705766185249191'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2015/07/lancamento-da-primeira-versao-do-livro.html' title='Lançamento da primeira versão do livro Introdução ao Java'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpU1YsyeKoTpDpZ9Yh7P2__lqoPIHTUTph1-M7vfHbs6ORFPBSTWGRtrKnmpgJsGCtbhKzvhTWepFYnAT2vhbFg0ng9Lp-Zte5aDVQy8SRfRGbAU8C-9BOCS6WbtnmYEbEzUg-9FyUBdo/s72-c/Introdu%25C3%25A7%25C3%25A3oAoJava.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-7064787845571397758</id><published>2015-07-24T17:23:00.002-03:00</published><updated>2015-07-24T17:23:38.404-03:00</updated><title type='text'>Melhorando o mergesort</title><content type='html'>Apresentamos em um post antigo denominado&amp;nbsp;&lt;a href=&quot;http://h3dema.blogspot.com.br/2013/03/recursividade-parte-2-ou-mergesort.html&quot; target=&quot;_blank&quot;&gt;Recursividade - Parte 2 ou MergeSort&lt;/a&gt; como implementar um algoritmo bastante eficiente de ordenação. Este algoritmo é o mergesort que usa o método de dividir para conquistar. Como o mergesort dividi a lista de elementos que devem ser ordenados em sublistas, podemos melhorar um pouco o desempenho em ambientes de multiprocessamento. Como? Fazendo que as sublistas sejam processadas em paralelo pelos diversos processadores que possuímos.&lt;br /&gt;
&lt;br /&gt;
Vamos ver no vídeo como podemos implementar threads com mergesort para torná-lo mais rápido via paralelismo. Note que não estamos alterando o número de operações, portanto a complexidade do algoritmo é a mesma.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe width=&quot;320&quot; height=&quot;266&quot; class=&quot;YOUTUBE-iframe-video&quot; data-thumbnail-src=&quot;https://i.ytimg.com/vi/rG-7E0gspNM/0.jpg&quot; src=&quot;https://www.youtube.com/embed/rG-7E0gspNM?feature=player_embedded&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/7064787845571397758/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2015/07/melhorando-o-mergesort.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/7064787845571397758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/7064787845571397758'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2015/07/melhorando-o-mergesort.html' title='Melhorando o mergesort'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/rG-7E0gspNM/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-7992520015312513851</id><published>2015-07-06T16:03:00.001-03:00</published><updated>2015-07-06T16:03:16.316-03:00</updated><title type='text'>Usando sua webcam com Java</title><content type='html'>Neste post veremos como criar um programa capaz de acessar sua webcam.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://youtu.be/C6NR7IgIbYU&quot; target=&quot;_blank&quot;&gt;Parte 1 - Como preparar o ambiente para o desenvolvimento&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://youtu.be/OQMHBKNJbDQ&quot; target=&quot;_blank&quot;&gt;Parte 2 - Criando o método run da nossa classe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://youtu.be/oxD9xOepA6A&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Parte 3 - Criando os métodos abstratos e testando nossa webcam&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/7992520015312513851/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2015/07/usando-sua-webcam-com-java.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/7992520015312513851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/7992520015312513851'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2015/07/usando-sua-webcam-com-java.html' title='Usando sua webcam com Java'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-9209813285555831196</id><published>2015-07-06T16:01:00.000-03:00</published><updated>2015-07-06T16:01:46.156-03:00</updated><title type='text'>Criando um cronometro simples em Java</title><content type='html'>Recentemente precisei de um cronômetro e (para variar) o Windows não tinha. Então resolvi fazer uma classe em Java que implementasse o cronômetro na tela. Precisava somente de um cronômetro simples, que ao clicar em &quot;Iniciar&quot; começasse a contar o tempo (em segundos) e que eu pudesse parar.&lt;br /&gt;
&lt;br /&gt;
A classe que implementa o cronômetro pode ser vista no vídeo. É interessante perceber que é necessário mobilizar um monte de coisas para fazer o cronômetro funcionar:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;precisamos criar uma interface gráfica que utiliza JFrame, JPanel, JLabel e JButton para permitir a comunicação com o usuário&lt;/li&gt;
&lt;li&gt;para criar os tratadores dos botões, isto é, os procedimentos que devem ser executados quando clicamos nos botões utilizamos uma classe &lt;a href=&quot;http://docs.oracle.com/javase/8/docs/api/java/awt/event/ActionListener.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;ActionListener &lt;/a&gt;anônima na qual alteramos o método&amp;nbsp;actionPerformed&lt;/li&gt;
&lt;li&gt;precisamos criar uma thread de &lt;a href=&quot;http://docs.oracle.com/javase/8/docs/api/java/util/Timer.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;timer &lt;/a&gt;capaz de ser disparada a cada &quot;x&quot; segundos, ou no nosso caso milissegundos&lt;/li&gt;
&lt;li&gt;para o timer funcionar temos que criar outra classe anônima que implementa&amp;nbsp;&lt;a href=&quot;http://docs.oracle.com/javase/8/docs/api/java/util/TimerTask.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;TimerTask&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe width=&quot;320&quot; height=&quot;266&quot; class=&quot;YOUTUBE-iframe-video&quot; data-thumbnail-src=&quot;https://i.ytimg.com/vi/Vb-Qbz8dT0E/0.jpg&quot; src=&quot;https://www.youtube.com/embed/Vb-Qbz8dT0E?feature=player_embedded&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/9209813285555831196/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2015/07/criando-um-cronometro-simples-em-java.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/9209813285555831196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/9209813285555831196'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2015/07/criando-um-cronometro-simples-em-java.html' title='Criando um cronometro simples em Java'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/Vb-Qbz8dT0E/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-4861189888132620265</id><published>2015-04-19T21:21:00.002-03:00</published><updated>2015-04-19T21:52:09.845-03:00</updated><title type='text'>Redução de Dimensões - Parte B</title><content type='html'>No post anterior sobre&amp;nbsp;&lt;a href=&quot;http://h3dema.blogspot.fr/2013/12/reducao-de-dimensoes.html&quot; target=&quot;_blank&quot;&gt;Redução de Dimensionalidade&lt;/a&gt;&amp;nbsp;apresentamos somente os conceitos teóricos para realizar da redução. Neste novo post apresentamos um código em Java que faz &lt;a href=&quot;http://pt.wikipedia.org/wiki/Decomposi%C3%A7%C3%A3o_em_valores_singulares&quot; target=&quot;_blank&quot;&gt;SVD&lt;/a&gt;&amp;nbsp;(Singular Value Decomposition).&lt;br /&gt;
&lt;br /&gt;
O desenvolvimento deste exemplo foi bastante simplificado ao usarmos o pacote &amp;nbsp;&lt;a href=&quot;http://math.nist.gov/javanumerics/jama/&quot; target=&quot;_blank&quot;&gt;JAMA&lt;/a&gt;, desenvolvido pelo NIST, que permite a realização de diversas operações sobre matrizes em Java. Mais informações sobre o pacote veja no site do Jama.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; class=&quot;YOUTUBE-iframe-video&quot; data-thumbnail-src=&quot;https://i.ytimg.com/vi/k-I1qyQGljQ/0.jpg&quot; frameborder=&quot;0&quot; height=&quot;266&quot; src=&quot;http://www.youtube.com/embed/k-I1qyQGljQ?feature=player_embedded&quot; width=&quot;320&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/4861189888132620265/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2015/04/reducao-de-dimensoes-parte-b.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/4861189888132620265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/4861189888132620265'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2015/04/reducao-de-dimensoes-parte-b.html' title='Redução de Dimensões - Parte B'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/k-I1qyQGljQ/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-5401326058070604056</id><published>2015-03-10T18:01:00.002-03:00</published><updated>2015-03-10T18:01:30.459-03:00</updated><title type='text'>Introdução da Programação de Computadores - Capítulo 6</title><content type='html'>Vimos no post anterior (do capítulo 5) como utilizar vetores, que são arranjos como um conjunto de &lt;b&gt;n&lt;/b&gt; valores de um mesmo tipo. Podemos expandir este conceito considerando que estes valores podem ser arranjados em diversas dimensões, sendo a mais comum o arranjo bidimensional ou matriz bidimensional. Uma matriz bidimensional pode ser utilizada por exemplo para representar um conjunto de valores de uma tabela por exemplo.&lt;br /&gt;
&lt;br /&gt;
Como veremos no vídeo, uma matriz é basicamente um vetor onde cada
elemento é por sua vez um vetor, desta forma podemos obter uma matriz retangular como em&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;int[][] retangular = new int[3][4]; // matriz com 3 linhas e 4 colunas&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
mas também podemos criar uma matriz irregular como&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;int[][] retangular = new int[3]; //&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;retangular[0] = new int[5];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;retangular[1] = new int[10];&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;retangular[2] = new int[2];&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
A primeira linha gera uma matriz com 3 linhas, porém as colunas ainda não estão definidas. As três linhas seguintes geram as colunas de cada linha - na segunda linha de código a primeira linha é configurada para possuir 5 colunas, depois a segunda com 10 e na última linha de código a terceira linha terá 2 elementos.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe width=&quot;320&quot; height=&quot;266&quot; class=&quot;YOUTUBE-iframe-video&quot; data-thumbnail-src=&quot;https://i.ytimg.com/vi/U44KPwLztnc/0.jpg&quot; src=&quot;http://www.youtube.com/embed/U44KPwLztnc?feature=player_embedded&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/5401326058070604056/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2015/03/introducao-da-programacao-de_10.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/5401326058070604056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/5401326058070604056'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2015/03/introducao-da-programacao-de_10.html' title='Introdução da Programação de Computadores - Capítulo 6'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/U44KPwLztnc/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-17133952607301590</id><published>2015-03-10T17:51:00.001-03:00</published><updated>2015-03-10T17:51:42.846-03:00</updated><title type='text'>Introdução da Programação de Computadores - Capítulo 5</title><content type='html'>Um vetor (array) é um objeto que contém um número fixo de valores de um único tipo. O tamanho de um vetor é estabelecido quando o array é criado. Após a criação, este tamanho é fixo e não pode ser mudado. Cada item em um vetor é denominado elemento. &amp;nbsp;Cada elemento pode ser acessado por um índice numérico. A numeração de um vetor começa com 0.&lt;br /&gt;
&lt;br /&gt;
Veja o vídeo a seguir:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; class=&quot;YOUTUBE-iframe-video&quot; data-thumbnail-src=&quot;https://i.ytimg.com/vi/-gI-HNsSKRs/0.jpg&quot; frameborder=&quot;0&quot; height=&quot;266&quot; src=&quot;http://www.youtube.com/embed/-gI-HNsSKRs?feature=player_embedded&quot; width=&quot;320&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/vg2nJk4FI7M&quot; target=&quot;_blank&quot;&gt;Exemplo 01&lt;/a&gt;&lt;/h4&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/2LvdXTtp0Mk&quot; target=&quot;_blank&quot;&gt;Exemplo 02&lt;/a&gt;&lt;/h4&gt;
&lt;div&gt;
Vamos fazer uma variação deste exemplo para mostrar que é possível criar um array não somente dos tipos primitivos (int, double, char...), mas de qualquer classe de desejarmos. Veja o &lt;a href=&quot;http://youtu.be/svBbDmh7NEM&quot; target=&quot;_blank&quot;&gt;Exemplo 02-a&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/ZmVu8CIeNiY&quot; target=&quot;_blank&quot;&gt;Exemplo 03&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/L-WhpygXorw&quot; target=&quot;_blank&quot;&gt;Exemplo 04&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/OXHLaqCfEZY&quot; target=&quot;_blank&quot;&gt;Exemplo 05&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;br /&gt;&lt;/h4&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/17133952607301590/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2015/03/introducao-da-programacao-de.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/17133952607301590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/17133952607301590'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2015/03/introducao-da-programacao-de.html' title='Introdução da Programação de Computadores - Capítulo 5'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/-gI-HNsSKRs/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4079627930700944368.post-3358231509198435120</id><published>2015-01-08T08:14:00.001-02:00</published><updated>2015-02-06T18:52:57.729-02:00</updated><title type='text'>Introdução da Programação de Computadores - Capítulo 4</title><content type='html'>&lt;h2&gt;
Estruturas de repetição&lt;/h2&gt;
&lt;br /&gt;
Neste post trataremos de 3 estruturas de repetição em Java. Um problema com estruturas de repetição é o que chamamos de &lt;u&gt;looping infinito&lt;/u&gt;, &amp;nbsp;isto ocorre devido ao fato do bloco de programa desta estrutura fica repetindo a mesma sequência de códigos esperando por um resultado que nunca irá acontecer. Por isto devemos garantir que a variável que controla o loop seja alterada.&lt;br /&gt;
&lt;br /&gt;
A primeira estrutura que veremos é&amp;nbsp;&lt;b&gt;for&lt;/b&gt;. Esta é a instrução mais comum e tem o formato apresentado abaixo. A expressão de inicialização inicializa o laço &lt;b&gt;for&lt;/b&gt;; ele é executado uma vez, antes da primeira execução do bloco de comandos. A expressão de incremento é chamada após cada iteração do loop &lt;b&gt;for&lt;/b&gt;. É perfeitamente aceitável esta expressão aumentar ou diminuir a variável de controle. O bloco de comandos será executado enquanto a condição de&amp;nbsp;&lt;u&gt;comparação&amp;nbsp;&lt;/u&gt;for verdadeira. Quando a expressão&amp;nbsp;avaliada&amp;nbsp;na &lt;u&gt;comparação &lt;/u&gt;for falsa, o loop termina.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;b&gt;for&lt;/b&gt;(inicialização; comparação; incremento) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;i&gt;bloco de comandos;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;b&gt;for&lt;/b&gt;(&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;inicialização; comparação; incremento&lt;/span&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;i&gt;instrução;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
Outra estrutura de repetição é &lt;b&gt;while&lt;/b&gt;. While executa uma comparação com a variável. Se a comparação for verdadeira, ele executa o bloco de instruções ( entre { } ) ou apenas a próxima linha de código logo abaixo (se não houver o bloco entre {} ). O bloco de comandos será executado enquanto a condição de&amp;nbsp;&lt;u&gt;comparação&amp;nbsp;&lt;/u&gt;for verdadeira.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;b&gt;while&lt;/b&gt; (comparação) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &lt;i&gt;bloco de comandos;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;b&gt;while&lt;/b&gt;&amp;nbsp;(comparação)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;i&gt;instrução;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
A terceira estrutura é denominado &lt;b&gt;do ... while&lt;/b&gt;. É similar ao &lt;b&gt;while&lt;/b&gt;, porém a comparação é realizada somente no final, desta forma o bloco será executado pelo menos uma vez. O bloco de comandos será executado enquanto a condição de &lt;u&gt;comparação &lt;/u&gt;for verdadeira.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;b&gt;do&lt;/b&gt; {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;i&gt;bloco de comandos;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;}&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;while&lt;/b&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;(comparação);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;b&gt;do&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;i&gt;instrução;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;b&gt;while&lt;/b&gt;&amp;nbsp;(comparação);&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.youtube.com/embed/jc3zoQA1j2I?feature=player_embedded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/X-RAtuqs1ok&quot; target=&quot;_blank&quot;&gt;Exemplo 01&lt;/a&gt;&lt;/h4&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/GjE8FW5niRI&quot; target=&quot;_blank&quot;&gt;Exemplo 02&lt;/a&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/GzxYeE7Rrho&quot; target=&quot;_blank&quot;&gt;Exemplo 03&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/bLymBkdxwa0&quot; target=&quot;_blank&quot;&gt;Exemplo 04&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/wNnGAYe6MWg&quot; target=&quot;_blank&quot;&gt;Exemplo 05&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/bikTBZmi1cU&quot; target=&quot;_blank&quot;&gt;Exemplo 06&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/f8Kzpzr2chA&quot; target=&quot;_blank&quot;&gt;Exemplo 07&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/ZcqijgLfHMU&quot; target=&quot;_blank&quot;&gt;Exemplo 08&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/1kNJ9PmBjxM&quot; target=&quot;_blank&quot;&gt;Exemplo 09&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/FES47mOPwJ0&quot; target=&quot;_blank&quot;&gt;Exemplo 10&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/OMR8Ufwqhbg&quot; target=&quot;_blank&quot;&gt;Exemplo 11&lt;/a&gt;&lt;/h4&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/TpYMCcbtOYQ&quot; target=&quot;_blank&quot;&gt;Exemplo 12&lt;/a&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/9ymzUIFbBFU&quot; target=&quot;_blank&quot;&gt;Exemplo 13&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/-yrJF2WdOH4&quot; target=&quot;_blank&quot;&gt;Exemplo 14&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/0d2TH1m7EkE&quot; target=&quot;_blank&quot;&gt;Exemplo 15&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/ZaLS6u79pSg&quot; target=&quot;_blank&quot;&gt;Exemplo 16&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/5TuaBJuQzeA&quot; target=&quot;_blank&quot;&gt;Exemplo 17&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/DBJF--9eeeE&quot; target=&quot;_blank&quot;&gt;Exemplo 18&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;a href=&quot;http://youtu.be/5sPPEGiR8mc&quot; target=&quot;_blank&quot;&gt;Exemplo 20&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4&gt;
&lt;/h4&gt;
</content><link rel='replies' type='application/atom+xml' href='http://h3dema.blogspot.com/feeds/3358231509198435120/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://h3dema.blogspot.com/2015/01/introducao-da-programacao-de_8.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/3358231509198435120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4079627930700944368/posts/default/3358231509198435120'/><link rel='alternate' type='text/html' href='http://h3dema.blogspot.com/2015/01/introducao-da-programacao-de_8.html' title='Introdução da Programação de Computadores - Capítulo 4'/><author><name>h3dema</name><uri>http://www.blogger.com/profile/05110945493192866462</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnzyOvq2HtrBKdXk_T0fouQ4_PlDX7pLJT6whq2ZHu5QHEHnxeVz3mDQVwyUTiJ3yEMdHVgB9u72-jHYVW9OZ8Qrr8O7KsMKbCUBITodQJTdGmGfEHdAjagCwzooMZ3A/s220/images.jpg'/></author><thr:total>0</thr:total></entry></feed>