<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Silveira Neto &#187; Programação</title>
	<atom:link href="http://silveiraneto.net/tag/programacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://silveiraneto.net</link>
	<description>the world is a pixel</description>
	<lastBuildDate>Sun, 08 Jan 2012 05:17:57 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>Contando Algarismos Em Um Intervalo</title>
		<link>http://silveiraneto.net/2010/01/29/contando-algarismos-em-um-intervalo/</link>
		<comments>http://silveiraneto.net/2010/01/29/contando-algarismos-em-um-intervalo/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 23:21:59 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[compreensão de lista]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[programação funcional]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://silveiraneto.net/?p=3142</guid>
		<description><![CDATA[Quantos zeros tem entre um e mil? É mais fácil responder perguntas desse tipo escrevendo pequenos programas usando o suporte a programação funcional e compreensão de lista que algumas linguagens como Python oferecem. Para contar os zeros de um número, transformamos ele em uma string e contamos quantas substrings &#8217;0&#8242; ele contém. Por exemplo o [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Quantos zeros tem entre um e mil?</strong></p>
<p>É mais fácil responder perguntas desse tipo escrevendo pequenos programas usando o suporte a <a href="http://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_funcional">programação funcional</a> e <a href="http://pt.wikipedia.org/wiki/List_comprehension">compreensão de lista</a> que algumas linguagens como Python oferecem.</p>
<p>Para contar os zeros de um número, transformamos ele em uma string e contamos quantas substrings &#8217;0&#8242; ele contém. Por exemplo o 800:</p>
<div class="wp_syntax">
<div class="code">
<pre class="python python" style="font-family:monospace;"><span style="color: #008000;">str</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">800</span><span style="color: black;">&#41;</span>.<span style="color: black;">count</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'0'</span><span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;"># 2</span></pre>
</div>
</div>
<p>Para gerar uma lista ordenada com os elementos do intervalo entre um e mil, inclusive os valores um e mil:</p>
<div class="wp_syntax">
<div class="code">
<pre class="python python" style="font-family:monospace;"><span style="color: #008000;">xrange</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">1001</span><span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;"># [1, 2, ... , 999, 1000]</span></pre>
</div>
</div>
<p>Pegamos esse intervalo  e geramos uma outra lista onde cada elemento é a contagem dos zeros do número do intervalo.</p>
<div class="wp_syntax">
<div class="code">
<pre class="python python" style="font-family:monospace;"><span style="color: black;">&#91;</span><span style="color: #008000;">str</span><span style="color: black;">&#40;</span>x<span style="color: black;">&#41;</span>.<span style="color: black;">count</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'0'</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">for</span> x <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">xrange</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">1001</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
<span style="color: #808080; font-style: italic;"># [0, 0, ... , 0, 3]</span></pre>
</div>
</div>
<p>Por exemplo, 1 não tem nenhum zero. Dois também não. 999 também não. 1000 tem três.</p>
<p>Somamos todos os elementos da lista temos o número de algarismos zero entre um e mil.</p>
<div class="wp_syntax">
<div class="code">
<pre class="python python" style="font-family:monospace;"><span style="color: #008000;">sum</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #008000;">str</span><span style="color: black;">&#40;</span>x<span style="color: black;">&#41;</span>.<span style="color: black;">count</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'0'</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">for</span> x <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">xrange</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">1001</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></pre>
</div>
</div>
<p>E a resposta é 192.</p>
<p>O mesmo poderia ser obtido contando quantos zeros há na representação de string da lista do intervalo.</p>
<div class="wp_syntax">
<div class="code">
<pre class="python python" style="font-family:monospace;"><span style="color: #008000;">str</span><span style="color: black;">&#40;</span><span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">1001</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>.<span style="color: black;">count</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'0'</span><span style="color: black;">&#41;</span></pre>
</div>
</div>
<p>Mas essa abordagem apesar de menor é menos geral se você quiser modifica-la para contagens mais complexas.</p>
<p>A diferença do range pro xrange é que o range constrói a lista real do intervalo real em memória e o xrange uma representação da lista do intervalo. Em geral mas não sempre, a performasse do xrange é melhor.</p>
<p>De toda forma, em ambos os casos, o resultado é o mesmo.</p>
]]></content:encoded>
			<wfw:commentRss>http://silveiraneto.net/2010/01/29/contando-algarismos-em-um-intervalo/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Java, listing system properties</title>
		<link>http://silveiraneto.net/2008/03/10/java-listing-system-properties/</link>
		<comments>http://silveiraneto.net/2008/03/10/java-listing-system-properties/#comments</comments>
		<pubDate>Mon, 10 Mar 2008 16:23:17 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[java.util]]></category>
		<category><![CDATA[program]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Properties]]></category>

		<guid isPermaLink="false">http://silveiraneto.net/2008/03/10/java-listing-system-properties/</guid>
		<description><![CDATA[This code prints out your system properties. import java.util.Properties; &#160; public class PropertiesLister&#123; public static void main &#40;String args&#91;&#93;&#41;&#123; Properties props = System.getProperties&#40;&#41;; props.list&#40;System.out&#41;; &#125; &#125; In the machine I&#8217;m writing right now: &#8211; listing properties &#8211; java.runtime.name=Java(TM) SE Runtime Environment sun.boot.library.path=/usr/lib/jvm/java-6-sun-1.6.0.00/jre/&#8230; java.vm.version=1.6.0-b105 java.vm.vendor=Sun Microsystems Inc. java.vendor.url=http://java.sun.com/ path.separator=: java.vm.name=Java HotSpot(TM) Server VM file.encoding.pkg=sun.io user.country=BR sun.java.launcher=SUN_STANDARD [...]]]></description>
			<content:encoded><![CDATA[<p>This code prints out your system properties.</p>
<div class="wp_syntax">
<div class="code">
<pre class="java java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.Properties</span>;
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> PropertiesLister<span style="color: #009900;">&#123;</span>
   <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main <span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> args<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
       <span style="color: #003399;">Properties</span> props <span style="color: #339933;">=</span> <span style="color: #003399;">System</span>.<span style="color: #006633;">getProperties</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
       props.<span style="color: #006633;">list</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">System</span>.<span style="color: #006633;">out</span><span style="color: #009900;">&#41;</span>;
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre>
</div>
</div>
<p>In the machine I&#8217;m writing right now:</p>
<blockquote><p>&#8211; listing properties &#8211;<br />
java.runtime.name=Java(TM) SE Runtime Environment<br />
sun.boot.library.path=/usr/lib/jvm/java-6-sun-1.6.0.00/jre/&#8230;<br />
java.vm.version=1.6.0-b105<br />
java.vm.vendor=Sun Microsystems Inc.<br />
java.vendor.url=http://java.sun.com/<br />
path.separator=:<br />
java.vm.name=Java HotSpot(TM) Server VM<br />
file.encoding.pkg=sun.io<br />
user.country=BR<br />
sun.java.launcher=SUN_STANDARD<br />
sun.os.patch.level=unknown<br />
java.vm.specification.name=Java Virtual Machine Specification<br />
user.dir=/tmp<br />
java.runtime.version=1.6.0-b105<br />
java.awt.graphicsenv=sun.awt.X11GraphicsEnvironment<br />
java.endorsed.dirs=/usr/lib/jvm/java-6-sun-1.6.0.00/jre/&#8230;<br />
os.arch=i386<br />
java.io.tmpdir=/tmp<br />
line.separator=</p>
<p>java.vm.specification.vendor=Sun Microsystems Inc.<br />
os.name=Linux<br />
sun.jnu.encoding=UTF-8<br />
java.library.path=/usr/lib/jvm/java-6-sun-1.6.0.00/jre/&#8230;<br />
java.specification.name=Java Platform API Specification<br />
java.class.version=50.0<br />
sun.management.compiler=HotSpot Server Compiler<br />
os.version=2.6.20-16-generic<br />
user.home=/home/export/silveira<br />
user.timezone=<br />
java.awt.printerjob=sun.print.PSPrinterJob<br />
file.encoding=UTF-8<br />
java.specification.version=1.6<br />
user.name=silveira<br />
java.class.path=.<br />
java.vm.specification.version=1.0<br />
sun.arch.data.model=32<br />
java.home=/usr/lib/jvm/java-6-sun-1.6.0.00/jre<br />
java.specification.vendor=Sun Microsystems Inc.<br />
user.language=pt<br />
java.vm.info=mixed mode<br />
java.version=1.6.0<br />
java.ext.dirs=/usr/lib/jvm/java-6-sun-1.6.0.00/jre/&#8230;<br />
sun.boot.class.path=/usr/lib/jvm/java-6-sun-1.6.0.00/jre/&#8230;<br />
java.vendor=Sun Microsystems Inc.<br />
file.separator=/<br />
java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport&#8230;<br />
sun.cpu.endian=little<br />
sun.io.unicode.encoding=UnicodeLittle<br />
sun.cpu.isalist=</p></blockquote>
<p>Try out at your home. :)</p>
]]></content:encoded>
			<wfw:commentRss>http://silveiraneto.net/2008/03/10/java-listing-system-properties/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Estudando para a SCJA</title>
		<link>http://silveiraneto.net/2008/02/27/estudando-para-a-scja/</link>
		<comments>http://silveiraneto.net/2008/02/27/estudando-para-a-scja/#comments</comments>
		<pubDate>Wed, 27 Feb 2008 20:17:40 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[português]]></category>
		<category><![CDATA[certificação]]></category>
		<category><![CDATA[desconto]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[SAI]]></category>
		<category><![CDATA[scja]]></category>
		<category><![CDATA[Sun]]></category>
		<category><![CDATA[Sun Learning Connection]]></category>

		<guid isPermaLink="false">http://silveiraneto.net/2008/02/27/estudando-para-a-scja/</guid>
		<description><![CDATA[A SCJA (Sun Certified Java Associate) é a certificação Java de nível de entrada. Como ela não é pre-requisito para nenhuma outra certificação poucas pessoas tiram a SCJA. Apesar disso eu a acho uma certificação interessante porque ela é bem abrangente, embora que superficial. Eu estou estudando para SCJA como uma porta de entrada para [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center"><img src="http://silveiraneto.net/wp-content/uploads/2008/02/scja_sun_certification.png" alt="SCJA" height="169" width="489" /></p>
<p>A SCJA (Sun Certified Java Associate) é a certificação Java de nível de entrada. Como ela não é pre-requisito para nenhuma outra certificação poucas pessoas tiram a SCJA. Apesar disso eu a acho uma certificação interessante porque ela é bem abrangente, embora que superficial. Eu estou estudando para SCJA como uma porta de entrada para as outras certificações.</p>
<p>Este post é uma coletânea de links e dicas úteis para aqueles que possuirem estes mesmo objetivos.</p>
<ul>
<li><a href="http://www.sun.com/training/catalog/courses/CX-310-019.xml" title="SCJA">Página oficial da SCJA</a> &#8211; nesta página estão as principais informações sobre a certificação, algumas referencias de material para estudo e os objetivos do exame, que é a primeira coisa que você deve ler. Se possível imprima os objetivos do exame e vá marcando os objetivos que você já estudou.</li>
<li><a href="http://www.hfoobook.com/pdf/hfoo-associateuml.pdf" title="Livro UML PDF" target="_blank">UML for the Java Associate</a> &#8211; Esse é um PDF gratuito que cobre alguns conceitos básicos de UML em uma linguagem fácil de divertida. Eu gostaria de ter tido isso em mãos alguns semestres atrás. O autor é o Dave Wood (que também elabora provas da SCJA) e é da mesma editora da série <a href="http://www.hfoobook.com/" title="Head First">Head First</a>. Esse livrinho é um ótimo ponto de partida para começar a estudar.</li>
<li><a href="http://faq.javaranch.com/view?ScjaFaq" title="JavaRanch">JavaRanch SCJA FAQ</a> &#8211; Um tira dúvidas das dúvidas comuns sobre o SCJA e também uma excelente coletânea de materiais de estudo.</li>
<li><a href="http://java.sun.com/j2ee/j2ee-1_4-fr-spec.pdf" rel="nofollow">J2EE Specification</a> &#8211; Um dos objetivos da é &#8220;<em>Java Platforms and Integration Technologies</em>&#8220;. Vá nesse PDF <a href="http://java.sun.com/j2ee/j2ee-1_4-fr-spec.pdf" title="J2EE Specs">J2EE Specification</a>, na seção 2.6 há um ótimo guia de termos de J2EE.</li>
<li><a href="http://java.sun.com/docs/books/tutorial/java/index.html" title="Java Trail">Trail: Learning the Java Language</a> &#8211; Trilha de aprendizado da página oficial de tutoriais do Java. Muito bom e completo.</li>
</ul>
<h2>Objetivos da Certificação SCJA</h2>
<p><small>Essa tradução fui em quem fiz, não é oficial. Se encontrar algum erro me notifique nos comentários do post.</small></p>
<ul>
<li>Seção 1 &#8211; Conceitos Fundamentais de Orientação a Objetos.
<ul>
<li>Descrever, comparar e contrastar primitivas (inteiro, ponto flutuante, booleano, e caractere), tipos enumerados e objetos.</li>
<li>Descrever, comparar e contrastar classes concretas, classes abstratas, e interfaces, e como a herança se aplica a elas.</li>
<li> Descrever, comparar e contrastar composição de classes, e associações (inclusive de multiplicidade um-para-um, um-para-muitos e muitos-para-muitos) e associações de navegação.</li>
<li>Descrever ocultamento de informação (usando atributos privados e métodos), encampsulamento e exposição de funcionalidades de objetos usando métodos públicos; e descrever as convenções de JavaBeans para métodos setter e getter.</li>
<li>Descrever polimorfismo aplicado a classes e interfaces, e descrever e aplicar o princípio de &#8220;programar para uma interface&#8221;.</li>
</ul>
</li>
<li>Seção 2 &#8211; Representação UML de Conceitos de Orientação a Objetos.
<ul>
<li>Reconhecer as representações UML de classes, (incluindo atributos e operações, classes abstratas, e interfaces), as representações UML de herança (ambas implementações e interface), e a representação UML de modificadores de visibilidades de membros de classe (- para privado e + para público).</li>
<li>Reconhecer a presetação UML de associação de classe, composição, indicadores de multiplicidade da associação, e indicadores de navegação da associação.</li>
</ul>
</li>
<li>Seção 3 &#8211; Implementação Java de Conceitos de Orientação a Objetos.
<ul>
<li>Nota: exemplos de código podem usar o operador &#8220;<em>new</em>&#8220;.</li>
<li>Desenvolver código que use tipos primitivos, tipos enumerados, e referencias a objetos, e reconhecer os literais desses tipos.</li>
<li>Desenvolver código que declare classes concretas, classes abstratas, e interfaces, código que suporte implementação e interfaces de herança, código que declare atributos de instância e métodos, e código que use os modificadores de acesso: <em>private</em> e <em>public</em>.</li>
<li>Desenvolver código que implemente associação de classes simples, código que implemente multiplicidade usando vetores, e reconhecer código que implemente composição em detrimento de simples associações, e código que implementa associações de navegação corretamente.</li>
<li>Desenvolver código que use polimorfismo tanto para classes quanto para interfaces, e reconhecer código que usa o princípio de &#8220;programar para uma interface&#8221;</li>
</ul>
</li>
<li>Seção 4 &#8211; Projeto e Implementação de Algoritmos.
<ul>
<li>Descrever, comparar e contrastar estes três tipos fundamentais de sentenças: atribuição, condicional, e iteração, e dado uma descrição de um algoritmo, selecionar os tipos apropriados de sentenças para projetar o algoritmo.</li>
<li>Dado um algoritmo em pseudo-código, terminar o escopo correto para a variável usada no algoritmo, e desenvolver código que declara variáveis em qualquer um dos seguintes escopos: variável de instância, parâmetro de método, e variável local.</li>
<li>Dado um algoritmo em pseudo-código, desenvolver um código de método que implementa o algoritmo usando sentenças condicionais (<em>if</em> e <em>switch</em>), sentenças de iteração (<em>for</em>, <em>for-each</em>, <em>while</em>, e <em>do-while</em>), sentenças de atribuição, e sentenças <em>break</em> e <em>continue</em> para controlar o fluxo no <em>switch</em> e nas sentenças de iteração.</li>
<li>Dado um algoritmo e múltiplas entradas e saídas, desenvolver o código do método que implementa o algoritmo usando os parâmetros de métodos, um tipo de retorno, e uma sentença de retorno, e reconhecer os efeitos quando referencias a objetos e primitivas são passadas para métodos que os modificam.</li>
<li>Dado um algoritmo em pseudo-código, desenvolver código que aplica corretamente e apropriadamente os operadore incluíndo os operadores de atribuição (limitados a: =, +=, -=), operadores aritméticos (limitados a: +, -, *, /, %, ++, &#8211;), operadores relacionais (limitados a: &lt;, &lt;=, &gt;, &gt;=, ==, !=), operadores lógicos (limitados a: !, &amp;&amp;, ||) para produzir o resultado desejado. Também escrever código que determina a igualdade de dois objetos ou duas primitivas.</li>
<li>Desenvolver código que usa o operador de concatenação (+), e os seguintes métodos da classe <em>String</em>: <em>charAt</em>, <em>indexOf</em>, <em>trim</em>, <em>substring</em>, <em>replace</em>, <em>length</em>, <em>startsWith</em>, e <em>endsWith</em>.</li>
</ul>
</li>
<li>Seção 5 &#8211; Fundamentos de Desenvolvimento Java.
<ul>
<li>Descrever os propósitos de pacotes (<em>packages</em>) na linguagem Java, e reconhecer o uso correto de sentenças de <em>import</em> e <em>package</em>.</li>
<li>Demonstrar o uso correto do comando &#8220;<em>javac</em>&#8221; (inclusive as opções de linha de comando: -d e -classpath), e demonstrar o uso correto do comando &#8220;<em>java</em>&#8221; (inclusive as opções de linha de comando: -classpath, -D e -version).</li>
<li>Descrever os propósitos e tipos de classes dos seguintes pacotes Java: java.awt, javax.swing, java.io, java.net, java.util.</li>
</ul>
</li>
<li>Seção 6 &#8211; Tecnologias Java de Plataforma e Integração.
<ul>
<li>Distinguir as características básicas das três plataformas Java: J2SE, J2ME, e J2EE, e dado objetivos arquitetônicos de alto nível, selecionar a(s) plataforma(s) apropriada(s).</li>
<li>Descrever em um alto nível os benefícios e as características básicas do RMI.</li>
<li>Descrever em um alto nível os benefícios e as características básicas das tecnologias JDBC, SQL e RDBMS.</li>
<li>Descrever em um alto nível os benefícios e as características básicas das tecnologias JNDI, mensagem, e JMS.</li>
</ul>
</li>
<li>Seção 7 &#8211; Tecnologias Cliente.
<ul>
<li>Descrever em um alto nível as características básicas, benefícios e inconvenientes de criar <em>thin-clients</em> usando HTML e JavaScript e os problemas e soluções relacionadas à distribuição.</li>
<li>Descrever em um alto nível as características básicas, benefícios, inconvenientes e os problemas de distribuição relacionados a criação de clientes usando J2ME.</li>
<li>Descrever em um alto nível as características básicas, benefícios, inconvenientes e os problemas de distribuição relacionados a criação de <em>fat-clients</em> usando Applets.</li>
<li>Descrever em um alto nível as características básicas, benefícios, inconvenientes e os problemas de distribuição relacionados a criação de <em>fat-clients</em> usando Swing.</li>
</ul>
</li>
<li>Seção 8 &#8211; Tecnologias Servidor.
<ul>
<li>Descrever em um alto nível as características básica de: EJB, servlets, JSP, JMS, JNDI, SMTP, JAX-RPC, Web Services (incluindo SOAP, UDDI, WSDL, e XML), e JavaMail.</li>
<li>Descrever em um alto nível as características básicas de servlet e o suporte JSP para thin-clients HTML.</li>
<li>Descrever em um alto nível o uso e as características básicas de uma seção EJB, beans de entidade e beans orientados a mensagem (message-driven).</li>
<li>Descrever em uum alto nível os benefícios fundamentais e inconvenientes de usar tecnologias do lado do servidor J2EE e descrever e comparar as características básicas da camada web, camada de negócios e a camada EIS.</li>
</ul>
</li>
</ul>
<h2>Simulados SCJA gratuitos</h2>
<ul>
<li><a href="http://www.scja.de/ebook/order.html" title="SCJA">scja.de</a> &#8211; na lateral esquerda, tem uns botões azuis. Cada um deles é uma bateria de questões.</li>
<li><a href="http://www.ejavaguru.com/scjafreemockexam.php" title="EJavaGuru">ejavaguru.com</a> &#8211; 10 questões de SCJA.</li>
<li><a href="http://cafe4java.com/mockexams/scja/mock1/q1.php" title="SCJA">cafe4java.com</a> &#8211; 5 questões sobre SCJA.</li>
<li><a href="http://uk.sun.com/training/catalog/courses/WGS-PREX-10-QUEST.xml" title="Pacote de testes grátis">WGS-PREX-J019C</a> &#8211; Esse é o melhor teste que eu já vi. É o teste oficial da Sun, com 150 questões e é um teste <a href="http://www.sun.com/training/catalog/courses/WGS-PREX-J019C.xml" title="Catálogo da Sun">pago</a> e o valor varia de país para país. O que certamente você não sabe é que esse teste está disponível gratuitamente, só que <a href="http://uk.sun.com/training/catalog/courses/WGS-PREX-10-QUEST.xml" title="de graça">neste site bem escondido</a>. Você vai lá, se cadastra e recebe um link, login e senha. O ambiente não é tão bom quanto o <a href="https://learningconnection.sun.com" title="Sun Learning Connection">Sun Learning Connection</a> mas as questões são as mesmas. Inclusive nesse mesmo pacote tem testes para várias outras certificações, tudo de graça e dentro da lei. :)</li>
</ul>
<p><small>Eu estou incrementando e organizando esse post aos poucos.</small></p>
]]></content:encoded>
			<wfw:commentRss>http://silveiraneto.net/2008/02/27/estudando-para-a-scja/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Draggable and Growable Ball in JavaFX</title>
		<link>http://silveiraneto.net/2008/02/16/draggable-and-growable-ball-in-javafx/</link>
		<comments>http://silveiraneto.net/2008/02/16/draggable-and-growable-ball-in-javafx/#comments</comments>
		<pubDate>Sun, 17 Feb 2008 00:41:52 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[ball]]></category>
		<category><![CDATA[código]]></category>
		<category><![CDATA[draggable]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[growable]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaFX]]></category>
		<category><![CDATA[jfx]]></category>
		<category><![CDATA[jfxbest]]></category>
		<category><![CDATA[openjfx]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[red ball]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[vídeo]]></category>

		<guid isPermaLink="false">http://silveiraneto.net/2008/02/16/draggable-and-growable-ball-in-javafx/</guid>
		<description><![CDATA[Two simple JavaFX code handling onMouseDragged event. import javafx.ui.*; import javafx.ui.canvas.*; Canvas { content: Circle { var x = 50 var y = 50 transform: bind translate(x, y) radius: 30 fill: red onMouseDragged: operation(e) { x += e.localDragTranslation.x; y += e.localDragTranslation.y; } } } import javafx.ui.*; import javafx.ui.canvas.*; Canvas { content: Circle { var x [...]]]></description>
			<content:encoded><![CDATA[<p>Two simple JavaFX code handling onMouseDragged event.</p>
<p><center><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/M6G_N80UvZg&#038;rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/M6G_N80UvZg&#038;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></center></p>
<pre name="code" class="JAVA">
import javafx.ui.*;
import javafx.ui.canvas.*;

Canvas {
    content: Circle {
        var x = 50
        var y = 50
        transform: bind translate(x, y)
        radius: 30
        fill: red
        onMouseDragged: operation(e) {
                x += e.localDragTranslation.x;
                y += e.localDragTranslation.y;

        }
    }
}
</pre>
<p><center><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/XvMGQomAcnc&#038;rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/XvMGQomAcnc&#038;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></center></p>
<pre name="code" class="JAVA">
import javafx.ui.*;
import javafx.ui.canvas.*;

Canvas {
    content: Circle {
        var x = 50
        var y = 50
        var radius = 30
        transform: bind translate(x, y)
        radius: bind radius
        fill: red
        onMouseDragged: operation(e) {
            if (e.button == 1){
                x += e.localDragTranslation.x;
                y += e.localDragTranslation.y;
            }
            if (e.button == 3) {
                radius += e.localDragTranslation.x;
            }
        }
    }
}
</pre>
<p><center><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/VOdjY8lR51Y&#038;rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/VOdjY8lR51Y&#038;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></center></p>
<pre name="code" class="JAVA">
import javafx.ui.*;
import javafx.ui.canvas.*;

Canvas {
    content: [
    Rect {x: 50, y: 50, width: 50, height: 50, fill: orange },
    Circle {
        var x = 50
        var y = 50
        var radius = 30
        var color = red:Color
        transform: bind translate(x, y)
        radius: bind radius
        fill: bind color
        onMouseDragged: operation(e) {
            if (e.button == 1){
                x += e.localDragTranslation.x;
                y += e.localDragTranslation.y;
            }
            if (e.button == 3) {
                radius += e.localDragTranslation.x;
            }
        }
        onMousePressed: operation(e){
            color = Color {blue: 0.0, green: 0.0, red: 1.0, opacity: 0.5};
        }
        onMouseReleased: operation(e){
            color = red:Color;
        }
    }]
}
</pre>
<p>You can test this examples with thhe <a href="http://download.java.net/general/openjfx/demos/javafxpad.jnlp">JavaFX Pad</a> or using Netbeans with the <a href="http://javafx.netbeans.org/">JavaFX Plugin</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://silveiraneto.net/2008/02/16/draggable-and-growable-ball-in-javafx/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Java: métodos com número variável de parâmetros</title>
		<link>http://silveiraneto.net/2008/02/05/java-metodos-com-numero-variavel-de-parametros/</link>
		<comments>http://silveiraneto.net/2008/02/05/java-metodos-com-numero-variavel-de-parametros/#comments</comments>
		<pubDate>Tue, 05 Feb 2008 23:03:18 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[português]]></category>
		<category><![CDATA[enhanced loop]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[loop melhorado]]></category>
		<category><![CDATA[orientação a objetos]]></category>
		<category><![CDATA[polimorfismo]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[varargs]]></category>

		<guid isPermaLink="false">http://silveiraneto.net/2008/02/05/java-metodos-com-numero-variavel-de-parametros/</guid>
		<description><![CDATA[A partir do Java 5 podemos escrever métodos com um número variável de parâmetros, é o chamado varargs. Com isso podemos criar métodos bem flexíveis e elegantes, principalmente se aplicando isso juntamente com outros recursos como o loop melhorado e polimorfismo. Esse exemplo cria uma classe Estatistica com o método media que pode receber um [...]]]></description>
			<content:encoded><![CDATA[<p>A partir do Java 5 podemos escrever métodos com um número variável de parâmetros, é o chamado varargs. Com isso podemos criar métodos bem flexíveis e elegantes, principalmente se aplicando isso juntamente com outros recursos como o <em>loop melhorado</em> e <em>polimorfismo</em>.</p>
<p>Esse exemplo cria uma classe <em>Estatistica</em> com o método <em>media</em> que pode receber um número variável de argumentos do tipo int.</p>
<div class="wp_syntax">
<div class="code">
<pre class="java java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Estatistica <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">float</span> media<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span>... <span style="color: #006633;">numeros</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">float</span> soma <span style="color: #339933;">=</span> 0;
        <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> num<span style="color: #339933;">:</span> numeros<span style="color: #009900;">&#41;</span>
            soma <span style="color: #339933;">+=</span> num;
        <span style="color: #000000; font-weight: bold;">return</span> soma<span style="color: #339933;">/</span>numeros.<span style="color: #006633;">length</span>;
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        Estatistica est <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Estatistica<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span> est.<span style="color: #006633;">media</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>;
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span> est.<span style="color: #006633;">media</span><span style="color: #009900;">&#40;</span>0,<span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">2</span>,<span style="color: #cc66cc;">3</span>,<span style="color: #cc66cc;">4</span>,<span style="color: #cc66cc;">5</span>,<span style="color: #cc66cc;">6</span>,<span style="color: #cc66cc;">7</span>,<span style="color: #cc66cc;">8</span>,<span style="color: #cc66cc;">9</span>,<span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>;
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span> est.<span style="color: #006633;">media</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">20</span>,<span style="color: #cc66cc;">30</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>;
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre>
</div>
</div>
<blockquote><p>$ javac Estatistica.java<br />
$ java Estatistica<br />
2.0<br />
5.0<br />
20.0</p></blockquote>
<p>Legal, né? Isso sim é sobrecarga de método. ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://silveiraneto.net/2008/02/05/java-metodos-com-numero-variavel-de-parametros/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Família Simpsons em Prolog</title>
		<link>http://silveiraneto.net/2008/01/14/familia-simpsons-em-prolog/</link>
		<comments>http://silveiraneto.net/2008/01/14/familia-simpsons-em-prolog/#comments</comments>
		<pubDate>Mon, 14 Jan 2008 22:45:20 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[código-fonte]]></category>
		<category><![CDATA[exemplo]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Prolog]]></category>
		<category><![CDATA[simpsons]]></category>

		<guid isPermaLink="false">http://silveiraneto.net/2008/01/14/familia-simpsons-em-prolog/</guid>
		<description><![CDATA[% Fatos. homer. marge. bart. lisa. maggie. mona. jacqueline. patty. abraham. clancy. hugo. louise. herb. &#160; mulher(marge). mulher(maggie). mulher(lisa). mulher(mona). mulher(clancy). mulher(jacqueline). mulher(selma). mulher(patty). mulher(louise). &#160; homem(homer). homem(bart). homem(abraham). homem(clancy). homem(hugo). homem(herb). &#160; progenitor(homer,bart). progenitor(homer,lisa). progenitor(homer,maggie). progenitor(marge,bart). progenitor(marge,lisa). progenitor(marge,maggie). &#160; progenitor(abraham, homer). progenitor(mona, homer). &#160; progenitor(clancy, marge). progenitor(clancy, patty). progenitor(clancy, selma). progenitor(jacqueline, marge). progenitor(jacqueline, patty). [...]]]></description>
			<content:encoded><![CDATA[<p><center><img src="http://silveiraneto.net/wp-content/uploads/2008/01/os_simpsons_no_sofa.gif" alt="Os Simpsons no sofá" /></center></p>
<div class="wp_syntax">
<div class="code">
<pre class="prolog" style="font-family:monospace;">% Fatos.
homer.
marge.
bart.
lisa.
maggie.
mona.
jacqueline.
patty.
abraham.
clancy.
hugo.
louise.
herb.
&nbsp;
mulher(marge).
mulher(maggie).
mulher(lisa).
mulher(mona).
mulher(clancy).
mulher(jacqueline).
mulher(selma).
mulher(patty).
mulher(louise).
&nbsp;
homem(homer).
homem(bart).
homem(abraham).
homem(clancy).
homem(hugo).
homem(herb).
&nbsp;
progenitor(homer,bart).
progenitor(homer,lisa).
progenitor(homer,maggie).
progenitor(marge,bart).
progenitor(marge,lisa).
progenitor(marge,maggie).
&nbsp;
progenitor(abraham, homer).
progenitor(mona, homer).
&nbsp;
progenitor(clancy, marge).
progenitor(clancy, patty).
progenitor(clancy, selma).
progenitor(jacqueline, marge).
progenitor(jacqueline, patty).
progenitor(jacqueline, selma).
&nbsp;
progenitor(abraham, herb).
&nbsp;
progenitor(herb, hugo).
progenitor(louise, hugo).
&nbsp;
% Regras
pai(A,B) :- homem(A), progenitor(A,B).
mãe(A,B) :- mulher(A), progenitor(A,B).
&nbsp;
é_pai(A) :- pai(A,_).
é_mãe(A) :- mãe(A,_).
&nbsp;
filho(A,B):- homem(A), progenitor(B,A).
filha(A,B):- mulher(A), progenitor(B,A).
&nbsp;
irmaos(X,Y) :-
	progenitor(Z,X),
	progenitor(Z,Y),
	X\=Y.
&nbsp;
irmao_completos(A,B) :-
	pai(P,A), pai(P,B),
	mãe(M,A), mãe(M,B),
	A\=B.
&nbsp;
tio(T,A) :-
	homem(T),
	irmaos(T,X), progenitor(X,A).
&nbsp;
tia(T,A) :-
	mulher(T),
	irmaos(T,X), progenitor(X,A).
&nbsp;
primo(A,B) :-
	homem(A),
	progenitor(X,A),
	progenitor(Y,B),
	irmaos(X,Y).
&nbsp;
prima(A,B) :-
	mulher(A),
	progenitor(X,A),
	progenitor(Y,B),
	irmaos(X,Y).
&nbsp;
avô(A,B) :- pai(A,X), pai(X,B).
avó(A,B) :- pai(A,X), pai(X,B).</pre>
</div>
</div>
<p>Referências:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Simpsons_family">Simpsons Family</a></li>
<li><a href="http://kti.ms.mff.cuni.cz/~bartak/prolog/genealogy.html">Genealogy Database, Guide to Prolog Programming</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://silveiraneto.net/2008/01/14/familia-simpsons-em-prolog/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Criando uma galeria de imagens com Python</title>
		<link>http://silveiraneto.net/2007/11/11/criando-uma-galeria-de-imagens-com-python/</link>
		<comments>http://silveiraneto.net/2007/11/11/criando-uma-galeria-de-imagens-com-python/#comments</comments>
		<pubDate>Mon, 12 Nov 2007 00:36:15 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://silveiraneto.net/2007/11/11/criando-uma-galeria-de-imagens-com-python/</guid>
		<description><![CDATA[Esse é um script que eu uso muito rotineiramente. Eu escrevi ele porque eu tentei várias soluções mas nenhuma era exatamente o que eu precisava e o que eu preciso é geralmente bem simles. Só quero pegar um monte de fotos de várias resoluções diferentes e gerar uma página em HTML com as miniaturas das [...]]]></description>
			<content:encoded><![CDATA[<p>Esse é um script que eu uso muito rotineiramente. Eu escrevi ele porque eu tentei várias soluções mas nenhuma era exatamente o que eu precisava e o que eu preciso é geralmente bem simles.</p>
<p>Só quero pegar um monte de fotos de várias resoluções diferentes e gerar uma página em HTML com as miniaturas das imagens com largura de 500 pixeis e com o link para a imagem original. É uma implementação bem simples, sem muita sofisticação. Eu coloco aqui porque ele é fácil de adaptar para outros usos.</p>
<div class="wp_syntax">
<div class="code">
<pre class="python python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>
<span style="color: #ff7700;font-weight:bold;">import</span> Image
&nbsp;
cwd = <span style="color: #dc143c;">os</span>.<span style="color: black;">getcwd</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">for</span> arquivo <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">listdir</span><span style="color: black;">&#40;</span>cwd<span style="color: black;">&#41;</span>:
   <span style="color: #ff7700;font-weight:bold;">if</span> arquivo.<span style="color: black;">endswith</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'.JPG'</span><span style="color: black;">&#41;</span>:
      im = Image.<span style="color: #008000;">open</span><span style="color: black;">&#40;</span>arquivo<span style="color: black;">&#41;</span>
      im.<span style="color: black;">thumbnail</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">500</span>,<span style="color: #ff4500;">375</span><span style="color: black;">&#41;</span>, Image.<span style="color: black;">ANTIALIAS</span><span style="color: black;">&#41;</span>
      nome = arquivo.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'.'</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span>0<span style="color: black;">&#93;</span>
      tnome = nome + <span style="color: #483d8b;">&quot;_thumb.jpg&quot;</span>
      im.<span style="color: black;">save</span><span style="color: black;">&#40;</span>tnome, <span style="color: #483d8b;">&quot;JPEG&quot;</span><span style="color: black;">&#41;</span>
      <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'&lt;a href=&quot;%s&quot;&gt;&lt;img src=&quot;%s&quot;/&gt;&lt;/a&gt;&lt;br/&gt;'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>arquivo, tnome<span style="color: black;">&#41;</span></pre>
</div>
</div>
<p>Ele procura os arquivos do diretório que terminam com .JPG, cria uma miniatura de tamanho 500 por 375 e cospe o HTML na saída padrão. Para usar ele, entre no terminal do diretório onde você quer fazer a galeria e execute o script:</p>
<blockquote><p>python galeria.py > saida.html</p></blockquote>
<p>Ele cria galerias bem simples como <a href="http://silveiraneto.net/wp-content/uploads/caravana/">essa</a> ou <a href="http://silveiraneto.net/wp-content/uploads/2007_11_pdti_fortaleza/">essa</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://silveiraneto.net/2007/11/11/criando-uma-galeria-de-imagens-com-python/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>XII Maratona Brasileira de Programação</title>
		<link>http://silveiraneto.net/2007/09/23/xii-maratona-brasileira-de-programacao/</link>
		<comments>http://silveiraneto.net/2007/09/23/xii-maratona-brasileira-de-programacao/#comments</comments>
		<pubDate>Sun, 23 Sep 2007 15:01:10 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Competição]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Maratona]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://silveiraneto.net/2007/09/23/xii-maratona-brasileira-de-programacao/</guid>
		<description><![CDATA[Esse sábado eu participei, junto com o Carlos Pontual e o Heraldo Carneiro, da décima segunda edição da Maratona Brasileira de Programação. A sede do Ceará na competição ia ser em Sobral, com o pessoal da Engenharia da Computação da UFC, mas acabou sendo na Unifor. Uma pena, eu queria ter viajado pra conhecer o [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center"><img src="http://silveiraneto.net/wp-content/uploads/2007/09/logomdp.jpg" alt="Logo da Maratona Brasileira de Programação" /></p>
<p>Esse sábado eu participei, junto com o Carlos Pontual e o <a href="http://heraldocarneiro.com/" title="Site do Heraldo">Heraldo Carneiro</a>, da décima segunda edição da <a href="http://maratona.ime.usp.br/" title="Maratona Brasileira de Programação">Maratona Brasileira de Programação</a>.</p>
<p style="text-align: center"><img src="http://silveiraneto.net/wp-content/uploads/2007/09/maratona_brasileira_de_programacao_unifor_ufc_uece_baloes.jpg" alt="Maratona Brasileira de Programação" /></p>
<p>A sede do Ceará na competição ia ser em Sobral, com o pessoal da Engenharia da Computação da UFC, mas acabou sendo na Unifor. Uma pena, eu queria ter viajado pra conhecer o curso novo.</p>
<p>Embora antigamente eu tenha competido na OBI (Olimpíada Brasileira de Informática), eu nunca havia competido na Maratona Brasileira de Computação. Enquanto a OBI é uma competição voltada para alunos do ensino médio e básico a maratona é voltada para alunos do ensino superior da graduação e mestrado. Pelas minhas contas já faziam aí uns 3 anos que eu não competia.</p>
<p>Para quem não conhece esse tipo de competição, funciona assim: uma pessoa ou uma equipe (dependendo da competição) tem um certo tempo para resolver uma série de problemas usando programação. A correção do programa é automatizada. Seu programa é testado através de uma bateria de testes e deve retornar as respostas corretas. É uma ótima forma de melhorar seus conhecimentos sobre grafos, lógica, programação dinâmica, estruturas de dados, programação etc. Também é uma ótima oportunidade para conhecer ou rever o pessoal dos cursos de computação.</p>
<p style="text-align: center"><img src="http://silveiraneto.net/wp-content/uploads/2007/09/heraldo_caneiro_silveira_neto_carlos_pontual.jpg" alt="Heraldo Carneiro, Silveira Neto e Carlos Pontual" height="361" width="479" /></p>
<p>Bem, vamos aos problemas que nós fizemos:</p>
<ul>
<li><strong>Varetas</strong>, problema H, era um problema bem simples. Esse nós fizemos em C e foi aceito de primeira.</li>
</ul>
<ul>
<li><strong>Histórico</strong>, problema E, também um problema não muito complicado. Mas foi por ele que nós nos enrolamos. Nós resolvemos o problema em Java e submetemos, mas a correção deu runtime error para ele. Nós re analisamos o problema, modificamos o programa e mandamos novamente e ganhamos outro runtime error. Como nós estávamos bem confiantes que nossa resposta estava certa nós refizemos o programa em C e submetemos. Dessa vez o programa passou sem problemas. Mais Tarde ficamos sabendo que devido a um erro da correção automática, não havia como um programa em Java ter acertado essa questão. Isso fez que passemos 1 hora e 44 minutos nesse problema.</li>
</ul>
<ul>
<li><strong>Rouba</strong>, problema B, basicamente um problema para simular um jogo de cartas. O Heraldo pegou esse problema e fez ele em Java. Depois de 3 submissões e 3 time limit exceeded da correção automática, nós estávamos certos que nosso programa estava correto. Nós já haviamos feitas varias otimizações de velocidade no programa. Havia agora três alternativas: ou abandonar o problema e tentar outra questão ou continuar a otimizar o programa ou refaze-lo em C. Até tentamos sair do problema, mas ele não saiu da cabeça do Heraldo :). Refaze-lo em C implicaria em implementar uma série de estruturas na unha, o que iria ser muito chato e não havia certeza que isso ia resolver nossa vida.Por fim o Heraldo fez mais um última pequena otimização no programa e ele passou.</li>
</ul>
<p>Nós ainda tentamos sem sucesso resolver os problemas Mário (o problema do armário hehehe) e o Zak.</p>
<p>Algumas estatísticas (parciais) da sede do Ceará:</p>
<table border="1">
<tr>
<td><strong>Problema</strong></td>
<td><strong>Submissões</strong></td>
<td><strong>Aceitos</strong></td>
</tr>
<tr>
<td>Histórico</td>
<td>27</td>
<td>9 (33%)</td>
</tr>
<tr>
<td>Rouba</td>
<td>17</td>
<td>6 (35%)</td>
</tr>
<tr>
<td>Tubos</td>
<td>1</td>
<td>0</td>
</tr>
<tr>
<td>Volei</td>
<td>1</td>
<td>0</td>
</tr>
<tr>
<td>Zak</td>
<td>6</td>
<td>2 (33%)</td>
</tr>
<tr>
<td>bolhas</td>
<td>4</td>
<td>0 (0%)</td>
</tr>
<tr>
<td>caixas</td>
<td>23</td>
<td>5 (22%)</td>
</tr>
<tr>
<td>mario</td>
<td>8</td>
<td>2 (25%)</td>
</tr>
<tr>
<td>olimp</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>varetas</td>
<td>17</td>
<td>10 (59%)</td>
</tr>
</table>
<p>Equipes e problemas resolvidos:</p>
<table border="1">
<tr>
<td><strong>Equipe</strong></td>
<td><strong>Resolvidos</strong></td>
<td><strong>Problemas</strong></td>
</tr>
<tr>
<td>UECE &#8211; Camila, Tainara, Leonilia</td>
<td>6</td>
<td>Rouba (7/207), mario (1/172), Histórico (1/41), caixas (1/233), varetas (1/49), Zak (2/273)</td>
</tr>
<tr>
<td>UECE &#8211; Die aphthe schmerzen</td>
<td>5</td>
<td>Rouba (1/161), mario (2/0-), Histórico (1/47), caixas (2/223), varetas (1/35), Zak (4/186)</td>
</tr>
<tr>
<td>AVL Team</td>
<td>5</td>
<td>Rouba (1/135), mario (1/277), Histórico (1/77), caixas (5/296), varetas (1/67)</td>
</tr>
<tr>
<td>Os Entrevistados</td>
<td>4</td>
<td>Rouba (1/90), Tubos (1/-), Histórico (1/79), caixas (2/182), varetas (1/66)</td>
</tr>
<tr>
<td>GOF</td>
<td>4</td>
<td>Rouba (2/73), Histórico (5/151), Caixas (5/289), Varetas (1/39)</td>
</tr>
<tr>
<td>Eupodiatamatando</td>
<td>3</td>
<td>Rouba (4/181), Mário (4/-), Histórico (3/143), Varetas (1/39)</td>
</tr>
<tr>
<td>UECE &#8211; n^n</td>
<td>2</td>
<td>Rouba (1/-), Histórico (1/90), caixas (1/-), varetas (2/122)</td>
</tr>
<tr>
<td>UECE &#8211; n!</td>
<td>2</td>
<td>Histórico (2/206), varetas (1/61)</td>
</tr>
<tr>
<td>unifor2</td>
<td>2</td>
<td>Histórico (2/206), varetas (1/61)</td>
</tr>
<tr>
<td>Mazela.cpp</td>
<td>1</td>
<td>Vôlei (1/-), Histórico (4/-), caixas (7/-), varetas (1/71)</td>
</tr>
<tr>
<td>unifor1</td>
<td>1</td>
<td>Histórico (2/-), Varetas 6</td>
</tr>
</table>
<p><strong>Observações:</strong> A equipe Singularidade de Sobral não estava presente lá, eu não sei se eles competiram. As equipes da UECE tiveram a boa idéia de colocar o nome da faculdade no nome da equipe.</p>
<p>Eu gostei muito dos resultados. Tivemos muitas equipes com bons resultados. Isso demonstra que os esforços, principalmente do Joel Uchôa,  em divulgar e particularizar a competição estão sendo frutíferos. Todas as universidades conseguiram bons resultados. Ano que vem eu espero ver mais universidades competindo.</p>
<p><strong>Sugestões para a organização:</strong></p>
<ul>
<li><strong>Linguagens:</strong> segundo o Joel Uchôa me informou há planos para inserir novas linguagens na competição. Fica minha sugestão para que Python e Ruby sejam incluídas.</li>
<li><strong>Java: </strong>me parece que há um longo histórico de problemas com a correção de programas em Java, sendo inclusive o uso desta desaconselhado por alguns. Eu espero que isso seja melhorado na próxima edição. Eu e minha equipe tivemos sérios problemas por conta disso mas nem por isso tenho planos de usar outra linguagem na próxima edição.</li>
<li><strong>Distribuição: </strong>há uma distribuição GNU/Linux própria para a competição o <a href="http://www.ime.usp.br/~cassio/boca/" title="Maratona Linux">Maratona Linux</a>. Ele tem várias sacadas legais como redes separadas para que nenhuma equipe possa usar a Internet ou enxergar as outras equipes, boot remoto etc. Porém é necessário boot pelo disquete o que tem sido uma fonte constante de problemas. O sistema de janelas <a href="www.windowmaker.info/" title="Window Maker">WindowMaker</a> também é fonte de confusão com usuários iniciantes, se é realmente necessário um sistema minimalista eu recomendaria o Fluxbox, XFCE ou Icewm.</li>
<li><strong>Correção: </strong>eu não gosto do esquema de correção da Maratona. Eu prefiro o da OBI. Na OBI há varias baterias de testes, cuidadosamente preparadas para filtrar cada tipo de erro ou algoritmos. Cada acerto em uma bateria resulta em pontuação. Já na maratona ou se acerta uma questão completamente ou ela está totalmente errada. Isso impede algoritmos mais triviais, algoritmos com complexidade alta (os não polinomiais) e impede também usar técnicas de Inteligência Artificial. Acho que isso interfere muito na forma de se elaborar os problemas e de se resolver os problemas. No universo dos problemas reais, nem tudo pode ser resolvido em tempo e espaço polinomial. Esse é o universo em que vivemos.</li>
</ul>
<p><strong>Fotos:</strong></p>
<p><center><br />
<a href="http://silveiraneto.net/wp-content/uploads/2007/09/p9210020.JPG" title="almoço"><img src="http://silveiraneto.net/wp-content/uploads/2007/09/p9210020.thumbnail.JPG" alt="almoço" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2007/09/p9210021.JPG" title="Almoço"><img src="http://silveiraneto.net/wp-content/uploads/2007/09/p9210021.thumbnail.JPG" alt="Almoço" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2007/09/p9210023.JPG" title="Maratona Brasileira de Programação"><img src="http://silveiraneto.net/wp-content/uploads/2007/09/p9210023.thumbnail.JPG" alt="Maratona Brasileira de Programação" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2007/09/p9210024.JPG" title="Maratona Brasileira de Programação"><img src="http://silveiraneto.net/wp-content/uploads/2007/09/p9210024.thumbnail.JPG" alt="Maratona Brasileira de Programação" /></a>  <a href="http://silveiraneto.net/wp-content/uploads/2007/09/p9220027.JPG" title="Maratona Brasileira de Programação"><img src="http://silveiraneto.net/wp-content/uploads/2007/09/p9220027.thumbnail.JPG" alt="Maratona Brasileira de Programação" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2007/09/p9220028.JPG" title="Maratona Brasileira de Programação Mesa desorganizada"><img src="http://silveiraneto.net/wp-content/uploads/2007/09/p9220028.thumbnail.JPG" alt="Maratona Brasileira de Programação Mesa desorganizada" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2007/09/p9220030.JPG" title="Maratona Brasileira de Programação"><img src="http://silveiraneto.net/wp-content/uploads/2007/09/p9220030.thumbnail.JPG" alt="Maratona Brasileira de Programação" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2007/09/p9220032.JPG" title="Maratona Brasileira de Programação"><img src="http://silveiraneto.net/wp-content/uploads/2007/09/p9220032.thumbnail.JPG" alt="Maratona Brasileira de Programação" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2007/09/p9220033.JPG" title="Maratona Brasileira de Programação"><img src="http://silveiraneto.net/wp-content/uploads/2007/09/p9220033.thumbnail.JPG" alt="Maratona Brasileira de Programação" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2007/09/p9220034.JPG" title="Maratona Brasileira de Programação"><img src="http://silveiraneto.net/wp-content/uploads/2007/09/p9220034.thumbnail.JPG" alt="Maratona Brasileira de Programação" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2007/09/p9220035.JPG" title="Maratona Brasileira de Programação"><img src="http://silveiraneto.net/wp-content/uploads/2007/09/p9220035.thumbnail.JPG" alt="Maratona Brasileira de Programação" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2007/09/p9220040.JPG" title="Maratona Brasileira de Programação Heraldo Carneiro"><img src="http://silveiraneto.net/wp-content/uploads/2007/09/p9220040.thumbnail.JPG" alt="Maratona Brasileira de Programação Heraldo Carneiro" /></a>  <a href="http://silveiraneto.net/wp-content/uploads/2007/09/p9220052.JPG" title="Maratona Brasileira de Programação balões laboratório computadores"><img src="http://silveiraneto.net/wp-content/uploads/2007/09/p9220052.thumbnail.JPG" alt="Maratona Brasileira de Programação balões laboratório computadores" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2007/09/p9220064.JPG" title="Maratona Brasileira de Programação Joel Uchôa"><img src="http://silveiraneto.net/wp-content/uploads/2007/09/p9220064.thumbnail.JPG" alt="Maratona Brasileira de Programação Joel Uchôa" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2007/09/p9220072.JPG" title="Maratona Brasileira de Programação Heraldo Carneiro Silveira Neto Carlos Pontual"><img src="http://silveiraneto.net/wp-content/uploads/2007/09/p9220072.thumbnail.JPG" alt="Maratona Brasileira de Programação Heraldo Carneiro Silveira Neto Carlos Pontual" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2007/09/p9220075.JPG" title="Maratona Brasileira de Programação confraternização"><img src="http://silveiraneto.net/wp-content/uploads/2007/09/p9220075.thumbnail.JPG" alt="Maratona Brasileira de Programação confraternização" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2007/09/p9220078.JPG" title="Maratona Brasileira de Programação confraternização"><img src="http://silveiraneto.net/wp-content/uploads/2007/09/p9220078.thumbnail.JPG" alt="Maratona Brasileira de Programação confraternização" /></a><br />
</center><br />
<strong>bônus:</strong> um vídeo que eu fiz quando já estava bem cansado. <a href="http://www.youtube.com/v/u8y8yQon8lI">Aqui</a>.</p>
<p><small>A Maratona Brasileira de Programação é uma realização da Sociedade Brasileira de Computação, USP, Fundação Carlos Chagas, IBM e diversas universidades e voluntários por todo o Brasi.<br />
</small></p>
]]></content:encoded>
			<wfw:commentRss>http://silveiraneto.net/2007/09/23/xii-maratona-brasileira-de-programacao/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Quebra Cabeça de Oito Peças em JavaScript</title>
		<link>http://silveiraneto.net/2007/09/08/quebra-cabeca-de-oito-pecas-em-javascript/</link>
		<comments>http://silveiraneto.net/2007/09/08/quebra-cabeca-de-oito-pecas-em-javascript/#comments</comments>
		<pubDate>Sat, 08 Sep 2007 21:18:17 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[IHM]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[quebra-cabeça]]></category>

		<guid isPermaLink="false">http://silveiraneto.net/2007/09/08/quebra-cabeca-de-oito-pecas-em-javascript/</guid>
		<description><![CDATA[O objetivo do jogo é deixar o quebra-cabeça em ordem, com o quadro vazio na última posição. Meu primeiro programa grandinho de Javascript :) Código-fonte aqui.]]></description>
			<content:encoded><![CDATA[<p>O objetivo do jogo é deixar o quebra-cabeça em ordem, com o quadro vazio na última posição.<br />
<center>
<div id="puzzle"></div>
<p></center><br />
Meu primeiro programa grandinho de Javascript :) Código-fonte <a href="http://silveiraneto.net/scripts/9puzzle.js">aqui</a>.</p>
<p><script type="text/javascript" src="/scripts/9puzzle.js"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://silveiraneto.net/2007/09/08/quebra-cabeca-de-oito-pecas-em-javascript/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>JavaScript: Vetores</title>
		<link>http://silveiraneto.net/2007/09/03/javascript-vetores/</link>
		<comments>http://silveiraneto.net/2007/09/03/javascript-vetores/#comments</comments>
		<pubDate>Tue, 04 Sep 2007 02:46:57 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ecma]]></category>
		<category><![CDATA[ecmascript]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[vectors]]></category>
		<category><![CDATA[Vetores]]></category>

		<guid isPermaLink="false">http://silveiraneto.net/2007/09/03/javascript-vetores/</guid>
		<description><![CDATA[Um tutorial básico orientado a exemplos de como funcionam os vetores em JavaScript. Criando e acessando um vetor var planetas = new Array&#40;&#41; planetas&#91;0&#93; = &#34;Mercúrio&#34; planetas&#91;1&#93; = &#34;Vênus&#34; planetas&#91;2&#93; = &#34;Terra&#34; planetas&#91;3&#93; = &#34;Marte&#34; planetas&#91;4&#93; = &#34;Júpiter&#34; planetas&#91;5&#93; = &#34;Saturno&#34; planetas&#91;6&#93; = &#34;Urano&#34; planetas&#91;7&#93; = &#34;Neptuno&#34; &#160; for &#40;i=0;i Que vai escrever isso: Mercúrio [...]]]></description>
			<content:encoded><![CDATA[<p>Um tutorial básico orientado a exemplos de como funcionam os vetores em JavaScript.</p>
<h3>Criando e acessando um vetor</h3>
<div class="wp_syntax">
<div class="code">
<pre class="javascript javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> planetas <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
planetas<span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Mercúrio&quot;</span>
planetas<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Vênus&quot;</span>
planetas<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Terra&quot;</span>
planetas<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Marte&quot;</span>
planetas<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">4</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Júpiter&quot;</span>
planetas<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">5</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Saturno&quot;</span>
planetas<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">6</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Urano&quot;</span>
planetas<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">7</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Neptuno&quot;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span>0;i</pre>
</div>
</div>
<p>Que vai escrever isso:</p>
<blockquote><p>Mercúrio<br />
Vênus<br />
Terra<br />
Marte<br />
Júpiter<br />
Saturno<br />
Urano<br />
Neptuno</p></blockquote>
<h3>Iterando no vetor</h3>
<div class="wp_syntax">
<div class="code">
<pre class="javascript javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> planetas <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
planetas<span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Mercúrio&quot;</span>
planetas<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Vênus&quot;</span>
planetas<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Terra&quot;</span>
planetas<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Marte&quot;</span>
planetas<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">4</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Júpiter&quot;</span>
planetas<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">5</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Saturno&quot;</span>
planetas<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">6</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Urano&quot;</span>
planetas<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">7</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Neptuno&quot;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #000066; font-weight: bold;">in</span> planetas<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>planetas<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#125;</span></pre>
</div>
</div>
<p>vai retornar a mesma saída do primeiro programa:</p>
<p>Que vai escrever isso:</p>
<blockquote><p>Mercúrio<br />
Vênus<br />
Terra<br />
Marte<br />
Júpiter<br />
Saturno<br />
Urano<br />
Neptuno</p></blockquote>
<h3>Concatenando dois vetores</h3>
<div class="wp_syntax">
<div class="code">
<pre class="javascript javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> litoral <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
litoral<span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Jericoacoara&quot;</span>
litoral<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Paracuru&quot;</span>
litoral<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Tabuba&quot;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> sertao <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
sertao<span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Itapipoca&quot;</span>
sertao<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Ubajara&quot;</span>
sertao<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Juazeiro&quot;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> ceara <span style="color: #339933;">=</span> litoral.<span style="color: #660066;">concat</span><span style="color: #009900;">&#40;</span>sertao<span style="color: #009900;">&#41;</span>
&nbsp;
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>litoral<span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;
&quot;</span><span style="color: #009900;">&#41;</span>
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>sertao<span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;
&quot;</span><span style="color: #009900;">&#41;</span>
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>ceara<span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;
&quot;</span><span style="color: #009900;">&#41;</span></pre>
</div>
</div>
<blockquote><p>Jericoacoara,Paracuru,Tabuba<br />
Itapipoca,Ubajara,Juazeiro<br />
Jericoacoara,Paracuru,Tabuba,Itapipoca,Ubajara,Juazeiro</p></blockquote>
<h3>Unindo os elementos de um vetor</h3>
<div class="wp_syntax">
<div class="code">
<pre class="javascript javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> letras <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#41;</span>
letras<span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;A&quot;</span>
letras<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;B&quot;</span>
letras<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;C&quot;</span>
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>letras.<span style="color: #660066;">join</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span>
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>letras.<span style="color: #660066;">join</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;@&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span></pre>
</div>
</div>
<blockquote><p>A,B,C<br />
A@B@C</p></blockquote>
<h3>Ordenação Literal</h3>
<p>Essa ordenação é feita sem usar nenhum parâmetro, então a ordem lexicográfica, a do dicionário.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> coisas <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">4</span><span style="color: #009900;">&#41;</span>
coisas<span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;casa&quot;</span>
coisas<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;bonde&quot;</span>
coisas<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;alvo&quot;</span>
coisas<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;dado&quot;</span>
&nbsp;
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>coisas <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span>
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>coisas.<span style="color: #660066;">sort</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span>
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>coisas <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span></pre>
</div>
</div>
<p>Note que depois do .sort() o vetor é alterado.</p>
<blockquote><p>casa,bonde,alvo,dado<br />
alvo,bonde,casa,dado<br />
alvo,bonde,casa,dado</p></blockquote>
<h3>Ordenação usando uma função de ordenação</h3>
<p>A ordenação literal não vai funcionar bem nesse caso, então nos definimos uma função para ordenação. Ela deve retornar zero se ambos forem iguais, um número positivo se o primeiro for maior que o segundo e um número negativo se o segundo for maior que o primeiro.</p>
<div class="wp_syntax">
<div class="code">
<pre class="javascript javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> sortNumber<span style="color: #009900;">&#40;</span>a<span style="color: #339933;">,</span> b<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
<span style="color: #000066; font-weight: bold;">return</span> a <span style="color: #339933;">-</span> b
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> arr <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">6</span><span style="color: #009900;">&#41;</span>
arr<span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;10&quot;</span>
arr<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;5&quot;</span>
arr<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;40&quot;</span>
arr<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;25&quot;</span>
arr<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">4</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;1000&quot;</span>
arr<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">5</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;1&quot;</span>
&nbsp;
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>arr <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span>
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>arr.<span style="color: #660066;">sort</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;
&quot;</span><span style="color: #009900;">&#41;</span>
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>arr.<span style="color: #660066;">sort</span><span style="color: #009900;">&#40;</span>sortNumber<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span></pre>
</div>
</div>
<blockquote><p>10,5,40,25,1000,1<br />
1,10,1000,25,40,5<br />
1,5,10,25,40,1000</p></blockquote>
<h3>Retirando o último elemento</h3>
<p>O pop retorna o último elemento do vetor e o retira.</p>
<div class="wp_syntax">
<div class="code">
<pre class="python python" style="font-family:monospace;">var gatos = <span style="color: #dc143c;">new</span> Array<span style="color: black;">&#40;</span><span style="color: #ff4500;">3</span><span style="color: black;">&#41;</span>
gatos<span style="color: black;">&#91;</span>0<span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;Frida&quot;</span>
gatos<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;Sauber&quot;</span>
gatos<span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;Boris&quot;</span>
document.<span style="color: black;">write</span><span style="color: black;">&#40;</span>gatos + <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#41;</span>
document.<span style="color: black;">write</span><span style="color: black;">&#40;</span>gatos.<span style="color: black;">pop</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#41;</span>
document.<span style="color: black;">write</span><span style="color: black;">&#40;</span>gatos<span style="color: black;">&#41;</span></pre>
</div>
</div>
<blockquote><p>Frida,Sauber,Boris<br />
Boris<br />
Frida,Sauber</p></blockquote>
<h3>Inserindo elementos no final do vetor</h3>
<p>O push insere um elemento no final do vetor e retorna seu novo tamanho.</p>
<div class="wp_syntax">
<div class="code">
<pre class="python python" style="font-family:monospace;">var animais = <span style="color: #dc143c;">new</span> Array<span style="color: black;">&#40;</span><span style="color: #ff4500;">3</span><span style="color: black;">&#41;</span>
animais<span style="color: black;">&#91;</span>0<span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;Frida&quot;</span>
animais<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;Sauber&quot;</span>
animais<span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;Frida&quot;</span>
document.<span style="color: black;">write</span><span style="color: black;">&#40;</span>animais + <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#41;</span>
document.<span style="color: black;">write</span><span style="color: black;">&#40;</span>animais.<span style="color: black;">push</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Vida&quot;</span><span style="color: black;">&#41;</span>+ <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#41;</span>
document.<span style="color: black;">write</span><span style="color: black;">&#40;</span>animais<span style="color: black;">&#41;</span></pre>
</div>
</div>
<blockquote><p>Frida,Sauber,Frida<br />
4<br />
Frida,Sauber,Frida,Vida</p></blockquote>
<h3>Inserindo elementos no inicio do vetor</h3>
<div class="wp_syntax">
<div class="code">
<pre class="python python" style="font-family:monospace;">var inst = <span style="color: #dc143c;">new</span> Array<span style="color: black;">&#40;</span><span style="color: #ff4500;">3</span><span style="color: black;">&#41;</span>
inst<span style="color: black;">&#91;</span>0<span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;Baixo&quot;</span>
inst<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;Guitarra&quot;</span>
inst<span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;Piano&quot;</span>
document.<span style="color: black;">write</span><span style="color: black;">&#40;</span>inst + <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#41;</span>
document.<span style="color: black;">write</span><span style="color: black;">&#40;</span>inst.<span style="color: black;">unshift</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Flauta&quot;</span><span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#41;</span>
document.<span style="color: black;">write</span><span style="color: black;">&#40;</span>inst<span style="color: black;">&#41;</span></pre>
</div>
</div>
<blockquote><p>Baixo,Guitarra,Piano<br />
4<br />
Flauta,Baixo,Guitarra,Piano</p></blockquote>
<h3>Retirando elemento no inicio do vetor</h3>
<div class="wp_syntax">
<div class="code">
<pre class="python python" style="font-family:monospace;">var inst = <span style="color: #dc143c;">new</span> Array<span style="color: black;">&#40;</span><span style="color: #ff4500;">3</span><span style="color: black;">&#41;</span>
inst<span style="color: black;">&#91;</span>0<span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;Baixo&quot;</span>
inst<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;Guitarra&quot;</span>
inst<span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;Piano&quot;</span>
&nbsp;
document.<span style="color: black;">write</span><span style="color: black;">&#40;</span>inst + <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#41;</span>
document.<span style="color: black;">write</span><span style="color: black;">&#40;</span>inst.<span style="color: black;">shift</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#41;</span>
document.<span style="color: black;">write</span><span style="color: black;">&#40;</span>inst<span style="color: black;">&#41;</span></pre>
</div>
</div>
<blockquote><p>Baixo,Guitarra,Piano<br />
Baixo<br />
Guitarra,Piano</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://silveiraneto.net/2007/09/03/javascript-vetores/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

