sexta-feira, 21 de dezembro de 2012

[Programação] [Web] Segurança em PHP

Olá pessoal, resolvi escrever esse big post para abordar brevemente sobre segurança de dados e informações em arquivos php. Muitos programadores não se atentam aos detalhes de segurança, principalmente por php ser uma linguagem web, muito fácil e objetiva. Lembre-se não se limite só ao que conhece. Vamos falar sobre vários aspectos inseguros existentes e como eles podem ser revolvidos facilmente ( rimou? hahaha ).

CROSS SITE SCRIPT
Se dados são importantes, lembre-se não os passe por métodos GET. Por exemplo, no caso de envio do link style.html pela url http://example.com/index.php?link=style.html o usuário poderia facilmente manipular a página a ser aberta. Quando existe a necessidade de enviar informações por GET que sejam necessárias em um formulário, como por exemplo, a string $nome, verifique abaixo:

$nome = mysql_escape_string($_GET["nome"]);

A função mysql_escape_string serve tanto para GET quando para POST e retorna uma string validada, não permitindo uma SQL Injection, por exemplo.

TRATAMENTO DE DADOS
Sempre que possível, trate seus dados com base em seu formato, por exemplo, para dados inteiros, converta-os utilizando métodos em php, veja abaixo:

$codigo = int($_POST["id"]);

Independente do dado recebido, será convertido para inteiro. Como entrada "string12teste" será retornado somente "12".

SQL INJECTION
Nunca passe informações direto do formulário sem validá-las. Caso contrário expressões de SQL poderão ser passadas pelos formulários para manipular sua SQL já montada. Use tratamentos descritos acima.


HTML INJECTION 
Sim, existe e muitos ignoram. Mas a prevenção contra HTML Injection permite que as páginas se mantenham como são sem alterar sua forma. Para isso sempre que não desejar mostrar e manipular a html para o usuário utilize a função strip_tags().


TIPO DE DADO
Sempre verifique ou dê um tipo ao seu dado em variável. Em php variáveis são dinâmicas, podem assumir qualquer forma ou valor por isso armazenamento e verificação do seu tipo é importante. Por exemplo, a variável $codigo recebe valor 1, entretanto podemos definir o tipo desse valor 1, abaixo exemplos:


$codigo = $_GET["id"];
$codigo = $_POST["id"];
$codigo = $_SESSION["id"];
$codigo = $_COOKIE["id"];

Assim o $codigo não poderá ser recebido diretamente como 1. Evitando erros comuns ou propositais de usuários.

SEMPRE VALIDE DADOS SEGUROS POR TIPO
Em uma página onde a variável $autenticar retorna um valor booleano, ela pode ser manipulada caso não possua um tipo. Observe:

Sem declaração de tipo.


if ($autenticar) {
     echo “Usuário autenticado, prosseguir...”;
} else {
     echo “O usuário não está autenticado!”;
}

O usuário poderia fazer uma injeção na URL ?autenticar=true e manipular a entrada como se o usuário tivesse realizado login. Interessante ressaltar que sites como Apostilando.com possuem esse erro, sendo possível fazer download das apostilas manipulando a URL sem fazer login.

Para concertar esse erro, poderia ser declarado um tipo para variável.
if ($_SESSION["autenticar"]) {
      echo “Usuário autenticado, prosseguir...”;
} else {
     echo “O usuário não está autenticado!”;
}

Agora $_SESSION["autenticar"] nunca seria confundido com uma variável $autenticar que pode ser recebida como injeção $_GET.

ERRO COM INCLUDE
Muito cuidado ao utilizar o include, mesmo que a página incluída são seja encontrada, a página atual continua em execução, veremos a seguir.

Inclui uma autenticação, e verifica se obteve ou não sucesso.
include_once “login.php”;

if (!isLoggedIn()) {
     die(“Problemas de autenticação!”);
} else {
     echo “Informações sigilosas do usuário”;
}

No código acima, se a página login não fosse encontrada, continuaria a execução e o php mostraria erro na página exibindo informações importante como o nome da função isLoggedIn(). Para resolver esse problema, basta utilizar require_once ao invés de include_once, pois assim, a página só será executada se a requerida for encontrada.


NÃO EXIBA OS ERROS
Informações importantes podem ser exibidas em erros de MySQL. Evite que a mensagem não seja exibida, e grave-as em um arquivo log. Esse processo pode ser feito alterando as seguintes informações nas configurações do php:


display_errors: 0
log_errors: 1
error_log: /caminho/para/arquivo.log

SEMPRE VALIDE PÁGINAS RESTRITAS
Páginas restritas como de acesso/login/funções, necessitam de validação para não serem acessadas diretamente. Páginas de acesso restrito podem ser validadas com a SESSION aberta, páginas com informações restritas diretamente podem ser validadas com a URL.


