  <?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>Athanazio &#187; programacao</title>
	<atom:link href="http://www.athanazio.com/category/programacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.athanazio.com</link>
	<description>Nada é Simples, Mas Tudo é Possível</description>
	<lastBuildDate>Thu, 01 Dec 2011 03:47:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>fazendo foto 3&#215;4 em java</title>
		<link>http://www.athanazio.com/2011/01/26/fazendo-foto-3x4-em-java/</link>
		<comments>http://www.athanazio.com/2011/01/26/fazendo-foto-3x4-em-java/#comments</comments>
		<pubDate>Wed, 26 Jan 2011 18:25:12 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[fotos]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[3x4]]></category>
		<category><![CDATA[caseiro]]></category>
		<category><![CDATA[de gratis]]></category>
		<category><![CDATA[economizar]]></category>
		<category><![CDATA[foto]]></category>
		<category><![CDATA[foto em casa]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[gratuito]]></category>
		<category><![CDATA[lambe-lambe]]></category>
		<category><![CDATA[não pago]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=2824</guid>
		<description><![CDATA[Hoje de tarde perguntei para a secretária da minha esposa que estava rodeando pela casa : &#8221; Ae vai querer umas fotos 3&#215;4 ? to fazendo umas e vou mandar imprimir &#8230; quer ? &#8221; a resposta foi ótima !!! &#8220;pra que ? é tudo digital hoje &#8230; &#8221; pronto eu com cara de tacho, [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Hoje de tarde perguntei para a secretária da minha esposa que estava rodeando pela casa : &#8221; Ae vai querer umas fotos 3&#215;4 ? to fazendo umas e vou mandar imprimir &#8230; quer ? &#8221; a resposta foi ótima !!! &#8220;pra que ? é tudo digital hoje &#8230; &#8221; pronto eu com cara de tacho, maledito condomínio que esta pedindo fotos 3&#215;4 para carteirinha da piscina, não podia ter uma camera por lá ?</p>
<p>Bem choradeira de lado, acabei resgatando um código que tinha feito em 2005 para montar uma folha de impressão de fotos 5&#215;7, porque na época achei um absurdo pagar o preço pedido, ainda acho hehehe, dai fiz as fotos com o ipod mesmo, dei uma arrumada basica no código para suportar mais dimensões do que o 5&#215;7 e pronto !! recebe como input uma imagem jpg e monta uma outra de saida no tamanho 1000&#215;1500 que eh para ser impressa no tamanho 10&#215;15.</p>
<p>clique na imagem para ver como fica o resultado :<br />
<a href="http://www.athanazio.com/wp-content/uploads/2011/01/300_400_mario.jpg"><img src="http://www.athanazio.com/wp-content/uploads/2011/01/300_400_mario-150x150.jpg" alt="" title="300_400_mario" width="150" height="150" class="alignnone size-thumbnail wp-image-2825" /></a><br />
<a href="http://www.athanazio.com/wp-content/uploads/2011/01/300_400_cachorro.jpg"><img src="http://www.athanazio.com/wp-content/uploads/2011/01/300_400_cachorro-150x150.jpg" alt="" title="300_400_cachorro" width="150" height="150" class="alignnone size-thumbnail wp-image-2826" /></a></p>
<p>o código em si não é complicado, é soh ter alguns cuidados na hora de compor a imagem de resultado e todos ficaram felizes, segue o código</p>
<pre class="brush: java; title: ; notranslate">
package br.com.thz.photo;

import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.ImageIcon;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class ProtoComposer {

	private static final int BORDER = 5;

	public static void main(String[] args) throws FileNotFoundException, IOException {

		createImage3_4(&quot;mario.jpg&quot;);
		createImage3_4(&quot;cachorro.jpg&quot;);

	}

	private static void createImage3_4(String fileName) throws FileNotFoundException, IOException {
		createImage(fileName, 300, 400);
	}

	private static void createImage5_7(String fileName) throws FileNotFoundException, IOException {
		createImage(fileName, 500, 700);
	}

	private static void createImage(String fileName, int width, int height) throws FileNotFoundException, IOException {
		int x = 0;
		int y = 0;
		int maxWidth = 1000;
		int maxHeight = 1500;

		BufferedImage buffer = new BufferedImage(maxWidth, maxHeight, BufferedImage.TYPE_INT_RGB);
		Graphics2D g2 = buffer.createGraphics();
		ImageIcon image = new ImageIcon(fileName);

		g2.setColor(Color.WHITE);
		g2.fillRect(0, 0, maxWidth, maxHeight);

		// font definition
		Font font = new Font(&quot;Tahoma&quot;, Font.BOLD, 30);
		g2.setFont(font);

		// draw images with the dimension informed
		while ((x + width) &lt;= maxWidth) {
			while ((y + height) &lt;= maxHeight) {
				drawImageWithTimeStamp(g2, image.getImage(), x, y, width, height);
				y += height;
			}
			x += width;
			y = 0;
		}

		generateJPG(buffer, width +&quot;_&quot; + height + &quot;_&quot; + fileName);
	}

	private static void drawImageWithTimeStamp(Graphics2D g2, Image image, int x, int y, int w, int h) {
		g2.drawImage(image, x + BORDER, y + BORDER, w - BORDER, h - BORDER, null);

		String text = getDate();
		FontMetrics metrics = g2.getFontMetrics();
		Rectangle2D rect = metrics.getStringBounds(text, 0, text.length(), g2);
		g2.setColor(Color.BLACK);

		int lateral = (int) ((w - rect.getWidth()) / 2.0);
		Rectangle toFill = new Rectangle();
		toFill.x = x + lateral - BORDER;
		toFill.y = (int) (y + h - (2 * BORDER) - rect.getHeight());
		toFill.height = (int) rect.getHeight();
		toFill.width = (int) rect.getWidth() + BORDER;

		g2.fillRect(toFill.x, toFill.y, toFill.width, toFill.height);
		g2.setColor(Color.WHITE);
		g2.drawString(text, toFill.x, (int) (toFill.y + rect.getHeight() - (2 * BORDER)));

	}

	public static String getDate() {
		SimpleDateFormat sdf = new SimpleDateFormat(&quot;dd-MMM-yyyy&quot;);
		return sdf.format(new Date());
	}

	private static void generateJPG(BufferedImage buffer, String fileName) throws FileNotFoundException, IOException {

		FileOutputStream file = new FileOutputStream(fileName);

		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(file);
		JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(buffer);
		param.setQuality(1.0F, true);
		encoder.setJPEGEncodeParam(param);

		encoder.encode(buffer);
		file.close();
	}

}
</pre>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2011/01/26/fazendo-foto-3x4-em-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cocos2d &#8211; acertando o passo</title>
		<link>http://www.athanazio.com/2010/11/09/cocos2d-acertando-o-passo/</link>
		<comments>http://www.athanazio.com/2010/11/09/cocos2d-acertando-o-passo/#comments</comments>
		<pubDate>Wed, 10 Nov 2010 00:51:58 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[iphone]]></category>
		<category><![CDATA[programacao]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=2779</guid>
		<description><![CDATA[nada como enxergar melhor e perceber que na tela de configuração do projeto tem um scroll a direita hehehehe, e fazer como esta na documentação trocar o compilador para o GCC ai funcionaram os exemplos !]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p><a href="http://www.athanazio.com/wp-content/uploads/2010/11/2010-11-09_22441.png"><img src="http://www.athanazio.com/wp-content/uploads/2010/11/2010-11-09_22441-450x254.png" alt="" title="2010-11-09_2244" width="450" height="254" class="alignnone size-medium wp-image-2781" /></a><br />
nada como enxergar melhor e perceber que na tela de configuração do projeto tem um scroll a direita hehehehe, e fazer como esta na documentação trocar o compilador para o GCC <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /><br />
ai funcionaram os exemplos !<br />
<a href="http://www.athanazio.com/wp-content/uploads/2010/11/2010-11-09_2249.png"><img src="http://www.athanazio.com/wp-content/uploads/2010/11/2010-11-09_2249-450x234.png" alt="" title="2010-11-09_2249" width="450" height="234" class="alignnone size-medium wp-image-2782" /></a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2010/11/09/cocos2d-acertando-o-passo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cocos2d &#8211; primeiros passos</title>
		<link>http://www.athanazio.com/2010/11/09/cocos2d-primeiros-passos/</link>
		<comments>http://www.athanazio.com/2010/11/09/cocos2d-primeiros-passos/#comments</comments>
		<pubDate>Wed, 10 Nov 2010 00:30:42 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[cocos2d]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=2776</guid>
		<description><![CDATA[seguindo os primeiros passso com o framework de jogos 2D para o Iphone ! primeiros passos começam sempre com um pouco de dor hehehe, estou seguindo esta orientacao inicial &#8230; http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:lesson_1._install_test mas jah comecei bem tomando uns erros de compilacao &#8230; mas imagino o que seja, acho que tinha habilitado o profiler para o xcode [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>seguindo os primeiros passso com o framework de jogos 2D para o Iphone ! primeiros passos começam sempre com um pouco de dor hehehe, estou seguindo esta orientacao inicial &#8230;<br />
<a href="http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:lesson_1._install_test">http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:lesson_1._install_test<br />
</a><br />
mas jah comecei bem tomando uns erros de compilacao &#8230;<br />
<img src="http://www.athanazio.com/wp-content/uploads/2010/11/2010-11-09_2227-231x300.png" alt="" title="2010-11-09_2227" width="231" height="300" class="alignnone size-medium wp-image-2777" /><br />
mas imagino o que seja, acho que tinha habilitado o profiler para o xcode e agora ao compilar o cocos2d ele esta reclamando que o mesmo nao esta ligado &#8230; deve ser isto <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2010/11/09/cocos2d-primeiros-passos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>copiando arquivos para a area de transferencia</title>
		<link>http://www.athanazio.com/2010/10/11/copiando-arquivos-para-a-area-de-transferencia/</link>
		<comments>http://www.athanazio.com/2010/10/11/copiando-arquivos-para-a-area-de-transferencia/#comments</comments>
		<pubDate>Tue, 12 Oct 2010 02:03:41 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[trecos]]></category>
		<category><![CDATA[automatizacao]]></category>
		<category><![CDATA[clipboard]]></category>
		<category><![CDATA[copy]]></category>
		<category><![CDATA[folder]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[jing]]></category>
		<category><![CDATA[macbook]]></category>
		<category><![CDATA[paste]]></category>
		<category><![CDATA[shared folder]]></category>
		<category><![CDATA[VBOXSVR]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=2742</guid>
		<description><![CDATA[maquina nova = problemas novos ! agora usando um macbook estou estava enfrentando um probleminha que era recuperar imagens capturadas com o Jing no mac para dentro de uma maquina virtual virtualbox windows. Trocando em miudos &#8230; Tenho o jing instalado no Mac e copio uma parte da tela e quero usar na area de [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>maquina nova = problemas novos !<br />
agora usando um <a href="http://www.apple.com/br/macbookpro/">macbook</a> estou estava enfrentando um probleminha que era recuperar imagens capturadas com o <a href="http://www.techsmith.com/jing/">Jing</a> no mac para dentro de uma maquina virtual virtualbox windows.<br />
Trocando em miudos &#8230;<br />
Tenho o jing instalado no Mac e copio uma parte da tela e quero usar na area de transferencia dentro de um windows xp rodando numa maquina virtual.<br />
solução encontrada : configurei o Jing para salvar a imagem numa pasta :<br />
<a href="http://www.athanazio.com/wp-content/uploads/2010/10/2010-10-11_2237.png"><img src="http://www.athanazio.com/wp-content/uploads/2010/10/2010-10-11_2237.png" alt="" title="2010-10-11_2237" width="323" height="126" class="alignnone size-full wp-image-2743" /></a></p>
<p><a href="http://www.athanazio.com/wp-content/uploads/2010/10/2010-10-11_2239.png"><img src="http://www.athanazio.com/wp-content/uploads/2010/10/2010-10-11_2239.png" alt="" title="2010-10-11_2239" width="493" height="299" class="alignnone size-full wp-image-2744" /></a></p>
<p>apos isto mapeamos a pasta no virtualbox para ser uma pasta compartilhada dentro do virtualbox, selecione o icone de pastas compartilhadas a partir da janela da maquina virtual rodando<br />
<img src="http://www.athanazio.com/wp-content/uploads/2010/10/2010-10-11_2242.png" alt="" title="2010-10-11_2242" width="294" height="190" class="alignnone size-full wp-image-2745" /></p>
<p>e depois clique para criar uma uma pasta compartilhada permanente<br />
<img src="http://www.athanazio.com/wp-content/uploads/2010/10/2010-10-11_2243.png" alt="" title="2010-10-11_2243" width="628" height="395" class="alignnone size-full wp-image-2746" /></p>
<p>Agora estamos prontos para ler os arquivos no windows, que esta rodando na maquina virtual, para isto vamos mapear a pasta compartilhada para o drive X: no windows </p>
<p>abra uma janela do windows explorer e escolha a opção tools / map network drive<br />
<img src="http://www.athanazio.com/wp-content/uploads/2010/10/2010-10-11_2248.png" alt="" title="2010-10-11_2248" width="516" height="331" class="alignnone size-full wp-image-2747" /></p>
<p>escolha o drive X, ou outra letra q preferir, e associe a pasta \\VBOXSVR\nome-da-pasta, se o nome da pasta compartilhada que vc escolheu foi &#8220;minha-pasta&#8221; o mapeamento do drive sera para \\VBOXSVR\minha-pasta, não esqueça de marcar para o mapeamento funcionar apos o boot também.</p>
<p>apos isto procurei um pouco na internet e achei um codigo quase pronto para copiar uma imagem para a area de transferencia, foi soh fazer um codigo para ler a pasta procurando por uma imagem e copiando ela para a area de transferencia &#8230; facim facim &#8230; <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>depois fiz um bat para executar o jar que fica em loop procurando por imagens numa pasta, funcionou que eh uma maravilha e ainda copia a imagem recem processada para a pasta old, ahhhh o cheiro no ar de codigo java sendo executado huauhahuahuau</p>
<p>para os curiosos de plantão eis ai o codigo</p>
<pre class="brush: java; title: ; notranslate">
package com.athanazio.image;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.File;
import java.io.IOException;

import javax.swing.ImageIcon;

public class CopyImageToClipboard {

	public static void main(String[] args) throws InterruptedException {

		String start = &quot;x:/clipboard/&quot;;
		File folder = new File(start);
		File folderOld = new File(start + &quot;old&quot;);
		folderOld.mkdir();

		while(true){
			String [] files = folder.list();
			for (int i = 0; i &lt; files.length; i++) {
				if( files[i].endsWith(&quot;.png&quot;)){
					System.out.println(&quot;copy file : &quot; + files[i]);
					ImageIcon icon = new ImageIcon(start + files[i]);
					setClipboard( icon.getImage());
					File image = new File(start + files[i]);
					image.renameTo( new File(start + &quot;old/&quot; + files[i]));
					break;
				}

			}
			Thread.sleep(300);
		}
	}

	public static void setClipboard(Image image) {
		ImageSelection imgSel = new ImageSelection(image);
		Toolkit.getDefaultToolkit().getSystemClipboard().setContents(imgSel, null);
	}

	// This class is used to hold an image while on the clipboard.
	public static class ImageSelection implements Transferable {
		private Image image;

		public ImageSelection(Image image) {
			this.image = image;
		}

		// Returns supported flavors
		public DataFlavor[] getTransferDataFlavors() {
			return new DataFlavor[] { DataFlavor.imageFlavor };
		}

		// Returns true if flavor is supported
		public boolean isDataFlavorSupported(DataFlavor flavor) {
			return DataFlavor.imageFlavor.equals(flavor);
		}

		// Returns image
		public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
			if (!DataFlavor.imageFlavor.equals(flavor)) {
				throw new UnsupportedFlavorException(flavor);
			}
			return image;
		}
	}

}
</pre>
<p>parte do codigo usado de <a href="http://elliotth.blogspot.com/2005/09/copying-images-to-clipboard-with-java.html">http://elliotth.blogspot.com/2005/09/copying-images-to-clipboard-with-java.html</a> </p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2010/10/11/copiando-arquivos-para-a-area-de-transferencia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>erro com id</title>
		<link>http://www.athanazio.com/2010/06/14/erro-com-id/</link>
		<comments>http://www.athanazio.com/2010/06/14/erro-com-id/#comments</comments>
		<pubDate>Mon, 14 Jun 2010 19:31:03 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[exception]]></category>
		<category><![CDATA[id]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=2603</guid>
		<description><![CDATA[quantas vezes não fiquei fuçando arquivo de log atrás de um erro, e sempre era algo do tipo : aconteceu lá pelas 10 da manhã, e nem sempre a data do servidor estava &#8230; assim como diremos &#8230; certa ! ou seja quase sempre o erro é achado quase por milagre Um dia destes não [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>quantas vezes não fiquei fuçando arquivo de log atrás de um erro, e sempre era algo do tipo : aconteceu lá pelas 10 da manhã, e nem sempre a data do servidor estava &#8230; assim como diremos &#8230; certa ! ou seja quase sempre o erro é achado quase por milagre <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Um dia destes não sei que servidor que estava acessando e rolou um erro no server bizzaro, que explodiu um monte de caracteres na saida http, mas a mensagem era algo do tipo : oh este monte de letras ae em baixo explica o que aconteceu para alguem que saiba ler isto &#8230; e era um monte de dados no formato BASE64, não me dei ao trabalho de converter de volta, mas criptografar um stacktrace de um erro, e colocar no formato BASE64 para poder mostrar pareceu uma idéia bem legal.</p>
<p>fiz uma versão reduzida disto, gerando somente um ID para o erro e retornando junto com a mensagem de erro assim na comunicação entre usuário e suporte surge um elemento em comum que é o identificador do erro.</p>
<p>o código Java é extremamente simples, as podia ser mais simples ainda heheheh</p>
<pre class="brush: java; title: ; notranslate">
public class ErrorID {

	private static int counter = 0;

	public static synchronized String getErrorID(String string) {
		String result = string + &quot; ERROR.ID:&quot; + System.currentTimeMillis() + &quot;-&quot; + counter++;
		if (counter &gt;= Integer.MAX_VALUE - 1) {
			counter = 0;
		}
		return result;
	}
}
</pre>
<p>e na hora de usar é algo do tipo :</p>
<pre class="brush: java; title: ; notranslate">
...
} catch (SQLException e) {
    String errorID = ErrorID.getErrorID(&quot;error inserting something&quot;);
    logger.error(errorID, e);
    throw new Exception(errorID);
...
</pre>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2010/06/14/erro-com-id/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>biblioteca para Json em Java</title>
		<link>http://www.athanazio.com/2010/06/13/biblioteca-para-json-em-java/</link>
		<comments>http://www.athanazio.com/2010/06/13/biblioteca-para-json-em-java/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 18:04:17 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[gson]]></category>
		<category><![CDATA[json]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/2010/06/13/bibliotec-para-json-em-java/</guid>
		<description><![CDATA[Como estou implementando uma integracao entre servidores, a comunicacao vai ser no formato JSON (apesar dos dois por enquanto serem Java), vamos ver se a biblioteca&#160;http://code.google.com/p/google-gson/&#160;resolve o problema de serializar para lah e para cah]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Como estou implementando uma integracao entre servidores, a comunicacao vai ser no formato JSON (apesar dos dois por enquanto serem Java),
<div>vamos ver se a biblioteca&nbsp;<a href="http://code.google.com/p/google-gson/">http://code.google.com/p/google-gson/</a>&nbsp;resolve o problema de serializar para lah e para cah <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </div>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2010/06/13/biblioteca-para-json-em-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>InputStream eh seu amigo</title>
		<link>http://www.athanazio.com/2010/06/13/inputstream-eh-seu-amigo/</link>
		<comments>http://www.athanazio.com/2010/06/13/inputstream-eh-seu-amigo/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 04:58:00 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[bytes read]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[inputstream]]></category>
		<category><![CDATA[rede]]></category>
		<category><![CDATA[stream]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/2010/06/13/inputstream-eh-seu-amigo/</guid>
		<description><![CDATA[escrevendo codigo para comunicacao em rede em Java e diversao garantida, na verdade eh diversao em qualquer linguagem &#8230; nestas aventuras eu estava passando por um problema muito interessante, que vou compartilhar. Uma aplicacao amiga de streaming de video que manda imagens de um servidor para um cliente, que rodando o cliente na propria maquina [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>escrevendo codigo para comunicacao em rede em Java e diversao garantida, na verdade eh diversao em qualquer linguagem &#8230;
<p>nestas aventuras eu estava passando por um problema muito interessante, que vou compartilhar. </p>
<p>Uma aplicacao amiga de streaming de video que manda imagens de um servidor para um cliente, que rodando o cliente na </p>
<p>propria maquina do servidor todos iam felizes, ateh que resolvi testar acessando de outra maquina &#8230; legal funcionou maneiro !</p>
<p>de outra maquina diferente &#8230; bum !! os dados davam uma zoneada firme !! nossa pensei que podia ser perda de pacote, configuracao de rede e outros breguetes.</p>
<p>mas o problema real, eh que um valorzim sinistro que eh sempre esquecido, estava de fato sendo esquecido, que eh o numero de bytes lidos pelo stream <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ou seja na maioria dos casos o inputstream lia o tamanho do buffer, mas as vezes nao conseguia encher o buffer, e o numero vinha menor !!!</p>
<p>e eu nao estava verificando isto (topeira)</p>
<p>o codigo alterado ficou mais ou menos assim (o trecho do inputstream)</p>
<p><code>int bytesRead = reader.read(buffer);while (bytesRead &lt; buffer.length) {bytesRead += reader.read(buffer, bytesRead, buffer.length - bytesRead);}</code></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2010/06/13/inputstream-eh-seu-amigo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>pongMe &#8211; primeiro teste com Flashdevelop + Flashpunk</title>
		<link>http://www.athanazio.com/2010/04/21/pongme-primeiro-teste-com-flashdevelop-flashpunk/</link>
		<comments>http://www.athanazio.com/2010/04/21/pongme-primeiro-teste-com-flashdevelop-flashpunk/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 00:45:19 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[flashdevelop]]></category>
		<category><![CDATA[flashpunk]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[pong]]></category>
		<category><![CDATA[sample]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=2547</guid>
		<description><![CDATA[Apos alguns arranhoes e minha vista cansada, porque ainda nao troquei o oculos &#8230; fiz algo que funciona, um quadradinho que vai para um lado e para o outro batendo nas paredes veja que legal, pongme o codigo fonte eh razoalmente simples: um arquivo Main.as que faz a inicializacoes do framework flashpunk, uma classe para [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Apos alguns arranhoes e minha vista cansada, porque ainda nao troquei o oculos &#8230; fiz algo que funciona, um quadradinho que vai para um lado e para o outro batendo nas paredes <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>veja que legal, <a href='http://www.athanazio.com/wp-content/uploads/2010/04/pongme.swf'>pongme</a></p>
<p>o codigo fonte eh razoalmente simples:<br />
um arquivo Main.as que faz a inicializacoes do framework flashpunk, uma classe para cada intancia de World, que  representa cada cena, por exemplo Menu, o jogo em si, tela de fim de jogo e assim por diante, e objetos filhos de Actor que sao elementos de tela.</p>
<p>seguem os arquivos que usei<br />
<span id="more-2547"></span></p>
<p>main.as</p>
<pre class="brush: as3; title: ; notranslate">
package
{
	import punk.core.*;
	import punk.util.*;
	import punk.*;

	[SWF(width = &quot;480&quot;, height = &quot;320&quot;)]

	public class Main extends Engine
	{
		public function Main()
		{
			super(480, 320, 60, 1, Menu);
		}
	}
}
</pre>
<p>menu.as</p>
<pre class="brush: as3; title: ; notranslate">
package
{
	import punk.core.*;
	import punk.util.*;
	import punk.*;

	/**
	 * ...
	 * @author athanazio.com
	 */
	public class Menu extends World
	{

		public function Menu()
		{
			Text.color = 0x667CFF;
			var centerX:int = FP.screen.width / 2;
			var centerY:int = FP.screen.height / 2;

			var title:Text = new Text(&quot;PongMe!\nPress Space to play.&quot;, centerX, centerY);
			title.size = 15;
			title.center();
			add(title);
		}

		override public function update():void
		{
			if (Input.pressedKey(Key.SPACE))
				FP.goto = new GameWorld();
		}

	}

}
</pre>
<p>gameworld.as</p>
<pre class="brush: as3; title: ; notranslate">
package
{

	import punk.core.World;
	import punk.Text;

	/**
	 * ...
	 * @author athanazio.com
	 */
	public class GameWorld extends World
	{

		public function GameWorld()
		{
		}

		override public function init():void
		{
			FP.randomizeSeed();

			Text.color = 0x667CFF;
			add(new Text(&quot;Game Screen.&quot;, 10, 10));

			add(new Player());
			add(new Ball());
			add(new WallTop());
			add(new WallLeft());
			add(new WallRight());
		}
	}

}
</pre>
<p>player.as</p>
<pre class="brush: as3; title: ; notranslate">
package
{
	import punk.Actor;
	import punk.util.Input;
	import punk.util.Key;

	/**
	 * ...
	 * @author athanazio.com
	 */
	public class Player extends Actor
	{
		private var speed:Number = 3;

		[Embed(source='data/player.png')] private var ImgPlayer:Class;
		public function Player()
		{
			sprite = FP.getSprite(ImgPlayer, 0, 0);
			speed = 6 * (sprite.width / FP.fps);
			setHitbox( sprite.width, sprite.height, 0, 0);

			x = 100;
			y = 200;
			type = &quot;player&quot;;

			Input.define(&quot;right&quot;, Key.RIGHT);
			Input.define(&quot;left&quot;, Key.LEFT);
			Input.define(&quot;up&quot;, Key.UP);
			Input.define(&quot;down&quot;, Key.DOWN);
		}

		override public function update():void
		{
			var newX:Number = x;
			var newY:Number = y;

			if (Input.check(&quot;right&quot;)) newX += speed;
			if (Input.check(&quot;left&quot;)) newX -= speed;
			if (Input.check(&quot;up&quot;)) newY -= speed;
			if (Input.check(&quot;down&quot;)) newY += speed;

			if ( ! collide(&quot;wall&quot;, newX, newY) )
			{
				x = newX;
				y = newY;
			}

			var ball:Ball= collide(&quot;ball&quot;, x, y) as Ball;
			if ( ball )
			{
				ball.speedY = ball.speedY * -1;
			}

		}

	}

}
</pre>
<p>ball.as</p>
<pre class="brush: as3; title: ; notranslate">
package
{
	import punk.Actor;

	/**
	 * ...
	 * @author athanazio.com
	 */
	public class Ball extends Actor
	{
		public var speedX:Number = 0;
		public var speedY:Number = 0;

		[Embed(source='data/ball.png')]	private var ImgPlayer:Class;
		public function Ball()
		{
			super();
			sprite = FP.getSprite(ImgPlayer, 0, 0);
			speedX = 7 * (sprite.width / FP.fps);
			speedY = 7 * (sprite.width / FP.fps);

			x = 100;
			y = 100;
			type = &quot;ball&quot;;
		}

		override public function update():void
		{
			x += speedX;
			y += speedY;
		}

	}

}
</pre>
<p>wallleft.as</p>
<pre class="brush: as3; title: ; notranslate">
package
{
	import punk.Actor;
	import punk.core.Entity;

	/**
	 * ...
	 * @author athanazio.com
	 */
	public class WallLeft extends Actor
	{
		[Embed(source='data/wall-vert.png')] private var ImgPlayer:Class;
		public function WallLeft()
		{
			sprite = FP.getSprite(ImgPlayer, 0, 0);
			setHitbox( sprite.width, sprite.height, 0, 0);
			x = 0;
			y = 0;
			type = &quot;wall&quot;;
		}

		override public function update():void
		{
			var ball:Ball= collide(&quot;ball&quot;, x, y) as Ball;

			if ( ball )
			{
				ball.speedX = ball.speedX * -1;
			}
		}
	}

}
</pre>
<p>wallright.as</p>
<pre class="brush: as3; title: ; notranslate">
package
{
	import punk.Actor;
	import punk.core.Entity;

	/**
	 * ...
	 * @author athanazio.com
	 */
	public class WallRight extends Actor
	{
		[Embed(source='data/wall-vert.png')] private var ImgPlayer:Class;
		public function WallRight()
		{
			sprite = FP.getSprite(ImgPlayer, 0, 0);
			setHitbox( sprite.width, sprite.height, 0, 0);
			x = FP.screen.width - sprite.width;
			y = 0;
			type = &quot;wall&quot;;
		}

		override public function update():void
		{
			var ball:Ball= collide(&quot;ball&quot;, x, y) as Ball;

			if ( ball )
			{
				ball.speedX = ball.speedX * -1;
			}
		}

	}

}
</pre>
<p>walltop.as</p>
<pre class="brush: as3; title: ; notranslate">
package
{
	import punk.Actor;
	import punk.core.Entity;

	/**
	 * ...
	 * @author athanazio.com
	 */
	public class WallTop extends Actor
	{
		[Embed(source='data/wall-top.png')] private var ImgPlayer:Class;
		public function WallTop()
		{
			sprite = FP.getSprite(ImgPlayer, 0, 0);
			setHitbox( sprite.width, sprite.height, 0, 0);
			x = 0;
			y = 0;
			type = &quot;wall&quot;;
		}

		override public function update():void
		{
			var ball:Ball= collide(&quot;ball&quot;, x, y) as Ball;

			if ( ball )
			{
				ball.speedY = ball.speedY * -1;
			}
		}

	}

}
</pre>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2010/04/21/pongme-primeiro-teste-com-flashdevelop-flashpunk/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>flash esta no ar</title>
		<link>http://www.athanazio.com/2010/04/21/flash-esta-no-ar/</link>
		<comments>http://www.athanazio.com/2010/04/21/flash-esta-no-ar/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 16:44:12 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[flashdevelop]]></category>
		<category><![CDATA[flashpunk]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[ludumdare]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=2535</guid>
		<description><![CDATA[Quando escrevi sobre javaFX uma das constatações foi de que o player com maior abrangencia no mercado eh o flash, e porque nao fazer jogos em flash ? umas das minhas maiores restrições pessoais eh não conhecer uma opção gratuita que tenha foco no desenvolvedor e menos foco no design, porque para mim usar o [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Quando escrevi sobre <a href="http://www.athanazio.com/2009/04/15/javafx-para-criar-jogos-13/">javaFX</a> uma das constatações foi de que o player com maior abrangencia no mercado eh o flash, e porque nao fazer jogos em flash ? umas das minhas maiores restrições pessoais eh não conhecer uma opção gratuita que tenha foco no desenvolvedor e menos foco no design, porque para mim usar o <a href="http://www.adobe.com/products/flash/">flash professional</a> para criar os jogos seria um desafio de aprendizado muito grande, alem do produto ser pago.</p>
<p>Acabei pesquisando e perguntando a um <a href="http://twitter.com/diegocbarboza">amigo</a> que anda desenvolvendo em flash, e descobri a alternativa do <a href="http://www.flashdevelop.org">FlashDevelop + Flex SDK</a>, que combina uma IDE para desenvolvimento para flash, usando ActionScript, e um compilador de ActionScript que gera o SWF final para ser apresentado nas paginas. Assim estou em casa, codigo codigo codigo + artefatos graficos e audio = jogo. <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Bem o processo de instalacao eh bem simples, esta bem documentado aqui<br />
<a href="http://www.flashdevelop.org/community/viewtopic.php?f=11&#038;t=5669">http://www.flashdevelop.org/community/viewtopic.php?f=11&#038;t=5669<br />
</a></p>
<p>alem disto identifiquei um framework que eh muito bem comentado pela comunidade do <a href="http://www.ludumdare.com/compo/">ludumdare</a>, que eh o <a href="http://flashpunk.net">flashpunk</a> que tem um monte de exemplos disponiveis em<br />
<a href="http://www.brighthub.com/hubfolio/matthew-casperson/blog/archive/2010/03/19/flashpunk-tutorials.aspx">http://www.brighthub.com/hubfolio/matthew-casperson/blog/archive/2010/03/19/flashpunk-tutorials.aspx</a></p>
<p>Bem agora eh colocar a mao na massa e ver no que vai dar !</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2010/04/21/flash-esta-no-ar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>listando metodos das classes de JAR</title>
		<link>http://www.athanazio.com/2010/03/25/listando-metodos-das-classes-de-jar/</link>
		<comments>http://www.athanazio.com/2010/03/25/listando-metodos-das-classes-de-jar/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 13:11:09 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[programacao]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=2504</guid>
		<description><![CDATA[Uma tarefa que acontece ocasionalmente é a de encontrar uma classe dentro de arquivos JAR, a solução é algo como varrer o conteúdo do JAR como um Zip que é, e examinar os itens do arquivo, e neste exemplo como estou usando o nome das classes para instanciar objetos do tipo Class que representem a [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Uma tarefa que acontece ocasionalmente é a de encontrar uma classe dentro de arquivos JAR, a solução é algo como varrer o conteúdo do JAR como um Zip que é, e examinar os itens do arquivo, e neste exemplo como estou usando o nome das classes para instanciar objetos do tipo Class que representem a definição da classe, o jar em questão deve estar no classpath da aplicacação.</p>
<p>segue ae o código, divirtam-se</p>
<pre class="brush: java; title: ; notranslate">
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class SaveMethodNames {
	public static void main(String[] args) throws IOException,
			ClassNotFoundException {

		String jarName = args[0];
		String resultName = jarName + &quot;.csv&quot;;
		BufferedWriter writer = new BufferedWriter(new FileWriter(resultName));
		writer.write(&quot;CLASSNAME,METHOD\r&quot;);
		String output = null;

		String[] classes = getClassNames(jarName);
		for (int i = 0; i &lt; classes.length; i++) {
			System.out.println(classes[i]);

			String[] methods = getMethodNames(classes[i]);
			for (int j = 0; j &lt; methods.length; j++) {
				System.out.println(&quot;\t&quot; + methods[j]);
				output = classes[i] + &quot;,&quot; + methods[j] + &quot;\r&quot;;
				writer.write(output);
			}
		}

		writer.flush();
		writer.close();
	}

	private static String[] getMethodNames(String className) {
		Class classDef;
		String[] result = new String[0];

		try {
			classDef = Class.forName(className);
			Method[] methods = classDef.getMethods();
			result = new String[methods.length];

			for (int i = 0; i &lt; methods.length; i++) {
				result[i] = methods[i].toString();
			}
		} catch (Throwable e) {
			System.out.println(&quot;not able to get the methods from : &quot;
					+ className);
		}
		return result;
	}

	public static String[] getClassNames(String jarName) throws IOException {
		ZipFile jar = new ZipFile(jarName);
		Enumeration entries = jar.entries();
		String className = null;
		ArrayList temp = new ArrayList();

		while (entries.hasMoreElements()) {
			ZipEntry entry = (ZipEntry) entries.nextElement();
			if (!entry.isDirectory()) {
				if (isClassName(entry.getName())) {
					className = formatClassName(entry.getName());
					temp.add(className);
				}
			}
		}
		jar.close();

		String[] result = new String[temp.size()];
		result = (String[]) temp.toArray(result);
		return result;
	}

	private static String formatClassName(String name) {
		name = name.replaceAll(&quot;/&quot;, &quot;.&quot;);
		name = name.replaceAll(&quot;.class&quot;, &quot;&quot;);
		return name;
	}

	private static boolean isClassName(String name) {
		return name.indexOf(&quot;.class&quot;) &gt;= 0;
	}

}
</pre>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2010/03/25/listando-metodos-das-classes-de-jar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jaga e ludum dare 16</title>
		<link>http://www.athanazio.com/2009/12/14/jaga-e-ludum-dare-16/</link>
		<comments>http://www.athanazio.com/2009/12/14/jaga-e-ludum-dare-16/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 12:25:09 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[fotos]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[trecos]]></category>
		<category><![CDATA[16]]></category>
		<category><![CDATA[dog]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[jaga]]></category>
		<category><![CDATA[ludum dare]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/2009/12/14/jaga-e-ludum-dare-16/</guid>
		<description><![CDATA[bem o fim de semana foi bizzarro cheio novidades e aventuras, a mais legal eh um novo morador da casa esta chegando, o Neskau, um simpatico cachorrinho que vai morar conosco, por enquanto como esta desmamando, vem durante o dia e depois volta na mãe &#8230; otimo presente de natal para todos nós. outro ocorrido [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>bem o fim de semana foi bizzarro cheio novidades e aventuras, a mais legal eh um novo morador da casa esta chegando, o Neskau, um simpatico cachorrinho que vai morar conosco, por enquanto como esta desmamando, vem durante o dia e depois volta na mãe &#8230; otimo presente de natal para todos nós.<br />
<img src="http://www.athanazio.com/wp-content/uploads/2009/12/ld16-new-player-at-home.jpg" alt="ld16 new player at home" title="ld16 new player at home" width="450" height="300" class="alignnone size-full wp-image-2375" /></p>
<p>outro ocorrido foi a participação no ludum dare 16, meio desastrosa porque não entreguei um jogo no fim do prazo, mas muito produtiva porque conclui a migracao inicial do framework que estou fazedo para o desktop. A versão inicial soh rodava no android agora tem a versão desktop também, as duas estão assim como direi em estágio alpha <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  mas breve breve terei ao menos uma versão beta com documentação decente, vai esta lah em <a href="http://jaga.athanazio.com">jaga.athanazio.com</a></p>
<p>ao menos os desenhos para o jogo ficaram bonitinhos hhhahahhah<br />
<img src="http://www.athanazio.com/wp-content/uploads/2009/12/ld16-npc-list.jpg" alt="ld16 npc list" title="ld16 npc list" width="450" height="95" class="alignnone size-full wp-image-2377" /></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/12/14/jaga-e-ludum-dare-16/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ano de jogos e a vinda do jaga</title>
		<link>http://www.athanazio.com/2009/12/10/ano-de-jogos-e-a-vinda-do-jaga/</link>
		<comments>http://www.athanazio.com/2009/12/10/ano-de-jogos-e-a-vinda-do-jaga/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 18:10:33 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[jaga]]></category>
		<category><![CDATA[ludum dare]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=2364</guid>
		<description><![CDATA[Ahhhh 2009 terminando, quanta coisa aconteceu !! minha investida no mercado de jogos esta crescendo, consegui fazer vários jogos este ano, vários mesmo !! dá uma olhada na lista : http://www.athanazio.com/jogos/ e nesta jornada usei diversas tecnologias diferentes: XNA, SDL, Lõve, Java, Unity3D delícia !! agora com a experiência que acumulei estou iniciando o desenvolvimento [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Ahhhh 2009 terminando, quanta coisa aconteceu !! minha investida no mercado de jogos esta crescendo, consegui fazer vários jogos este ano, vários mesmo !! dá uma olhada na lista : <a href="http://www.athanazio.com/jogos/">http://www.athanazio.com/jogos/</a> e nesta jornada usei diversas tecnologias diferentes: <a href="http://creators.xna.com/en-US/">XNA</a>, <a href="http://www.libsdl.org/">SDL</a>, <a href="http://love2d.org/">Lõve</a>, <a href="http://java.com">Java</a>, <a href="http://unity3d.com/">Unity3D </a>delícia !! agora com a experiência que acumulei estou iniciando o desenvolvimento de um framework para jogos, onde o desenvolvimento será em <a href="http://www.lua.org/">Lua </a>e o backend em Java.</p>
<p>A implementação da primeira versão de testes foi feita para o sistema operacional Android, e pretendo ter a versão para web pronta para o<a href="http://www.ludumdare.com/compo/2009/11/13/announcing-ludum-dare-16-december-11th-13th-weekend/"> próximo Ludum Dare</a> ! espera otimas novidades ! assim que tiver um release para download vai estar em <a href="http://jaga.athanazio.com">jaga.athanazio.com</a></p>
<p>abs</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/12/10/ano-de-jogos-e-a-vinda-do-jaga/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>android game &#8211; imagem e som</title>
		<link>http://www.athanazio.com/2009/11/21/android-game-imagem-e-som/</link>
		<comments>http://www.athanazio.com/2009/11/21/android-game-imagem-e-som/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 20:17:03 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[.ogg]]></category>
		<category><![CDATA[.png]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[effect]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[soundtrack]]></category>
		<category><![CDATA[sprite]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=2315</guid>
		<description><![CDATA[Opa ! apos algumas idas e vindas no codigo, as coisas começam a se arrumar hehehehe, nesta versão já esta resolvida a exibição de imagem a partir do nome da imagem, e execução de som no formato ogg, tanto no loop como um som a partir de um evento do usuário. Apesar da recomendação do [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p><a href="http://www.athanazio.com/wp-content/uploads/2009/11/android-show-image.png"><img src="http://www.athanazio.com/wp-content/uploads/2009/11/android-show-image-450x300.png" alt="android show image" title="android show image" width="450" height="300" class="alignnone size-medium wp-image-2316" /></a><br />
Opa ! apos algumas idas e vindas no codigo, as coisas começam a se arrumar hehehehe, nesta versão já esta resolvida a exibição de imagem a partir do nome da imagem, e execução de som no formato ogg, tanto no loop como um som a partir de um evento do usuário.</p>
<p>Apesar da recomendação do SDK seja de acessar os arquivos de midia através do resource ID criado na classe R, eu estou construindo as classes usando o nome do resource para poder expandir a programação do jogo para uma lingaguem de script, e usar o java como uma camada de abstração do jogo.</p>
<p>Vamos ao codigo e alguns comentarios sobre cada um :</p>
<p><strong>GameActivity </strong>- ganhou uma nova chamada para determinar que volume o jogo vai usar, setVolumeControlStream(AudioManager.STREAM_MUSIC) assim o jogo fica com o mesmo volume que estiver acertado para a musica, alem disto o metodo onDestroy() chama o novo metodo release() da view que vai se encarregar de liberar recursos e em especial mandar os audios se calarem <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush: java; title: ; notranslate">
package com.athanazio.android.showimage;

import android.app.Activity;
import android.media.AudioManager;
import android.os.Bundle;
import android.view.Window;

public class GameActivity extends Activity {
	private GameView view;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setVolumeControlStream(AudioManager.STREAM_MUSIC);

		view = new GameView(this, getResources());
		setContentView(view);
	}

	protected void onDestroy() {
		super.onDestroy();
		view.release();
	}

}
</pre>
<p><strong>GameView</strong> &#8211; usa as classes Sprite e Audio para exibir imagens e tocar audio, poucas mudanças comparando com a versão anterior.</p>
<pre class="brush: java; title: ; notranslate">
package com.athanazio.android.showimage;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;

public class GameView extends View implements Runnable {

	private static final String TAG = &quot;GAME VIEW&quot;;

	private static final int INTERVAL = 10;
	private Paint cPaint;

	private boolean running = true;

	FPSCounter fps;

	private Sprite background;
	private Sprite cloud;

	private Audio soundtrack;
	private Audio touch;

	public GameView(Context context, Resources resources) {
		super(context);

		String packageName = getClass().getPackage().getName();

		background = new Sprite(resources, packageName, &quot;background&quot;);
		cloud = new Sprite(resources, packageName, &quot;cloud&quot;);
		cloud.setCenterAtMiddle();

		soundtrack = new Audio(resources, packageName, &quot;soundtrack&quot;);
		touch = new Audio(resources, packageName, &quot;cowbell&quot;);

		soundtrack.setLooping(true);
		soundtrack.play();

		cPaint = new Paint();
		setFocusable(true);
		setClickable(true);
		setLongClickable(true);

		fps = new FPSCounter();

		// Set the background
		this.setBackgroundColor(Color.WHITE);
		Log.i(TAG, &quot;game view created&quot;);

		Thread monitorThread = new Thread(this);
		monitorThread.setPriority(Thread.MIN_PRIORITY);
		monitorThread.start();
	}

	public void draw(Canvas canvas) {
		super.draw(canvas);

		background.draw(canvas);
		cloud.draw(canvas);

		cPaint.setColor(Color.WHITE);
		canvas.drawText(fps.getFPS(), 20, 20, cPaint);
	}

	public boolean onKeyUp(int keyCode, KeyEvent event) {
		return super.onKeyUp(keyCode, event);
	}

	public boolean onKeyDown(int keyCode, KeyEvent event) {
		boolean handled = false;
		Log.i(TAG, &quot;key down&quot;);
		float x = cloud.getX();
		float y = cloud.getY();

		if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
			y = y - 5;
			handled = true;
		} else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
			y = y + 5;
			handled = true;
		} else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
			x = x - 5;
			handled = true;
		} else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
			x = x + 5;
			handled = true;
		}

		cloud.move(x, y);
		return handled;
	}

	public boolean onTouchEvent(MotionEvent event) {
		cloud.setX(event.getRawX());
		cloud.setY(event.getRawY());
		Log.i(TAG, &quot;on touch&quot;);

		touch.play();
		return super.onTouchEvent(event);
	}

	public void run() {
		while (running) {
			try {
				Thread.sleep(INTERVAL);
			} catch (InterruptedException e) {
				Log.e(TAG, &quot;main loop finished&quot;);
			}
			update();
			postInvalidate();
		}
	}

	private void update() {
		fps.update();

	}

	public void release() {
		running = false;
		soundtrack.release();
		touch.release();
	}

}
</pre>
<p><strong>Sprite</strong> &#8211; esta eh responsavel por exibir imagens na tela, uma atenção especial deve ser dada ao recurso de determinar o centro da imagem, isto eh muito util para responder eventos de mouse, e por exemplo posicionar a imagem centralizada onde o usuário clicou, o método setCenterAtMiddle() calcula a posição para desenhar baseado na largura e altura da imagem. e por default o centro da imagem eh no 0,0.</p>
<pre class="brush: java; title: ; notranslate">
package com.athanazio.android.showimage;

import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.Log;

public class Sprite {

	private static final String TAG = &quot;GAME SPRITE&quot;;
	private Bitmap bitmap;
	private float x;
	private float y;
	private float centerX;
	private float centerY;
	private float drawX;
	private float drawY;
	private Paint paint;

	public Sprite(Resources resources, String packageName, String name) {
		String logFileName = packageName + &quot; &quot; + name;
		Log.i(TAG, &quot;loading image : &quot; + logFileName);

		int id = resources.getIdentifier(name, &quot;drawable&quot;, packageName);
		bitmap = BitmapFactory.decodeResource(resources, id);
		centerX = 0;
		centerY = 0;

		setX(0);
		setY(0);

		this.paint = new Paint();
	}

	public void draw(Canvas canvas) {
		canvas.drawBitmap(bitmap, drawX, drawY, paint);
	}

	public void move(float x, float y) {
		setX(this.x + x);
		setY(this.y + y);
	}

	public void setCenterAtMiddle(){
		centerX = bitmap.getWidth() / 2F;
		centerY = bitmap.getHeight() / 2F;
	}

	public float getX() {
		return x;
	}

	public void setX(float x) {
		this.x = x;
		drawX = this.x - centerX;
	}

	public float getY() {
		return y;
	}

	public void setY(float y) {
		this.y = y;
		drawY = this.y - centerY;
	}

}
</pre>
<p><strong>Audio</strong> &#8211; esta classe esconde a criação de um MediaPlayer para cada som que se deseja tocar, imagino que o melhor cenário seria ter uma classe para som em loop que usaria um MediaPlayer, e outra classe para efeitos sonoros que tocaria no maximo N efeitos ao mesmo tempo, mantendo menos objetos MediaPlayer na memória.</p>
<p>Mas a implementação atual mantém um MediaPlayer para cada som, observar que o resource ID é recuperado pelo nome do arquivo usando o metodo resources.getIdentifier(name, &#8220;raw&#8221;, packageName) e a partir do resource ID podemos recuperar o AssetFileDescriptor com a chamada resources.openRawResourceFd(id), of file descriptor é usado para inicializar o MediaPlayer com os detalhes necessários a execução do som.</p>
<pre class="brush: java; title: ; notranslate">
package com.athanazio.android.showimage;

import android.content.res.AssetFileDescriptor;
import android.content.res.Resources;
import android.media.MediaPlayer;
import android.util.Log;

/**
 * Audio resources abstraction
 *
 * @author athanazio
 * @see &quot;http://developer.android.com/intl/fr/guide/topics/media/index.html&quot;
 * @see &quot;http://developer.android.com/intl/fr/reference/android/media/MediaPlayer.html#Valid_and_Invalid_States&quot;
 */
public class Audio {

	private static final String TAG = &quot;GAME AUDIO&quot;;
	private MediaPlayer player;
	private boolean ready;
	private int id;
	private AssetFileDescriptor afd;

	/**
	 *
	 * @param resources
	 * @param context
	 * @param packageName
	 * @param name
	 *
	 */
	public Audio(Resources resources, String packageName, String name) {
		String logFileName = packageName + &quot; &quot; + name;
		Log.i(TAG, &quot;loading audio : &quot; + logFileName);

		ready = false;
		player = new MediaPlayer();

		try {
			this.id = resources.getIdentifier(name, &quot;raw&quot;, packageName);
			this.afd = resources.openRawResourceFd(id);

			Log.i(TAG, &quot;loading audio : &quot; + logFileName + &quot; id:&quot; + id);

			player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
			player.setLooping(false);
			player.prepare();

			// reset the player after completion
			player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
				public void onCompletion(MediaPlayer mp) {
					try {
						player.reset();
						player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
						player.prepare();
					} catch (Exception e) {
						Log.e(TAG, &quot;error resetting the media player&quot;);
						e.printStackTrace();
					}
				}
			});

			ready = true;

		} catch (Exception e) {
			Log.e(TAG, &quot;ERROR loading audio : &quot; + logFileName);
			e.printStackTrace();
		}
	}

	public void play() {
		if (ready) {
			player.start();
		} else {
			Log.i(TAG, &quot;the player is not ready.&quot;);
		}
	}

	public void setLooping(boolean b) {
		player.setLooping(b);
	}

	public void release() {
		player.stop();
		player.release();
	}

}
</pre>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/11/21/android-game-imagem-e-som/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>android &#8211; mover bolinha</title>
		<link>http://www.athanazio.com/2009/11/21/android-mover-bolinha/</link>
		<comments>http://www.athanazio.com/2009/11/21/android-mover-bolinha/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 14:14:00 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[90 fps]]></category>
		<category><![CDATA[direction]]></category>
		<category><![CDATA[fps]]></category>
		<category><![CDATA[hello world]]></category>
		<category><![CDATA[main loop]]></category>
		<category><![CDATA[touch screen]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=2310</guid>
		<description><![CDATA[Na minha opinão o hello world para desenvolver jogos eh mover um desenho primitivo na tela junto com a informação de FPS (frames por segundo) até porque logo logo perguntamos : tah rodando a quantos FPS ? assim sendo já posso dizer que fiz o meu hello world para o android. Alguns links que ajudaram [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p><a href="http://www.athanazio.com/wp-content/uploads/2009/11/android-move-ball.png"><img class="alignnone size-medium wp-image-2311" title="android move ball" src="http://www.athanazio.com/wp-content/uploads/2009/11/android-move-ball-450x300.png" alt="android move ball" width="450" height="300" /></a></p>
<p>Na minha opinão o hello world para desenvolver jogos eh mover um desenho primitivo na tela junto com a informação de FPS (frames por segundo) até porque logo logo perguntamos : tah rodando a quantos FPS ? <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  assim sendo já posso dizer que fiz o meu hello world para o android.</p>
<p>Alguns links que ajudaram bastante foram estes :</p>
<p>Uma apresentação da google sobre o desenvolvimento para de jogos para o Android<br />
<a href="http://www.scribd.com/doc/16917369/Writing-Real-Time-Games-for-Android">Writing-Real-Time-Games-for-Android</a></p>
<p>Os exemplos de cógigo citados na apresentação<br />
<a href="http://code.google.com/p/apps-for-android/source/browse/trunk/CLiCkin2DaBeaT/src/com/google/clickin2dabeat/C2B.java">C2B </a>2 <a href="http://code.google.com/p/apps-for-android/source/browse/trunk/CLiCkin2DaBeaT/src/com/google/clickin2dabeat/GameView.java">GameView</a></p>
<p>Com certeza este exemplo que escrevi eh extremamente simples, mas exemplifica alguns elementos básicos :</p>
<ul>
<li>main loop</li>
<li>chamada de update</li>
<li>atualização da area de vizualização</li>
<li>input do usuário</li>
</ul>
<p>O ambiente que tenho eh o Eclipse com o plugin para desenvolvimento do android instalado, para os testes eu prefiro usar o telefone porque o emulador demora muito para inicializar <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  e este exemplo tem basicamento 3 classes :</p>
<p><strong>GameActivity</strong> &#8211; que eh a entrada da aplicação, nela eu solicito o uso fullscreen para o jogo, e determino que a visualização será realizada por uma instancia da classe GameView.</p>
<pre class="brush: java; title: ; notranslate">
package com.athanazio.android.moveball2;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;

public class GameActivity extends Activity {
	private GameView view;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);

		view = new GameView(this);
		setContentView(view);
	}

	protected void onPause() {
		super.onPause();
		view.pause();
	}
}
</pre>
<p><strong>GameView</strong> &#8211; nesta classe reside o loop principal do jogo que é iniciado no final do construtor, note que na verdade eh criado um Thread com baixa prioridade, que passará a realizar as atividades de atualização e principalmente executar o método postupdate() notficando a interface que pode ser exibida.</p>
<p>além do loop principal o input direcional é tratado pelo método onKeyDown() e o tocar na tela pelo método onTouchEvent()</p>
<pre class="brush: java; title: ; notranslate">
package com.athanazio.android.moveball2;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;

public class GameView extends View implements Runnable {

	private static final String TAG = &quot;GAMEVIEW&quot;;

	private static final int INTERVAL = 10;
	private Paint cPaint;

	private float x = 50;

	private float y = 50;

	private boolean running = true;

	FPSCounter fps;

	public GameView(Context context) {
		super(context);
		cPaint = new Paint();
		setFocusable(true);
		setClickable(true);
		setLongClickable(true);

		fps = new FPSCounter();

		// Set the background
		this.setBackgroundColor(Color.WHITE);
		Log.i(TAG, &quot;game view created&quot;);

		Thread monitorThread = new Thread(this);
		monitorThread.setPriority(Thread.MIN_PRIORITY);
		monitorThread.start();
	}

	public boolean onKeyUp(int keyCode, KeyEvent event) {
		return super.onKeyUp(keyCode, event);
	}

	public boolean onKeyDown(int keyCode, KeyEvent event) {
		boolean handled = false;
		Log.i(TAG, &quot;key down&quot;);

		if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
			y = y - 5;
			handled = true;
		} else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
			y = y + 5;
			handled = true;
		} else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
			x = x - 5;
			handled = true;
		} else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
			x = x + 5;
			handled = true;
		}
		return handled;
	}

	public boolean onTouchEvent(MotionEvent event) {
		x = event.getRawX();
		y = event.getRawY();
		Log.i(TAG, &quot;on touch&quot;);

		return super.onTouchEvent(event);
	}

	public void draw(Canvas canvas) {
		super.draw(canvas);

		cPaint.setColor(Color.BLUE);
		canvas.drawCircle(x, y, 15, cPaint);

		cPaint.setColor(Color.BLACK);
		canvas.drawText(fps.getFPS(), 20, 20, cPaint);

	}

	public void run() {
		while (running) {
			try {
				Thread.sleep(INTERVAL);
			} catch (InterruptedException e) {
				Log.e(TAG, &quot;main loop finished&quot;);
			}
			update();
			postInvalidate();
		}
	}

	private void update() {
		fps.update();

	}

	public void pause() {
		running = false;
	}

}
</pre>
<p><strong>FPSCounter</strong> &#8211; nesta classe é feita uma contagem de frames que o jogo consegue exibir por segundo, vi algumas implementações interessantes disto, mas acabei fazendo o mais simples e mais econômico, contar frames e ver se jah passou o tempo <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  note que algumas variáveis eu criei fora dos métodos para evitar que o Garbage collector tivesse que trabalhar, querendo ou não isto economiza alguns milisegundos <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush: java; title: ; notranslate">
package com.athanazio.android.moveball2;

import java.text.DecimalFormat;

import android.os.SystemClock;

public class FPSCounter {

	public static final DecimalFormat format = new DecimalFormat(&quot;###0.00&quot;);

	private float frames;
	private String fps;
	private long start;
	private long current;

	public FPSCounter() {
		start = SystemClock.uptimeMillis();
		frames = 0;
		fps = &quot;???&quot;;
	}

	public void update() {
		frames ++;
		current = SystemClock.uptimeMillis();
		if( current - start &gt; 1000 ){
			fps = format.format(frames);
			frames = 0;
			start = current;
		}
	}

	public String getFPS() {
		return fps;
	}
}
</pre>
<p>a propósito o fps esta em torno de 90 e poucos, vamos ver o que acontece quando tiver de desenhar uma imagem no fundo e varias outras na tela hehehehe.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/11/21/android-mover-bolinha/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>android camera binarization</title>
		<link>http://www.athanazio.com/2009/11/16/android-camera-binarization/</link>
		<comments>http://www.athanazio.com/2009/11/16/android-camera-binarization/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 12:47:14 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[fotos]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[binarization]]></category>
		<category><![CDATA[camera]]></category>
		<category><![CDATA[otsu]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=2274</guid>
		<description><![CDATA[Olas, Este eh o meu primeiro experimento de aplicação para o android, neste programa capturo a camera e gero uma versão binarizada (preto e branco) da imagem da camera usando o algorimo do otsu de binarização de imagens. segue o link para o download da aplicação: www.athanazio.com/downloads/android/camera_binarization.apk segue alguns exemplos do resultado da binarização]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p><img class="alignnone size-full wp-image-2290" title="image binarization screenshot" src="http://www.athanazio.com/wp-content/uploads/2009/11/image-binarization-screenshot.png" alt="image binarization screenshot" width="480" height="320" /></p>
<p>Olas,</p>
<p>Este eh o meu primeiro experimento de aplicação para o <a href="http://www.android.com/">android</a>, neste programa capturo a camera e gero uma versão binarizada (preto e branco) da imagem da camera usando o <a href="http://en.wikipedia.org/wiki/Otsu%27s_method">algorimo do otsu</a> de binarização de imagens.</p>
<p>segue o link para o download da aplicação: <a href="http://www.athanazio.com/downloads/android/camera_binarization.apk">www.athanazio.com/downloads/android/camera_binarization.apk</a></p>
<p>segue alguns exemplos do resultado da binarização</p>
<p><img class="alignnone size-full wp-image-2281" title="image_1257643961757" src="http://www.athanazio.com/wp-content/uploads/2009/11/image_1257643961757.jpg" alt="image_1257643961757" width="200" height="150" /> <img class="alignnone size-full wp-image-2282" title="image_1257643961757_bin" src="http://www.athanazio.com/wp-content/uploads/2009/11/image_1257643961757_bin.jpg" alt="image_1257643961757_bin" width="200" height="150" /></p>
<p><img class="alignnone size-full wp-image-2283" title="image_1257649452570" src="http://www.athanazio.com/wp-content/uploads/2009/11/image_1257649452570.png" alt="image_1257649452570" width="200" height="150" /> <img class="alignnone size-full wp-image-2284" title="image_1257649452570_bin" src="http://www.athanazio.com/wp-content/uploads/2009/11/image_1257649452570_bin.png" alt="image_1257649452570_bin" width="200" height="150" /></p>
<p><img class="alignnone size-full wp-image-2285" title="image_1257649828412" src="http://www.athanazio.com/wp-content/uploads/2009/11/image_1257649828412.png" alt="image_1257649828412" width="200" height="150" /> <img class="alignnone size-full wp-image-2286" title="image_1257649828412_bin" src="http://www.athanazio.com/wp-content/uploads/2009/11/image_1257649828412_bin.png" alt="image_1257649828412_bin" width="200" height="150" /></p>
<p><img class="alignnone size-full wp-image-2287" title="image_1257711822305" src="http://www.athanazio.com/wp-content/uploads/2009/11/image_1257711822305.png" alt="image_1257711822305" width="200" height="150" /> <img class="alignnone size-full wp-image-2288" title="image_1257711822305_bin" src="http://www.athanazio.com/wp-content/uploads/2009/11/image_1257711822305_bin.png" alt="image_1257711822305_bin" width="200" height="150" /></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/11/16/android-camera-binarization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>game framework para android</title>
		<link>http://www.athanazio.com/2009/11/13/game-framework-para-android/</link>
		<comments>http://www.athanazio.com/2009/11/13/game-framework-para-android/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 17:56:51 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[trecos]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=2270</guid>
		<description><![CDATA[apos uma pequena pesquisa, esbarrei com alguns frameworks para jogos para o android http://code.google.com/p/juicygames/ http://code.google.com/p/cloak/ http://code.google.com/p/rokon/ http://code.google.com/p/mages/ estou explorando para servir de ideias para o framework de jogos que vou criar para o android !!! se preparem]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>apos uma pequena pesquisa, esbarrei com alguns frameworks para jogos para o android</p>
<ul>
<li><a href="http://code.google.com/p/juicygames/">http://code.google.com/p/juicygames/</a></li>
<li><a href="http://code.google.com/p/cloak/">http://code.google.com/p/cloak/</a></li>
<li><a href="http://code.google.com/p/rokon/">http://code.google.com/p/rokon/</a></li>
<li><a href="http://code.google.com/p/mages/">http://code.google.com/p/mages/</a></li>
</ul>
<p>estou explorando para servir de ideias para o framework de jogos que vou criar para o android !!! se preparem <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/11/13/game-framework-para-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sbgames 2009, fast track, Javafx evaluation</title>
		<link>http://www.athanazio.com/2009/10/11/sbgames-2009-fast-track-javafx-evaluation/</link>
		<comments>http://www.athanazio.com/2009/10/11/sbgames-2009-fast-track-javafx-evaluation/#comments</comments>
		<pubDate>Sun, 11 Oct 2009 23:47:45 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[60 seconds]]></category>
		<category><![CDATA[evaluation]]></category>
		<category><![CDATA[fast track]]></category>
		<category><![CDATA[javafx]]></category>
		<category><![CDATA[sbgames 2009]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=2231</guid>
		<description><![CDATA[sbgames 2009 &#8211; fast track &#8211; JavaFX evaluation from Hamilton Lima on Vimeo.]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7015826&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=7015826&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
<p><a href="http://vimeo.com/7015826">sbgames 2009 &#8211; fast track &#8211; JavaFX evaluation</a> from <a href="http://vimeo.com/athanazio">Hamilton Lima</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/10/11/sbgames-2009-fast-track-javafx-evaluation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>palestra LUA workshop 2009 &#8211; Jogos em Lua com LÖVE</title>
		<link>http://www.athanazio.com/2009/10/06/palestra-lua-workshop-2009-jogos-em-lua-com-love/</link>
		<comments>http://www.athanazio.com/2009/10/06/palestra-lua-workshop-2009-jogos-em-lua-com-love/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 01:12:15 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[love2d]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[2009]]></category>
		<category><![CDATA[apresentacao]]></category>
		<category><![CDATA[lua]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[ppt]]></category>
		<category><![CDATA[workshop]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=2223</guid>
		<description><![CDATA[Jogos em Lua com LÖVE.ppt Jogos em Lua com LÖVE.pdf Jogos em Lua com LÖVE &#8211; exemplos palestra a ser ministrada em http://www.lua.org/wshop09.html]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p><a href="http://www.athanazio.com/wp-content/uploads/2009/10/Jogos-em-Lua-com-LÖVE.ppt"><img src="http://www.athanazio.com/wp-content/uploads/2009/10/Jogos-em-Lua-com-LÖVE.jpg" alt="Jogos em Lua com LÖVE" title="Jogos em Lua com LÖVE" width="450" height="340" class="alignnone size-full wp-image-2224" /></a><br />
<a href='http://www.athanazio.com/wp-content/uploads/2009/10/Jogos-em-Lua-com-LÖVE.ppt'>Jogos em Lua com LÖVE.ppt</a><br />
<a href='http://www.athanazio.com/wp-content/uploads/2009/10/Jogos-em-Lua-com-LÖVE.pdf'>Jogos em Lua com LÖVE.pdf</a><br />
<a href='http://www.athanazio.com/wp-content/uploads/2009/10/Jogos-em-Lua-com-LÖVE-samples.zip'>Jogos em Lua com LÖVE &#8211; exemplos</a></p>
<p>palestra a ser ministrada em <a href="http://www.lua.org/wshop09.html">http://www.lua.org/wshop09.html</a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/10/06/palestra-lua-workshop-2009-jogos-em-lua-com-love/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>unity3d passo 6 &#8211; tudo junto num jogo</title>
		<link>http://www.athanazio.com/2009/09/30/unity3d-passo-6-tudo-junto-num-jogo/</link>
		<comments>http://www.athanazio.com/2009/09/30/unity3d-passo-6-tudo-junto-num-jogo/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 02:23:02 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[unity3d]]></category>
		<category><![CDATA[alfa]]></category>
		<category><![CDATA[alpha]]></category>
		<category><![CDATA[drop then all]]></category>
		<category><![CDATA[level restart]]></category>
		<category><![CDATA[scene change]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=2193</guid>
		<description><![CDATA[Esta eh uma versao mais arrumada destas minhas investigacoes do Unity3D. Alguns comentarios sobre o codigo abaixo que eh novinho em folha. Este codigo esta associado ao personagem que esta em movimento, ou seja se o danado colidir com o plano chamado &#8220;bottom&#8221; que esta abaixo das plataformas, ou com algum dos inimigos a variavel [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p><a href="http://www.athanazio.com/wp-content/uploads/2009/09/dropthenall_alpha1.html"><img src="http://www.athanazio.com/wp-content/uploads/2009/09/drop-than-all-alpha1.jpg" alt="drop than all alpha1" title="drop than all alpha1" width="450" height="338" class="alignnone size-full wp-image-2194" /></a><br />
Esta eh uma <a href="http://www.athanazio.com/wp-content/uploads/2009/09/dropthenall_alpha1.html">versao mais arrumada</a> destas minhas investigacoes do Unity3D.</p>
<p>Alguns comentarios sobre o codigo abaixo que eh novinho em folha.</p>
<pre class="brush: jscript; title: ; notranslate">
static var dead:int = 0;

function Awake () {
	dead = 0;
}

function OnCollisionEnter(collision : Collision) {

	if( collision.collider.name == &quot;bottom&quot; || collision.collider.tag == &quot;enemy&quot;){
		dead = 1;
		var message = GameObject.Find(&quot;end of level&quot;);
		var message2 = GameObject.Find(&quot;end of level2&quot;);
		message.guiText.text = &quot;You failed.&quot;;
		message2.guiText.text = &quot;Click to restart&quot;;
		audio.Play();
	}
}

function Update () {

	if( dead == 1 ){
		if (Input.GetButtonDown(&quot;Fire1&quot;)) {
			Application.LoadLevel (Application.loadedLevel);
		}
	}

}
</pre>
<p>Este codigo esta associado ao personagem que esta em movimento, ou seja se o danado colidir com o plano chamado &#8220;bottom&#8221; que esta abaixo das plataformas, ou com algum dos inimigos a variavel dead eh setada para 1, algumas mensagens sao exibidas e o som correspondente toca.</p>
<p>Quando estiver neste estado de &#8220;morto&#8221; (dead==1) o update deste mesmo script vai verificar se o click foi pressionado para ai entao recarregar a cena atual, detalhe que a funcao Awake garante que nao reiniciamos a cena com o personagem morto <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  porque a variavel eh static e portanto o reload da cena nao apaga seu valor.</p>
<p>usei esta variavel em outros pontos do de outros scripts, como por exemplo para impedir que o tiro fosse disparado ou o personagem movimentado se estivesse no estado de morto, veja como foi usado</p>
<pre class="brush: jscript; title: ; notranslate">
var speed:int = 10.0;

function FireRocket () {
	// dont fire if the char is dead
	if (restart_if_char_die.dead == 1) return;
	if( count_enemies.end_level == 1) return;

	var bullet = GameObject.CreatePrimitive(PrimitiveType.Sphere);
	bullet.tag = &quot;bullet&quot;;
	bullet.AddComponent(Rigidbody);

	bullet.transform.position = transform.position;
	bullet.transform.rotation= transform.rotation;
	bullet.transform.localScale= transform.localScale;

    bullet.rigidbody.velocity = transform.forward * speed * -1;
	bullet.rigidbody.mass = 5;
	audio.Play();
}

function Update () {
    if (Input.GetButtonDown(&quot;Fire1&quot;)) {
        FireRocket();
    }
}
</pre>
<p>bom eh isto ae divirta-se jogando as caixinhas do alto, pena que elas nao gritam <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/09/30/unity3d-passo-6-tudo-junto-num-jogo/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>unity3d passo 5 &#8211; quero te falar &#8230;</title>
		<link>http://www.athanazio.com/2009/09/30/unity3d-passo-5-quero-te-falar/</link>
		<comments>http://www.athanazio.com/2009/09/30/unity3d-passo-5-quero-te-falar/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 02:01:09 +0000</pubDate>
		<dc:creator>athanazio</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[unity3d]]></category>
		<category><![CDATA[2d]]></category>
		<category><![CDATA[guitext]]></category>
		<category><![CDATA[texto]]></category>

		<guid isPermaLink="false">http://www.athanazio.com/?p=2185</guid>
		<description><![CDATA[Alem das coisas em 3D que giram explodem e coisa e tal precisamos de textos 2D pendurados em alguns lugares da tela, para isto adicionamos um GUIText, e o legal do GUIText eh o seu posicionamento na tela, que eh bem simples usando somente as coordenadas X e Y (2D pelamordeDEus) no intervalo de 0 [...]]]></description>
			<content:encoded><![CDATA[<div id="HOTWordsTxt" name="HOTWordsTxt"><p>Alem das coisas em 3D que giram explodem e coisa e tal precisamos de textos 2D pendurados em alguns lugares da tela, para isto adicionamos um GUIText, e o legal do GUIText eh o seu posicionamento na tela, que eh bem simples usando somente as coordenadas X e Y (2D pelamordeDEus) no intervalo de 0 a 1.</p>
<p>canto superior esquerdo : X=0 e Y=1<br />
canto superior direito : X=0.9 e Y=1<br />
canto inferior esquerdo : X=0 e Y=0.1<br />
canto inferior direito : X=0.9 e Y=0.1</p>
<p>bons texto pra vc <img src='http://www.athanazio.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.athanazio.com/2009/09/30/unity3d-passo-5-quero-te-falar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

