sábado, 30 de abril de 2011

Time Traveler: Arcade 3D!

Da série: alguém se lembra?


Alguém já jogou este jogo?

Eu nunca joguei, principalmente por que, na época, a máquina só existia no shopping Morumbi em São Paulo.
E as fichas custavam caro...

Mas este é o primeiro arcade 3D que se tem notícia.

Feito pela empresa SEGA, o jogo constituia em um viajante do tempo que tinha a missão de salvar a princesa de um vilão através do tempo.

História básica de bandido e mocinho. :P

O "efeito" 3D era conseguido através de vários espelhos que tinham na máquina.

Uma revolução na época (década de 90)!

Até mais!

sexta-feira, 29 de abril de 2011

Dicas de Programação: Como colocar um DIV em qualquer posição da página?

Fácil! É só usar colocar o valor "absolute" no atributo "position" estilo (CSS) no div e colocar os valores de posição nos atributos "left" (horizontal) e "top" (vertical) do mesmo:
<html>
<head>
<title>CSS</title>
<style>
div#id-do-elemento.minha_classe_css {
background-color: red;
width: 100px;
height: 100px;
position: absolute;
top: 20px;
left: 20px;
}
</style>
</head>
<body>
<div id="id-do-elemento" class="minha_classe_css"></div>
</body>
</html>

Até mais!

quinta-feira, 28 de abril de 2011

Dicas de Programação: Qual é a diferença de . e # no CSS?

A diferença entre o ponto e a cerquilha, é que o ponto (.) representa a classe e a cerquilha (#) representa o id do elemento (tag) na folha de estilo (CSS). Por exemplo, se eu usar o css:

div.elemento1 {
background: red;
}

E eu criar dois divs:

<div id="elemento1">Primeiro</div>
<div class="elemento1">Segundo</div>

O segundo div será vermelho!

Se fosse assim:

div#elemento1 {
background: blue;
}

O primeiro div seria azul!

Espero que isso ajude!

Até mais!

quarta-feira, 27 de abril de 2011

DOSBox: Jogue antigos jogos de DOS

Quando eu comecei minha carreira de programador, eu tinha em casa um Intel 486 DX 2 66MHz com 4 mega de memória!
E o que eu tinha instalado de sistema operacional era o MS-DOS 6.22 com MS-Windows 3.1.

Isso me lembrou de alguns antigos bons jogos que eu tinha no meu HD de 512MB. :)
Pois é, o tempo passou, e aqueles jogos nem rodam mais no MS-Windows novos, nem em Linux e nem em MacOSX...

Mas encontrei um jeito de executar estes. É só usar um emulador chamado DOSBox.

O DOSBox é um emulador de DOS adaptado para executar aplicações gráficas feitas para esse S.O. (ou seja, além de rodar jogos, ele pode rodar o antigo MS-Windows 3.11 :) ).

Para quem tem um CD (como eu) do Ultima VIII: Pagan ou do Wing Commander é uma mão na roda. :P

O link do emulador:
http://www.dosbox.com/

Boa diversão!

terça-feira, 26 de abril de 2011

Dicas de Programação: A instrução fork em C (Linux)

No Linux, a instrução fork cria um novo processo dentro de sua aplicação:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main(int num_args, char** args) {
int pid = fork();
int numero = 10;
if (pid < 0) {
printf("Erro ao criar processo.");
exit(-1);
} else if (pid == 0) {
while (numero > 0) {
sleep(5);
numero--;
printf("Processo 1 - Executando: %d\n", numero);
}
exit(0);
} else if (pid > 0) {
while (numero > 0) {
sleep(3);
numero--;
printf("Processo 2 - Executando: %d\n", numero);
}
exit(0);
}
return 0;
}

Ou seja, isso não é uma thread que é executado em um mesmo processo, e sim, dois processos separados. Se você for no console e ver os processos (comando "ps aux"), verá que aparece duas vezes o nome de seu programa na listagem.

Legal! :)

Até mais!

segunda-feira, 25 de abril de 2011

Como fazer Print Screen em um MacBook?

Eu fiquei com esta dúvida neste fim-de-semana...
Mas fui ao Google e achei a resposta!

Para fazer Print Screen no MacBook, basta apertar as seguintes teclas:

Command (a tela que tem a Maçã) + Shift + 3

Para fazer um Print Screen de um pedaço da tela, as teclas são:

Command (a tela que tem a Maçã) + Shift + 4

Obs.: É bom eu colocar isso no blog, para eu me lembrar. :P

Até mais!

Mario Paint Composer

Depois de um longo feriado, voltei! :P



Alguém já "jogou" Mario Paint para Super Nintendo?

Se sim, vocês se lembram de um joguinho onde dava para criar pequenas "músicas" com os sons dos jogos do Mario?

Pois é, sabia que a partir disso, um pessoal criou uma aplicação para PC chamada "Mario Paint Composer"?

Basicamente, é a mesma idéia do game original, porém possui mais sons (é configurável) e pode-se criar músicas maiores que na versão original (que acho que era de no máximo de 30 segundos...).

