<?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-18008684</id><updated>2012-01-09T18:26:30.138-02:00</updated><category term='diversos'/><category term='Informática'/><category term='iPhone'/><category term='Linux'/><category term='servidores'/><category term='Delphi'/><category term='MacOS'/><category term='Hardware'/><category term='politica'/><category term='virtualização'/><category term='iOS'/><category term='ciência'/><category term='cotidiano'/><title type='text'>Gim com crônica</title><subtitle type='html'>&lt;center&gt;Tecnologia, negócios e mais um monte de coisas.&lt;/center&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-18008684.post-5834128611733831707</id><published>2012-01-09T18:26:00.001-02:00</published><updated>2012-01-09T18:26:30.196-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='virtualização'/><category scheme='http://www.blogger.com/atom/ns#' term='Informática'/><title type='text'>Aumentar tamanho do HD virtual no Virtual Box–complemento</title><content type='html'>&lt;p&gt;&lt;img style="margin: 6px 6px 0px 0px; display: inline; float: left" align="left" src="http://lh3.ggpht.com/_0euyjp4V3iA/TPZjnbA7hbI/AAAAAAAAAH0/bd_HdqQ8ZE8/image_thumb.png?imgmax=800" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;   &lt;br /&gt;&amp;#160;&amp;#160; Complementando o post anterior, sobre aumentar o tamanho do HD virtual no Virtual Box, vai ocorrer que, ao iniciar a GUI do Virtual Box, você verá que ele informa o novo tamanho que você definiu, porém &lt;em&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;ao acessar a máquina virtual você descobre que o tamanho continua o mesmo de antigamente&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;, e que a sua alteração não surtiu efeito.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160; Isto se deve ao fato de que, quando você aumenta o tamanho do seu HD virtual, o espaço adicional aparece como uma nova partição na máquina virtual, no exemplo que demos anteriormente, com Windows XP, se você for em &lt;strong&gt;Meu Computador / Gerenciar&lt;/strong&gt; e ir em&lt;strong&gt; Gerenciamento de discos&lt;/strong&gt; verá que há um espaço extra não alocado, justamente o aumento de tamanho que você fez.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Para resolver isso é simples, você vai necessitar de um gerenciador de partições, existem vários (Partition Magic, Norton Partition, etc), eu uso e indico um gerenciador de partição Open Source e free, chamado &lt;strong&gt;&lt;font color="#000000"&gt;GParted&lt;/font&gt;&lt;/strong&gt;, que pode ser obtido no endereço &lt;a href="http://gparted.sourceforge.net/"&gt;http://gparted.sourceforge.net/&lt;/a&gt; , ele é baseado em uma distribuição linux, mas como informado no site, pode ser usado em Linux, Windows, MacOS, você baixa um arquivo &lt;strong&gt;*.iso, &lt;/strong&gt;inicia a sua máquina virtual e monta este arquivo &lt;strong&gt;ISO&lt;/strong&gt; no drive de CD, e faz o boot por este CD, isto vai iniciar o &lt;strong&gt;GParted, &lt;/strong&gt;nào se preocupe com a aparência inicial, ele depois inicia uma interface gráfica extremamente fácil e simples de operar, onde você de aumentar o tamanho da sua partição atual para preencher todo o tamanho desejado, ou alocar o espaço extra como uma nova partição, o processo é rápido, intuitivo e bem fácil.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Se você desejar apenas que a sua partição atual preencha todo o espaço novo que você definiu, apenas arraste a barra para preencher todo o espaço e pronto, depois clique em &lt;strong&gt;Apply (Aplicar), &lt;/strong&gt;depois você sai do GParted, pelo botão exit, e reinicia a máquina virtual.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;&lt;em&gt;Detalhe: Lembre-se de retirar do drive de CD/DVD virtual o arquivo ISO do GParted.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Quando reiniciar a máquina, o Windows vai verificar a integridade do HD, e estará pronto para utilização.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Bem fácil, rápido e intuitivo.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-5834128611733831707?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/5834128611733831707/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=5834128611733831707' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/5834128611733831707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/5834128611733831707'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2012/01/aumentar-tamanho-do-hd-virtual-no_09.html' title='Aumentar tamanho do HD virtual no Virtual Box–complemento'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_0euyjp4V3iA/TPZjnbA7hbI/AAAAAAAAAH0/bd_HdqQ8ZE8/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-5915742815399740644</id><published>2012-01-06T18:58:00.001-02:00</published><updated>2012-01-06T18:58:08.083-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='virtualização'/><category scheme='http://www.blogger.com/atom/ns#' term='Informática'/><title type='text'>Aumentar tamanho do HD virtual no Virtual Box.</title><content type='html'>&lt;p&gt;&lt;img style="margin: 5px 7px 0px 0px; display: inline; float: left" align="left" src="http://lh3.ggpht.com/_0euyjp4V3iA/TPZjnbA7hbI/AAAAAAAAAH0/bd_HdqQ8ZE8/image_thumb.png?imgmax=800" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Problema: Você estimou um tamanho para o seu HD virtual, afinal era só para alguns testes. Porém dos testes se passou a produção, daí para mais testes, e acabou ficando um HD permanente, e agora o espaço está pequeno, e precisa de um HD virtual maior.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Vários tutoriais encontrados na internet nos ensinam a fazer alguns malabarismos para incrementar o tamanho do seu HD virtual, que incluem até mesmo criar um novo HD maior, e transferir para o outro HD o que você tem neste, acrescentar um segundo HD ao sistema, fazer um ghost do HD virtual (esta uma manobra realmente bem arriscada e complicada), e outras receitas que incluem mil e uma peripécias.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Pois bem, na verdade nada disso é necessário, e aumentar o tamanho do seu HD virtual na realidade é uma tarefa corriqueira de manutenção, e que pode ser feita de forma rápida e muito fácil, sem a necessidade de grandes malabarismos ou soluções improvisadas.&lt;/p&gt;  &lt;p&gt;O comando é &lt;strong&gt;&lt;font color="#000000"&gt;modifyhd&lt;/font&gt;&lt;/strong&gt;, e este comando possui várias opções, sua sintaxe é:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;&lt;font color="#000000"&gt;VBoxManage modifyhd &amp;lt;comando&amp;gt; &amp;lt;arquivo.vdi&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;onde &lt;strong&gt;&lt;font color="#000000"&gt;&amp;lt;comando&amp;gt;&lt;/font&gt;&lt;/strong&gt; pode ser:&lt;/p&gt;    &lt;p align="justify"&gt;&lt;strong&gt;&lt;em&gt;-- type normal / writethrough / immutable / shareable / readonly / multiatach&lt;/em&gt;&lt;/strong&gt;      &lt;br /&gt;      &lt;br /&gt;Este comando modifica o tipo de armazenamento que você está utilizando.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;em&gt;-- autoreset on / off&lt;/em&gt;&lt;/strong&gt;      &lt;br /&gt;Determina se o disco deve se reinicializar a cada novo carregamento da máquina virtual.&lt;/p&gt;    &lt;p align="justify"&gt;&lt;strong&gt;&lt;em&gt;-- compact         &lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;Como o próprio nome sugere, compacta a máquina virtual, eliminando espaços e blocos que contem apenas zeros, é uma desfragmentação da máquina virtual, normalmente reduz o tamanho físico ocupado pelo HD virtual.&lt;/p&gt;    &lt;p align="justify"&gt;&lt;strong&gt;&lt;em&gt;-- resize megabytes / bytes&lt;/em&gt;&lt;/strong&gt;      &lt;br /&gt;Este é o comando que nos interessa neste post, que é o comando que irá modificar o tamanho do HD virtual. Informamos o novo tamanho que desejamos. &lt;/p&gt;     &lt;/blockquote&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Vamos lá, mãos à obra:&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Primeiro identifique o disco virtual que você deseja aumentar o tamanho, aqui cabe uma informação, o utilitário vboxmanage não trabalha muito bem com nomes de discos virtuais que incluam espaços e hífens, ele simplesmente não consegue localizar, e se você colocar o nome entre aspas também não vai dar certo. Mas calma, para tudo existe solução, e neste caso é bem fácil.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; No nosso exemplo nós vamos ter dois discos virtuais, ambos de &lt;strong&gt;&lt;font color="#000000"&gt;10GB que vamos passar para 25GB&lt;/font&gt;&lt;/strong&gt;, para exemplificar os dois casos, vamos ter um com nome de arquivo simples e outro com nome de arquivo que o vboxmanage se perde para gerenciar.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Os dois discos virtuais:&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;&lt;font color="#000080"&gt;WinXPSimples.vdi&lt;/font&gt;&lt;/strong&gt; (10Gb).    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;&lt;strong&gt;WinXP – para testes.vdi&lt;/strong&gt;&lt;/font&gt; (10 Gb).&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; O primeiro não tem problemas o vboxmanage consegue trabalhar de forma fácil, o segundo é que será problema e teremos que resolver, vamos à tarefa.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; - Para o primeiro disco &lt;strong&gt;&lt;font color="#000080"&gt;WinXPSimples.vdi&lt;/font&gt;&lt;/strong&gt; de 10Gb.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;&lt;em&gt; &lt;font color="#000000"&gt;VBoxManage modifyhd --resize 25600 WinXPSimples.vdi&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160;&amp;#160; O VBoxManage irá nos informar que estará reconfigurando o HD, para isso irá informar na tela:     &lt;br /&gt;&lt;font color="#000000" size="2"&gt;&lt;strong&gt;0%…10%…20%…30%…40%...50%...60%…70%…80%…90%…100%&lt;/strong&gt;&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Pronto, você pode acessar o Virtual Box pela interface gráfica e verá que o HD virtual agora passou de 10Gb para 25Gb.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; O processo é bem&amp;#160; rápido.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; - Vamos para o segundo caso, &lt;font color="#ff0000"&gt;&lt;strong&gt;WinXP – para testes.vdi&lt;/strong&gt;&lt;/font&gt; (10 Gb).&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Neste caso, se você tentar o mesmo procedimento anterior, irá obter erro, dizendo que o arquivo &lt;strong&gt;WinXP – para testes.vdi&lt;/strong&gt; não foi localizado, ou que a opção – não é válida.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Neste caso podemos fazer o mesmo procedimento, não pelo nome, mas pelo &lt;strong&gt;&lt;font color="#000000"&gt;UUID&lt;/font&gt;&lt;/strong&gt; que é o número individual gerado pelo Virtual Box para cada HD.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Para saber o &lt;font color="#000000"&gt;&lt;strong&gt;UUID &lt;/strong&gt;&lt;/font&gt;&lt;font color="#666666"&gt;do HD, use outro comando do VBoxManage que lista os Hds instalados.&lt;/font&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;&lt;font color="#000000"&gt;VBoxManage list hdds&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p align="justify"&gt;&lt;font color="#666666"&gt;Com isto pegamos o &lt;strong&gt;&lt;font color="#000000"&gt;UUID&lt;/font&gt;&lt;/strong&gt; do segundo HD, que no meu caso é &lt;em&gt;&lt;strong&gt;d83f649f-c68c-3657-82f4-2e615be4307e&lt;/strong&gt;&lt;/em&gt;, basta agora utilizarmos este UUID para informar ao VBoxManage qual o HD que queremos modificar.&lt;/font&gt;&lt;/p&gt;    &lt;p align="justify"&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#000000"&gt;VBoxManage modifyhd --resize 25600 d83f649f-c68c-3657-82f4-2e615be4307e&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p align="justify"&gt;&lt;font color="#666666"&gt;Pronto, o segundo HD também foi aumentado seu tamanho.&lt;/font&gt;&lt;/p&gt;    &lt;p align="justify"&gt;&lt;font color="#666666"&gt;Fácil e não precisa de nenhum malabarismo.&lt;/font&gt;&lt;/p&gt;    &lt;p align="justify"&gt;&lt;font color="#666666"&gt;Até a próxima.&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-5915742815399740644?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/5915742815399740644/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=5915742815399740644' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/5915742815399740644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/5915742815399740644'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2012/01/aumentar-tamanho-do-hd-virtual-no.html' title='Aumentar tamanho do HD virtual no Virtual Box.'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_0euyjp4V3iA/TPZjnbA7hbI/AAAAAAAAAH0/bd_HdqQ8ZE8/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-5528765688186447188</id><published>2011-03-05T20:59:00.000-03:00</published><updated>2011-03-05T20:59:25.032-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Informática'/><category scheme='http://www.blogger.com/atom/ns#' term='iOS'/><category scheme='http://www.blogger.com/atom/ns#' term='MacOS'/><title type='text'>Criando um aplicativo para iPhone no xCode - Parte 2 -</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="https://lh5.googleusercontent.com/-vuu_YN1y-5s/TWwx1_WJkBI/AAAAAAAAAJg/w51juHutqXs/s1600/xcode.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="https://lh5.googleusercontent.com/-vuu_YN1y-5s/TWwx1_WJkBI/AAAAAAAAAJg/w51juHutqXs/s200/xcode.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Continuando nossa série de posts sobre desenvolvimento para iOS, vamos dar continuidade no nosso projeto da calculadora.&lt;br /&gt;&lt;br /&gt;Primeiro uma palavra sobre o quesito resolução, o iPhone 3 tem a tela de resolução de 320 x 480, já o iPhone 4 tem resolução de 640 x 960, e o iPad tem resolução de 768 x 1024,&amp;nbsp; considerando que as medidas referem-se sempre a Largura x Altura, pode-se notar que a diferença de resolução pode fazer com que um aplicativo feito para o iPhone 3, irá ficar com uma resolução no minimo horrível, no iPhone 4 e no iPad.&lt;br /&gt;Como só tenho o iPhone 4 para testar, e o iPhone 3 o meu teste é no emulador, tenho dúvidas sobre como abordar esta questão, estou pesquisando isto e posto aqui tão logo tenha uma resposta correta, por enquanto a minha abordagem está sendo desenvolver para a resolução do iPhone 4, tendo em mente que, para o iPad a tela ficará menor, mas isto não é necessariamente um problema para uma calculadora, creio que para outros aplicativos que necessitem usar tela cheia, deveremos fazer uma versão específica para iPad.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Já o caso do iPhone 3, a minha tentativa será ver se ele ajustará automaticamente o tamanho da tela, o que acho que não vai ocorrer, e nesse caso teríamos que ter uma versão específica para esta resolução de tela.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Se algum de vocês, que estão acompanhando estes posts, tem acesso à um iPhone 3 (Qualquer versão, 3G, 3GS, a resolução de tela é a mesma), e puder testar, será uma preciosa contribuição.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Vamos iniciar o xCode, e ao abri-lo veremos a tela inicial, como esta:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-Mkhp7N9pjfE/TXKPDUY9eRI/AAAAAAAAAJo/mdwrOI8D39Q/s1600/Welcome+to+xCode.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="262" src="https://lh5.googleusercontent.com/-Mkhp7N9pjfE/TXKPDUY9eRI/AAAAAAAAAJo/mdwrOI8D39Q/s400/Welcome+to+xCode.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Escolheremos "&lt;b&gt;Create a new xCode Project&lt;/b&gt;", a seguir você deverá escolher o tipo de aplicativo que deseja desenvolver, note que você pode escolher desenvolver para o iOS (se você instalou o SDK, como mencionamos no &lt;a href="http://acidbytes.blogspot.com/2011/03/criando-um-aplicativo-para-iphone-no.html"&gt;primeiro post desta série&lt;/a&gt;, caso contrário você só terá a possibilidade de desenvolver para o MacOS), e vamos escolher em iOS a opção &lt;b&gt;View-based application&lt;/b&gt; conforme você pode ver na tela a seguir:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-nRf7HtlNu3s/TXK6MOPF5SI/AAAAAAAAAJw/za_GR8-cqgs/s1600/Captura+de+tela+2011-03-05+a%25CC%2580s+19.32.24.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="322" src="https://lh4.googleusercontent.com/-nRf7HtlNu3s/TXK6MOPF5SI/AAAAAAAAAJw/za_GR8-cqgs/s400/Captura+de+tela+2011-03-05+a%25CC%2580s+19.32.24.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Uma view no iOS, é como se fosse um formulário no desenvolvimento para Windows (a grosso modo), na verdade um aplicativo pode ter várias views, ou seja, uma view é uma tela que o usuário vê e interage durante o uso do aplicativo, contém os controles que aceitam comandos do usuário e campos e figuras que mostram ao usuário as respostas aos seus comandos (feedback para o usuário).&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; Como a nossa calculadora terá apenas uma tela, terá apenas uma view, pois na mesma view o usuário irá digitar os números, escolher as operações e verificar visualmente o resultado da operação realizada.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;Note que, escolher um modelo de aplicativo nesta fase do projeto, não quer dizer que o seu aplicativo esteja engessado, fadado a usar esse modelo sem alternativas, na realidade você pode mudar o formato inicial na medida que seus requisitos de projeto mudarem.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; Ao escolher para criar o aplicativo, será solicitado um nome para o aplicativo, e um local onde o mesmo deverá ser gravado, no nosso caso escolhi o nome &lt;b&gt;Calculator_01&lt;/b&gt;, como você pode ver na tela abaixo.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-pACL0E7Sxt8/TXK8vTHfWFI/AAAAAAAAAJ0/7-_cPlabHbQ/s1600/Captura+de+tela+2011-03-05+a%25CC%2580s+19.42.00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="270" src="https://lh3.googleusercontent.com/-pACL0E7Sxt8/TXK8vTHfWFI/AAAAAAAAAJ0/7-_cPlabHbQ/s400/Captura+de+tela+2011-03-05+a%25CC%2580s+19.42.00.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; Se você pretende desenvolver aplicativos e vender na AppStore, o meu conselho é que você habitue-se a desenvolver o seu aplicativo todo em inglês, incluindo nome e mensagens, você pode depois criar uma opção multi idioma, mas como o mercado mais rentável é o mercado internacional, não pense que um consumidor americano, inglês ou australiano vai sequer olhar para um aplicativo que não esteja no idioma de Shakespeare. Também esteja preparado para dar suporte em inglês.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;Se o idioma do grande bardo é um problema para você, e sua intenção é realmente ganhar dinheiro com o mercado de aplicativos para o iOS, o melhor investimento nem será um hardware Mac, mas um curso de inglês urgente, ou você ficará limitado ao mercado de língua portuguesa, provavelmente mais especificamente ao Brasil, que é uma fração bem pequena no mercado potencial total.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; Nestes tópicos criaremos o aplicativo todo em inglês, como se fosse um aplicativo voltado para comercialização na AppStore internacional da Apple. Mais uma vez meu conselho: habitue-se à isto, ou você ficará frustrado com a baixa saída dos seus aplicativos.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Quando terminar de criar o aplicativo, será mostrada a tela de projeto do xCode, com o projeto de Calculator_01 e seus arquivos, conforme abaixo:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-uAjc-c9A8Sg/TXLKJsYZrqI/AAAAAAAAAJ4/FXLL4ShYy1U/s1600/xCode+Projeto+Calculator_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="292" src="https://lh6.googleusercontent.com/-uAjc-c9A8Sg/TXLKJsYZrqI/AAAAAAAAAJ4/FXLL4ShYy1U/s400/xCode+Projeto+Calculator_01.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;Veja que, se você está habituado com outras IDEs como Eclipse, Visual Studio, Delphi, o xCode não é assim tão estranho, basicamente você tem na parte esquerda da tela a visualização do projeto em esquema de árvore, onde você pode ver os arquivos que compõem o projeto, quando você selecionar um arquivo ou pasta nesta árvore, no painel a direita, na parte superior são mostrados os arquivos que estão sob esta pasta, e ao selecionar um arquivo neste painel superior à direita, você verá o arquivo no painel inferior, se for possível mostrar-lo.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Ou seja, o esquema é relativamente simples.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Já temos o nosso projeto iniciado, os arquivos básicos que devem fazer parte dele já foram gerados de forma automática pelo xCode, iremos adiante complementar os arquivos e recursos e começar a produzir código.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Como o Objective C é uma linguagem orientada a objetos, iremos trabalhar dentro desta filosofia para produzir o nosso aplicativo. Iremos criar uma classe que irá fornecer as funções básicas de uma calculadora, ou seja armazenar os operadores, fazer as quatro operações básicas e armazenar o resultado. Nesta primeira aproximação não trabalharemos com agrupamento de operações, iremos utilizar as operações par a par a medida que forem sendo realizadas, ou seja, iremos armazenar um valor, aceitar um operador e outro valor, e fazer a operação entre estes dois operadores e guardar o resultado, que será o nosso valor armazenado para prosseguir as operações, à menos que o usuário clique em C (Clear) para zerar o acumulador e começar uma nova operação a partir do zero.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Posts anteriores desta série:&lt;br /&gt;-&amp;nbsp;&lt;a href="http://acidbytes.blogspot.com/2011/03/criando-um-aplicativo-para-iphone-no.html"&gt;Criando um aplicativo para iPhone no xCode - Parte 1&lt;/a&gt;&lt;br /&gt;-&amp;nbsp;&lt;a href="http://acidbytes.blogspot.com/2011/03/criando-um-aplicativo-para-iphone-no_01.html"&gt;Criando um aplicativo para iPhone no xCode - Parte 1 - Adendo&lt;/a&gt;.&lt;br /&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/18008684-5528765688186447188?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/5528765688186447188/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=5528765688186447188' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/5528765688186447188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/5528765688186447188'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2011/03/criando-um-aplicativo-para-iphone-no_05.html' title='Criando um aplicativo para iPhone no xCode - Parte 2 -'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh5.googleusercontent.com/-vuu_YN1y-5s/TWwx1_WJkBI/AAAAAAAAAJg/w51juHutqXs/s72-c/xcode.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-4283670439556131773</id><published>2011-03-01T13:26:00.000-03:00</published><updated>2011-03-01T13:26:15.371-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='iOS'/><category scheme='http://www.blogger.com/atom/ns#' term='MacOS'/><title type='text'>Criando um aplicativo para iPhone no xCode - Parte 1 - adendo</title><content type='html'>&lt;div style="text-align: justify;"&gt;Em complemento ao post anterior, segue aqui um mapa das teclas de atalho para o xCode, muitas vezes é mais produtivo ir direto na tecla de atalho do que usar o mouse. É uma boa idéia você baixar a imagem e imprimir para ter a mão quando estiver trabalhando no xCode.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="https://lh4.googleusercontent.com/-7NHMr9OleOo/TW0d73AT-UI/AAAAAAAAAJk/EY6Kr9ET0oc/s1600/Xcode-Shortcuts-B_W2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh4.googleusercontent.com/-7NHMr9OleOo/TW0d73AT-UI/AAAAAAAAAJk/EY6Kr9ET0oc/s320/Xcode-Shortcuts-B_W2.png" width="309" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&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/18008684-4283670439556131773?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/4283670439556131773/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=4283670439556131773' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/4283670439556131773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/4283670439556131773'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2011/03/criando-um-aplicativo-para-iphone-no_01.html' title='Criando um aplicativo para iPhone no xCode - Parte 1 - adendo'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh4.googleusercontent.com/-7NHMr9OleOo/TW0d73AT-UI/AAAAAAAAAJk/EY6Kr9ET0oc/s72-c/Xcode-Shortcuts-B_W2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-3817186057442369825</id><published>2011-03-01T13:12:00.001-03:00</published><updated>2011-03-01T13:19:16.265-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Informática'/><category scheme='http://www.blogger.com/atom/ns#' term='iOS'/><category scheme='http://www.blogger.com/atom/ns#' term='MacOS'/><title type='text'>Criando um aplicativo para iPhone no xCode - Parte 1</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="https://lh5.googleusercontent.com/-vuu_YN1y-5s/TWwx1_WJkBI/AAAAAAAAAJg/w51juHutqXs/s1600/xcode.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh5.googleusercontent.com/-vuu_YN1y-5s/TWwx1_WJkBI/AAAAAAAAAJg/w51juHutqXs/s320/xcode.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Muitos desenvolvedores gostariam de saber como desenvolver aplicativos para o mercado do iOS, o sistema operacional para o iPhone, iPad e iPod.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Na busca por isso, descobre-se que a linguagem nativa para isso é o Objective C, a parte boa é que a IDE para esta linguagem, e o SDK para o iOS é free e pode ser baixado direto do site da apple em &lt;a href="http://developer.apple.com/devcenter/ios/index.action"&gt;http://developer.apple.com/devcenter/ios/index.action&lt;/a&gt;, você pode se inscrever no programa de desenvolvedores da apple sem custo inicial.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Você só irá pagar as taxas da apple quando (e se) decidir comercializar seus aplicativos na appStore, na época da postagem deste arquivo, a taxa estava em U$ 99,00 /ano.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A idéia desta série de postagens é demonstrar o que é necessário para  se desenvolver para o iOS, como se faz isto, e os meandros da linguagem  e da IDE para os gadgets da Apple.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sempre fui partidário que a melhor forma de aprendizado é:&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;1 - Mão na massa - ou seja, se aprende melhor na prática mesmo.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;2 - Na medida que aprender, você deve ensinar, disseminar conhecimento é a melhor forma de evoluir.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dito isto, o que pretendo fazer é um tutorial passo a passo,  desde a instalação do ambiente, e desenvolver um programa básico, para  fixar os conceitos da IDE e da linguagem. Nosso programa de exemplo não será nenhum prosaico Hello World, acho que isso funcionou muito bem para Dennis Ritchie quando mostrou ao mundo a linguagem C, mas hoje em dia apelar para isso é uma completa perda de tempo. Na minha opinião, isso é para quem não quer se comprometer com o que escreve. Com isto, vamos desenvolver um programinha um pouco mais pretensioso, mas igualmente simples: uma calculadora, que servirá para ilustrar uma série de conceitos da IDE e da linguagem.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Depois de pronta, vamos aos poucos implementando outras funcionalidades nela, espero que com a colaboração de todos que acharem esta série de posts útil.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; No artigo anterior, mostramos como instalar o MacOS X em uma máquina virtual em Virtual Box, pretendo disponibilizar aqui também um link para uma máquina montada em VMWare.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Novamente destaco que, isto é bom para você conhecer o ambiente, aprender um pouco, mas quando for desenvolver a sério, considere adquirir um hardware Apple, a diferença na sua produtividade será fantástica, acredite em mim (todos estes posts estão sendo escritos direto do MacBook que estou usando para desenvolver, acredite seria muito penoso fazer isto de uma VM).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Uma vez instalado o MacOS X (no momento você precisa, no mínimo, do Snow Leopard para usar o SKD 4 do iOS), acesse o site de desenvolvedores da Apple, no link postado no inicio deste artigo, baixe os pacotes (é grande, a imagem do DVD é aproximadamente 3,5 Gb), e instale no Mac.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Primeira questão: Qual a linguagem que vamos utilizar?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Vamos utilizar Objective C que, para quem acha que por saber bem C estará em casa, convém antes fazer uma pequena apresentação do ObjC.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Primeiro, ObjC algumas vezes será igual a C, outras vezes será igual a Smalltalk, mas na maioria das vezes será apenas levemente parecida com uma ou outra destas linguagens, sendo diferente de ambas. Coisas da Apple (quem teve que ralar com o Apple Basic nos primórdios da programação vai entender de cara o que estou escrevendo)!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A origem é lá nos idos dos anos 90, quando Steve Jobs fez um acordo com a Apple, onde ele entrou com o traseiro e os executivos da Apple na época entraram com os pés. Na rua, com alguma grana que ele e Wozniak haviam recebido (sim, Jobs não fundou a Apple sózinho, mas isso é outra história) realizou alguns investimentos em startups de TI, um destes investimentos foi a aquisição de parte de uma startup chamada Next, que vinha trabalhando duro em workstations para processamento gráfico pesado, e assim acabou incorporando uma linguagem dedicada para isto, que foi criada por Brad Cox e Tom Love para a empresa de ambos, a StepStone, que foi posteriormente licenciada pela Next.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Exato, se você pensou que esta linguagem era Objective C, acertou.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Quando Jobs voltou para a Apple, para tirá-la da quase falência para o Olimpo que desfruta hoje, uma das condições foi a aquisição da Next, que era a sua "menina dos olhos".&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ao assumir a direção dos negócios, verificou a necessidade da reformulação de vários produtos, incluindo o próprio sistema operacional, que nessa época estava bem defasado e padecia de um certo atraso tecnológico. Para toda essa empreitada foi escolhido o Objective C, e o resto faz parte da história.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A primeira barreira que o desenvolver novato na plataforma Apple vai se deparar, é com a própria IDE xCode. No inicio pode parecer meio estranho, é bem diferente das outras IDEs que você possa estar acostumado, estou comparando com NetBeans, Eclipse, Visual Studio, Delphi. Mas depois de 1 ou 2 horas de uso você pega o "jeitão" da coisa, e quando for ver, já estará dominando o xCode.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; O xCode vem por padrão junto com o sistema operacional MacOS, para desenvolver direto para o MacOS você não precisará de mais nada, mas para desenvolver para o sistema operacional iOS, dos gadgets da apple, você precisa baixar o SDK no link do inicio do artigo.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Se você não estiver visualizando o xCode na sua barra de aplicativos, vá em &lt;b style="color: red;"&gt;&lt;disco do="" mac=""&gt;/Developer/Applications&lt;/disco&gt;&lt;/b&gt; e você deverá encontrar o xCode. Pode ocorrer também que o xCode não tenha sido instalado quando você instalou o sistema operacional na máquina, neste caso basta rodar novamente o DVD de instalação do MacOS X e instalar o aplicativo, depois disso, o xCode deverá estar no diretório mencionando anteriormente.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Atenção, depois do xCode instalado você deverá instalar o SDK para o iOS, se você instalou o SDK e depois instalou o xCode, deverá refazer a instalação do SDK para que essa opção apareça no xCode, caso contrário você só terá a opção de desenvolvimento para o MacOS.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IDE instalada, vamos definir o nosso projeto:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Será uma calculadora para fazer as 4 operações básicas.&lt;/li&gt;&lt;li&gt;Não terá, pelo menos nesta primeira versão, alguns recursos como: memória adicional, persistência dos resultados, modo alternativo além do decimal.&lt;/li&gt;&lt;li&gt;Sem grandes sofisticações visuais, porém vamos cuidar para que, embora simples, seja ao menos bonitinha. Leve em conta sempre que, o design é tão importante quanto a funcionalidade, você estará desenvolvendo para um público acostumado ao belo design dos equipamentos e aplicativos da Apple, um público bem mais exigente neste quesito. Se pretende desenvolver a sério e tentar ganhar algum dinheiro no mercado do iOS, cuide sempre do design, e no fim do projeto, cuide novamente do design, e antes da publicação final, reveja novamente o design.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; Bom, no próximo post vamos iniciar a mão na massa de verdade, definindo visualmente como será o nosso aplicativo e vamos começar a fazer um pouco de código de verdade. See you guys!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-3817186057442369825?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/3817186057442369825/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=3817186057442369825' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/3817186057442369825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/3817186057442369825'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2011/03/criando-um-aplicativo-para-iphone-no.html' title='Criando um aplicativo para iPhone no xCode - Parte 1'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh5.googleusercontent.com/-vuu_YN1y-5s/TWwx1_WJkBI/AAAAAAAAAJg/w51juHutqXs/s72-c/xcode.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-6016844244704712180</id><published>2011-02-21T23:00:00.001-03:00</published><updated>2011-02-21T23:00:30.042-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='virtualização'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Informática'/><category scheme='http://www.blogger.com/atom/ns#' term='iOS'/><category scheme='http://www.blogger.com/atom/ns#' term='MacOS'/><title type='text'>MacOS X Snow Leopard no Virtual Box</title><content type='html'>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_0euyjp4V3iA/TWMYceOHNCI/AAAAAAAAAIQ/GSggcWqPRus/s1600-h/apple-mac-os-x-snow-leopard-box-top%5B4%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 7px 5px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="apple-mac-os-x-snow-leopard-box-top" border="0" alt="apple-mac-os-x-snow-leopard-box-top" align="left" src="http://lh3.ggpht.com/_0euyjp4V3iA/TWMYdCp_JUI/AAAAAAAAAIU/Sg5vZ4ACh20/apple-mac-os-x-snow-leopard-box-top_thumb%5B2%5D.jpg?imgmax=800" width="172" height="243" /&gt;&lt;/a&gt;OK, você está querendo conhecer ou experimentar o MacOS X Snow Leopard, quer ver o que tem de especial o gatinho das neves do tio Jobs, ou quer apenas matar a curiosidade.&lt;/p&gt;  &lt;p&gt;Então, o que fazer? A opção legal é comprar um Mac, a opção para quem quer apenas travar conhecimentos com o SO da maçã é montar uma máquina virtual, e experimentar.&lt;/p&gt;  &lt;p&gt;Existem muitos tutoriais na net sobre virtualizar o MacOS X no VMWare, mas encontrei poucos, e um tanto incompletos, em inglês, para Virtual Box.   &lt;br /&gt;Pessoalmente prefiro o Virtual Box, ele consome bem menos recursos da máquina do que o VMWare, todas as vezes que tentei o VMWare, ele consumiu memória e capacidade de processamento com o apetite de um tigre siberiano em jejum prolongado.&lt;/p&gt;  &lt;p&gt;Obs.: Estarei disponibilizando este material em formato PDF no site da empresa (&lt;a href="http://www.spectrus.com.br"&gt;www.spectrus.com.br&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#c0504d"&gt;Antes de iniciar, um aviso legal&lt;/font&gt;&lt;/strong&gt;:    &lt;br /&gt;A Apple não permite que o seu sistema operacional seja instalado em outro hardware que não seja Apple. Portanto, legalmente, se você deseja usar o MacOS deverá comprar um hardware Apple.     &lt;br /&gt;Se você pretende usar o MacOS para algo além de simplesmente matar a curiosidade, eu recomendo enfaticamente que você compre um hardware Apple, no meu caso, cuja finalidade é para desenvolvimento para o iOS (iPhone, iPad, iPod), eu iniciei virtualizando o MacOS para experimentar, e depois parti para comprar um MacBook, a diferença é bem grande em termos de desempenho, lembre-se de que você está rodando uma máquina Virtual, que usa apenas uma parcela dos recursos do hospedeiro.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#000000"&gt;Requisitos do sistema&lt;/font&gt;&lt;/strong&gt;:    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; O que você precisa para fazer a brincadeira funcionar:    &lt;br /&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;1 –&lt;/font&gt;&lt;/strong&gt; MacOS X Snow Leopard (lógico) – Você pode baixar de várias fontes na net, inclusive torrents. Porém recomendo que você adquira um DVD do MacOS X, esse é o caminho legal, até se você desejar usá-lo mais seriamente depois. &lt;strong&gt;R$ 79,00 na saraiva completinho&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;2 –&lt;/font&gt;&lt;/strong&gt; Computador com, pelo menos, 2 Gb de memória RAM, recomendo 3 ou mais, para não ficar lento.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;3 –&lt;/font&gt;&lt;/strong&gt; 20Gb de espaço no HD, no mínimo.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;4 –&lt;/font&gt;&lt;/strong&gt; CPU com suporte a tecnologias de virtualização (verifique isto na sua Bios), se não tiver, esqueça, não funciona.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;5 –&lt;/font&gt;&lt;/strong&gt; O Virtual Box, em sua última versão (&lt;a href="http://www.virtualbox.org"&gt;www.virtualbox.org&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#333333"&gt;Montando a máquina virtual&lt;/font&gt;&lt;/strong&gt;….&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; O processo é exatamente o mesmo da montagem de qualquer máquina virtual no Virtual Box, vamos a ele.&lt;/p&gt;  &lt;p&gt;1 – Acionar o Virtual Box, clicar em &lt;strong&gt;Máquina/Novo&lt;/strong&gt; ou &lt;strong&gt;Ctrl + N&lt;/strong&gt; ou no botão &lt;strong&gt;Novo&lt;/strong&gt; na barra de ferramentas.    &lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_0euyjp4V3iA/TWMYeD0P_tI/AAAAAAAAAIY/9MlIDOIAzGE/s1600-h/VBoxMacOS_01%5B2%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="VBoxMacOS_01" border="0" alt="VBoxMacOS_01" src="http://lh5.ggpht.com/_0euyjp4V3iA/TWMYfDylChI/AAAAAAAAAIc/i0-CgBH3m0Q/VBoxMacOS_01_thumb.png?imgmax=800" width="244" height="227" /&gt;&lt;/a&gt;    &lt;br /&gt;2 – Irá abrir o assistente para criação de máquina virtual, clique em &lt;strong&gt;Próximo&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;3 – Escolha como sistema operacional &lt;strong&gt;Mac OS X&lt;/strong&gt;, em versão escolha &lt;strong&gt;MAC OS X Server&lt;/strong&gt;, eu dei o nome de &lt;strong&gt;MacOSX_SL &lt;/strong&gt;para a nova máquina virtual.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_0euyjp4V3iA/TWMYgJVB7YI/AAAAAAAAAIg/wfRU4LRKV0U/s1600-h/VBoxMacOS_02%5B2%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="VBoxMacOS_02" border="0" alt="VBoxMacOS_02" src="http://lh4.ggpht.com/_0euyjp4V3iA/TWMYgwZFLgI/AAAAAAAAAIk/37usJv7hcBM/VBoxMacOS_02_thumb.png?imgmax=800" width="244" height="177" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;4 – Defina a quantidade de memória RAM necessária para a nova máquina virtual. O valor mínimo é 1Gb para uma utilização apenas para testes, apenas para sentir o “cheiro” do SO, por assim dizer. Se você tiver mais memória, recomendo designar pelo menos 2Gb para o novo SO ou mais.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;&amp;#160;&amp;#160; Para ambientes Windows, como regra, deixe pelo menos 1Gb para o Windows.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Obs.: Lembre-se de que tio Jobs e seus garotos são exigentes, o Snow Leopard exige um hardware de boa qualidade, é normal placas de rede ou de video, de marcas menos “conceituadas” não funcionarem com o novo SO. No meu caso, quando montei a VM, eu fiz no meu notebook, é um HP Pavillion DV6000 com uma placa de vídeo GeForce Go 8400, processador Intel. Tenho relatos de amigos que tentaram o mesmo em máquinas com processador AMD e não obtiveram sucesso.   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;5 – Escolha um novo disco rígido virtual na tela que segue.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_0euyjp4V3iA/TWMYhmTkgkI/AAAAAAAAAIo/HkRJUVZWMAs/s1600-h/VBoxMacOS_04%5B2%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="VBoxMacOS_04" border="0" alt="VBoxMacOS_04" src="http://lh5.ggpht.com/_0euyjp4V3iA/TWMYjcOoqNI/AAAAAAAAAIs/YDnDe6_IzQI/VBoxMacOS_04_thumb.png?imgmax=800" width="244" height="177" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;6 – Clique em avançar, e escolha a forma do novo disco rígido, escolha &lt;strong&gt;Armazenamento dinâmicamente expansível&lt;/strong&gt;, isto fará com que o Virtual Box crie um arquivo com o tamanho mínimo necessário e irá expandi-lo a medida que for surgindo a necessidade de mais espaço. Mas atenção, o tamanho só irá crescer até o limite que você determinar para o HD, no caso que recomendamos (20GB).    &lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_0euyjp4V3iA/TWMYkD55DzI/AAAAAAAAAIw/nkuNs3k4Apg/s1600-h/VBoxMacOS_05%5B2%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="VBoxMacOS_05" border="0" alt="VBoxMacOS_05" src="http://lh3.ggpht.com/_0euyjp4V3iA/TWMYk2Hw7MI/AAAAAAAAAI0/_iQdm8MOpQM/VBoxMacOS_05_thumb.png?imgmax=800" width="244" height="167" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;7 – Mantenha o tamanho mínimo de 20Gb, não é recomendável diminuir este tamanho, ou você poderá ter erros durante a instalação e a VM não funcionará.   &lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_0euyjp4V3iA/TWMYl_N_4fI/AAAAAAAAAI4/AAvABD5GbUw/s1600-h/VBoxMacOS_06%5B2%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="VBoxMacOS_06" border="0" alt="VBoxMacOS_06" src="http://lh3.ggpht.com/_0euyjp4V3iA/TWMYm9k0_fI/AAAAAAAAAI8/yi0kL81NQbo/VBoxMacOS_06_thumb.png?imgmax=800" width="244" height="167" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;8 – O Virtual Box irá lhe apresentar uma tela de resumo da instalação, com as opções que você determinou até aqui, confira e clique em &lt;strong&gt;Finalizar&lt;/strong&gt; se as opções estiverem corretas, ou clique em &lt;strong&gt;Cancelar&lt;/strong&gt; para rever as configurações.&lt;/p&gt;  &lt;p&gt;9 – Uma nova máquina virtual será criada, e você poderá vê-la na lista de máquinas do Virtual Box, seu status estará como &lt;strong&gt;desligada&lt;/strong&gt;.    &lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_0euyjp4V3iA/TWMYn42AbcI/AAAAAAAAAJA/womZS9OOZ90/s1600-h/VBoxMacOS_07%5B2%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="VBoxMacOS_07" border="0" alt="VBoxMacOS_07" src="http://lh5.ggpht.com/_0euyjp4V3iA/TWMYogGbVSI/AAAAAAAAAJE/VAuHkm368iQ/VBoxMacOS_07_thumb.png?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;10 – Antes de instalar o MacOS, é necessário efetuar alguns ajustes, para que a instalação possa ocorrer normalmente e a máquina rodar sem maiores problemas.   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;11 – Com a nova máquina virtual selecionada, clique em &lt;strong&gt;CONFIGURAÇÕES&lt;/strong&gt;, para abrir os ajustes desta máquina.    &lt;br /&gt;11.1 – Clique em &lt;strong&gt;Sistemas&lt;/strong&gt;, desmarque a opção &lt;strong&gt;Habilitar EFI (sistemas especiais apenas)&lt;/strong&gt;.    &lt;br /&gt;    &lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_0euyjp4V3iA/TWMYpshxCZI/AAAAAAAAAJI/QLvBGREcg8I/s1600-h/VBoxMacOS_08%5B2%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="VBoxMacOS_08" border="0" alt="VBoxMacOS_08" src="http://lh6.ggpht.com/_0euyjp4V3iA/TWMYqbl1_7I/AAAAAAAAAJM/mUKS-uNJYlo/VBoxMacOS_08_thumb.png?imgmax=800" width="244" height="171" /&gt;&lt;/a&gt;    &lt;br /&gt;11.2 – Na aba &lt;strong&gt;MONITOR&lt;/strong&gt;, você pode ajustar a quantidade de memória de vídeo que vai destinar ao novo SO e habilitar a aceleração de vídeo em 2D, convém destinar no mínimo 32Mb de memória para a placa de vídeo para uma instalação sem traumas.&lt;/p&gt;  &lt;p&gt;11.3 – Na aba &lt;strong&gt;ARMAZENAMENTO&lt;/strong&gt;, você deve indicar ou “montar” o CD de boot que irá inicializar o SO para que possamos instalá-lo. Se você seguiu o meu conselho e comprou o DVD do MacOS X Snow Leopard, ajuste o drive de CD/DVD para apontar para o drive do seu computador. Se você optou por baixar um &lt;strong&gt;ISO&lt;/strong&gt; da internet, configure o drive de CD/DVD para apontar para este arquivo ISO que contém a imagem do DVD do MacOS X Snow Leopard.     &lt;br /&gt;&lt;strong&gt;Dica:&lt;/strong&gt; Para escolher o arquivo &lt;strong&gt;ISO&lt;/strong&gt; que você deseja, clique no ícone de um CD no campo ao lado do drive de CD/DVD (veja abaixo):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_0euyjp4V3iA/TWMYreWQ88I/AAAAAAAAAJQ/3tqcN2rYvrE/s1600-h/VBoxMacOS_09%5B2%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="VBoxMacOS_09" border="0" alt="VBoxMacOS_09" src="http://lh5.ggpht.com/_0euyjp4V3iA/TWMYsN29eJI/AAAAAAAAAJU/RHjkL9FKWJA/VBoxMacOS_09_thumb.png?imgmax=800" width="244" height="171" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Feito isso, Clique em &lt;strong&gt;OK&lt;/strong&gt;, e já temos a nossa máquina virtual preparada e pronta para o primeiro boot e instalar o MacOS X Snow Leopard.&lt;/p&gt;  &lt;p&gt;12 – Coloque o DVD do MacOS X no drive e na janela principal do Virtual Box, selecione a nova máquina virtual e clique em &lt;strong&gt;INICIAR. &lt;/strong&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Após isto, basta seguir as instruções de instalação do MacOS X, se tudo ocorrer OK, você terá a tela de seleção de idiomas do MacOS X Snow Leopard.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Os passos seguintes são bastante simples, limitando-se a escolher o idioma, escolher a imagem de fundo, e algumas informações sobre o usuário e o ambiente, e aceitação dos termos da licença de uso da Apple.&lt;/p&gt;  &lt;p&gt;Quando chegar na tela de &lt;strong&gt;Seleção do destino&lt;/strong&gt;, em que pergunta: “onde você deseja instalar o Mac OS X”, clique na barra de menus em &lt;strong&gt;Utilitários / utilitários de disco&lt;/strong&gt;, selecione o disco de 20Gb do Virtual Box que criamos, certifique-se de que o formato do volume está marcado como &lt;strong&gt;MAC OS X EXPANDIDO&lt;/strong&gt;, defina um nome para o novo disco, clique em Apagar e confirme a operação toda.&lt;/p&gt;  &lt;p&gt;Com isso você criou a partição de disco, pode fechar o utilitário de disco, basta clicar no menu &lt;strong&gt;UTILITÁRIO DE DISCO / SAIR DO UTILITÁRIO DE DISCO&lt;/strong&gt;, clique no disco récem criado e clique em continuar.&lt;/p&gt;  &lt;p&gt;Atenção: Agora você deve configurar alguns aspectos específicos do MacOS X, que será necessário para prosseguir sem sobressaltos. O principal é marcar os pacotes mais atuais para atualizar, mas atenção, em &lt;strong&gt;KERNELS&lt;/strong&gt;, para processadores &lt;strong&gt;INTEL&lt;/strong&gt; marque a opção &lt;strong&gt;Legacy_Kernel, &lt;/strong&gt;veja abaixo como ficaria para um computador com processador Intel:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_0euyjp4V3iA/TWMYt7wKbuI/AAAAAAAAAJY/_gbA0xBYGJM/s1600-h/mac_options_intel%5B2%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="mac_options_intel" border="0" alt="mac_options_intel" src="http://lh3.ggpht.com/_0euyjp4V3iA/TWMYu1qAcTI/AAAAAAAAAJc/1hHAi6Me6f0/mac_options_intel_thumb.png?imgmax=800" width="244" height="191" /&gt;&lt;/a&gt;    &lt;br /&gt;&amp;#160;&amp;#160; Se o seu processador for AMD, marque a caixa de seleção nomeada como &lt;strong&gt;AMD&lt;/strong&gt; mais abaixo nas opções, geralmente após a opção &lt;strong&gt;System_Support&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Atenção, apenas estas opções deverão estar marcadas.&lt;/p&gt;  &lt;p&gt;Hardware configurado, opções marcadas, clique em &lt;strong&gt;CONCLUÍDO&lt;/strong&gt;, em seguida clique em &lt;strong&gt;INSTALAR.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;O instalador irá efetuar uma checagem da integridade da mídia de instalação, passo que pode seguramente ser ignorado. Depois disso é aguardar a instalação, que dura aproximadamente 10 minutos.   &lt;br /&gt;Uma vez concluída a instalação, será mostrada a contagem regressiva para que a máquina reinicialize.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;IMPORTANTE:&lt;/strong&gt; Antes do reinicio, vá no Virtual Box, menu &lt;strong&gt;Dispositivos / CD / DVD devices&lt;/strong&gt;, e desmarque a opção em que o drive de CD/DVD aponta para o arquivo ISO ou para a midia de instalação do MacOS X, para que o boot seja dado normalmente pelo HD montado.&lt;/p&gt;  &lt;p&gt;Pronto, depois do boot, o MacOS X Snow Leopard irá lhe perguntar sobre os dados de usuário, localização, configuração de teclado, vídeo, etc.&lt;/p&gt;  &lt;p&gt;Pronto, bem-vindo ao seu novo MacOS X Snow Leopard, ou um MacPobre.&lt;/p&gt;  &lt;p&gt;Recomendo que, se você for usar de forma séria o MacOS X, compre um hardware da Apple, verá que a diferença de performance é grande, principalmente se você for usar para desenvolvimento.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;No próximo post: Iniciar a desenvolver para iOS com o Objective C e xCode.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-6016844244704712180?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/6016844244704712180/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=6016844244704712180' title='11 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/6016844244704712180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/6016844244704712180'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2011/02/macos-x-snow-leopard-no-virtual-box.html' title='MacOS X Snow Leopard no Virtual Box'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_0euyjp4V3iA/TWMYdCp_JUI/AAAAAAAAAIU/Sg5vZ4ACh20/s72-c/apple-mac-os-x-snow-leopard-box-top_thumb%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-211528622662749704</id><published>2010-12-01T13:02:00.001-02:00</published><updated>2010-12-01T13:02:59.665-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='virtualização'/><category scheme='http://www.blogger.com/atom/ns#' term='Informática'/><title type='text'>Duplicar Máquinas Virtuais no Virtual Box</title><content type='html'>&lt;a href="http://lh3.ggpht.com/_0euyjp4V3iA/TPZjm5JtyMI/AAAAAAAAAHw/OFiOE3IcC2o/s1600-h/image%5B2%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://lh3.ggpht.com/_0euyjp4V3iA/TPZjnbA7hbI/AAAAAAAAAH0/bd_HdqQ8ZE8/image_thumb.png?imgmax=800" width="144" height="184" /&gt;&lt;/a&gt;   &lt;p align="justify"&gt;O problema: você configurou uma máquina virtual com tudo instalado, ajustado e está rodando afinadíssima, 100%.    &lt;br /&gt;Agora você precisa criar uma nova máquina idêntica, para fins de laboratório, ou para permitir que algum membro da sua equipe trabalhe no mesmo ambiente que já está configurado.&lt;/p&gt;  &lt;p align="justify"&gt;Reinstalar toda a máquina virtual leva tempo, refazer todos os ajustes também, e afinal você virtualizou uma máquina com outro SO (Windows XP, Linux, Solaris, MacOS, FreeBSD, etc), justamente para ter a praticidade de manter a máquina virtual o mais afinada possível e economizar tempo em eventuais reinstalações, mudança de computador, etc.&lt;/p&gt;  &lt;p align="justify"&gt;A solução está em um utilitário de linha de comando que acompanha o Virtual Box, o &lt;strong&gt;&lt;font color="#ff0000"&gt;VBoxManage&lt;/font&gt;&lt;/strong&gt;. Este utilitário tem tudo o que a interface gráfica possui e mais uma penca extra de recursos, na verdade o VBoxManage explora todas as potencialidades de uma máquina virtual, leia o manual do Virtual Box e verifique tudo o que é possível fazer com o VBoxManage, acredite vale a pena.&lt;/p&gt;  &lt;p align="justify"&gt;No nosso caso em questão, duplicar a máquina virtual, mãos à obra:&lt;/p&gt;  &lt;p align="justify"&gt;Ambiente:    &lt;br /&gt;&lt;strong&gt;Host&lt;/strong&gt;: &lt;font color="#ff0000"&gt;&lt;strong&gt;Windows 7 Ultimate&lt;/strong&gt;&lt;/font&gt;.     &lt;br /&gt;&lt;strong&gt;Guest (vm) a ser duplicada&lt;/strong&gt;: &lt;strong&gt;&lt;font color="#ff0000"&gt;Windows XP SP3&lt;/font&gt;&lt;/strong&gt;.     &lt;br /&gt;&lt;strong&gt;Nome físico do arquivo da vm&lt;/strong&gt;: &lt;strong&gt;&lt;font color="#ff0000"&gt;WinXPSP3.vdi&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Vamos clonar a nossa máquina virtual chamada WinXPSP3.vdi para WinXPLab.vdi, que será uma máquina laboratório.&lt;/p&gt;  &lt;p align="justify"&gt;Acesse o prompt de comando (rode como administrador), vá até o diretório em que está instalado o Virtual Box, usualmente em &lt;strong&gt;&lt;em&gt;C:\Arquivos de programas\Oracle\VirtualBox&lt;/em&gt;&lt;/strong&gt;, no prompt de comando digite:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font face="Microsoft Sans Serif"&gt;VBoxManage clonevdi WinXPSP3.vdi WinXPLab.vdi&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;O VBoxManage irá iniciar o processo de clonar a máquina virtual, demora um pouco, ele vai informando o processo, no final a mensagem dever ser mais ou menos isto abaixo:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Oracle VM VirtualBox Command Line Management Interface Version 3.2.10      &lt;br /&gt;(C) 2005-2010 Oracle Corporation       &lt;br /&gt;All rights reserved.&lt;/p&gt;    &lt;p&gt;0%…10%…20%…30%…40%…50%…60%…70%…80%…90%…100%      &lt;br /&gt;Clone hard disk created in format ‘VDI’. UUID: c5aa9c35-7774-4505-9163-9cdb8661844&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="justify"&gt;Pronto, a sua máquina virtual está clonada, preste atenção, que nas novas versões o comando na realidade é &lt;strong&gt;&lt;font color="#ff0000"&gt;clonehd&lt;/font&gt;&lt;/strong&gt;, apesar de clonevdi funcionar também no Windows, não irá funcionar no Linux, preste também atenção que, se o seu SO Hospedeiro for Linux, este faz diferenciação entre letras maiúsculas e minúsculas (assim vboxmanage é diferente de VBoxManage).&lt;/p&gt;  &lt;p align="justify"&gt;Agora para utilizar esta nova máquina clonada, é simples, vá até o gerenciador do Virtual Box, desta vez usando a interface gráfica, crie uma nova máquina virtual (&lt;strong&gt;&lt;font color="#ff0000"&gt;Máquina / Novo&lt;/font&gt;&lt;/strong&gt; ou &lt;strong&gt;&lt;font color="#ff0000"&gt;Ctrl N&lt;/font&gt;&lt;/strong&gt; ).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_0euyjp4V3iA/TPZjoLVghaI/AAAAAAAAAH4/fBISxz2QdvA/s1600-h/image%5B5%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_0euyjp4V3iA/TPZjomS78NI/AAAAAAAAAH8/i0UpR8jrdyk/image_thumb%5B1%5D.png?imgmax=800" width="244" height="202" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Quando o Virtual Box solicitar se você gostaria de criar um novo disco ou usar um já existente, escolha um já existente. Irá abrir uma tela para você escolher o disco, veja que não irá aparecer o clone que você criou, para que você consiga acessar, clique no botão “&lt;strong&gt;&lt;font color="#ff0000"&gt;ACRESCENTAR&lt;/font&gt;&lt;/strong&gt;”, então adicione o disco que você clonou.&lt;/p&gt;  &lt;p&gt;Pronto, sua nova máquina virtual já está pronta.&lt;/p&gt;  &lt;p align="justify"&gt;Uma boa idéia, que eu normalmente uso, é montar uma máquina virtual enxuta, bem afinada, e manter ela como máquina mestre, e a partir dela fazer os clones para as necessidades pontuais (laboratório, verificar vírus, etc).&lt;/p&gt;  &lt;p align="justify"&gt;Bom, pessoal, espero que tenha ajudado a quem precisa duplicar suas vms.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-211528622662749704?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/211528622662749704/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=211528622662749704' title='6 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/211528622662749704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/211528622662749704'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2010/12/duplicar-maquinas-virtuais-no-virtual.html' title='Duplicar Máquinas Virtuais no Virtual Box'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_0euyjp4V3iA/TPZjnbA7hbI/AAAAAAAAAH0/bd_HdqQ8ZE8/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-7933855860416544829</id><published>2010-10-30T20:20:00.001-02:00</published><updated>2010-10-30T20:20:03.120-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='politica'/><category scheme='http://www.blogger.com/atom/ns#' term='cotidiano'/><title type='text'>Vai dar rolo!!!!!!!!!!!</title><content type='html'>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_0euyjp4V3iA/TMyaC68WSAI/AAAAAAAAAHo/DMAJKpg9h4Y/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://lh5.ggpht.com/_0euyjp4V3iA/TMyaEWmfA-I/AAAAAAAAAHs/gGqEbUhY6-M/image_thumb%5B1%5D.png?imgmax=800" width="244" height="183" /&gt;&lt;/a&gt; &lt;strong&gt;Vai dar caca, da grande!!&lt;/strong&gt; &lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160; Na verdade torço para estar totalmente errado e pagar o mico de queimar a língua, mas tudo o que tenho visto, lido, ouvido e que conheço sobre a Sra. Dilma Roussef, me leva a acreditar piamente que, a se confirmar a vitória dela nas urnas, estamos ferrados, teremos um período bem sombrio pela frente.   &lt;br /&gt;&amp;#160;&amp;#160; O povo que vota nela, a maioria principalmente, não parou para pensar nem analisar onde está se metendo, parece estar achando divertido brincar de provocar o leão faminto na jaula, mas ninguém fez a volta para ver se a jaula estava trancada, e a (&lt;strong&gt;má&lt;/strong&gt;) notícia é que sequer existe porta a ser trancada.    &lt;br /&gt;&amp;#160;&amp;#160; Todos os sinais foram dados, nenhum dos eleitores da Sra. Dilma poderá depois reclamar e usar a desculpa de Lula : &amp;quot;Eu não sabia&amp;quot;, sabia sim, assim como Lula sabia, estão ali todos os sinais, indeléveis que são, do que nos espera.    &lt;br /&gt;&amp;#160;&amp;#160; O ruim disso tudo é que, não serão só os que votarem nela que pagarão a fatura, mas todos os brasileiros, ou pelo menos os que não fazem parte da &amp;quot;cumpanherada&amp;quot;, ou seja, a maioria absoluta do povo, incluindo os que viram os sinais, entenderam o que vem pela frente, e optaram por não votar em Dilma, estes também pagarão a fatura, como se tivessem sido tão irresponsáveis quanto os outros, como se não tivessem gritado e avisado que a jaula não tinha porta.    &lt;br /&gt;&amp;#160;&amp;#160; O PNDH 3, depois retirado dos holofotes diante da gritaria da mídia (pelo menos da midia não amestrada), continua valendo, apenas foi retirado DO PROGRAMA DE DILMA, mas continua valendo, em todas as suas cláusulas. Franklin Martins, o censor-mór da república, continua esperando, a espreita e esfregando as mãos, antevendo o gozo da vitória final.    &lt;br /&gt;&amp;#160;&amp;#160; As intenções do foro de São Paulo, continuam valendo e a militância continua com o firme propósito de implantá-lo.     &lt;br /&gt;&amp;#160;&amp;#160; Qual a diferença? Tiveram 8 anos para implantar e não o fizeram, diriam os que acham que a jaula tem tranca.    &lt;br /&gt;&amp;#160;&amp;#160; Ocorre que Lula tem ascendência sobre o PT, sobre os militantes, e é raposa velha, seu objetivo é o poder e, claro, faturar unzinho para a familia e amigos, e com toda a sua história a frente do PT, consegue controlar a militância, e os movimentos à la MST.    &lt;br /&gt;&amp;#160;&amp;#160; já Dilma é bem mais perigosa, um extremista com ideologia e com poder é o muito mais perigoso, e terá a insuflar-lhe idéias uma turma que pode querer tudo, menos liberdade e o bem do povo:     &lt;br /&gt;&amp;#160;&amp;#160; - Zécabum Dirceu - nem precisa explicitar as falcatruas e o perigo deste senhor no governo.    &lt;br /&gt;&amp;#160;&amp;#160; - Franklin Martins - que tem nutrido um profundo amor pelo &amp;quot;&lt;strong&gt;&lt;em&gt;controle social&lt;/em&gt;&lt;/strong&gt;&amp;quot; (leia-se censura) à imprensa, e um ódio não menos profundo pela liberdade e pela crítica, qualquer opinião que não seja elogiosa a sua turma e ao seu projeto de poder, merece ser sumariamente amordaçado, e olha com idéias bem nefastas até mesmo blogueiros e sites de internet com opiniões que não sejam pelego do governo.    &lt;br /&gt;&amp;#160;&amp;#160; - Marco Auréio &amp;quot;Top Top&amp;quot; Garcia - Que não faz segredo para ninguém sobre suas opiniões a cerca de pessoas, órgãos ou entidades que não tenham uma opinião de servilidade canina à sua turma.    &lt;br /&gt;&amp;#160;&amp;#160; Só para citar alguns, sem falar na turma e na ideologia do MST, Stédile e sua turma aguardam apenas o leão sair da jaula, que lembre-se não tem porta, para iniciar seu projeto de expansão, com toda a sua nefasta ideologia e métodos stanilistas.    &lt;br /&gt;&amp;#160;&amp;#160; A militância, principalmente a turma que endeusa Castro, Chavez, Evo Morales, Ahmadinejah, terá desta feita uma força que não teve com Lula, e uma oportunidade que não irá desperdiçar de colocar em prática suas idéias.    &lt;br /&gt;&amp;#160;&amp;#160; Somando-se isso à notória incapacidade administrativa da Sra. Dilma Roussef que, pasmem, conseguiu ser vendida como competente gestora pelo marketing, mas a Dilma do Marketing é uma coisa, a da realidade é muito, mas muito diferente.    &lt;br /&gt;&amp;#160;&amp;#160; Por tudo isso, e mais motivos explícitos, que só não vê quem preferer ignorar, prevejo para um eventual governo Dilma um período muito sombrio e nefasto para o Brasil, com um desempenho pífio em termos de infraestrutura e economia, e um período trevoso em termos de liberdades, tanto para a imprensa quanto para os indivíduos, incluindo perseguições as mais abjetas contra tudo e todos que não forem pelegos do governo.    &lt;br /&gt;&amp;#160;&amp;#160; E ninguém ignora isto, os que nela votam, preferem acreditar na Dilma do marketing, na Dilma inventada pela propaganda, mas sabem sim que a Dilma de verdade é outra, mas tem esperança que a jaula esteja trancada, mas a jaula está SEM PORTA!&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160; ESPERO COM TODA A VONTADE ESTAR TOTALMENTE ERRADO E TER QUE ESCREVER OUTRO POST ME DESCULPANDO DISTO, MAS O PROBLEMA É QUE O &lt;strong&gt;PRG&lt;/strong&gt; (PARTIDO DA REALIDADE GOLPISTA) INSISTE EM DEMONSTRAR O CONTRÁRIO.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-7933855860416544829?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/7933855860416544829/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=7933855860416544829' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/7933855860416544829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/7933855860416544829'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2010/10/vai-dar-rolo.html' title='Vai dar rolo!!!!!!!!!!!'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_0euyjp4V3iA/TMyaEWmfA-I/AAAAAAAAAHs/gGqEbUhY6-M/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-3616268922282507065</id><published>2010-08-19T00:15:00.001-03:00</published><updated>2010-08-19T00:15:22.390-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Backup full agendado em HD Externo no Ubuntu Server 10.04</title><content type='html'>&lt;a href="http://lh3.ggpht.com/_0euyjp4V3iA/TGyhvUnNItI/AAAAAAAAAHQ/-DM0An2vIJk/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://lh6.ggpht.com/_0euyjp4V3iA/TGyhwFw1d4I/AAAAAAAAAHU/BObB30OzFC8/image_thumb%5B2%5D.png?imgmax=800" width="132" height="132" /&gt;&lt;/a&gt;  &lt;p&gt;Bom, vamos lá.&lt;/p&gt;  &lt;p&gt;Cenário: Servidor instalado com Ubuntu 10.04 LTS Server, rede com máquinas Windows (Vista e Seven), no servidor rodando Samba como servidor de arquivos e gerenciador de impressão (Ainda com problemas para detectar os grupos secundários, mas funcionando na base da lista de usuários direto).&lt;/p&gt;  &lt;p&gt;Problema: fazer o backup full dos arquivos do samba, agendado.&lt;/p&gt;  &lt;p&gt;Comprei um case da Akasa, para conexão via USB, que pode receber HDs externos SATA 2,5” ou 3,5”, montei um HD de 2,5” de 160Gb, para ser o HD para guardar os backups, que era o meu antigo HD do notebook que foi trocado por outro de 750Gb, este HD está com sistema NTFS pois rodava Windows Vista, o novo agora roda Windows 7 Ultimate, nem me dei ao trabalho de formatar com ext3 ou outro sistema de unix, mantive o mesmo, só apaguei todos os dados do HD.&lt;/p&gt;  &lt;p&gt;O case da Akasa é este aqui:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_0euyjp4V3iA/TGyhxVT9gDI/AAAAAAAAAHY/6jfwBwvOQXw/s1600-h/image%5B8%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://lh4.ggpht.com/_0euyjp4V3iA/TGyhyS9OF8I/AAAAAAAAAHc/Fd12M8gUt5w/image_thumb%5B4%5D.png?imgmax=800" width="244" height="219" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Akasa Duo Dock, ref: AK-IC008B-BKAM, custa por volta de R$ 130,00, suporta HDs de 2,5”e 3,5”, tem conexão eSata ou USB, funciona 100% no Ubuntu.&lt;/p&gt;  &lt;p&gt;O bixinho é bão, viu?&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&amp;#160;&amp;#160; O processo é bem simples, conecta o Akasa via USB do servidor, ele reconhece automaticamente, aí é só descobrir onde que ele conectou, no meu servidor, conectou com /dev/sdc1 pois o servidor já tem 2 HDs de 500Gb.    &lt;br /&gt;&amp;#160;&amp;#160; Para descobrir onde está o seu HD externo, basta digitar o comando fdisk –l:    &lt;br /&gt;# sudo fdisk –l&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; Ele vai listar as unidades conectadas, e você poderá identificar o HD, aí é só montar o dito cujo, no meu caso eu decidi chamar de akasa mesmo, para saber que é o dock que está montado:   &lt;br /&gt;# sudo mount /mnt/akasa /dev/sdc1&lt;/p&gt;  &lt;p&gt;&amp;#160; Ok, agora o HD externo será acessível sempre via /mnt/akasa, porém teremos um problema, teremos que verificar quando o HD externo estará montado, pois isso só vai ocorrer nos dias do backup, nos outros dias o HD estará armazenado fora da empresa, lógico, mas graças ao comando &lt;strong&gt;&lt;em&gt;&lt;font color="#ff0000"&gt;mountpoint&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt; podemos verificar quando o case estiver conectado, vamos agora fazer o script para rodar o backup periódicamente:&lt;/p&gt;  &lt;p&gt;Obs.: procurei comentar o script para facilitar a compreensão.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;-----------------------------------------------------------------------------     &lt;br /&gt;&lt;font color="#000080"&gt;&lt;strong&gt;&lt;em&gt;#/bin/sh &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#000080"&gt;&lt;strong&gt;&lt;em&gt;# Para conter a data do arquivo de backup que sera gerado           &lt;br /&gt;DTABKP=`date +%Y-%m-%d`            &lt;br /&gt;# Para conter o nome do mes para o arquivo de log - vamos fazer um log por mes            &lt;br /&gt;MESLOG=`date +%B` &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#000080"&gt;&lt;strong&gt;&lt;em&gt;# Diretorio que deve ser origem para o backup.           &lt;br /&gt;DIRORIGEM=&amp;quot;/home/rede/ServPat&amp;quot; &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#000080"&gt;&lt;strong&gt;&lt;em&gt;# Arquivo para gravar o log do backup           &lt;br /&gt;ARQLOG=&amp;quot;/var/log/backup/bkpServPat_log.$MESLOG&amp;quot; &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#000080"&gt;&lt;strong&gt;&lt;em&gt;# Verifica se o case esta montado no ponto definido, ou seja           &lt;br /&gt;#&amp;#160;&amp;#160;&amp;#160; se o HD externo esta conectado no case via usb &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#000080"&gt;&lt;strong&gt;&lt;em&gt;if mountpoint -q /mnt/akasa           &lt;br /&gt;then &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#000080"&gt;&lt;strong&gt;&lt;em&gt;# A sintaxe do TAR e : tar [parametros] [-f arquivo] [-C diretorio] [arquivos...]. &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#000080"&gt;&lt;strong&gt;&lt;em&gt;#Parametros: &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#000080"&gt;&lt;strong&gt;&lt;em&gt;#&amp;#160;&amp;#160;&amp;#160; * -c - cria um novo arquivo tar;           &lt;br /&gt;#&amp;#160;&amp;#160;&amp;#160; * -M - cria, lista ou extrai um arquivo multivolume;            &lt;br /&gt;#&amp;#160;&amp;#160;&amp;#160; * -p - mantem as permissoes originais do(s) arquivo(s);            &lt;br /&gt;#&amp;#160;&amp;#160;&amp;#160; * -r - acrescenta arquivos a um arquivo tar;            &lt;br /&gt;#&amp;#160;&amp;#160;&amp;#160; * -t - exibe o conteudo de um arquivo tar;            &lt;br /&gt;#&amp;#160;&amp;#160;&amp;#160; * -v - exibe detalhes da operacao;            &lt;br /&gt;#&amp;#160;&amp;#160;&amp;#160; * -w - pede confirmacao antes de cada acao;            &lt;br /&gt;#&amp;#160;&amp;#160;&amp;#160; * -x - extrai arquivos de um arquivo tar;            &lt;br /&gt;#&amp;#160;&amp;#160;&amp;#160; * -z - comprime ou extrai arquivos tar resultante com o gzip;            &lt;br /&gt;#&amp;#160;&amp;#160;&amp;#160; * -j - comprime ou extrai arquivos tar resultante com o bz2;            &lt;br /&gt;#&amp;#160;&amp;#160;&amp;#160; * -f - especifica o arquivo tar a ser usado;            &lt;br /&gt;#&amp;#160;&amp;#160;&amp;#160; * -C - especifica o diretorio dos arquivos a serem armazenados.            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; # Compacta a pasta da rede e joga para o diretorio do HD que esta no case USB            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; tar -czvf /mnt/akasa/Backups/bkpServPat_$DTABKP.tar.gz $DIRORIGEM &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#000080"&gt;&lt;strong&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; # Variavel para retorno das operacoes, para pegar algum erro           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; RETORNO=$? &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#000080"&gt;&lt;strong&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; # SE o retono de erro != 0, esta com erro &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#000080"&gt;&lt;strong&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; if [ $RETORNO != &amp;quot;0&amp;quot; ]            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; then            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; # Grava o LOG com o codigo do Erro encontrado &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#000080"&gt;&lt;strong&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; echo &amp;quot;================================================&amp;quot; &amp;gt;&amp;gt; $ARQLOG           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; echo &amp;quot;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ********&amp;#160; E R R O ********&amp;quot; &amp;gt;&amp;gt; $ARQLOG            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; echo &amp;quot;Erro na gravacao do backup da rede = $RETORNO&amp;quot; &amp;gt;&amp;gt; $ARQLOG            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; echo `date` &amp;gt;&amp;gt; $ARQLOG            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; echo &amp;quot;================================================&amp;quot; &amp;gt;&amp;gt; $ARQLOG &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#000080"&gt;&lt;strong&gt;&lt;em&gt;&amp;#160;&amp;#160; else           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; # Senão&amp;#160; esta sem erro            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; # Grava no log informando que esta tudo OK            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; echo &amp;quot;================================================&amp;quot; &amp;gt;&amp;gt; $ARQLOG            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; echo &amp;quot;Backup da rede esta OK&amp;quot; &amp;gt;&amp;gt; $ARQLOG            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; echo `date` &amp;gt;&amp;gt; $ARQLOG            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; echo &amp;quot;================================================&amp;quot; &amp;gt;&amp;gt; $ARQLOG &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#000080"&gt;&lt;strong&gt;&lt;em&gt;&amp;#160;&amp;#160; fi&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#000080"&gt;&lt;strong&gt;&lt;em&gt;fi&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Pronto, agora é só colocar o script no cron do Linux, e voilá, é sossegado.   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Não é um sistema de backup a prova de furacões e quedas de meteoros, mas é bem seguro.&lt;/p&gt;  &lt;p&gt;Dica: Além do webmin (o meu preferido) para administrar o servidor remotamente, uso também o putty que permite um acesso direto ao terminal do server, baixe de &lt;a href="http://www.putty.org"&gt;http://www.putty.org&lt;/a&gt; .&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-3616268922282507065?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/3616268922282507065/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=3616268922282507065' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/3616268922282507065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/3616268922282507065'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2010/08/backup-full-agendado-em-hd-externo-no.html' title='Backup full agendado em HD Externo no Ubuntu Server 10.04'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_0euyjp4V3iA/TGyhwFw1d4I/AAAAAAAAAHU/BObB30OzFC8/s72-c/image_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-8515440250190163739</id><published>2010-04-06T18:00:00.002-03:00</published><updated>2010-04-06T18:08:29.081-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Informática'/><category scheme='http://www.blogger.com/atom/ns#' term='servidores'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Administrando seu servidor Linux via webmin</title><content type='html'>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_0euyjp4V3iA/S7ug48sp53I/AAAAAAAAAHE/ZtKO06rYnSQ/s1600-h/webmin-blue%5B4%5D.png"&gt;&lt;img style="border: 0px none; display: inline; margin-left: 0px; margin-right: 0px;" title="webmin-blue" alt="webmin-blue" src="http://lh6.ggpht.com/_0euyjp4V3iA/S7ug5tVAH-I/AAAAAAAAAHI/9xZGkP9W44w/webmin-blue_thumb%5B2%5D.png?imgmax=800" align="left" border="0" height="59" width="240" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p align="justify"&gt;    Ok, você decidiu montar um servidor para a sua empresa ou para a sua casa, para as tarefas comuns de um servidor, compartilhamento de arquivos, impressoras, banco de dados, servidor web, etc.&lt;/p&gt; &lt;p align="justify"&gt;        Eu particularmente prefiro uma interface amigável para administração, não tenho problemas com linha de comando, simplesmente encontro meios mais úteis para investir meu tempo, além do que, me é muito mais agradável uma interface amigável do que a linha de comando, que por longos anos me acompanhou na administração de servidores dos mais diferentes tipos e sabores de SO.&lt;br /&gt;       Aqui vamos ver como administrar o servidor Linux de maneira remota, via navegador internet, com interface amigável, bonita e poderosa, de forma que mesmo que você necessite de linha de comando, pode usar via o navegador.&lt;/p&gt; &lt;p align="justify"&gt;Mãos à obra então:&lt;/p&gt; &lt;p align="justify"&gt;    Meu servidor foi montado com o Ubuntu Linux Server 9.10, e baseado neste é que faremos esta explicação.&lt;br /&gt;    Primeiro, infelizmente o webmin não vem nos repositórios padronizados da distribuição do Ubuntu Server, você terá que instalar o dito cujo, e usar a linha de comando para isso, mas é muito fácil, veja abaixo:&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;div align="justify"&gt;Cheque se você tem todas as bibliotecas para rodar o webmin, para fazer isto, digite o comando abaixo no prompt de comando:&lt;br /&gt;&lt;span style="font-family:Verdana;font-size:78%;color:#800000;"&gt;&lt;strong&gt;sudo apt-get instala perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl libmd5-perl&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;É interessante você atualizar o repositório do APT:&lt;/div&gt;&lt;/li&gt; &lt;ol&gt; &lt;li&gt;abra o arquivo de fontes de pacotes em /etc/apt/sources.list&lt;/li&gt; &lt;li&gt;Adicione, no fim deste arquivo, as duas linhas a seguir:&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;span style="font-family:Verdana;font-size:78%;"&gt;&lt;strong&gt;## Repositório Debian Sarge do WebMin&lt;br /&gt;deb &lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;font-size:78%;"&gt;&lt;strong&gt;http://download.webmin.com/download/repository&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;font-size:78%;"&gt;&lt;strong&gt; sarge contrib&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt; &lt;li&gt;&lt;pre&gt;Atualize o APT, para isto digite o seguinte comando:&lt;br /&gt;&lt;span style="font-family:Verdana;font-size:78%;color:#800000;"&gt;&lt;strong&gt;sudo apt-get update&lt;/strong&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;pre&gt;Agora basta instalar o webmin, com o comando:&lt;br /&gt;&lt;span style="font-family:Verdana;font-size:78%;color:#800000;"&gt;&lt;strong&gt;sudo apt-get instala webmin&lt;/strong&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;     &lt;span style="font-size:100%;"&gt;&lt;span style="font-family: arial;"&gt;Depois de instalado o webmin estará disponível no diretório&lt;br /&gt;&lt;/span&gt;&lt;strong style="font-family: arial;"&gt;/usr/share/webmin&lt;/strong&gt;&lt;span style="font-family: arial;"&gt;, os arquivos de configuração do webmin&lt;br /&gt;junto com todos os módulos dele estarão em &lt;/span&gt;&lt;strong style="font-family: arial;"&gt;/etc/webmin&lt;/strong&gt;&lt;span style="font-family: arial;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;Pronto, para usar o webmin, basta digitar no seu&lt;br /&gt;navegador:&lt;br /&gt;  &lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;strong&gt;https://&amp;lt;servidor&amp;gt;:10000&lt;/strong&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;   10000 é a porta padrão de instalação do Webmin,&lt;br /&gt;troque o &amp;lt;servidor&amp;gt; pelo nome do seu servidor&lt;br /&gt;ou pelo endereço IP do mesmo.&lt;/pre&gt;       Para acessar via internet, você deverá fazer um NAT no seu&lt;br /&gt;roteador para direcionar as requisições na porta 10000 para o&lt;br /&gt;servidor a ser administrado.&lt;br /&gt;&lt;div align="justify"&gt;&lt;pre&gt;   Note que o protocolo padrão para acesso ao&lt;br /&gt;webmin é &lt;strong&gt;HTTPS&lt;/strong&gt; e não &lt;strong&gt;HTTP&lt;/strong&gt;.&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;Nota: Quando você instalar o Ubuntu Server, o único editor de&lt;br /&gt;textos que ele instala é o &lt;strong&gt;&lt;em&gt;vi&lt;/em&gt;&lt;/strong&gt;, que eu pessoalmente acho terrível,&lt;br /&gt;desta maneira para editar o sources.list você pode usar o mcedit,&lt;br /&gt;para instalar o mcedit, que é um editor bem melhor que o vi,&lt;br /&gt;basta usar o apt-get, veja abaixo:&lt;div align="justify"&gt;&lt;div align="justify"&gt;&lt;pre&gt;  &lt;span style="font-family:Verdana;font-size:78%;color:#800000;"&gt;&lt;strong&gt;sudo apt-get instala mc&lt;/strong&gt;&lt;/span&gt;&lt;/pre&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/18008684-8515440250190163739?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/8515440250190163739/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=8515440250190163739' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/8515440250190163739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/8515440250190163739'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2010/04/administrando-seu-servidor-linux-via.html' title='Administrando seu servidor Linux via webmin'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_0euyjp4V3iA/S7ug5tVAH-I/AAAAAAAAAHI/9xZGkP9W44w/s72-c/webmin-blue_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-4249495513348003534</id><published>2010-04-03T12:14:00.001-03:00</published><updated>2010-04-03T19:08:35.999-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='diversos'/><category scheme='http://www.blogger.com/atom/ns#' term='ciência'/><title type='text'>O futuro do combate ao câncer.</title><content type='html'>&lt;table border="1" cellspacing="0" cellpadding="0" width="420"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="418"&gt;         &lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/_0euyjp4V3iA/S7dbZOCpf6I/AAAAAAAAAGw/_Na7LUZEB-g/s1600-h/994-davis_micrograph_medium%5B2%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="994-davis_micrograph_medium" border="0" alt="994-davis_micrograph_medium" src="http://lh5.ggpht.com/_0euyjp4V3iA/S7dbZ_mqblI/AAAAAAAAAG0/jv_XhFy-dAo/994-davis_micrograph_medium_thumb%5B2%5D.jpg?imgmax=800" width="409" height="287" /&gt;&lt;/a&gt;             &lt;br /&gt;&lt;font size="1"&gt;Esta imagem de microscópio eletrônico mostra nano partículas entregando sua carga letal a células cancerosas.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [&lt;strong&gt;Imagem: &lt;a href="http://http://media.caltech.edu/press_releases/13334" target="_blank"&gt;Caltech&lt;/a&gt;/Swaroop Mishra&lt;/strong&gt;]&lt;/font&gt;&amp;#160;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160; Preste bem atenção, você está vendo acima o futuro do combate eficiente ao câncer, a qualquer tipo de câncer. Os pequenos pontos pretos na imagem acima são nanobots, robôs em escala de nanômetros, entregando uma carga letal para células cancerosas, e só para elas. Na verdade esta carga é um cavalo de tróia, ela irá matar a célula com câncer.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; A noticia mais incrível é que isso aí acima não é ficção, a primeira fase de testes em humanos foi um estrondoso sucesso, e o que é melhor ainda, &lt;strong&gt;&lt;em&gt;&lt;font color="#800000"&gt;sem efeitos colaterais&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;.     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; O exército de robôs anti-câncer foi criado no Instituto de Tecnologia da Califórnia (Caltech), pela equipe do Dr. Mark Davis. De acordo com o estudo publicado na prestigiada revista científica &lt;strong&gt;&lt;font color="#800000"&gt;NATURE&lt;/font&gt;&lt;/strong&gt;, a equipe do Dr. Davis desenvolveu uma maneira segura, limpa e eficiente de entregar sequencias de RNAi para células cancerosas, o RNAi é a sigla para Interferência ácida ribonucléica, uma técnica que ataca genes específicos de células malignas, desabilitando funções internas destas células e matando-as.     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; É como um pequeno exércitos de ultra-eficientes e bem treinados agentes especiais, que se infiltram dentro da fortaleza do inimigo, sabotando-a e fazendo com que funções vitais desta fortaleza parem de funcionar, efetivamente levando estas estruturas à morte.     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Para quem é fã de ficção científica, deve se lembrar do Dr. Leonard McCoy da série Jornada nas Estrelas, no filme de 1986 intitulado “&lt;strong&gt;O Retorno à Terra&lt;/strong&gt;”, quando ele injetava em um paciente em um hospital uma dose de nanobots para curar o paciente vitima de uma doença terminal, e resolvia o problema.     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Pois é, mais uma vez a ficção antecipa a realidade.&lt;/p&gt;  &lt;p align="justify"&gt;   &lt;br /&gt;&lt;a href="http://lh4.ggpht.com/_0euyjp4V3iA/S7dbattC86I/AAAAAAAAAG4/1NYBLQBwOtQ/s1600-h/988-Davis_nanoparticle_schematic_medium%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="988-Davis_nanoparticle_schematic_medium" border="0" alt="988-Davis_nanoparticle_schematic_medium" align="left" src="http://lh3.ggpht.com/_0euyjp4V3iA/S7dbbTFeXuI/AAAAAAAAAG8/K-23XSQ1scY/988-Davis_nanoparticle_schematic_medium_thumb%5B1%5D.jpg?imgmax=800" width="244" height="193" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Os pequenos robôs de ataque tem o tamanho de 70 nanômetros, são feitos com 2 polímeros e 1 proteína, que se conecta na superfície das células com câncer, e só nestas.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Estes pequenos robôs carregam uma peça de RNA chamada de &lt;strong&gt;siRNA&lt;/strong&gt;, sigla para RNA de pequena interferência (&lt;strong&gt;&lt;em&gt;small-interfering RNA&lt;/em&gt;&lt;/strong&gt;), este é que desativa a produção de uma proteína nas células com câncer, efetivamente desencadeando a morte da célula.     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; O melhor de tudo é que, depois de entregar sua carga letal para a célula cancerosa, o pequeno robô se desmonta, quebrando-se em partes inofensivas que são posteriormente eliminadas pelo corpo através da urina.     &lt;br /&gt;&amp;#160;&amp;#160; Os pequenos exércitos de nanobots podem ser injetados no paciente via injeção intravenosa, dispensando procedimentos cirúrgicos extensos e caros, uma simples injeção no consultório basta para inserir os pequenos exércitos no campo de batalha, ou seja, no corpo humano.     &lt;br /&gt;&amp;#160;&amp;#160; Tudo isso de forma eficiente, sem nenhum efeito colateral e preservando a qualidade de vida do paciente.     &lt;br /&gt;&amp;#160;&amp;#160; Para saber mais, visite a página do estudo na &lt;a href="http://media.caltech.edu/press_releases/13334" target="_blank"&gt;CalTech&lt;/a&gt; (obs: a página está em inglês, abre em nova janela).&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-4249495513348003534?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/4249495513348003534/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=4249495513348003534' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/4249495513348003534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/4249495513348003534'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2010/04/o-futuro-do-combate-ao-cancer.html' title='O futuro do combate ao câncer.'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_0euyjp4V3iA/S7dbZ_mqblI/AAAAAAAAAG0/jv_XhFy-dAo/s72-c/994-davis_micrograph_medium_thumb%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-8837989999631716105</id><published>2010-01-09T11:41:00.001-02:00</published><updated>2010-01-09T11:41:45.076-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='diversos'/><category scheme='http://www.blogger.com/atom/ns#' term='cotidiano'/><title type='text'>Quando se morre…</title><content type='html'>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_0euyjp4V3iA/S0iHk4ka8nI/AAAAAAAAAGg/bKgealLI-kE/s1600-h/vidaMorte2%5B6%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="vidaMorte2" border="0" alt="vidaMorte2" align="left" src="http://lh3.ggpht.com/_0euyjp4V3iA/S0iHl8TTTSI/AAAAAAAAAGk/rdDJqQV_Nhc/vidaMorte2_thumb%5B4%5D.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Quando se morre realmente? Quando todas as funções vitais param? Quando os aparelhos já não marcam mais nada? Quando o biiiiiiiip continuo do monitor cardíaco soa?&lt;/p&gt;  &lt;p align="justify"&gt;Esta semana pensei muito sobre isso, e concluí que se pode morrer muito antes disso, se pode passar pela vida como um espírito arrastando um cadáver. O que me fez pensar sobre isso é que assisti uma entrevista de um sujeito de 35 anos de idade, que deve ter morrido lá pelos 27, senti muita dó pelo sujeito. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Se morre quando o tédio e a rotina já não suscitam mais revolta, apenas conformismo.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Se morre quando se tem muito mais respostas do que perguntas.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Se morre quando julgamos que apenas o que é antigo é que é bom e que o novo é só lixo, mas também se morre quando se acha que só o novo é que é bom e o antigo é que é só lixo.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Se morre quando se pensa que alguém que possua apenas metade da sua idade não pode ter nada para lhe ensinar, mas também se morre quando se acha que alguém com o dobro, ou mais, também não tem nada a ensinar.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Se morre quando as certezas suplantaram em muito as dúvidas.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Se morre quando se diz “eu te amo” apenas com a boca, e não mais com o coração.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Se morre quando o aperto de mão é apenas um gesto, e não um compromisso.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Se morre quando novos amigos deixam de acontecer.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Se morre quando se faz sempre o mesmo caminho, sem explorar novos lugares, novas cores.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Se morre quando o comodismo impede de fazer novos planos.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Se morre quando se ri cada vez menos, mas se lamenta cada vez mais.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160; Enfim, se morre de muitas maneiras, ainda em vida, pode-se morrer um pouco a cada dia (como já escreveu João Cabral de Melo Neto), basta não viver, basta recusar-se ao mundo.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-8837989999631716105?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/8837989999631716105/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=8837989999631716105' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/8837989999631716105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/8837989999631716105'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2010/01/quando-se-morre.html' title='Quando se morre…'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_0euyjp4V3iA/S0iHl8TTTSI/AAAAAAAAAGk/rdDJqQV_Nhc/s72-c/vidaMorte2_thumb%5B4%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-1380736012284460620</id><published>2010-01-05T12:08:00.001-02:00</published><updated>2010-01-05T12:08:28.541-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='politica'/><category scheme='http://www.blogger.com/atom/ns#' term='diversos'/><category scheme='http://www.blogger.com/atom/ns#' term='cotidiano'/><title type='text'>É realmente uma vergonha!</title><content type='html'>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_0euyjp4V3iA/S0NH2P5KUaI/AAAAAAAAAGY/EHrICHWU3Zg/s1600-h/microfone_email%5B3%5D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="microfone_email" border="0" alt="microfone_email" align="left" src="http://lh4.ggpht.com/_0euyjp4V3iA/S0NH21-hbpI/AAAAAAAAAGc/9YNWUIr-Qak/microfone_email_thumb%5B1%5D.gif?imgmax=800" width="244" height="227" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160; Todo mundo que trabalha em rádio e televisão sabe, microfone é um bicho prá lá de bandido, quando tudo o que você não quer é transmitir o que está falando, ele está lá, aberto, funcionando, esquecido e pronto para jogar para o mundo as besteiras que você falar perto dele.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160; Bóris Casoy provou desta máxima ao apagar das luzes de 2009, em 31 de dezembro no encerramento do Jornal da Band, do qual ele é o âncora, dois garis de São Paulo aparecem, devidamente uniformizados, desejando um feliz 2010 ao povo brasileiro. Na volta do jornal, sem perceber que o áudio estava aberto para o mundo, &lt;a href="http://www1.folha.uol.com.br/folha/videocasts/ult10038u673580.shtml" target="_blank"&gt;Boris Casoy faz uma observação&lt;/a&gt; com um colega de bancada, para lá de preconceituosa: “&lt;strong&gt;&lt;em&gt;&lt;font color="#ff0000"&gt;Que merda… dois lixeiros desejando felicidades… do alto de suas vassouras… dois lixeiros… o mais baixo da escala do trabalho&lt;/font&gt;”&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160; O comentário do apresentador foi repugnante, as desculpas oferecidas e o comentário sobre as desculpas, foi pior ainda, melhor nem ter feito nada, demonstra que foram apenas desculpas protocolares, “para limpar a barra” por assim dizer, em uma entrevista à Folha de S.Paulo revela que na verdade ele apenas sente muito por o microfone estar aberto, não pelo comentário proferido, diz ele: “&lt;strong&gt;&lt;em&gt;&lt;font color="#ff0000"&gt;Foi um erro, vazou, era intervalo e supostamente os microfones estavam desligados&lt;/font&gt;”&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160; Porém tão repugnante quanto o comentário de Boris, são muitos dos artigos que estão sendo escritos condenando-o, uma grande maioria cheios das expressões preferidas dos pseudo-intelectuais e ofensas gratuitas, como “fascista” – nem ao menos esses escribas possuem a noção da exata dimensão deste termo, do contrário não o empregariam a torto e a direito. Até as críticas (justas, diga-se de passagem) que Bóris já fez ao governo Lula são desqualificadas e tratadas como recalque das elites (outro termo que estes escribas adoram usar, mas que empregam sem noção), usam o lamentável e infeliz episódio como se isso pudesse desculpar todos os desmandos, roubos e safadezas que a turma do PT, do mensalão e tantos outros safados já fez ao país, como se um único comentário infeliz apagasse todos os escândalos ocorridos na vida pública brasileira.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Uma pequena amostra das críticas tão repugnantes quanto o fato em si: &lt;a title="http://www.correiodobrasil.com.br/noticia.asp?c=161861" href="http://www.correiodobrasil.com.br/noticia.asp?c=161861"&gt;http://www.correiodobrasil.com.br/noticia.asp?c=161861&lt;/a&gt; (destaque especial para os empregos de “fascistóide”, “colunistas elitistas”, “mídia hegemônica”, “oposição de direita”, “discurso raivoso”, “movimentos grevistas”, “posições imperialistas dos EUA”, e outras pérolas que pululam por todo o texto).&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160; Agora parece que o governo Lula e a quadrilha que infelizmente se instalou no poder devem ser desculpados de todos os roubos e desmandos, apenas porque um jornalista fez um comentário preconceituoso.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160; Bem, eu não acredito nisso, e acho que uma grande parcela do povo brasileiro também não, assim como os benefícios das privatizações também não desculpam a farra e os escândalos que foi o apagar das luzes do governo FHC, um comentário infeliz de um jornalista não invalida as denúncias de corrupção e os escândalos do atual governo.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160; Muito ainda hão de gritar contra as elites, os golpistas, e tantos outros termos que usam contra quem não concorda com os desmandos. Até porque no jargão destes pseudo defensores do povo, qualquer aglomerado de arruaceiros que se reúnam para tentar ir contra a propriedade privada ou os setores produtivos é chamado de “forças democráticas populares”, até os quadrilheiros facínoras do MST merecem destes pseudo-intelectuais desculpas (leia a íntegra do texto no link anterior), como se isso fosse possível.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font color="#333333"&gt;O fato não se altera, Boris Casoy foi repugnante em seu comentário, mas também são repugnantes as invasões e assassinatos do MST, o mensalão, a roubalheira na saúde, nos orçamentos da união, a compra de votos por parte do governo, as mentiras de Lula e Dilma Roussef, o aparelhamento da máquina estatal pela quadrilha que lá se instalou (e não é só o PT), os dólares na cueca, o escândalo do mensalão de Brasília (este uma obra da oposição, provando que não precisa ser do governo ou do PT para fazer bandidagem neste país).&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-1380736012284460620?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/1380736012284460620/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=1380736012284460620' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/1380736012284460620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/1380736012284460620'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2010/01/e-realmente-uma-vergonha.html' title='É realmente uma vergonha!'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_0euyjp4V3iA/S0NH21-hbpI/AAAAAAAAAGc/9YNWUIr-Qak/s72-c/microfone_email_thumb%5B1%5D.gif?imgmax=800' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-7311553037825887385</id><published>2010-01-04T16:22:00.001-02:00</published><updated>2010-01-05T11:11:20.288-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='diversos'/><title type='text'>PRAZOS, PRAZOS – Como cumpri-los?</title><content type='html'>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_0euyjp4V3iA/S0M6dLfzdeI/AAAAAAAAAGM/xIrkLNnMndM/s1600-h/AQUA%20ICONS%20FOLDER%20SCHEDULED%20TASKS.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="AQUA ICONS FOLDER SCHEDULED TASKS" border="0" alt="AQUA ICONS FOLDER SCHEDULED TASKS" align="left" src="http://lh5.ggpht.com/_0euyjp4V3iA/S0Ix0Sr1tcI/AAAAAAAAAGQ/_LItvG585uI/AQUA%20ICONS%20FOLDER%20SCHEDULED%20TASKS_thumb.png?imgmax=800" width="128" height="128" /&gt;&lt;/a&gt;&amp;#160;&amp;#160; Confesso, tenho um problema crônico com prazos, sou ruim com eles (já melhorei muito, eu era péssimo), principalmente em um área como TI, que é (mal) falada por conta do problema dos prazos.     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; O que tenho feito é uma lista de tarefas, na mão mesmo, pois as do computador nenhuma funcionou para mim, sei lá por que motivo mas não funcionou. Divido as tarefas em:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;URGENTES&lt;/strong&gt; – são aquelas que vão te ferrar se não ficarem prontas, ou o cliente vai cancelar o serviço, ou você não vai receber e as contas vão atrasar, ou teu fígado vai ser saboreado cru pelo cliente, e que já estão atrasadas. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;IMPORTANTES – &lt;/strong&gt;São aquelas que se você não fizer vão te dar um problemão, tanto quanto as urgentes, mas ainda não estão atrasadas, ou seja, o garfo ainda não chegou no teu fígado. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;NECESSÁRIAS&lt;/strong&gt; – Aqui entram aquelas que você precisar fazer para ter alguma perspectiva de futuro (pagar a luz, aluguel, reunião com um prospect, evento para fazer contatos, etc.). &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;OUTRAS&lt;/strong&gt; – São aquelas que você pode delegar para outras pessoas ou pode postergar por um longo período sem maiores consequências. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&amp;#160; Estou fazendo o seguinte, divido o dia em resolver 60% de urgentes, 25% de importantes (para que não se tornem urgentes), e divido os 15% restantes entre as necessárias e outras.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; Está dando certo, o meu problema agora é aprender a classificar as tarefas na categoria certa (rsss, nem tudo é perfeito no mundo né?). Mas não sei porque, mesmo eu sendo um cara de TI, de ter aversão à papel, só funcionou quando coloquei a lista no papel!!! Vai entender.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; O meu contador ficou feliz, disse que finalmente conseguiu fazer uma reunião comigo de mais de 30 minutos. Sinal de que as coisas estão melhorando (pelo menos para ele).&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-7311553037825887385?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/7311553037825887385/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=7311553037825887385' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/7311553037825887385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/7311553037825887385'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2010/01/prazos-prazos-como-cumpri-los.html' title='PRAZOS, PRAZOS – Como cumpri-los?'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_0euyjp4V3iA/S0Ix0Sr1tcI/AAAAAAAAAGQ/_LItvG585uI/s72-c/AQUA%20ICONS%20FOLDER%20SCHEDULED%20TASKS_thumb.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-8082735658847829253</id><published>2009-10-10T17:45:00.001-03:00</published><updated>2009-10-10T17:45:59.182-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='politica'/><title type='text'>A desgraça cubana pelos cubanos.</title><content type='html'>&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_0euyjp4V3iA/StDyhLS8rTI/AAAAAAAAAFk/6FvaNYbG0YU/s1600-h/yoani-sanchez%5B4%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="yoani-sanchez" border="0" alt="yoani-sanchez" align="left" src="http://lh6.ggpht.com/_0euyjp4V3iA/StDyhkmrk6I/AAAAAAAAAFo/AsQuSNb-ufM/yoani-sanchez_thumb%5B2%5D.jpg?imgmax=800" width="174" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; A moça aí ao lado é Yoani Sanchez. Pois esta dona é cubana, nasceu, cresceu, foi educada, casou e (ainda) vive em Cuba, aquela ilhota dos irmãos Castro no Caribe.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; Para aqueles que ainda acham que a ilha dos Castro pode servir de bom exemplo para alguma coisa (acredite, tem gente que ainda acha isso), a moça dá um relato realista da situação por lá, sem as maquiagens e ideologias dos pseudo-intelectuais que acham que aquilo lá é uma maravilha (mas não estão dispostos a se mudar para lá e nos poupar de suas chatices né?), a entrevista dela nas páginas amarelas da &lt;a href="http://veja.abril.com.br/071009/tres-mentiras-cuba-p-19.shtml" target="_blank"&gt;Veja&lt;/a&gt; é um relato realista das precárias condições da ilha.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Pois a dona aí recebeu vário prêmios por conta do seu &lt;a href="http://www.desdecuba.com/generaciony/" target="_blank"&gt;blog&lt;/a&gt; que relata o dia-a-dia de Cuba, só que não pode recebe-los, pois sair da ilha nem pensar né?&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; Mas para o Brasil ela pode vir, o Coma Andante da ilha pode ficar tranquilo, pois aqui temos alguns canalhas no poder que se encarregam de, covardemente, repatriar qualquer servo dos Castro que ouse tentar se livrar do jugo, como fez o Tarso Genro no caso dos Boxeadores Cubanos, de forma abjeta e vil.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; E, se você acha que não existem mais idiotas no mundo que acreditem que Cuba e Coréia do Norte (sim, aquela mesma do baixinho amalucado com cabelo punk) sejam paraísos na terra, você não conhece o povinho deste &lt;a href="http://www.vermelho.org.br/blogs/outroladodanoticia/2009/09/27/direita-quer-yoani-sanchez-no-brasil-como-trofeu-anticubano/" target="_blank"&gt;site aqui&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; Eu acho que esse povo que acha Cuba uma maravilha deveria se perguntar porque o povo quer fugir desesperado do paraíso, arriscando até virar comida de tubarão na travessia do golfo do México, seria por masoquismo???&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-8082735658847829253?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/8082735658847829253/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=8082735658847829253' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/8082735658847829253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/8082735658847829253'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2009/10/desgraca-cubana-pelos-cubanos.html' title='A desgraça cubana pelos cubanos.'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_0euyjp4V3iA/StDyhkmrk6I/AAAAAAAAAFo/AsQuSNb-ufM/s72-c/yoani-sanchez_thumb%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-6459387122670398977</id><published>2009-08-25T16:01:00.001-03:00</published><updated>2009-08-25T17:02:55.169-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Informática'/><title type='text'>DbTreeView no Delphi - JvDbTreeView</title><content type='html'>&lt;p align="justify"&gt;Bom, depois de apanhar um pouco para conseguir colocar para funcionar, aqui vai a dica de como fazer um plano de contas ser mostrado numa TreeView, no caso vamos usar a jvDbTreeView que é uma TreeView dbaware no Delphi.&lt;/p&gt;  &lt;p align="justify"&gt;Como vamos usar o componente na JVCL, aqui vai o link para baixar &lt;a title="http://sourceforge.net/projects/jvcl/" href="http://sourceforge.net/projects/jvcl/"&gt;http://sourceforge.net/projects/jvcl/&lt;/a&gt;, é um excelente pacote de componentes, praticamente tudo que você precisar, acaba descobrindo que tem lá.&lt;/p&gt;  &lt;p align="justify"&gt;Criei a minha tabela no Firebird, a estrutura abaixo:   &lt;br /&gt;&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="397"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="108"&gt;&lt;strong&gt;&lt;font color="#800000"&gt;Campo&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="99"&gt;&lt;strong&gt;&lt;font color="#800000"&gt;Tipo&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="188"&gt;&lt;strong&gt;&lt;font color="#800000"&gt;Descrição&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="111"&gt;Cta_ID&lt;/td&gt;        &lt;td valign="top" width="98"&gt;integer&lt;/td&gt;        &lt;td valign="top" width="186"&gt;Numero da conta&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="114"&gt;Cta_Master&lt;/td&gt;        &lt;td valign="top" width="98"&gt;integer&lt;/td&gt;        &lt;td valign="top" width="185"&gt;Conta “pai”&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="116"&gt;Cta_Descricao&lt;/td&gt;        &lt;td valign="top" width="97"&gt;Varchar(30)&lt;/td&gt;        &lt;td valign="top" width="184"&gt;Nome da conta&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p align="justify"&gt;Coloque um componente &lt;strong&gt;JvDbTreeView&lt;/strong&gt; no formulário, conecte-o via a propriedade &lt;strong&gt;DataSource&lt;/strong&gt; à tabela do banco de dados.&lt;/p&gt;  &lt;p align="justify"&gt;Ajuste as suas propriedades do &lt;strong&gt;JvDbTreeView&lt;/strong&gt; como abaixo:    &lt;br /&gt;Obs.: No meu caso o dataSource chama-se &lt;strong&gt;dsPlanContas&lt;/strong&gt;.&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="200"&gt;&lt;strong&gt;&lt;font color="#800000"&gt;Propriedade&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="200"&gt;&lt;strong&gt;&lt;font color="#800000"&gt;Valor&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;DataSource&lt;/td&gt;        &lt;td valign="top" width="200"&gt;dsPlanContas&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;DetailField&lt;/td&gt;        &lt;td valign="top" width="200"&gt;Cta_Master&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;ItemField&lt;/td&gt;        &lt;td valign="top" width="200"&gt;Cta_Descricao&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;MasterField&lt;/td&gt;        &lt;td valign="top" width="200"&gt;Cta_ID&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160; Pronto, já está OK e pronto para funcionar.&lt;/p&gt;  &lt;p align="justify"&gt;A explicação das propriedades é a seguinte:   &lt;br /&gt;&lt;strong&gt;DataSource:&lt;/strong&gt; Obviamente é a conexão à base de dados;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;DetailField:&lt;/strong&gt; É o campo que contém o valor que aponta para a conta pai.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;ItemField:&lt;/strong&gt; é o texto que vai aparecer na TreeView.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;MasterField:&lt;/strong&gt; é a chave única da tabela.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Quem reescreveu o componente deve ter problemas sérios para atribuir nomes às propriedades, custei para conseguir entender, mas aí está o mapa da mina.&lt;/p&gt;  &lt;p align="justify"&gt;Abaixo um exemplo do que está no banco de dados:&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="0" width="350"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td width="59"&gt;&lt;strong&gt;&lt;font color="#800000"&gt;Cta_Id&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td width="76"&gt;&lt;strong&gt;&lt;font color="#800000"&gt;Cta_Master&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td width="213"&gt;&lt;strong&gt;&lt;font color="#800000"&gt;Cta_Descricao&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td width="59"&gt;1&lt;/td&gt;        &lt;td width="76"&gt;0&lt;/td&gt;        &lt;td width="213"&gt;DESPESAS&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td width="59"&gt;2&lt;/td&gt;        &lt;td width="76"&gt;1&lt;/td&gt;        &lt;td width="213"&gt;DESPESAS FIXAS&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td width="59"&gt;3&lt;/td&gt;        &lt;td width="76"&gt;2&lt;/td&gt;        &lt;td width="213"&gt;PESSOAL&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td width="59"&gt;4&lt;/td&gt;        &lt;td width="76"&gt;11&lt;/td&gt;        &lt;td width="213"&gt;ALUGUEL&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td width="59"&gt;5&lt;/td&gt;        &lt;td width="76"&gt;11&lt;/td&gt;        &lt;td width="213"&gt;CONDOMINIO&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td width="59"&gt;6&lt;/td&gt;        &lt;td width="76"&gt;0&lt;/td&gt;        &lt;td width="213"&gt;RECEITAS&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td width="59"&gt;7&lt;/td&gt;        &lt;td width="76"&gt;6&lt;/td&gt;        &lt;td width="213"&gt;RECEITAS DIRETAS&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td width="59"&gt;8&lt;/td&gt;        &lt;td width="76"&gt;3&lt;/td&gt;        &lt;td width="213"&gt;CLT&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td width="59"&gt;9&lt;/td&gt;        &lt;td width="76"&gt;3&lt;/td&gt;        &lt;td width="213"&gt;FREES&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td width="59"&gt;10&lt;/td&gt;        &lt;td width="76"&gt;2&lt;/td&gt;        &lt;td width="213"&gt;CUSTOS DIRETOS &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td width="59"&gt;11&lt;/td&gt;        &lt;td width="76"&gt;10&lt;/td&gt;        &lt;td width="213"&gt;IMÓVEIS&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td width="59"&gt;12&lt;/td&gt;        &lt;td width="76"&gt;1&lt;/td&gt;        &lt;td width="213"&gt;DESPESAS VARIAVEIS&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td width="59"&gt;13&lt;/td&gt;        &lt;td width="76"&gt;12&lt;/td&gt;        &lt;td width="213"&gt;COMBUSTIVEIS&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td width="59"&gt;14&lt;/td&gt;        &lt;td width="76"&gt;12&lt;/td&gt;        &lt;td width="213"&gt;COMISSÕES&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td width="59"&gt;15&lt;/td&gt;        &lt;td width="76"&gt;12&lt;/td&gt;        &lt;td width="213"&gt;MATERIAL DE EXPEDIENTE&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td width="59"&gt;16&lt;/td&gt;        &lt;td width="76"&gt;12&lt;/td&gt;        &lt;td width="213"&gt;MANUTENÇÕES&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td width="59"&gt;17&lt;/td&gt;        &lt;td width="76"&gt;12&lt;/td&gt;        &lt;td width="213"&gt;EXAMES MÉDICOS&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-6459387122670398977?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/6459387122670398977/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=6459387122670398977' title='11 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/6459387122670398977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/6459387122670398977'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2009/08/dbtreeview-no-delphi-jvdbtreeview.html' title='DbTreeView no Delphi - JvDbTreeView'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-397263994310464725</id><published>2009-08-22T14:27:00.001-03:00</published><updated>2009-08-22T14:27:54.736-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='politica'/><category scheme='http://www.blogger.com/atom/ns#' term='diversos'/><category scheme='http://www.blogger.com/atom/ns#' term='Informática'/><title type='text'>A volta da proposta de regulamentar a profissão no mercado de informática.</title><content type='html'>&lt;blockquote&gt;   &lt;p align="justify"&gt;Bom, eu já escrevi diversas vezes, em newsgroups e fóruns sobre este tema, infelizmente nunca no blog. Vou sanar agora esta falha, para que o texto pelo menos fique registrado, e eu possa depois mencionar sem precisar reescrever tudo.&lt;/p&gt;    &lt;p align="justify"&gt;Em primeiro lugar, convém esclarecer que, caso seja aprovada a regulamentação da profissão, eu estaria dentro dessa reserva de mercado, portanto a minha posição nada tem de inveja (como alguns mais exaltados defensores dessa sandice propalam) ou outro sentimento, digamos… “menos nobre”.&lt;/p&gt;    &lt;p align="justify"&gt;Mas sou RADICALMENTE CONTRA a regulamentação da profissão de analista de sistemas, como também de outras como leiloeiro oficial (sim também querem regulamentar), flanelinha (acreditem, é verdade, veja &lt;a href="http://www.pbagora.com.br/conteudo.php?id=20090809145946" target="_blank"&gt;aqui&lt;/a&gt;), capoeirista (duvida? então &lt;a href="http://www.adjorisc.com.br/jornais/obarrigaverde/noticias/index.phtml?id_conteudo=210476" target="_blank"&gt;veja&lt;/a&gt;…), corretor de imóvel, contador, e várias outras.&lt;/p&gt;    &lt;p align="justify"&gt;Mas a discussão aqui é sobre analista de sistemas, aliás o próprio termo já é um tanto antigo e esta praticamente caindo em desuso, até porque as competências para construir um software como produto vão bem além disto.&lt;/p&gt;    &lt;p align="justify"&gt;Sou contra por várias causas, algumas:&lt;/p&gt;    &lt;p align="justify"&gt;- Regulamentação não é garantia de competência, o mercado já se encarrega de separar o joio do trigo, hoje vale muito mais uma certificação do que a regulamentação. Os defensores argumentam que software lida também com vidas humanas, como software de aviônicos, equipamentos hospitalares, usinas nucleares, etc.&lt;/p&gt;    &lt;p align="justify"&gt;&amp;#160;&amp;#160; Oras, alguém pensa seriamente que a regulamentação fará alguma diferença nisso? Nenhuma empresa contrata um programador ou analista de sistemas para fazer software para incubadoras neo-natal por exemplo, isso é desenvolvido por empresas estabelecidas, com certificações CMM, ISO e por aí afora vai, o software tem que ser homologado e certificado, não interessa se o analista é diplomado ou não, o mesmo para softwares de avionica, para usinas e por aí afora vai.&lt;/p&gt;    &lt;p align="justify"&gt;&amp;#160;&amp;#160; Pensam muitos que é necessário para frear a competição desmedida, que avilta os ganhos dos profissionais. Eu tenho a minha empresa de software, a competição no mercado é tanto com outras empresas quanto com profissionais independentes, eu não baixo o meu preço aquém do que considero justo e que minha planilha de custos mostra ser o razoável, e tem concorrentes no mercado cobrando 5% do meu preço final. Há mercado para eles e há mercado para a minha empresa também, tudo depende do cliente, e não será uma regulamentação que irá banir os camelôs de sistemas do mercado. Isso é competição, é concorrência, é saudável e bem vinda, graças à esta competição a qualidade aumentou (pelo menos a minha).&lt;/p&gt;    &lt;p align="justify"&gt;&amp;#160;&amp;#160; Regulamentação é apenas reserva de mercado, e quem se beneficia disso, historicamente comprovado, são os incompetentes, vide a famigerada, nefasta e de triste lembrança, reserva de mercado de informática. Os bons profissionais, diplomados ou não, tem espaço no mercado, são disputados por empresas e pelo mercado. Apenas as empresas de fundo de quintal, ou a quitanda da esquina, e mesmo assim olhe lá, é que vão contratar o sobrinho do amigo do cunhado para fazer um programinha para controlar o estoque, esta é uma fase já passada, a realidade é outra.&lt;/p&gt;    &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160; Hoje temos inclusive carência de bons profissionais no mercado, veja bem, de bons profissionais, profissionais diplomados ou não tem aos montes, mas qualidade é algo que anda raro, e é muito valorizada.&lt;/p&gt;    &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160; Existem excelentes profissionais oriundos das faculdades, mas infelizmente existe também uma grande parcela que sai da faculdade sem noção de mercado, com parcas idéias teóricas, sem embasamento na realidade, sem falar nos que são incapacitados intelectualmente para exercer a profissão, e falo com conhecimento de causa, já perdi a conta de estagiários oriundos de várias faculdades que passaram pela empresa, e as estatísticas comprovam que mais de 80% não possuem condições mínimas para trabalhar, falta-lhes capacidade de raciocínio, ainda mais em uma área extremamente dinâmica como TI, aonde o conhecimento que tenho hoje é nada amanhã, temos que pesquisar, aprender, descobrir e manter-se em dia com as novas tendências e tecnologias, e esse ciclo se renova a cada semana, portanto não é um diploma que vai dar o estofo necessário para atuar nessa área.&lt;/p&gt;    &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160; A regulamentação vai apenas onerar um pouco mais nossa atividade, com anuidades para conselhos, federações, e por aí afora vai, além de abrir um bom número de cargos para serem preenchidos por apaniguados políticos, e sustentados por nós.&lt;/p&gt;    &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160; Um dos maiores entraves do Brasil é o custo trabalhista, e com a regulamentação estaremos burocratizando e onerando ainda mais uma área em que o dinamismo deveria operar. O que vai ocorrer é que grandes empresas de software, que hoje são grandes contratantes, vão acabar migrando a contratação de seus serviços para Índia, Paquistão, China, etc.&lt;/p&gt;    &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160; Argumentam que só os relaxados, que nunca foram atrás de um diploma estão preocupados com isso. Bom, eu não me considero um relaxado, e como já expliquei no inicio do texto, eu estaria na turma dos “beneficiados”, mas discordo deste argumento, isso é uma desculpa esfarrapada de quem deseja ardentemente a regulamentação, para estabelecer uma reserva de mercado para si, ou por ter medo de encarar a competição do mercado, ou por comodismo mesmo.&lt;/p&gt;    &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160; A regulamentação vai criar uma classe comodista, como já ocorre em algumas outras, e quem vai perder com isso é a sociedade como um todo, menos competição, menos desenvolvimento, preços maiores, enfim prejuízo para todos.&lt;/p&gt;    &lt;p align="justify"&gt;&amp;#160;&amp;#160; Argumentam que os que “se acham competentes” mas não possuem diploma, que corram atrás do diploma, e que não precisam se preocupar com isso. É uma falácia, muitas vezes quem tem longa experiência e não é formado na área, não tem tempo de voltar para os bancos de uma faculdade. &lt;/p&gt;    &lt;p align="justify"&gt;&amp;#160;&amp;#160; E quando se volta para os bancos de uma faculdade, chega a ser irritante o nível primário do corpo docente, que parece viver no mundo de Alice (com exceções é claro), com muito pouca noção de mercado, prazos, SLAs e como se produz software como produto.&lt;/p&gt;    &lt;p align="justify"&gt;&amp;#160;&amp;#160; Com a quantidade cada vez maior de faculdades que não conseguem as notas mínimas, imagino o nível de profissionais que serão regulamentados, e com isso enganando o mercado. Sim, porque hoje o mercado sabe que existe tanto o picareta quanto o competente, mas com profissionais regulamentados, com a carteira na mão, muitos pensarão que isso será garantia de qualidade, o que não é.&lt;/p&gt;    &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160; Sem falar que o legislador propõe regulamentar uma categoria que está em franca extinção. Não se faz mais software como produto apenas com Analista de sistemas e programadores, hoje precisamos das competências de um Engenheiro de software, um analista de negócios, e muitas outras competências, que vão muito além de um simples analista de sistemas.&lt;/p&gt;    &lt;p align="justify"&gt;&amp;#160;&amp;#160; Então, eu não vejo nenhuma real vantagem para os profissionais e para o povo, em ter a profissão regulamentada e uma reserva de mercado, vejo isto sim uma tentativa de explorar o nosso bolso, criando mais um custo para bancarmos, além de proteção para os incompetentes que não conseguem se manter no mercado.&lt;/p&gt;    &lt;p align="justify"&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-397263994310464725?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/397263994310464725/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=397263994310464725' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/397263994310464725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/397263994310464725'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2009/08/volta-da-proposta-de-regulamentar.html' title='A volta da proposta de regulamentar a profissão no mercado de informática.'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-3991482814547858831</id><published>2009-08-09T17:57:00.001-03:00</published><updated>2009-08-09T17:57:06.105-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='politica'/><category scheme='http://www.blogger.com/atom/ns#' term='diversos'/><category scheme='http://www.blogger.com/atom/ns#' term='cotidiano'/><title type='text'>Aos poucos o gado vai acostumando com o jugo.</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;E aos poucos os conselhos de Maquiavel vão se confirmando, assim como as orientações de Antonio Gramsci, ainda que não empregadas dentro da sua ótica marxista.&lt;/p&gt;    &lt;p align="justify"&gt;A respeito da recente lei anti-tabagismo em São Paulo, a esmagadora maioria está bovinamente aceitando e aplaudindo.&lt;/p&gt;    &lt;p align="justify"&gt;Os que ousam levantar a voz contra, como já fiz, é sumariamente tachado de todos os epítetos pouco elogiosos imagináveis, além de ofensas verbais, e acusações do tipo “Egoísta, não se importa com os outros”, e por aí afora vai.&lt;/p&gt;    &lt;p align="justify"&gt;Oras, eu larguei o cigarro já tem mais de 9 anos, vez ou outra me atrevo a saborear um “puro” (charuto, para os menos íntimos do hábito), mas sou não fumante, a fumaça do cigarro inclusive me incomoda, portanto as ofensas e xingamentos raivosos caem no vazio, pois erram solenemente o alvo.&lt;/p&gt;    &lt;p align="justify"&gt;Porém me incomoda muito mais, não só me incomoda, me revolta, me causa repúdio, profunda revolta, o Estado metendo-se a tutor de minha vida privada, meus hábitos e até mesmo de cuidar da minha saúde. Não trabalho bem com a idéia de um estado controlador, isso liga em mim, de maneira automática e instintiva, o bixo da revolta, me vem à mente as multidões controladas pelo estado na China, Coréia, Cuba, ex-URSS, e por aí afora vai, e não posso ficar calado, quieto e aceitar isso como normal.&lt;/p&gt;    &lt;p align="justify"&gt;O que a maioria dos que aplaudem essa lei arbitrária parecem ignorar é que o foco da discussão está errado, enquanto o governo, como um déspota auto nomeado tutor de minha vida, brada demagogicamente aos quatro ventos contra os malefícios do cigarro, à maneira de um hábil prestidigitador que desvia o foco da cena principal, vai introduzindo no dia-a-dia do cidadão leis policialescas, privativas de liberdades, tutoras de direitos mais intimos, e mostrando o foco distorcido, consegue o aplauso da patuléia, como o boi que aceita de bom grado a água e o capim na estrada para o abatedouro.&lt;/p&gt;    &lt;p align="justify"&gt;Porque não se fez tanto empenho para disciplinar uma separação física de fato dos ambientes de fumantes e não fumantes, como existe em Salvador? Porque o impacto da lei promulgada gera muito mais dividendos eleitorais, e o (des)governador José Serra está de olho no Alvorada em 2010 e não no mandato de governador que deveria exercer.&lt;/p&gt;    &lt;p align="justify"&gt;Enquanto isso dezenas de pessoas (crianças, jovens, adultos e até velhos) se acabam fumando pedra nas Cracolândias por esse Brasil afora, e os governantes nada ou muito pouco fazem para solucionar o problema, novamente porque isso não gera dividendos eleitorais a curto prazo, esse é um problema que demanda energia, tempo, dedicação, esforço e trabalho, muito trabalho, para dar frutos em 1 ou 2 décadas, é muito tempo para os nossos politiqueiros de plantão, que querem colher os frutos agora, afinal há tempos perdeu-se o interesse coletivo de vista, em prol dos interesses pessoais e imediatistas dos politiqueiros que fizeram disso o seu meio e fim de vida.&lt;/p&gt;    &lt;p align="justify"&gt;O que me espanta é a maneira bovinamente plácida com que as pessoas, inclusive muitas tidas como cultas, aceitam a tutela do estado, via leis arbitrárias, em suas vidas.&lt;/p&gt;    &lt;p align="justify"&gt;Esse é um dos males seculares da América Latina, essa cultura ibérica de que o estado deve ser o grande pai, a tudo provendo, a tudo orientanto, a tudo tutelando, como se fossemos incapazes de tomar conta de nosso próprio nariz (e na maioria das vezes eu acho que uma grande parte da população é incapaz sim). É o oposto da mentalidade anglo-saxã dos nossos irmãos do Norte, que prezam a liberdade individual acima de tudo, e jamais aceitariam o estado lhes ditando o que fazer, por isso as ditaduras florescem muito mais nestas bandas, pois encontram terreno fértil no populacho.&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-3991482814547858831?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/3991482814547858831/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=3991482814547858831' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/3991482814547858831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/3991482814547858831'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2009/08/aos-poucos-o-gado-vai-acostumando-com-o.html' title='Aos poucos o gado vai acostumando com o jugo.'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-5373343156796213089</id><published>2009-05-08T22:20:00.001-03:00</published><updated>2009-05-08T22:20:54.018-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><title type='text'>DLINK DI-624 Reiniciando rede wireless</title><content type='html'>&lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Problema: Meu roteador com Wireless da Dlink, um DI-624, já bem rodado, começou nos últimos dois dias a reiniciar a conexão wireless a cada 2 ou 3 minutos, sem mais nem menos.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Não consigo falar com clientes no skype, nem com parceiros de projetos, e olha que tenho 1 que está em Sofia, na Bulgária e outro em Athenas, imagina sem o skype a quanto vai o custo do projeto? &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Quebrei a cabeça, teve gente que me falou que o problema deveria ser o e-mule ou o bittorrent, desliguei os dois, nada, continuou a mesma coisa, resolvi desligar a máquina aonde está o e-mule, que apesar de ser varrida por antivírus diariamente, poderia estar infectada.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Nada, resolvi partir para atualizar o firmware do roteador. Atualizado, configurações restauradas e… a mesma coisa.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; O log do router não me deu muitas informações, então navegando pela web pela conexão com cabo (sim tive que voltar a colocar cabo no notebook para poder estabilizar a dita cuja), encontrei alguns comentários em um site de hardware americano, algumas pessoas enfrentavam o mesmo problema.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; A solução? Fazer o upgrade de firmware, mas isto eu já tinha feito e não tinha dado certo.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; Agora é que vem o pulo do gato, um dos caras desse fórum também havia feito o upgrade e não havia resolvido, então ele informou que refez o upgrade &lt;strong&gt;&lt;font color="#ffff00" size="3"&gt;mas do site alemão da dLink&lt;/font&gt;&lt;/strong&gt;, e aí funcionou.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Mesmo duvidando um pouco, fui lá e fiz o download, intrigado, aparentemente é a mesma versão que eu baixei do site americano, mas… vamos em frente e ver no que dá.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; Não é que funcionou? Fiz o upgrade as 18h00, e até agora está estável a conexão. Vai entender….&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Fica aqui a dica, se você está com este mesmo problema, baixe o upgrade do firmware do site alemão da D-Link.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.spectrus.com.br"&gt;www.spectrus.com.br&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-5373343156796213089?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/5373343156796213089/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=5373343156796213089' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/5373343156796213089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/5373343156796213089'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2009/05/dlink-di-624-reiniciando-rede-wireless.html' title='DLINK DI-624 Reiniciando rede wireless'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-6340210639662479941</id><published>2009-04-01T17:13:00.001-03:00</published><updated>2009-04-01T17:13:18.903-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Rotas com o Google Maps no Delphi – versão simplificada.</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Após publicar as matérias anteriores sobre como mostrar os mapas do Google e como traçar rotas do Google a partir de aplicativos Delphi, conversando com o Paulo Geloramo da Assis Informática de Assis – SP, ele me mostrou uma versão mais simplificada que ele fez da rotina.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Durante a nossa conversa, acabamos indo pesquisar o que seriam alguns dos parâmetros que existem no final da &lt;strong&gt;URL&lt;/strong&gt; de pesquisa que carrega o mapa e traça a rota.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Fazendo algumas experimentações, chegamos à conclusão e constatamos que a rotina funciona mesmo sem aqueles parâmetros, o que a torna mais simplificada ainda.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Bom, aqui abaixo mais uma função para mostrar o mapa e traçar a rota, agora bem mais simplificada:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;procedure Rota&lt;/strong&gt;(Logradouro1, Numero1, Cidade1, UF1, CEP1, Logradouro2, Numero2, Cidade2, UF2, CEP2: string);     &lt;br /&gt;var     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; strUrl: String;     &lt;br /&gt;begin     &lt;br /&gt;&amp;#160; strURL := '&lt;a href="http://maps.google.com.br/maps?f=q&amp;amp;source=s_q&amp;amp;hl=pt-BR&amp;amp;geocode=&amp;amp;q='"&gt;http://maps.google.com.br/maps?f=q&amp;amp;source=s_q&amp;amp;hl=pt-BR&amp;amp;geocode=&amp;amp;q='&lt;/a&gt; +     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ' from: ' +&amp;#160; AnsiToUtf8(Logradouro1) + ', ' +&amp;#160; Numero1 + ', ' +     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AnsiToUtf8(Cidade1) + ', ' +&amp;#160; UF1 + ', ';     &lt;br /&gt;&amp;#160; if Length(CEP1) &amp;gt; 1 Then     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; strURL := strURL + FormatMaskText('99999-999;0; ', CEP1);     &lt;br /&gt;&amp;#160; strURL := strURL + ' to: ' +&amp;#160; AnsiToUtf8(Logradouro2) + ', ' +     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Numero2 + ', ' +&amp;#160; AnsiToUtf8(Cidade2) + ', ' + UF2 + ', ';     &lt;br /&gt;&amp;#160; if Length(CEP2) &amp;gt; 1 Then&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; strURL := strURL + FormatMaskText('99999-999;0; ', CEP2)' + ‘&amp;amp;ie=UTF8’;     &lt;br /&gt;&amp;#160; ShellExecute(0, nil, PChar(strURL), nil, nil, 0);     &lt;br /&gt;&lt;strong&gt;end&lt;/strong&gt;;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Veja que os parâmetros de CEP podem não ser informados (passar uma string vazia como parâmetro), mas se o endereço existir em duplicidade na cidade (como é o caso de São Paulo), você terá problemas ao traçar a rota. &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Para definir corretamente o endereço, passe o parâmetro de CEP para a API processar a &lt;strong&gt;URL&lt;/strong&gt; sem ambiguidades.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Você pode acrescentar o parâmetro de zoom ao final da &lt;strong&gt;URL&lt;/strong&gt;, utilizando o parâmetro ‘&lt;strong&gt;&amp;amp;z=’, &lt;/strong&gt;se optar por não utilizar este parâmetro será retornado o mapa com o zoom abrangendo toda a rota, e o usuário poderá posicionar e escolher o nível de zoom manualmente.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Veja também que foi usada a função &lt;strong&gt;AnsiToUtf8&lt;/strong&gt; do Delphi, isto é para os casos em que você possui acentuação no nome do endereço, se não usar esta conversão, a função não irá funcionar como o esperado.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://www.spectrus.com.br"&gt;www.spectrus.com.br&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-6340210639662479941?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/6340210639662479941/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=6340210639662479941' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/6340210639662479941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/6340210639662479941'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2009/04/rotas-com-o-google-maps-no-delphi.html' title='Rotas com o Google Maps no Delphi – versão simplificada.'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-6180321546296834643</id><published>2009-03-29T15:29:00.001-03:00</published><updated>2009-03-31T14:53:17.111-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Traçar rotas a partir do Delphi com o Google Maps</title><content type='html'>&lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Continuando a partir do artigo anterior “&lt;font color="#ffff00"&gt;&lt;strong&gt;Mapas do Google no seu aplicativo Delphi&lt;/strong&gt;&lt;/font&gt;&lt;font color="#ffffff"&gt;”, vamos agora avançar um pouco mais, traçar rotas entre dois pontos, e mostrar isto ao usuário.&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Esta é uma funcionalidade interessante para aplicativos como &lt;strong&gt;CRM&lt;/strong&gt; ou de logística. Você pode obter informações completas sobre como utilizar as &lt;strong&gt;API&lt;/strong&gt;s do Google Maps em &lt;a href="http://www.google.com/apis/maps"&gt;www.google.com/apis/maps&lt;/a&gt;, a maioria dos exemplos contempla Java, Javascript, PHP ou Python, porém não é dificil adaptá-los à linguagem que você utiliza, como estamos fazendo com o Delphi.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Para usar as &lt;strong&gt;API&lt;/strong&gt;s do Google, você precisa obter uma chave única e exclusiva sua, é de graça, e lhe dá acesso à todas as funcionalidades do Google Maps. Neste exemplo não vamos utilizar esta chave, é apenas um exemplo, muito embora você possa utilizar sem ter uma chave, como você pode constatar pelo código neste artigo, é aconselhável que você obtenha esta chave, por uma questão de copyright.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Bueno, vamos botar a mão na massa.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Primeiro de tudo você irá precisar, para mostrar o mapa, das coordenadas do ponto a ser mostrado na tela, normalmente você mostrará na tela o ponto inicial da rota, permitindo ao usuário que acompanhe a rota a partir do ponto de origem, porém você pode mostrar o ponto final da rota, a seu critério. Por este motivo criamos uma função para retornar as coordenadas.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; As coordenadas (e mais uma série de informações sobre o endereço) são retornadas em um arquivo &lt;strong&gt;xml&lt;/strong&gt;, você também pode solicitar que seja retornado em formato &lt;strong&gt;csv&lt;/strong&gt; (separado por vírgulas). No caso de um arquivo&lt;strong&gt; xml&lt;/strong&gt; a &lt;strong&gt;API&lt;/strong&gt; do Google Maps retorna informações bem completas, incluindo até mesmo o &lt;strong&gt;CEP&lt;/strong&gt;, no caso de arquivo &lt;strong&gt;CSV&lt;/strong&gt; serão retornadas apenas as coordenadas.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Neste artigo iremos trabalhar com o arquivo &lt;strong&gt;XML, &lt;/strong&gt;pois se você desejar obter mais informações sobre o endereço basta incrementar o código.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Como este artigo é direcionado para todos os desenvolvedores &lt;strong&gt;DELPHI&lt;/strong&gt;, incluindo os iniciantes, vou tentar manter o código o mais simples possível, mesmo que em algumas partes pareça que há redundância ou que o código poderia ser reduzido, creio que desta forma fica fácil para todos acompanharem a metodologia, sinta-se a vontade para refatorar o código.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Para este código você deverá declarar a unit &lt;strong&gt;XMLDOC&lt;/strong&gt; na parte de interface da sua unit.&lt;/p&gt;  &lt;p align="justify"&gt;Vamos também declarar um objeto do tipo &lt;strong&gt;XMLDocument&lt;/strong&gt; para trabalhar com as informações retornadas pelo Google.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;vXMLDoc : TXMLDocument;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Na inicialização da Unit, ou no evento &lt;strong&gt;onCreate&lt;/strong&gt; do Form, você deverá criar o &lt;strong&gt;XMLDocument:&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;vXMLDoc := TXMLDocument.Create(Self);&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Vamos criar a função que irá preencher as coordenadas, apenas para fins informativos mantivemos o array com 3 dimensões, na primeira iremos manter as coordenadas como recuperadas do arquivo xml, isto é apenas para fins informativos, você poderá consultar esta ocorrência do array para verificar como as coordenadas foram lidas. No seu aplicativo final de produção você pode eliminar esta ocorrência.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;function &lt;/strong&gt;getCoordenadas(Logradouro, Numero, Cidade, UF, Pais: String): String;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;var&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;//Vamos declarar um array para trabalhar com as coordenadas:    &lt;br /&gt;&lt;strong&gt;&amp;#160;&amp;#160; &lt;/strong&gt;strCoordenadas: array[0..2] of String;     &lt;br /&gt;&amp;#160;&amp;#160; strURL: String;     &lt;br /&gt;&amp;#160;&amp;#160; idx, inicio, tamanho : integer; // para manipular as strings de retorno&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;begin&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Try&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&amp;#160; &lt;/strong&gt;Result := ‘’;&lt;/p&gt;  &lt;p align="left"&gt;&lt;strong&gt;&amp;#160;&amp;#160; &lt;/strong&gt;strURL := ‘&lt;a title="http://maps.google.com/maps/geo?q=&amp;quot;Av.+Paulista,+100+-+São+Paulo+-+SP,+Brasil&amp;quot;&amp;amp;output=csv" href="http://maps.google.com/maps/geo?q=&amp;rsquo; +"&gt;http://maps.google.com/maps/geo?q=’ +&lt;/a&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Logradouro + ‘, ‘ + Numero + ‘ – ‘ + Cidade +     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ‘ – ‘ + UF + ‘, ‘ + Pais + ‘&amp;amp;output=xml’;     &lt;br /&gt;&amp;#160;&amp;#160; // O parâmetro final da string &lt;strong&gt;output&lt;/strong&gt; determina o tipo de     &lt;br /&gt;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160; informação retornada (&lt;strong&gt;csv &lt;/strong&gt;ou &lt;strong&gt;xml&lt;/strong&gt;).     &lt;br /&gt;&amp;#160;&amp;#160; //&amp;#160; Agora fazemos o &lt;strong&gt;xmldocument&lt;/strong&gt; ler o retorno da URL&lt;/p&gt;  &lt;p align="left"&gt;&amp;#160;&amp;#160; vXMLDoc.FileName := strURL;    &lt;br /&gt;&amp;#160;&amp;#160; vXMLDoc.Active := True;&lt;/p&gt;  &lt;p align="left"&gt;&amp;#160;&amp;#160; // Se você quiser aprender mais sobre o retorno do Google.    &lt;br /&gt;&amp;#160;&amp;#160; // coloque um TMemo no formulário e passe o texto retornado     &lt;br /&gt;&amp;#160; //&amp;#160; para este TMemo, para ver o que é retornado, como abaixo:&lt;/p&gt;  &lt;p align="left"&gt;&amp;#160; Memo1.Lines.Clear;    &lt;br /&gt;&amp;#160; Memo1.Lines.Add(vXMLDoc.XML.Text);&lt;/p&gt;  &lt;p align="left"&gt;&amp;#160; if not vXMLDoc.Active Then    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; exit;&lt;/p&gt;  &lt;p&gt;For idx := 0 to vXMLDoc.XML.Count -1 do    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; begin     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; If Pos('&amp;lt;coordinates&amp;gt;', vXMLDoc.XML[idx]) &amp;gt; 0 Then     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; begin     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; inicio := Pos('&amp;lt;coordinates&amp;gt;', vXMLDoc.XML[idx]) + 13;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; tamanho := (Length(vXMLDoc.XML[idx]) - inicio) - (Length(vXMLDoc.XML[idx]) - (Pos('&amp;lt;/coordinates&amp;gt;', vXMLDoc.XML[idx])));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; strCoordenadas[0] := Copy((vXMLDoc.XML[idx]), inicio, tamanho);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; end;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; end; &lt;/p&gt;  &lt;p&gt;If length(strCoordenadas[0]) &amp;gt; 0 Then    &lt;br /&gt;&amp;#160;&amp;#160; begin     &lt;br /&gt;&amp;#160;&amp;#160; strCoordenadas[1] := Copy(strCoordenadas[0], 1, Pos(',', strCoordenadas[0]) -1);     &lt;br /&gt;&amp;#160;&amp;#160; strCoordenadas[2] := Copy(strCoordenadas[0], Pos(',', strCoordenadas[0])+ 1, Length(StrCoordenadas[0]));     &lt;br /&gt;&amp;#160;&amp;#160; if Pos(',', strCoordenadas[2]) &amp;gt; 0 Then     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; StrCoordenadas[2] := Copy(strCoordenadas[2], 1, Pos(',', strCoordenadas[2]) - 1);     &lt;br /&gt;&amp;#160;&amp;#160; end;&lt;/p&gt;  &lt;p&gt;// Se você colocou um Memo para verificar o que é retornado,    &lt;br /&gt;//&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pode adicionar as coordenadas para verificar se está tudo OK.     &lt;br /&gt;//&amp;#160; Lembre-se de retirar isto no software de produção.     &lt;br /&gt;Memo1.Lines.Add(strCoordenadas[0]);     &lt;br /&gt;Memo1.Lines.Add(strCoordenadas[1]);     &lt;br /&gt;Memo1.Lines.Add(strCoordenadas[2]);     &lt;br /&gt;Result := strCoordenadas[2] + ‘,’ + strCoordenadas[1];&lt;/p&gt;  &lt;p align="left"&gt;&lt;strong&gt;Finally&lt;/strong&gt;&lt;/p&gt;  &lt;p align="left"&gt;&lt;strong&gt;End;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;end&lt;/strong&gt;;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160; Agora vamos declarar uma função para receber os endereços, as coordenadas e retornar a URL para traçar a rota. As &lt;strong&gt;URL&lt;/strong&gt;s para buscar as coordenadas e para traçar as rotas, ficam mais fácil de gerenciar se você declarar na parte de interface da unit. Aqui declaramos as &lt;strong&gt;URL&lt;/strong&gt;s no corpo das procedures e functions para facilitar o seu entendimento, apenas para fins didáticos.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Function &lt;/strong&gt;Rotear( De_onde, Para_onde, coordenadas: String): String;     &lt;br /&gt;&lt;strong&gt;var&lt;/strong&gt;     &lt;br /&gt;&amp;#160; strURL : String;     &lt;br /&gt;&lt;strong&gt;begin      &lt;br /&gt;&amp;#160;&amp;#160; Try       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/strong&gt;Result := ‘’;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;&amp;#160;&amp;#160; &lt;strong&gt;// URL para traçar a rota no google        &lt;br /&gt;&amp;#160;&amp;#160; // O parâmetro z (o último da URL) é o fator de zoom         &lt;br /&gt;&amp;#160;&amp;#160; //&amp;#160; a ser aplicado ao mapa, experimente com outros         &lt;br /&gt;&amp;#160;&amp;#160; // valores (valores maiores, mais zoom, e vice-versa).         &lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;       &lt;br /&gt;&lt;/strong&gt;&amp;#160;&amp;#160; strURL := ‘&lt;a href="http://maps.google.com/maps?f=d&amp;amp;source=s_d&amp;amp;saddr=&amp;rsquo; + "&gt;http://maps.google.com/maps?f=d&amp;amp;source=s_d&amp;amp;saddr=’ +&amp;#160; &lt;br /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; De_onde + ‘&amp;amp;daddr=’ +&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Para_onde + ‘&amp;amp;hl=pt-BR&amp;amp;geocode=&amp;amp;mra=pe&amp;amp;mrcr=0&amp;amp;ie=UTF8&amp;amp;ll=’ +       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; coordenadas + ‘&amp;amp;z=16’; &lt;/p&gt;    &lt;p align="left"&gt;Result := strURL; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;&lt;strong&gt;Finally&lt;/strong&gt;&lt;/p&gt;  &lt;p align="left"&gt;&lt;strong&gt;end;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;end&lt;/strong&gt;;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&amp;#160;&amp;#160; &lt;/strong&gt;Agora vamos usar a mesma função que usamos no outro artigo sobre mostrar mapas do google no delphi, para mostrar o mapa com a rota traçada:&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Temos uma tabela de Clientes, 5 campos desta tabela nos interessam, que contém os dados que usaremos para pesquisar no mapa. &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;&lt;font color="#ffff00"&gt;Logradouro&lt;/font&gt;&lt;/strong&gt; = Contém o nome do logradouro do endereço, por exemplo “Rua Jesuíno Arruda”.     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;&lt;font color="#ffff00"&gt;Numero&lt;/font&gt;&lt;/strong&gt; = Contém o número do endereço, apenas o número e não o complemento (sala, loja, etc), por exemplo: 769&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;&lt;font color="#ffff00"&gt;Cidade&lt;/font&gt;&lt;/strong&gt; = O nome da cidade, por exemplo: São Paulo     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;&lt;font color="#ffff00"&gt;UF&lt;/font&gt;&lt;/strong&gt; = A sigla do estado, exemplo SP.     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;&lt;font color="#ffff00"&gt;País&lt;/font&gt;&lt;/strong&gt; = O nome do país;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; E agora criar uma função que vai fazer o trabalho, é simples, prático e bem rápido. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;procedure&lt;/strong&gt; TForm1.CarregaMapa;     &lt;br /&gt;&lt;strong&gt;var&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; strURL, deOnde, paraOnde, coordenadas : String;    &lt;br /&gt;&lt;strong&gt;begin&lt;/strong&gt;     &lt;br /&gt;&amp;#160; // Localizamos o endereço inicial&lt;/p&gt;  &lt;p&gt;&amp;#160; Clientes.Locate(‘ClienteID’, VarArrayOf([clienteInicial]),[]);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; Coordenadas := getCoordenadas(Clientes.FieldByName('Logradouro').AsString, Clientes.FieldByName('Numero').AsString,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Clientes.FieldByName('Cidade').AsString, Clientes.FieldByName('UF').AsString, Clientes.FieldByName(‘Pais’).AsString); &lt;/p&gt;  &lt;p&gt;&amp;#160; deOnde := Clientes.FieldByName('Logradouro').AsString + ', ' +    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Clientes.FieldByName('Numero').AsString + ', ' +&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Clientes.FieldByName('Cidade').AsString + '-' +     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Clientes.FieldByName('UF').AsString + ‘, ‘ +     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Clientes.FieldByName(‘Pais’).AsString;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;// Vamos localizar o endereço de destino    &lt;br /&gt;&amp;#160; Clientes.Locate(‘ClienteID’, varArrayOf([clientefinal]), []);&lt;/p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; paraOnde := Clientes.FieldByName('Logradouro').AsString + ', ' +   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Clientes.FieldByName('Numero').AsString + ', ' +&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Clientes.FieldByName('Cidade').AsString + '-' +   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Clientes.FieldByName('UF').AsString + ‘, ‘ +   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Clientes.FieldByName(‘Pais’).AsString;   &lt;p&gt;&amp;#160; strURL := Rotear(deOnde, paraOnde, Coordenadas);    &lt;br /&gt;&amp;#160; ShellExecute(0, Nil,&amp;#160; PChar(strURL), Nil, Nil, 0); &lt;/p&gt;  &lt;p&gt;// Fiz a chamada acima para que ficasse mais claro, mas você    &lt;br /&gt;// pode otimizar a clareza do código fazendo a chamada :     &lt;br /&gt;// ShellExecute(0, Nil,&amp;#160; PChar(Rotear(deOnde, paraOnde, Coordenadas)), Nil, Nil, 0);&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;end&lt;/strong&gt;;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160; Bom, com isso você já consegue colocar a funcionalidade de fazer rotas no seu aplicativo, você pode usar um TWebBrowser e embutir isto dentro do seu software. Há vantagens e desvantagens nisto, eu pessoalmente prefiro chamar um browser externo.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Como o TWebBrowser é baseado na engine do Internet Explorer, se o usuário tiver outro browser instalado (Opera, FireFox, Safari, etc), e não tiver o Internet Explorer instalado, seu aplicativo vai apresentar erro, e a bela funcionalidade que você implementou não irá funcionar. Da maneira como fizemos, o browser padrão do usuário é que será chamado, seja ele qual for.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://www.spectrus.com.br"&gt;www.spectrus.com.br&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-6180321546296834643?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/6180321546296834643/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=6180321546296834643' title='9 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/6180321546296834643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/6180321546296834643'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2009/03/tracar-rotas-partir-do-delphi-com-o.html' title='Traçar rotas a partir do Delphi com o Google Maps'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-5855405981167743629</id><published>2009-03-29T13:37:00.001-03:00</published><updated>2009-03-29T13:37:29.780-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Mapas do Google no seu aplicativo Delphi.</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Bom, você certamente já pesquisou algum endereço pelo google maps, e ficou imaginando que colocar aquilo no seu aplicativo seria uma boa idéia.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Pois agora, seus problemas “acabaram-se”, com o novo googlemapeitorparaseuaplicativeitor Tabajara, as coisas finalmente vão acontecer.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Veja abaixo como fazer para colocar o Google para trabalhar para você, e mostrar para seus clientes, ou para o chefe, como você é esperto (Não tanto quanto o Larry Page e o Sergey Brin, pois eles ganham fortunas com o Google, e você ainda está bem distante de conseguir comprar 1 Boeing só para fazer baladas nos céus como eles fazem).&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Mãos à obra entonces:&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Temos uma tabela de Clientes, 4 campos desta tabela nos interessam, que contém os dados que usaremos para pesquisar no mapa.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;&lt;font color="#ffff00"&gt;Logradouro&lt;/font&gt;&lt;/strong&gt; = Contém o nome do logradouro do endereço, por exemplo “&lt;strong&gt;Rua Jesuíno Arruda&lt;/strong&gt;”.     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;&lt;font color="#ffff00"&gt;Numero&lt;/font&gt;&lt;/strong&gt; = Contém o número do endereço, apenas o número e não o complemento (sala, loja, etc), por exemplo: &lt;strong&gt;769&lt;/strong&gt;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;&lt;font color="#ffff00"&gt;Cidade&lt;/font&gt;&lt;/strong&gt; = O nome da cidade, por exemplo: &lt;strong&gt;São Paulo&lt;/strong&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;&lt;font color="#ffff00"&gt;UF&lt;/font&gt;&lt;/strong&gt; = A sigla do estado, exemplo &lt;strong&gt;SP.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Vamos criar uma função que vai fazer o trabalho, é simples, prático e bem rápido.&lt;/p&gt;  &lt;p&gt;&lt;font face="Arial"&gt;&lt;strong&gt;procedure&lt;/strong&gt; TForm1.CarregaMapa;       &lt;br /&gt;&lt;strong&gt;begin&lt;/strong&gt;       &lt;br /&gt;&amp;#160; ShellExecute(0, Nil,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PChar('http://maps.google.com.br/maps?f=q&amp;amp;source=s_q&amp;amp;hl=pt-BR&amp;amp;geocode=&amp;amp;q=' +Clientes.FieldByName('Logradouro').AsString + ', ' + Clientes.FieldByName('Numero').AsString + ', ' +       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Clientes.FieldByName('Cidade').AsString + '-' + Clientes.FieldByName('UF').AsString + '&amp;amp;jsv=143c&amp;amp;sll=-23.186453,-46.884453' +       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; '&amp;amp;sspn=0.478436,0.545883&amp;amp;g=&amp;amp;ie=UTF8&amp;amp;ct=clnk&amp;amp;cd=1'), &lt;strong&gt;Nil&lt;/strong&gt;, &lt;strong&gt;Nil&lt;/strong&gt;, 0);       &lt;br /&gt;&lt;strong&gt;end&lt;/strong&gt;;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Basta chamar a função e será carregado o browser com o mapa correspondente ao endereço passado.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; No próximo post vamos ver como fazer para, além de mostrar o mapa, traçar a rota entre dois endereços.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Como sempre falo : &lt;strong&gt;&lt;em&gt;&lt;font color="#ff0000"&gt;Google é seu amigo, use-o&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;.     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://www.spectrus.com.br"&gt;www.spectrus.com.br&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-5855405981167743629?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/5855405981167743629/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=5855405981167743629' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/5855405981167743629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/5855405981167743629'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2009/03/mapas-do-google-no-seu-aplicativo.html' title='Mapas do Google no seu aplicativo Delphi.'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-6932553779744861528</id><published>2009-03-29T13:34:00.001-03:00</published><updated>2009-03-29T13:34:03.561-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Movendo colunas e linhas em um StringGrid.</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Na maioria dos componentes Grids, de terceiros, você pode observar que o usuário pode mover colunas e linhas usando o mouse. Aliás, o usuário &lt;strong&gt;&lt;font color="#ff0000"&gt;&lt;em&gt;espera&lt;/em&gt;&lt;/font&gt;&lt;/strong&gt; este comportamento de um Grid. Então, como fazer isso usando um TStringGrid? &lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Como sempre, se é isso que você estava querendo implantar em seu aplicativo, mais uma vez “seus pobrêma se acabaram-se”,&amp;#160; apresentamos o incrível &lt;strong&gt;&lt;font color="#008000"&gt;&lt;em&gt;GridColumnRowMoveitor&lt;/em&gt;&lt;/font&gt;&lt;/strong&gt; Tabajara.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Mais uma vez… mão na massa e chega de enrolação.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Primeiro de tudo, se você der uma olhada mais aprofundada no componente &lt;strong&gt;TCustomGrid&lt;/strong&gt; você verá que os métodos &lt;strong&gt;MoveColumn&lt;/strong&gt; e &lt;strong&gt;MoveRow&lt;/strong&gt; estão lá, fazem parte do componente, mas eles estão ocultos no TStringGrid, eles são herdados do ancestral TCustomGrid porém não estão acessíveis no descendente, o motivo?? Ora, vai lá saber o que se passa na cabeça dos garotos da Codegear…&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Como resolver esse problema? Simples e fácil, sem maiores complicações, basta fazer uma herança de TStringGrid e redeclarar estes métodos como public.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;type      &lt;br /&gt;&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160; TNovoGrid &lt;font color="#0000ff"&gt;=&lt;/font&gt; class(TStringGrid)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;public&lt;/strong&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; procedure MoveColumn(FromIndex, ToIndex: LongInt)&lt;font color="#0000ff"&gt;&lt;strong&gt;;&lt;/strong&gt;&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; procedure MoveRow(FromIndex, ToIndex: LongInt)&lt;strong&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;/strong&gt;     &lt;br /&gt;&amp;#160;&amp;#160; &lt;strong&gt;end&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; Para implementar estes métodos é muito simples, basta na implementação, chamar o ancestral e passar para ele o comando:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;procedure&lt;/strong&gt; TNovoGrid.MoveColumn(FromIndex, ToIndex: LongInt)&lt;font color="#0000ff"&gt;&lt;strong&gt;;&lt;/strong&gt;&lt;/font&gt;     &lt;br /&gt;&lt;strong&gt;begin&lt;/strong&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; inherited&lt;font color="#0000ff"&gt;&lt;strong&gt;;&lt;/strong&gt;&lt;/font&gt;     &lt;br /&gt;&lt;strong&gt;end&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;procedure &lt;/strong&gt;TNovoGrid.MoveRow(FromIndex, ToIndex: LongInt)&lt;strong&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;/strong&gt;     &lt;br /&gt;&lt;strong&gt;begin&lt;/strong&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; inherited&lt;font color="#0000ff"&gt;;&lt;/font&gt;     &lt;br /&gt;&lt;strong&gt;end&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Você não precisa registrar este componente na paleta de componentes. Use o TStringGrid ou qualquer descendente de TCustomGrid normalmente como já faz hoje, e quando você precisar usar estes métodos, simplesmente faça um typecast (conversão de tipos) para a nova classe, e pronto. Veja o exemplo abaixo:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;procedure &lt;/strong&gt;TForm1.Button1Click(Sender: TObject);     &lt;br /&gt;&lt;strong&gt;begin      &lt;br /&gt;&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TNovoGrid(StringGrid1).MoveColumn(&lt;font color="#800000"&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/font&gt;, &lt;font color="#800000"&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;/font&gt;)&lt;font color="#0000ff"&gt;;&lt;/font&gt;     &lt;br /&gt;&lt;strong&gt;end&lt;/strong&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;Bom, é isso aí, até a próxima.      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://www.spectrus.com.br"&gt;www.spectrus.com.br&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-6932553779744861528?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/6932553779744861528/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=6932553779744861528' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/6932553779744861528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/6932553779744861528'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2009/03/movendo-colunas-e-linhas-em-um.html' title='Movendo colunas e linhas em um StringGrid.'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-115179763758119754</id><published>2006-07-01T20:42:00.000-03:00</published><updated>2006-07-01T20:47:17.596-03:00</updated><title type='text'>Pesquisa para um novo projeto – Parte II</title><content type='html'>Bom, continuando as pesquisas para o novo projeto, continuo falando com diversas pessoas e pesquisando. A decisão sobre que tipo de banco de dados suportar já está tomada, a primeira versão irá dar suporte para Firebird, Microsoft SQL Server e ORACLE, em uma futura versão vamos dar suporte para IBM DB2.&lt;br /&gt;&lt;br /&gt;Porquê não inserir suporte ao IBM DB2 já nesta versão? Afinal, como diz o velho ditado (ou o velho deitado): já que estamos no inferno, não custa nada dançar uma valsa com o capeta né?&lt;br /&gt;Bem, a principal questão é que já temos versões instaladas do Firebird, ORACLE a versão express e o MSDE, e já temos um domínio desses bancos de dados, o IBM DB2 eu sei que é muito bom e rápido, mas sinceramente não faço nem idéia de como criar ou manter uma tabela. Então vamos fazer a primeira versão sem tentar complicar muito a história, depois da primeira versão pronta, teremos tempo para aprender a mexer no DB2.&lt;br /&gt;&lt;br /&gt;Existe também a questão comercial, em termos de marketing, o suporte ao ORACLE e ao SQL Server são significativos, representam uma importante característica para o mercado.&lt;br /&gt;&lt;br /&gt;Agora a decisão sobre a camada de servidor que irá fazer a ponte entre o banco de dados e a interface com o usuário, a camada que irá conter as regras de negócio, é o próximo passo.&lt;br /&gt;&lt;br /&gt;As opções representativas para mim ainda são Java, .Net ou Delphi, este último com preferência para uso do RemObjects.&lt;br /&gt;&lt;br /&gt;Alguns me falaram do Lazarus, o Free Pascal com versão para Linux e Windows, mas com sinceridade não é uma opção que eu considere seriamente. Pense bem, pretendemos uma aplicação que possa ser vendida em nível mundial, que possa se integrar com aplicativos de ERP conhecidos no mercado, para empresas de todos os portes, com suporte multilingua, que possa ser customizado pela equipe de TI do cliente, ou por parceiros, apelo de marketing, que tenha evolução garantida.  &lt;br /&gt;O que o uso do Lazarus poderia agregar de valor ao projeto? Sem desprezar a ferramenta que, diga-se de passagem, é muito boa. Mas no caso de optar por linguagem Pascal, ou Object Pascal, a escolha seria naturalmente o Delphi, em comparação com o Lazarus, só perde no preço e na disponibilidade para Linux, mas ganha com uma vantagem imensa em termos de suporte, disponibilidade de componentes, tecnologias, evolução, maturidade, estabilidade, disponibilidade de serviços e profissionais que dominam a ferramenta. &lt;br /&gt;O Lazarus é uma excelente ferramenta, mas ainda está no inicio de seu ciclo de vida, dentro de 1 ou 2 anos será uma ferramenta que deverá ser seriamente considerada, mas ainda não chegou lá.&lt;br /&gt;&lt;br /&gt;Analisando as opções da camada servidor:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;.NET&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A tecnologia da Microsoft é madura, bem posicionada no mercado, mas não me encanta por algumas razões.&lt;br /&gt;- Foi desenvolvida como uma indecisão da Microsoft, que queria barrar o avanço do Java na sua briga com a Sun, é uma tentativa de fazer com que o Windows se torne o padrão de sistema operacional de servidor para aplicativos Web.&lt;br /&gt;- É pesado, e bota pesado nisso, o framework é imenso, existe uma divisão debulosa entre os objetos, componentes, rotinas, etc. As ferramentas que suportam desenvolvimento para .NET são uma carroça de tão pesadas e lentas, é um paquiderme com câimbras, algo que definitivamente que deixa muito desconfortável.&lt;br /&gt;- Até quando a Microsoft vai continuar no .NET? Ela já mudou tanto de proposta de tecnologia que é de se perguntar: Qual será a próxima onda? Não há uma consistência, um caminho claro e seguro do que a Microsoft pretende fazer para o futuro.&lt;br /&gt;Tradicionalmente a turma do tio Bill garante que a tecnologia é a definitiva, até eles pensarem a próxima sacada de marketing, quanto então mudam tudo e a nova tecnologia passa a ser o novo Santo Graal do desenvolvimento.&lt;br /&gt;Tenho visto a Microsoft usar tão pouco a sua própria tecnologia, que me pergunto se seria prudente apostar em .NET.&lt;br /&gt;- Só roda em Windows e pronto. Isso é um ponto negativo bem forte a se considerar, com o uso crescente de Unix e Linux nos servidores, desprezar estes SO não é uma prática muito recomendável.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Quanto ao Linux, uma observação interessante:&lt;/span&gt;&lt;br /&gt;Quando começou a onda do Linux, eu já comentava que era algo a se considerar apenas no futuro, quem estava migrando para Linux não tinha representatividade no mercado. Eram instituições de ensino ou pesquisa, ou então pequenas e micro empresas em busca de economizar uns trocados em licenciamento de servidor. Ou seja, um mercado para o qual não valia a pena fazer investimentos, cujo retorno era insignificante. Só valeria investir nesse mercado se você tivesse grana suficiente para suportar alguns anos de desenvolvimento com nenhum ou muito pouco retorno financeiro, até que o mercado ficasse maduro suficiente para compensar o que se investiu.&lt;br /&gt;Eu trabalhei muitos anos com servidores Unix, e para mim a grande vantagem do Linux sempre foi o mesmo que eu sempre considerei no Unix: estabilidade, escalabilidade, confiabilidade, mas o que o mercado via era somente o custo de licenciamento.&lt;br /&gt;Bem, felizmente parece que as coisas mudaram, tenho visto muitas empresas, inclusive de grande porte, migrarem soluções de servidor para Linux, não por preço, mas pelas razões que mencionei para o Unix, até por que no final das contas o Linux pode sair até mais caro do que o Windows, o que geralmente ocorre, pois você começa a explorar e a usar muito mais recursos que estarão disponíveis no servidor, começa a visualizar opções muito mais sofisticadas e interessantes, e vai investir muito mais dinheiro no final, claro que também vai ter muito mais retorno, vai receber mais pelo seu dinheiro.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Delphi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Seria a opção natural, pois é a nossa ferramenta nativa de desenvolvimento para soluções desenvolvidas pela Spectrus. Como trabalhamos também como fábrica de software, outras soluções como .NET, C/C++ também são confortáveis para nós, pois muitas vezes o projeto para o cliente exige que se desenvolva em uma tecnologia que a equipe de TI domine.&lt;br /&gt;O Delphi seria uma opção fácil de implementar, é uma ferramenta poderosa, com tecnologias maduras e consistentes, em constante evolução, com uma comunidade de desenvolvedores imensa (um grande número de malucos, o que é bom!), a oferta de componentes, códigos, e suporte é imensa, talvez a ferramenta com maior suporte na atualidade. Sem falar que é uma linguagem orientada a objetos de fato, fácil de implementar e usar.&lt;br /&gt;As desvantagens:&lt;br /&gt;Roda apenas em Windows;&lt;br /&gt;O licenciamento é caro, se você for colocar uma equipe com 5 ou 6 desenvolvedores vai precisar de uma licença para cada um, considerando que para este projeto será necessário a versão Enterprise ou Architect, o investimento vai ser bem caro, antes do produto dar resultado. &lt;br /&gt;A última versão rápida e confiável é a 7, o Delphi 8 foi um fiasco, a 2005 uma tragédia, a 2006 parece que melhorou, mas só se comparada com o Delphi 8 ou 2005, e a Borland ainda tem a cara de pau de apresentar algumas vantagens do Delphi 2006, omitindo que isso já tinha na versão 7 e desapareceu nas posteriores. A 2006 ainda está muito longe de ser a ferramenta fantástica que o Delphi 7 é, parece que a Borland está sofrendo da síndrome de espelhamento com a Microsoft, acham que basta ir acrescentando penduricalhos na ferramenta para dizer que é evolução, e deixam prá lá questões como performance e estabilidade.&lt;br /&gt;A última versão que valeu a pena a grana do licenciamento foi a Delphi 7, grande parte do que foi acrescentado pela Borland de lá para cá, e que ela cobra uma boa grana por isso, pode ser conseguido com AddOns e componentes para o Delphi 7.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Java&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Eis aqui uma opção bem interessante apesar, como já escrevi em outro post, do peso absurdo das ferramentas da Sun. Mas o JDK (o Java Develpment Kit) da Sun é bem razoável em termos de desempenho.&lt;br /&gt;Estou experimentando diversas ferramentas de desenvolvimento: Sun JavaStudio Creator, Sun JavaStudio Enterprise, NetBeans, Eclipse e Oracle JDeveloper, e até um modesto TextPad.&lt;br /&gt;Gostei no nível de facilidades e ferramentas disponíveis no Sun JavaStudio Creator, podemos dizer que é praticamente uma ferramenta RAD para desenvolvimento em Java, porém o peso da ferramenta é absurdo, simplesmente derruba a máquina, tornando inviável o seu uso.&lt;br /&gt;O Sun JavaStudio Enterprise é outra ferramenta fantátisca, que também sofre dos mesmos males do JavaStudio Creator, um peso absurdo.&lt;br /&gt;Mas ambas as ferramentas da Sun têm a vantagem de ter uma gama de recursos fantástica.&lt;br /&gt;As 3 IDES mais interessantes, sem um peso absurdo, que eu experimentei: NetBeans, Eclipse e Oracle JDeveloper.&lt;br /&gt;Se você for desenvolver em Java aplicativos stand alone, considere seriamente o uso do NetBeans, tem uma IDE excelente, recursos muito bons, e o GUI Builder dele não fica devendo nada à outras ferramentas RAD.&lt;br /&gt;O ORACLE JDeveloper vai bem no desenvolvimento tanto no lado servidor quanto no cliente, é uma ferramenta também excelente para o desenvolvimento, considere seriamente, pois tem performance bem melhor do que as ferramentas da Sun.&lt;br /&gt;&lt;br /&gt;Já faz alguns anos que você pode contar com artigos sobre Java em qualquer revista de programação, tem sido uma das soluções mais badaladas nos últimos tempos. E com justiça, se bem que eu não desenvolveria em Java uma aplicação Desktop (por enquanto), para isto usaria Delphi sem sombra de dúvidas. &lt;br /&gt;A linguagem é fortemente tipada, e totalmente orientada a objetos, mais até do C++.&lt;br /&gt;Tem uma comunidade de desenvolvedores tão grande e ativa quanto o pessoal de Delphi, roda em uma infinidade de arquiteturas de hardware/software, sem o ônus de alterações no código fonte para suportar outro sistema operacional ou arquitetura de hardware.&lt;br /&gt;Os custos de licenciamento são zero.&lt;br /&gt;&lt;br /&gt;As desvantagens é que é lenta para a carga inicial, pois o que é gerado é um pseudo código, e um código nativo compilado e linkado, como o Delphi, irá rodar com uma performance bem superior.&lt;br /&gt;O treinamento para os desenvolvedores é um pouco mais dispendioso e trabalhoso, não é fácil fazer alguns desenvolvedores que vêm do VB, ou que aprenderam Delphi nos cursinhos meia boca da vida (que só ensinam a usar a linguagem em meio procedural, muito pouco OOP), a aprenderem a tecnologia.&lt;br /&gt;A curva de aprendizagem para os novatos é bem mais áspera e íngreme, e não há atalhos.&lt;br /&gt;O JRE (Java Runtime Environment) é um kit de tamanho considerável para ser instalado nas máquinas destino, se bem que isto não é desvantagem num produto como este, pois vai como parte da instalação padrão do aplicativo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;O Junior, lá de RO tem me falado muito de Ruby, e ele já me mandou algumas dicas muito boas sobre outras tecnologias, passei a usar o DBISAM para os produtos de prateleira por causa do (excelente) trabalho que ele faz de divulgação da tecnologia. Por causa da recomendação estou analisando o Ruby, principalmente com a IDE Ruby On Rails, que parece ser bem interessante. Vamos ver o que essa tecnologia promete.&lt;br /&gt;&lt;br /&gt;Vou parando por aqui por hoje, o Brasil perdeu prá França, coisa já esperada com essa turma do Parreira, a turma do Quadrado Trágico, turma mesmo por que time nunca teve, é uma turma de grandes estrelas, mas eu preferia um time, que soubesse jogar junto, que tivesse pegada, honra, brios... O Dunga faz falta, pelo menos ele chamava os companheiros na cincha, e cobrava responsabilidade, esta turma de bundões não tem brios, não tem nem sequer garra. Agora é torcer pelo Felipão, ou Big Phil como dizem os ingleses.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-115179763758119754?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/115179763758119754/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=115179763758119754' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/115179763758119754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/115179763758119754'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2006/07/pesquisa-para-um-novo-projeto-parte-ii.html' title='Pesquisa para um novo projeto – Parte II'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-115167506033611776</id><published>2006-06-30T10:39:00.000-03:00</published><updated>2006-06-30T10:44:20.356-03:00</updated><title type='text'>Dúvidas e decisões sobre um novo projeto – Mais dúvidas do que decisões.</title><content type='html'>Como sempre, a única coisa permanente é mudança, certeza a gente só tem de que vai mudar, nem que seja para o arquivo geral da cidade, vulgarmente conhecido como cemitério. Bem, neste caso as coisas não são tão dramáticas assim, mas empresa nenhuma fica parada no mesmo lugar, ou cresce ou diminui, ou vai para a frente ou vai para trás, e a minha não foge à regra, já cresci, já diminui, já levei calote, já ganhei grana, já dei com a cara no muro, com o muro na cara, e tudo o mais.&lt;br /&gt; Como as coisas estão evoluindo e melhorando, é hora de pensar no futuro, para onde crescer, para onde ir, em que fatia do mercado apostar? Enfim, uma penca de decisões cruciais, além das normais do dia a dia, como faturar a grana para pagar os funcionários, pagar o contador, o telefone, aluguel, internet, a Borland (que tá cobrando uma grana preta pelo Delphi, bem que eles podiam aliviar a mão um pouquinho né?), e principalmente o raio dos impostos (eita vida danada, o Lula pode não saber governar nem contar até dez, mas cobrar impostos sabe como ninguém, o que aumentou a carga tributária não é mole não, é no mínimo 1 funcionário a mais para cada 1 funcionário efetivo).&lt;br /&gt; Então, deixando a choradeira de lado, e o lero-lero para depois, a decisão é:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;- Que mercado atender? Qual seria o rentável?&lt;br /&gt;- Que produto esse mercado quer?&lt;br /&gt;&lt;/span&gt;&lt;br /&gt; E o que mais interessa para o pessoal de tecnologia que eventualmente ler este blog (que anda meio atirado às moscas, sem leitores nem postagem nos últimos tempos):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;- Que premissas atender ? &lt;br /&gt;- Que tecnologia usar?&lt;br /&gt;- Quais os pré-requisitos?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; Bem, vamos lá, tentando resolver as broncas uma de cada vez, e levando em consideração uma penca de opiniões do pessoal do news do delphi (news.netuno.com.br, grupo u-br.comp.ling.delphi), que é uma galera prá lá de non-sense, onde se discute de tudo um pouco, e onde nem o pessoal da Borland agüentou o tranco, que o diga o Lanusse, o pessoal lá é fera e doido, de tudo um pouco, por isso eu faço parte desde tempos imemoriais, no tempo em que ainda estávamos no news do uol, antes de nos banirem daquelas bandas, e como desenvolvedor bom tem que ter doses de doideira e habilidade em iguais proporções, por esses critérios o pessoal lá deve ser a melhor turma de desenvolvedor do Brasil.&lt;br /&gt; &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;- Como esse produto será posicionado no mercado?&lt;/span&gt;&lt;br /&gt; Em principio, a idéia é de que o produto seja internacional (estamos chique agora!), com suporte fácil a diversas linguagens, que essas linguagens possam ser inseridas apenas com um arquivo de recursos.&lt;br /&gt; Deve suportar diversos temas, para que se possa configurar o sistema com a identidade do cliente, cores e logotipia, de forma fácil e rápida.&lt;br /&gt; As rotinas de moeda e configurações locais para cada país devem ser implementadas via recursos também, possivelmente um pacote de localização que contenha também a linguagem.&lt;br /&gt; Não adianta malhar em ferro frio, como diria meu avô, quando você chega em um cliente de médio porte para cima, a marca da tecnologia começa a pesar, e nos pequenos clientes o que pesa é o custo, como compatibilizar isso?&lt;br /&gt; Para esta última questão, começamos pelo banco de dados, o aplicativo vai ter que suportar tecnologia open source e comercial, então vamos de suporte para Firebird ( prefiro muito mais do que MySQL, nunca fui com as fuças de um banco de dados à lá Paradox, com cada tabela separada em um arquivo, e além do mais Firebird é bem mais rápido e poderoso, além do licenciamento ser totalmente royalty free), ORACLE e Microsoft SQL Server, dois nomões do mundo de banco de dados com um market share considerável, e futuramente um suporte também para IBM DB2, este nunca pode ser desconsiderado, pois é o rei nas grandes instalações, e as últimas versões estão com uma performance assombrosa.&lt;br /&gt; Claro que isso vai dar um trabalho considerável para manter em sincronia todas as características rodando 100% em todos os bancos de dados, mas não se ganha dinheiro sem passar algum trabalho duro, salvo se você resolver traficar pasta base de cocaína, mas como isso é algo que o meu médico não recomenda para a preservação da minha saúde física, eu resolvi deixar essa solução prá lá, parece que só restou o trabalho duro, até por que eu queimei as outras chances de ficar rico: Não nasci rico, e casei com uma mulher tão dura quanto eu, e sou um verdadeiro fiasco jogando na mega sena.&lt;br /&gt;&lt;br /&gt; Rodar em servidor IIS ou Apache, que são os significativos no mercado, o restante nem vale a pena o esforço, para uma empresa pequena, tenho que concentrar os esforços aonde possa render, não vale a pena tentar defender tese, no fundo o nosso negócio é ganhar dinheiro solucionando as encrencas dos outros, e não conseguir mais encrenca né?&lt;br /&gt; Regras de negócio em camada de web services, para que o cliente possa consumir em aplicativos internos, ou que possa ser integrado e se integrar com outras soluções do mercado, logicamente estamos mirando integração com SAP, PeopleSoft, JDEdwards, Microsiga, DataSul, ORACLE ERP, etc, afinal é onde está a grana.&lt;br /&gt; Interface de cliente magro (thin client, para usar um jargão de marketing corrente no mercado), apenas um browser, user name e senha, e o usuário já está usando o aplicativo, até de um quiosque em uma lan-house, instalação zero, configuração mínima, funcionamento com o mínimo de problemas, e a grana do suporte paga a evolução do dito cujo.&lt;br /&gt;&lt;br /&gt; Receita legal né? Acho que dá prá crescer e fazer algum dindin, pelo menos até um Google da vida querer comprar a gente (estou aceitando ofertas generosas, que incluam 1 iate, apartamento em Paris, e o telefone da Juliana Paes, e claro um dos meus carros de sonho: uma Bugatti Veyron, um Aston Martin Vanquish Zagato, um Koenigsegg, uma Lamborghini Murciélago, uma Masserati MC12 Stradale ou Saleen S7, ou até um Jaguar, além de um punhado de dólares).&lt;br /&gt;&lt;br /&gt; E o que usar?&lt;br /&gt; Bem, na parte de banco de dados já defini o que quero, e na camada de web services?&lt;br /&gt; As opções eram várias, agora estão reduzidas à 3: Delphi, .NET ou Java, pendendo fortemente para a última, em que pese o peso absurdo do JavaStudio Enterprise da Sun.&lt;br /&gt;&lt;br /&gt; Bem, já foi um avanço até aqui, o resto no próximo post, que não vai demorar como os outros, agora eu prometi para o Tiago Hiller que vou escrever mais seguido, e o alemão vai pegar no meu pé se eu não postar, agora ele tá de papai, com mania de responsável, e como é um grande amigo, a gente deixa ele mandar um pouco, afinal em casa quem manda é a mulher mesmo, como na minha, onde eu dou a última palavra e aos berros: “SIM SENHORA! JÁ ESTOU INDO MEU AMOR!”.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-115167506033611776?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/115167506033611776/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=115167506033611776' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/115167506033611776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/115167506033611776'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2006/06/dvidas-e-decises-sobre-um-novo-projeto.html' title='Dúvidas e decisões sobre um novo projeto – Mais dúvidas do que decisões.'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-113032571446736403</id><published>2005-10-26T09:18:00.000-02:00</published><updated>2005-10-26T09:21:54.473-02:00</updated><title type='text'>Tecnologias nem tão novas assim, mas bem vindas sempre.</title><content type='html'>Pois é, depois de ler sobre extremme programming, refactoring, “&lt;em&gt;&lt;strong&gt;y otras cositas más&lt;/strong&gt;&lt;/em&gt;”, cheguei a conclusão de que me falta assessoria de marketing, eu já fazia tudo isso muitos anos atrás, só não tinha dado um nome pomposo para o negócio! Será que o Duda Mendonça faz um precinho camarada???&lt;br&gt;&lt;br /&gt;       Com um pouco de marketing, nesta hora eu estaria ganhando uma grana preta, só dando palestras, ao invés de ficar aqui brigando com o Delphi, que insiste em fazer umas maluquices estranhas, enquanto o cliente liga todos os dias, manda 2 ou 3 e-mails por dia, numa pressão enorme para ter a nova versão do sistema. E tem gente que ainda diz que gostaria de trabalhar como eu, sem horário, sem horário nem para começar e muito menos para finalizar o dia né?&lt;br&gt;&lt;br /&gt;       Ontem parei o trabalho lá pelas 02:00 da madruga, já dormindo e babando no teclado do notebook, a minha mulher acordando e me cutucando, que eu tava roncando, pode isso? Não dá prá acreditar que tem gente que sente inveja desta vida, só sendo maluco mesmo.&lt;br /&gt;       Mas de tudo isso pelo menos fica uma certeza: estou no caminho certo, e já faz um bom tempo.&lt;br /&gt;       Refactoring é quase que sobrevivência, quando a gente volta para implentar alguma nova característica numa rotina antiga, é que constata o quanto evoluiu (ou não, às vezes se tem que repensar os rumos), o código que eu escrevi a 2 anos atrás dá uma matéria prima e tanto para um retrabalho. Eu sempre fiz refactoring desse jeito, você volta na rotina antiga para botar uma coisa nova, uma nova característica ou nova funcionalidade, vê que o código tem um monte de coisas que pode ser melhorado, aproveita que já está no inferno mesmo, e não custa nada dançar uma valsa com o capeta, perde algumas horas a mais, e já refaz a rotina, otimizando, fazendo melhor, deixando mais claro.&lt;br /&gt;       Claro que você só faz isso naquela rotina, e assim vai aos poucos reescrevendo o programa, leva tempo, mas pelo menos dói menos, e tem a grande vantagem de ser pago para fazer isso. Afinal se o cliente está pedindo uma nova característica, isso é cobrado, e você já aproveita e refaz a rotina, com o tempo coberto pelo orçamento. Como eu disse, uma questão de sobrevivência, principalmente para quem não pode fazer grandes investimento em equipe e tecnologia, e dessa maneira vamos levando a vida....&lt;br /&gt;        Uma idéia interessante também é o “pair programming”, dois programadores trabalhando conjuntamente, em uma mesma máquina. Parece maluquice? Pois saiba que dá certo sim, e muito, no começo é muito estranho, estranho mesmo, mas depois que o treco engrena, você percebe a grande vantagem, e só larga se for obrigado.&lt;br /&gt;        Volto a falar disto mais adiante.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-113032571446736403?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/113032571446736403/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=113032571446736403' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/113032571446736403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/113032571446736403'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2005/10/tecnologias-nem-to-novas-assim-mas-bem.html' title='Tecnologias nem tão novas assim, mas bem vindas sempre.'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18008684.post-112966449906879788</id><published>2005-10-18T17:38:00.000-02:00</published><updated>2005-10-18T17:44:00.393-02:00</updated><title type='text'>(Re)comecei</title><content type='html'>Pronto, acho que agora talvez eu tenha saco para manter um ritmo constante dos posts.&lt;br /&gt;Vamos ver no que dá, afinal experiência já tenho, já tinha cometido outro blog antes, sabe lá aonde isto vai parar.&lt;br /&gt;     Se você pretende ler de vez em quando, não espere nada politicamente correto, nem grandes e edificantes idéias, isto aqui vai funcionar mesmo como um diário, ou uma latrina de pensamentos, use-o por sua própria conta e risco.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18008684-112966449906879788?l=acidbytes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acidbytes.blogspot.com/feeds/112966449906879788/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18008684&amp;postID=112966449906879788' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/112966449906879788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18008684/posts/default/112966449906879788'/><link rel='alternate' type='text/html' href='http://acidbytes.blogspot.com/2005/10/recomecei.html' title='(Re)comecei'/><author><name>AcidBytes</name><uri>http://www.blogger.com/profile/08214011109567854765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_0euyjp4V3iA/SGZe3_HCH5I/AAAAAAAAAB8/ZQYZRCZL4Mg/S220/FotoMinha_pqn.jpg'/></author><thr:total>0</thr:total></entry></feed>
