<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3428906911754962373</id><updated>2012-01-30T15:39:42.796-08:00</updated><category term='aix'/><category term='c++ 0x programação'/><category term='conversão conveter PEM PPK Chave Privada Putty Amazon EC2'/><category term='mysql remoto permis&apos;são'/><category term='linux timezone brasilia'/><category term='sql mysql merge update linux'/><category term='unix time hora segundos date linux conversão converter'/><title type='text'>Leonardo X. T. Cardoso</title><subtitle type='html'>......</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>50</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-815967959539701877</id><published>2011-07-29T09:17:00.000-07:00</published><updated>2011-07-29T09:19:51.429-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux timezone brasilia'/><title type='text'>Configurando Timezone no Linux (Horário de Brasília)</title><content type='html'>Configurando para o horário de Brasília...modo rápido.&lt;br /&gt;&lt;br /&gt;Auto explicativo....&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# rm /etc/localtime&lt;br /&gt;# ln -s /usr/share/zoneinfo/Brazil/East /etc/localtime&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-815967959539701877?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/815967959539701877/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=815967959539701877' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/815967959539701877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/815967959539701877'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2011/07/configurando-timezone-no-linux-horario.html' title='Configurando Timezone no Linux (Horário de Brasília)'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-2725226994238674305</id><published>2011-07-21T08:08:00.000-07:00</published><updated>2011-07-21T08:14:18.967-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unix time hora segundos date linux conversão converter'/><title type='text'>Convertendo datas com o comando date no Linux</title><content type='html'>Uma tarefa comum que nos deparamos todos os dias é pegar um timestamp no formato Unix em segundos e transformar em String e vice-versa.&lt;div&gt;&lt;br /&gt;&lt;div&gt;Para mais detalhes do formato de hora no Unix consulte [1]&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;No Java você chamando System.currentTimeMillis()  ele retorna a hora corrente em milisegundos.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Por exemplo aqui ele me retornou 1308528000000&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Para ver a hora que esse número representa basta dividir por 1000 e chamar no shell do linux&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;$ date -d @1308528000&lt;/div&gt;&lt;div&gt;Sun Jun 19 21:00:00 BRT 2011&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A divisão por mil é porque a hora no formato Unix esta em segundos e cada segundo tem 1000 milisegundos.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Para fazer a operação inversa basta chamar&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;date -d "2011-06-19 21:00:00" "+%s"&lt;/div&gt;&lt;div&gt;1308528000&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[1] &lt;a href="http://en.wikipedia.org/wiki/Unix_time"&gt;http://en.wikipedia.org/wiki/Unix_time&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-2725226994238674305?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/2725226994238674305/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=2725226994238674305' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/2725226994238674305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/2725226994238674305'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2011/07/convertendo-datas-com-o-comando-date-no.html' title='Convertendo datas com o comando date no Linux'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-1201007734041159545</id><published>2010-11-23T13:03:00.000-08:00</published><updated>2010-11-23T13:07:03.374-08:00</updated><title type='text'>Habilitando icmp ping em sua máquina virtual na amazon ec2</title><content type='html'>A imagem fala por sí só&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;img src="http://1.bp.blogspot.com/_0H3slx8sKMo/TOwslQNpBrI/AAAAAAAAA1E/mP9lnPAifiA/s400/ecs-config.PNG" style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px; height: 22px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5542854259905201842" /&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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-1201007734041159545?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/1201007734041159545/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=1201007734041159545' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/1201007734041159545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/1201007734041159545'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2010/11/habilitando-icmp-ping-em-sua-maquina.html' title='Habilitando icmp ping em sua máquina virtual na amazon ec2'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_0H3slx8sKMo/TOwslQNpBrI/AAAAAAAAA1E/mP9lnPAifiA/s72-c/ecs-config.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-3532824403931196736</id><published>2010-10-28T07:07:00.000-07:00</published><updated>2010-10-28T10:39:08.801-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql mysql merge update linux'/><title type='text'>SQL MERGE no MySQL</title><content type='html'>Hoje finalmente me deparei com uma feature cuja solução direta era fazer um MERGE no MySQL.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Para minha surpresa o MySQL não suporte MERGE [1].&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Como assim ? Este comando existe desde 2008 no padrão SQL:2008 e ainda não foi implementado.&lt;/div&gt;&lt;div&gt;Enfim, é o custo de não pagar por uma licença.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Pesquisando um pouco descobri outro comando para fazer o trabalho do MERGE.&lt;/div&gt;&lt;div&gt;O ponto negativo é que terei que usar um comando específico do MySQL.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Depois se quiser trocar de banco de dados terei que reescrever todas as queries.&lt;/div&gt;&lt;div&gt;Foda né ? Posteriormente qual o custo disso  ? &lt;/div&gt;&lt;div&gt;Não compensa pagar logo a licença de um BD decente ?&lt;/div&gt;&lt;div&gt;Pode ser que o custo de adaptação posterior em termos de desenvolvimento, testes, homologação seja muito mais caro que pagar a licença do Oracle ou DB2.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Enfim, uma coisa para se pensar...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Mas voltando a solução do problema.&lt;/div&gt;&lt;div&gt;A primeira solução com que me deparei foi o REPLACE [3].&lt;/div&gt;&lt;div&gt;Mas lendo a documentação me deparei com a seguinte frase.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: helvetica, arial, sans-serif; color: rgb(85, 85, 85); font-size: 14px; line-height: 25px; "&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.1/en/replace.html" title="12.2.7. REPLACE Syntax" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; outline-width: 0px; outline-style: initial; outline-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; text-decoration: underline; color: rgb(0, 117, 159); background-position: initial initial; background-repeat: initial initial; "&gt;&lt;code class="literal" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; outline-width: 0px; outline-style: initial; outline-color: initial; font-size: 13px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: white; color: rgb(2, 103, 137); font-weight: bold; font-family: 'courier new', courier, fixed, monospace; text-decoration: underline; background-position: initial initial; background-repeat: initial initial; "&gt;REPLACE&lt;/code&gt;&lt;/a&gt; works exactly like &lt;a href="http://dev.mysql.com/doc/refman/5.1/en/insert.html" title="12.2.5. INSERT Syntax" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; outline-width: 0px; outline-style: initial; outline-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; text-decoration: underline; color: rgb(0, 117, 159); background-position: initial initial; background-repeat: initial initial; "&gt;&lt;code class="literal" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; outline-width: 0px; outline-style: initial; outline-color: initial; font-size: 13px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: white; color: rgb(2, 103, 137); font-weight: bold; font-family: 'courier new', courier, fixed, monospace; text-decoration: underline; background-position: initial initial; background-repeat: initial initial; "&gt;INSERT&lt;/code&gt;&lt;/a&gt;, except that if an old row in the table has the same value as a new row for a&lt;code class="literal" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; outline-width: 0px; outline-style: initial; outline-color: initial; font-size: 13px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: white; color: rgb(2, 103, 137); font-weight: bold; font-family: 'courier new', courier, fixed, monospace; background-position: initial initial; background-repeat: initial initial; "&gt;PRIMARY KEY&lt;/code&gt; or a &lt;code class="literal" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; outline-width: 0px; outline-style: initial; outline-color: initial; font-size: 13px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: white; color: rgb(2, 103, 137); font-weight: bold; font-family: 'courier new', courier, fixed, monospace; background-position: initial initial; background-repeat: initial initial; "&gt;UNIQUE&lt;/code&gt; index, the old row is deleted before the new row is inserted.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Porque diabos ele faz um DELETE e depois um INSERT ao invés de fazer um simples UPDATE ?&lt;/div&gt;&lt;div&gt;Alguém pode me explicar isso ?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Isso inviabilizou o uso do REPLACE devido a restrições de chaves estrangeiras que todos conhecem. Não poderia apagar e escrever linhas referenciadas por outras tabelas.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Pesquisando com mais cuidado achei o salvado da pátria que é o &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;INSERT ... ON DUPLICATE KEY UPDATE [4]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Pois bem, ele resolve exatamente o que queria fazer com o MERGE.&lt;/div&gt;&lt;div&gt;O único problema é que isso é uma extensão do MySQL deixando a query fora do padrão.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Para referência segue um query com o KEY UPDATE&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;INSERT INTO USERS ( id, name, location) &lt;/div&gt;&lt;div&gt;                          VALUES &lt;/div&gt;&lt;div&gt;                                      ( 1, 'leonardo', 'mantena')&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt; ON DUPLICATE KEY UPDATE&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;     name            = VALUES&lt;/span&gt; &lt;span class="Apple-tab-span" style="white-space:pre"&gt;(name)&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;location        = VALUES (location)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[1] &lt;a href="http://en.wikipedia.org/wiki/Merge_(SQL)"&gt;http://en.wikipedia.org/wiki/Merge_(SQL)&lt;/a&gt;&lt;/div&gt;&lt;div&gt;[3] &lt;a href="http://dev.mysql.com/doc/refman/5.1/en/replace.html"&gt;http://dev.mysql.com/doc/refman/5.1/en/replace.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;[4] &lt;a href="http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html"&gt;http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-3532824403931196736?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/3532824403931196736/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=3532824403931196736' title='5 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/3532824403931196736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/3532824403931196736'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2010/10/sql-merge-no-mysql.html' title='SQL MERGE no MySQL'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-6349120513597383799</id><published>2010-10-22T11:40:00.000-07:00</published><updated>2010-10-22T12:28:29.956-07:00</updated><title type='text'>Fazendo Post Get de um JSON com o curl</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;curl -d @create_user.json -H"Content-Type: application/json" -H"Aplication/json" http://teste.com:8080/rest/teste&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Onde create_user.json é o arquivo local com o conteúdo JSON&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Para fazer um GET faça:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;curl -v -X GET -H"Accept: application/json" http://teste:9080/rest/teste&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sem mais...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-6349120513597383799?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/6349120513597383799/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=6349120513597383799' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/6349120513597383799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/6349120513597383799'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2010/10/fazendo-post-de-um-json-com-o-curl.html' title='Fazendo Post Get de um JSON com o curl'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-5742389275099233894</id><published>2010-10-18T10:15:00.001-07:00</published><updated>2010-10-18T10:37:08.149-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conversão conveter PEM PPK Chave Privada Putty Amazon EC2'/><title type='text'>Como converter uma chave privada Linux PEM para o Putty PPK</title><content type='html'>&lt;div style="text-align: justify;"&gt;Usuários Linux acostumados com o uso de certificados no formato PEM vão ter problemas ao utilizar o Putty no Windows.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Este guia vai ensinar como fazer a conversão para o formato apropriado do Putty.&lt;/div&gt;&lt;div&gt;Sei que a maioria não usa chaves privadas, mas quem usar o Amazon EC2 será obrigado a lidar com isso.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Todas as chaves privadas de acesso as máquinas virtuais do Amazon EC2 estão no formato PEM.&lt;/div&gt;&lt;div&gt;Para acessar do Windows usando o Putty por exemplo, estas devem ser convertidas para PPK.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Segue os passos:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Fazer o download do utilitário PuttyGen&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;                           http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html&lt;/div&gt;&lt;div&gt;    Link Direto: http://the.earth.li/~sgtatham/putty/latest/x86/puttygen.exe&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2. Executar o PuttyGen, clicar no menu em &lt;b&gt;Conversions &lt;/b&gt;e depois &lt;b&gt;Import Key&lt;/b&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;img src="http://leoxtc-misc.s3.amazonaws.com/blog-images/puttygen_1.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 484px; height: 465px;" border="0" alt="" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;2. Localizar o arquivo PEM a ser convertido&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://leoxtc-misc.s3.amazonaws.com/blog-images/puttygen_2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 839px; height: 528px;" src="http://leoxtc-misc.s3.amazonaws.com/blog-images/puttygen_2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3. Clicar em &lt;b&gt;Save Private Key&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;img src="http://leoxtc-misc.s3.amazonaws.com/blog-images/puttygen_3.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 484px; height: 465px;" border="0" alt="" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4. Confirmar e Salvar sem Passphrase. Clique em &lt;b&gt;Yes&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;img src="http://leoxtc-misc.s3.amazonaws.com/blog-images/puttygen_4.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 484px; height: 465px;" border="0" alt="" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;5. Escolher onde Salvar e o nome do arquivo PPK.&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://leoxtc-misc.s3.amazonaws.com/blog-images/puttygen_5.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 839px; height: 528px;" src="http://leoxtc-misc.s3.amazonaws.com/blog-images/puttygen_5.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;6. Configurar a chave em sua conexão no Putty&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;img src="http://leoxtc-misc.s3.amazonaws.com/blog-images/puttygen_6.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 484px; height: 465px;" border="0" alt="" /&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;&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;&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 style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-5742389275099233894?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/5742389275099233894/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=5742389275099233894' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/5742389275099233894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/5742389275099233894'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2010/10/como-converter-uma-chave-privada-pem.html' title='Como converter uma chave privada Linux PEM para o Putty PPK'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-8822168786578586149</id><published>2010-10-05T10:07:00.000-07:00</published><updated>2010-10-05T10:29:45.064-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql remoto permis&apos;são'/><title type='text'>Habilitando Conexões Remotas no MySQL</title><content type='html'>&lt;div&gt;Com a instalação default do MySQL não é possível conectar remotamente no banco de dados. Pela configuração default apenas localhost pode se conectar.&lt;br /&gt;&lt;br /&gt;Neste cenário, ao tentar conectar remotamente no banco ele retorna o seguinte erro:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;KHost '&lt;hostname&gt;' is not allowed to connect to this MySQL serverConnect&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Para permitir outros hosts basta fazer o seguinte:&lt;br /&gt;&lt;br /&gt;1. Conectar no Banco&lt;br /&gt;&lt;br /&gt;&lt;em&gt;# mysql -uroot -p&lt;br /&gt;&lt;br /&gt;mysql&gt; grant all privileges on *.* to '&lt;strong&gt;user&lt;/strong&gt;'@'&lt;strong&gt;ip&lt;/strong&gt;' identified by '&lt;strong&gt;passwd&lt;/strong&gt;';&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Onde:&lt;br /&gt;&lt;strong&gt;user&lt;/strong&gt;: é o usuário que você que usar.&lt;br /&gt;&lt;strong&gt;ip&lt;/strong&gt;: a máquina remota que você quer permitir.&lt;br /&gt;&lt;strong&gt;passwd&lt;/strong&gt;: a senha do usuário&lt;br /&gt;&lt;br /&gt;Por exemplo:&lt;br /&gt;&lt;br /&gt;mysql&gt; grant all privileges on *.* to 'root'@'192.168.2.60' identified by 'teste';&lt;br /&gt;&lt;br /&gt;Para habilitar toda a rede classe C do exemplo basta usar o wildcard %&lt;br /&gt;(ex 192.168.2.%)&lt;br /&gt;&lt;br /&gt;O ultimo passo é fazer o flush da configuração:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;mysql&gt; flush privileges;&lt;/em&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;ScreenShot da operação&lt;/div&gt;&lt;br /&gt;&lt;img alt="" src="http://leoxtc-misc.s3.amazonaws.com/sql.png" width="694" height="315" /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;[]'s&lt;br /&gt;&lt;br /&gt;Leonardo &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-8822168786578586149?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/8822168786578586149/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=8822168786578586149' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/8822168786578586149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/8822168786578586149'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2010/10/habilitando-conexoes-remotas-no-mysql.html' title='Habilitando Conexões Remotas no MySQL'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-1044976073088529262</id><published>2010-09-15T15:07:00.000-07:00</published><updated>2010-09-15T15:12:29.789-07:00</updated><title type='text'>Equivalente do LDD no HPUX</title><content type='html'>&lt;div style="text-align: justify"&gt;&lt;br /&gt;Temos 2 opções:&lt;br /&gt;&lt;br /&gt;1. chatr [binario]&lt;br /&gt;2. odump -sllibload [binario]&lt;br /&gt;&lt;br /&gt;Onde binario pode ser um programa ou uma shared library.&lt;br /&gt;&lt;br /&gt;Exemplo de outputs para uma shared library.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush: text;"&gt;&lt;br /&gt;bash-3.2# chatr release_pic/swpfs.sl&lt;br /&gt;release_pic/swpfs.sl:&lt;br /&gt;shared library&lt;br /&gt;shared library dynamic path search:&lt;br /&gt;SHLIB_PATH disabled second&lt;br /&gt;embedded path disabled first Not Defined&lt;br /&gt;shared library list:&lt;br /&gt;static /opt/company/lib/libstdcpp.sl&lt;br /&gt;dynamic /opt/gcc-3.4.4/lib/libstdc++.sl.6&lt;br /&gt;dynamic /usr/lib/libm.2&lt;br /&gt;dynamic /opt/gcc-3.4.4/lib/libgcc_s.sl&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: text;"&gt;&lt;br /&gt;bash-3.2# odump -sllibload release_pic/swpfs.sl&lt;br /&gt;&lt;br /&gt;Shared Library Load List for release_pic/swpfs.sl:&lt;br /&gt;&lt;br /&gt;Order Name&lt;br /&gt;&lt;br /&gt;0 release_pic/swpfs.sl&lt;br /&gt;1 ^ /opt/company/lib/libstdcpp.sl&lt;br /&gt;2 ^ /opt/gcc-3.4.4/lib/libstdc++.sl.6&lt;br /&gt;3 ^ ^ /usr/lib/libm.2&lt;br /&gt;4 ^ ^ /opt/gcc-3.4.4/lib/libgcc_s.sl&lt;br /&gt;5 ^ ^ ^ /usr/lib/libc.2&lt;br /&gt;6 ^ ^ ^ ^ /usr/lib/libdld.2&lt;br /&gt;7 ^ ^ /usr/lib/libc.2&lt;br /&gt;8 ^ ^ ^ /usr/lib/libdld.2&lt;br /&gt;9 ^ /usr/lib/libm.2&lt;br /&gt;10 ^ /opt/gcc-3.4.4/lib/libgcc_s.sl&lt;br /&gt;11 ^ ^ /usr/lib/libc.2&lt;br /&gt;12 ^ ^ ^ /usr/lib/libdld.2&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-1044976073088529262?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/1044976073088529262/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=1044976073088529262' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/1044976073088529262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/1044976073088529262'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2010/09/temos-2-opcoes-1_15.html' title='Equivalente do LDD no HPUX'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-1749671943414703613</id><published>2010-06-01T10:52:00.000-07:00</published><updated>2010-06-01T10:53:50.443-07:00</updated><title type='text'>Google recomenda que funcionários não usem Windows</title><content type='html'>O Google sempre foi liberal em relação ao Sistema Operacional que seus funcionários usavam. Todos podiam escolher se queriam Windows, Linux, Mac, etc.&lt;br /&gt;&lt;br /&gt;No entanto, desde que sofreu os famosos ataques provenientes da China essa política começou a mudar e novos funcionários precisam pedir permissão caso queiram usar Windows.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Referência&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;http://www.ft.com/cms/s/2/d2f3f04e-6ccf-11df-91c8-00144feab49a.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-1749671943414703613?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/1749671943414703613/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=1749671943414703613' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/1749671943414703613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/1749671943414703613'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2010/06/google-recomenda-que-funcionarios-nao.html' title='Google recomenda que funcionários não usem Windows'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-3607354644788291016</id><published>2010-06-01T10:24:00.000-07:00</published><updated>2010-06-01T10:45:43.073-07:00</updated><title type='text'>Comitê do GCC libera o uso do C++</title><content type='html'>Comitê do GCC libera o uso do C++&lt;br /&gt;&lt;br /&gt;Mark Mitchell anunciou hoje que o comitê do GCC liberou o uso do C++ no desenvolvimento do GCC.&lt;br /&gt;&lt;br /&gt;Mas na  prática eles vão usar C com objetos. Isso porque o uso de templates (com exceção do STL), múltipla herança e exceções serão proibidas. A idéia é usar apenas recursos que sejam fáceis de programadores C entenderem e reduzir a probabilidade dos desenvolvedores C++ menos experientes fazerem merda.&lt;br /&gt;&lt;br /&gt;Referências&lt;br /&gt;&lt;br /&gt;http://gcc.gnu.org/ml/gcc/2010-05/msg00705.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-3607354644788291016?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/3607354644788291016/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=3607354644788291016' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/3607354644788291016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/3607354644788291016'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2010/06/comite-do-gcc-libera-o-uso-do-c.html' title='Comitê do GCC libera o uso do C++'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-8419883373542054923</id><published>2010-03-18T10:54:00.001-07:00</published><updated>2010-03-18T10:54:40.372-07:00</updated><title type='text'>Como verificar se o kernel é 32 ou 64 bits no HP-UX 11i</title><content type='html'># getconf KERNEL_BITS&lt;br /&gt;64&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-8419883373542054923?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/8419883373542054923/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=8419883373542054923' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/8419883373542054923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/8419883373542054923'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2010/03/como-verificar-se-o-kernel-e-32-ou-64.html' title='Como verificar se o kernel é 32 ou 64 bits no HP-UX 11i'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-2176740636170624847</id><published>2010-03-17T13:57:00.000-07:00</published><updated>2010-03-17T14:06:55.172-07:00</updated><title type='text'>Aumentando o tamanho do filesystem no HP-UX</title><content type='html'>Neste postirei exemplificar como aumentar o tamanho do /home&lt;br /&gt;&lt;br /&gt;Primeiro deve-se desmontar qualquer pasta NFS que esteja montando no /home.&lt;br /&gt;Depois fechar todos os arquivos que estejam referenciando arquivos do /home.&lt;br /&gt;&lt;br /&gt;# fuser -k /home (manda um sigkill para todos os processo usando arquivos em /home)&lt;br /&gt;# cat /etc/fstab (verificar o volume logico e o tipo do filesystem)&lt;br /&gt;&lt;br /&gt;No meu caso a entrada de /home tem a seguinte linha:&lt;br /&gt;&lt;br /&gt;/dev/vg00/lvol5 /home vxfs delaylog 0 2&lt;br /&gt;&lt;br /&gt;Que significa que meu /home é do tipo vxfs e esta montado no volume lógico /dev/vg00/lvol5&lt;br /&gt;&lt;br /&gt;# umount /home (desmonta o /home)&lt;br /&gt;&lt;br /&gt;# lvextend -L 512 /dev/vg00/lvol5 (aumenta o tamanho do LV para 512 MB)&lt;br /&gt;&lt;br /&gt;# extendfs -F vxfs /dev/vg00/rlvol5 (faz com que o filesystem use todo o espaco)&lt;br /&gt;&lt;br /&gt;# mount /home&lt;br /&gt;&lt;br /&gt;Neste momento seu home esta com 512 MB&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Arial, Helvetica;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:Arial,Helvetica;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-2176740636170624847?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/2176740636170624847/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=2176740636170624847' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/2176740636170624847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/2176740636170624847'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2010/03/aumentando-o-tamanho-do-filesystem-no.html' title='Aumentando o tamanho do filesystem no HP-UX'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-1052009189130225189</id><published>2009-12-18T10:45:00.000-08:00</published><updated>2009-12-18T10:47:33.382-08:00</updated><title type='text'>Ignorando Sinais no GDB</title><content type='html'>Por default, o GDB ao perceber um sinal SIGPIPE ele pausa a aplicação send depurada.&lt;br /&gt;Em alguns casos queremos simplesmente imprimir e ignorar  sinal.&lt;br /&gt;Para evitar que o GDB pare sempre que a aplicação receber um SIGPIPE basta digitar:&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;blockquote&gt;handle SIGPIPE nostop noprint pass&lt;/blockquote&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-1052009189130225189?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/1052009189130225189/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=1052009189130225189' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/1052009189130225189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/1052009189130225189'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/12/ignorando-sinais-no-gdb.html' title='Ignorando Sinais no GDB'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-4756384937579778393</id><published>2009-10-20T12:23:00.001-07:00</published><updated>2009-10-20T12:27:24.264-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aix'/><title type='text'>LDD no AIX</title><content type='html'>Vocês que desenvolvem software no AIX ja devem ter percebido que não existe o comando ldd nele.&lt;br /&gt;Uma opção é usar o comando "dump -H" nativo do AIX ou baixar o LDD da bull freeware.&lt;br /&gt;&lt;br /&gt;Va em&lt;br /&gt;http://www.bullfreeware.com/&lt;br /&gt;Escolha a versão do seu AIX e procure pelo pacote   &lt;a href="http://www.bullfreeware.com/download/aix43/aix.tools-1.5.4.0.exe"&gt; aix.tools&lt;/a&gt;.&lt;br /&gt;O que instalei aqui é o   &lt;a href="http://www.bullfreeware.com/download/aix43/aix.tools-1.5.4.0.exe"&gt; aix.tools-1.5.4.0&lt;/a&gt; e funciona perfeitamente.&lt;br /&gt;&lt;br /&gt;[]'s&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-4756384937579778393?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/4756384937579778393/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=4756384937579778393' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/4756384937579778393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/4756384937579778393'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/10/ldd-no-aix.html' title='LDD no AIX'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-6503100322273438877</id><published>2009-10-20T11:23:00.000-07:00</published><updated>2009-10-20T11:26:59.205-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aix'/><title type='text'>Mudando a ordem de resolução de nomes no AIX</title><content type='html'>Para especificar a ordem de resolução de nomes no AIX, faça o seguinte:&lt;br /&gt;&lt;br /&gt;Crie o arquivo /etc/netsvc.conf e incluia a seguinte linha:&lt;br /&gt;&lt;br /&gt;hosts = local, bind&lt;br /&gt;&lt;br /&gt;Para versões 5L do Aix pode ser necessário informar a versão do IP usada.&lt;br /&gt;&lt;br /&gt;hosts = local 4, bind4&lt;br /&gt;&lt;br /&gt;As configurações acima farão com que o sistema verififque primeiro no seu /etc/hosts para somente depois tentar o DNS server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-6503100322273438877?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/6503100322273438877/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=6503100322273438877' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/6503100322273438877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/6503100322273438877'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/10/mudando-ordem-de-resolucao-de-nomes-no.html' title='Mudando a ordem de resolução de nomes no AIX'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-4387008339703542816</id><published>2009-10-16T08:45:00.000-07:00</published><updated>2009-10-16T09:05:14.163-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aix'/><title type='text'>Gerenciamento de Softwares no AIX - Referência rápida</title><content type='html'>Instalar um software&lt;br /&gt;installp -a&lt;br /&gt;&lt;br /&gt;Desinstalar um software&lt;br /&gt;installp -u&lt;br /&gt;&lt;br /&gt;Listar softwares instalados&lt;br /&gt;lslpp -L all&lt;br /&gt;&lt;br /&gt;Verificar software instalado&lt;br /&gt;lppchk -v&lt;br /&gt;&lt;br /&gt;Listar todos os arquivos&lt;br /&gt;lslpp -f fileset&lt;br /&gt;&lt;br /&gt;Listar patchs instalados&lt;br /&gt;instfix -i&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-4387008339703542816?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/4387008339703542816/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=4387008339703542816' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/4387008339703542816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/4387008339703542816'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/10/gerenciamento-de-softwares-no-aix.html' title='Gerenciamento de Softwares no AIX - Referência rápida'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-1380612554423393874</id><published>2009-10-15T07:07:00.000-07:00</published><updated>2009-10-15T07:09:23.487-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aix'/><title type='text'>Instalando um arquivo bff no aix</title><content type='html'>Para quem não quer usar o smit, segue a linha de comando para a instalação de um pacote bff.&lt;br /&gt;&lt;br /&gt;Suponha que você tenha o seguinte pacote:&lt;br /&gt;gnu.bash-2.4.0.0.bff&lt;br /&gt;&lt;br /&gt;Para instalar basta digitar&lt;br /&gt;&lt;br /&gt;installp -aX -d gnu.bash-2.4.0.0.bff all&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-1380612554423393874?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/1380612554423393874/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=1380612554423393874' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/1380612554423393874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/1380612554423393874'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/10/instalando-um-arquivo-bff-no-aix.html' title='Instalando um arquivo bff no aix'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-8831554037336308967</id><published>2009-06-12T11:25:00.000-07:00</published><updated>2009-06-12T11:26:26.089-07:00</updated><title type='text'>Microsoft pronta para lançar seu antivírus gratuito</title><content type='html'>&lt;div style="text-align: justify;"&gt;De acordo com a &lt;a href="http://www.reuters.com/article/technologyNews/idUSTRE5585IV20090611"&gt;Reuters&lt;/a&gt;, a Microsoft já tem uma versão Beta de seu antivírus pronta para ser liberada para testes.  A idéia é lançar um produto sem custo para os usuários, batendo de frente com os tradicionais antivírus existentes no mercado.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Acionistas de fornecedoras de antivírus, tais como Symantec e McAfee já estão preocupados com o impacto deste lançamento da Microsoft. No longo prazo, esta nova o oferta pode causar um impacto significante na concorrência. No entanto, um porta-voz da Symantec diz estar tranqüilo, pois a empresa já vem se saindo bem contra ofertas gratuitas de softwares antivírus existentes no Mercado.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;[]'s&lt;br /&gt;&lt;br /&gt;Leonardo X. T. Cardoso&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-8831554037336308967?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/8831554037336308967/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=8831554037336308967' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/8831554037336308967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/8831554037336308967'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/06/microsoft-pronta-para-lancar-seu.html' title='Microsoft pronta para lançar seu antivírus gratuito'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-6849122577623985942</id><published>2009-06-04T13:21:00.001-07:00</published><updated>2009-06-04T13:21:46.427-07:00</updated><title type='text'>teste</title><content type='html'>teste&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-6849122577623985942?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/6849122577623985942/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=6849122577623985942' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/6849122577623985942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/6849122577623985942'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/06/teste.html' title='teste'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-7253921583292539646</id><published>2009-06-02T09:51:00.000-07:00</published><updated>2009-06-02T10:04:15.721-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++ 0x programação'/><title type='text'>Lista de inicialização no C++ 0x</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;A maioria dos desenvolvedores C++ sonham com a possibilidade das declarações abaixo:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: cpp;"&gt;&lt;br /&gt;std::vector&lt; std::string &gt; peoples = { “joao”, “pedro", “maria" };&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ou&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: cpp;"&gt;&lt;br /&gt;std::list&lt; std::pair&lt; std::string, int&gt; &gt; peoples =  {&lt;br /&gt;                {"joao",12}, {"maria", 15}, {"pedro", 20}&lt;br /&gt;           };&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Agora o sonho se tornará realidade, pois é isto que a lista de inicialização irá possibilitar no C++ 0x. Desenvolvedores C++ não ficarão mais restritos a utilização de lista de inicialização apenas em arrays.&lt;br /&gt;&lt;br /&gt;Para a construção da lista de inicialização o C++ 0x irá associa-la a um novo tipo chamado std::initializer_list. Isto permitirá que construtores e as tradicionais funções recebam uma lista de inicialização como parâmetro. A lista de inicialização pode ter tamanho arbitrário, mas os elementos devem ser homogêneos (todos do mesmo tipo T ou conversíveis para T).&lt;br /&gt;&lt;br /&gt;Por exemplo:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush: cpp;"&gt;&lt;br /&gt;class List&lt;br /&gt;{&lt;br /&gt;public:&lt;br /&gt;  List(std::initializer_list&lt; int &gt; list);&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Esta declaração permite que a classe List seja construída a partir de uma sequência de inteiros como mostrado no exemplo abaixo:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush: cpp;"&gt;&lt;br /&gt;List my_list = {1, 4, 5, 6};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;O construtor da classe List é chamado construtor de lista de inicialização.&lt;br /&gt;&lt;br /&gt;A classe std::initializer_list, apesar de ser um tipo de primeira classe no C++ 0x, somente pode ser inicializada estaticamente pelo compilador. A lista de inicialização sempre é constante e não pode ser modificada depois de criada.&lt;br /&gt;&lt;br /&gt;Vejamos abaixo a implementação do construtor de lista de inicialização da classe std::vector da biblioteca padrão de gabarito – (Standard Template Library). Este exemplo foi retirado &lt;a href="http://www.research.att.com/~bs/C++0xFAQ.html#init-list"&gt;daqui.&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: cpp;"&gt;&lt;br /&gt;template&lt; class E&gt; class vector {&lt;br /&gt;public:&lt;br /&gt;    vector (std::initializer_list&lt;E&gt; s) // novo construtor da lista de inicialização&lt;br /&gt;    {&lt;br /&gt;        // reserva o espaço de memoria apropriado&lt;br /&gt;        reserve(s.size()); &lt;br /&gt;&lt;br /&gt;        // inicializa elementos com o da lista de inicializacao&lt;br /&gt;        uninitialized_copy(s.begin(), s.end(), elem); &lt;br /&gt;&lt;br /&gt;        // seta o tamanho do vector&lt;br /&gt;        sz = s.size(); &lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;  // ...... ...&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Observe que não existe almoço grátis. O programador deve implementar o suporte para a lista de inicialização para todas as suas classes.&lt;br /&gt;&lt;br /&gt;Por hoje é isso. Em breve posto outra feature do C++ 0x.&lt;br /&gt;&lt;br /&gt;[]'s&lt;br /&gt;Leonardo X. T. Cardoso&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-7253921583292539646?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/7253921583292539646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/7253921583292539646'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/06/lista-de-inicializacao-no-c-0x.html' title='Lista de inicialização no C++ 0x'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-8579983210253806372</id><published>2009-05-31T21:06:00.000-07:00</published><updated>2009-05-31T21:17:58.679-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++ 0x programação'/><title type='text'>Funções e expressões Lambda no C++ 0x - Parte 2</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Todas as funções lambdas apresentadas no post anterior não possuiam membro de dados. A utilização de membro de dados pode ser feita por meio da captura de variáveis locais que é realizada pelo introdutor lambda ([]). Neste introdutor é possível especificar uma lista de captura (capture-list) como demonstrado no Código 1.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 102, 255);"&gt;Código 1 &lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: cpp;"&gt;&lt;br /&gt;int main() &lt;br /&gt;{&lt;br /&gt;    vector&lt;int&gt; v;&lt;br /&gt;&lt;br /&gt;    for (int i = 0; i &lt; 10; ++i)&lt;br /&gt;        v.push_back(i);&lt;br /&gt;    &lt;br /&gt;    int x = 0;&lt;br /&gt;    int y = 0;&lt;br /&gt;&lt;br /&gt;    cout &lt;&lt; "Input: ";&lt;br /&gt;    cin &gt;&gt; x &gt;&gt; y;&lt;br /&gt;&lt;br /&gt;    v.erase(remove_if(v.begin(), v.end(), [x, y](int n) { return x &lt; n &amp;&amp; n &lt; y; }), v.end());&lt;br /&gt;&lt;br /&gt;    for_each(v.begin(), v.end(), [](int n) { cout &lt;&lt; n &lt;&lt; " "; });&lt;br /&gt;&lt;br /&gt;    cout &lt;&lt; endl;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Um exemplo da execução do programa do Código 1 seria&lt;br /&gt;Input: 4 7&lt;br /&gt;0 1 2 3 4 7 8 9&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;É importante salientar que apesar do corpo da função lambda estar lexicamente no escopo de main() , ela esta conceitualmente fora do escopo de main(). Sendo assim, não é possível usar variáveis locais declaradas em main() sem “captura-las”.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Todas as capturas são feitas por valor e apenas cópias das variáveis são armazenadas na função. Isso implica em algumas conseqüências importantes: (a) não é possível modificar as cópias capturadas, pois por default a chamada da função objeto é const, (b) atualizações nas variáveis locais não serão refletidas nas cópias capturadas. Mais a frente neste post irei explicar como capturar variáveis por referência.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Ao invés de informar todas as variáveis que deseja capturar, é possível especificar a captura de todas as variáveis locais. A syntax para isso é o introdutor lambda [=]. Usando o exemplo do código 1, bastaria substituir a linha 14 para:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class="brush: cpp;"&gt;&lt;br /&gt;v.erase(remove_if(v.begin(), v.end(), [=](int n) { return x &lt; n &amp;&amp; n &lt; y; }), v.end());&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Usando este recurso, o compilador irá fazer a captura por valor de todas as variáveis de main() (no exemplo x e y)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Caso seja necessário modificar as variáveis capturadas, pode-se modificar a chamada da função lambda de const para non-const. Para isso deve-se usar o já conhecido modificador mutable. O Código 2 mostra um exemplo deste recurso.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 102, 255);"&gt;Código 2&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: cpp;"&gt;&lt;br /&gt;int main() &lt;br /&gt;{&lt;br /&gt;    vector&lt;int&gt; v;&lt;br /&gt;&lt;br /&gt;    for (int i = 0; i &lt; 10; ++i)&lt;br /&gt;        v.push_back(i);&lt;br /&gt;&lt;br /&gt;    int x = 1;&lt;br /&gt;    int y = 1;&lt;br /&gt;&lt;br /&gt;    for_each(v.begin(), v.end(), [=](int&amp; r) mutable {&lt;br /&gt;        const int old = r;&lt;br /&gt;        r *= x * y;&lt;br /&gt;        x = y;&lt;br /&gt;        y = old;&lt;br /&gt;&lt;br /&gt;    });&lt;br /&gt;&lt;br /&gt;    for_each(v.begin(), v.end(), [](int n) { cout &lt;&lt; n &lt;&lt; " "; });&lt;br /&gt;&lt;br /&gt;    cout &lt;&lt; endl;&lt;br /&gt;    cout &lt;&lt; x &lt;&lt; ", " &lt;&lt; y &lt;&lt; endl;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;O exemplo mostrado no Código 2 multiplica cada elemento de v com os 2 elementos anteriores.&lt;br /&gt;Sua execução mostraria&lt;br /&gt;0 0 0 6 24 60 120 210 336 504&lt;br /&gt;1, 1&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;É importante ressaltar que modificações nas variáveis capturadas não são refletidas nas variáveis locais. Caso seja necessário refletir as modificações das variáveis capturadas sobre suas correspondentes locais, isso é alcançado por meio da captura por referência. A syntax para a captura por referência é o introdutor lambda [&amp;x, &amp;y, &amp;z]. A declaração anterior deve ser lida como referência para x, y e z e não endereço de x, y e z. O Código 3 mostra o Código 2 modificado para usar  variáveis capturadas por referência.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 102, 255);"&gt;Código 3&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: cpp;"&gt;&lt;br /&gt;int main() {&lt;br /&gt;&lt;br /&gt;    vector&lt;int&gt; v;&lt;br /&gt;&lt;br /&gt;    for (int i = 0; i &lt; 10; ++i)&lt;br /&gt;     v.push_back(i);&lt;br /&gt;&lt;br /&gt;    int x = 1;&lt;br /&gt;    int y = 1;&lt;br /&gt;&lt;br /&gt;    for_each(v.begin(), v.end(), [&amp;x, &amp;y](int&amp; r) {&lt;br /&gt;        const int old = r;&lt;br /&gt;        r *= x * y;&lt;br /&gt;        x = y;&lt;br /&gt;        y = old;&lt;br /&gt;    });&lt;br /&gt;&lt;br /&gt;    for_each(v.begin(), v.end(), [](int n) { cout &lt;&lt; n &lt;&lt; " "; });&lt;br /&gt;&lt;br /&gt;    cout &lt;&lt; endl;&lt;br /&gt;    cout &lt;&lt; x &lt;&lt; ", " &lt;&lt; y &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;O exemplo mostrado no Código 3 multiplica cada elemento de v com os 2 elementos anteriores.&lt;br /&gt;A execução do Código 3 mostraria&lt;br /&gt;0 0 0 6 24 60 120 210 336 504&lt;br /&gt;8, 9&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Observe as diferenças do Código 3 com o Código 2: (i) O introdutor lambda [&amp;x, &amp;y], (ii) a retirada do modificador mutable e (iii) as variáveis locais tendo valores 8 e 9 ao final da execução, refletindo as modificações dentro da função lambda. Também é possível capturar todas as variáveis locais por referência. usando o introdutor lambda [&amp;]&lt;br /&gt;&lt;br /&gt;Finaliza aqui o papo sobre funções lambdas. Acho que para um post introdutório o que já foi dito ate aqui é suficiente. Tem muito mais coisas interessantes sobre funções lambdas que não abordei aqui. Para um estudo mais extensivo sobre esta funcionalidade recomendo a leitura da última versão da especificação que pode ser encontrado &lt;a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2857.pdf"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Irei continuar postando sobre o C++ 0x. Percebi que a quantidade de material na língua portuguesa é mínima e irei tentar dar minha contribuição. &lt;br /&gt;&lt;br /&gt;[]’s&lt;br /&gt;&lt;br /&gt;Leonardo X. T. Cardoso&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-8579983210253806372?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/8579983210253806372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/8579983210253806372'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/05/funcoes-e-expressoes-lambda-no-c-0x_31.html' title='Funções e expressões Lambda no C++ 0x - Parte 2'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-7704328255338978459</id><published>2009-05-27T18:18:00.001-07:00</published><updated>2009-05-31T21:17:13.549-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++ 0x programação'/><title type='text'>Funções e expressões Lambda no C++ 0x</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Um dos recursos mais importantes do próximo padrão C++ que ainda esta em desenvolvimento é a chamada função lambda.Expressões lambdas definem e constroem implicitamente funções objetos sem nome que na prática se comportam como as já conhecidas funções objetos. Como um trecho de código vale mais do que mil palavras, no Código 1 abaixo pode-se ver a utilização básica de uma função lambda.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 102, 255);"&gt;Código 1&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: cpp;"&gt;&lt;br /&gt;int main() &lt;br /&gt;{&lt;br /&gt;    vector&lt;int&gt; v;&lt;br /&gt;    &lt;br /&gt;    for (int i = 0; i &lt; 10; ++i)&lt;br /&gt;        v.push_back(i);&lt;br /&gt;   &lt;br /&gt;    for_each(v.begin(), v.end(), [](int n) { cout &lt;&lt; n &lt;&lt; " "; });&lt;br /&gt;    &lt;br /&gt;    cout &lt;&lt; endl;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;O [] é chamado introdutor lambda (lambda-introducer) e informa o início de uma função lambda. A declaração do parâmetro lambda é representado por int n e o corpo da função lambda é { cout &lt;&lt; n &lt;&lt; “  “;. Por default uma função lambda retorna void. Segue abaixo no Código 2 como seria este mesmo código escrito no padrão atual do C++ usando o tradicional funtor.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 102, 255);"&gt;Código 2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: cpp;"&gt;&lt;br /&gt;struct Functor {&lt;br /&gt;     void operator()(int n) const&lt;br /&gt;     {&lt;br /&gt;         cout &lt;&lt; n &lt;&lt; " ";&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;int main() &lt;br /&gt;{&lt;br /&gt;    vector&lt;int&gt; v;&lt;br /&gt;    for (int i = 0; i &lt; 10; ++i)&lt;br /&gt;        v.push_back(i);&lt;br /&gt;    &lt;br /&gt;    for_each(v.begin(), v.end(), Functor());&lt;br /&gt;    &lt;br /&gt;    cout &lt;&lt; endl;&lt;br /&gt;} &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Alguns de vocês já devem estar se perguntando se é permitido colocar vários comandos dentro de uma função lambda. A resposta é sim e um exemplo é mostrado no Código 3:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 102, 255);"&gt;Código 3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: cpp;"&gt;&lt;br /&gt;int main() &lt;br /&gt;{&lt;br /&gt;    vector&lt;int&gt; v;&lt;br /&gt;&lt;br /&gt;    for (int i = 0; i &lt; 10; ++i)&lt;br /&gt;        v.push_back(i);&lt;br /&gt;    &lt;br /&gt;    for_each(v.begin(), v.end(), [](int n) {&lt;br /&gt;        cout &lt;&lt; n;&lt;br /&gt;        if (n % 2 == 0)&lt;br /&gt;            cout &lt;&lt; " even ";&lt;br /&gt;        else&lt;br /&gt;            cout &lt;&lt; " odd ";&lt;br /&gt;    });&lt;br /&gt;        &lt;br /&gt;    cout &lt;&lt; endl;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Ao avaliar o Código 3 você já pode estar imaginando a “macarronada” que um programador pode fazer no código ao usar expressões lambda. Se já era fácil fazer códigos ilegíveis agora ficará ainda mais simples. Acredito que em breve vão lançar o Obfuscated C++ 0x Code Contest. Pode ser que criem coisas mais assustadoras do que o já conhecido International Obfuscated C Code Contest (http://www.ioccc.org/).&lt;br /&gt;&lt;br /&gt;Antes que você me pergunte, expressões lambdas podem retornar qualquer tipo de dados. Se o corpo de sua função é do tipo { return expr; }, o tipo de retorno será automaticamente deduzido para o tipo de expr.  No Código 4 é mostrado um exemplo:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 102, 255);"&gt;Código 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: c;"&gt;&lt;br /&gt;int main() &lt;br /&gt;{&lt;br /&gt;    vector&lt;int&gt; v; &lt;br /&gt;    &lt;br /&gt;    for (int i = 0; i &lt; 10; ++i)&lt;br /&gt;        v.push_back(i);&lt;br /&gt;    &lt;br /&gt;    deque&lt;int&gt; d;&lt;br /&gt;&lt;br /&gt;    transform(v.begin(), v.end(), front_inserter(d), [](int n) { return n * n * n; });&lt;br /&gt;    &lt;br /&gt;    for_each(d.begin(), d.end(), [](int n) { cout &lt;&lt; n &lt;&lt; " "; });&lt;br /&gt;&lt;br /&gt;    cout &lt;&lt; endl;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;No Código 4 o tipo de n*n*n é int e por isso a função lambda retorna int. Lambdas com expressões mais complexas não são capazes de deduzir o tipo de retorno e por isso o programador deve informar explicitamente. O Código 5 ilustra como isso é feito:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 102, 255);"&gt;Código 5&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: c;"&gt;&lt;br /&gt;int main() &lt;br /&gt;{&lt;br /&gt;    vector&lt;int&gt; v;&lt;br /&gt;&lt;br /&gt;    for (int i = 0; i &lt; 10; ++i)&lt;br /&gt;        v.push_back(i);&lt;br /&gt;    &lt;br /&gt;    deque&lt;double&gt; d;&lt;br /&gt;&lt;br /&gt;    transform(v.begin(), v.end(), front_inserter(d), [](int n) -&gt; double {&lt;br /&gt;        if (n % 2 == 0)&lt;br /&gt;            return n * n * n;&lt;br /&gt;        else&lt;br /&gt;            return n / 2.0;&lt;br /&gt;    });&lt;br /&gt;&lt;br /&gt;    for_each(d.begin(), d.end(), [](double x) { cout &lt;&lt; x &lt;&lt; " "; });&lt;br /&gt;&lt;br /&gt;    cout &lt;&lt; endl;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;O trecho “&gt;- double” é a cláusula opcional de tipo de retorno lambda. O motivo da cláusula não ficar mais a esquerda como acontece com todos os tipos de funções C é que [ ] deve ficar antes para informar ao compilador o  início da função lambda. Se o programador não escrever a clausula de tipo de retorno, o compilador provavelmente vai gerar um warning para cada return.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Hoje termino a primeira parte do estudo de expressões lambda. No próximo post irei mostrar expressões lambdas que contem membros de dados.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 102, 255);"&gt;Referência&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;O &lt;a href="http://blogs.msdn.com/vcblog/archive/2008/10/28/lambdas-auto-and-static-assert-c-0x-features-in-vc10-part-1.aspx"&gt;artigo original&lt;/a&gt; fonte de inspiração deste post e origem dos código de exemplo pertence ao &lt;a href="http://blogs.msdn.com/vcblog/default.aspx"&gt;blog do Visual C++&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;[]’s&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Leonardo X. T. Cardoso&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-7704328255338978459?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/7704328255338978459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/7704328255338978459'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/05/funcoes-e-expressoes-lambda-no-c-0x_27.html' title='Funções e expressões Lambda no C++ 0x'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-621282617542582134</id><published>2009-05-26T17:35:00.000-07:00</published><updated>2009-05-26T17:54:25.092-07:00</updated><title type='text'>Placa "Live Free or Die" UNIX completa 20 anos</title><content type='html'>Quem do mundo Unix nunca viu a famosa placa Live Free or Die UNIX em canto pela internet ? Se você nunca viu, segue uma das versões abaixo.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://luth.obspm.fr/%7Eluthier/Martin-Garcia/computing/images/smallplate.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 297px; height: 159px;" src="http://luth.obspm.fr/%7Eluthier/Martin-Garcia/computing/images/smallplate.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Pois bem, esta placa completou 20 anos em 2009 e foi criada pelo não menos famoso&lt;a href="http://pt.wikipedia.org/wiki/Jon_Hall"&gt; John “Maddog” Hall&lt;/a&gt;. &lt;a href="http://www.nashuatelegraph.com/apps/pbcs.dll/article?AID=/20090517/STYLE/305179976"&gt;Alguns dizem&lt;/a&gt; que esta é a placa de carro mais celebrada do estado americano de New Hampshire. Pelo menos no mundo nerd eu não duvido. :)&lt;br /&gt;&lt;br /&gt;Segue abaixo uma foto do Maddog ao lado de seu Jeep Wrangler e a placa original.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_0H3slx8sKMo/ShyO-4h4pMI/AAAAAAAAApQ/SnhvF2vMEwU/s1600-h/bilde.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 267px;" src="http://2.bp.blogspot.com/_0H3slx8sKMo/ShyO-4h4pMI/AAAAAAAAApQ/SnhvF2vMEwU/s400/bilde.jpg" alt="" id="BLOGGER_PHOTO_ID_5340300469132108994" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PS: New Hampshire é um dos poucos estados americanos onde não é cobrado tax. Parece que ele também gosta de fazer suas compras livre de tax. ☺&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[]'s&lt;br /&gt;&lt;br /&gt;Leonardo X. T. Cardoso&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-621282617542582134?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/621282617542582134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/621282617542582134'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/05/placa-live-free-or-die-unix-completa-20.html' title='Placa &quot;Live Free or Die&quot; UNIX completa 20 anos'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_0H3slx8sKMo/ShyO-4h4pMI/AAAAAAAAApQ/SnhvF2vMEwU/s72-c/bilde.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-5815686655026870359</id><published>2009-05-26T17:12:00.000-07:00</published><updated>2009-05-26T17:28:38.001-07:00</updated><title type='text'>Sun Microsystems anuncia maior App Store do Mundo</title><content type='html'>&lt;a href="http://blogs.sun.com/jonathan/entry/will_java_be_the_world"&gt;De acordo com o CEO&lt;/a&gt; da Sun Jonathan Schwarts, a próxima tacada da Sun será a construção de uma App Store que será a maior do mundo deixando a App Store da Apple no chinelo. Esta App Store venderá aplicativos Java com o foco em usuários domésticos. A meta é que o número de usuários ultrapasse 1 bilhão.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt; Os desenvolvedores vão submeter seus aplicativos no website da App Store e a Sun vai avaliar o conteúdo e segurança antes que seja apresentado ao público. Os ganhos da Sun serão provenientes das taxas de distribuição que serão cobradas de cada aplicativo vendido. Funcionamento parecido com o da App Store da Apple.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;O potencial de mercado da Sun é enorme e leva em conta os &lt;a href="http://www.java.com/en/about/"&gt;4.5 bilhões&lt;/a&gt; de computadores, telefones celulares e outros dispositivos que tem suporte Java. Comparando com a App Store da Apple, esta já teve cerca de 1 bilhão de downloads sendo que existem “apenas” cerca de 21 milhões de Iphones em utilização.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Levando em conta estes números, pode ser que a App Store da Sun realmente deixe a da Apple no chinelo em termos de número de usuários e faturamento. Mas isso não será simples e precisará da utilização em massa do serviço pelos usuários de computadores domésticos e smartphones.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Minha opinião é que a Sun pode se dar muito bem se conseguirem construir um bom serviço para downloads de aplicativos para celulares. Lembrando que isso não vai ser fácil dada a variedade de marcas e modelos de aparelhos disponíveis no mercado. Quem já tentou instalar aplicativos escritos em J2ME no celular já percebeu que a idéia de “write once, run anyhwere” não se aplica muito bem. Para usuários de PC eu já acho que o serviço não deve fazer muito sucesso.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;E você, o que acha ?&lt;br /&gt;&lt;br /&gt;[]’s&lt;br /&gt;&lt;br /&gt;Leonardo X. T. Cardoso&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-5815686655026870359?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/5815686655026870359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/5815686655026870359'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/05/sun-microsystems-anucia-maior-app-store.html' title='Sun Microsystems anuncia maior App Store do Mundo'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-8614899351709621064</id><published>2009-05-26T11:22:00.000-07:00</published><updated>2009-05-26T11:53:07.778-07:00</updated><title type='text'>Dados sobre o faturamento anual do Firefox</title><content type='html'>Sempre me perguntei como a fundação Mozilla que é a responsável pelo desenvolvimento do navegador Firefox se mantinha ativa. Como ela ganhava dinheiro para suportar o desenvolvimento do Firefox ? Apesar de muita coisa ser feita de graça por programadores ao redor do mundo, ela possui alguns funcionários e muitos custos fixos de infraestrutura.&lt;br /&gt;Como pagam isso ?&lt;br /&gt;&lt;br /&gt;Hoje encontrei um &lt;a href="http://www.techcrunch.com/2008/08/28/mozilla-extends-lucrative-deal-with-google-for-3-years/"&gt;post&lt;/a&gt; que esclareceu parte de minhas dúvidas.&lt;br /&gt;&lt;br /&gt;Cerca de 85% do faturamento da fundação Mozilla vem de apenas um acordo feito com o Google  que garante a bagatela de aproximadamente 57 milhões de doláres anuais.&lt;br /&gt;&lt;br /&gt;Para receber este dinheiro basta que a Mozilla mantenha o Google como site de busca default no Firefox. Este acordo vai ate 2011.&lt;br /&gt;&lt;br /&gt;Segundo o CEO da Mozilla John Lilly, este dinheiro é usado para pagar funcionários (&lt;a href="http://www.mozilla.org/foundation/about.html"&gt;que são poucos&lt;/a&gt;), despesas de hardware/internet, e para distribuição de prêmios.&lt;br /&gt;&lt;br /&gt;Mas e ai ? 57 milhões para cobrir os custos não é muita coisa ?&lt;br /&gt;Clicando neste &lt;a href="http://www.mozilla.org/foundation/about.html"&gt;link&lt;/a&gt; podemos ver que a quantidade de funcionários é mínima.&lt;br /&gt;Não estou dizendo que alguem esta ficando rico com o navegador, mas tenho curiosidade em saber mais detalhes sobre a contabilidade da fundação.&lt;br /&gt;&lt;br /&gt;Alguem ai tem alguma referência ?&lt;br /&gt;&lt;br /&gt;[]'s&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-8614899351709621064?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/8614899351709621064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/8614899351709621064'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/05/dados-sobre-o-faturamento-anual-do.html' title='Dados sobre o faturamento anual do Firefox'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-1850549572914237436</id><published>2009-05-25T19:53:00.000-07:00</published><updated>2009-05-25T20:05:43.736-07:00</updated><title type='text'>Workarounds mais ridiculos para bugs em programas</title><content type='html'>Ontem o &lt;a href="http://slashdot.org/"&gt;slashdot&lt;/a&gt; iniciou uma discussão bem interessante sobre os workarounds mais ridículos propostos para a solução temporária de algum bug.&lt;br /&gt;&lt;br /&gt;Dois deles são inacreditáveis:&lt;br /&gt;&lt;br /&gt;1.    &lt;a href="http://support.microsoft.com/kb/168702"&gt;Certa vez &lt;/a&gt;a Microsoft instruiu seus usuários a mexer continuamente o mouse por vários minutos para que pudessem visualizar os dados provenientes do Oracle no Excel.&lt;br /&gt;&lt;br /&gt;2.    Recentemente a HP recebeu diversas reclamações de clientes informando que o Office 2007 não era estável em computadores com impressoras HP instaladas. A &lt;a href="http://h30434.www3.hp.com/psg/board/message?board.id=Install&amp;amp;thread.id=193&amp;amp;view=by_date_ascending&amp;amp;page=1"&gt;solução proposta&lt;/a&gt; pela HP a seus clientes foi não deixar impressoras HP como a impressora default do sistema. Isso faria com que o Office 2007 funcionasse sem maiores problemas.&lt;br /&gt;&lt;br /&gt;E você ? Conhece algum ?&lt;br /&gt;&lt;br /&gt;[]'s&lt;br /&gt;&lt;br /&gt;Leonardo X. T. Cardoso&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-1850549572914237436?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/1850549572914237436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/1850549572914237436'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/05/workarounds-mais-ridiculos-para-bugs-em.html' title='Workarounds mais ridiculos para bugs em programas'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-5484792341057588946</id><published>2009-05-25T19:46:00.000-07:00</published><updated>2009-05-25T19:50:37.073-07:00</updated><title type='text'>Microsoft vai banir o uso da função memcpy</title><content type='html'>Ainda este ano, a Microsoft irá adicionar as funções memcpy(), CopyMemory(), e RtlCopyMemory() à lista de funções banidas de seu &lt;a href="http://www.microsoft.com/brasil/security/guidance/topics/lifecicle/sdl.mspx"&gt;Ciclo de Desenvolvimento Seguro - SDL&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Desenvolvedores que pretendem estar de acordo com as regras do SDL deverão substituir as chamadas de memcpy() para memcpy_s(), que recebe um parâmetro adicional informando o tamanho do buffer para onde os dados serão copiados.&lt;br /&gt;Isso já acontece com outras funções como strcat() e strcpy() que já possuem suas versões seguras strcat_s() e strcpy_s().&lt;br /&gt;&lt;br /&gt;[]'s&lt;br /&gt;&lt;br /&gt;Leonardo X. T. Cardoso&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-5484792341057588946?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/5484792341057588946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/5484792341057588946'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/05/microsoft-prestes-banir-o-uso-da-funcao.html' title='Microsoft vai banir o uso da função memcpy'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-327456219424864359</id><published>2009-05-25T07:25:00.001-07:00</published><updated>2009-05-25T19:01:17.983-07:00</updated><title type='text'>Implementação da função gettimeofday para Windows</title><content type='html'>Qualquer programador que algum dia teve ou terá que portar código de algum programa Unix para Windows irá se deparar com diversos trechos de código que dependem da função &lt;a href="http://www.opengroup.org/onlinepubs/000095399/functions/gettimeofday.html"&gt;gettimeofday&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;De acordo com o padrão Posix, &lt;a href="http://www.opengroup.org/onlinepubs/000095399/functions/gettimeofday.html"&gt;gettimeofday&lt;/a&gt; retorna  a hora atual em segundos e microsegundos desde &lt;a href="http://en.wikipedia.org/wiki/Unix_time"&gt;Epoch&lt;/a&gt;, armazenando-a na estrutura timeval apontada por tv. Ela sempre retorna 0 e nenhum valor deve ser reservado para indicar erro. (Porque diabos o retorno não é void ?)&lt;br /&gt;&lt;br /&gt;Segue abaixo uma implementação para windows originalmente escrita pelo pessoal do &lt;a href="http://www.openasthra.com/about/"&gt;OpenAsthra&lt;/a&gt; e cujo post original pode ser encontrado &lt;a href="http://www.openasthra.com/c-tidbits/gettimeofday-function-for-windows/"&gt;aqui&lt;/a&gt;.&lt;br /&gt;Apenas a estrutura timezone é definida pois as outras já estão presentes em time.h.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: c;"&gt;&lt;br /&gt;#include &lt;time.h&gt;&lt;br /&gt;&lt;br /&gt;#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS)&lt;br /&gt; #define DELTA_EPOCH_IN_MICROSECS  11644473600000000Ui64&lt;br /&gt;#else&lt;br /&gt; #define DELTA_EPOCH_IN_MICROSECS  11644473600000000ULL&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;struct timezone&lt;br /&gt;{&lt;br /&gt; int  tz_minuteswest; /* minutes W of Greenwich */&lt;br /&gt; int  tz_dsttime;     /* type of dst correction */&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;int gettimeofday(struct timeval *tv, struct timezone *tz)&lt;br /&gt;{&lt;br /&gt; FILETIME ft;&lt;br /&gt; unsigned __int64 tmpres = 0;&lt;br /&gt; static int tzflag;&lt;br /&gt;&lt;br /&gt; if (NULL != tv)&lt;br /&gt; {&lt;br /&gt;   GetSystemTimeAsFileTime(&amp;amp;ft);&lt;br /&gt;&lt;br /&gt;   tmpres |= ft.dwHighDateTime;&lt;br /&gt;   tmpres &lt;&lt;= 32;              &lt;br /&gt;   tmpres |= ft.dwLowDateTime;       &lt;br /&gt;&lt;br /&gt;   /*converting file time to unix epoch*/            &lt;br /&gt;   tmpres /= 10;  /*convert into microseconds*/              &lt;br /&gt;   tmpres -= DELTA_EPOCH_IN_MICROSECS;               &lt;br /&gt;   tv-&gt;tv_sec = (long)(tmpres / 1000000UL);&lt;br /&gt;   tv-&gt;tv_usec = (long)(tmpres % 1000000UL);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; if (NULL != tz)&lt;br /&gt; {&lt;br /&gt;   if (!tzflag)&lt;br /&gt;   {&lt;br /&gt;     _tzset();&lt;br /&gt;     tzflag++;&lt;br /&gt;   }&lt;br /&gt;   tz-&gt;tz_minuteswest = _timezone / 60;&lt;br /&gt;   tz-&gt;tz_dsttime = _daylight;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;Para utilizar basta escrever:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: c;"&gt;&lt;br /&gt;&lt;br /&gt;struct timeval now;&lt;br /&gt;struct timezone tzone;&lt;br /&gt;&lt;br /&gt;gettimeofday(&amp;amp;now, NULL);&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;[]'s&lt;br /&gt;&lt;br /&gt;Leonardo X. T. Cardoso&lt;br /&gt;&lt;br /&gt;Palavras-chave: gettimeofday windows&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-327456219424864359?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/327456219424864359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/327456219424864359'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/05/function-test-string-return-10.html' title='Implementação da função gettimeofday para Windows'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-6715750994891304283</id><published>2009-05-14T19:46:00.000-07:00</published><updated>2009-05-14T19:59:56.744-07:00</updated><title type='text'>Comando equivalente ao top no Solaris</title><content type='html'>Quem esta iniciando agora no Solaris ja deve ter percebido que não existe o comando &lt;a href="http://linux.about.com/od/commands/l/blcmdl1_top.htm"&gt;top&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Você precisa baixar, compilar e instalar o top a partir do projeto &lt;a href="http://procps.sourceforge.net/index.html"&gt;procps&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Mas o Solaris tem um comando equivalente ao top que é o &lt;a href="http://docsun.cites.uiuc.edu/sun_docs/C/solaris_9/SUNWaman/hman1m/prstat.1m.html"&gt;prstat&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Ele possui uma saida similar ao top e pode ser vista na figura abaixo:&lt;br /&gt;&lt;br /&gt;                                                  &lt;clique&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_0H3slx8sKMo/SgzZ4RxxUWI/AAAAAAAAAok/yMr2dbm_p44/s1600-h/Picture+5.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 199px;" src="http://1.bp.blogspot.com/_0H3slx8sKMo/SgzZ4RxxUWI/AAAAAAAAAok/yMr2dbm_p44/s400/Picture+5.png" alt="" id="BLOGGER_PHOTO_ID_5335879219395252578" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;O prstat possui diversas flags interessantes que serão assunto de outro post.&lt;br /&gt;&lt;br /&gt;[]'s&lt;br /&gt;&lt;br /&gt;Leonardo X. T. Cardoso&lt;br /&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;&lt;br /&gt;palavras chaves: top solaris prstat linux&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-6715750994891304283?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/6715750994891304283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/6715750994891304283'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/05/comando-equivalente-ao-top-no-solaris.html' title='Comando equivalente ao top no Solaris'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_0H3slx8sKMo/SgzZ4RxxUWI/AAAAAAAAAok/yMr2dbm_p44/s72-c/Picture+5.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-6868417191119288085</id><published>2009-05-14T19:36:00.000-07:00</published><updated>2009-05-14T19:39:51.973-07:00</updated><title type='text'>Como habilitar acesso remoto do root com o SSH no Solaris 10</title><content type='html'>Edite o arquivo&lt;br /&gt;&lt;br /&gt;/etc/ssh/sshd_config&lt;br /&gt;&lt;br /&gt;Localize a linha&lt;br /&gt;&lt;span style="font-style: italic;"&gt;PermitRootLogin no&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Troque para&lt;br /&gt;&lt;span style="font-style: italic;"&gt;PermitRootLogin yes  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Reinicie o sshd.&lt;br /&gt;&lt;br /&gt;Pronto, agora você ja pode acessar a máquina como root.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-6868417191119288085?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/6868417191119288085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/6868417191119288085'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/05/como-habilitar-acesso-remoto-do-root.html' title='Como habilitar acesso remoto do root com o SSH no Solaris 10'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-8493406634467406640</id><published>2009-05-14T10:03:00.000-07:00</published><updated>2009-05-14T10:13:56.827-07:00</updated><title type='text'>Sparc Sun Blade 100 rodando Solaris 10</title><content type='html'>Finalmente consegui mexer um pouco com a Blade 100 e instalei o Solaris 10.&lt;br /&gt;&lt;br /&gt;Comprei a máquina sem Disco Rígido e fui obrigado a comprar um novo.&lt;br /&gt;&lt;br /&gt;Sorte que foram fabricadas para usar componentes de prateleira.&lt;br /&gt;&lt;br /&gt;Bastou comprar um Disco IDE e instalar na máquina.&lt;br /&gt;&lt;br /&gt;Agora com ela funcionando poderei postar algumas dicas.&lt;br /&gt;&lt;br /&gt;Abaixo uma foto que tirei após instalação e inicialização do Solaris 10.&lt;br /&gt;&lt;br /&gt;Na outra estação irei instalar Solaris 8 apenas desenvolvimento.&lt;br /&gt;Diversos clientes ainda usam Solaris 8 e 9 e programas "linkados" no Solaris 10 não rodam&lt;br /&gt;nestas plataformas.&lt;br /&gt;Outro dia posto mais detalhes sobre isso.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.leoxtc.com/pics/blade100.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 800px; height: 600px;" src="http://www.leoxtc.com/pics/blade100.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[]'s&lt;br /&gt;&lt;br /&gt;Leonardo&lt;br /&gt;&lt;br /&gt;palavras chaves: solaris blade 100&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-8493406634467406640?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/8493406634467406640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/8493406634467406640'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/05/sparc-sun-blade-100-rodando-solaris-10.html' title='Sparc Sun Blade 100 rodando Solaris 10'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-4732189462095621289</id><published>2009-05-13T11:52:00.000-07:00</published><updated>2009-05-13T11:58:10.572-07:00</updated><title type='text'>Brincando com uma Itanium 2 de 12 cores.</title><content type='html'>Segue meu brinquedinho atual na empresa.&lt;br /&gt;&lt;br /&gt;A saida real tem outras 11 saidas de processador iguais a esta. Cortei para economizar espaço.&lt;br /&gt;&lt;br /&gt;processor  : 0&lt;br /&gt;vendor     : GenuineIntel&lt;br /&gt;arch       : IA-64&lt;br /&gt;family     : &lt;span class="il"&gt;Itanium&lt;/span&gt; 2&lt;br /&gt;model      : 0&lt;br /&gt;revision   : 4&lt;br /&gt;archrev    : 0&lt;br /&gt;features   : branchlong, 16-byte atomic ops&lt;br /&gt;cpu number : 0&lt;br /&gt;cpu regs   : 4&lt;br /&gt;cpu MHz    : 1595.676000&lt;br /&gt;itc MHz    : 398.919000&lt;br /&gt;BogoMIPS   : 1581.25&lt;br /&gt;siblings   : 4&lt;br /&gt;physical id: 6147&lt;br /&gt;core id    : 1&lt;br /&gt;thread id  : 0&lt;br /&gt;&lt;br /&gt;MemTotal:     16587760 kB&lt;br /&gt;MemFree:      16077472 kB&lt;br /&gt;Buffers:         45088 kB&lt;br /&gt;Cached:         184016 kB&lt;br /&gt;SwapCached:          0 kB&lt;br /&gt;Active:         207008 kB&lt;br /&gt;Inactive:        46128 kB&lt;br /&gt;HighTotal:           0 kB&lt;br /&gt;HighFree:            0 kB&lt;br /&gt;LowTotal:     16587760 kB&lt;br /&gt;LowFree:      16077472 kB&lt;br /&gt;SwapTotal:     1048544 kB&lt;br /&gt;SwapFree:      1048544 kB&lt;br /&gt;Dirty:             192 kB&lt;br /&gt;Writeback:           0 kB&lt;br /&gt;Mapped:          38480 kB&lt;br /&gt;Slab:            57072 kB&lt;br /&gt;CommitLimit:   9342416 kB&lt;br /&gt;Committed_AS:   171520 kB&lt;br /&gt;PageTables:       2320 kB&lt;br /&gt;VmallocTotal: 137430493184 kB&lt;br /&gt;VmallocUsed:      4992 kB&lt;br /&gt;VmallocChunk: 137430487136 kB&lt;br /&gt;HugePages_Total:     0&lt;br /&gt;HugePages_Free:      0&lt;br /&gt;Hugepagesize:    262144 kB&lt;br /&gt;&lt;br /&gt;Também segue um screenshot dela sendo jugulada pelo gcc.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.leoxtc.com/pics/screen.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 630px; height: 772px;" src="http://www.leoxtc.com/pics/screen.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-4732189462095621289?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/4732189462095621289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/4732189462095621289'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/05/brincando-com-uma-itanium-2-de-12-cores.html' title='Brincando com uma Itanium 2 de 12 cores.'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-7398500571560949157</id><published>2009-05-13T07:31:00.000-07:00</published><updated>2009-05-13T07:36:19.461-07:00</updated><title type='text'>Usando Calculadora no Spotlight - Mac OS X</title><content type='html'>Você sabia que o Spotlight  tem função calculadora ?&lt;br /&gt;&lt;br /&gt;Então..&lt;br /&gt;Basta digitar sua formula no Spotlight que ele faz as contas.&lt;br /&gt;&lt;br /&gt;Veja figura abaixo:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_0H3slx8sKMo/Sgraj8QkjEI/AAAAAAAAAoU/2zEkQBC3IxQ/s1600-h/Picture+4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 340px; height: 119px;" src="http://4.bp.blogspot.com/_0H3slx8sKMo/Sgraj8QkjEI/AAAAAAAAAoU/2zEkQBC3IxQ/s400/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5335317019579681858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;[]'s&lt;br /&gt;&lt;br /&gt;Leonardo Cardoso&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;palavras chaves: macosx mac os x calculadora spotlight&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-7398500571560949157?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/7398500571560949157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/7398500571560949157'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/05/usando-calculadora-no-spotlight-mac-os.html' title='Usando Calculadora no Spotlight - Mac OS X'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_0H3slx8sKMo/Sgraj8QkjEI/AAAAAAAAAoU/2zEkQBC3IxQ/s72-c/Picture+4.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-4063645014789754546</id><published>2009-05-13T07:13:00.000-07:00</published><updated>2009-05-13T07:29:37.916-07:00</updated><title type='text'>Busca instantânea de arquivos no Mac OS X</title><content type='html'>Um comando muito interessante herdado do Linux pelo Mac OS X é o &lt;a href="http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/locate.1.html"&gt;locate&lt;/a&gt;.&lt;br /&gt;Com este comando você pode localizar qualquer arquivo em seu sistema de arquivos de forma instantânea&lt;nome&gt;&lt;nome_do_arquivo&gt;&lt;nome_do_arquivo&gt;&lt;nome&gt;.&lt;br /&gt;&lt;br /&gt;Por exemplo, ao executar em minha máquina para o ifconfig tenho a seguinte saida:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;lcardoso ~ $ locate ifconfig&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;/Developer/Documentation/DocSets/com.apple.ADC_Reference_Library.DeveloperTools.docset/Contents/Resources/Documents/documentation/Darwin/Reference/ManPages/man8/ifconfig.8.html&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;/opt/local/var/macports/sources/rsync.macports.org/release/ports/ruby/rb-ifconfig&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;/opt/local/var/macports/sources/rsync.macports.org/release/ports/ruby/rb-ifconfig/Portfile&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;/sbin/ifconfig&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;/usr/share/man/man8/ifconfig.8.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;/usr/share/zsh/4.3.4/functions/_ifconfig&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ele usa uma base de dados que contém todos os seus arquivos indexados previamente.&lt;br /&gt;No caso do Mac OS X seu sistema de arquivos é indexado semanalmente por meio do script.&lt;br /&gt;/etc/periodic/weekly/310.locate&lt;br /&gt;&lt;br /&gt;Ou seja, no pior caso sua base de dados estará desatualizada em 1 semana.&lt;br /&gt;Mas você pode atualizar a base de dados a qualquer momento executando o script&lt;br /&gt;/usr/libexec/locate.updatedb&lt;br /&gt;&lt;br /&gt;Esta operação pode demorar alguns minutos, por isso tenha paciência.&lt;br /&gt;&lt;br /&gt;Obs: Não faça isso como root pois iria indexar o sistema de arquivos inteiro mostrando todos os arquivos para qualquer usuário.&lt;br /&gt;&lt;br /&gt;[]'s&lt;br /&gt;&lt;br /&gt;Leonardo Cardoso&lt;br /&gt;&lt;br /&gt;palavras chaves: mac os x locate find buscar localizar&lt;/nome&gt;&lt;/nome_do_arquivo&gt;&lt;/nome_do_arquivo&gt;&lt;/nome&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-4063645014789754546?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/4063645014789754546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/4063645014789754546'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/05/busca-instantanea-de-arquivos-no-mac-os.html' title='Busca instantânea de arquivos no Mac OS X'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-8833088615868002065</id><published>2009-05-13T07:00:00.001-07:00</published><updated>2009-05-14T20:11:45.063-07:00</updated><title type='text'>Comando equivalente ao ldd no Mac O SX</title><content type='html'>Na maioria dos sistemas unix nós usamos o comando  &lt;a href="http://linux.die.net/man/1/ldd"&gt;ldd&lt;/a&gt; para saber quais as dependências de determinado programa. No entanto, ele não esta disponível no Mac OS X.&lt;br /&gt;&lt;br /&gt;Outra ferramenta chamata &lt;a href="http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/otool.1.html"&gt;otool&lt;/a&gt; provê funcionalidade similar ao ldd.&lt;br /&gt;&lt;br /&gt;Veja a saida do seguinte comando:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ otool -L ffmpeg&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;ffmpeg:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    /usr/lib/libbz2.1.0.dylib (compatibility version 1.0.0, current version 1.0.4)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.3)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Observe pelo &lt;a href="http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/otool.1.html"&gt;manual&lt;/a&gt; que o flag -L usado para mostrar as dependências é apenas uma das inúmeras funcionalidades do &lt;a href="http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/otool.1.html"&gt;otool&lt;/a&gt;.&lt;br /&gt;Vale a pena dar uma estudada nas outras opções. Quem é desenvolvedor vai precisar delas cedo ou tarde.&lt;br /&gt;&lt;br /&gt;[]'s&lt;br /&gt;&lt;br /&gt;Leonardo Cardoso&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;palavras chaves: macosx max os x ldd otool&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-8833088615868002065?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/8833088615868002065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/8833088615868002065'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/05/comando-ldd-para-macosx.html' title='Comando equivalente ao ldd no Mac O SX'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-7484368093798638525</id><published>2009-05-06T05:41:00.000-07:00</published><updated>2009-05-06T06:04:32.736-07:00</updated><title type='text'>The remote session was disconnected because there are no terminal server client access licenses available for this computer. Please contact the server</title><content type='html'>Ontem, ao tentar acessar um servidor recebi a seguinte mensagem:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_0H3slx8sKMo/SgGGLuvvj9I/AAAAAAAAAoE/idiEQTpjjQg/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 67px;" src="http://1.bp.blogspot.com/_0H3slx8sKMo/SgGGLuvvj9I/AAAAAAAAAoE/idiEQTpjjQg/s400/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5332690969868341202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"The remote session was disconnected because there are no terminal server client access licenses available for this computer. Please contact the server administrator." &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;Em português parece que esta mensagem foi traduzida da seguinte maneira:&lt;br /&gt;&lt;h4 style="font-weight: normal; font-style: italic;" class="subHeading"&gt;"A sessão remota foi desconectada porque não há licenças de acesso de cliente ao Terminal Server disponíveis para este computador. Contate o administrador do servidor."&lt;/h4&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;A Microsoft tem um artigo falando sobre este problema. Clique &lt;a href="http://technet.microsoft.com/en-us/library/cc756826.aspx"&gt;aqui&lt;/a&gt; para visualizar.&lt;/span&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Causa do problema:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;- The license server might not have any remaining Per Device CALs to issue.&lt;br /&gt;&lt;span style="font-size:100%;"&gt;- T&lt;/span&gt;alvez o servidor de licença não tenha mais nenhuma CAL Por Dispositivo para emitir.&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Solução do Problema:&lt;br /&gt;&lt;br /&gt;- &lt;/span&gt;&lt;/span&gt;Use Terminal Server Licensing to determine the number of CALs remaining on the license server. To open Terminal Server Licensing, click &lt;strong&gt;Start&lt;/strong&gt;, &lt;strong&gt;Programs&lt;/strong&gt;, &lt;strong&gt;Administrative Tools&lt;/strong&gt;, and then point to &lt;strong&gt;Terminal Server Licensing&lt;/strong&gt;. If the license server does not have any remaining CALs to issue to clients, purchase and install additional CALs as required.&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;- &lt;/span&gt;&lt;/span&gt;Use o Licenciamento do Terminal Server para determinar o número de CALs restantes no servidor de licença. Para abrir o Licenciamento do Terminal Server, clique em &lt;strong&gt;Iniciar&lt;/strong&gt;, &lt;strong&gt;Programas&lt;/strong&gt;, &lt;strong&gt;Ferramentas Administrativas&lt;/strong&gt; e aponte para &lt;strong&gt;Licenciamento do Terminal Server&lt;/strong&gt;. Se o servidor não tiver mais nenhuma CAL para emitir aos clientes, adquira e instale CALs adicionais, conforme necessário.&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;&lt;br /&gt;Solução Real do Problema:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para a administração do servidor, estas licensas não são necessárias.&lt;br /&gt;&lt;br /&gt;Pode-se executar ate 2 sessões remotas de administração ao mesmo tempo, além da console usando o teclado/mouse. Totalizando ate 3 sessões ao mesmo tempo.&lt;br /&gt;&lt;br /&gt;Sendo assim, para resolver esta questão do licenciamento faça o seguinte na &lt;span style="font-weight: bold;"&gt;estação cliente&lt;/span&gt; usada para conectar ao servidor:&lt;br /&gt;&lt;br /&gt;1.  Fechar o console remoto.&lt;br /&gt;2. Opcionalmente, aconselho a fazer um backup de seu registro.&lt;br /&gt;2. Apagar a seguinte chave de registro:&lt;br /&gt;    HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\MSLICENSING&lt;br /&gt;&lt;br /&gt;Neste momento você ja pode reiniciar a sessão remota com o servidor.&lt;br /&gt;&lt;br /&gt;[]'s&lt;br /&gt;&lt;br /&gt;Leonardo Cardoso&lt;br /&gt;&lt;br /&gt;Referencias:&lt;br /&gt;&lt;br /&gt;http://technet.microsoft.com/pt-br/library/cc756826.aspx&lt;br /&gt;http://technet.microsoft.com/en-us/library/cc756826.aspx&lt;br /&gt;http://www.chat11.com/Remote_Session_Was_Disconnected_Because_There_Are_No_Terminal_Server_Client_Access_Licenses_Available&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-7484368093798638525?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/7484368093798638525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/7484368093798638525'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/05/remote-session-was-disconnected-because.html' title='The remote session was disconnected because there are no terminal server client access licenses available for this computer. Please contact the server'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_0H3slx8sKMo/SgGGLuvvj9I/AAAAAAAAAoE/idiEQTpjjQg/s72-c/Picture+2.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-2357521698116561540</id><published>2009-05-05T13:32:00.000-07:00</published><updated>2009-05-05T14:04:33.157-07:00</updated><title type='text'>Explicando porque EnumProcessModules retorna ERROR_PARTIAL_COPY - 299 em Windows 64 bits</title><content type='html'>Semana passada recebi um chamado sobre um problema em um de nossos produtos.&lt;br /&gt;&lt;br /&gt;Nosso plugin de monitoração de SQL Server não estava funcionando em Windows Server 2003 64 Bits.&lt;br /&gt;&lt;br /&gt;Antes de qualquer coisa, nosso plugin é um programa 32 bits mas executando num ambiente 64 bits usando um mecanismo conhecido como &lt;a href="http://en.wikipedia.org/wiki/WOW64"&gt;WOW64&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Verifiquei no log do sistema que o plugin não estava conseguindo obter o path do processo do banco de dados (sqlserv.exe).&lt;br /&gt;&lt;br /&gt;Para obter o path de um processo usamos a função &lt;a href="http://www.blogger.com/EnumProcessModules"&gt;EnumProcessModules&lt;/a&gt; que estava falhando e retornando o erro &lt;em&gt;ERROR_PARTIAL_COPY &lt;/em&gt;(erro 299).&lt;br /&gt;&lt;br /&gt;Fiz uma breve pesquisa e rapidamente verifiquei que EnumProcessModules não consegue enumerar processos 64 bits a partir de programas 32 bits.&lt;br /&gt;&lt;br /&gt;Uma opção era recompilar tudo em 64 Bits. Mas por agora não pretendemos ter 2 builds do mesmo produto.&lt;br /&gt;&lt;br /&gt;Descobri que não é apenas este função que tem este problema.&lt;br /&gt;&lt;br /&gt;As versões 32 bits das funções&lt;a href="http://msdn.microsoft.com/en-us/library/ms682633%28VS.85%29.aspx"&gt; EnumProcessModulesEx&lt;/a&gt; e &lt;a href="http://msdn.microsoft.com/en-us/library/ms683198.aspx"&gt;GetModuleFileNameEx&lt;/a&gt; sofrem do mesmo problema.&lt;br /&gt;&lt;br /&gt;Quem quiser mais detalhes técnicos basta clicar &lt;a href="http://winprogger.com/?p=26"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Solução&lt;/span&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para windows XP ou superior podemos obter o path de processos 64 bits a partir de programas 32 bits usando a chamada &lt;a href="http://msdn.microsoft.com/en-us/library/ms683217%28VS.85%29.aspx"&gt;GetProcessImageFileName&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;O único problema é que o path retornado tem um formato diferente (/Device/HarddiskVolumeX) do tradicional formato tipo DOS com as letras dos drives no início.&lt;br /&gt;&lt;br /&gt;[]'s&lt;br /&gt;&lt;br /&gt;Leonardo Cardoso&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;palavras chaves google: c c++ windows 64 bits win32&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-2357521698116561540?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/2357521698116561540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/2357521698116561540'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/05/explicando-porque-enumprocessmodules.html' title='Explicando porque EnumProcessModules retorna ERROR_PARTIAL_COPY - 299 em Windows 64 bits'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-8879162612435640379</id><published>2009-05-02T11:59:00.001-07:00</published><updated>2009-05-03T19:32:57.451-07:00</updated><title type='text'>Debian Linux na PA-RISC (HP Visualize C3700)</title><content type='html'>Acabei de terminar a instalação do Debian na PA-RISC.&lt;br /&gt;&lt;br /&gt;Instalação trivial.&lt;br /&gt;&lt;br /&gt;Não muda nada em relação ao PC/i386.&lt;br /&gt;&lt;br /&gt;Basta gravar a imagem no CD, dar o boot e seguir as instruções.&lt;br /&gt;O linux esta rodando perfeitamente com tudo funcionando.&lt;br /&gt;&lt;br /&gt;Segue a saida de alguns comandos&lt;br /&gt;&lt;br /&gt;$ uname -a&lt;br /&gt;Linux linuxpa 2.6.26-2-parisc #1 Fri Mar 27 03:29:17 UTC 2009 parisc GNU/Linux&lt;br /&gt;&lt;br /&gt;$ cat /proc/cpuinfo&lt;br /&gt;processor         : 0&lt;br /&gt;cpu family       : PA-RISC 2.0&lt;br /&gt;cpu                    : PA8700 (PCX-W2)&lt;br /&gt;cpu MHz          : 750.000000&lt;br /&gt;model               : 9000/785/C3700&lt;br /&gt;model name    : Allegro W2&lt;br /&gt;hversion           : 0x00005dc0&lt;br /&gt;sversion            : 0x00000481&lt;br /&gt;I-cache              : 768 KB&lt;br /&gt;D-cache             : 1536 KB (WB, direct mapped)&lt;br /&gt;ITLB entries    : 240&lt;br /&gt;DTLB entries    : 240 - shared with ITLB&lt;br /&gt;BTLB                  : not supported&lt;br /&gt;bogomips           : 1495.04&lt;br /&gt;software id         : 2005739186&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Com isso minha hipótese de hardware ruim esta descartada.&lt;br /&gt;&lt;br /&gt;Preciso conseguir outra versão do HP-UX para instalação.&lt;br /&gt;&lt;br /&gt;Aguarde cenas dos próximos capítulos.&lt;br /&gt;&lt;br /&gt;[]'s&lt;br /&gt;&lt;br /&gt;Leonardo Cardoso&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-8879162612435640379?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/8879162612435640379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/8879162612435640379'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/05/debian-linux-na-pa-risc-hp-visualize.html' title='Debian Linux na PA-RISC (HP Visualize C3700)'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-6721555193404427695</id><published>2009-05-02T11:36:00.000-07:00</published><updated>2009-05-02T11:57:58.748-07:00</updated><title type='text'>Workstation HP Visualize C3700 PA-RISC</title><content type='html'>Aproveitando o feriado resolvi brincar um pouco com a PA-RISC.&lt;br /&gt;&lt;br /&gt;Meu objetivo era instalar o HP-UX e deixar a máquina pronta para futuros trabalhos.&lt;br /&gt;&lt;br /&gt;O problema é que ela veio limpa e precisava conseguir uma cópia do HP-UX para instalação.&lt;br /&gt;&lt;br /&gt;Fiz uma pesquisa e descobri que a HP disponibiliza cópias gratuitas do HP-UX para fins não comerciais.&lt;br /&gt;As versões recentes do HP-UX são enviadas em cd's gratuitos e as versões mais antigas devem ser copiadas pela internet.&lt;br /&gt;&lt;br /&gt;Quem tiver interesse me envie uma mensagem que passo o endereço para requisição junto a HP.&lt;br /&gt;&lt;br /&gt;Pois bem, desde início da semana ja tinha feito o download do HP-UX 11.0 que a HP me disponibilizou e estava esperando um tempo livre para instalação.&lt;br /&gt;&lt;br /&gt;Ontem com o dia livre tentei a instalação do sistema operacional.&lt;br /&gt;&lt;br /&gt;Gravei o primeiro CD no meu MACOSX e ao tentar fazer o BOOT na PA-RISC ela não conseguiu ler o CD. Minha hipótese era de que o drive de CD da PA-RISC é bem antigo e não conseguiu ler o Cd gravado em alta velocidade.&lt;br /&gt;&lt;br /&gt;Peguei outro CD virgem e mandei gravar na velocidade mínima.&lt;br /&gt;Com o CD pronto, liguei a PA-RISC, coloquei o CD no drive e pedi para fazer o BOOT.&lt;br /&gt;Tudo OK, a máquina conseguiu dar o BOOT no CD e iniciar o processo de instalação.&lt;br /&gt;&lt;br /&gt;Mas alguns instantes depois a instalação morreu com um Page Fault no início da instalação.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Interrupt Type 6 ( Instruction Page Fault)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.leoxtc.com/pics/print_hpux_screen.JPG"&gt;Clicando aqui&lt;/a&gt; você pode ver o erro resultante.&lt;br /&gt;&lt;br /&gt;Fiz diversas pesquisas e não encontrei nada a respeito.&lt;br /&gt;&lt;br /&gt;Agora estou imaginando se meu hardware esta com problema ou a versão do HP-UX que peguei tem algum BUG ou não contém os patchs apropriados.&lt;br /&gt;&lt;br /&gt;Para testar a hipótese de hardware danificado irei tentar instalar o Linux para PA-RISC nele amanhã. Se instalar e rodar OK terei que buscar outras versões de HP-UX para testes.&lt;br /&gt;&lt;br /&gt;Leonardo Cardoso&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-6721555193404427695?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/6721555193404427695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/6721555193404427695'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/05/workstation-hp-visualize-c3700-pa-risc.html' title='Workstation HP Visualize C3700 PA-RISC'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-4938832149165183807</id><published>2009-04-20T11:43:00.000-07:00</published><updated>2009-04-20T14:19:31.452-07:00</updated><title type='text'>Novos Brinquedinhos - HP-UX Solaris Itanium 2</title><content type='html'>Chegaram hoje as máquinas que faltavam para completar meu home office.&lt;br /&gt;&lt;br /&gt;Na Figura abaixo podemos ver todas elas:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.leoxtc.com/pics/unix2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 800px; height: 600px;" src="http://www.leoxtc.com/pics/unix2.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Da esquerda para direito temos:&lt;br /&gt;&lt;br /&gt;1 . Wokstation &lt;a href="http://h20000.www2.hp.com/bizsupport/TechSupport/SupportTaskIndex.jsp?lang=en&amp;amp;cc=us&amp;amp;taskId=115&amp;amp;prodTypeId=12454&amp;amp;prodSeriesId=82074"&gt;HP ZX2000&lt;/a&gt; com processador Itanium 2 1.1 GHZ.&lt;br /&gt;  Esta máquina suporta HP-UX, Linux e Windows para IA64.&lt;br /&gt;  Aqui irei fazer dual boot (ou tri-boot, não sei como dizer) com todos&lt;br /&gt;  estes sistemas operacionais.&lt;br /&gt;&lt;br /&gt;2. Workstation &lt;a href="http://h20000.www2.hp.com/bizsupport/TechSupport/Home.jsp?lang=pt&amp;amp;cc=br&amp;amp;prodClassId=-1&amp;amp;prodTypeId=12454&amp;amp;prodSeriesId=75757"&gt;HP c3700&lt;/a&gt; com 2 processadores PA-RISC 550 MHZ.&lt;br /&gt;  Esta máquina suporta HP-UX e Linux. No entanto, só irei rodar HP-UX.&lt;br /&gt;  Isso porque não existe demanda comercial para Linux em PA-RISC.&lt;br /&gt;&lt;br /&gt;3. Workstation &lt;a href="http://sunsolve.sun.com/handbook_pub/validateUser.do?target=Systems/SunBlade100/SunBlade100"&gt;Sun Blade 100&lt;/a&gt; cada uma com 1 processador Sparc 550 MHZ.&lt;br /&gt;   Podemos rodar Solaris e Linux mas o objetivo aqui é executar somente Solaris.&lt;br /&gt;  Tal como o Linux para PA-RISC não tenho demanda para desenvolvimento&lt;br /&gt;  ou customizações em Linux Sparc.&lt;br /&gt;&lt;br /&gt;Infelizmente nesta semana não terei tempo de ligar nenhuma máquina.&lt;br /&gt;Meu tempo é meio curto e é bem possível que apenas irei dedicar tempo quando surgir demanda&lt;br /&gt;para cada uma delas. Afinal, não estou mais na universidade e não tenho disponibilidade para ficar "brincando".&lt;br /&gt;Mas na medida que for colocando para funcionar irei postar mais detalhes de cada máquina.&lt;br /&gt;&lt;br /&gt;[]'s&lt;br /&gt;&lt;br /&gt;Leonardo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-4938832149165183807?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/4938832149165183807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/4938832149165183807'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/04/novos-brinquedinhos-hp-ux-solaris.html' title='Novos Brinquedinhos - HP-UX Solaris Itanium 2'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-2375248796656354365</id><published>2009-04-19T14:32:00.000-07:00</published><updated>2009-04-19T16:43:26.398-07:00</updated><title type='text'>Gerando Imagens ISO do CD/DVD no Mac OS X</title><content type='html'>Neste post irei explicar como gerar uma imagem ISO de seu CD/DVD usando a linha de comando (terminal) no Mac OS X&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Passo 1&lt;/span&gt;: Insira o CD/DVD do qual deseja gerar a imagem&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Passo 2&lt;/span&gt;: Inicie uma instância do Terminal. Normalmente encontrado em Application\Utilities\Terminal&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Passo 3&lt;/span&gt;: Verifique qual dispositivo o drive de CD/DVD esta usando. Para isso execute o seguinte comando:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; $ drutil status&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; Vendor   Product           Rev &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; MATSHITA DVD-R   UJ-857E   ZA0E&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;      Type: DVD-ROM              &lt;span style="font-weight: bold;"&gt;Name: /dev/disk2&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;       Sessions: 1                  Tracks: 1 &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   Overwritable:   00:00:00         blocks:        0 /   0.00MB /   0.00MiB&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;     Space Free:   00:00:00         blocks:        0 /   0.00MB /   0.00MiB&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;     Space Used:  274:44:52         blocks:  1236352 /   2.53GB /   2.36GiB&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    Writability: &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;      Book Type: DVD-ROM (v1)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Observe na saida do comando que em meu caso o nome do dispositivo (marcado em negrito) é /dev/disk2. Preste atenção nesta informação pois ela será usada pelos comandos seguintes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Passo 4&lt;/span&gt;:  "Desmonte" o dispositivo com o seguinte comando:&lt;br /&gt;            &lt;br /&gt;              &lt;span style="font-style: italic;"&gt;$    diskutil unmountDisk /dev/disk2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;                      Unmount of all volumes on disk2 was successful&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Passo 5&lt;/span&gt;: Criar a imagem ISO usando o comando DD. Esta operação pode demorar.&lt;br /&gt;               Por isso tenha paciência e espere a finalização do comando.&lt;br /&gt;               O comando a ser usado é:&lt;br /&gt;&lt;br /&gt;             &lt;span style="font-style: italic;"&gt;$ dd if=/dev/disk2 of=imagem.iso bs=2048&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;                 1236352+0 records in&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;                1236352+0 records out&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;                 2532048896 bytes transferred in 755.615869 secs (3350974 bytes/sec)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Passo 6&lt;/span&gt;: Teste a operação montando a imagem gerada (ou abra pelo finder).&lt;br /&gt;         &lt;span style="font-style: italic;"&gt;   $ hdid imagem.iso&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Neste momento você ja deve ter a imagem do seu cd/dvd gravado no arquivo imagem.iso.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Palavras chaves: Gerar Criar Imagem Mac OS X ISO CD DVD Terminal&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-2375248796656354365?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/2375248796656354365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/2375248796656354365'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/04/gerando-imagens-iso-cddvd-no-mac-os-x.html' title='Gerando Imagens ISO do CD/DVD no Mac OS X'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-7340164767699360516</id><published>2009-04-14T09:30:00.000-07:00</published><updated>2009-04-14T09:37:11.860-07:00</updated><title type='text'>Problema: error C2011: 'fd_set' : 'struct' type redefinition</title><content type='html'>Esta ai mais uma merdinha do Visual Studio 2003.&lt;br /&gt;Ao compilar um de meus projetos fui presentiado com zilhões de mensagens de erro.&lt;br /&gt;A primeira delas é a do título deste post. Outras mensagens podem ser vistas no final deste post.&lt;br /&gt;E ai, como resolver isso ?&lt;br /&gt;O problema era que estava incluindo o windows.h antes de winsock2.h.&lt;br /&gt;Para resolver este problema basta trocar a ordem na inclusão dos arquivos.&lt;br /&gt;&lt;br /&gt;Dando uma pesquisada maior parece que windows.h ja inclui winsock2.h.&lt;br /&gt;Por isso o problema de redefinição de tipos.&lt;br /&gt;Mas agora não estou no ambiente e não posso testar.&lt;br /&gt;&lt;br /&gt; []'s&lt;br /&gt;&lt;br /&gt;Leonardo X. T. Cardoso&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(222): error C2011: 'netent' : 'struct' type redefinition&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(109): error C2011: 'fd_set' : 'struct' type redefinition&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(144): warning C4005: 'FD_SET' : macro redefinition&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(153): error C2011: 'timeval' : 'struct' type redefinition&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(209): error C2011: 'hostent' : 'struct' type redefinition&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(229): error C2011: 'servent' : 'struct' type redefinition&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(241): error C2011: 'protoent' : 'struct' type redefinition&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(397): error C2011: 'sockaddr_in' : 'struct' type redefinition&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(407): error C2011: 'WSAData' : 'struct' type redefinition&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(467): warning C4005: 'SO_DONTLINGER' : macro redefinition&lt;br /&gt;        C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock.h(411) : see previous definition of 'SO_DONTLINGER'&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(524): warning C4005: 'AF_IPX' : macro redefinition&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(552): warning C4005: 'AF_MAX' : macro redefinition&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(558): error C2011: 'sockaddr' : 'struct' type redefinition&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(598): error C2011: 'sockproto' : 'struct' type redefinition&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(637): error C2011: 'linger' : 'struct' type redefinition&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(650): warning C4005: 'SOMAXCONN' : macro redefinition&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(675): warning C4005: 'FD_READ' : macro redefinition&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(678): warning C4005: 'FD_WRITE' : macro redefinition&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(681): warning C4005: 'FD_OOB' : macro redefinition&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(684): warning C4005: 'FD_ACCEPT' : macro redefinition&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(687): warning C4005: 'FD_CONNECT' : macro redefinition&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(690): warning C4005: 'FD_CLOSE' : macro redefinition&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(1622): error C2375: 'accept' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(1643): error C2375: 'bind' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(1662): error C2375: 'closesocket' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(1681): error C2375: 'connect' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(1702): error C2375: 'ioctlsocket' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(1723): error C2375: 'getpeername' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(1744): error C2375: 'getsockname' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(1767): error C2375: 'getsockopt' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(1788): error C2375: 'htonl' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(1805): error C2375: 'htons' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(1822): error C2375: 'inet_addr' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(1839): error C2375: 'inet_ntoa' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(1857): error C2375: 'listen' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(1875): error C2375: 'ntohl' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(1892): error C2375: 'ntohs' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(1912): error C2375: 'recv' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(1937): error C2375: 'recvfrom' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(1963): error C2375: 'select' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(1987): error C2375: 'send' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2012): error C2375: 'sendto' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2038): error C2375: 'setsockopt' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2060): error C2375: 'shutdown' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2080): error C2375: 'socket' : redefinition; different linkage&lt;br /&gt;        C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock.h(845) : see declaration of 'socket'&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2103): error C2375: 'gethostbyaddr' : redefinition; different linkage&lt;br /&gt;        C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock.h(852) : see declaration of 'gethostbyaddr'&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2122): error C2375: 'gethostbyname' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2140): error C2375: 'gethostname' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2159): error C2375: 'getservbyport' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2178): error C2375: 'getservbyname' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2196): error C2375: 'getprotobynumber' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2213): error C2375: 'getprotobyname' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2233): error C2375: 'WSAStartup' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2251): error C2375: 'WSACleanup' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2268): error C2375: 'WSASetLastError' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2285): error C2375: 'WSAGetLastError' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2302): error C2375: 'WSAIsBlocking' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2319): error C2375: 'WSAUnhookBlockingHook' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2336): error C2375: 'WSASetBlockingHook' : redefinition; different linkage&lt;br /&gt;        C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock.h(891) : see declaration of 'WSASetBlockingHook'&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2353): error C2375: 'WSACancelBlockingCall' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2375): error C2375: 'WSAAsyncGetServByName' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2402): error C2375: 'WSAAsyncGetServByPort' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2428): error C2375: 'WSAAsyncGetProtoByName' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2453): error C2375: 'WSAAsyncGetProtoByNumber' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2478): error C2375: 'WSAAsyncGetHostByName' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2505): error C2375: 'WSAAsyncGetHostByAddr' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2528): error C2375: 'WSACancelAsyncRequest' : redefinition; different linkage&lt;br /&gt;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinSock2.h(2548): error C2375: 'WSAAsyncSelect' : redefinition; different linkage&lt;br /&gt;e:\modules\branchs\adw-1_3\agents\project\libasrcc\connection.cpp(57): error C2039: 'kBytestoBits' : is not a member of 'Automatos::SecureRemoteControl::Client::Connection'&lt;br /&gt;e:\modules\branchs\adw-1_3\agents\project\libasrcc\connection.cpp(58): warning C4076: 'unsigned' : can not be used with type 'double'&lt;br /&gt;e:\modules\branchs\adw-1_3\agents\project\libasrcc\connection.cpp(58): error C2039: 'kSecstoUsecs' : is not a member of 'Automatos::SecureRemoteControl::Client::Connection'&lt;br /&gt;e:\modules\branchs\adw-1_3\agents\project\libasrcc\connection.cpp(58): warning C4244: 'initializing' : conversion from 'double' to 'const unsigned int', possible loss of data&lt;br /&gt;e:\modules\branchs\adw-1_3\agents\project\libasrcc\connection.cpp(1147): error C2065: 'delayTarget' : undeclared identifier&lt;br /&gt;e:\modules\branchs\adw-1_3\agents\project\libasrcc\connection.cpp(1150): error C2065: 'delay_target' : undeclared identifier&lt;br /&gt;e:\modules\branchs\adw-1_3\agents\project\libasrcc\connection.cpp(1150): error C3861: 'delayTarget': identifier not found, even with argument-dependent lookup&lt;br /&gt;e:\modules\branchs\adw-1_3\agents\project\libasrcc\connection.cpp(1152): error C3861: 'delayTarget': identifier not found, even with argument-dependent lookup&lt;br /&gt;e:\modules\branchs\adw-1_3\agents\project\libasrcc\connection.cpp(1153): error C3861: 'delayTarget': identifier not found, even with argument-dependent lookup&lt;br /&gt;e:\modules\branchs\adw-1_3\agents\project\libasrcc\connection.cpp(1163): error C2065: 'reportstruct' : undeclared identifier&lt;br /&gt;e:\modules\branchs\adw-1_3\agents\project\libasrcc\connection.cpp(1163): error C2227: left of '-&gt;packetTime' must point to class/struct/union&lt;br /&gt;e:\modules\branchs\adw-1_3\agents\project\libasrcc\connection.cpp(1165): error C2146: syntax error : missing ';' before identifier 'socket'&lt;br /&gt;e:\modules\branchs\adw-1_3\agents\project\libasrcc\connection.cpp(1163): error C3861: 'gettimeofday': identifier not found, even with argument-dependent lookup&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-7340164767699360516?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/7340164767699360516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/7340164767699360516'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/04/problema-error-c2011-fdset-struct-type.html' title='Problema: error C2011: &apos;fd_set&apos; : &apos;struct&apos; type redefinition'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-584912049932067087</id><published>2009-04-13T20:09:00.000-07:00</published><updated>2009-04-13T20:16:10.202-07:00</updated><title type='text'>Problema: "The project file ' ' has been renamed or is no longer in the solution"</title><content type='html'>Agora a pouco ao tentar compilar um projeto no Visual Studio 2003 me deparei com este erro.&lt;br /&gt;Legal né ? Poucas vezes vi uma mensagem de erro tão imunda e inútil como essa.&lt;br /&gt;Bom no meu caso o problema era uma referência não encontrada um dos projetos.&lt;br /&gt;&lt;br /&gt;Tinha esquecido de fazer o checkout e o Visual Studio não reclamou ao abrir o Solution.&lt;br /&gt;O que você tem que fazer é verificar em todos os projetos do Solution qual deles possui uma referência não encontrada.&lt;br /&gt;Na figura abaixo mostro um screenshot de como o problema deve aparecer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_0H3slx8sKMo/SeP_scHPteI/AAAAAAAAAnc/ESS08dMgWVI/s1600-h/Picture+7.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 223px; height: 114px;" src="http://2.bp.blogspot.com/_0H3slx8sKMo/SeP_scHPteI/AAAAAAAAAnc/ESS08dMgWVI/s320/Picture+7.png" alt="" id="BLOGGER_PHOTO_ID_5324380323407967714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A solução é fazer o checkout do projeto ou se ele não for mais necessário, eliminar a referência para o projeto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-584912049932067087?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/584912049932067087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/584912049932067087'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2009/04/problema-project-file-has-been-renamed.html' title='Problema: &quot;The project file &apos; &apos; has been renamed or is no longer in the solution&quot;'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_0H3slx8sKMo/SeP_scHPteI/AAAAAAAAAnc/ESS08dMgWVI/s72-c/Picture+7.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-1534995539671244276</id><published>2008-09-19T13:01:00.000-07:00</published><updated>2008-09-19T13:29:35.823-07:00</updated><title type='text'>Portando Aplicativo Windows Ce de X86 para ARM</title><content type='html'>Palavras Chave: Pocket PC Windows CE Win CE&lt;br /&gt;&lt;br /&gt;Essa semana me foi passada a tarefa de portar um aplicativo que temos para ThinClients Windows CE rodando em processadores X86 para Windows CE Pocket PC 2003 em ARM.&lt;br /&gt;&lt;br /&gt;Bom, comecei criando o solution para o ARM copiando as configurações do X86 ja existentes e trocando na mãos os defines" onde necessário.&lt;br /&gt;Tudo compilou legal ate que na hora de "linkar" fui presenteado com algumas dezenas de erros.&lt;br /&gt;Foram muitos erros mas a maioria deles reclamava da mesma coisa&lt;br /&gt;Abaixo mostro o copy-and-paste de alguns deles:&lt;br /&gt;&lt;br /&gt;error LNK2001: unresolved external symbol "public: __cdecl std::exception::exception(char const *)" (??0exception@std@@QAA@PBD@Z)&lt;br /&gt;error LNK2001: unresolved external symbol "const type_info::`vftable'" (??_7type_info@@6B@)&lt;br /&gt; error LNK2001: unresolved external symbol "public: virtual char const * __cdecl std::exception::what(void)const " (?what@exception@std@@UBAPBDXZ)&lt;br /&gt;error LNK2001: unresolved external symbol "public: virtual __cdecl std::exception::~exception(void)" (??1exception@std@@UAA@XZ)&lt;br /&gt;&lt;br /&gt;Percebi que praticamente todos símbolos estavam relacionados as classes de tratamento de exceção.&lt;br /&gt;Futuca aqui mexi ali e nada.&lt;br /&gt;Até que resolvi criar um solution do zero para verificar quais configurações o Visual Studio 2005 colocava em seus projetos.&lt;br /&gt;&lt;br /&gt;Resolvi olhar no stdafx.h criado por default e vejo isso:&lt;br /&gt;&lt;br /&gt;#if (_WIN32_WCE &lt; 0x500) &amp;amp;&amp;amp; ( defined(WIN32_PLATFORM_PSPC) ||&lt;br /&gt;defined(WIN32_PLATFORM_WFSP) )&lt;br /&gt; #pragma comment(lib, "ccrtrtti.lib")&lt;br /&gt; #ifdef _X86_&lt;br /&gt;  #if defined(_DEBUG)&lt;br /&gt;   #pragma comment(lib, "libcmtx86d.lib")&lt;br /&gt;  #else&lt;br /&gt;   #pragma comment(lib, "libcmtx86.lib")&lt;br /&gt;  #endif&lt;br /&gt; #endif&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;Hum...interessante. &lt;br /&gt;Nos projetos ARM ele inclui o ccrtrtti.lib.&lt;br /&gt;Pesquisando na internet encontro &lt;a href="http://support.microsoft.com/kb/830482"&gt;isso&lt;/a&gt;.&lt;br /&gt;Pronto, mexi nas propriedades do vcproj e mandei incluir o ccrtrtti.lib e tudo foi perfeito.&lt;br /&gt;Bom, agora só falta testar no dispositivo. Se tiver alguma coisa de interessante postarei aqui.&lt;br /&gt;Se quiser saber mais para que serve o ccrtrtti.lib basta ler o &lt;a href="http://support.microsoft.com/kb/830482"&gt;link&lt;/a&gt; inserido anteriormente.&lt;br /&gt;Minhas restrições de tempo me impedem de escrever detalhes.&lt;br /&gt;[]'s&lt;br /&gt;&lt;br /&gt;Leonardo X. T. Cardoso&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-1534995539671244276?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/1534995539671244276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/1534995539671244276'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2008/09/portando-aplicativo-windows-ce-de-x86.html' title='Portando Aplicativo Windows Ce de X86 para ARM'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-6586243421297597255</id><published>2008-09-12T10:07:00.000-07:00</published><updated>2008-09-12T10:15:10.983-07:00</updated><title type='text'>ScreenShot do dia</title><content type='html'>Criando código para listar as interfaces de rede no Solaris.&lt;br /&gt;Graças ao &lt;a href="http://www.opensolaris.org/os/"&gt;OpenSolaris&lt;/a&gt; pude verificar como os engenheiros da Sun implementaram&lt;br /&gt;o ifconfig.&lt;br /&gt;&lt;br /&gt;Softwares utilizados&lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://www.apple.com/macosx/"&gt;Mac OS X&lt;/a&gt;.&lt;br /&gt;2. &lt;a href="http://www.jedit.org/"&gt;Jedit&lt;/a&gt;.&lt;br /&gt;3. &lt;a href="http://rsug.itd.umich.edu/software/fugu/"&gt;Fugu&lt;/a&gt; -&lt;b&gt; (A Mac OS X SFTP, SCP and SSH Frontend)&lt;/b&gt;&lt;br /&gt;4. &lt;a href="http://www.apple.com/macosx/technology/unix.html"&gt;Terminal&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Para visualizar o screenshot clique &lt;a href="http://www.leoxtc.com/pics/screen120908.png"&gt;AQUI&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-6586243421297597255?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/6586243421297597255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/6586243421297597255'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2008/09/screenshot-do-dia.html' title='ScreenShot do dia'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-5285107956537195181</id><published>2008-09-03T19:39:00.000-07:00</published><updated>2008-09-03T20:42:04.899-07:00</updated><title type='text'>Compilando o GCC no HP-UX 11.X</title><content type='html'>Neste post explicarei como compilar seu próprio GCC no HP-UX 10.x.&lt;br /&gt;&lt;br /&gt;No ambiente onde trabalho, um de nosso objetivos é suportar o maior número possível de versões de HP-UX. Por isso usamos o GCC versão 3.4.4 por conta das chatices de incompatibilidade da libc.&lt;br /&gt;Com isso, conseguimos gerar binários que funcionam tanto nos sistemas antigos quanto nos novos. E acredite, muitos clientes tem ambientes bastante desatualizados.&lt;br /&gt;Como regra geral eles pensam: para que atualizar se esta funcionando 100% e eu não preciso das novas features ? Até faz sentido. Mas nem irei entrar no mérito das conseqüências  deste tipo de atitude. Principalmente questões de segurança.&lt;br /&gt;&lt;br /&gt;Bom, voltando ao que interessa.....&lt;br /&gt;&lt;br /&gt;Eu uso o GCC apenas para compilar código C/C++ e por isso neste exemplo irei usar apenas os pacotes que interessam:  (i) &lt;a href="ftp://mirrors.laffeycomputer.com/pub/gcc.gnu.org/pub/gcc/releases/gcc-3.4.4/gcc-core-3.4.4.tar.gz"&gt;gcc-core&lt;/a&gt; e (2) &lt;a href="ftp://mirrors.laffeycomputer.com/pub/gcc.gnu.org/pub/gcc/releases/gcc-3.4.4/gcc-core-3.4.4.tar.gz"&gt;gcc-g++&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Agora vamos aos passos  para compilar o GCC 3.4.4 no HP-UX 11.23&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1.    Instalar uma distribuição binária do GCC. Este GCC será usado para compilar o seu GCC "customizado". Pode ser inclusive um GCC 4.x. Tentei compilar usando o compilador C do HP mas não teve jeito. Após muita dor de cabeça resolvi usar o próprio GCC. Após a instalação, os binários do GCC estarão localizados  em /usr/local/bin&lt;br /&gt;&lt;br /&gt;2. Adicionar no PATH a pasta onde estão os binários do GCC.  (&lt;span style="font-style: italic;"&gt;export PATH=$PATH:/usr/local/bin)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;3.    Setar a variável de ambiente CC para gcc&lt;span style="font-style: italic;"&gt; (export CC=gcc&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;4.    Extrair os fontes do GCC. ex: /opt/gcc-3.4.4&lt;br /&gt;&lt;br /&gt;5.    Configurar o build do GCC. É obrigatório usar o linker e assembler da GNU. A linha de comando final seria&lt;span style="font-style: italic;"&gt; "./configure –prefix=/opt/gcc –enable-threads –with-gnu-as –with-gnu-ld –with-languages=c,c++&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;6.    Remover o assembler da HP do PATH.&lt;br /&gt;&lt;br /&gt;7.    Corrigir o header math.h. Pelo menos no meu pacote veio faltando um #endif. Para corrigir basta inserir um #endif no final do arquivo math.h. Talvez se a plataforma não for IA64 isso não é necessário. Enfim, só faça se algum erro no math.h interromper o build.&lt;br /&gt;&lt;br /&gt;8.    Compilar o pacote. &lt;span style="font-style: italic;"&gt;make&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;9.    Criar a pasta de instalação. Em meu caso sempre uso /opt/gcc/ &lt;span style="font-style: italic;"&gt;(mkdir /opt/gcc&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;10.    Instalar pacote.  (&lt;span style="font-style: italic;"&gt;make install)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Se tudo correr bem, neste ponto você terá uma distribuição completa do GCC instalada em /opt/gcc. Adicione a pasta /opt/gcc/bin no seu PATH e seja feliz.&lt;br /&gt;&lt;br /&gt;Agora você pode remover o pacote binário que você instalou anteriormente.&lt;br /&gt;&lt;br /&gt;Bom, por hoje vou ficar aqui.&lt;br /&gt;Em outro post irei explicar como fazer binários estáticos que pode ser executados em qualquer ambiente com qualquer versão do HP-UX. Você vai precisar dos arquivos objetos gerados na compilação do GCC para gerar a libstdc++.a e a sua própria distribuição da libstdc++.so.&lt;br /&gt;&lt;br /&gt;Se você tem muitos componentes é uma boa idéia enviar sua versão do libstdc++.so junto com seus pacotes. Assim você garante que não vai haver conflitos com diferentes versões desta shared library instaladas por ai nos ambientes insanamente genéricos que os clientes possuem.&lt;br /&gt;&lt;br /&gt;Abraços.&lt;br /&gt;&lt;br /&gt;Leonardo X. T. Cardoso&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-5285107956537195181?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/5285107956537195181/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=5285107956537195181' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/5285107956537195181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/5285107956537195181'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2008/09/compilando-o-gcc-no-hp-ux-11x.html' title='Compilando o GCC no HP-UX 11.X'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-5377326406502779488</id><published>2008-09-01T20:19:00.000-07:00</published><updated>2008-09-01T20:28:53.597-07:00</updated><title type='text'>nfs mount: mount: /mnt/cvs: Not owner</title><content type='html'>Hoje ao tentar montar meu diretório remoto localizado em um servidor Fedora Linux a partir de um Solaris 10 obtive a seguinte mensagem (inútil por sinal) de erro:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;# mount cvs:/home/cvs/lcardoso /mnt/cvs&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; nfs mount: mount: /mnt/cvs: Not owner&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; # &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pesquisando um pouco pela internet descobri que isso é um problema com o NFS versão 4 no Linux e Solaris 10.&lt;br /&gt;&lt;br /&gt;Para resolver basta editar o arquivo:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;/etc/default/nfs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;and mudar a linha&lt;br /&gt;&lt;/p&gt;&lt;p&gt;    #NFS_CLIENT_VERSMAX=4&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;para&lt;/p&gt;&lt;p&gt;    NFS_CLIENT_VERSMAX=3&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;Outra opção é usar o seguinte comando no momento em que for montar o sistema de arquivos:&lt;br /&gt;mount -o vers=3 &lt;span style="font-style: italic;"&gt;cvs:/home/cvs/lcardoso /mnt/cvs&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-5377326406502779488?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/5377326406502779488/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=5377326406502779488' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/5377326406502779488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/5377326406502779488'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2008/09/nfs-mount-mount-mntcvs-not-owner.html' title='nfs mount: mount: /mnt/cvs: Not owner'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-2134433947443285670</id><published>2008-09-01T20:03:00.000-07:00</published><updated>2008-09-03T20:37:05.828-07:00</updated><title type='text'>Novo Livro - Advanced Programming in the UNIX Environment</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.leoxtc.com/pics/adv_unix_stevens.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://www.leoxtc.com/pics/adv_unix_stevens.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Hoje chegou mais um clássico em minha porta.&lt;br /&gt;&lt;br /&gt;Trata-se do livro Advanced Programming in the UNIX Environment cujo autor é o W. Richard Stevens.&lt;br /&gt;&lt;br /&gt;Ele já é um velho conhecido dos tempos da Universidade Federal de Ouro Preto.&lt;br /&gt;Na época tínhamos apenas um exemplar que infelizmente foi roubado por algum aluno.&lt;br /&gt;&lt;br /&gt;É o livro obrigatório de qualquer entusiasta Unix.&lt;br /&gt;&lt;br /&gt;Esses dias passeando pela amazon.com resolvi verificar o preço e vi que poderia comprar um usado por míseros 7 dólares mais 12 dólares de frete para o Brasil.&lt;br /&gt;Por menos de 50 reais pude adquirir o clássico número um sobre desenvolvimento em Unix.&lt;br /&gt;&lt;br /&gt;Ná época de seu lançamento não existia farto material sobre o assunto e o Stevens lançou essa obra prima. Apesar de sua idade (quase 20 anos) boa parte do conteúdo continua atual.&lt;br /&gt;&lt;br /&gt;O Stevens é autor de diversos outros livros sobre o assunto, incluindo edições focadas em TCP/IP, programação em rede e comunicação inter-processos.&lt;br /&gt;&lt;br /&gt;O cara era simplesmente o Guru dos Gurus.&lt;br /&gt;&lt;br /&gt;Infelizmente ele morreu em 1999 com apenas 48 anos em conseqüência de um ataque cardíaco.&lt;br /&gt;&lt;br /&gt;Quem sabe um dia não conto um pouco mais da história do W. Richard Stevens.&lt;br /&gt;&lt;br /&gt;Por enquanto segue abaixo algumas referências.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;a href="http://www.kohala.com/start/"&gt;&lt;br /&gt;1. Antigo website pessoal.&lt;/a&gt;&lt;a href="http://en.wikipedia.org/wiki/W._Richard_Stevens"&gt;&lt;br /&gt;2. Artigo Wikipedia&lt;/a&gt;&lt;a href="http://archive.salon.com/tech/feature/2000/09/01/rich_stevens/index.html"&gt;&lt;br /&gt;3. Guru dos Unix Gurus&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Leonardo X T Cardoso&lt;br /&gt;&lt;/div&gt;&lt;span style=";font-family:times new roman,times,serif;font-size:180%;"  &gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-2134433947443285670?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/2134433947443285670/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=2134433947443285670' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/2134433947443285670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/2134433947443285670'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2008/09/novo-livro-advanced-programming-in-unix.html' title='Novo Livro - Advanced Programming in the UNIX Environment'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-5050432862731390025</id><published>2008-08-24T12:30:00.000-07:00</published><updated>2008-08-24T12:33:22.118-07:00</updated><title type='text'>Vendo em quatro dimensões.</title><content type='html'>Matemáticos da Universidade de Lyon na França lançaram uma série de videos ensinando como visualizar objetos em quatro dimensões.&lt;br /&gt;Quem se interessar basta ler o artigo:&lt;br /&gt;&lt;a href="http://www.sciencenews.org/view/generic/id/35740/title/Seeing_in_four_dimensions"&gt;Seeing in four dimensions&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ou ir direto na página com os vídeos:&lt;br /&gt;&lt;a href="http://www.dimensions-math.org/"&gt;&lt;br /&gt;http://www.dimensions-math.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Leonardo X. T. Cardoso&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-5050432862731390025?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/5050432862731390025/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=5050432862731390025' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/5050432862731390025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/5050432862731390025'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2008/08/vendo-em-quatro-dimenses.html' title='Vendo em quatro dimensões.'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3428906911754962373.post-7955658286314461001</id><published>2008-08-24T09:31:00.000-07:00</published><updated>2008-08-24T12:35:38.819-07:00</updated><title type='text'>Um Pouco da História do Atari</title><content type='html'>Esses dias me deparei com um artigo contando boa parte da história da empresa de video-games Atari. Como todo mundo que nasceu até 1981, eu ja tive esse incrível video-game. Virei noites jogando Asteroides, Enduro e River-Raid.&lt;br /&gt;Para quem é fã e quer conhecer um pouco mais da história e de momentos internos da empresa basta clicar &lt;a href="http://www.gamasutra.com/view/feature/3766/atari_the_golden_years__a_.php?page=1"&gt;aqui&lt;/a&gt;. O artigo cobre o período de maior criatividade da empresa que se deu entre 1977 e 1981. Para quem gosta, é uma leitura interessante de 20 páginas.&lt;br /&gt;&lt;br /&gt;Leonardo X. T. Cardoso&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3428906911754962373-7955658286314461001?l=leoxtc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leoxtc.blogspot.com/feeds/7955658286314461001/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3428906911754962373&amp;postID=7955658286314461001' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/7955658286314461001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3428906911754962373/posts/default/7955658286314461001'/><link rel='alternate' type='text/html' href='http://leoxtc.blogspot.com/2008/08/um-pouco-da-histria-do-atari.html' title='Um Pouco da História do Atari'/><author><name>leoxtc</name><uri>http://www.blogger.com/profile/05825463739232438998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