Mais informações no site da UnFun Games (criadora desta versão):
http://www.unfungames.com/mariopaint/

quarta-feira, 20 de abril de 2011

Feriado!!!

Pessoal,

Como no Carnaval, eu vou ficar um tempinho sem postar nada... Afinal, um feriado com tantos dias, vai ser díficil de ter novamente este ano.
Um ótimo feriado prolongado a todos e que todos se divirtam (tomara que faça Sol, mas acho que, como todo bom feriado de pobre, deve chover... :P).

Ah... Obrigado por olharem meu blog! Nestes 3 meses, tive mais de 1000 acessos!!! :)

Valeu!

E, como diz o Bial, de vez em quando, dê uma espiadinha... :P

Se eu ganhar alguma coisa com o AdSense do blog (o que eu duvido muito...), eu pago uma rodada de cerveja ao pessoal que comentou no blog :)

Dicas de Programação: Como sobrecarregar construtores em PHP

Teoricamente, não dá para sobrecarregar construtores em PHP...
Mas existe uma artimanha... Por exemplo, eu quero ter dois construtores, um com um parâmetro, outro com dois parâmetros:

<?php
class MinhaClasse {

//Construtor oficial
public function __construct() {
//Obtenho os argumentos passados
$args = func_get_args();
//Obtenho a quantidade de argumentos
$num_args = func_num_args();
//Obtenho o "nome" do construtor
$func = "__construct_$num_args";
//Se o "construtor" existe...
if (method_exists($this, $func)) {
//Executo ele
call_user_func_array(array($this, $func), $args);
//Se ele não existe...
} else {
//Lanço uma exceção.
throw new Exception('Construtor não existe');
}
}

//Nome do construtor com 1 argumento
private function __construct_1($parametro1) {
...
}

//Nome do construtor com 2 argumentos
private function __construct_2($parametro1, $parametro2) {
...
}
}
?>

Assim, quando você passar um parâmetro ao construtor:

MinhaClasse m = new MinhaClasse(1);

O construtor verifica o número de parâmetros e chama a função correta que vai executa-la.

É, para tudo, sempre tem um jeito... :P

Lambendo o iPad - Pegadinha de 1º de Abril [LEGENDADO]



Há! É a pegadinha do Mallandro fazendo sucesso até no exterior.
Será que eu ia cair nessa?
Acho que sim! :P

Até mais!

terça-feira, 19 de abril de 2011

#MortalKombat - Sexy Sonya Blade #Cosplay Trailer HD

Com o lançamento do novo Mortal Kombat para XBox 360 e PS3, nada melhor do que apresentar as garotas deste novo game.

E com vocês a nova Sonya Blade:



E ainda tem gente que diz que só gosta de jogar com o Sub-Zero... Poxa, a Sonya tem vários atributos melhores do que ele. :P

Até mais!

Dicas de Programação: Fazendo Cross Domain em PHP

Quem nunca quis obter informações via AJAX de uma página (ou XML, ou JSON, etc), mas não conseguia por causa do "problema" do cross domain?

Eu já tive este problema...

Mas resolvi ele, através deste método:

1) Abro uma conexão para o site que quero pelo método fopen:
<?php
$url = $_GET['url'];
//ou $url = 'http://feeds.feedburner.com/BlogDoTakemura';
$file = fopen($url,'r');
?>

2) Leio todo o "arquivo":
<?php
$content = '';
while (!feof($file)) {
$content .= fgets($file);
}
?>

3) Fecho a conexão:
<?php
fclose($file);
?>

4) Removo os caracteres especiais "\n", "\r" e outros:
<?php
$content = htmlspecialchars($content);
$content = str_replace("\r", '', $content);
$content = str_replace("\n", '', $content);
?>

5) Agora, eu escrevo o conteúdo em uma variável javascript:
var App = function() {};
App.url = "<?php echo $url;?>";
App.contentText = "<?php echo $content;?>";

6) Salvo o arquivo (por exemplo: "crossdomain.php"), e chamo ele assim em outra página:
<script src="http://<dominio>/<caminho>/crossdomain.php?url=http://feeds.feedburner.com/BlogDoTakemura"></script>

7) Para pegar o conteúdo, basta usar a propriedade contentText do "objeto" App:
<script>
alert(App.contentText);
</script>

Legal, não?

Até mais!

segunda-feira, 18 de abril de 2011

Momento constrangedor [LEGENDADO]



Esse foi de doer!
Depois dessa, se eu fosse o cara, nem ia mais aparecer na emissora! :P

Obs.: A cara dela de satisfação foi o melhor!

Até mais!

Ken vs Chun-Li: No calor da batalha

Agora, falando de Street Fighter II!



É..., é por isso que o Ken sempre se defende da Chun-Li. :P
Quem não entendeu a piada? É melhor não entender mesmo...

Valeu a MVPetri pela tradução! E ao pessoal da Dorkly pela piada!

Thanks for the Dorkly team!

Um bom começo de semana a todo mundo!

domingo, 17 de abril de 2011

SwingWT - SWT em formato Java Swing

