Node.js no Windows (Parte 2)

Para entender esse post recomendo a leitura da Parte I

Neste post continuo na saga de explicar o Node.js pelo o que ele é, mostrar suas virtudes num ambiente Windows, partindo da premissa que há muita informação sobre o Node.js na web, mas pouca explicando para nós meros mortais usuários de windows como tirar proveito de seu assincronismo.

No fim do post eu coloco alguns links com mais informações para aprofundar o estudo, enquanto isso vamos botar o Node.js na web?

Relembrando: O que é Node.js?

Node.js é um ambiente que permite executar arquivos JavaScript, usando a engine V8 do Google Chrome que é Open Source, acessando recursos externos de forma assincrona, baseado num modelo orientado a eventos, com a finalidade de criar aplicações de rede altamente escaláveis.

Um servidor web de 1 linha de código

No arquivo anterior ou mostrei que é possível executar arquivos javascript na sua maquina local, como se fossem executáveis. Com o acervo de recursos que o Node.js disponibiliza para acessar recursos externos como rede, filesystem, etc.

Crie um arquivo server.njs na sua maquina local e coloque a seguinte linha nele.

require("http").createServer(function(rq,rs){rs.end("Hello World!");}).listen(3000); 

Salve e se você instalou como no post Node.js no Windows: Parte 1 clique duas vezes no arquivo, senão basta executar na linha de comando a instrução abaixo:

node server.njs 

Ao executar abrirá um terminal console sem cursor, pois é o Node.js executando a linha de código esperando uma requisição para executar.

Console NodeJS executando um servidor de 1 linha de código

O receber uma requisição o servidor dispara a function que é passada como argumento da função createServer. Vamos testar isso? Abra o navegador e digite a url http://localhost:3000 e você verá a imagem abaixo.

Browser mostrando o resultado

Integrando com o legado

O código legado é geralmente uma das principais causas de dor de cabeça por desenvolvedores de software, pois sempre quando um desenvolvedor pensa nisso, lembra de acoplamento, código macarrão, falta de arquitetura, arvore de natal, imposição de limites a serem respeitados, além da integração que existe já com outras tecnologias internas e externas ao projeto.

No ambiente Windows o desenvolvimento web é cercado de tecnologias que concorrem entre si, criando um acoplamento grande, tornando inviável descartar ou mudar alguma delas, por exemplo, temos o IIS ocupando a porta 80, hospedando aplicações feitas em ASP, PHP, ColdFusion (?), .NET versões 1.0, 1.1, 2.0, 3.5, 4.0 e 5.0, além do acesso aos mais diversos banco de dados, MySql, MS SqlServer, Oracle, Access (?), etc.

O Node.js quando executa um codigo que disponibiliza um servidor ele precisa ocupar alguma porta para estar disponivel tornando a integração com algum recurso mais dolorosa, ou apenas menos elegante, pois seu servidor web utilizará a porta 80 e sua aplicação terá que usar uma outra porta qualquer, configurar firewall para liberar essa porta, esta porta estará visivel aos usuários que, dependendo da aplicação, pode gerar problemas inconvenientes, entre outros problemas.

Usar o Node.js como um servidor web é possivel, porém atualmente não é recomendado pelo criador dele, pois por mais que essa seja uma das finalidades pelo qual ele foi construido, hoje ele ainda é muito imaturo como uma solução completa, pois há muitas tarefas além de processar dados que um servidor web executa, como servir recursos estáticos como imagens, documentos, videos, ele também precisa reconhecer todos os verbos do protocolo HTTP, cookies, criptografia, HTTPS, tratar multiplos protocolos, etc.

A recomendação pelo próprio criador é ao disponibilizar o Node.js em ambiente de produção, colocar um servidor web na frente do Node.js, enquanto amadurece e surgem mais bibliotecas para suportar tudo que um Web Server precisa, assim o WebServer fica responsável por todo o trabalho pesado e o Node.js fica responsável apenas pelo processamento dos dados e da aplicação.

Infra-estrutura sugerida pelo Ryan

No Windows a infra é parecida porém mudamos o NGINX pelo IIS.

Infra-estrutura no Windows

Porém ainda falta resolver um problema do Node.js no Windows, que é: Como o Node.js irá se comunicar com o IIS?

Para realizar essa comunicação entre os processos foi criado um projeto chamado IISNode criado por Tomasz Janczuk

Instalando o iisnode

