Hadoop on Windows

Senhoras e Senhores, leitores desse humilde blog, preparem-se (novamente) para algo grandioso que está para acontecer nesse instante…

[Rufam os tambores]

Vamos explorar o magnífico mundo do Big Data!

[Explosões de fogos de artifícios, mulheres elevam seus filhos para que possam ser tocados por algo tão superior e magnífico]

E nada melhor do que começar do início, não é mesmo!?

Sinceramente, tudo que eu li até o momento sobre o “todo poderoso Hadoop”, foi algo completamente confuso. Na verdade, não entendo o por que de algumas explicações, serem tão mais complexas quanto a solução em si. E imagino que você esteja aqui nesse blog por esse exato motivo.

Em um post futuro explico as tecnologias que estão envolvidas no Hadoop, por enquanto vamos ficar só na instalação

[Modo easy primeiro né amigão, pra entrar no jogo]

Pré-Requisitos

Hadoop foi escrito em Java, portanto você deverá ter o Java 6 ou superior instalado em sua máquina.

[Se você é um CSharpiano como eu, entendo a dor que está passando nesse momento]

E não pense que para por ai!

Windows, foi deplorávelmente injustiçado, restando-lhe apenas a mera opção de podermos ter um ambiente de desenvolvimento rodando nele.

[Mulheres choram, um fina garoa cobre seus rostos enxugando-lhe as lágrimas que escorrem até tocar o chão]

Instalação

Faça o download da versão mais estável em http://hadoop.apache.org/releases.html e descompacte em qualquer local.

E como já sabemos, o Hadoop foi desenvolvido em Java, portanto você precisa dizer onde é que o Java está instalado em seu sistema.
Se você já tem a variável JAVA_HOME configurada nos ambientes de variáveis do sistema, isso já quebra um galho.

É conveniente criar uma variável de ambiente que aponta para o diretório de instalação do Hadoop (HADOOP_INSTALL),

Na variável Path, você coloca o caminho da pasta descompactada do Hadoop

Crie uma pasta no C: chamada HDP e jogue a pasta do Java lá.

Lá na pasta onde está o Hadoop, vá na pasta etc/hadoop/hadoop-env e edite esse arquivo na linha 25 e coloque o caminho do java, que no meu caso, ficou C:\hdp\Java\jdk1.8.0_05

Easy-Peasy!

Advertisements
Tagged

BKPER, o aplicativo que não é pra backup mas que salva sua vida !

Alguém ai usa ou já ouviu falar ou então conhece, o BKPER ?

Nope ?

Antes, vou a uma breve história sobre minha pessoa e essa grande descoberta !

 

MOST WANTED !

Então… me considero uma pessoa desorganizada, mas claro que geralmente eu me acho na minha bagunça, sempre sei onde está tudo, mesmo se aos olhos de outra pessoa parecer uma zona!

E graças a essa…. digamos… minha característica e jeito de “organização” (sic), muitas empresas hoje em dia me procuram !

Vivo, Fumec, a empresa que gera os boletos do condomínio / aluguel, Max Hospedagem, Credicard, Itaucard, etc…

e tudo isso pode ser explicado rapidamente por 2 motivos

– Faço a mínima ideia de onde esteja o boleto pra pagar
– Faço a mínima ideia de quantas empresas eu tenho que pagar alguma coisa

Pensando nisso, cansado de pagar multas por atraso, o que eu fiz ?
uai, exatamente o que qualquer pessoa faria… buscar um aplicativo que fizesse essa gestão financeira por mim !  😀

A Procura da Batida Perfeita

Minha busca insaciável durou meses, alternando entre buscas solitárias na web  e a velha opinião de amigos… mas todos os aplicativos encontrados eram genéricos de mais, cheio de opções inúteis ou então eram justamente tudo isso porém ao contrário!, não tinham nada!

Próximo a Tatooine eis que surge a @Nimbus