Essa API é antiga e acho que não é atualizada a algum tempo...

Mas vamos falar dela (ainda mais que sou antigo e não me atualizo a algum tempo...) :P

Quem é programador Java/AWT e sempre quis criar um aplicativo com a cara do Eclipse IDE (SWT)?

Eu, uma vez, quis! (principalmente por que, antigamente, a interface Java/AWT no Linux era bem feia e o Java/Swing tinha uma cara meia estranha...) :P

Para aqueles que não querem aprender mais uma API (a do SWT é bem diferente que as da AWT e do Swing), uma boa maneira é utilizar a biblioteca SwingWT:
http://swingwt.sourceforge.net/

É basicamente a mesma forma de programar do AWT, mas o visual de seu aplicativo é do Eclipse! :)

Fica a dica :P

Iron Man vs Bruce Lee



Mais uma do monseur Patrick Boivin. A disputa do século:

Homem de Ferro versus Bruce Lee!
A tecnologia versus a tradição!

É..., mesmo com a tecnologia 3D, a gente sempre se surpreende com o tradicional "Stop Motion".

Até mais!

sábado, 16 de abril de 2011

Lembrando do Passado: Streets of Rage - Mega Drive

Lembrei de um jogo que eu tinha há 20 anos atrás, chamado Streets of Rage.
A história se passava em uma cidade onde o sindicato do crime dominava tudo e a todos, inclusive a policia (qualquer semelhança com alguma cidade do Brasil, é mera coincidência :P).
Três policiais, cansados desta situação, vão para as ruas da cidade e decidem acabar com o chefe do sindicato com as próprias mãos! (situação meia absurda, mas vale como desculpa para qualquer video-game :P)

Sei lá, era um bom jogo, deu saudades de jogar... :)

Falando nisso, existe um fan-game deste jogo chamado Streets of Rage Remix:
http://www.bombergames.net/sorr_project/

Parece muito legal, pelos menos, nos videos do Youtube:

Doctrine: Objeto de Persistência em PHP

O Doctrine é uma ferramenta que gera classes (ou seja, é PHP Orientado á Objetos) de persistência para banco de dados.

É tipo o Hibernate do Java.

O legal destes tipos de ferramentas, é que você usa pouco SQL na hora de escrever seu código. Por exemplo, quero encontrar o usuário com o id igual a 1:

$user = $em->find('User', 1);

E quero atualizar o nome dele para Joaquim:

$user->setNome('Joaquim');
$em->persist($user);
$em->flush();

Simples, não?

Para mais informações, entre no site:
http://www.doctrine-project.org/
Ah... Ele usa o PDO do PHP para persistir em banco de dados:
http://php.net/manual/en/book.pdo.php

sexta-feira, 15 de abril de 2011

Liguem seus motores (para fazer jogos!)

Alguns motores de jogos disponiveis gratuitamente para baixar (dicas de alguns amigos):

Allegro (foi a biblioteca utilizada pelo M.U.G.E.N, feita inicialmente para C/C++):
http://alleg.sourceforge.net/


Blender (famosa ferramenta para criar gráficos/objetos 3D):
http://www.blender.org/

Ogre 3D (biblioteca para jogos 3D em C/C++):
http://www.ogre3d.org/

Adventure Game Studio (ferramenta para criar jogos do tipo aventure. Exemplo: Indiana Jones and the Fate of Altantis):
http://www.adventuregamestudio.co.uk/

Horde 3D (biblioteca em C/C++ para gráficos 3D):
http://www.horde3d.org/

RPG Toolkit (ferramenta para fazer jogos de RPG):
http://rpgtoolkit.net/home/

Cocos 2D (biblioteca em Python para jogos 2D, com port para iPhone):
http://cocos2d.org/index.html
Cocos 2D port para iPhone:
http://www.cocos2d-iphone.org/

Trabalhando com Canvas em HTML 5

Vamos começar a trabalhar com HTML 5?
Primeiro, vou falar de canvas! :)

Canvas é uma tag que define uma "área gráfica" no HTML, ou seja, um pedaço do HTML onde é possível desenhar figuras ou imagens "dinamicamente":

<!DOCTYPE HTML>
<html>
<head>
<title>Canvas!</title>
</head>
<body>
<canvas height="500" width="500" id="area_de_desenho">
</canvas>
</body>
</html>

Atualmente, para desenhar no canvas, utiliza-se scripts (principalmente javascript).
Por exemplo, vamos desenhar um circulo:

<script>
//Obtem o canvas
var areaDesenho = document.getElementById("area_de_desenho");
//Contexto 2D (a gente utiliza isso para desenhar...)
var context = areaDesenho.getContext("2d");
//Iniciando o desenho
context.beginPath();
//Definimos a cor do desenho
context.fillStyle = "rgb(100,100,100)";
//Desenhamos o circulo (parametros: posição horizontal, posição vertical, raio, angulo inicial, angulo final, se sentido anti-horário ou não)
context.arc(100, 100, 50, 0, Math.PI * 2, false);
context.fill();
//"Fechando" o desenho
context.closePath();
</script>

