sexta-feira, 31 de julho de 2015

Big companies? Small companies or... your own Bedroom?

In the past 6 years i have been looking for a job that gets me up in the morning. I've tried small companies, big comapnies, and i've noticed that in the end, that doesn't make much of a difference. People hire or fire you for many many different reasons that mostly have NOTHING (NOTHING at all!) to do with your skillset or even your behavior.

Let me just break it down to you. It has to do with MOTIVATION the only factor that you have some control over!

Just to set a few points here. Most of my experience has been with JAVA, the whole deal, Hybernate, JUnit, Maven, exactly the most used ones. Sometimes i worked with PHP, CodeIgniter JQuery, SQL, MySQL Postgres, Oracle and i also had great success while working with these. Front-end, Back-end, you name it, i love it. I love it all, i love learning new stuff, it gets me going, it gets me motivated, every single project i did, small one, big one, public, or private.

I want to share with you an episode of a work that i consider to be the best working experience so far in my (somewhat short) carreer which is also why i want to get to work through Toptal in the first place: I used to work with Home-Office doing a Front-End application for IBM Personel (by the way, check this guy's review of that job! It's Vishwa Persaud's, the best mentor i've ever had (and an awesome architect! check it all here: https://www.linkedin.com/profile/view?id=82476769 )

I managed to learn a LOT, in a very short period and i've been able to build an entire front-end for that application in 8 Months! Why is that? is it because i'm a good developer? no, i've seen not so good developers do even better than this just for being motivated enough and passionate about what they were doing. I did it without having to worry about what people were thinking about me (this used to drive me nuts! on some places i've worked on), without having to attend to pointless meetings (that usually broke my train of thought), and this kind of freedom is REALLY motivating!

I've tried this before i did the trip on E-Lance and oDesk and i have to say, it's very stressfull, and frustrating if you are a newcomer. It's very hard to apply for the jobs, and some companies sometimes make you go through a very intense quiz about technology and logic and all that, and that sometimes that drives formidable professionals away instead of bringing them in. All and all this experience was very tiring. And then i stumbled upon a new world of possibilities: Toptal. And i feel i have what it takes!

I'm comming back to freelance platforms because i think that is how i will be able to restore my passion for what i do, and i believe that will also make a lot of people happy. I am willing to give Toptal a chance, if it will make me have a chance.  I just applied for the Front-end ranks, and i hope this goes well. I'm really excited about this!



domingo, 26 de agosto de 2012

Voltei, Ludum Dare 24, e novas idéias

Boa tarde queridos seguidores deste blog!

Vou mudar de estratégia e temas apartir de agora!

Vou fazer deste blog um blog sobre tutoriais, tecnologias, e desenvolvimento de jogos!

Neste post, vou falar sobre a Ludum Dare 24, o evento que terminei de participar agora pouco.

Ludum Dare (traduzido do latim ficaria: Dar nome à) é um evento de desenvolvimento de jogos, assim como a Game Jam. Mas a ludum dare, tem uma pequena diferença, VOCÊ, TEM QUE FAZER TUDO, Arte, som programação e música. Nesta edição, o tema foi EVOLUÇÃO.

Para esta edição, foi até engraçado o quão rápido eu tive a idéia do que fazer. Foi tipo uma cagada, e pronto. Saí do banheiro com a idéia formada. Depois ainda duvidam que banheiros são ótimos lugares para se fazer brainstorm. Enfim, Saí de lá com a seguinte estratégia: Juntar uma idéia de jogo artístico que eu tive, com o tema da Ludum Dare, e fazer um jogo sobre a vida.  

O que deu certo:

1- Escolhi construct 2 como ferramenta de desenvolvimento, e isso ajudou MUITO. Nas primeiras 7 horas de evento, consegui ter um protótipo jogável, não muito polido, mas jogável.

2- Não me planejei muito bem. Porque isso deu certo? Porque eu fui parindo assets conforme fui precisando deles, ao invés de ficar pensando primeiro quais seriam necessários e depois fazer.

3- Dormi Bem. Parece que não faz diferença, mas faz, consegui me concentrar, pensar melhor, e tomar decisões mais rápido. Cérebro cansado só atrapalha.  

O que deu errado:

1- Erro na definição do Escopo: Fui ganancioso no escopo do jogo. Quando soltei a primeira versão para testes, eu devia ter me focado apenas nela, e a polido ao invés de fazer até o que eu achei que seria "o mínimo" da idéia completa que eu tive, errei pra mais, novamente.

2- Tentar aprender pixel art on the fly: ISSO NUNCA dá certo, nunca vou conseguir fazer um pixel art bem feito NO MEIO da ludum dare, sem estudar pixel art antes...

3- Falta de domínio na ferramenta: Escolhi construct justamente porque não sabia usar, e gostaria de aprender, e acabei fazendo disso o meu maior ganho nesta ludum dare. Se eu já tivesse usado ela antes, eu saberia da maldita restrição que me quebrou as pernas nos finalmentes da ludum dare: SEU JOGO NÃO PODE TER MAIS DE 100 EVENTOS #@$#$#@%#!

Na próxima ludum dare, estou disposto a tentar aprender Game Maker! Assim que eu tiver tempo, vou tentar gravar video aulas de construct. Já tem algumas no youtube e tal mas, como eu gosto... porque não? :D É isso aí pessoal! C+- ESTÁ OFICIALMENTE DE VOLTA!

Segue o link do meu jogo no site da ludum dare! http://www.ludumdare.com/compo/ludum-dare-24/?action=preview&uid=12398 A idéia do jogo tá explicada no post. Só que em inglês.

segunda-feira, 11 de abril de 2011

Atenção aos poucos seguidores deste blog

Estarei daqui em diante "Abandonando este blog" porque EU CONSEGUI! FINALMENTE CONSEGUI ARRUMAR COMPANHEIROS DE BLOG!

E agora estarei colaborando com o blog: www.teamgamersnerds.blogspot.com

Um blog como este: Nerd. porém com pessoas QUE GOSTAM de blogar! (visto que fui o último integrante que ainda botava fé nesse barraco)

enfim ATUALIZEM SEUS FEEDS Ò_ó não é porque eu nao vou atualizar mais este que vcs serão abandonados, sigam o outro ao invés :D

Bye bye C+- foi bom enquanto durou, e quem sabe um dia, volto a atualiza-lo ^_^

quinta-feira, 7 de abril de 2011

Usando e Brincando com a GS2D.



Resolvi estudar a GS2D feita por André Santee, e gostei bastante dos resultados. Aí resolvi escrever um pequeno tutorial e colocar aqui no Ponto V.

Os três únicos pré-requisitos são:

- Ter lido o primeiro post sobre a GS2D;
- Ter realizado todos os passos do post;
- Ser familiar com as sintaxes do C++.

Bom, vamos ao que interessa.

1- Criando efeitos sonoros:

As seguinte linha tem como finalidade criar um smartpointer para o sistema de audio e inicializá-lo.

AudioPtr audio = CreateAudio(0);

As seguintes linhas tem como finalidade criar um smartpointer para o seu efeito sonoro ou música, e carrega-lo no sistema da GS2D para ser usado.
A constante GSST_SOUND_EFFECT é uma constante que diz que o sample carregado é um efeito sonoro.
Você tem outras opções de constante, para música por exemplo você usaria: GSST_MUSIC
Para efeitos sonoros de ambiente você usaria GSST_AMBIENT_SFX e assim por diante.

AudioSamplePtr asp;
asp = audio->LoadSampleFromFile(L"pastaOndeEstaoOsRecursos/efeitoSonoro.formato", GSST_SOUND_EFFECT);

As seguintes linhas, você deve colocar dentro do seu loop de jogo.
while(true){
asp->Play();
}

Provavelmente você vai querer toca-lo quando objetos colidirem, ou quando você realizar alguma ação com seu ator de jogo, por exemplo. O que cria a necessidade de você saber ler inputs.

2- Lendo inputs:

Primeiro você precisa de um InputPtr

InputPtr input = CreateInput(0,true);

A cada iteração do loop de jogo você precisa chamar o Update para atualizar o estado de todas as teclas do teclado.

input->Update();

Para checar o estado de uma tecla:

if (input->GetKeyState(GSK_ESC == GSKS_DOWN)){
//fazer algo
}

Você pode perceber que são bem intuitivos os prefíxos da GS2D. GSK_ é um prefixo para constantes de teclas (GameSpaceKey) e GSKS_ para estado de teclas (GameSpaceKeyState).

Você pode checar outros valores possíveis pelo recurso auto completar na sua IDE, caso ela tenha esse recurso disponível.

3- Desenhando Texto

video = CreateVideo(larguraTela,alturaTela, L"Titulo",ehWindowed,permitirvsync,L"pastaOndeEstaoSeusArquivosFnt/",GSPF_UNKNOWN,ehMaximizavel);

Para poder desenhar texto com a GS2D tem um detalhe importante que você precisa prestar atenção ao inicializar a engine. Você precisa passar o nome da pasta onde estão seus arquivos .FNT. Você também precisará de um arquivo .bmp com a fonte "BitMapizada" (se me permite o neologismo). Você pode criar esses dois arquivos usando o programa: AngelCode Bitmap Font generator

Para desenhar texto, dentro do seu loop onde você desenha as coisas na tela:

video->DrawBitmapText(Vector2(cordenadax,cordenaday), L"textoQueDesejaEscrever", L"nomeDaFonte.fnt",gs2d::GS_WHITE);

4- Desenhando Sprites animadas:

Primeiro você precisa de um SpritePtr, que deve ser criado pelo seu sistema de video (VideoPtr)

SpritePtr suaSprite = video->CreateSprite(L"suaPastaDeRecursos/nomeDaSprite.png");

Para ela ser uma sprite animada, você precisa que a sua imagem com a spritesheet seja dividida em frames, e que cada frame tenha exatamente o mesmo tamanho.

A propósito, isso geralmente é padrão nas engines.

Entretanto, o seu arquivo onde está a spritesheet, difícilmente seguirá um padrão. Já vi spritesheets de vários tamanhos com mais ou menos frames.

Para usar sprites animadas, você deve configurar o número de retangulos de sprite pela linha:

suaSprite->SetupSpriteRects(colunas,linhas);

Segue a sprite sheet que usei como exemplo:


Em seguida dentro do seu loop onde está a lógica de desenho você precisa dizer qual é o retangulo atual pela linha:

suaSprite->SetRect(coluna,linha);

Você precisa montar a sua lógica de animação tendo em vista como cada engine de jogos acessa e trata as spritesheets.

Por exemplo, em uma spritesheet como essa que mostrei: a animação do personagem andando para baixo está na primeira linha, para esquerda na segunda, e assim por diante.

Você poderia criar um enumerador que diz qual é a animação, e um array que diz a ordem dos frames:

O enumerador seria por exemplo:

enum {ANIM_ANDABAIXO = 0, ANIM_ANDAESQUERDA, ANIM_ANDADIREITA,ANIM_ANDACIMA}

E o array da ordem dos frames poderia ficar assim:

short frames[4] = {0,1,2,1};
short frameAtual = 0;
short animAtual = 0;

Em seguida dentro do seu loop de desenho você precisaria usar isso tudo da seguinte forma:

if (frameAtual == 4) frameAtual = 0; //4 porque o vetor vai da posição 0 a 3 portanto 4 é uma posição inválida.
suaSprite->SetRect(animAtual,frames[frameAtual]);
frameAtual++;

Você precisa tratar esses valores na lógica de jogo, como no exemplo:

if (input->getKeyState(GSK_W) == GSKS_HIT) animAtual = ANIM_ANDACIMA;
if (input->getKeyState(GSK_A) == GSKS_HIT) animAtual = ANIM_ANDAESQUERDA;
if (input->getKeyState(GSK_S) == GSKS_HIT) animAtual = ANIM_ANDABAIXO;
if (input->getKeyState(GSK_D) == GSKS_HIT) animAtual = ANIM_ANDADIREITA;

Nesse exemplo usei ao invés das setas, as teclas w,a,s,d comumente usada nos jogos.

Bom, isso foi tudo que eu estudei, da GS2D.

Os meu próximo passo é tentar Integrar a Box2D ou alguma outra engine de física com a GS2D. Porém, destruir um planeta com uma pedrada é infinitamente mais fácil do que usar a Box2D com C++.

Espero que tenham gostado deste post!

Agradecimentos especiais a @tifaucz por ajudar a pesquisar algumas funcionalidades da GS2D :D

FoxT out.

PS: Não deixe de conferir o post do próprio autor no pontoV :)