A @Nimbus simplesmente, olhou aquela multidão, sem rumo, perdida, no limbo, e bateu o seu cajado, abrindo o oceano ao meio, e revelou o caminho escondido a ser seguido !! [ar de superioridade de @Nimbus] Aleluia irmãos!

XOqcXt6

 

Encontrado nas profundezas, surgido das trevas mais obscuras, das cavernas de abraão, o grandioso aplicativo que é na medida certa para ser seu gerente de finanças !!

[aplausos, aplausos, mais aplausos senhoras e senhores]

[Ok ok que o nome não é lá tão sugestivo, qualquer idiota acharia que BKPER é um programa pra fazer… { surpresa surpresa } BACKUP!!]

 

DurGT

Pregando a verdadeira palavra !

mas tudo bem, voltando ao BKPER !

Vééééi… outro nível, sem essa de telinha de CRUD, daquela mesmisse, daquela coisa massante de cadastrar, listar, excluir, atualizar, coisa tão anos 90 que até hoje muitos ainda estão nessa!

Sem CRUD, sem menus pra listar, excluir e blá blá blá, um layout que é basicamente o mesmo do Gmail ! vejam com seus próprios olhos clicando aqui.

(E convenhamos, quem hoje em dia não tem o Gmail como e-mail principal, não merece nem ao menos ter atenção…vire gente primeiro)

E um grande aviso aos anti-sociais, excluídos da sociedade com seus Windows Phone… não se preocupem pois vocês foram lembrados ! 🙂

BKPER possui aplicativo para iOS, Android e para os excluídos anti-sociais !

Com a experiência que estou tendo com o #bkper,  #partiu_Cloud ! 🙂

Off-Topic: Na boa… Bkper ? Eu usaria um nome mais… dominante hahaha EVOQUE… ainda farei um aplicativo com esse nome, mas não pode ser um algo qualquer, seria um desperdício de nome pra aplicativo hahahaha similar ao que vemos muito hoje em dia… alguma pessoa feia porém com olhos azuis ou verdes, quanto desperdício de olho verde ou azul, já não é lá tão comum por aqui em minas, e quando vemos, desperdiçado…

#Nimbus has my respect now !

#Shut up and take my money !

 

pxSk749

Tagged , ,

Teste Unitário em Javascript no modo Easy

Existe e sempre existirá aqueles desenvolvedores céticos aos poderes do Javascript e suas bibliotecas.

Shame on them!

Suas vidas serão poupadas graças a misericórdia do todo poderoso deus Javascript.

[Feeling like Maomé batendo um cajado e abrindo caminho sob o mar para esses céticos pecadores encontrarem o caminho certo e começarem a pregar a palavra!]

Esse processo de exorcismo pode levar mais de um post, mas começarei com esse!

Testes Unitários em Código Javascript!

Sim, meu caro leitor, ele existe!

Existem algumas ferramentas que fazem testes unitários, mas hoje irei falar sobre uma em específico, o QUnit.

Mas por que QUnit ?

Pela experiência que tive trabalhando com ela, mas nada impede que venha trabalhar com Jasmine um dia!

Eis o nosso protagonista da noite!

Bruce Buffer style

“Introducing first, fighter at the blue corner, a professional tool for unit test purpose using TDD approach, weight in 83.4 KB, the undisputed, QUnit!”

Para efetuar o download dos arquivos necessários para associar o Qunit à sua aplicação, você pode acessar o site oficial da ferramenta clicando aqui e fazer o download do arquivo qunit-1.14.0.js e de seu CSS qunit-1.14.0.css

Vamos a receita!

1- Crie uma Web Application MVC 4 no Visual Studio 2012 (ou outra versão)

2- Na pasta Scripts coloque o arquivo qunit-1.14.0.js

3- Na pasta Contents coloque o arquivo qunit-1.14.0.css

Com isso os arquivos fontes do QUnit já estão associados à sua aplicação.

4- No seu HomeController (caso esteja usando MVC), crie um novo método chamado TestesUnitario e sua respectiva View herdando o layout de _Layout

5- O código na View TestesUnitario é bem simples,