Legal, não?
Imagina desenhar várias vezes de tempos em tempos:

<script>
//Obtem o canvas
var areaDesenho = document.getElementById("area_de_desenho");
//Contexto 2D (a gente utiliza isso para desenhar...)
var context = areaDesenho.getContext("2d");
var colors = ["rgb(255,0,0)","rgb(0,255,0)","rgb(0,0,255)","rgb(0,0,0)","rgb(100,100,100)"];
//Desenha circulos randomicos de 0.5 a 0,5 segundos
setInterval(function() {
//Inicia o desenho
context.beginPath();
//Escolhe uma cor
var colorNumber = parseInt(Math.random() * 5);
context.fillStyle = colors[colorNumber];
//Escolhe uma posição
var x = parseInt(Math.random() * 500);
var y = parseInt(Math.random() * 500);
//Desenho o circulo
context.arc(x, y, 50, 0, Math.PI * 2, false);
context.fill();
//Fecha o desenho
context.closePath();
}, 500);
</script>

Mais legal ainda! :)

Quer saber mais? Veja no site oficial do W3C:
http://dev.w3.org/html5/2dcontext/

quinta-feira, 14 de abril de 2011

Crie seu jogo de luta através do M.U.G.E.N.


Para quem não sabe, o M.U.G.E.N é uma engine de "desenvolvimento" para jogos de luta.

Com ele é possivel criar, com uma certa facilidade, jogos completos do tipo "Street Fighter".

O "desenvolvedor" precisa pensar em criar apenas as imagens (background, lutadores, etc) e os frames do jogo, de resto, a maioria das coisas já vem pronta. :)

A engine é livre, se você não for usar seu "jogo" para fins comerciais.

Mais informações no site da Elecbyte:
http://www.elecbyte.com/

Dicas de Programação: Qual é a diferença de objetos com e sem ponteiros no C++?

Vamos as diferenças:

1) Para acessar um método/propriedade de um objeto com ponteiro, utiliza-se a seguinte instrução:

Classe* objeto = new Classe();
objeto->metodo();
delete objeto;

Para acessar o método, sem ponteiro:

Classe objeto;
objeto.metodo();

2) É preciso desalocar memória para objetos com ponteiro:

Classe* objeto = new Classe();
delete objeto;

Coisa que não é preciso em objetos sem ponteiro!

3) Não é preciso instânciar um objeto se não usar ponteiro:

Classe objeto;
objeto.metodo();

Coisa que devo fazer em ponteiro:
Classe* objeto = new Classe();
objeto->metodo();

Sei lá, deve haver mais diferenças, mas nem sei :P

Até mais!

quarta-feira, 13 de abril de 2011

Bible Fight

Já vi algumas jogos estranhos, mas este, talvez, seja o mais estranho pelo tipo e pelo tema...

O Bible Fight é um jogo de luta que possui personagens biblicos como jogadores. (!?!)
O jogo foi feito em Flash e possui gráficos até razoáveis.

Quem quiser jogar, existe uma versão online em:
http://games.adultswim.com/bible-fight-action-online-game.html


Sei lá, acho que jogo de luta e religião são coisas que realmente não combinam! (ver Eva batendo em Moises é bizarro demais...) :P

JMonkeyEngine - API 3D para Java


JMonkeyEngine é um framework de desenvolvimento de jogos 3D para Java.
Ela utiliza como base o OpenGL e possui versões em MS-Windows, GNU-Linux e MacOSX.

Possui uma ferramenta baseada no NetBeans chamada jMonkeyPlatform, onde você pode modelar objetos gráficos 3D, criar cenas e aplicar texturas.

O site oficial possui uma variedade de demonstrações em vídeo:
http://jmonkeyengine.com/

E existe um fórum também:
http://jmonkeyengine.org/

terça-feira, 12 de abril de 2011

Brinquedos antigos: Pistola Zillion

Vamos relembrar do passado?

No fim dos anos 80 e começo dos 90, a Tec Toy estava começando no mercado brasileiro, lançando o famoso video-game Master System da Sega...
Mas, além do video-game, ela lançou outros tipos de brinquedos. Um destes brinquedos, foi a Pistola Zillion.


A Pistola Zillion era um brinquedo que tinha dois componentes: a arma propriamente dita e um "cinto" que captava o disparo e pontuava, caso o tiro fosse certeiro.

Era um tipo de paintball, só que sem balas e que não sujava ninguém...
O brinquedo não era nada barato, mas a gente sempre achava alguém quem tinha. :P

Bons tempos...

Ah... Para quem não sabe, o brinquedo foi baseado em um anime de mesmo nome:


E sim, ela é parecida com a pistola do Master System (isso por que, a produtora da série de anime e do brinquedo, foi a própria Sega). :P

segunda-feira, 11 de abril de 2011

Google Code Jam: Inscrições Abertas

Começou o Google Code Jam!

Ah... Não sabe o que é isso?

Então, vou explicar! :)