Para instalar o iisnode é muito fácil, há os arquivos instaladores que facilitam todos os passos, além de serem úteis, adicionam alguns recursos no IIS.

Node.js (x86)
Instala a ultima versão do Node.js numa pasta ProgramFiles(x86|x64), servindo de base para qualquer applicação, caso você queira usar uma aplicação com outra versão do Node.js há uma opção de configuração que apresentarei mais a frente

Microsoft Visual C++ 2010 Redistributable Package  (x86) | (x64)
O instalador do IIS Node não prosseguirá com a instalação caso sua maquina não posua a biblioteca de componentes do C++, se isso ocorrer aqui estão os links

iisnode for iis7 (x86)(x64)
Aqui está o responsável que permitirá o IIS se comunicar com o Node.js. Você não precisa realmente instalar pois na arquitetura do IIS bastaria adicionar uma referencia no Web.config da aplicação, porém com este instalador ele adiciona esta referencia no Web.config global do .NET, facilitando assim o processo em futuras apps, como também ele checa os requisitos necessários para a DLL funcionar.

iisnode for iis7 express (x86)
Caso use o IIS Express, não testei. Porém as referencias que tenho indicam que a instalação é normal e sem maiores percalços

Após instalar os 3 itens acima nós já poderemos começar a brincar com o Node.js no IIS, agora fica muito emocionante, pois foi o que eu sempre busquei nos meus ultimos 10 anos de carreira. Rodar Javascript eficientemente no servidor.

Já instalado o iisnode só precisamos agora de 2 coisas: uma arquivo web.config para guardar a configurações, o arquivo javascript que o iisnode irá chamar com o Node.js.

Unicos arquivos necessários para o iisnode

O conteúdo do arquivo web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="iisnode" path="server.njs" verb="*" modules="iisnode" />
    </handlers>
  </system.webServer>
</configuration>

O conteúdo do arquivo server.njs

require("http")
.createServer(function (req, res) {
	res.end("Hello, world! Estou na porta: " + process.env.PORT);
})
.listen(process.env.PORT||3000);

Repare que a unica diferença desse servidor de 1 linha de código para a versão que mostramos antes é a variável “process.env.PORT”, pois ela é setada pelo iisnode indicando em qual Named Pipes ele usará para realizar a comunicação com o Node.js.

Outro ponto interessante é que com os passos do post anterior feitos então se não quisermos depender do IIS, basta clicar 2x no arquivo server.njs, afinal todo arquivo .njs está mapeado para executar com o Node.js, que seu servidor estará rodando na porta 3000, pois como “process.env.PORT” será undefined, então o operador “||” indica que se a primeira variável for undefined então usa a próxima que no caso é 3000.

Resultado do iisnode

Se após executar esses passos você for no navegador e ao digitar http://localhost/server.njs, aparecer um erro 500.19 como na imagem abaixo, isso indica que falta o componente URL Rewrite 2.0

Erro 500.19

Para instalar o URL Rewrite 2.0 é simples usar os instaladores a seguir: X86 | x64

Acaba por aqui?

Não. Na próxima parte mostrarei como montar uma aplicação web inteira no Windows usando Node.js através do IIS, interagindo com o ASP.NET MVC, além de se aprofundar no IISNode e apresentar um toolkit que o permitirá criar em questão de minutos uma aplicação do zero.

Mais Referencias

Porque aprender Javascript no ano que vem?

Porque Node.js faz tanto sucesso?

Node.js no Windows: Parte I

Concatenação de Strings em Javascript

Porque você precisa entender?

A concatenação de strings é uma das tarefas que todo desenvolvedor realiza pelo menos algumas vezes por dia, então é de extrema importância entender tudo relacionado a este tema, desde a sua sintaxe, alternativas, performance, visão holistica e tudo mais que você possa colocar na sua caixa mental para resolver problemas de hoje e no futuro.

Sintaxe

No Javascript há 2 formas de realizar concatenação de strings:

  1. Tradicional; Utilizando o operador + para acrescentar uma string a outra e com isso toda a regra matemática vai junto na concatenação.
    var t = "codigo"+ "de" + "teste" + "de" + "concatenação" 

    O código a acima é avaliado pelo compilador Javascript para o seguinte:

    var tmp1 = "codigo" + "de";
    var tmp2 = tmp1 + "teste";
    var tmp3 = tmp2 + "de";
    var t = tmp3 + "concatenação"; 
  2. Array Join; Nesta forma de concatenação de strings, usamos a função join do objeto array para realizar a tarefa.
    var t = ["codigo", "de", "teste", "de", "concatenação"].join(""); 

    No código acima, o uso de memória é mais reduzido, pois não há alocação de memória desnecessária para armazenar os passos intermediários