<link href="~/Content/qunit-1.14.0.css" rel="stylesheet" />
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<script src="~/Scripts/qunit-1.14.0.js"></script>

6- Precisamos de um arquivo Javascript na qual conterá as regras de cada teste que criarmos. Irei chamá-lo de Teste.js e ficará na pasta de Scripts.

7- Vou colocar um código bem simplório nesse arquivo Testes.js apenas para vermos o QUnit em pleno vapor!

QUnit.test("Meu primeiro teste com QUnit", function (assert) {
assert.ok(1 == "1", "Passei!");
});

8- Rode sua aplicação, e acesse /Home/TestesUnitario

Você deverá algo semelhante a imagem abaixo

qunitBem simples não ?

Modo Easyiest OFF !

Vamos “dificultar” os testes, mas sairemos do modo Easyiest para o modo Easy, nada de muito excepcional ainda para não traumatizar ninguém.

Desenvolvendo Códigos Testáveis

Pelo fato de que o Javascript foi criado e é mantido pelo tinhoso 7 peles, com certeza você viu códigos como o abaixo

$("#botao1").click(function() {
$("#div").text("Clicou no botao!");
});

Funciona perfeitamente, lindo! Não merece Palmas, merece Tocantins inteiro!

Mas, impossível de testarmos isso!

O ideal será sempre separar em funções, na qual poderia ficar conforme abaixo, existem N maneiras de se refatorar esse trecho, mas vou deixar apenas uma maneira aqui.

$("#botao1").click(function() {
$("#div").text(InsereTexto());
});

function InsereTexto() {
return "Clicou no botao!";
}

 E o conceito aqui é, você não irá testar o comportamento do clique, e sim o retorno que o clique tem que ter!

Nesse caso, a função InsereTexto() é a grande responsável por tudo, então o teste será se a função retorna exatamente “Clicou no botao!”.

QUnit.test("Meu segundo teste com QUnit", function (assert) {
assert.equal(InsereTexto(), "Passei!");
});

Sem muito esforço conseguimos efetuar testes unitários em código Javascript !

VAvPeeV

Aplicação LocalHost acessível na Web, pode isso Arnaldo ?

Quem nunca implementou algo no código e rodou a aplicação em localhost, mas não tinha, ATÉ ENTÃO, como disponibilizar esse protótipo na web ?

(Ok, ok, se você pensou em fazer uma publicação em um servidor de homologação, ou simplesmente, “sobe ai para o servidor de produção, I know what I’m doing bitch”, ou se chama Fabrício ‘é só publicar no servidor’ Gomes¹, para seu governo não estamos falando de algo desse tipo!).

O Gerente enlouqueceu amigo!

Aqui é assim, nós oferecemos o que o cliente quer, por um preço justo!

O que queremos ?

“Poxa, eu gostaria de expor meu web server local na internet e capturar todo o tráfego”.

Prazer, me chamo NGROK

Eis o cara, uma fantástica ferramenta, com uma instalação chata e de grande utilidade.

Off-Topic: Não sei se é uma impressão só minha, mas sempre acho essas ferramentas desse submundo free, um tanto quanto complicadas de instalar. Sou mal acostumado com Next Next Finish.

Instalação

Vou separar em 2 seções essa instalação. É chata mas dá pra levar!

O Pré requisito básico aqui, é ter o NodeJS instalado em sua máquina, então a seção 1 é a respeito do NodeJS, e a seção 2 já vai para NGROK.

1- Se você chegou por agora no mundo, e não tem ideia se esse tal de NodeJS está instalado, você pode ir no seu prompt de comando, e digitar

node -v

Caso tenha retornado a versão instalada, obviamente é porque está instalado!

Caso esteja instalado, tente agora o comando

npm -v

E que também deverá retornar a versão caso esteja instalado.

Caso não esteja instalado, você pode efetuar o download do NodeJS clicando aqui

2-  Instalar o NGROK é bem simples, basta executar o comando abaixo em seu prompt de comando do windows.

npm install ngrok ​