O Google Code Jam é uma competição entre os desenvolvedores que tem como objetivo, resolver desafios propostos pelo pessoal do Google. Os melhores desenvolvedores ganham camisetas, podem ir para Tóquio, no Japão, e o grande vencedor pode ganhar até US$ 10000. (opa, dinheiro é sempre bom! :P)

Quem quiser participar ou ter mais informações, entre no site da Google:
http://code.google.com/codejam/

Aos que participarem, boa sorte!

Obs.: Se algum de vocês utilizarem alguma dica deste blog (o que eu duvido muito...) e ganhar alguma coisa, eu fico feliz se o ganhador puder doar 10% do prêmio. :P

Até mais!

Dicas de Programação: Como exibir uma imagem em uma janela em Java?

Para exibir uma imagem de fundo em uma janela, basta reescrever o método paint do Componente. Por exemplo:

import java.awt.*;
import java.awt.event.*;

//Janela principal
public class ImageFrame extends Frame {

//Imagem de fundo
private Image background;

//Construtor
public ImageFrame() {
//Carrega a imagem de fundo
background = Toolkit.getDefaultToolkit().getImage("c:\\images\\image.jpg");
//Tamanho da janela
setSize(400,300);
//Titulo da janela
setTitle("Image");
//Evento para finalizar o programa, caso o usuario feche a janela
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}

//Desenha a imagem no fundo da tela
@Override
public void paint(Graphics g) {
g.drawImage(background, 0, 0, getWidth(), getHeight(), this);
}

//Inicio do programa
public static void main(String... args) {
ImageFrame frm = new ImageFrame();
frm.setVisible(true);
}

}

Além de janelas, você pode colocar a imagem em qualquer componente gráfico, desde que você reescreva o método paint deste componente.

Espero que isso ajude...

Até mais!

Dicas de Programação: Diferenças de new/delete e malloc/free em C++

Geralmente, muita gente não sabe se deve usar malloc ou new em C++...
Eu também não sei direito... :P

Mas pelo que entendi, a instrução new é usada em C++ e a função malloc em C, ou seja, a função malloc é usada quando seu código não utiliza objetos.

Uma coisa é importante: se você utilizar a instrução new, para desalocar, o melhor é utilizar a instrução delete.
Se for a função malloc, utilize sempre a função free para liberar memória.

Ponteiro, instância, objeto... Eita, C++ é muito louco! :P

domingo, 10 de abril de 2011

O que é pior: O Funk do MK ou o Axé do SF2?

Da série: "Como as pessoas pensam nisso?!?"

Qual dos dois é o melhor (ou o menos pior :P)?

O Funk do Mortal Kombat:


Ou o Axé do Street Fighter II:


Alekifu?

Meus Deus... É..., 2012 esta chegando... :P

Até mais!

Dicas de Programação: Como lançar exceções em C++

Para lançar exceções em C++ é fácil, basta usar a palavra throw:

#include <iostream>

class MinhaClasse {
public:
void lancaExcecao();
};

void MinhaClasse::lancaExcecao() {
throw -1;
}

int main(int num_args, char* args[]) {
std::cout << "Inicio da instrucao" << std::endl;
MinhaClasse* meu_objeto = NULL;
try {
meu_objeto = new MinhaClasse();
meu_objeto->lancaExcecao();
} catch(int num_err) {
std::cerr << "Erro numero: " << num_err << std::endl;
}
if (meu_objeto != NULL) {
delete meu_objeto;
}
std::cout << "Fim da instrucao" << std::endl;
return 0;
}

Até mais!

Enrola e Desenrola

Lembrando de minha infância (de novo), outros livros que eu gostava de ler (a frase é meia redundante, geralmente, se eu gosto de um livro, então eu li -- apesar que tem gente que usa livros para outras coisas...) eram da série "Enrola e Desenrola" da Editora Ediouro (a mesma que publica palavras-cruzadas no Brasil).


Por que eu gostava?

Porque eu podia escolher o que fazer durante a história (ou seja, eu era o "herói" da aventura!).

O livro-aventura (é como se chama este tipo de livro) não possue uma leitura linear como os outros livros, ao final de cada página, você terá opções (ou não, dependendo do caso...) que indicam qual será sua ação e qual página você deve ler.

Não entendeu? Vou dar um exemplo:

"1) De repente, aparece em sua frente, um monstro que aparenta ser um lobisomem. Você, um mago, decide:
Atacar com a magia Luz - vá para a 4.
Atacar com um pedaço de pau - vá para a 2.
Conversar com ele - vá para a 3.

2) O lobisomem nem sente que você deu uma paulada (sem viadagem, pessoal...), e ataca com fúria total... Pelo visto, ele vai ficar satisfeito com carne fresca por um bom tempo...

3) O lobisomem não compreende o que você esta dizendo (afinal, lobisomens nem falam....) e ataca você... Parece que conversar não é muito a dele...

4) A magia Luz irradia a gruta, assustando o lobisomem, que foge desesperado, liberando o caminho para o castelo..."

Está péssimo (não sou um grande escritor...), mas espero que dê uma "luz" do que seja um livro-aventura.

