Inspirado por jogar games 2D com o Shantae (leia o post anterior) finalmente peguei uma série que tenho vergonha de ter deixado passar quando mais novo, Metroid. Comecei pelo terceiro título da série, Super Metroid de Super Nintendo, e constatei oq todos já diziam, o jogo é fantástico. A evolução de armas e habilidades especiais é muito motivadora e não deixa o jogo ficar cansativo, mesmo sendo obrigado a revisitar alguns lugares várias vezes.

box-art

 

Gostei tanto que acabei jogando também o Metroid Zero Mission que é o remake do primeiro Metroid, e o Metroid Fusion que seria uma continuação direta do Super Metroid, ambos de GameBoy Advance. Com a jogabilidade remodelada e adaptada para o portátil, achei o jogo mais gostoso de jogar e também mais curto e fácil. Grande destaque para o Zero Mission que tem uma parte onde é possível jogar com a Samus totalmente desarmada, sendo necessário escapar e se esconder dos inimigos sem enfrentá-los.

Metroid_--_Zero_Mission_(box_art)Metroid_Fusion_cover

 

Tentei jogar o Metroid Other M, continuação para Wii, e a série Prime, mas ainda prefiro as versões clássicas em 2D. Quem sabe um dia? Espero que lancem um digno para o 3DS, pois por enquanto eu prefiro jogar indies que se basearam no Metroid, como Shantae e Shovel Knight.

Screenshot_2014-10-23-13-54-40Nesses últimos dias estive jogando um título de Nintendo 3DS que peguei em uma promoção e estava esquecido até então. Para a minha surpresa, foi uma das melhores experiências que eu tive no console. Bem desenvolvido, belos gráficos 2D, sound track perfeito, e com elementos de clássicos como mega man, metroid e castlevania, lembrou velhos tempos onde o equilíbrio jogabilidade e diversão era o mais importante.

2559007-shantaecurse_7

Nesse terceiro jogo da série, você está na pele novamente de Shantae, uma ex-gênio (mitologia árabe) que conta com a ajuda de conhecidos amigos (e inimigos) para evitar que o PIRATE MASTER, vilão de forças malignas renasça. Os personagens possuem ligações aos jogos anteriores, porém nada muito complexo que o próprio jogo não explique. Não posso falar muito sobre a história pois algumas partes são reveladoras e surpreendentes, ou seja, melhor jogar pra ver.

large

O jogo possui uma diversidade de itens considerável, e sempre que é apresentado um novo item, a fase exige que você tenha dominado a sua utilização para passar. Além disso, para obter melhorias de vida, você terá que retornar em mapas já conhecidos e com a ajuda dos novos itens, explorar partes que antes não eram possíveis.

download

Infelizmente terminei, com 9 horas de jogo e quase 100%, porém vou comprar e tentar os outros títulos da WayForward pois os caras sabem o que estão fazendo.

 

Threejs é uma biblioteca JavaScript 3D que facilita o uso do WebGL. Descobri recentemente essa lib e achei muito legal. Estou lendo um livro sobre e vou compartilhar meus experimentos com vocês.

Bom, para quem quiser mais informações, acesse o site oficial: threejs.org

WebGL é a tecnologia OpenGL ES adaptada para os navegadores, e ela está sendo implementada no HTML 5. A versão mais nova dos navegadores já implementam WebGL, porém no safari é preciso ativar no menu Developer.

Aconselho a quem queira se aventurar e nunca mexeu com 3D, revisar seus conceitos de geometria.

Bom, no site oficial você pode baixar o ZIP que contém todos os fontes, plugins, exemplos… mas por enquanto precisamos apenas do core, que pode ser baixado nesse endereço:

https://github.com/mrdoob/three.js/blob/master/build/three.min.js

Nesse primeiro exemplo, farei um cubo com textura girar, com algum efeito de névoa para deixar mais legal, assim como na figura:

hello1

 

Para acessar o projeto final e também copiar o código fonte completo, acesse a demonstração clicando aqui.

Vamos lá, em um diretório, criaremos um novo arquivo html, e nele montar a estrutura básica:

<!DOCTYPE html>
<html>
<head>
<title>Hello World - three.js</title>
<style type="text/css">
body
{
margin: 0px;
background-color: #D8E7FF;
overflow: hidden;
}
</style>
<script type="text/javascript" src="three.min.js"></script>
<script type="text/javascript">

// a magia vem aqui!!!

</script>
</head>
<body></body>
</html>

Agora que temos um html com a estrutura básica, vamos aos passos.

Declarar as variáveis que vamos precisar no script inteiro, onde está “// a magia vem aqui!!!” coloque:

var camera, scene, renderer, mesh;

Aqui temos a variável para armazenar nossa camera, cena, renderizador e nosso objeto.

No nosso arquivo, teremos 3 funções, initScene (para montar a cena), onWindowResize (para ajustar a cena ao tamanho da janela) e renderFrame (para renderizar cada frame).

A primeira, será explicada aqui:

function initScene()
{
// inicializando o three.js
renderer = new THREE.WebGLRenderer();

// tamanho do viewport, nesse caso, tamanho total da janela
renderer.setSize(window.innerWidth, window.innerHeight);

// inserir o viewport no corpo do html
document.body.appendChild(renderer.domElement);

// inicializando uma camera
camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.z = 400;

// inicializando uma cena
scene = new THREE.Scene();

// configurando uma nevoa, opcional
scene.fog = new THREE.FogExp2(0xd0e0f0, 0.0025);

// carregando um objeto geometrico pre definido, no caso um cubo
var geometry = new THREE.CubeGeometry(200, 200, 200);

// carregando uma textura de um arquivo
var texture = THREE.ImageUtils.loadTexture("rocks.jpg");
texture.anisotropy = renderer.getMaxAnisotropy();

// criando um material baseado em uma textura
var material = new THREE.MeshBasicMaterial({ map: texture });

// criando um objeto com uma geometria e um material aplicado, depois adicionando na cena
mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);

// evento para quando a tela for redimensionada
window.addEventListener("resize", onWindowResize, false);

// chamar evento para renderizar um frame
renderFrame();
}

Essa textura pode ser qualquer imagem, mas se quiser utilizar a do exemplo pode salvar essa:

rocks

Na nossa inicialização de cena, chamamos duas funções, uma delas é um evento disparado quando a janela é redimensionada, o corpo dela é esse:

function onWindowResize()
{
// quando redimensionar a tela, atualizar a camera
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();

// e o tamanho do viewport
renderer.setSize(window.innerWidth, window.innerHeight);
}

E a última função que é chamada em média 60 vezes por segundo para renderizar os frames:

function renderFrame()
{
// solicitar a proxima renderizacao de frame
requestAnimationFrame(renderFrame);

// adicionar rotacao no eixo x e y do objeto
mesh.rotation.x += 0.005;
mesh.rotation.y += 0.01;

// renderizar a cena a partir de uma camera especifica
renderer.render(scene, camera);
}

Agora para que o script funcione, basta chamar a função initScene em algum lugar, eu coloco no onload do body, assim:

<body onload="initScene();">

Pronto, acho que é isso, qualquer dúvida pode comentar que tentarei solucionar. Também nos próximos dias irei compartilhar mais experiências.

Abraços!

Vou compartilhar com vocês minha experiência com a cirurgia de desvio de septo que tive que fazer assim como o pós-operatório (recuperação), afim de esclarecer ou ajudar a diminuir a ansiedade de quem pretende fazer.

Diagnóstico

Bom, o diagnóstico de desvio de septo veio um pouco tarde, tenho 29 anos e mesmo em todo esse tempo precisando de descongestionantes nasais, nenhum médico tinha me passado nenhum exame mais apurado. A situação se agravou faz um ou dois anos, quando comecei a ter amigdalite bem mais frequentemente, uma vez ao mês pelo menos, me obrigado a procurar outros especialistas até encontrar um que realmente tentasse resolver o problema. Fiz um exame, tomografia de face, o qual identificou um desvio de septo moderado e também um pequeno cisto em um dos seios da face (nada mais que o acúmulo das secreções produzidas pela mucosa que reveste os diversos seios da face), o médico disse que esse cisto estava em um lugar que não precisaria operar, porém como eu já estaria operando o desvio ele também tentaria retirá-lo.

A técnica escolhida para retificar o desvio será a laser, li na internet que possui uma característica de cicatrização melhor que a convencional com bisturi. Já para a retirada do cisto, sem visibilidade do local, ele usará um equipamento para sugar em uma tentativa sem compromisso de sucesso.

 

Véspera

Exames feitos, entrevista com o anestesista também. Agora me resta esperar ansiosamente o dia da cirurgia (sim, nunca tomei anestesia geral).

Preciso estar as 7:30 no hospital para me internar, e como devo ser o mais velho da turma, minha cirurgia está marcada para as 11:00, devendo estar no quarto meio dia. O anestesista me passou algumas recomendações, como o jejum absoluto desde as 22h (até sem água).

O médico reservou um dia para minha internação, ou seja, poderia ter alta somente no outro dia de manhã, porém o mesmo disse que irá passar a noite para uma análise e possível alta.