sábado, 26 de março de 2011

Google reader, o jornal infinito.

A um tempo atraz eu fiz um post sobre o Google Reader, e as suas principais vantagens.

http://cmaisoumenos.blogspot.com/2010/12/google-e-sua-incrivel-capacidade-de.html

Agora vou falar sobre, desvantagens, de se usar o reader...

Se você começa a usar o reader, você começa a desenvolver uma espécie de vício ou TOC, de querer ler tudo sempre, e, como eu disse no antigo post, é tanta informação que não dá tempo nem de criticar, e geralmente você acaba fazendo isso num momento qualquer de ócio criativo.

Por exemplo: esse fim de semana foi bastante agitado, não parei na frente do pc hora nenhuma, não li emails, não li o reader, enfim, não dei nem atenção à "vida online".

Quando isso acontece, muitas coisas também acontecem. Eu geralmente acumulo emails, e itens não lidos no reader. Aí quando chego na segunda, tenho 400 itens não lidos, e com o meu TOC, eu fico tipo: "PRECISO ZERAR OS ITENS DO READER D:", e isso me fez ler as coisas com cada vez menos atenção, e cuidado. Por isso, não ache ruim se eu compartilhei algo ofensivo, ou talvez que você não tenha gostado porque só agora eu me dei conta de que isso estava acontecendo.