Performance

O objetivo de apresentar as duas formas é devido ao mundo multicompilador em que vivemos com relação ao Javascript, pois em todas as outras linguagens geralmente utilizamos apenas um compilador para nosso código, porém com o desenvolvimento web tudo é um pouco mais complicado, pois cada browser implementa seu compilador de forma diferente, então o algoritmo de concatenação do Chrome (V8) é bem diferente do Firefox (SpiderMonkey), que por sua vez é bem diferente do IE (JScript).

Nos browsers modernos como Chrome, Firefox, etc, o algoritmo de concatenação de strings usando a forma tradicional (operador +) já está bem maduro e otimizado, porém no IE 6 e 7, o algoritmo Array Join chega a ser 60x mais eficiente do que o tradicional.

Referencias:
Re: String concatenation” – email by Brendan Eich stating that + is faster on modern JavaScript engines.

Node.js no Windows

 O que o Javascript é?

Antes de começar a contar uma breve história do javascript, um ponto a observar é que o Javascript não é uma linguagem puramente da web como muitos imaginam, ela roda localmente como qualquer linguagem script, se você usa Windows no dia-a-dia, assim como eu, ele esteve sempre ao seu lado e você nem sabia.

Exemplo. Você pode criar um arquivo .js, clicar duas vezes nele que ele executará. Claro, quando se escreve um javascript dessa forma o paradigma de programa é outro. Você não tem window, document, DOM, alert, seu JQuery não funciona, as coisas de HTML em geral, você passa a ter acesso a funções que normalmente você não usaria como CreateObject, MsgBox, WScript, que por sua vez não funciona nos browsers, mas a linguagem é a mesma, o mesmo FOR, IF, WHILE, EVAL, FUNCTION, etc. Se quiser mais informações de quais opções estão disponíveis para desenvolver em javascript no Windows você pode acessar o site do MSDN

Guia Referencia http://msdn.microsoft.com/en-us/library/9bbdkx3k(v=VS.85).aspx

JScript on Windows http://msdn.microsoft.com/en-us/library/xazzc41b(v=VS.85).aspx 

Manipulando Arquivos e Diretorios http://msdn.microsoft.com/en-us/library/ch28h2s7(v=VS.85).aspx

Um Breve Histórico

Agora que já desmistifiquei um pouco que Javascript não é uma linguagem só de navegador e você já sabe que ela serve para mais coisas inclusive para realizar tarefas no Windows, vamos a outra aplicabilidade dela, que é o lado Server-side, isso mesmo, usar o javascript para processar nossas páginas HTML do lado do servidor.

O javascript no lado servidor não é algo novo, muito menos uma façanha e nem revolucionário como muitos imaginam. A Netscape, empresa que contratou Brendan Eich, para desenvolver uma linguagem para tudo relacionado a Web (note que Web é tanto o lado cliente, com os browsers, como também é o lado servidor) sabia que a web necessitava de:

  • Linguagem dinâmica, pois cada pagina poderia ter estruturas diferentes;
  • Fracamente tipada, pois os dados principais na Web são texto e haveria conversão o tempo todo;
  • Conversão implícita, pois além do motivo acima, o desenvolvimento deveria ser focado na utilização dos recursos ao invés do conteúdo deles.
  • Derivar de uma linguagem conhecida, para facilitar a migração dos desenvolvedores para a programação para Web
  • Script, para que o desenvolvimento seja relativo a cada página e que não necessite compilação a cada modificação

Nesta época, em torno de 1995, a Netscape junto com Brendan Eich, criaram o Livescript que no ano seguinte, com a junção e aprovação da SUN incluindo-a no processo, pois a Netscape queria dar suporte a Java Applets no seu revolucionário Netscape Navigator, passou a se chamar de JavaScript, numa referencia explicita a linguagem que derivou
seu estilo de codificação. (Esta referencia nota-se até hoje, na equipe da Mozila, desenvolvendo a nova especificação da evolução da linguagem, várias palavras reservadas do Java vão aparecer no Javascript)

Neste momento a própria Netscape viu que a linguagem era muito interesante e já começava a criar seu próprio lado servidor (Server-Side), para rodar seu “LiveScript” que se chamava Netscape Enterprise Server, através do Netscape LiveWire, que rodava SSJS (Server Side Javascript), olha exemplo de código da época.