RESTRIÇÃO HTML
Em formulários com campo textbox, necessitam ser validados, para que não contenham links, códigos html, ou scripts maliciosos para serem executados. Para isso utilize a função htmlspecialchars() ela irá tratar o código recebido para string texto.

ARQUIVOS VIA UPLOAD
É muito importante verificar o tipo a ser salvo, para que não sejam enviados arquivos proibidos ou potencialmente perigosos para o servidor de dados. Por isso sempre verifique o mime-type do arquivo.

LISTAGENS DE ARQUIVOS E PASTAS
Desabilite a possibilidade de indexes no arquivo .htaccess, isso evita que todos arquivos sejam exibidos. Caso seja preciso listar arquivos ou pastas específicos crie um função php para isso. Para desabilitar indexes, escreva:

Options -Indexes

PREVENÇÃO CONTRA HTML/JAVASCRIPT
Atualmente é comum em navegadores mais modernos a capacidade de alterar o corpo html da página, com isso, funções javascript de validação ou ainda limite de caracteres podem ser desabilitadas facilmente. Para resolver esse problema SEMPRE valide a string no php. Abaixo um exemplo:

Input que recebe o nome com máximo 10 caracteres.
<input type="text" name="nome" id="nome" maxlength="10" />

Se o usuário desabilitar no código o maxlength, haverá problemas, e ocorrerá erros, isso pode ser validado novamente em php, observe:

// Recebe o nome
$nome = mysql_escape_string($_POST["nome"]);

// Valida o nome


if (strlen($nome) > 10)
{ die("Erro na string!"); }

Cuidado com campos tipo hidden, encripte sempre que possível.


PREVENÇÃO EM JAVASCRIPT
Mesmo que o script possa ser manipulado e seja necessária a validação em php como visto anteriomente. Sempre faça scripts em javascript que valide informações na própria página, para evitar que o usuário fique enviando informações e voltando caso ocorra erros.

PREVENÇÃO EM SENHAS
Utilize sempre processos de criptografia de dados ao ler/armazenar senhas em banco de dados.

Bom pessoal, é isso! Aqui nessa postagem alguns dos vários métodos existem, espero que tenham gostado, e aproveitem o máximo do conteúdo aqui descrito, e lembre-se não se limite só ao que conhece ( acho que eu já disse isso LOL )

quarta-feira, 19 de dezembro de 2012

[Programação] Métodos de Classificação - Insertion Sort


Olá pessoal, para compensar dias sem postar hoje iremos abordar sobre os principais métodos de classificação existentes para algoritmos esses métodos tornarão possível classificar objetos salvos na memória, sendo desde arrays até listas mais complexas. O objetivo desses métodos é facilitar a localização entre esses dados não havendo necessidades de montá-los novamente na memória, gastando assim menos armazenamento na memória ao executar diversas tarefas de trabalho com os dados.

O principio dos métodos se baseia na existência de um conjunto de dados e a partir de um valor enviado pelo usuário, utilizados os métodos nesse conjunto de dados, acessando a informação se ela existir. Existem vários métodos de classificação. Vamos abortar o principio e a execução de cada um. Para esse post começaremos com Insertion Sort

Insertion Sort - O método Insertion Sort percorre todo o vetor recebido da esquerda para direita, e à medida que avança deixa os elementos mais a esquerda ordenados. Veremos abaixo o código em funcionamento:

// Função de Insertion Sort que recebe o conjunto de dados
// Em nosso exemplo recebemos um vetor de inteiros
public int[] InsertionSort (int[] vetor)
{
     int j;
     int temp;


     for (int i = 1; i < vetor.Count; i++)
     {
          j = i;

          // Enquanto o J for maior que zero, e o valor anterior for menor que o valor atual
          while ((j > 0) && (vetor[j - 1] > vetor[j]))
          {
               // Será realizada a troca do anterior com o atual
               // Define o temporário como o valor atual
               temp = vetor[j];
               // Define o valor atual como o valor anterior
               vetor[j] = vetor[j - 1];
               // Define o valor anterior como o valor temporário
               vetor[j - 1] = temp;
               j--;
          }
     }

     return vetor;
}

 

domingo, 25 de novembro de 2012

[Projeto] REFg

Olá pessoal,

Um bom tempo sem entrar aqui! Estou envolvido em uns projetos, ai acabo que esqueço e não tenho tempo de postar informações aqui... Entretanto aguarde pois começarei a postar muito mais!

Nesse post estou aqui para falar de um projeto que desenvolvi e que já está online. E foi batizado de REFg! Ele basicamente é um Gerador de Referências produzido por mim, e através dele é possivel desenvolver referências e citações obdecendo as normas existentes da ABNT, de uma maneira mais rápida e objetiva. Fiz esse sistema pensando em estudantes do ensino superior, entretanto atende vários públicos onde se usam referências bibliográficas.