Talvez eu conseguisse tirar um proveito maior do reader, se eu tivesse um android (porque iPhone é um bixo "egoísta" e não interage com nada).

É muito ruim isso. Eu me sinto OBRIGADO a ler os itens não lidos do reader. Muitos blogs que eu assino, simplesmente perderam a graça. Muitos blogs blogs que outrora eu achava interessante, ficaram chatos (exceto alguns posts interessantes que as vezes aparecem).

sexta-feira, 18 de março de 2011

URL Shorteners

URL Shorteners

Mais uma vez o Google me surpreende: desta vez com um serviço que já existia: o Encurtador de URLs.

Geralmente quando você quer mandar um link pelo twitter, como você faz? Se a url couber, você simplesmente cola ela alí e pronto. Agora, e quando você pega aqueles links que vem com infinitos parâmetros vindos de outras páginas/serviços, que quando colados em um notepad, ainda ativam a barra de rolagem?

Resposta: Encurtador de URL.

Básicamente, o que ele faz é o seguinte: Ele pega a url digitada, mapeia em um banco de dados (talvez), e gera uma chave para o mapeamento. É exatamente o conceito da estrutura de dados Map.

Quando você digita a url encurtada, a requisição passa por um serviço que recebe a url, pega o valor correspondente da url, e troca.

Bem simples, e útil.

Acredito que um dos primeiros (se não o primeiro) serviço de encurtamento de URL disponível foi o migre.me, e veja você! foi feito por um tupiniquim!

O Google URL Shortener, tem uma pequena vantagem: Ele armazena uma lista de todos os seus links encurtados, na sua Google Account, assim, toda vez que você quiser encurtar algo que já encurtou, bazinga, você não precisa faze-lo, porque tá lá no seu perfil.

Fantástico né?

sábado, 12 de março de 2011

Mudança de foco

Olá queridos leitores deste pequeno blogueiro incompreendido.

Estou começando outro blog, que será um blog onde eu colocarei mais as minhas idéias malucas e discussões filosóficas.

Vou fazer deste blog um blog um pouco mais técnico, mais sobre jogos, e mais sobre programação.

Daqui pra frente os posts mais "tranquilos, ou sobre a vida" estão no blog linkado alí no "Visite Também" no meu novo blog:

"Mil idéias por segundo" (De um raposquilo hiperativo hahahaha)

Obrigado.

PS: O novo post como é mais "filosófico" está lá.