Se você gostou, esta série de livros não é mais publicada... Mas existem outras opções, como a série "Fighting Fantasy" (ou "Livros Jogos") da Jambo Editora:
http://www.jamboeditora.com.br/produtos/ff.htm

Uma boa leitura!

Até mais!

O Homem que Calculava

Estou relembrando fatos da minha infância. :P
Na 3a. série do 1o. grau, me lembrei que a professora coloca a disposição livros, para a gente pegar, ler e devolver no mês seguinte.


Um dos primeiros livros que peguei era "O Homem que Calculava" de Malba Tahan.

Eu vou ser sincero: nunca gostei muito de ler (qualquer coisa que tenha mais de 10 páginas me dá muito sono...). :P

Mas este livro foi uma exceção, pois falava de um assunto que eu gostava e gosto até hoje: Matemática.

O livro conta a história de um viajante (que se supõe que seja o Malba Tahan, pois o livro é narrado em primeira pessoa...) que encontra um matemático e, a partir daí, viajam juntos e tem várias aventuras (com o tempo, o narrador denomina o matemático como "O Homem que Calculava").

O mais legal é que as "aventuras" deles se referem a problemas matemáticos, como este:

"Há 21 jarros que serão compartilhados por igual a 3 pessoas. O problema, é que os jarros estão divididos assim:
- 7 jarros cheios de vinho
- 7 jarros vazios
- 7 jarros com metade de vinho
Como fazer a divisão, sendo que cada pessoa tenha a mesma quantidade de vinho e a mesma quantidade de jarros?"

Se alguém se interessou, leia o livro, apesar de parecer um pouco "infantil", é uma leitura agradável.

Hã? Qual é a resposta do problema? Então..., vou ser meio chato: ou você calcula, ou
você lê o livro! :P

Obs.: Malba Tahan não existe, o autor do livro se chama Júlio César de Melo e Sousa que nasceu em 1895 e morreu em 1974.

Para os que gostaram: Boa leitura!

Até mais!

sexta-feira, 8 de abril de 2011

Vamos para o mundo de Lua?

Além de ser o satélite natural do planeta Terra, a Lua é uma linguagem de programação simples, livre e de fácil aprendizado feita pelo pessoal do UFRJ (Universidade Federal do Rio de Janeiro) da PUC-Rio.

O legal, para os gamers/desenvolvedores de plantão, é que ela é muito utilizada para fazer jogos. Veja os exemplos:

Psychonauts – Double Fine

Baldur's Gate – Bioware

Quer mais informações? Entre no site: http://www.lua.org/portugues.html

Existe um interpretador online no próprio site, para aprendizado:
http://www.lua.org/demo.html

E existe um interpretador para Lua em PSP (ou seja, dá para rodar scripts de Lua no próprio video-game!):
http://en.wikipedia.org/wiki/Lua_Player

E para os apaixonados por mobile, existe uma versão de Lua para iPhone e Android chamado Corona (não, não estou falando das duchas...):
http://www.anscamobile.com/

Até mais!

Ferramentas de Teste: Wiki + Fit = Fitnesse

Fit é uma ferramenta para testes, onde o "tester" pode criar seu plano de testes unitários, colocando entradas e verificando seus resultados, através de um simples HTML.
Quer saber mais sobre esta ferramenta? Veja o link abaixo:
http://fit.c2.com/wiki.cgi?IntroductionToFit

Um dos "defeitos" da ferramenta acima, é a edição do html para inclusão do teste unitário (que, algumas vezes, dá um certo trabalho...).
Para resolver este problema, criou-se o Fitnesse. :)
O Fitnesse tem base no Fit, mas adiciona a ferramenta de Wiki nele, ou seja, a edição da página ocorre na mesma ferramenta que executa o teste!

Agora, parece que a nova versão do Fitnesse inclui uma ferramenta chamada SLIM.

Para mais informações, no site:
http://fitnesse.org/

quinta-feira, 7 de abril de 2011

Java vs Ruby on Rails (by Rails Envy) [legendado]



O pessoal do Java vai me matar...
Mas tenho que dar o braço a torcer ao pessoal do Ruby on Rails! :P
Putz... Quando ele fala de vários frameworks para desenvolvimento J2EE e tantos arquivos de configuração, me lembrei de alguns projetos...
Mas Java ainda é uma grande linguagem! (principalmente por que é a linguagem "oficial" do Android) :P

Até mais!

Licença aberta em jogos?

Sabia que você pode criar jogos de RPG com base numa "documentação livre" com regras e histórias, podendo distribui-las gratuitamente ou vende-las?

Basta usar o guia de referência que o sistema D20 utiliza, que esta sobre a licença OGL (em inglês):
http://www.wizards.com/default.asp?x=d20/article/srd35

Abaixo, o link da licença OGL:
http://www.opengamingfoundation.org/ogl.html

quarta-feira, 6 de abril de 2011

Gerenciador de Boot no Mac Intel

Além do BootCamp para MacOSX, existe uma outra ferramenta de boot, que é livre e de graça, chamado rEFIt.


Dá para instalar além do MacOSX, o MS-Windows e o Linux!

Para mais informações, entre o site:
http://refit.sourceforge.net/