O REFg iniciou-se bem simples e você como usuário beta pode auxiliar na inclusão ou modificações de todos itens que estão contidos lá através do link "Avaliação" do site; ou então enviar um e-mail para 8itoporcento@gmail.com.

Para quem desejar ver, e usar o sistema, abaixo o link provisório:
http://refg.net46.net/

sábado, 22 de setembro de 2012

[Variedades] Galeria de Desenhos

Olá pessoal, estou aqui postando alguns desenhos que desenvolvi. Esses desenhos são os esboços desenvolvidos inicialmente a lápis, e logo após, a caneta para finalizar o desenho. (:


Clark Kent e Lois Lane


Casais I


Casais II


Hora de Aventura


Coyote e Papáleguas


Cartoon I


Baby Panda


Pernalonga


Apenas um Show


Scooby-Doo


Batman


Superman

segunda-feira, 3 de setembro de 2012

[Tutoriais] [Illustrator] Princípios de Vetorização

Vetor, em ilustração, é o processo de desenhar um desenho que pode ser redimensionado e manipulado em alta resolução. Neste tutorial, vamos ver um pouco sobre esse processo de ilustração, muito útil para quem deseja trabalhar com imagens que foram feitas à mão. Inicialmente, vamos começar com um desenho, o desenho abaixo fiz à mão e escaneei para o computador, ele será a base do nosso projeto.


Agora iremos utilizar o programa Illustrator, abra a figura acima com o Illustrator. Com a figura aberta, dê dois cliques na camada Layer 1, e renomeie ela para BackGround, já que será o fundo base do nosso desenho.


Agora crie uma nova Layer, e renomeie para Cabeça_Interior onde vamos desenhar os rostos dos personagens. Nessa camada vamos começar a desenhar os olhos do Finn, para isso, crie duas ellipses sobre os olhos dele na cor preta. DICA: Para que uma ellipses fique totalmente arrendada segure a tecla Shift enquanto cria ela. Como podemos observar abaixo.



Agora vamos criar a boca completa, inicialmente selecione a ferramenta Pen, e começa a desenhar sobre o desenho. Essa ferramenta funciona da seguinte forma, você clica em um ponto, e para arredondar você clica e arrasta esse ponto. Observe as figuras que seguem.



Na imagem acima notamos que para fazer o desenho da boca, utilizei 6 pontos, e arrastei eles quando criei para fazer as curvas. Iremos utilizar o mesmo processo para desenhar os dentes e a língua, e após criados, alterar as cores deles.



DICA: Você pode trazer os elementos pra cima ou pra baixo, organizando a maneira como eles serão exibidos, se por acaso, a boca ficar acima dos dentes e da língua, utilize o menu abaixo para "descer" ela de nível.


Agora é sua vez, tente desenhar a face do Jake com as técnicas que foram ensinadas. Observe abaixo a quantidade de formas de utilizei. Para o olho e nariz você pode utilizar ellipses, pois agilizam o trabalho.


Vamos começar a desenvolver o corpo do Finn, em outra camada, crie uma nova, nomeando para Corpo_Finn, trave as demais camadas e deixe como está abaixo.


Utilizando as técnicas aprendidas desenho o corpo do Finn, primeiro desenhe a ellipse da cabeça, depois a toca, depois a camisa, o short, por fim as mãos e pés. Sempre ordenando os objetos desenhados para que eles fiquem corretamente posicionados conforme a figura abaixo.


Processa com o desenvolvimento, após finalizar a etapa anterior, crie uma nova camada Corpo_Jake, e desenho o corpo do Jake, sempre seguindo as formas do desenho em rascunho. Após finalizado, terá algo semelhante ao que se encontra abaixo, note que o Finn está acima do Jake.



Por enquanto deixaremos assim, vamos criar agora a ultima camada Mãos_Camada, para fazer as mãos do Finn que atravessam o Jake, e a mão do Jake que atravessa o Finn.


Quando concluir corretamente essa camada e os desenhos coloque a camada Corpo_Jake acima da Corpo_Finn, arrastando-a para cima, e o seu desenho será parecido com o abaixo.



Este tutorial foi para demonstrar as técnicas de ilustração em vetor, e princípios que podem ser utilizados, lembre-se que treinamento é tudo. Em breve, um vídeo tutorial será postado, indicando todo processo de criação de uma ilustração em vetor. Até breve mutchachos ;)

domingo, 2 de setembro de 2012

[Animação] Hora de Aventura