A Microsoft em 1997 (ou em 1998, não sei agora) também se interessou pela tecnologia e adotou-a em seus ambientes, porém após uma briga com a SUN, pois usava a marca Java, ela foi judicialmente obrigada a mudar o nome da linguagem Javascript que ela usava, então ou ela continuava a usar uma linguagem chamada Javascript ou usava outra linguagem, nesse ínterim ela tentou emplacar um VBScript, sem sucesso e acabou “inventando” uma nova linguagem JScript, que é praticamente igual ao Javascript, só diferenciou naquilo que um juiz federal entende, ou seja, quase nada.

Não se importando se era Javascript ou JScript a Microsoft também ofereceu suporte tanto do lado cliente com seu maravilhoso Internet Explorer (sic) e do lado servidor com as poderosas Active Server Pages (realmente eram poderosas).

Se tudo isso já existia, qual a vantagem do Node.JS?

Como você já sabe o principal objetivo do Node.JS é permitir criar aplicações de rede altamente escaláveis, isso signfica que há alguns desafios físicos a serem vencidos,
como por exemplo o problema das 10000 conexões simultâneas. Além disso, outra grande vantagem é usar o motor V8, que o pessoal no Google criou para o Javascript , pois antes a engine era lenta e buguenta, então veio o Google e deu a turbinada na linguagem tornando-a muito mais eficiente e equivalente a linguagens de peso como C#, PHP, Python, Ruby e Java.

Tá mas e o titulo do post?

OK era necessário contar um pouco do casal para as coisas que virão pela frente façam sentido. Agora vamos ao que interessa. O Node.js foi um projeto que começou no Linux, com a galera do mundo open source (novidade?), porem mais uma vez a Microsoft viu  e se interessou pelo projeto, assim destacou 2 profissionais para colaborar ativamente a tornar o Node.js fluente no Windows (afinal ela vende Windows certo?), ajudou com conhecimento, recursos, acesso a informações privilegiadas, assim removeu-se os acoplamentos ao kernel do Linux, sem perder sua performance que é muito importante, promovendo uma maior adaptabilidade  aos usuários Windows.

Com isso existe duas formas de se instalar o Node.js no Windows:

  1. Baixa o código fonte, descobre que precisa de um emulador POSIX (msys ou cygwin), tenta compilar, descobre que precisa baixar uma parafernália que você não faz idéia para que serve, tenta de novo, a compilação falha pela falta de alguma variável de ambiente, tenta de novo, assim sucessivamente.
  2. Estilo WIN: Baixa o arquivo executável, clica duas vezes e funciona.

Na primeira opção, uma vez conseguindo, ela te abre mais opções de plugins / ferramentas / frameworks desenvolvidos pela comunidade, mas isso já está mudando, como o NPM que só funciona no estilo UNIX.

Como a maioria das coisas que realmente importam, estão funcionando para os dois modos, então vou começar pela segunda opção e que mais se aproxima da nossa realidade.

Passo-a-Passo

  1. Acesse o seguinte endereço http://nodejs.org/#download
  2. Baixe o executável para Windows
  3. Clique 2x no arquivo node.exe

 

Não acredito que você me fez ler isso tudo para apenas três passos

Não, esses 3 passos foram apenas para mostrar funcionando porém para executar arquivos com código javascript e integrar ao ambiente são necessários mais passos, que explicarei mais adiante.

Quando você clica 2x no arquivo node.exe, ele abre um console e coloca um cursor piscando, este console é o REPL (Read-Eval-Print-Loop), ou seja, ele lê o que você escreve, avalia se é um javascript válido, imprime o resultado caso haja e começa tudo de novo, esperando você escrever a próxima instrução. Isso nos permite programar e ver o resultado na tela, semelhante ao que algumas IDE’s fazem, por exemplo, o Visual Studio.

Mas e se quisermos executar um arquivo? Não tem problema entra no console e digita “node exemplo.js”

Tem como eu não depender do console?

Claro, essa é a finalidade do artigo. Primeiro vamos voltar ao conceito. Se lembra que no começo desse artigo eu falei sobre o paradigma de desenvolvimento local é diferente de desenvolver para web? Então com o Node.js é a mesma coisa, haverão keywords que tem no Node.js que não terá no browser, o código é javascript mas os ambientes não são os mesmos. Veja na imagem do REPL que eu escrevi propositalmente um “alert” e ele retornou que era “undefined”, porem escrevi “process.versions.node” e retornou “0.5.8”, já que a palavra “process” é reservada no Node.js, que declara informações do processo que está em execução.