Obs.: O disco deve estar particionado para que possa instalar os outros sistemas operacionais.

Até mais!

Propaganda do Linux - IBM(leg. Português)



Comercial da IBM sobre o Linux.

Tem uma frase traduzida que me fez pensar:
"Um jogador que torna seu time excelente é mais valioso do que um excelente jogador"

Será que nos tempos de hoje, é mais importante você fazer a diferença ou seu time ser a diferença?

Hum... sei lá. :P

Coisas para se pensar! :)

terça-feira, 5 de abril de 2011

Dicas de Programação: Trabalhando com RegEx

Para quem não sabe, expressão regular é uma "ferramenta" que facilita o desenvolvimento de validações e/ou para manipulação de uma string.

Por exemplo, se eu quero validar se uma string possui somente número, posso usar a seguinte expressão regular:

[0-9]* ou \d*

Em Javascript, seria a seguinte codificação:

<script>
var valor = "12345";
if (valor.match(/\d*/) == valor) {
alert("Valor numérico");
}
</script>

Se eu quiser tirar todos os espaços em branco (a expressão para espaço em branco é \s) de uma string em Javascript, ficaria assim:

<script>
valor = "Tem espaços em branco";
valor = valor.replace(/\s/g, "");
alert(valor);
</script>

Interessado? Para obter mais informações, vá na Wikipédia.

Até mais!

segunda-feira, 4 de abril de 2011

Arduino: Placa controladora open source?


É isso mesmo!

Arduino é uma placa controladora com arquitetura aberta!
Para quem gosta de eletrônica e computação, é uma boa pedida. A maioria das placas possuem porta serial e/ou USB para entrada/saída de "dados".

Já pensou, colocar um led ou um speaker que acende ou toca a cada vez que o site tiver 1 milhão de visitas por mês! :P

Mais informações, entre no site oficial:
http://www.arduino.cc/

Lady Java



Ela está sendo a cantora POP mais falada e citada na Internet!
Ela é um dos ídolos mais famosos de cada 10 de 10 nerds!
Ano passado, ela foi a mais comentada e criticada das personalidades!
As más linguas dizem que ela é louca, e que programa mais de 1000 linhas de código por dia!
Bill e ela tiveram um affair, mas brigavam muito!
Ela é... Lady Java!
Veja o clip, goste e baixe suas músicas (ou compre seu CD). :)

Segunda é dia de besteira mesmo... :P

Até mais!

Java - O filme (Legendado - PT-BR)



Depois de Rede Social, mais uma grande obra cinematográfica (está correto?) sobre esta louca área de informática: "Java - The movie".
Indicado ao melhor Oscar de filme estranho (ops, estrangeiro... :P).
Veja o trailer, sinta a trágica história, e chegue as suas próprias conclusões. :)

Obs.: Se alguém acreditar nisso..., deve ser nerd mesmo! :P

Até mais!

domingo, 3 de abril de 2011

Apareça!

Muita gente me pergunta:

"Como eu faço para subir na carreira? Me destacar? Ganhar algum prêmio?"

Sei lá..., acho que não sou a pessoa certa para eles me perguntarem isso... Claro, tenho já uma década de experiência neste ramo, mas eu nunca fui muito ambicioso...
Em todo caso, eu sempre respondo:

"Apareça!"

Algumas pessoas acham a resposta ruim, entendem que devem "puxar-o-saco" e se mostrar mais do que as outras pessoas (algumas vezes, humilhando o trabalho dos outros na equipe), em síntese, que precisa ser o "bonzão".

Claro que algumas vezes, em algumas empresas, isso funciona (por isso, vale a dica :P).

Mas elas tem razão de achar isso ruim (por que isso é ruim!).

Quando trabalhamos em uma mesma empresa e, principalmente, em uma mesma equipe, devemos respeitar a individualidade e o trabalho de cada um, seja o cara tímido, seja que ele tenha dificuldades de aprendizado, cada um é cada um.
Mostrar estes "defeitos" para seu superior, só para se dar bem, demonstra somente que você possue um caráter duvidoso (além de deixar o clima péssimo na equipe). :(

Mas se não é assim que devo aparecer, como eu devo agir?

Para "aparecer" de uma outra maneira (a maneira "certa", eu espero... :P), você pode:
- Ajudar as pessoas com dificuldades pois, afinal, ninguém nasceu sabendo (nem você!).
- Dar opinião naquilo que você sabe mais (isso é um problema para as pessoas que acham que sabem tudo... portanto, tome muito cuidado...).
- Ouvir os outros e respeitar as opiniões alheias.
- Perguntar quando tiver uma dúvida (afinal, ninguém nasceu sabendo (again) :P).
- Demonstrar interesse em assuntos que lhe agradam (tipo: eventos esportivos, novas tecnologias, etc.).
- E ser você mesmo! (não finja! :))

Talvez demore mais do que o outro tipo de "aparecer" (como eu disse, a "dica" vale para as duas formas...) mas para mim, este é, com certeza, o melhor jeito de demonstrar competência.