Olá pessoal, quem curte animação vai gostar muito desse interessante e divertido tumblr sobre o famoso desenho Hora de Aventura do Cartoon Network. No tumblr, existem várias amostras de conceitos de arte do desenho, e com outras diversas informações. Muito legal pra quem quer conhecer um pouco mais da pré e pós-produção de um desenho. Acesse agora: http://adventuretimeart.frederator.com/


E não percam estou preparando um material sobre o processo de animação, tutoriais bastante interessantes que vai ensinar vocês um pouco dessa bela arte.

quinta-feira, 30 de agosto de 2012

[Blu-Ray] Os Vingadores

Essa semana, quarta-feira (29/08), foi lançado no Brasil o Blu-Ray/DVD do filme mais comentado do ano: Os Vingadores. Um fato curioso é que nos Estados Unidos de acordo com o site oficial Blu-Ray e Amazon, o lançamento por lá será somente no dia 25 de setembro!


Para o filme foram lançados quatro versões que podem ser adquiridas: DVD, Blu-Ray, Blu-Ray Duplo e Edição de Colecionador. Todas as versões terão comentário do diretor Joss Whedon e ainda é possivel visitar o estúdio e assistir como foram feitos os efeitos especiais do filme. Somente as versões em Blu-Ray possuem cenas deletadas e outros extras como curta animado, entrevistas e making of com 90 minutos de material exclusivo. Confira o trailer do Blu-Ray abaixo:


O menu do Blu-Ray ficou muito bem elaborado seguindo a tendência visual da S.H.I.E.L.D. com um design tecnológico e moderno. Interessante destacar que o Blu-Ray permite a realização de interatividades mais elaboradas pois a linguagem na qual trabalha é Java. Observe abaixo o vídeo do menu.


Pois é, agora é só adquirir seu disco e curti bastante esse grande sucesso do cinema em 2012. Os Vingadores encontra-se disponível para venda nos sites Submarino, Americanas, Saraiva, etc.


[Ebook] Estrutura de Dados para Iniciante

Olá pessoal! Você estudante de sistema de informação, ou usuário interessado em conhecer o funcionamento da Estrutura de Dados. Adquira agora mesmo o e-book completo, onde o assunto é abordado de um forma dinâmica e incrivelmente didática.


Acesse já um exemplar de teste gratuito: Estrutura de Dados E-Book

If you want an english version of Data Structures Ebook, make a request to 8itoporcento@gmail.com


Quant.:
  
Frete Grátis

quarta-feira, 29 de agosto de 2012

[Ebooks] Distribuição

Olá pessoal, hoje vou falar sobre o novo projeto que estou envolvido, o desenvolvimento de Ebook's. Os Ebook's serão sobre diversos assuntos, interessantes, e explicados de uma forma bem didática, para que um simples iniciante compreenda e aprenda muito mais sobre os assuntos abordados. Como o projeto é novo, ainda estou elaborando assuntos bem didáticos que vão fazer vocês aprenderem com outros olhos.
Todos Ebook's abordaram sobre um tema especifico, irão conter exercícios que posteriormente serão resolvidos no blog, com toda explicação e da maneira mais didática possível. Alguns Ebook's irão conter animação de interatividade, e para os voltado a Sistema de Informação, será sempre disponibilizado o código-fonte completo e totalmente comentado.

Acompanhem o Blog, em breve, muitas novidades.
Peço que quem estiver sugestões, entre em contato com: 8itoporcento@gmail.com

domingo, 26 de agosto de 2012

[Programação] Métodos de Pesquisa

Olá pessoal, hoje iremos abordar sobre os métodos de pesquisa existentes para algoritmos para que se possa realizar pesquisa em objetos salvos na memória, sendo desde arrays até listas mais complexas. O objetivo desses métodos é facilitar a pesquisa entre esses dados não havendo necessidades de monta-los novamente na memória, gastando assim menos armazenamento na memória ao executar diversas tarefas de pesquisa.
O principio dos métodos se baseia na existência de um conjunto de dados e a partir de um valor enviado pelo usuário, utilizados os métodos nesse conjunto de dados, acessando a informação se ela existir. Existem dois métodos de pesquisa e são esses a Pesquisa Sequencial e a Pesquisa Binária. Vamos abortar o principio e a execução de cada um.

Pesquisa Sequencial - Considerado o método mais simples. Consiste em receber um valor a ser pesquisado e ir percorrendo dado por dado do conjunto de dados até descobrir um valor igual, ou caso não seja encontrado o valor, retornar informando que o valor não existe. É um método simples porém "caro" pois se o conjunto de dados é extenso é necessário que se percorra toda a lista de dados até encontrar o valor, o que irá gastar muito processamento. Veremos abaixo o código em funcionamento:

// Função de pesquisa sequencial que recebe o conjunto de dados, e a chave de pesquisa
// Em nosso exemplo recebemos um vetor de inteiros e a chave inteira para comparar os números
public int PesquisaSequencial (int[] vetor_inteiro, int chave)
{
     for (int i = 0; i < vetor_inteiro.Length; i++)
     {
          // Se encontrar o valor, retorna o índice do valor no vetor 
          if (vetor_inteiro[i] == chave)
               return i;
     }
   
     // Se percorreu todo conjunto e não encontrou dado, retorna erro -1
     return -1;
}

A aplicação da Pesquisa Sequencial pode ser utilizada com diversas utilidades, para o exemplo utilizado utilizamos busca de inteiro, entretanto podem ser pesquisados vários tipos em vários conjuntos de dados diferentes. Aplicável conforme necessidade.

Pesquisa Binária - Sendo um método mais otimizado que o anterior, o processo de execução na teoria é bem simples, entretanto como pré-requisito para essa pesquisa é necessário que o conjunto de dados já esteja previamente ordenado. Pois o método consiste em dividir o conjunto em duas partes comparar o valor chave ao elemento central, se for maior ignora a primeira metade, e continua seguindo a divisão na segunda metade, caso o contrário, faz o oposto. Em termos de processadores, o gasto é bem menor que a Pesquisa Sequencial, entretanto quanto maior o conjunto de dados mais tempo será gasto. Veremos o funcionamento desse método abaixo:


// Função de pesquisa binária que recebe o conjunto de dados, e a chave de pesquisa
// Em nosso exemplo recebemos um vetor de inteiros e a chave inteira para comparar os números
public int PesquisaSequencial (int[] vetor_inteiro, int chave)
{
     // Declaração de variáveis
     int meio, primeiro = 0, ultimo = (vetor_inteiro - 1), encontrado = 0;

     while (primeiro <= ultimo && !encontrado)
     {
          // Define o meio do conjunto de dados
          meio = (ultimo + primeiro) / 2;

          // Busca o valor de metade em metade
          if (chave == vetor_inteiro[meio])
                encontrado = 1;
          else
               if (chave > vetor_inteiro[meio])
                    // Busca na metade final
                    primeiro = meio + 1;
               else

                    // Busca na metade inicial
                    ultimo = meio - 1;

     }
   
     // Se encontrar o valor, retorna o índice do valor no vetor 
     if (encontrado)
          return meio;
     else
          return -1;
}

   
A aplicação da Pesquisa Binária pode ser utilizada com diversas utilidades, para o exemplo utilizado utilizamos busca de inteiro, entretanto podem ser pesquisados vários tipos em vários conjuntos de dados diferentes. Aplicável conforme necessidade.

Agora vimos os dois métodos de pesquisa, façam os teste e vejam como eles se comportam ;) Em breve postarei um projeto completo implementando esses métodos e acompanhando na prática. Agradeço vocês e voltem em breve ( hehehehe )


terça-feira, 7 de agosto de 2012

[Variedades] [Design] Quando o design não funciona muito bem

Não adianta querer negar, hoje em dia o design é essencial para refinar a aparência e o layout de vários produtos, atraindo assim a atenção do público-alvo, e transformando a marca conhecida pelo seu estilo de design. Como exemplo, podemos citar a Apple, uma empresa que explora a fundo o quesito design, fazendo com que muitos dos seus produtos sejam conhecidos apenas com um olhar.

Mas nem sempre o design é eficiente, quando você procura um profissional não tão eficiente, ou o projeto não é bem elaborado. Tudo pode dar bem errado, resultando em uma imagem nada produtiva para empresa.

Abaixo podemos observar alguns projetos de logo que não deram muito certo em seu desenvolvimento, além da falta de qualidade visual, o logo é capaz de gerar um duplo sentido que pode não ser nada agradável para a empresa.


Na logo CATWEAR, podemos observar que a proposta de marca é vestir mulheres independentes, entretanto a proposta visual é um tanto pejorativa à marca, com um gato formando a letra A mostrando supostamente seu... ( hmmmmmmm deixa pra lá )


Em THE COMPUTER DOCTORS, é no minimo uma proposta de marca que exprime que a empresa gerência a inteligência do computador para que ele trabalhe para você. Entretendo, a logo teria uma boa proposta se o mouse não parecesse um... ( af quem foi o designer que fez isso? )


CHINA RESTAURANT, como o próprio nome já designa é um restaurante chinês. Primeiramente, observando sem conhecer o projeto diria que o circulo vermelho remete a bandeira do Japão? ( tipo tudo a ver HUAHUA ) e o designer "tentou" criar uma casinha com estilo chinês? ( WOW )  Mas o pior de tudo é que ai nessa imagem tem coisa... ( hmmmm mentes poluídas mode on )


CLINICA DENTAL SAN MARCELINO, percebe-se claramente que se trata de um dentista, entretanto aquele desenho médico-paciente gera uma imagem um tanto quanto duvidosa a respeito do doutor... ( hmmmm safadenho )