Então para facilitar o reconhecimento desses arquivos Node.js, eu passo a nomeá-los com a extensão “njs”, isso não é obrigatório, porém mais na frente quando você tiver inúmeros arquivos “js”, não saberá reconhecer facilmente no seu projeto se aquele “common.js” é um arquivo com funções para o browser, ou para suas páginas no servidor, ou são funções matemáticas e de manipulação de string, genéricas que servem para os dois ambientes.

Os arquivos javascript que são usados nos projetos web, usados no HTML e browser eu continuo usando a extensão “js”, até mesmo por causa dos arquivos já existentes, porém a partir deste momento os arquivos que uso através do Node.js eu uso a extensão “njs”.

Com essa convenção criada, fica mais fácil integrar ao ambiente, pois bastará associar esta extensão ao Node.js, que o Windows reconhecerá quando eu clicar 2x no arquivo NJS, ele executará usando o Node.js. Para associar a extensão basta executar no console do windows (CMD), as duas linhas abaixo, prestando a atenção para mudar o caminho do executável para onde você colocou o arquivo original.

REG ADD “HKEY_CURRENT_USER\Software\Classes\joyent.node.js\shell\open\command” /ve /d “c:\node\node.exe %1″ /f

REG ADD “HKEY_CURRENT_USER\Software\Classes\.njs” /ve /d “joyent.node.js”

 

Uma vez feito isso, prontinho seus scripts estarão executando no Windows perfeitamente.

Em breve, publicarei a segunda parte deste post explicando como usar o Node.js como um servidor web.

Como encontrar sua paixão rentável?

Ultimamente andei lendo alguns posts que me fizeram refletir bastante sobre como eu estou navegando na maré da vida, afinal essa vida sempre nos leva a algum destino. Você sabe qual é o seu destino?

Quando você não sabe para onde vai qualquer vento pode mudar seu destino. 

O destino não é o caminho, é o fim. Você provavelmente já deve ter escutado alguém falar alguma dessas frases quando acontece algum revés: “Isso foi o destino”, “Deus quis assim”, “O destino me levou a isso”, mas essas frases ocultam a responsabilidade
que nós temos ao tomar decisões.

Imagine a seguinte cena: você acorda cedo, levanta rápido da cama, super motivado com o problema que te atormenta desde ontem à noite, doido para resolver ao chegar ao trabalho. Você trabalha com afinco, por horas, às vezes até mais que a média da equipe, mas isso não é um problema para você, pois as horas voam quando você está no trabalho. Você freqüentemente está no estado mental, chamado fluxo, rapidamente se perdendo no tempo e no espaço. O trabalho passa não ser um trabalho, é pura paixão, puro tesão em forma de atividade física/mental.

Agora se seu trabalho é chato, sem sal, muito cinza, repetitivo e burocrático. Você, todos os dias, acorda se arrastando, totalmente desmotivado, você realmente precisa encontrar um novo trabalho. Continuar no emprego atual apenas continuará a torná-lo
infeliz, não realizará nada de valor para você mesmo, como também estará desperdiçando seu potencial como ser humano, sendo um substituto de maquinas, já que seu trabalho virou mecânico.

O ponto chave não é parar de fazer o que faz hoje, mas descobrir como transformar o que você mais gosta de fazer em algo rentável e recompensador. 

Interessante notar que quando tomamos decisões motivadas por amor tendemos a acreditar que foi por uma boa causa, mas sempre é assim. Quando somos motivados pelo medo, não pensamos muito nas conseqüências então acreditamos que era a única opção, que
também nem sempre é assim. Logo tanto agindo por medo ou por amor, temos uma forte influência do nosso instinto mais primitivo, mesmo que estejam disfarçados de outros sentimentos como dor, excitação, vergonha, paixão, egoísmo, ganância, gula, etc.

Eu consegui ser pago para fazer algo pelo que amo, começando pelo motivo inverso. 

Analise friamente as emoções, para depois anunciar calorosamente suas razões, assim estabeleça metas muito CLARAS, EXPLICITAS e ESPECIFICAS para aquilo que você deseja emocionalmente, como por exemplo, no trabalho do dia-a-dia.