Obs.: Peço desculpas, acho que fiquei um pouco convencido. :P

Até mais!

Nada se cria, tudo se copia: SuperTux

Da série, "Nada se cria, tudo se <CRTL+C><CRTL+V>" :P


Existe um jogo extremamente parecido com o Super Mário, chamado SuperTux. O jogo é do tipo plataforma e tem como personagem principal o famoso Tux, o mascote do GNU-Linux.

Até aí tudo bem... mas se vocês perceberem no novo Super Mário do Wii, o Mário pode vestir uma roupa de pinguim!!!


E não que o Mário não fica parecido com o Tux? :P

Será que foi coincidência???

Coincidência ou não, abaixo o site para download do jogo SuperTux:
http://supertux.lethargik.org/

Até mais!

sábado, 2 de abril de 2011

Dicas de Programação: O que é classe Anônima em Java?

Esta vai para uma pessoa que estava com esta dúvida:

Classe anônima é uma classe que não é declarada explicitamente no código.

Hã???

Acho que um exemplo encaixa bem aqui. :P

Por exemplo, se eu fosse listar meus funcionários em ordem alfabética, eu faria primeiro uma classe que implementa de Comparator:

import java.util.*;

public class ComparaFuncionario implements Comparator<Funcionario> {
public int compare(Funcionario f1, Funcionario f2) {
return f1.getNome().compareTo(f2.getNome());
}
}

E depois usaria a instância da classe no método sort do Collections:

List<Funcionario> listaDeFuncionarios = new ArrayList<Funcionario>();
...
java.util.Collections.sort(listaDeFuncionarios,new ComparaFuncionario());
...
System.out.println(listaDeFuncionarios);

Legal, isso funciona... mas dá trabalho fazer uma classe só para ordenar...
Então, é isso que uma classe anônima ajuda! Em vez de eu declarar explicitamente a classe, eu faço assim:

java.util.Collections.sort(listaDeFuncionarios,new Comparator<Funcionario>() {
public int compare(Funcionario f1, Funcionario f2) {
return f1.getNome().compareTo(f2.getNome());
}
});

Como vocês sabem, não dá para instanciar uma interface, portanto a instrução new Comparator() seria inválida... Mas conseguimos fazer isso, por que a gente implementa o método da interface depois da instanciação, essas instruções juntas é o que define-se de classe Anônima.

Fala a verdade, Java é complicado mesmo... :P

Dicas de Programação: Como lançar e obter os eventos de uma página via Javascript?

Essa foi uma dica que me foi pedida. :)

Para lançar eventos em javascript, você pode usar a função com o nome do evento. Por exemplo, quero lançar o evento de click no botão com id igual a "button":

document.getElementById("button").click();

Se for o evento focus:

document.getElementById("button").focus();

Se for o evento blur (tirar o focus):

document.getElementById("button").blur();

E assim por diante (eventos de teclado e mouse, eu acho que não dá para disparar, mas não tenho certeza...).

Se for para executar uma função durante um evento, basta redefinir a função "on" + <nome do evento>. Por exemplo, o click do botão com id igual a "button":

document.getElementById("button").onclick = function(e) {
alert("Clicou no botão!");
}

Se for no evento focus, a mesma coisa:

document.getElementById("button").onfocus = function(e) {
alert("Focus no botão!");
}

E daí por diante (isso vale para eventos de teclado e mouse, como onkeypress e onmousemove).

Espero que isso ajude esta pessoa (caso não for isso, me desculpe...).

Até mais!

sexta-feira, 1 de abril de 2011

Neo-Geo: O sonho de todo gamer nos anos 90

Acho que vou relembrar o passado (de novo...).


Quando eu tinha meus 13/15 anos, meu sonho (e o sonho de muito gamemaníaco -- é como chamavam os gamers da minha época...) era tem um Neo-Geo em casa.
O console custava, na época do seu apogeu, US$500,00 (o Super NES e o Genesis/Mega Drive eram em torno de US$150,00)!!!
Basicamente, seu repertório consistia em jogos de luta (que era um hit -- ainda se diz assim? -- naquela década), como:


Fatal Fury


Samurai Shodown


e o mais famoso: The King of Fighters 95

Claro, também existiam games de plataforma como:


Magician Lord


e o jogaço Metal Slug

Só tive uma única oportunidade de jogar no console do Neo-Geo em uma locadora de games -- antigamente, existiam lojas que alugavam e nelas tinha cabines para jogar... -- foi um sonho que durou 1 hora e custou R$1,00 (valeu cada centavo!).

Depois, só joguei estas coisas no fliper (a locadora tinha falido :P).

Sei lá, estou meio saudosista ultimamente... Deve ser a velhice chegando...

Ultra Combos #2 (Femme Fatales) - Thousand Pounds



Outra da Thousand Pounds Action Company:
Agora eles fizeram Ultra-Combos no modelo de Street Fighter IV!
O episódio acima é só garotas "lutadoras" (nada contra os marmanjos mas, com certeza, não tenho nada a favor). :P
Sei lá, depois de um mês falando de código, achei melhor mudar o assunto!

Até mais!