Acima vimos algumas logo um tanto quanto constrangedoras, brincamos um pouco, mas isso é um assunto sério, o que a marca reflete ao cliente é mais importante do que o trabalho que é realizado na empresa dona da marca. Por isso, nunca se esqueçam que um bom design, além de essencial, pode marcar sua empresa para sempre.

Para ver outros logo meio desajustados visitem: Piores Logos da História ( Mídia Publicitária - ótimo site, recomendo )



segunda-feira, 6 de agosto de 2012

Volta das Férias

Olá pessoal, após um breve tempo sem entrar aqui ( hehe ) Agora estou de volta com novos projetos de tutoriais para Photoshop, Illustrator, CorelDraw, Flash, Dreamweaver, Fireworks, 3DSMax, AfterEffects, entre outros... Também haverá a continuação do projeto Jogos de Plataforma, e outros projetos novos estão sendo elaborados para serem postados aqui.
Além disso, comentários sobre filmes, DVDs, séries, música, televisão, e outros assuntos de entretenimento serão postados diariamente ( creio eu HUAHUAHUA ). Aguardo vocês e suas doces visitas em meu blog. Que a força esteja convosco ( tão legal falar convosco LOL ).


quinta-feira, 12 de julho de 2012

[Variedades] O Maior Brasileiro de Todos os Tempos

Olá pessoal, há algum tempo o SBT (Sistema Brasileiro de Televisão, canal 4 - São Paulo) vinha coletando votos para eleger o maior brasileiro de todos os tempo, em parceria com a rede de televisão BBC. Pois bem, alguns meses depois, atualmente conseguiram coletar mais de 1 milhão de votos propostos e assim dar continuidade a seleção. Ontem, quarta-feira, estreou o programa apresentador por Carlos Nascimento, às 23:30hrs.
No programa foi e serão apresentados os 100 mais votados pelo público brasileiro que participou, para então, a partir desses mais votados, escolher o único brasileiro que merece o título. Para acessar informações sobre o programa, e o já anunciados à disputa pelo titulo acesse o site abaixo, e veja todos os classificados:

http://www.sbt.com.br/omaiorbrasileiro/ (O Maior Brasileiro de Todos os Tempos)

A proposta do programa é muito importante não só para nós brasileiros, mas como o Brasil, e sua visibilidade. Entretanto venho ressaltar que uma das maiores decepções que tive com o programa, foi a exigência de que nenhum integrante do SBT entrasse para a disputa do título. Afinal, o SBT conta com uma série de grandes nomes e possíveis ganhadores ao prêmios. Lamento por isso, mas creio que nós brasileiros saberemos escolher muito bem nosso representante a ser O Maior Brasileiro de Todos os Tempo.


quarta-feira, 11 de julho de 2012

[Filmes] O Espetacular Homem-Aranha

Olá pessoal, após nossa prévia antes do filme estrear, assisti O Espetacular Homem-Aranha, e aqui um pouco do que tenho a dizer do que foi visto no filme, no que faltou e no que precisava ter melhorado. O inicio do filme começa com o Peter Parker ainda criança e com seus pais, uma boa entrada para que os espectadores entendessem o porque Peter morava com seus tios e como foi esse processo. Como já esperado o filme abordou o colegial, onde mostra os comportamentos dos alunos e como o Peter se encontrava nesse ambiente. Até o momento antes da picada da aranha, o filme é bem parado, contendo somente história e drama, criando um ambiente de toda a situação para mais tarde essa ser cobrada na história.



Pode-se dizer que a parte "herói" da história começa quando Peter conhece o Dr. Connors e é picado pelas aranhas, que partiam de um processo de pesquisa gerado pelo pai de Peter. A trama é bem alimentada, não há difusão entre as cenas, contendo uma história retilínea sem grandes acontecimentos fora o central. Nesse filme, temos um Peter mais autêntico e ao mesmo tempo que "se acha o cara do pedaço", entretanto conforme o decorrer do filme percebe-se que ele vai adquirindo toda a humildade que existe dentro dos heróis. O filme em si teve assuntos mal resolvidos, incluindo o Clarim Diário na trama, e o primeiro ataque do Lagarto a cidade que falou um final que deixou a pergunta: Porque o Lagarto fugiu? O que aconteceu com o cara que ele tava atrás?



Em si o filme é espetacular, como o próprio nome diz, apesar de alguns aspectos deixarem a desejar, ele cumpre sua promessa, e deixa um bom filme de super-heróis com direito a continuação. Vale a pena ver e rever no cinema, ou quando sair em locadoras. A minha avaliação nesse filme é de 8 pontos de 10.

quinta-feira, 5 de julho de 2012

[Filmes] [Prévia] O Espetacular Homem-Aranha