Uma vez instalado, rode o comando abaixo

ngrok 8080

Caso não dê certo, coloque o caminho completo do ngrok, que no meu caso fica em
C:\Users\lucas\node_modules\ngrok\bin\ngrok 8080

Uma observação crítica!

Usarei a porta 8080 no comando NGROK porque irei startar o Tom Gato (muito conhecido também como TomCat no mundo Java), que por default usa a porta 8080…. puro comodismo…

Voilà !

2

Inversão de Controle (IoC)

Senhoras e Senhores leitores desse blog, preparem-se para um momento marcante desse…blog….

[rufam os tambores]

Vamos falar sobre Inversão de Controle e Injeção de Dependência !!

[Fogos de artifícios explodem, papéis picados e coloridos caem sobre a multidão e a multidão vai ao delírio!]

Ao ler isso, você pode cair em 3 situações

1- Você vê as pessoas vibrando em volta de você, mas ainda não sabe o porque de tanta euforia. Você ainda não tem certeza do que venha ser Injeção de Dependência. Então, limpe os papeis picado que cai sobre seus ombros e vamos fazer parte dessa multidão que vai ao delírio, com todos sabendo exatamente do que estamos falando!

2- Você vibra com um soco no ar! E diga-se por passagem, Já era tempo !!

3- Você já sabe tudo sobre isso e zomba aqueles que estão vibrando, pulando, como se fosse uma grande novidade. Ficará só mais um momento nesse blog para vangloriar-se de sua superioridade! Noobs!

Por que toda a galera foi ao delírio ?

Para explicar o conceito de Inversão de Controle, vamos a um exemplo simples.

Vejamos o Controller abaixo

public class ClientesController : Controller
{
      public ActionResult Index()
      {
            var cliente = new Cliente();
            var todosClientes = cliente.TodosClientes();
            return View(todosClientes);
      }
 }
 

O código acima compila e executa sem nenhum erro, isto é, supondo que temos um método chamado TodosClientes que nos retornaria do banco de dados todos os nossos clientes cadastrados.

What’s the Big Deal ? O que há de errado então ?

Bom, eu, particularmente, não diria que há algo errado, mas diria que está fora dos padrões de qualidade. Minha opinião!

O problema no código acima é o que chamamos de Alto Acoplamento (lembrando que sempre buscamos desenvolver um código de Baixo Acoplamento e Alta Coesão).

Fazendo uma rápida análise no código acima, podemos listar as seguintes responsabilidades da classe ClientesController:

1- Ela instancia um Cliente.
2- Está buscando todos os clientes da base.
3- Passa todos esses clientes para uma view e retornar a view.

Agora vamos listar o que há de mal nessa classe.

1- Ela cria uma instância de um Cliente
Ao instanciar um cliente na nossa classe ClientesController criamos uma dependência da classe Cliente, o que faz com que qualquer alteração no cliente, afete diretamente o nosso controller, o que certamente prejudicaria a manutenção do código.

2- Está buscando todos os clientes da base de dados
Vamos pensar no teste unitário nesse caso. Os testes unitários devem ser independentes de conexão. Ao testarmos a classe Controller, o que aconteceria?

Temos uma forte dependência com o nossa conexão com o banco de dados para para que seja possível o retorno dos clientes, o que impossibilitaria mockar o Cliente.

Como Resolver ?

E é aí que entra a Inversão de Controle, em outras palavras, vamos inverter o controle na classe ClientesController, tirando qualquer responsabilidade vinculada à classe Cliente, e passaremos isso para uma outra classe, ou interface.

Mas de que Modo? Como faço essa inversão de controle ?

Injeção de Dependência!

Existem 3 maneiras de fazermos a nossa famosa injeção de dependência

1- Via Construtores
2- Nas Propriedades
3- Via Interface:

Então vamos praticar cada um deles, editando o nosso código inicial

Primeiro vamos injetar dependência com Construtores