Dia da Cirurgia

Tudo pronto, cheguei no hospital por volta das 7:30 e o médico já estava em cirurgia, a enfermeira pediu para que eu me trocasse (avental e cueca do hospital) e esperasse para quando o próximo entrasse ela iria me dar o pré anestésico. Fiquei esperando ansiosamente até que o pré anestésico chegou, um comprimido que deveria me deixar sonolento mas não funcionou. Fiquei por volta de uma hora esperando, que deve ser a duração de uma cirurgia (tirando o tempo de recuperação da anestesia), e fui levado para a sala de cirurgia. No começo fiquei um pouco nervoso e minha pressão aumentou, mas logo baixou e o anestesista após colocar o soro na minha veia me deu um ar que qdo eu cheirei, só lembro de acordar no fim da cirurgia. Sem sentir nada dor nenhuma, porém já com um curativo enorme no nariz. Eu já sabia q o problema de toda cirurgia é o pós, porém a gente sempre tem medo da cirurgia em si e nesse caso nem percebi que ela tinha ocorrido.

Nas primeiras horas, enquanto estava no hospital, ainda estava sonolento, dormi bastante, na outra parte ainda consegui conversar um pouco e esperar pela alta, que veio lá pelas 20h da noite, sem sentir nada. O médico então chegou, falou q tinha sido um sucesso, que tinha retirado bastante coisa e que o resultado seria satisfatório, me passou algumas recomendações e também falou que seria normal se eu cuspisse sangue em algum momento, mas que eu precisaria diferenciar um pequeno sangramento com uma hemorragia, que nesse caso teria que entrar em contato com ele.

Primeiros 3 Dias

Logo que cheguei em casa da cirurgia fui usar o computador, estava bem, acho que por causa da anestesia, que não demorou a passar e logo começou meu sofrimento. Não era dor, mas sim uma sensação de desconforto inexplicável por estar com aquilo no nariz, acredito que meu nariz também tenha começado a inchar, e os dutos lacrimais pararam de funcionar, ou seja, eu não parava de enxugar lagrimas e ao mesmo tempo sentia como se estivesse com uma rinite ou sinusite muito forte por causa do curativo. Na primeira noite não consegui dormir nem um minuto sequer, não estava acostumado a dormir respirando somente pela boca e o desconforto com o curativo aumentava a cada segundo, não consegui imaginar como sobreviveria com aquele negócio durante os próximos 3 dias. O céu da boca sempre dormente. Não conseguia usar computador ou celular e pouco via TV, devido ao desconforto com os olhos. Na segunda noite, consegui dormir alguns minutos espaçados, e acordava com o próprio ronco, porém o dia já foi mais tranquilo, achei que estava me acostumando com o desconforto, mas só achei, pois na última noite ele começou a me incomodar mais, a secreção com um pouco de sangue vinha com mais frequência na boca, e parecia que qualquer hora eu ia me engasgar e não poderia recorrer ao meu nariz, que naquele momento estava fazendo tanta falta. Baixei uns filmes e resolvi enfrentar a última noite acordado, pois parece que deitado a situação piorava. Foi uma noite longa, dormi das 3 as 5, e parecia uma eternidade, passei a manhã toda sentado no sofá da sala aguardando minuto a  minuto a consulta com o médico.

Dia da Vida

Enfim a hora do dia tão esperado chegou, 10:30 estava no consultório mesmo que a consulta tenha sido marcada para as 11h, o médico atrasou um pouco, questão de meia hora, mas que esse tempo serviu pra pensar, o quanto os minutos da minha vida são preciosos, e que se você é livre e saudável, não gaste-os com besteira.

O médico chegou, fez uma brincadeira ao olhar a agenda, falou que era apenas na outra sexta, eu nem perdi tempo acreditando, pois eu saberia que não era humanamente possível mais 7 dias com aquele curativo no nariz, as coisas não pareciam nada bem dentro do meu nariz, e eu já não sabia mais oq tinha ali dentro. Logo que ele me deitou na cadeira, eu esperava que ao mexer no nariz, a dor seria insuportável, porém mais uma vez não tive dor, apenas um desconforto terrível, novamente… estava virando rotina. Ele tirou muita coisa de dentro do meu nariz, a última delas tinha uma consistência mais dura, parecia ser algum plástico e foi a que mais incomodou, mas naquele momento eu sabia que o melhor era tirar logo.

Eu achei que meu nariz estaria de alguma forma prejudicado para a respiração, mas para a minha surpresa, ele nunca esteve tão bem, eu respirei muito ar, como nunca, era um alívio que chegou a emocionar.