Olá, como todos sabemos, amanhã (6/07/12) estreará nos cinemas O Espetacular Homem-Aranha, existem diversos comentários sobre esse filme, e diversas críticas em relação ao reboot da saga. Abaixo podemos conferir o trailer, e especular que o filme promete bastante emoção.


O Homem-Aranha já teve suas aparições no cinema com a trilogia de filmes estreando Tobey Maguire como o protagonista Peter Parker. Porém, a forma como a história foi adaptada para o cinema era um tanto contraditória a das histórias em quadrinhos.


Assim, esse novo filme, traz a história completamente remodelada, e semelhante aos quadrinhos, mostrando o Peter Parker nerd, com personagens novos, e uma das mudanças mais significativas em relação aos demais filmes, é a utilização de um aparelho desenvolvido pelo próprio Peter para lançar teias, exatamente como é nos quadrinhos.


(Sistema lança teias, do novo filme)

A nova roupa do Homem-Aranha, como observada a abaixo, se tornou mas sombria e com mais estilo que a antiga, agora sim podemos confiar no novo Homem-Aranha, pois, antigamente, o filme passava uma imagem muito "infântil".


(Tobey Maguire, à esquerda - Andrew Garfield, à direita)


Outra mudança significativa, o Peter Parker agora, está mais "adolescente", possivelmente para o filme isso vai representar talvez um ambiente mais colegial, abordando sobre problemas mais comuns na adolescência. E uma prévia exclusiva de 4 minutos do filme saiu, woOooOoOw, vamos assistir.




É pessoal, podemos notar que o filme além de mais adulto, terá bastante conflitos emocionais entre os personagens, novas perspectivas de visão, muita ação e destruição, que é essencial para todo filme de super-heróis. É isso aí, agora aguardando ansioso pela estréia, que provavelmente, vai esgotar.


[Tutorial] [XNA] Jogo de Plataforma - Parte 3

Olá pessoal, em nossos últimos tutoriais desenvolvemos as classes Camera2D e Animacao para o nosso jogo. Caso não tenha acompanhado os tutoriais anteriores dessa série, sugiro que acesse os seguintes links antes de prosseguir:

Primeiros Conceitos (Conhecendo o XNA)Parte 1 (Classe Camera2D)Parte 2 (Classe Animacao)

Nesse tutorial, desenvolveremos uma classe de objeto que estará presente no jogo. O nome para tal classe será Tile. Os tiles são pequenos pedaços de imagens que servem para criar uma nova imagem composta conhecida como layer, utilizadas para criar o cenário de um jogo. Observe a imagem abaixo:

(Super Mario Bros 3)

Na imagem acima temos um jogo com seu personagem, cenários, inimigos, etc. Para montar esse cenário 2D de maneira mais prática e, economizando o máximo possível de uso da memória do computador. Construímos esse objeto utilizando vários tiles que são armazenados, um por um, na classe Tile. Sendo assim possuímos somente os tiles principais, mas montados o mapa conforme nossa necessidade. Abaixo um exemplo com os tiles utilizados para montar o cenário da fase acima:

(Tiles do Jogo Super Mario Bros)

Muito bem! A classe que iremos desenvolver agora não será ainda capaz de montar nosso cenário, somente de armazenar os tiles acima, para posteriormente, serem usados na construção de um cenário. Vamos agora analisar nossos atributos. Todo tile tem o seu tipo de colisão, sua textura e seu tamanho. Crie uma nova classe dentro do projeto do jogo chamada Tile. Começamos a montar nossa classe fazendo referências aos frameworks.

using Microsoft.XNA.Framework;
using Microsoft.XNA.Framework.Graphics;

Antes de começar a escrever nosso código dentro do bloco da classe, vamos criar um tipo de atributo enumerador, responsável por identificar o tipo de colisão. Esse processo facilita e padroniza os dados.

// Enumeração dos tipos de colisão existentes
public enum TipoColisao
{
     // Refere-se ao Tile passável
     passa,

     // Refere-se ao Tile impassável
     naoPassa,

     // Refere-se ao Tile plataforma
     plataforma,
}

Pronto :) Criamos nosso enumerador, agora podemos começar a escrever nossa classe, definindo os atributos e métodos dos tiles.

public class Tile
{
     // Definição da textura do Tile
     protected Texture2D tile;
     // Definicão do tipo de colisão do Tile, observe
     // a variável é do tipo enumerador que criamos
     public TileColisao colisao;
     // Definição do tamanho do Tile
     public Vector2 tamanho;

     // Método que constrói o nosso Tile, recebendo
     // a textura e o tipo da colisão
     public Tile(Textura2D textura, TileColisao _colisao)
     {
          this.tile = textura;
          this.colisao = _colisao;
          this.tamanho = new Vector2(textura.Width, textura.Height);
     }
}