public class ClientesController : Controller
{
     private ICliente _cliente;
     public ClientesController(ICliente cliente)
     {
          _cliente = cliente;
     }
     public ActionResult Index()
     {
          var todosClientes = _cliente.TodosClientes();
          return View(todosClientes);
     }
}

Com esse código, você já ganha um novo amigo!, o cara lá do teste! Easypeasy fazer amizades !!

Agora vamos ver como ficaria a injeção de dependência utilizando as propriedades, Getters e Setters

public class ClientesController
{
    private ICliente _cliente;
    public ClientesController()
    {
    }
    public ICliente Cliente
    {
        get  {
           if (_cliente != null)
               return _cliente;
        }
        set  {
           meuPedido = value;
        }
    }
 }


Bom, e temos alguma restrição de quando usar um e quando usar outro método ?

Pode-se dizer que a injeção de dependência por propriedades é preferível quando os construtores não possuem nenhum argumento, o que faz com que seja bem fácil você criar o objeto em produção e testá-lo.

Mas vamos eleger um vencedor aqui então!

Meu voto vai para a injeção de dependência via construtores.

Por Que ?

Uai, porque com isso eu garanto a ordem de inicialização, o que previne uma dependência circular em meu projeto, enquanto que com injeção de propriedades você não saberia bem ao certo em qual ordem você deve chamar cada get/set.

Bom, outras opiniões, serão bem vindas nos coments !!

até a próxima !

Métricas de Coesão Baseado na Orientação a Objeto – Parte 1

Pessoal, como esse é o meu primeiro post no blog, gostaria de começar a falar um pouco sobre a tão falada Programação Orientada a Objeto.

Quando comecei a minha jornada na área de programação como estagiário há alguns anos atrás, e não tinha conhecimentos sólidos em Orientação a Objeto, mas estava encarregado de codificar algumas partes de um sistema de grande porte para um cliente chave em uma fábrica de software.

Ao final da minha tarefa, meu código foi revisto por um analista mais experiente e ouvi ele dizer que meu código estava com baixa coesão e alto acoplamento, e pela minha falta de experiência na época, fiquei sem entender o que ele quis dizer.

Atualmente, meu maior foco é deixar o código de acordo com os paradigmas da Orientação a Objeto.

Mas como saber se meu código está coeso e desacoplado ?

E é aí que entram as métricas que verificarão a coesão e acoplamento do nosso código. Sabemos que, métricas são quantitativas, portanto o resultado da análise será um valor, que veremos logo abaixo o que ele significará para nós.

Como são várias as métricas existentes e cada uma com suas particularidades, nesse primeiro post vou tratar de falar apenas da métrica chamada Lack Coehsion of Methods (LCOM), mas falarei nos posts seguintes de outras métricas muito utilizadas no mercado (por esse motivo esse post está classificado como ‘Parte 1’).

A métrica LCOM é definida por ser uma contagem dos pares de métodos na qual a similaridade é 0 (zero).¹

Como calcular a coesão do meu código de acordo com a métrica LCOM ?

A fórmula do cálculo é

LCOM = P = NP – Q

Onde:
P é o número de métodos que não compartilham atributos
Q é o número de métodos que compartilham atributos

NP é dado pela função
M! / 2! . (M – 2)!

sendo M o número de métodos existentes na classe

Exemplo de classes

Exemplo de classes

Podemos ver nessa imagem 4 métodos que são representados pelos quadrados, e 4 atributos que são representados pelos círculos, sendo que o atributo a1 é compartilhado pois o método m1 e m2 o acessam.

LCOM = (M! / 2! . (M – 2)) – 1
LCOM = (4.3.2.1 / 2.1 . (4-2)) – 1
LCOM = (24 / 4) – 1
LCOM = 6 – 1
LCOM = 5

Quanto maior o valor encontrado, menor a coesão, e isso indica um design mal elaborado.

Referências
¹ http://www.computing.dcu.ie/~renaat/ca421/LCOM.html
² http://www.ece.rutgers.edu/~marsic/books/SE/instructor/slides/lec-16%20Metrics-Cohesion.ppt