O médico então me receitou antialergico para tomar o mês inteiro, junto com o antibiótico que já sai da cirurgia tomando e também um soro para sempre pingar no nariz. Isso é para evitar crises de espirros, rinites e etc. No final da consulta, ele me disse que essa respiração seria temporária, pois ainda formariam “casquinhas” que dificultariam a respiração, e que duas vezes por semana eu teria que voltar lá para retirá-las.

O nariz ainda continua um pouco inchado e bem sensível, mas sem nenhuma marca de cirurgia. Não posso jamais assoar o nariz, somente sugar. Evitar abaixar a cabeça mais que o nível do coração e evitar sair até a próxima consulta, que seria em 3 dias.

Nesse dia eu parei de me questionar sobre se deveria ou não ter feito essa cirurgia.

Até o primeiro retorno ao médico

O nariz voltou a entupir depois de alguns dias, parece realmente que as “casquinhas” estão atrapalhando, não sinto nenhuma dor, apenas sensível e com o céu da boca dormente. Quando cheguei ao médico ele me pediu para que sentasse olhando para cima, e com alguns equipamentos que lembravam pinças ele ficou mexendo no meu nariz e retirando algumas coisas estranhas, mas também não senti dor. Após a visita, voltei a respirar bem. Ele passou uma pomada para passar no nariz duas vezes ao dia, e essa pomada incomoda um pouco na hora de respirar.

Próximas 2 semanas

Meu nariz está instável, hora fica bom, hora piora. Gosto e cheiro muito ruim de vez em quando, parece que tem algo podre no nariz e que as vezes solta. Comprei soro na farmácia, e sempre que sinto ele entupido eu jogo um pouco no nariz, respiro e cuspo o soro. Fazendo isso, eu já cuspi coisas bizarras, algumas vezes coisas escuras como sangue endurecido, e outras vezes pareciam pedaços de carne. Ele disse que é normal, e que é isso que ele tenta tirar quando vou as visitas. Estou tendo algumas dores de cabeça, mas pode ser do antialérgico. O importante é que estou trabalhando normalmente, só ainda não fui liberado para esforço físico. Meu nariz já está melhor que antes da cirurgia, e um detalhe muito importante é que ele não entope mais ao deitar. Coloquei uma imagem do alien que saiu do meu nariz um dia desses:

CLIQUE AQUI VISUALIZAR SE NÃO TIVER NOJO

Até um mês depois

As coisas andam muito bem, em um dos lados parece que deu uma colada na cicatrização, e por isso nas vezes que eu volto no médico ele precisa mexer um pouco, sai um pouco de sangue mas tudo sob controle. Os aliens pararam de sair e também estou respirando com mais naturalidade. Já aconselho a cirurgia!

Qualquer dúvida comente.

Se você precisa extrair documentos de um PDF no formato Adobe Portifolio ou Adobe Collection basta fazer um loop em todos os objetos, salvando todos que forem PDFs.

Baixe a Lib iTextSharp: http://sourceforge.net/projects/itextsharp/

Segue o código:

PdfReader reader = new PdfReader("Portifolio.pdf"); // Seu arquivo collection
for (int x = 0; x < reader.XrefSize; x++) // Loop em todos os objetos
{
     PdfObject obj = reader.GetPdfObject(x);
     if ((obj != null) && (obj.IsDictionary()) && (obj.ToString().EndsWith("/Filespec")))
     {
          PdfDictionary filespec = (PdfDictionary)obj;
          PdfDictionary refs = filespec.GetAsDict(PdfName.EF);
          foreach (KeyValuePairkey in refs)
          {
               // Salvando sub arquivos
               FileStream fos = new FileStream(x + ".pdf", FileMode.CreateNew, FileAccess.Write);
               PRStream stream = (PRStream)reader.GetPdfObject(refs.GetAsIndirectObject(key.Key).Number);
               byte[] pdfb = PdfReader.GetStreamBytes(stream);
               fos.Write(pdfb, 0, pdfb.Length);
               fos.Flush();
               fos.Close();
          }
     }
}
reader.Close();

Já pensou em programar para PSP? (Playstation Portable), se você respondeu sim, provavelmente já se sentiu frustrado que nem eu. Mas agora com o PS Vita isso pode mudar com o lançamento do SDK oficial da Sony.

A Sony lançou no fim de abril, o open beta do SDK que possibilita você a programar Apps e Games para PS Vita e alguns outros devices com Android… Não foi agora que ela abriu as portas para o desenvolvimento no PS3, mas com esse SDK será possível vender na PS Store Apps e Games para Vita. Para isso, será necessária uma assinatura de U$99 anuais (o mesmo cobrado pela Apple) e ter conhecimentos em C#.Net, isso mesmo, eles implementaram o Mono Framework para rodar no Vita. Já é possível baixar o beta e sair programando, veja: http://www.playstation.com/pss/