Seu preguiçoso é CLARO que se pudéssemos não trabalhar, ficar em casa coçando o saco, a gente faria. O mundo não gira em torno do seu umbigo e você precisa colaborar com seu trabalho. Você planta seu arroz, feijão, verduras, cria sua vaca, porco, frango, fabrica sua roupa, conhece medicina profundamente, capaz de viver isolado no mundo? Então levanta essa bunda da cadeira e faça MUITO BEM algo que ame.

Agir por medo é instintivo, agir por amor é satisfatório, mesmo quando erramos somos bem resolvidos com nós mesmos, afinal para o mundo não importa a motivação o que importa é a ação. Porém para nós a única coisa que importa é a VERDADEIRA motivação.

Aqui coloco algumas sugestões para você encontrar sua paixão:

  • Já há algo que você ama? O que você realmente é MUITO BOM, de forma que as pessoas sempre se lembram de você? Qual coisa que você já faz onde as pessoas imediatamente associem sua imagem a ela? Atualmente há algum hobby que você já ama fazer?
  • Não saia do emprego ainda. Quando você está desmotivado, significa que um dia você já esteve motivado. Anote num papel tudo que te motivava e que não existem mais, verifique se tem como essas razões voltarem a existir.
  • Passe um final de semana sozinho. Muitas vezes a solução está na nossa frente, mas não enxergamos, estamos sempre cercados de stress, trabalho, família, contas, responsabilidades, etc. Permita-se um tempo sozinho para refletir sobre o que você REALMENTE estaria disposto a se dedicar de corpo e alma. Quando eu estava num momento parecido com esses surgiu a possibilidade de fazer uma viagem para uma conferência sobre técnicas e metodologias referente o meu trabalho, então matei dois coelhos com uma tacada só. Eu realizei um aperfeiçoamento profissional e tive um tempo sozinho que tanto precisava, resultado? Voltei de viagem com inúmeras idéias na minha cabeça, conheci uma pessoa mais experiente passando pelos mesmos problemas que eu e com isso aprendi muito com os erros dele.
  • Bote tudo no papel. Não fique somente no mundo das idéias, coloque tudo num papel e ande sempre com ele, leia constantemente e revise sempre que achar adequado. Este passo é MUITO IMPORTANTE, pois ele será necessário no momento em que você precisar estabelecer metas.
  • Realize um Test-Drive. Antes de chutar o pau da barraca, jogar tudo pro alto e viver a vida de fortes emoções, realize um teste antes. Desenvolva o talento necessário, aprenda fazendo, vivencie o trabalho para saber se você REALMENTE AMA isso e estará disposto a passar 8 ou mais horas por dia realizando essas tarefas.
  • Analise opções paralelas. Muitas vezes o que realmente amamos não é uma atividade laboral, ou não seria facilmente transformada em trabalho diário, então analise opções de vivenciar seu amor com atividades similares. Por exemplo, vamos supor que você AMA ler quadrinhos, mas não possui talento de desenhista (que seria sua pretensão imediata), então atividades paralelas seria abrir uma loja virtual que só vendesse quadrinhos, ou então ser repórter especializado nesse ramo, as vezes você pode começar fazendo o mesmo trabalho que faz hoje, porém numa outra empresa que fosse desse ramo, assim fica mais fácil realizar a progressão na sua carreira, sem muitos riscos.
  • Peça ajuda. Acredito que existe possibilidade de você ter chego até aqui e ainda não encontrou definitivamente o caminho do seu dom, não desista. Pare o processo por uns dias, dê uma pausa para realizar suas idéias, checar se o amor não era apenas fogo de palha, uma paixão repentina que momentaneamente te cegou. Converse com amigos, família, chefe, sobre características importantes do seu perfil profissional, isso irá te ajudar a enxergar coisas aparentemente obvias. Por exemplo,
    vamos supor que você ama comédia e amaria ser comediante, porém não consegue entender o porque algumas piadas até são divertidas mas você não emplaca na atividade, então conversando com amigos você pode descobrir que a verdadeira razão do insucesso, não são suas tiradas cômicas, mas a sua forma de se vestir, as palavras utilizadas, sua forma de se relacionar com as pessoas quando não está fazendo comédia, essas são coisas que você provavelmente não perceberia sem ajuda de fora.

Os passos que coloquei acima podem aparentar muito trabalhoso, ou até desnecessários, porém eu tenho certeza absoluta, que são caminhos que levam você mais próximo do seu santo graal, certeza pois foi o que aconteceu comigo. Tudo que escrevi aqui não são apenas pensamentos em que acredito, foram coisas que eu usei, experimentei, vivi e posso eliminar aquilo que não deu certo.