<?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-1218822825197894196</id><updated>2012-01-08T18:24:27.972-02:00</updated><title type='text'>Tarcísio Fischer</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tarcisiof.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tarcisiof.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Tarcísio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1218822825197894196.post-5959863965319423342</id><published>2012-01-08T18:24:00.001-02:00</published><updated>2012-01-08T18:24:27.979-02:00</updated><title type='text'>ULTIMO POST</title><content type='html'>Migrei para&amp;nbsp;&lt;a href="http://tarcisiofischer.wordpress.com/"&gt;http://tarcisiofischer.wordpress.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1218822825197894196-5959863965319423342?l=tarcisiof.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarcisiof.blogspot.com/feeds/5959863965319423342/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://tarcisiof.blogspot.com/2012/01/ultimo-post.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/5959863965319423342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/5959863965319423342'/><link rel='alternate' type='text/html' href='http://tarcisiof.blogspot.com/2012/01/ultimo-post.html' title='ULTIMO POST'/><author><name>Tarcísio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1218822825197894196.post-7026395441291109785</id><published>2010-12-19T16:06:00.001-02:00</published><updated>2010-12-19T16:12:16.959-02:00</updated><title type='text'>Um domingo com Verilog</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Bom pessoal, estou oficialmente iniciando meus estudos numa nova HDL: o Verilog.&lt;br /&gt;A um tempo atrás fiz um seminario sobre HDL onde eu mostrei algumas das mais conhecidas HDL's. Para quem tiver interesse os slides da minha apresentação estão aqui:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pet.inf.ufsc.br/node/265"&gt;http://pet.inf.ufsc.br/node/265&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Para quem não sabe, HDL significa Hardware Description Language, ou, Linguagem de Descrição de Hardware.&lt;br /&gt;Elas servem, como o próprio nome sugere, para descrever hardware.&lt;br /&gt;A algum tempo eu mencioneu a VHDL (VHSIC HDL ou Very Large Scalable&amp;nbsp; Integrated Circuit HDL) em dois dos meus posts:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tarcisiof.blogspot.com/2010/04/sistemas-digitais-vhdl-quartus-2.html"&gt;http://tarcisiof.blogspot.com/2010/04/sistemas-digitais-vhdl-quartus-2.html&lt;/a&gt;&lt;br /&gt;Onde eu declaro estar iniciando estudos na linguagem VHDL.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tarcisiof.blogspot.com/2010/04/vhdl-projeto-componentenbits.html"&gt;http://tarcisiof.blogspot.com/2010/04/vhdl-projeto-componentenbits.html&lt;/a&gt;&lt;br /&gt;Onde eu comento sobre a criação de um componente N bits em VHDL.&lt;br /&gt;&lt;br /&gt;Agora, estou tirando um tempo para aprender um pouco de Verilog, por, principalmente, 3 motivos simples:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Alguns amigos indicaram, dizendo que é mais simples de se trabalhar.&lt;/li&gt;&lt;li&gt;Aprender uma nova linguagem, já que verilog é, também, muito usada pelo mundo afora.&lt;/li&gt;&lt;li&gt;Pela diversão :D&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Estou atualmente usando o Ubuntu Linux 10.04 (ainda não atualizei para o 10.10), para proceder com os testes eu instalei o iVerilog (Icarus Verilog) e o gtkwave. Para instalar esses programas pode-se usar o Synaptic do ubuntu&lt;br /&gt;ou abrir o terminal, virar root e digitar:&lt;br /&gt;&lt;br /&gt;apt-get install iverilog - Para instalar o Icarus Verilog&lt;br /&gt;apt-get install gtkwave&amp;nbsp; - Para instalar o GTKWave&lt;br /&gt;&lt;br /&gt;Para quem usa windows provavelmente o Altera Quartus ou o Xilinx Ise são boas opções. Existe uma versão gratuita para estudante de cada um deles.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.altera.com/products/software/quartus-ii/web-edition/qts-we-index.html"&gt;http://www.altera.com/products/software/quartus-ii/web-edition/qts-we-index.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.xilinx.com/tools/webpack.htm"&gt;http://www.xilinx.com/tools/webpack.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Finalmente, mãos a massa!&lt;br /&gt;Estou usando gedit e/ou o vim para escrever os códigos.&lt;br /&gt;Farei meu trabalho em dois posts, na tentativa de organizar as coisas.&lt;br /&gt;Nesse, irei deixar registrado passo a passo de como criar um projeto da forma que eu achei mais simples e organizada.&lt;br /&gt;Até porque, se daqui a uns dias eu esquecer, posso eu mesmo consultar meu post a fim de obter alguma ajuda.&lt;br /&gt;&lt;br /&gt;Em primeiro lugar, criei uma pasta chamada PortasLogicas. Dentro dela criei os arquivos PortasLogicas.v e PortasLogicas_tb.v.&lt;br /&gt;Onde .v é a extensão de um arquivo do verilog. PortasLogicas.v é a descrição do hardware em si e o PortasLogicas_tb.v é o "test bench" ("bancada de testes", daí o "tb") do hardware, onde iremos gerar algumas saídas de teste.&lt;br /&gt;&lt;br /&gt;Importante dizer que, até agora, ao que me parece, as ferramentas que eu escolhi são meramente comportamentais, ou seja, não levam em conta o atraso das portas logicas. Portanto, não teremos como saber qual o atraso real dos sistemas digitais que criarmos. Até porque, não sabemos onde esse hardware vai ser colocado (FPGA?). Mas de qualquer forma, isso é um detalhe para o futuro.&lt;br /&gt;&lt;br /&gt;Voltando ao PortasLogicas.v, nossa brincadeira vai ser simples: criar um pequeno componente que se comporta da seguinte forma:&lt;br /&gt;&lt;br /&gt;Entradas: A e B&lt;br /&gt;Saidas: C e D, onde C = "A ou B" e D = "A e B"&lt;br /&gt;Obviamente estou contando que o leitor saiba o basico de lógica booleana, caso contrario, leia isso:&lt;br /&gt;&lt;a href="http://pt.wikipedia.org/wiki/L%C3%B3gica_bin%C3%A1ria"&gt;http://pt.wikipedia.org/wiki/L%C3%B3gica_bin%C3%A1ria&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Para escrever o que queremos em Verilog, precisamos primeiro definir um "module":&lt;br /&gt;&lt;br /&gt;module PortasLogicas(a, b, c, d);&lt;br /&gt;&lt;br /&gt;Isso, até onde eu entendi, significa que temos um componente chamado "PortasLogicas" que conhece "a, b, c e d".&lt;br /&gt;Agora, precisamos definir o que são a, b, c e d. Assim:&lt;br /&gt;&lt;br /&gt;input a, b;&lt;br /&gt;output c, d;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;Ou seja, estamos dizendo que a e b são ENTRADAS do nosso componente e c e d são SAIDAS.&lt;br /&gt;Devemos agora descrever o comportamento interno do componente, para que ele conheça que valores colocar nas saídas c e d:&lt;br /&gt;&lt;br /&gt;assign c = a | b;&lt;br /&gt;assign d = a &amp;amp; b;&lt;br /&gt;&lt;br /&gt;c = a | b significa que c vai ter o valor do resultado da operação lógica "a ou b".&lt;br /&gt;d = a &amp;amp; b significa que d vai ter o valor do resultado da operação lógica "a e b".&lt;br /&gt;&lt;br /&gt;Finalmente, terminamos nosso "module" escrevendo:&lt;br /&gt;&lt;br /&gt;endmodule&lt;br /&gt;&lt;br /&gt;Pronto :)&lt;br /&gt;O verilog completo está abaixo:&lt;br /&gt;&lt;br /&gt;module PortasLogicas(a, b, c, d);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; input a, b;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output c, d;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; assign c = a | b;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; assign d = a &amp;amp; b;&lt;br /&gt;endmodule&lt;br /&gt;&lt;br /&gt;Mas... E agora? Como sabemos se isso está funcionando?&lt;br /&gt;Agora entra aquele outro arquivo, PortasLogicas_tb.v.&lt;br /&gt;É nele que descreveremos a bancada de testes para esse componente.&lt;br /&gt;É simples, iniciamos com:&lt;br /&gt;&lt;br /&gt;module PortasLogicas_tb;&lt;br /&gt;&lt;br /&gt;Então descrevemos as variaveis que vamos usar:&lt;br /&gt;&lt;br /&gt;reg a, b;&lt;br /&gt;wire c, d;&lt;br /&gt;&lt;br /&gt;Fui obrigado a usar "reg" para a e b, para poder "jogar" valores na entrada do componente.&lt;br /&gt;O Verilog não permite fazer a = 1 ou a = 0 num "bloco" quando se trata de um "wire".&lt;br /&gt;Logo falarei sobre "blocos".&lt;br /&gt;Continuando, temos:&lt;br /&gt;&lt;br /&gt;PortasLogicas dut (a, b, c, d);&lt;br /&gt;&lt;br /&gt;Que instancia um componente do "tipo" PortasLogicas (aquele que criamos agora a pouco) com o nome dut.&lt;br /&gt;Dut significa "Device Under Test", me pareceu um padrão pelos sites que consultei na internet.&lt;br /&gt;Dentro dos parenteses coloca-se, na ordem correspondente, as entradas e saidas do componente.&lt;br /&gt;No caso, as entradas são meus "reg"s a e b e as saidas meus "wire"s c e d.&lt;br /&gt;Agora criamos um bloco "initial". Um "bloco" contém uma sequencia de comandos que serão executados em ordem. O bloco "initial" será executado apenas uma vez.&lt;br /&gt;&lt;br /&gt;initial&lt;br /&gt;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $dumpfile("saida.vcd");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $dumpvars;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; b = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #10&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; b = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #10&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; b = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #10&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; b = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #10&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $finish;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;Os comandos $dumpfile("saida.vcd") e $dumpvars preparam o verilog para jogar as saídas para um arquivo VCD, que, posteriormente, será usado com o programa GTKWave para mostrar as formas de onda.&lt;br /&gt;(VCD = Value Change Dump - http://en.wikipedia.org/wiki/Value_Change_Dump).&lt;br /&gt;Comandos #10 significam "aguarde 10 unidades de tempo".&lt;br /&gt;O que eu estou fazendo alí é setar a e b como 0, esperar 10 unidades de tempo, trocar os valores, esperar mais 10 unidades de tempo, trocar os valores, e assim por diante, até alcançar $finish.&lt;br /&gt;&lt;br /&gt;Temos então nosso test banch completo como segue:&lt;br /&gt;&lt;br /&gt;module PortasLogicas_tb;&lt;br /&gt;&lt;br /&gt;reg a, b;&lt;br /&gt;wire c, d;&lt;br /&gt;&lt;br /&gt;PortasLogicas dut (a, b, c, d);&lt;br /&gt;&lt;br /&gt;initial&lt;br /&gt;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $dumpfile("saida.vcd");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $dumpvars;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; b = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #10&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; b = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #10&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; b = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #10&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; b = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #10&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $finish;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;endmodule&lt;br /&gt;&lt;br /&gt;Tudo pronto :D&lt;br /&gt;Para testar, no linux, fazemos assim:&lt;br /&gt;&lt;br /&gt;"Compilar" os arquivos:&lt;br /&gt;iverilog PortasLogicas.v PortasLogicas_tb.v&lt;br /&gt;Executar os testes&lt;br /&gt;./a.out&lt;br /&gt;Mostrar formas de onda no GTKWave&lt;br /&gt;gtkwave saida.vcd&lt;br /&gt;Excluir arquivos&lt;br /&gt;rm -f a.out saida.vcd&lt;br /&gt;&lt;br /&gt;Claro que fazer tudo isso é um pouco trabalhoso. Imagine ter que ficar digitando esses quatro comandos a cada vez que for testar alguma coisa.&lt;br /&gt;Por isso é muito mais facil fazer isso (no linux) com um Makefile :D&lt;br /&gt;Makefile, pra quem não sabe, é um arquivo "especial" linux que, se vc estiver no terminal em uma pasta que tenha um arquivo chamado Makefile, vc pode escrever "make" e apertar enter e os comandos do makefile vão ser executados.&lt;br /&gt;Pra quem tiver interesse: &lt;a href="http://orion.lcg.ufrj.br/compgraf1/downloads/MakefileTut.pdf"&gt;http://orion.lcg.ufrj.br/compgraf1/downloads/MakefileTut.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Meu Makefile ficou assim:&lt;br /&gt;&lt;br /&gt;PortasLogicas:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; iverilog PortasLogicas.v PortasLogicas_tb.v&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ./a.out&lt;br /&gt;&lt;br /&gt;onda:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gtkwave saida.vcd&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;clean:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rm -f a.out saida.vcd&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Então quando eu executo&lt;br /&gt;&lt;br /&gt;make PortasLogicas onda clean&lt;br /&gt;&lt;br /&gt;ele compila, executa, me mostra as formas de onda e limpa a pasta atual :)&lt;br /&gt;Por enquanto é só, pessoal. Esse post ficou maior do que eu pensei que ficaria, então não tenho certeza se posto outro ainda hoje. Mas já adiantando, no próximo post eu vou mostrar um SomadorNBits e algumas coisas mais legais que pode-se fazer nas bancadas de teste. Pra quem quiser, vou deixar o arquivo zipado com a pasta PortasLogicas e seus arquivos logo abaixo, além de uma imagem com o meu resultado do GTKWave.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_apAtWK_i3aw/TQ5IsqWvlSI/AAAAAAAAAFM/Lj7zZUVeqNY/s1600/portasLogicas.png" imageanchor="1"&gt;&lt;img border="0" height="91" src="http://2.bp.blogspot.com/_apAtWK_i3aw/TQ5IsqWvlSI/AAAAAAAAAFM/Lj7zZUVeqNY/s200/portasLogicas.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Arquivos&lt;br /&gt;&lt;a href="http://www.4shared.com/file/0gPAfTIk/PortasLogicastar.html"&gt;Pacote PortasLogicas&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Bibliografia (Na verdade perdi alguns links :( Mas ta tudo no google)&lt;br /&gt;&lt;a href="http://www.icarus.com/eda/verilog/"&gt;http://www.icarus.com/eda/verilog/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://gtkwave.sourceforge.net/"&gt;http://gtkwave.sourceforge.net/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.asic-world.com/tidbits/wire_reg.html"&gt;http://www.asic-world.com/tidbits/wire_reg.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www-inst.eecs.berkeley.edu/%7Ecs150/Documents/Nets.pdf"&gt;http://www-inst.eecs.berkeley.edu/~cs150/Documents/Nets.pdf&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.asic-world.com/verilog/vbehave1.html"&gt;http://www.asic-world.com/verilog/vbehave1.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Verilog#Initial_and_Always"&gt;http://en.wikipedia.org/wiki/Verilog#Initial_and_Always&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Value_Change_Dump"&gt;http://en.wikipedia.org/wiki/Value_Change_Dump&lt;/a&gt;&lt;br /&gt;&lt;a href="http://orion.lcg.ufrj.br/compgraf1/downloads/MakefileTut.pdf"&gt;http://orion.lcg.ufrj.br/compgraf1/downloads/MakefileTut.pdf&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1218822825197894196-7026395441291109785?l=tarcisiof.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarcisiof.blogspot.com/feeds/7026395441291109785/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://tarcisiof.blogspot.com/2010/12/um-domingo-com-verilog.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/7026395441291109785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/7026395441291109785'/><link rel='alternate' type='text/html' href='http://tarcisiof.blogspot.com/2010/12/um-domingo-com-verilog.html' title='Um domingo com Verilog'/><author><name>Tarcísio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_apAtWK_i3aw/TQ5IsqWvlSI/AAAAAAAAAFM/Lj7zZUVeqNY/s72-c/portasLogicas.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1218822825197894196.post-7904502018075965437</id><published>2010-08-05T20:29:00.002-03:00</published><updated>2010-08-05T21:49:24.340-03:00</updated><title type='text'>Configurando Apache + PHP + MySQL no Slackware</title><content type='html'>Primeiramente devo ressaltar que esse post não é um tutorial. É apenas a minha saga na instalacão desses pacotes no meu Slackware.&lt;br /&gt;&lt;br /&gt;Eu ainda não configurei o teclado direito no Slackware também, então, não fiquem assustados se eu escrever coisas como "instalacão", "acão", etc... Pois o meu Slackware ainda não sabe o que é cedilha hehehe... Talvez num próximo post eu faca isso.&lt;br /&gt;&lt;br /&gt;Informacões talvez (ir)relevantes:&lt;br /&gt;OS: Slackware 13.1&lt;br /&gt;Linux: 2.6.33.4-smp&lt;br /&gt;&lt;br /&gt;Na tentativa mais basica, fui até o slackbuilds.com e procurei por Apache. Não encontrei o que eu queria. Tudo bem, fui até o google, digitei apache e achei isso:&lt;br /&gt;&lt;br /&gt;http://httpd.apache.org/download.cgi&lt;br /&gt;&lt;br /&gt;Fiz o download, extrai o pacote (tar -xvf nomedopacote), dei um ./configure, um make e um make install. Deve ter instalado, mas tentei excecutar e não consegui.&lt;br /&gt;Ai de mim, fui até o google novamente e achei esse tutorial:&lt;br /&gt;&lt;br /&gt;http://www.vivaolinux.com.br/artigo/Instalando-o-Apache-+-PHP-+-MySQL-no-Slackware/&lt;br /&gt;&lt;br /&gt;Baixei os pacotes, pensei "mas eu já instalei o Apache. Devo instalar denovo?"&lt;br /&gt;Fiquei em dúvida. sim? não? pensei em desinstalar o outro primeiro, mas aí fiquei com preguica. Entrei em tentacão e... su... installpkg ./apache-1.3.28....&lt;br /&gt;&lt;br /&gt;Juro que nunca mais faco isso.&lt;br /&gt;&lt;br /&gt;Bom, instalei os outros pacotes e segui o tutorial para a parte 2: configuracão.&lt;br /&gt;Acredito que o MySQL esteja OK, mas ao tentar iniciar o apache eu recebo:&lt;br /&gt;&lt;br /&gt;apachectl start                      &lt;br /&gt;/usr/sbin/httpd: error while loading shared libraries: libdb.so.2: cannot open shared object file: No such file or directory&lt;br /&gt;/usr/sbin/apachectl start: httpd could not be started&lt;br /&gt;&lt;br /&gt;Lá vamos nós atrás da libdb.so.2  u,u&lt;br /&gt;Primeira opcão do google é essa:&lt;br /&gt;&lt;br /&gt;http://www.rpmfind.net/linux/rpm2html/search.php?query=libdb.so.2&lt;br /&gt;&lt;br /&gt;Mas quando tento baixar, ganho uma mensagem de "550 failed to change directory" na cara :(&lt;br /&gt;&lt;br /&gt;Ok, depois de algumas tentativas... Hora da gambiarra!&lt;br /&gt;Encontrei esse blog&lt;br /&gt;&lt;br /&gt;http://support.zeus.com/zws/faqs/2005/09/19/libdb&lt;br /&gt;&lt;br /&gt;Que sugeriu esse link&lt;br /&gt;&lt;br /&gt;http://hany.sk/~hany/RPM/doors2.4/jr/db1-1.85-0.3.i386.html&lt;br /&gt;&lt;br /&gt;Que tem um RPM do libdb.&lt;br /&gt;Baixei ele, dei um&lt;br /&gt;&lt;br /&gt;rpm2tgz ./db1-1.85-0.3.i386.rpm&lt;br /&gt;installpkg db1-1.85-0.3.i386.tgz&lt;br /&gt;apachectl start&lt;br /&gt;&lt;br /&gt;e.... Mesmo erro.&lt;br /&gt;Ok, vamos entrar num nível ainda maior de gambiarrice:&lt;br /&gt;&lt;br /&gt;tar -xvf ./db1-1.85-0.3.i386.tgz&lt;br /&gt;cd ./usr/lib/&lt;br /&gt;ls&lt;br /&gt;libdb1.so.2&lt;br /&gt;&lt;br /&gt;Aí está o desgracado!&lt;br /&gt;&lt;br /&gt;ln ./libdb1.so.2 /usr/lib/libdb.so.2&lt;br /&gt;apachectl&lt;br /&gt;[Thu Aug  5 21:31:55 2010] [warn] module mod_php4.c is already added, skipping&lt;br /&gt;/usr/sbin/apachectl start: httpd started&lt;br /&gt;&lt;br /&gt;Seila que diabo é esse warning, mas vou no meu firefox e digito 127.0.0.1 e ganho um "It Works!"&lt;br /&gt;&lt;br /&gt;Beleza, agora um teste de verdade:&lt;br /&gt;&lt;br /&gt;cd /var/www/htdocs&lt;br /&gt;vim teste.php&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;$nome = "Tarcisio";&lt;br /&gt;echo "Ola mundo. Meu nome é " . $nome;&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;firefox &gt; 127.0.0.1/teste.php&lt;br /&gt;&lt;br /&gt;Ola mundo. Meu nome é Tarcisio&lt;br /&gt;&lt;br /&gt;Coisa linda :D&lt;br /&gt;Agora vamos "limpar" as coisas:&lt;br /&gt;&lt;br /&gt;apachectl stop&lt;br /&gt;/usr/sbin/apachectl stop: httpd stopped&lt;br /&gt;rm /usr/lib/libdb.so.2&lt;br /&gt;cp /home/tarcisio/downloads/usr/lib/libdb1.so.2 /usr/lib/libdb.so.2&lt;br /&gt;apachectl start&lt;br /&gt;[Thu Aug  5 21:43:21 2010] [warn] module mod_php4.c is already added, skipping&lt;br /&gt;/usr/sbin/apachectl start: httpd started&lt;br /&gt;&lt;br /&gt;Tudo bem. Dei uma pesquisada e dizem que esse warning é "normal". Eu não gostei muito dele, mas por hoje chega. Agora posso brincar com PHP no meu slackware em paz :)&lt;br /&gt;&lt;br /&gt;Fui.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1218822825197894196-7904502018075965437?l=tarcisiof.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarcisiof.blogspot.com/feeds/7904502018075965437/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://tarcisiof.blogspot.com/2010/08/configurando-apache-php-mysql-no.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/7904502018075965437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/7904502018075965437'/><link rel='alternate' type='text/html' href='http://tarcisiof.blogspot.com/2010/08/configurando-apache-php-mysql-no.html' title='Configurando Apache + PHP + MySQL no Slackware'/><author><name>Tarcísio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1218822825197894196.post-2955843142953748469</id><published>2010-04-19T16:16:00.006-03:00</published><updated>2010-04-19T18:13:17.473-03:00</updated><title type='text'>VHDL - Projeto ComponenteNBits</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Objetivo&lt;/span&gt;&lt;br /&gt;Estudar uso de GENERIC e PROCESS&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ComponenteNBits&lt;/span&gt;&lt;br /&gt;&lt;a href="http://pt.wikipedia.org/wiki/Circuitos_combinacionais"&gt;Circuito Combinacional&lt;/a&gt; Com 3 entradas e 1 saída. Se comporta como a tabela que segue:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SEL   S&lt;br /&gt;00    a+b&lt;br /&gt;01    a-b&lt;br /&gt;10    a&gt;&gt;1&lt;br /&gt;11    b&gt;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Interface&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_apAtWK_i3aw/S8zC8pWp6WI/AAAAAAAAAEo/PMcdzdtVjTw/s1600/interface.png"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 132px;" src="http://2.bp.blogspot.com/_apAtWK_i3aw/S8zC8pWp6WI/AAAAAAAAAEo/PMcdzdtVjTw/s320/interface.png" alt="" id="BLOGGER_PHOTO_ID_5461954795242383714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ENTITY ComponenteNBits IS&lt;br /&gt;  GENERIC (N : INTEGER := 4);&lt;br /&gt;  PORT (a, b: IN STD_LOGIC_VECTOR (N-1 DOWNTO 0);&lt;br /&gt;        sel: IN STD_LOGIC_VECTOR (1 DOWNTO 0);&lt;br /&gt;        s: OUT STD_LOGIC_VECTOR (N-1 DOWNTO 0));&lt;br /&gt;END ComponenteNBits;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Arquivos&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;ComponenteNBits.vhd&lt;br /&gt;http://www.4shared.com/file/k10UOjlw/ComponenteNBits.html&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Simulação&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;force a 0000 0ns, 0101 20ns, 0100 40ns, 0000 60ns&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;force b 0001 0ns, 1100 20ns, 0010 40ns, 0000 60ns&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;force sel 00 0ns, 01 40ns, 10 60ns, 11 80ns&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;run 100ns&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_apAtWK_i3aw/S8zHAx-ZntI/AAAAAAAAAEw/7Z6Dlc-IR5I/s1600/sim.png"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 164px;" src="http://3.bp.blogspot.com/_apAtWK_i3aw/S8zHAx-ZntI/AAAAAAAAAEw/7Z6Dlc-IR5I/s320/sim.png" alt="" id="BLOGGER_PHOTO_ID_5461959264322559698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Links&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;http://www.eng.auburn.edu/~nelson/courses/elec5250_6250/VHDL%203%20Sequential.pdf&lt;br /&gt;http://pldworld.biz/_hdl/2/esd.cs.ucr.edu/labs/tutorial/&lt;br /&gt;http://vhdlguru.blogspot.com/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1218822825197894196-2955843142953748469?l=tarcisiof.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarcisiof.blogspot.com/feeds/2955843142953748469/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://tarcisiof.blogspot.com/2010/04/vhdl-projeto-componentenbits.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/2955843142953748469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/2955843142953748469'/><link rel='alternate' type='text/html' href='http://tarcisiof.blogspot.com/2010/04/vhdl-projeto-componentenbits.html' title='VHDL - Projeto ComponenteNBits'/><author><name>Tarcísio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_apAtWK_i3aw/S8zC8pWp6WI/AAAAAAAAAEo/PMcdzdtVjTw/s72-c/interface.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1218822825197894196.post-440716231565342501</id><published>2010-04-19T16:10:00.002-03:00</published><updated>2010-04-19T16:16:49.129-03:00</updated><title type='text'>Sistemas Digitais - VHDL - Quartus 2 + ModelSim</title><content type='html'>Antes de iniciar os posts sobre experiencias com VHDL, deixo registradas algumas informações importantes:&lt;br /&gt;&lt;br /&gt;http://pt.wikipedia.org/wiki/FPGA&lt;br /&gt;http://pt.wikipedia.org/wiki/VHDL&lt;br /&gt;http://pt.wikipedia.org/wiki/Altera&lt;br /&gt;&lt;br /&gt;Download do Quartus II [WEB Edition] e ModelSim&lt;br /&gt;https://www.altera.com/support/software/download/sof-download_center.html&lt;br /&gt;&lt;br /&gt;O objetivo do ou dos posts não é ensinar a usar as ferramentas, mas sim deixar registrado os experimentos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1218822825197894196-440716231565342501?l=tarcisiof.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarcisiof.blogspot.com/feeds/440716231565342501/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://tarcisiof.blogspot.com/2010/04/sistemas-digitais-vhdl-quartus-2.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/440716231565342501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/440716231565342501'/><link rel='alternate' type='text/html' href='http://tarcisiof.blogspot.com/2010/04/sistemas-digitais-vhdl-quartus-2.html' title='Sistemas Digitais - VHDL - Quartus 2 + ModelSim'/><author><name>Tarcísio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1218822825197894196.post-7929132204787527366</id><published>2010-02-17T17:25:00.001-02:00</published><updated>2010-02-17T17:25:23.844-02:00</updated><title type='text'>GERANDO PDF`s EM JAVA</title><content type='html'>GERANDO PDF`s EM JAVA&lt;br /&gt;&lt;br /&gt;Hoje precisei gerar PDF em JAVA, numa pesquisa rápida pela internet encontrei a biblioteca iText&lt;br /&gt;http://itextpdf.com/&lt;br /&gt;&lt;br /&gt;É bem simples, com ela, criar os PDF`s!&lt;br /&gt;Em http://www.roseindia.net/java/itext/index.shtml tem uma série de exemplos bem explicados de como usar a ferramenta.&lt;br /&gt;Aqui também tem alguns exemplos: http://www.ibm.com/developerworks/br/library/os-javapdf/&lt;br /&gt;&lt;br /&gt;Outra solução, que eu achei bem mais elegante, foi a proposta por esse cara&lt;br /&gt;"Converta HTML para PDF com 06 linhas de Código"&lt;br /&gt;http://javafree.uol.com.br/artigo/866449/Converta-HTML-para-PDF-com-06-linhas-de-Codigo.html&lt;br /&gt;&lt;br /&gt;E funcionou mesmo! :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1218822825197894196-7929132204787527366?l=tarcisiof.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarcisiof.blogspot.com/feeds/7929132204787527366/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://tarcisiof.blogspot.com/2010/02/gerando-pdfs-em-java.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/7929132204787527366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/7929132204787527366'/><link rel='alternate' type='text/html' href='http://tarcisiof.blogspot.com/2010/02/gerando-pdfs-em-java.html' title='GERANDO PDF`s EM JAVA'/><author><name>Tarcísio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1218822825197894196.post-7720467714173012202</id><published>2010-02-13T11:04:00.000-02:00</published><updated>2010-02-13T11:05:09.345-02:00</updated><title type='text'>JAVA | WEB-CRAWLERS DIA 1</title><content type='html'>&lt;span style="font-family: arial;font-size:85%;" &gt;POST 1:&lt;br /&gt;Não vou reinventar a roda, pesquisei na internet possíveis web-crawlers.&lt;br /&gt;No site a seguir existe uma lista com alguns crawlers open-source.&lt;br /&gt;&lt;br /&gt;http://java-source.net/open-source/crawlers&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;POST 2:&lt;br /&gt;Bom, pelo visto não vou ter que reinventar a roda... vou ter que INVENTA-LA mesmo!&lt;br /&gt;Não encontrei nenhum crawler que seja só uma biblioteca que me permita trabalhar em cima :(&lt;br /&gt;Mas, seguindo as recomendações desse cara http://lembra.wordpress.com/tag/crawler/&lt;br /&gt;eu posso usar esse tal de httpunit (http://sourceforge.net/projects/httpunit/files/httpunit/1.7/httpunit-1.7.zip/download)&lt;br /&gt;pra catar as informações dos sites... Vamos ver como funciona...&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;POST 3:&lt;br /&gt;Em primeiro momento, o httpUnit se mostrou realmente muito bom! em poucas linhas de código ele conseguiu me retornar&lt;br /&gt;quantos links um determinado site tem.&lt;br /&gt;&lt;br /&gt;        try {&lt;br /&gt;            // create the conversation object which will maintain state for us&lt;br /&gt;            WebConversation wc = new WebConversation();&lt;br /&gt;&lt;br /&gt;            // Obtain the main page on the meterware web site&lt;br /&gt;            String url="http://www.meterware.com";&lt;br /&gt;            WebRequest request = new GetMethodWebRequest( url );&lt;br /&gt;            WebResponse response = wc.getResponse( request );&lt;br /&gt;&lt;br /&gt;            // find the link which contains the string "HttpUnit" and click it&lt;br /&gt;            WebLink httpunitLink = response.getFirstMatchingLink( WebLink.MATCH_CONTAINED_TEXT, "HttpUnit" );&lt;br /&gt;            response = httpunitLink.click();&lt;br /&gt;&lt;br /&gt;            // print out the number of links on the HttpUnit main page&lt;br /&gt;            System.out.println( "The HttpUnit main page '"+url+"' contains " + response.getLinks().length + " links" );&lt;br /&gt;&lt;br /&gt;          } catch (Exception e) {&lt;br /&gt;             System.err.println( "Exception: " + e );&lt;br /&gt;          }&lt;br /&gt;&lt;br /&gt;Se bem que ele demorou quase 3 segundos pra fazer isso... Mas tudo bem...&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;POST 4:&lt;br /&gt;É, parece que o mar não está para peixe... Tentei iniciar um crawler pro site do terra. Ou eu não estou sabendo fazer direito ou o httpUnit&lt;br /&gt;não é tão bom assim. Ele da erro ao tentar executar o código:&lt;br /&gt;&lt;br /&gt;        try {&lt;br /&gt;            // create the conversation object which will maintain state for us&lt;br /&gt;            WebConversation wc = new WebConversation();&lt;br /&gt;&lt;br /&gt;            // Obtain the main page on the meterware web site&lt;br /&gt;            String url="http://www.terra.com.br";&lt;br /&gt;            WebRequest request = new GetMethodWebRequest( url );&lt;br /&gt;            WebResponse response = wc.getResponse( request );&lt;br /&gt;&lt;br /&gt;            // find the link which contains the string "HttpUnit" and click it&lt;br /&gt;            //WebLink httpunitLink = response.getFirstMatchingLink( WebLink.MATCH_CONTAINED_TEXT, "HttpUnit" );&lt;br /&gt;            //response = httpunitLink.click();&lt;br /&gt;&lt;br /&gt;            System.out.println(response.getLinks().length);&lt;br /&gt;           &lt;br /&gt;            //for(int i = 0; i &lt; response.getLinks().length; i++){&lt;br /&gt;            //    System.out.println(response.getLinks()[i].getURLString());&lt;br /&gt;            //}&lt;br /&gt;&lt;br /&gt;          } catch (Exception e) {&lt;br /&gt;             System.err.println( "Exception: " + e );&lt;br /&gt;          }&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;POST 5:&lt;br /&gt;Bom, acho que encontrei a explicação aqui: http://httpunit.sourceforge.net/doc/faq.html#norhino&lt;br /&gt;O httpunit não vem com essa biblioteca no pacote, acho que vou ter que baixa-la a parte.&lt;br /&gt;Link para download do Rhino: http://www.mozilla.org/rhino/download.html&lt;br /&gt;Agora é só colocar o arquivo js.jar no classpath e testar...&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;POST 6:&lt;br /&gt;Não funcionou.&lt;br /&gt;Mas esse link http://httpunit.sourceforge.net/doc/faq.html#disable%20scripting me deu uma luz:&lt;br /&gt;&lt;br /&gt;HttpUnitOptions.setScriptingEnabled( false );&lt;br /&gt;&lt;br /&gt;e o código agora funciona corretamente:&lt;br /&gt;&lt;br /&gt;        try {&lt;br /&gt;            HttpUnitOptions.setScriptingEnabled( false );&lt;br /&gt;            // create the conversation object which will maintain state for us&lt;br /&gt;            WebConversation wc = new WebConversation();&lt;br /&gt;&lt;br /&gt;            String url="http://www.terra.com.br";&lt;br /&gt;            WebRequest request = new GetMethodWebRequest( url );&lt;br /&gt;            WebResponse response = wc.getResponse( request );&lt;br /&gt;&lt;br /&gt;            // find the link which contains the string "HttpUnit" and click it&lt;br /&gt;            //WebLink httpunitLink = response.getFirstMatchingLink( WebLink.MATCH_CONTAINED_TEXT, "HttpUnit" );&lt;br /&gt;            //response = httpunitLink.click();&lt;br /&gt;&lt;br /&gt;            //System.out.println(response.getLinks().length);&lt;br /&gt;           &lt;br /&gt;            for(int i = 0; i &lt; response.getLinks().length; i++){&lt;br /&gt;                System.out.println(response.getLinks()[i].getURLString());&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;          } catch (Exception e) {&lt;br /&gt;             System.err.println( "Exception: " + e );&lt;br /&gt;          }&lt;br /&gt;&lt;br /&gt;Ele mostra todos os links do site do terra :D&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;POST 7:&lt;br /&gt;Ok, agora que sei que é possível fazer isso, quero pegar algum dado de verdade.&lt;br /&gt;Vamos ao site da iMasters. Quero pegar todas as noticias do site referentes a JAVA.&lt;br /&gt;Primeiramente, pegaremos uma noticia qualquer:&lt;br /&gt;&lt;br /&gt;Eu percebi que o conteudo do artigo fica em strConteudo e o titulo na tag title mesmo. então:&lt;br /&gt;&lt;br /&gt;        try {&lt;br /&gt;            HttpUnitOptions.setScriptingEnabled( false );&lt;br /&gt;            // create the conversation object which will maintain state for us&lt;br /&gt;            WebConversation wc = new WebConversation();&lt;br /&gt;&lt;br /&gt;            String url="http://imasters.uol.com.br/artigo/15674/java/jpa_com_jboss_tools_no_eclipse/";&lt;br /&gt;            WebRequest request = new GetMethodWebRequest( url );&lt;br /&gt;            WebResponse response = wc.getResponse( request );&lt;br /&gt;&lt;br /&gt;            // find the link which contains the string "HttpUnit" and click it&lt;br /&gt;            //WebLink httpunitLink = response.getFirstMatchingLink( WebLink.MATCH_CONTAINED_TEXT, "HttpUnit" );&lt;br /&gt;            //response = httpunitLink.click();&lt;br /&gt;&lt;br /&gt;            //System.out.println(response.getLinks().length);&lt;br /&gt;           &lt;br /&gt;            System.out.println(response.getTitle());&lt;br /&gt;           &lt;br /&gt;            HTMLElement[] divs = response.getElementsByTagName("div");&lt;br /&gt;            for(int i=0; i &lt; divs.length; i++) {&lt;br /&gt;                if(divs[i].getID().equals("strConteudo"))&lt;br /&gt;                    System.out.println(divs[i].getText());&lt;br /&gt;            }&lt;br /&gt;           &lt;br /&gt;            for(int i = 0; i &lt; response.getLinks().length; i++){&lt;br /&gt;                //System.out.println(response.getLinks()[i].getURLString());&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;          } catch (Exception e) {&lt;br /&gt;             System.err.println( "Exception: " + e );&lt;br /&gt;          }&lt;br /&gt;&lt;br /&gt;Funcionou corretamente :D&lt;br /&gt;Próximo passo é, a partir da primeira página (http://imasters.uol.com.br) ele tem que me dar uma lista de links.&lt;br /&gt;Depois de pegar a lista de links, ele vai link a link procurando a palavra JAVA no LINK, no TITULO e no CORPO do artigo.&lt;br /&gt;Se encontrar, quero que o artigo seja retornado, senão, não :)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1218822825197894196-7720467714173012202?l=tarcisiof.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarcisiof.blogspot.com/feeds/7720467714173012202/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://tarcisiof.blogspot.com/2010/02/java-web-crawlers-dia-1.html#comment-form' title='10 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/7720467714173012202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/7720467714173012202'/><link rel='alternate' type='text/html' href='http://tarcisiof.blogspot.com/2010/02/java-web-crawlers-dia-1.html' title='JAVA | WEB-CRAWLERS DIA 1'/><author><name>Tarcísio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1218822825197894196.post-2557282908701049903</id><published>2010-01-28T01:23:00.002-02:00</published><updated>2010-01-28T01:27:33.776-02:00</updated><title type='text'>Programação de Jogos usando C++ &amp; OpenGL - Dia 1</title><content type='html'>Programação de Jogos usando C++ &amp;amp; OpenGL&lt;br /&gt;&lt;br /&gt;Primeiros Passos: Configurando&lt;br /&gt;&lt;br /&gt;Para meus experimentos, vou utilizar S.O. Ubuntu 9.10 com o Eclipse para C++ (http://www.eclipse.org/downloads/).&lt;br /&gt;Após instalar o Eclipse e fazer um Olá Mundo, chegou a hora de pegar as bibliotecas p/ trabalhar com o openGL.&lt;br /&gt;Segui as recomendações desse blog: http://www.ferdychristant.com/blog/articles/DOMM-72MPPE&lt;br /&gt;Entrei no Synaptic e procurei o pacote freeglut3-dev ( o freeglut3 já etava instalado para mim ).&lt;br /&gt;No Eclipse, fui em Project &gt; Properties &gt; C/C++ Builder &gt; Settings &gt; GCC C++ Linker &gt; Libraries e adicionei  nas libraries ( -l ) "glut".&lt;br /&gt;Compilei, então, o código proposto pelo próprio blog.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Entendendo o openGL. 1ª Parte: O Básico&lt;br /&gt;&lt;br /&gt;Como eu sou novato no openGL, vou primeiro fazer uns testes para saber do que ele é capaz.&lt;br /&gt;Eu sei que ele tem capacidade para programação 3D com super efeitos e etc, mas o meu objetivo aqui é começar de baixo.&lt;br /&gt;De acordo com o GameDev (http://www.gamedev.net/reference/design/features/makegames/page2.asp) um bom jogo para iniciar&lt;br /&gt;é TETRIS.&lt;br /&gt;Talvez eu esteja me subestimando, mas quero algo ainda mais simples. Acho que um jogo estilo SNAKE é mais fácil que TETRIS.&lt;br /&gt;&lt;br /&gt;Bom, meu primeiro teste funcionou normalmente. Desenhei um TRIANGULO numa janela.&lt;br /&gt;Estranhamente eu tive que usar esse método glutInit(&amp;amp;argc, argv);&lt;br /&gt;Acho que só é necessário no Linux.&lt;br /&gt;&lt;br /&gt;glutDisplayFunc(void)&lt;br /&gt;Seta o metodo que vai desenhar as coisas na janela.&lt;br /&gt;O legal é que, sem isso, vc roda o programa e nao acontece nada.&lt;br /&gt;&lt;br /&gt;glutMainLoop&lt;br /&gt;http://www.opengl.org/documentation/specs/glut/spec3/node14.html#SECTION00041000000000000000&lt;br /&gt;Loop principal. Evita o programa de ser finalizado.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.4shared.com/file/209422777/f0b90159/openGlTest001.html"&gt;openGlTest001&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Entendendo o openGL. 2ª Parte: Fullscreen&lt;br /&gt;&lt;br /&gt;Eu pretendo fazer todos os meus jogos serem FULLSCREEN, portanto, esse tópico é de grande importancia.&lt;br /&gt;O tutorial http://www.swiftless.com/tutorials/opengl/fullscreen.html ensina bem como resolver isso.&lt;br /&gt;Basicamente, vc tem o glutGameModeString com o parametro a larguraxaltura:colordepth@hertz&lt;br /&gt;Exemplo:&lt;br /&gt;glutGameModeString( "990x768:32@75" );&lt;br /&gt;990x760 pixel&lt;br /&gt;32bits de cores&lt;br /&gt;75hz&lt;br /&gt;&lt;br /&gt;Para aplicar usa-se glutEnterGameMode(); e para sair usa-se glutLeaveGameMode();&lt;br /&gt;Claro que, se eu fizer o meu jogo fullscreen eu nao vou ter como FECHAR o aplicativo.&lt;br /&gt;Sendo assim, preciso setar um método que me garanta que, ao pressionar ESC, o programa vá fechar:&lt;br /&gt;&lt;br /&gt;NOTA: PARA USAR O exit(0) É NECESSARIO #include &lt;stdlib.h&gt;&lt;br /&gt;&lt;br /&gt;void keyboard(unsigned char key, int x, int y) {&lt;br /&gt;   if (key == 27) {&lt;br /&gt;       glutLeaveGameMode();&lt;br /&gt;       exit(0);&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;e depois dizer ao openGL que esse método existe:&lt;br /&gt;&lt;br /&gt;glutKeyboardFunc (keyboard);&lt;br /&gt;&lt;br /&gt;Bom, parece que com o freeGlut3 as coisas não saem como planejado. Eu não consegui que meus aplicativos ficassem&lt;br /&gt;fullscreen corretamente :(&lt;br /&gt;Com SDL eu consegui o truque. É bem provavel, entao, que eu prefira aderir ao SDL por essa limitação do openGL.&lt;/stdlib.h&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1218822825197894196-2557282908701049903?l=tarcisiof.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarcisiof.blogspot.com/feeds/2557282908701049903/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://tarcisiof.blogspot.com/2010/01/programacao-de-jogos-usando-c-opengl.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/2557282908701049903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/2557282908701049903'/><link rel='alternate' type='text/html' href='http://tarcisiof.blogspot.com/2010/01/programacao-de-jogos-usando-c-opengl.html' title='Programação de Jogos usando C++ &amp; OpenGL - Dia 1'/><author><name>Tarcísio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1218822825197894196.post-740086472490045432</id><published>2010-01-24T03:25:00.002-02:00</published><updated>2010-01-24T03:29:17.226-02:00</updated><title type='text'>Hello World - Sony Ericsson W580i + J2ME</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Problema&lt;/span&gt;&lt;br /&gt;Por algum motivo o aplicativo "Hello World" padrão do NetBeans não roda no Sony Ericsson 580i&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solução&lt;br /&gt;&lt;/span&gt;Para solucionar o problema, deve-se, ao criar um novo projeto, modificas as versões do &lt;span style="font-weight: bold;"&gt;CLDC&lt;/span&gt; e &lt;span style="font-weight: bold;"&gt;MIDP&lt;/span&gt; para 1.0 e 2.0 respectivamente. Apenas assim consegui executar no meu celular o aplicativo de Hello World.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1218822825197894196-740086472490045432?l=tarcisiof.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarcisiof.blogspot.com/feeds/740086472490045432/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://tarcisiof.blogspot.com/2010/01/hello-world-sony-ericsson-w580i-j2me.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/740086472490045432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/740086472490045432'/><link rel='alternate' type='text/html' href='http://tarcisiof.blogspot.com/2010/01/hello-world-sony-ericsson-w580i-j2me.html' title='Hello World - Sony Ericsson W580i + J2ME'/><author><name>Tarcísio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1218822825197894196.post-8059457810532620003</id><published>2010-01-24T01:03:00.002-02:00</published><updated>2010-01-24T02:40:56.731-02:00</updated><title type='text'>Instalando J2ME + NetBeans no Ubuntu</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Problema&lt;/span&gt;&lt;br /&gt;Instalar, configurar e testar J2ME no UBUNTU 9.10 - Karmic Coala&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Downloads&lt;/span&gt;&lt;br /&gt;[ Java JDK 6 ]&lt;br /&gt;&lt;br /&gt;Download do NetBeans para J2ME&lt;br /&gt;http://netbeans.c3sl.ufpr.br/6.8/bundles/netbeans-6.8-ml-java-linux.sh&lt;br /&gt;&lt;br /&gt;Download do JWT 2.5.2&lt;br /&gt;https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=sun_java_wireless_toolkit-2.5.2_01b-oth-JPR@CDS-CDS_Developer&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solução&lt;/span&gt;&lt;br /&gt;Pelo terminal, dar permissões para executar o arquivo e executa-lo em seguida:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;chmod 0777 ./sun_java_wireless_toolkit-2.5.2_01-linuxi486.bin&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;sudo ./sun_java_wireless_toolkit-2.5.2_01-linuxi486.bin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;senha&gt;&lt;br /&gt;&lt;br /&gt;Após ler toda o contrato devera aparecer&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;No suitable Java interpreter was detected&lt;br /&gt;&lt;br /&gt;0) Specify a path to a Java interpreter directory.&lt;br /&gt;1) Cancel this installation.&lt;br /&gt;Select a choice [0-1]: 0&lt;br /&gt;&lt;br /&gt;This application requires Java 2 SDK, Standard Edition (1.5 or later). Enter a path to a Java 2 SDK (For example: /user/jdk1.5/bin). You can type "exit" to cancel installation.&lt;br /&gt;Enter a path to the Java 2 SDK: /usr/lib/jvm/java-6-openjdk/bin&lt;br /&gt;/usr/lib/jvm/java-6-openjdk/bin/java&lt;br /&gt;Testing /usr/lib/jvm/java-6-openjdk/bin/java...&lt;br /&gt;&lt;br /&gt;Please enter a directory into which you would like to install the Sun Java(TM) Wireless Toolkit, 2.5.2 for CLDC.&lt;br /&gt;[ default is /home/tarcisio/Área de Trabalho/WTK2.5.2 ]:/home/tarcisio/wtk&lt;br /&gt;Installation directory is /home/tarcisio/wtk.&lt;br /&gt;&lt;br /&gt;Check for Product Updates&lt;br /&gt;&lt;br /&gt;Sun Java(TM) Wireless Toolkit for CLDC includes Check for Product Update feature.&lt;br /&gt;This feature will be active every 7 days and will inform you about the new Product Updates.&lt;br /&gt;No personally identifiable data such as name, address, or e-mail address will be collected. You can disable this feature later in Preferences.&lt;br /&gt;The information collected by Product Update includes the following:&lt;br /&gt;&lt;br /&gt;* Operating system&lt;br /&gt;* Country  and Language setting on your computer&lt;br /&gt;* Date and version of the Wireless Toolkit that you are about to install&lt;br /&gt;* Unique random user ID generated by the Wireless Toolkit&lt;br /&gt;&lt;br /&gt;Collected data will be used for future improving of the product.&lt;br /&gt;Please read Sun's Privacy Policy at http://www.sun.com/privacy/index.html&lt;br /&gt;&lt;br /&gt;Check for Product Updates? [yes or no] yes&lt;br /&gt;&lt;br /&gt;Setup has enough information to start copying the program files.&lt;br /&gt;Current Settings:&lt;br /&gt;Destination Directory&lt;br /&gt;    /home/tarcisio/wtk/&lt;br /&gt;JVM Folder&lt;br /&gt;    /usr/lib/jvm/java-6-openjdk/bin/&lt;br /&gt;Check for Program Updates&lt;br /&gt;    Enabled&lt;br /&gt;&lt;br /&gt;Please choose one of the following options:&lt;br /&gt;0) Begin copying files if you are satisfied with the settings  .&lt;br /&gt;1) Cancel the installation.&lt;br /&gt;Select a choice [0-1]: 0&lt;br /&gt;Checksumming...&lt;br /&gt;&lt;br /&gt;Extracting the installation files...&lt;br /&gt;Documentation for the Sun Java(TM) Wireless Toolkit&lt;br /&gt;2.5.2 for CLDC is in the file&lt;br /&gt;  /home/tarcisio/wtk/index.html&lt;br /&gt;In order to start using the Sun Java(TM) Wireless Toolkit 2.5.2 for CLDC, please run&lt;br /&gt;  /home/tarcisio/wtk/bin/ktoolbar&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;PARA TESTAR:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;tarcisio@PASCAL:~/Área de Trabalho$ /home/tarcisio/wtk/bin/ktoolbar&lt;br /&gt;OTA server emulation started ...&lt;br /&gt;HTTPS server emulation started ...&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Instalando o NetBeans&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;chmod 0777 ./netbeans-6.8-ml-java-linux.sh &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;sudo ./netbeans-6.8-ml-java-linux.sh &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;next,&gt;&lt;br /&gt;&lt;br /&gt;Testando tudo:&lt;br /&gt;&lt;br /&gt;Abra o NetBeans ( ele deve ter feito um atalho em aplicativos &gt; desenvolvimento &gt; netbeans, se não, vá pelo terminal:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;/bin/sh "/usr/local/netbeans-6.8/bin/netbeans"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Vá em Arquivo &gt; Novo Projeto escolha Java Me e clique em Próximo&lt;br /&gt;Pode deixar tudo padrão ( certificar que esteja checado em "criar midlet olá" )&lt;br /&gt;&lt;br /&gt;&lt;finalizar&gt;&lt;br /&gt;&lt;br /&gt;Agora é só apertar no icone de "play" ou apertar F6 para ver o aplicativo rodando.&lt;br /&gt;&lt;br /&gt;O arquivo JAR é gerado em /home/tarcisio/NetBeansProjects/&lt;projeto&gt;/dist&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1218822825197894196-8059457810532620003?l=tarcisiof.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarcisiof.blogspot.com/feeds/8059457810532620003/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://tarcisiof.blogspot.com/2010/01/instalando-j2me-netbeans-no-ubuntu.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/8059457810532620003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/8059457810532620003'/><link rel='alternate' type='text/html' href='http://tarcisiof.blogspot.com/2010/01/instalando-j2me-netbeans-no-ubuntu.html' title='Instalando J2ME + NetBeans no Ubuntu'/><author><name>Tarcísio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1218822825197894196.post-7618548900712570799</id><published>2009-09-28T11:19:00.004-03:00</published><updated>2009-09-28T11:25:18.920-03:00</updated><title type='text'>Retornar o tamanho de arquivo ou diretório no Linux</title><content type='html'>&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;Problema:&lt;/span&gt;&lt;br /&gt;Retornar o tamanho de arquivo ou diretório no Linux&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solução:&lt;/span&gt;&lt;br /&gt;$ du -ha (nome do arquivo ou pasta): para ver e listar o tamanho de todos os arquivos dentro do diretório ou subdiretório(s);&lt;br /&gt;$ du -hs (nome do arquivo&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt; ou pasta&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;): para ver o tamanho de um arquivo ou diretório sem listar.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="font-weight: bold; color: rgb(102, 102, 102);"&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;Referências:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a style="color: rgb(153, 153, 153);" href="http://www.vivaolinux.com.br/dica/Retornar-o-tamanho-de-arquivo-ou-diretorio-em-bytes-%28KB-MB%29"&gt;http://www.vivaolinux.com.br/dica/Retornar-o-tamanho-de-arquivo-ou-diretorio-em-bytes-%28KB-MB%29&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1218822825197894196-7618548900712570799?l=tarcisiof.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarcisiof.blogspot.com/feeds/7618548900712570799/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://tarcisiof.blogspot.com/2009/09/retornar-o-tamanho-de-arquivo-ou.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/7618548900712570799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/7618548900712570799'/><link rel='alternate' type='text/html' href='http://tarcisiof.blogspot.com/2009/09/retornar-o-tamanho-de-arquivo-ou.html' title='Retornar o tamanho de arquivo ou diretório no Linux'/><author><name>Tarcísio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1218822825197894196.post-7146690865895420043</id><published>2009-08-21T12:00:00.002-03:00</published><updated>2009-08-21T12:10:36.764-03:00</updated><title type='text'>Herança no PostgreSQL</title><content type='html'>&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;Problema:&lt;/span&gt;&lt;br /&gt;Criar um comportamento de herança no PostgreSQL&lt;br /&gt;PostgreSQL 8.3&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solução:&lt;/span&gt;&lt;br /&gt;Criar uma tabela "pai":&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p class="MsoNormal"  style="margin: 0cm 0cm 0pt; color: rgb(0, 102, 0);font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;create table tabela_pai(&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"  style="margin: 0cm 0cm 0pt; color: rgb(0, 102, 0);font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         id&lt;/span&gt; int,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"  style="margin: 0cm 0cm 0pt; color: rgb(0, 102, 0);font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;nome varchar&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="margin: 0cm 0cm 0pt; color: rgb(0, 102, 0);font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="margin: 0cm 0cm 0pt;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;E a tabela "filho":&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="margin: 0cm 0cm 0pt;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="margin: 0cm 0cm 0pt; color: rgb(0, 102, 0);font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;create table tabela_filho(&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"  style="margin: 0cm 0cm 0pt; color: rgb(0, 102, 0);font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=""&gt;         &lt;/span&gt;idade int&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 102, 0);font-family:verdana;font-size:85%;"  &gt;) inherits (tabela_pai);&lt;/span&gt;&lt;p class="MsoNormal"  style="margin: 0cm 0cm 0pt;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Para pesquisa:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;select tabela_pai.id, tabela_pai.nome, tabela_filho.idade from &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:verdana;font-size:85%;"  &gt;tabela_pai&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:verdana;font-size:85%;"  &gt;&lt;br /&gt;left join tabela_filho on tabela_pai.id = tabela_filho.id WHERE tabela_filho.nome = 'exemplo'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Referências:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.devmedia.com.br/articles/viewcomp.asp?comp=9182"&gt;&lt;span style="font-family:verdana;"&gt;http://www.devmedia.com.br/articles/viewcomp.asp?comp=9182 &lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.postgresql.org/docs/8.1/static/ddl-inherit.html"&gt;&lt;span style="font-family:verdana;"&gt;http://www.postgresql.org/docs/8.1/static/ddl-inherit.html&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1218822825197894196-7146690865895420043?l=tarcisiof.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarcisiof.blogspot.com/feeds/7146690865895420043/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://tarcisiof.blogspot.com/2009/08/heranca-no-postgresql.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/7146690865895420043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/7146690865895420043'/><link rel='alternate' type='text/html' href='http://tarcisiof.blogspot.com/2009/08/heranca-no-postgresql.html' title='Herança no PostgreSQL'/><author><name>Tarcísio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1218822825197894196.post-851945911290647095</id><published>2009-08-13T11:32:00.004-03:00</published><updated>2009-08-13T11:40:05.732-03:00</updated><title type='text'>Configuração de proxy no FireFox</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Problema:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Editar as configurações de proxy no FireFox.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;FireFox 3.5.30729&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Solução:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Menu Ferramentas&gt;Opções&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Aba Avançado&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Aba Rede&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Botão Configurar conexão...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Rádio Configuração manual de proxy&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Referências:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;a href="http://www.proxy4free.com/" target="_blank"&gt;http://www.proxy4free.com&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1218822825197894196-851945911290647095?l=tarcisiof.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarcisiof.blogspot.com/feeds/851945911290647095/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://tarcisiof.blogspot.com/2009/08/configuracao-de-proxy-no-firefox.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/851945911290647095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/851945911290647095'/><link rel='alternate' type='text/html' href='http://tarcisiof.blogspot.com/2009/08/configuracao-de-proxy-no-firefox.html' title='Configuração de proxy no FireFox'/><author><name>Tarcísio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1218822825197894196.post-1965510573453967457</id><published>2009-08-13T11:08:00.003-03:00</published><updated>2009-08-13T11:28:44.144-03:00</updated><title type='text'>Deixando o Moodle acessivel interna e externamente</title><content type='html'>&lt;span style="font-weight: bold;font-family:verdana;font-size:85%;"  &gt;Problema:&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;O Moodle não era acessível internamente e externamente ao mesmo tempo.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Moodle 1.9.5+ (200701550)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Solução:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Editar o arquivo config.php na pasta principal do moodle modificar a linha&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);font-family:verdana;" &gt;$CFG-&gt;wwwroot   = 'http://example.com/moodle';&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Pelas linhas:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);font-family:verdana;" &gt;if(substr($_SERVER['REMOTE_ADDR'],0,X) == 'IP_1')&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);font-family:verdana;" &gt;$CFG-&gt;wwwroot = 'http://IP_1/moodle';&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);font-family:verdana;" &gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);font-family:verdana;" &gt;$CFG-&gt;wwwroot = 'http://IP_2/moodle';&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-family:verdana;" &gt;Onde :&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-family:verdana;" &gt;X = Número de caracteres do IP_1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-family:verdana;" &gt;IP_1 e IP_2 = IP's desejados&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(102, 102, 102);font-family:verdana;" &gt;Referências:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);font-family:verdana;" &gt;&lt;a href="http://moodle.org/mod/forum/discuss.php?d=81624" target="_blank"&gt;http://moodle.org/mod/forum/discuss.php?d=81624&lt;/a&gt; - &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);font-family:verdana;" &gt;Re: Moodle numa rede interna mas com acesso exterior: uma solução a implementar&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);font-family:verdana;" &gt;por Ivan Pereira - Segunda, 15 Setembro 2008, 03:41&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1218822825197894196-1965510573453967457?l=tarcisiof.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarcisiof.blogspot.com/feeds/1965510573453967457/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://tarcisiof.blogspot.com/2009/08/deixando-o-moodle-acessivel-interna-e.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/1965510573453967457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/1965510573453967457'/><link rel='alternate' type='text/html' href='http://tarcisiof.blogspot.com/2009/08/deixando-o-moodle-acessivel-interna-e.html' title='Deixando o Moodle acessivel interna e externamente'/><author><name>Tarcísio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1218822825197894196.post-4148197208784430322</id><published>2009-08-11T09:23:00.006-03:00</published><updated>2009-08-13T11:32:32.869-03:00</updated><title type='text'>Criando serviços no Windows</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Problema:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Fazer um programa iniciar como serviço no Windows.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;S.O.: Windows VISTA ULTIMATE&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Solução:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;1. Iniciar o prompt de comando do windows COMO ADMINISTRADOR;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;2. Digitar o seguinte comando:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);font-family:verdana;" &gt;sc create NOME_DO_SERVIÇO binPath= "CAMINHO DO ARQUIVO EXECUTAVEL" start= auto type= own&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);font-family:verdana;" &gt;IMPORTANTE: Sempre deixar um ESPAÇO depois dos "="s !!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold;"&gt;Referências:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/251192/pt-br" target="_blank"&gt;http://support.microsoft.com/kb/251192/pt-br &lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 0, 0);font-family:verdana;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1218822825197894196-4148197208784430322?l=tarcisiof.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarcisiof.blogspot.com/feeds/4148197208784430322/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://tarcisiof.blogspot.com/2009/08/criando-servicos-no-windows.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/4148197208784430322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/4148197208784430322'/><link rel='alternate' type='text/html' href='http://tarcisiof.blogspot.com/2009/08/criando-servicos-no-windows.html' title='Criando serviços no Windows'/><author><name>Tarcísio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1218822825197894196.post-1981860055607989982</id><published>2009-01-16T11:52:00.006-02:00</published><updated>2009-08-13T11:40:13.344-03:00</updated><title type='text'>Ano novo, blog novo</title><content type='html'>&lt;span style=";font-family:verdana;font-size:85%;"  &gt;O Ano novo está aí e eu precisava iniciar algo diferente. Como eu postava extremamente pouco no meu blog, principalmente por dificuldade de encontrar assuntos que encaixassem com o tema do blog, reformulei-o totalmente. Não apenas o design, que agora ficou bem mais simples, os assuntos abordados aqui agora serão programação e tecnologia em geral.&lt;br /&gt;&lt;br /&gt;Um feliz 2009 a todos, desejo-lhes muito sucesso nesse ano novo.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1218822825197894196-1981860055607989982?l=tarcisiof.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarcisiof.blogspot.com/feeds/1981860055607989982/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://tarcisiof.blogspot.com/2009/01/ano-novo-blog-novo.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/1981860055607989982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1218822825197894196/posts/default/1981860055607989982'/><link rel='alternate' type='text/html' href='http://tarcisiof.blogspot.com/2009/01/ano-novo-blog-novo.html' title='Ano novo, blog novo'/><author><name>Tarcísio</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