Agora temos nossa classe Tile completa, pronta para começar a receber nossos tiles, nos próximos tutoriais aprenderemos a implementar essa classe em nosso projeto e criar o cenário conforme nossa preferência. Aguardo vocês e até breve. ( com mais um gif HUAHUAHUAUH sou viciado D: )


segunda-feira, 2 de julho de 2012

[Tutorial] [XNA] Jogo de Plataforma - Parte 2

Olá caros friends, em nosso último tutorial da série Jogo de Plataforma, abordamos alguns princípios básicos sobre plataforma adotando como exemplo o jogo do famoso Super Mario. Além disso, desenvolvemos a classe Camera2D que se movimenta junto com o personagem do jogo.

Neste parte do tutorial desenvolveremos a classe Animacao. Como podemos observar em qualquer jogo de plataforma, durante a movimentação do jogador e objetos pela tela, sempre é uma espécie de conjunto de animações, como por exemplo, animação para o personagem andar, correr, pular, etc. Sendo assim, a classe que desenvolveremos será responsável por criar nossos frames de animação e animá-los caso haja necessidade.

Inicialmente, crie uma nova classe no projeto, com o botão direito do mouse clique no nome do seu projeto localizado no Solution Explorer, depois no submenu Add, e por fim Class. Dê o nome Animacao para classe e clique em okay.


Antes de começar o desenvolvimento da classe, vamos analisar seus termos técnicos para que possamos identificar seus atributos e métodos dentro do jogo. Toda animação possui uma certa quantidade de quadros de desenho, um tempo de transição de um desenho para o outro e a instrução de repetição, caso exista. Por tanto identificamos três atributos da nossa classe:

  1. Quadros da Animação - Todos os desenhos que compõem ela.
  2. Quantidade Total de Quadros.
  3. Tempo de Intervalo - Tempo de transição de um quadro para o outro.
  4. Repetição - Se a animação fica ou não repetindo.

Nessa classe trabalharemos com Rectangles, que em termos computacionais, é preciso de um dispositivo gráfico para renderiza-los. Para isso faramos referência ao framework do XNA. Indicado abaixo:

using Microsoft.XNA.Framework;
using Microsoft.XNA.Framework.Graphics;

Pois bem, agora podemos começar o desenvolvimento da classe Animacao. Dentro do bloco:

public class Animacao
{
     // Digitar todo o código da classe aqui.
}


Começaremos a declaração dos atributos identificados anteriormente para a nossa classe. Todos atributos serão privados somente para a Animacao, entretanto, podemos modificar seus valores, para isso serão criados os métodos get/set para cada um dos atributos.


// Lista que contém os quadros da Animacao
private List<Rectangle> quadrosAnimacao = new List<Rectangle>();
// Método para obter essa lista quando necessário
public List<Rectangle> QuadrosAnimacao { get { return this.quadrosAnimacao; } }


// Tempo de intervalo de transição dos quadros da Animacao
private float intervalo = 0.10f
// Métodos para obter e setar o intervalo quando necessário
public float getIntervalo() { return this.intervalo; }
public void setIntervalo(float _intervalo) { this.intervalo = _intervalo; }


// Define se existe repetição na Animacao
private bool existeLoop = false;
// Métodos para obter e setar a existência de repetição
public bool getExisteLoop() { return this.existeLoop; }
public void setExisteLoop(bool _loop) { this.existeLoop = _loop; }


// Define a quantidade total de frames da Animacao
private int quadrosTotal = 0;

Prontinho muchachos, criamos os atributos e os métodos para controlar esses atributos dentro da classe. Bom, como agora já temos os atributos, faltam os métodos da classe. Para um animação só existe o método construtor, que vai construir a animação e deixa-la armazenada na memória, e ela será acionada conforme instruções que receber do objeto a ser animado.

// Método que constrói nossa Animacao
// é enviado para esse método uma lista de quadros
// com inicio, e total de quadros dela
public Animacao(List<Rectangle> quadros, int inicio, int total)
{
     // Define a quantidade de quadros da Animacao
     this.quadrosTotal = total;


     // Adiciona cada quadro que foi recebido a lista de quadros da Animacao
     for (int i = inicio; i < (inicio + total); i++)
     {
          this.quadrosAnimacao.Add(quadros[i]);
     }
}

E ai está nossa classe Animacao, prontinha direto do forno ( HUHAUHA ) para ser utilizada. Entretanto guardaremos ela, pois para se ter uma animação é preciso um objeto, que em nosso caso, não temos ainda. Conforme os tutoriais forem evoluindo, todas as classe serão diretamente conectadas umas as outras. Aguardo todos em nosso próximo tutorial. ( Como de costume nosso gif básico HUAUHAUHAHU )