Nas próximas semanas espero ver muitos Apps feito pela comunidade.

Eu já fiz alguns testes, e é bem simples, porém, ainda cheio de bugs.

Uma imagem do programa RPG 2ic (RPG Online) rodando em PS Vita:

Para se certificar que só haverá uma execução de seu programa, fiz um pequeno código que encerra a execução antiga desse mesmo exe, mantendo somente a recém executada.

Coloque isso antes do Application.Run();

foreach (Process proc in Process.GetProcesses())
if ((proc.ProcessName == Path.GetFileNameWithoutExtension(Application.ExecutablePath)) && (proc.Id != Process.GetCurrentProcess().Id)) proc.Kill();

Caso queira que mantena apenas a antiga, interrompendo a recém executada, é só trocar o proc.Kill(); por Application.Exit();

ps: Não se esqueça, o código utiliza o nome do executável, então caso use algum executável com um nome bem comum, pode ser que não funcione.

Espero ter ajudado… =)

Para quem já conhece o desprotetor de links DropLink sabe que quebra muitos galhos, agora, para quem não possui Windows, meu amigo David Ruiz desenvolveu um plugin para o navegador Google Chrome que pode ser baixado aqui.

Para quem não conhece o fantástico programa, clique aqui e saiba mais.

O comportamento é semelhante ao programa original, porém ele converte todos os links da página atual em um simples clique. Fantástico!!! (palmas)

Olá Nerds de plantão, ligados nos filmes, músicas e afins…

Quem tenta baixar arquivos de alguns blogs já teve problemas com proteção de links que insistem em pedir o celular. É muito chato isso.

Por isso desenvolvi um programinha, de muito fácil utilização (nem botão tem), e com ele basta que você arraste o link de download que você é redirecionado para o local correto. Remove o link protegido em menos de um segundo, é incrível!!!

Para mais detalhes e download do aplicativo, acessar a página dele clicando aqui.

Trafegar ou armazenar strings é uma tarefa muito comum nos aplicativos e jogos, se você é programador, é muito provável que já tenha feito algum arquivo de texto com configurações ou enviado informações em string através da rede. Mas você já pensou que pode economizar tempo e espaço se utilizar compactação?

Em C# (.Net) a compactação e descompactação de strings é um processo simples, desde que saiba o caminho, e por isso resolvi colocar um exemplo de como utilizar o GZip para a tarefa.

Primeiro é necessário utilizar essas bibliotecas específicas:

using System.IO;
using System.IO.Compression;

Para compactar, utilize o código:

string stringNormal = "seutexto";

byte[] byteArr = Encoding.Unicode.GetBytes(stringNormal);

// Você pode trocar o MemoryStream pelo FileStream para salvar em arquivo.
MemoryStream memStream = new MemoryStream();
GZipStream gzStream = new GZipStream(memStream, CompressionMode.Compress, true);
gzStream.Write(byteArr, 0, byteArr.Length);
gzStream.Close();

// Caso utilize o FileStream, troque o código a seguir pelo Save.
memStream.Position = 0;
byteArr = new byte[memStream.Length];
memStream.Read(byteArr, 0, byteArr.Length);
memStream.Close();

// Aqui o byteArr contém o conteúdo compactado que pode ser trafegado

Para descompactar é bem semelhante, porém é necessário a utilização de uma array de buffer:

string stringNormal;


// Você pode trocar o MemoryStream 1 pelo FileStream para salvar em arquivo.
MemoryStream memStream1 = new MemoryStream();

// Carregar o byteArr com o conteúdo compactado, ou trocar o MemoryStream 2 para FileStream.
MemoryStream memStream2 = new MemoryStream(byteArr);

GZipStream gzStream = new GZipStream(memStream2, CompressionMode.Decompress, true);
int readBytes;
byte[] buffer = new byte[1024];
while ((readBytes = gzStream.Read(buffer, 0, buffer.Length)) != 0)
    memStream1.Write(buffer, 0, readBytes);
memStream2.Close();
gzStream.Close();

// Caso utilize o FileStream, troque o código a seguir pelo Save.
memStream1.Position = 0;
byteArr = new byte[memStream1.Length];
memStream1.Read(byteArr, 0, byteArr.Length);
memStream1.Close();

stringNormal = Encoding.Unicode.GetString(byteArr);

Espero que tenha ajudado, e comente caso tenha alguma dúvida, crítica ou sugestão. …ou apenas para agradecer! =)