Friday, September 18, 2015

MVP - Empreendedorismo

O que é?
É um produto mínimo víavel(do inglês Minimum Viable Product). É uma estratégia de criação de produto. É a proposta de valor do seu negócio, que você deverá entregar ao cliente, porém na forma mais enxuta possível, ou seja, se você imaginou lançar seu produto com dez funcionalidades, corte para uma ou duas.

Qual motivo disso? Sabemos que você "tem a melhor idéia", mas o restante do mundo, compartilha deste mesmo problema?
O principal objetivo de se criar um MVP, é permitir a experimentação de uma proposta de valor, e por este motivo, é crucial incluir métricas (e forma de medi-las) em seu sistema.

Para isso, trace um "caminho" de sua proposta de valor até objetos tangíveis do seu sistema. Se, por exemplo, você acha que as pessoas estão dispostas a contratar um serviço de limpeza de gaiolas de pássaros, uma de suas métricas obrigatoriamente precisa ser o número de vezes que os clientes clicam em "comprar", afinal, dinheiro é importante e apenas usuários pagantes serão "verdadeiramente sinceros".
Lembre-se de deixar canais de comunicação/feedback sempre visíveis ao seu cliente além de incentiva-los a usa-los.

A recompra também é uma métrica importante, pois se o seu cliente fez uma assinatura, mas a cancelou,  sua obrigação descobrir o que motivou o cancelamento. Isso geralmente inclui falar diretamente com seu ex-cliente.
No exemplo acima, o que pode acontecer é seus clientes falarem: "Preciso deste serviço, porém o cheiro do produto que vocês usaram é muito forte. Fiquei com medo de deixar meus pássaros doentes.". Logo, além de trocar o produto, você também pode decidir deixar claro no seu site que estará usando um produto "inodoro e saudável", já que ficou claro que isso é importante para seus clientes.

Usando este mesmo exemplo, do que adiantaria ter criado todo um sistema para "administração de pássaros de clientes", se seus clientes não estão dispostos a te pagar nem por uma limpeza de gaiola? (que pássaros você vai administrar se não existem clientes?).
Invés de incluir tudo em seu sistema, desenvolva apenas o importante para seus clientes e execute o restante das ações manualmente. Sabe a administração dos pássaros? Uma planilha pode ser suficiente.


Quando devo fazer meu MVP? E quando devo optar por uma solução mais completa?

O Facebook não foi a primeira rede social, mas foi a que se consolidou no mercado, por quê?

A regra é: seja o primeiro, ou seja o melhor. Você nunca será o melhor sem levar em consideração o que as pessoas querem. Quem define o melhor produto não é você ou seus colegas, mas sim o mercado.

A criação do MVP te ajuda nesses dois pontos. Seu curto tempo de desenvolvimento ajuda a chegar primeiro no mercado, e possuindo algo bem feito e projetado, permite lançar novas funcionalidades em um curto espaço de tempo, possibilitando novos experimentos para compreensão do seu público, o que te levará a construir o melhor produto no mercado.

Quase 70% das grandes startups americanas começaram com uma idéia completamente diferente da que as levaram até o topo.
Quando se trata de aplicativos, pode-se economizar muito tempo e energia lançando sua idéia apenas para uma das plataformas. Obviamente escolher qual plataforma usar para o lançamento não é uma tarefa fácil, pois o perfil dos usuários de cada plataforma não é exatamente o mesmo.

Não estamos falando para você esquecer todas as funcionalidades restantes, muito pelo contrário, mas trate-as de forma isolada, para testar de fato, através de resultados, se sua nova funcionalidade é desejada por seus clientes.
Como você não quer abrir espaço para seus concorrentes, é melhor realizar o máximo de experimentos possíveis, não é mesmo? Para isso, você deverá lançar novos experimentos sempre que possível. Não importa se a funcionalidade não está totalmente pronta, o que importa é ter "alguma certeza" que existe alguém disposto a pagar por ela.

Monday, August 17, 2015

Aula: Lógica, Tipada, Dinâmica - Capitulo 1

Olá queridos alunos, hoje iremos embarcar nessa série de aulas que irá cobrir tudo para você, que quer começar a programar, ou para você, que já sabe programar uma linguagem dinâmica e quer aprender algo mais fortemente tipado, ou vice-versa. O intuito desse curso é começar com os básicos de lógica de programação e mostrar exemplos de código em Java e Javascript, que apesar dos nomes, são MUITO diferentes, e vai te dar uma boa base para saber como se virar com ambos paradigmas em qualquer problema.

Supere o Fracasso

Ok, esse subtitulo está bem "clichê", mas é isso mesmo, todo bom programador começa vive se lascando o tempo todo, não consegue instalar as ferramentas necessárias, o programa dá pau e ele não faz idéia do problema, e muitas vezes tem que assumir que não sabe e pedir ajuda. Mas a partir de agora sua personalidade irá mudar, toda vez que você sentar à frente do computador para programar terá que encarnar o Falcão (Sylvester Stallone), ao encontrar uma dificuldade vai virar seu bonézinho pra trás e... procurar o problema no StackOverflow.com, porque ninguém nasce sabendo. Aliás, falando nisso, aprenda inglês e deixe de procurar no google em português.

Compilada x Interpretada

Todo software é formado por uma sequência de instruções que serão lidas e executadas, agora imagina se escrevêssemos as instruções como escrevemos um pedido para um amigo, o computador precisaria ser muito inteligente e gastar muitas horas para executar algo básico, por isso precisamos ajuda-lo. 
A grande linguagem de programação C é compilada para ser lida em baixo nível, quero dizer, o compilador irá transformar algo que nós entendemos em algo que a máquina pode entender rapidamente, gerando um arquivo executável, por este motivo C é tão rápido. Por outro lado tempos o Javascript, sua velocidade de execução não se compara ao C, é uma linguagem interpretada, não precisa ser compilada antes de executa-la, o interpretador irá ler da mesma maneira que nós lemos e executar na hora.
Mas então qual a vantagem do javascript? Existem muitas vantagens em linguagens interpretadas: Muitas vezes compilar um software leva tempo, linguagens interpretadas são mais livres, existindo menos regras que limitam a criatividade, e as vezes o ambiente não suporta uma linguagem compilada.
E o Java, onde se encaixa? Bom, iremos considerar que o Java é compilado, mas ele não é como o C, existem outras camadas, mas não vou entrar em detalhes agora.

Um método

O método é uma ação em um programa, neste caso irá somar dois valores e retornar o resultado.
Veja as palavras reservadas do Java: private, int, return. E as palavras reservadas do javascript: var, function, return.
Quando dizemos "int resultado" ou "var resultado" estamos declarando uma variável, variável é onde armazenamos valores, neste caso estamos armazenando números inteiros, por isso o "int", que é usado no Java, nele todas as variáveis precisam ter apenas um tipo pré-determinado.
No Javascript dizemos apenas "var", pois o valor pode ser int agora e substituirmos por um texto depois.
A primeira linha de um método é a sua assinatura, no Java dizemos o tipo do retorno, o nome do método que você irá escolher, e entre parênteses os argumentos, são variáveis de entrada que serão informadas para realizar a operação. As chaves delimitam o escopo da execução, é o início e fim do código do método.

//Java
int somar (int a, int b) {
  int resultado;
  resultado = a + b;
  return resultado;
}


//Javascript
var somar = function (a, b) {
  var resultado;
  resultado = a + b;
  return resultado;
};

Nesse exemplo criamos o método "somar" que dados dois inteiros de nome "a" e "b" irá retornar um valor. Declaramos uma nova variável chamada "resultado", usamos o operador "+" para somar o valor das variáveis "a" e "b" e armazenar na variável "resultado" e retornamos o valor de "resultado" para fora do método.
O símbolo "=" atribui um valor a uma variável, estamos "enfiando" um valor dentro de um lugar.
No Javascript métodos são funções de um determinado escopo, irei explicar isso melhor posteriormente, função é um tipo, assim como o int, e como você pode ver neste exemplo estamos declarando uma variável "somar" e colocando esta função nela, podemos executar a função da mesma maneira que executamos o método no Java.

Para testar este código em javascript basta acessar:
http://jsfiddle.net/p0ozrk6b/
e clicar em "Run"

Para testar este código em Java acesse:
https://ideone.com/VSjaPQ
Você pode altera-lo clicando em "edit" e roda-lo novamente clicando em "Ideone it!"
Para ter melhor aprendizado do Java você deve instalar o JDK para poder programar em sua máquina, e uma IDE, eu sugiro usar o Netbeans.

Tuesday, July 28, 2015

Slack - O que é e formas de usar


1 - Índice
2 - Por que foi feito
3 - Como foi feito
4 - O que foi feito
5 - Exemplos de uso
5.1 - Integrando com sistemas suportados
5.2 - Implementando integração com novos sistemas
5.3 - Outgoing WebHooks e Comandos
6 - Conclusão

Com o crescente número de sistemas que utilizamos e assuntos que lidamos no dia-a-dia, passamos a distribuir as informações através de várias formas de comunicação,  e-mails, arquivos e documentos na nuvem. Essa distribuição prejudica a comunicação e eficiência geral da equipe.
O Slack permite que uma empresa/grupo de pessoas possa se comunicar de forma eficiente.

Algumas coisas que o Slack utiliza, para melhorar a eficiência da comunicação:

1 - Conversas por tópicos (canais)
2 - Filtro de notificações
3 - Integrações com outros sistemas
4 - Busca inteligente

Através da criação de canais, combinado com filtro de notificações e integração com outros sistemas, permite que um assunto seja visto de forma completa,  com acesso rápido a arquivos do Dropbox (só arrastar ou colar o link que ele já "entende"), arquivos do Google Docs e dezenas de outros sistemas.

Exemplos de uso

Nós da Martin.labs, trabalhamos com o desenvolvimento de software. Para gerir esse desenvolvimento, utilizamos um software chamado Jira.
Todos nossos projetos existem neste sistema. Nós usamos um "quadro" que resume tudo que deve ser feito até determinada data (um ciclo destes leva em média 2 semanas), e neste quadro, ficam coisas como "Design tela do mapa", "WS - Cadastro App".
Este sistema é ótimo e supri todas as nossas necessidades, porém, coisas como e-mail, Skype, Google Docs e Dropbox continuam sendo necessárias, principalmente para nos comunicarmos com pessoas de fora da empresa.
Em resumo, nossa comunicação era:
Jira para trabalho, Skype para conversas e dúvidas, E-mail para falar com o Cliente, Dropbox para arquivos, Google Docs para documentos compartilhados fora da empresa.

Não conseguia lembrar qual era aquele site importante, que eu mandei para um grupo ou pro meu colega. Não encontrava coisas que precisavam ser encontradas. As vezes era necessário buscar em todos sistemas para encontrar uma informação. A solução? Slack.

Integrando com sistemas suportados.

Para integrar com sistemas suportados pelo Slack, como Google Docs, Dropbox, JIRA e muitos outros, basta acessar seu Slack e ir em "Configure Integrations". Selecione o serviço que deseja integrar, e em alguns segundos você já terá tudo funcionando. É necessário autorizar o Slack a acessar seus arquivos (Dropbox, por exemplo).
Assim que você integrar com Dropbox, faça um pequeno teste, jogue um link do Dropbox em uma conversa e veja o que acontece :)

Integrando com novos sistemas -
Incoming WebHooks - Enviando informações para o Slack

Para seu sistema falar com Slack, é extremamente simples. Na maior parte dos casos, exige um mínimo de conhecimento em programação.
Para seu novo sistema poder falar com Slack, primeiro vamos criar a porta de entrada nas integrações do Slack.
Vá até Integrações, e procure por "Incoming Webhooks".  Adicione um novo hook e selecione o canal para onde as notificações serão enviadas.
A seguir, personalize um pouco a integração, alterando as propriedades como nome, descrição e ícone, e muito importante, salve a URL do hook.

O segredo do Slack, é que toda autenticação está embutida na URL gerada, você não precisa adicionar headers a requisição, OAuth 2.0, nada disso. Basta enviar a mensagem formatada para a URL e ela irá aparecer no Slack.
Um exemplo disso, é o nosso site. Anteriormente, todos contatos eram enviados para nosso servidor, que enviava para uma caixa de e-mail. Como era uma caixa de e-mail "alternativa",  as vezes levavam algumas horas até que detectássemos que algo havia chegado.
Alteramos para, invés de mandar e-mail, publicar em um canal do Slack utilizar Slack, e os ganhos foram instantâneos. Com um web-service muito simples, e pouquíssimas linhas de código, nosso site agora envia informações direto para nosso canal de atendimento do Slack, onde é visível para todos e ainda é possível conversar sobre o assunto.


O código para fazer isso é muito simples, basta enviar uma requisição POST, com um parâmetro chamado "payload".  Muito fácil de fazer.
Esta é a classe Java que nós utilizamos para enviar requisições para o Slack:

import com.goebl.david.Webb;
import com.google.gson.Gson;

/**
 *
 * @author ricardoprado
 */
public class SlackUtils {
    public void publicarEmCanal(String mensagem, String url){
        Webb webb = Webb.create();
        Gson gson = new Gson();
        Payload payload = new Payload(mensagem);
        webb.post(url).param("payload", gson.toJson(payload)).ensureSuccess().asVoid();
    }
}

class Payload{
 
    private String text;

    public Payload(String text) {
        this.text = text;
    }
 
}


Outgoing WebHooks e Comandos

As funções Outgoing Hooks e comandos são muito similares. Ambas permitem que o Slack notifique um sistema externo, a partir de uma instrução dada no Slack.
A principal diferença entre comandos e outgoing hooks, é que os comandos são pessoais, apenas você vê o resultado do seu comando, já os outgoing hooks, publicam resultados em um canal compartilhado.

Os comandos e os outgoing hooks funcionarão da mesma maneira: você digita uma palavra / frase e, ao detecta-la, o sistema irá acionar a URL que você configurou, enviando junto com o comando, todo o texto que foi digitado. É o seu papel, ao desenvolver a integração, "interpretar" o que foi enviado junto com a mensagem.
Exemplo:

'/CalcularTrajeto' e 'trajeto:' são respectivamente um comando e um trigger para outgoing hook.
Para usar essa função, a pessoa precisará digitar "trajeto: rua teodoro sampaio, 744, sp, até avenida Bartolomeu de Gusmão, 540, Santos, sp". Neste caso, o formato precisa ser este, caso contrário, o servidor não conseguirá interpretar os dados (cada um implementa da forma que achar melhor).

 public String calcularTrajeto(SlackIncomingPayload payload){
        String origemEscapada, destinoEscapado;
        String urlGoogle = "http://maps.googleapis.com/maps/api/directions/json";
        String[] origemDestino = payload.getText().split(" ate ");
        origemDestino[0] = origemDestino[0].replace(payload.getTrigger_word(), "");
     
        origemEscapada = origemDestino[0].replace(" ", "+");
        destinoEscapado = origemDestino[1].replace(" ", "+");
     
        Webb webb = Webb.create();
        Response<String> response = webb.get(urlGoogle)
                .param("origin", origemEscapada)
                .param("destination", destinoEscapado)
                .param("units", "metric")
                .ensureSuccess()
                .asString();
        GoogleMapObject mapObject = gson.fromJson(response.getBody(), GoogleMapObject.class);
     
        String texto = "Distância de " + origemDestino[0] + " até " + origemDestino[1] + " estimada em " + mapObject.routes.get(0).legs.get(0).distance.text;
        SlackOutgoingPayload payloadSaida = new SlackOutgoingPayload(texto);
        return gson.toJson(payloadSaida);
    }
 



Neste caso, não está trazendo muita utilidade, porém essa ferramenta pode ser utilizada para melhorar a eficiência de alguns processos, como enviar um e-mail ou fazer deploy de sua aplicação em um servidor de testes.


Conclusão

O Slack é uma poderosa ferramenta de comunicação de integração. Além de ter uma interface extremamente bem cuidada, uma grande atenção para os detalhes, a facilidade de integração com novos serviços e a disponibilidade de um ótimo plano gratuito torna o Slack uma ótima opção para qualquer grupo de pessoas que pretende melhorar sua eficiência e comunicação.
Não deixamos de utilizar nenhuma das ferramentas que utilizávamos antes, porém, passamos a obter um valor maior de cada uma delas.




Friday, July 3, 2015

Xamarin

O que é?

É uma ferramenta que possibilita criação de aplicativos NATIVOS para Android, iOS e Windows Phone.

O que é aplicativo nativo?

É aquele aplicativo que utiliza os componentes de hardware diretamente, ou seja, tem acesso a todas as funcionalidade de um dispositivo. Além disso, existem mais dois tipos de aplicativo que são: Híbrido e WebApp. WebApp na verdade é um site responsivo que simula um aplicativo, ou seja, quem irá interagir com os componentes de hardware é o navegador, então não possui total acesso as funcionalidades de um dispositivo, além disso como é o navegador que fará esse intermediário entre o hardware haverá uma perda de perfomance significativa. Por fim um aplicativo híbrido é aquele que utiliza ambos, normalmente é mais utilizada onde possui um local para exibir notícias que são recorrentes e que precisam ter uma estrutura diversificada e de fácil leitura dessas informações, porém para o restante do aplicativo é utilizado estrutura nativa.

Por que usar?

Porque possibilita que o core business seja único, toda requisição para Web, para o banco local e a regra do negócio será compartilhada entre as plataformas, assim não será necessário escrever diversas vezes os mesmos trechos de código em linguagem diferente em IDE separado. Isso também facilitará na hora de realizar os testes e alterações, pois como o código principal é único, não será necessário testar diversas vezes a mesma funcionalidade para plataforma diferente e só será preciso alterar em um só lugar. Assim torna o seu aplicativo mais homogêneo e menos chance de possuir bugs com fácil alteração para futuros updates.

E a IDE?

Eles possuem a próprio IDE "Xamarin Studio" é bastante parecida com Visual Studio, para quem possui o Mac não terá outra opção. Agora para aqueles que tem o Windows, além do Xamarin Studio você poderá utilizar o próprio Visual Studio, através de plugin, porém para isso será necessário adquirir pelo menos a licença "business".

E a linguagem de programação?

É utilizado C#.

E as telas?

O Xamarin possui duas maneiras de criar as telas.
Uma delas é a forma antiga, onde você irá desenhar a tela do iOS no próprio XCode (o próprio Xamarin abre para você), no caso do Android será através de xml (como é feito normalmente), então um profissional que já é dessa área não terá dificuldade nenhuma em criar e desenvolver as telas.
A outra forma de criar as telas é o chamado "Xamarin Forms", onde você poderá escrever um código único e será renderizado nativamente para cada plataforma, não se preocupe, quando for necessário customizar uma tela para cada plataforma será totalmente possível, é só criar renderizações de uma view para cada plataforma.

E as bibliotecas antigas que possuo?

O Xamarin possui uma funcionalidade chamada "Binding", onde você referencia sua biblioteca e dependendo da API é necessário fazer as marcações para expor as classes e os métodos.

Quem são os donos do Xamarin?

São o pessoal do Mono, que primeiramente deu iniciativa a projeto para rodar a linguagem Microsoft no sistema operacional Linux. Além disso atualmente o Xamarin possui uma parceria com a própria Microsoft.

Para saber mais sobre o Xamarin e o preço, entre no site https://xamarin.com/

Friday, June 26, 2015

Apps para programadores no Android

Galera, neste post irei apresentar alguns apps interessantes para produtividade na área de programação e TI utilizando o Sistema Operacional Android, a princípio comecei a pesquisar estes apps saber se era possível programar utilizando o celular e nesta pesquisa acabei encontrando também apps para criação de diagramas que podem auxiliar no gerenciamento de projetos.


Programming Hub - Nota 3/5 


É um aplicativo para aprender Python, Assembly, HTML, VB.NET, C, C++, C# (C Sharp), JavaScript, PHP e Java. Bom para iniciantes e possui diversos exemplos de códigos importantes, desde básicos até funções mais avançadas destas linguagens. Os exemplos já estão compilados dentro do app e não é possível criar código ou compilar aplicações no celular.


C# .Net - Nota 4/5


Este aplicativo foi feito com o intuito de ensinar seus usuários a programar em C#. Acaba parecendo um livro pois possui seções e fácil navegação que facilitam muito o aprendizado.
Traz ainda um dicionário C# e uma lista de perguntas e respostas para quem vai fazer alguma entrevista de emprego que exija C#. Pra quem tem interesse em aprender C# vale muito a pena baixar.


WebMaster's HTML Editor Lite - Nota 3/5


Editor de texto para HTML, PHP, javascript, e CSS, possui marcador de sintaxe e auto-complete de código para HTML, CSS e JavaScript.
Na versão Lite não é possível visualizar a prévia do seu arquivo e o auto-complete só funciona para ajudar o programador a lembrar de algum código já que acaba não completando automaticamente, função disponíveis apenas na versão paga.
Uma dica é salvar os arquivos e abri-los em algum navegador do celular para visualizar seus trabalhos.


C# Shell (Compiler REPL) Free - Nota3/5


É um editor de códigos C# básico que cumpre sua funcionalidade, porém não possui uma usabilidade boa, o que dificulta um pouco para quem acabou de baixar o app.
Vem com alguns exemplos de códigos básicos. Ao meu ver é bom apenas para quem está com o tempo muito limitado e precisa realizar alguns testes com seu celular.


Html 5 Editor - Nota 3/5


Editor de HTML5, este aplicativo possui design simplificado e acaba sendo difícil criar páginas com ele, porém para testes específicos cumpre sua função. É possível salvar e abrir seus arquivos e visualizar seus projetos dentro do app.


AIDE- IDE for Android Java C++ - Nota 5/5


AIDE é uma IDE para desenvolver aplicativos reais para dispositivos Android. Possui auto-complete de códigos e diferenciação de cores para facilitar a sintaxe. 
Com uma barra de teclado personalizada com as principais tags de programação Java facilita muito a programação. É possível criar e editar arquivos XML e Java para criação dos apps, além de suporte para as linguagens C/C++ e Android NDK bem como aplicações Java puras.
Mas o melhor de tudo que este app faz é simplesmente compilar seu projeto, gerar o apk e instalar em seu aparelho. Podendo rodar seu aplicativo na hora no seu celular. Vale a pena conferir também o AIDE Web para desenvolvimento web.


DrawExpress Diagram Lite 4/5


Para que gosta de construir diagramas este aplicativo é um prato cheio! Muito fácil de usar, só precisa de um pouco de tempo para aprender a utilizá-lo. Para construir os diagramas você desenha na tela e o app reconhece seus gestos construindo os objetos do diagrama.
Ótimo e simples de usar!


DroidDia Prime Nota 3/5


DroidDia permite que você faça fluxogramas, organogramas , diagramas e mapas mentais, tudo isto com pouco esforço. É semelhante ao Microsoft Visio.


Conclusão


A maioria das ferramentas para programar no celular disponíveis atualmente são muito básicas e servem mais para editar algum código que exijam urgência.
Dentre os apps listados acima os que realmente surpreenderam foram o AIDE e o DrawExpress Diagram Lite que se destacam no que se propõem.
Ainda acredito que criar aplicações no desktop é muito mais fácil e correto do que no celular, mas existe muito espaço para apps deste tipo no Android.  Quem sabe esta percepção não mude no futuro.

Wednesday, May 20, 2015

Frameworks, o lado bom e ruim de se adotar um

Introdução

O que é framework mesmo? Framework é aquela "biblioteca grandinha", ou melhor, aquele conjunto de bibliotecas que te fornece um ambiente de desenvolvimento pra facilitar todas as tarefas de um determinado escopo.

Esteja de olho nas novas tendências

Sempre é bom estar de olho nas bibliotecas que estão se tornando tendência, mesmo que você não adote elas. Quando você entende a maneira que ela resolve os problemas você também entende como a comunidade deste determinado escopo está pensando e pode ter novas idéias para resolver os seus problemas. Muitos Frameworks apresentam um novo paradigma de programação, uma nova perspectiva de lidar com o seu código em geral e pode acrescentar muito na maneira que você pensa.

Para Grandes Empresas

Em grandes empresas, adotar um framework famoso pode ser tão importante quanto adotar uma linguagem pois irá tornar o código mais homogêneo pois todos os desenvolvedores irão saber como resolver o problema da mesma maneira, e por consequência, saberão ler e dar manutenção no código alheio.

O Problema surge antes do Framework

Mas o framework pode trazer mais problemas do que soluções, é importante saber escolher, afinal, você precisa mesmo de um framework? O Framework deve vir pra resolver um problema que você já conhece. Quando você aprende uma nova linguagem, antes de ir procurando quais frameworks existem no mercado, você deve sentir como é desenvolver com essa linguagem e entender suas limitações e dificuldades, assim vai poder identificar quando o framework irá facilitar ou trazer complexidade desnecessária.

Desapegue-se

Também é preciso saber quando desistir de um framework, foi muito legal, muito divertido, tivemos ótimos momentos juntos, mas nosso relacionamento já não é como era antes, conheci novas técnicas e tecnologias e você está mais atrapalhando do que ajudando.
Quando eu comecei a desenvolver para Java Web fui apresentado logo de cara ao JSF (Java Server Faces), era o framework adotado na empresa e provavelmente eu não tinha escolha mesmo, mas depois de diversos meses usando a ferramenta, depois de me tornar um expert, saber tudo sobre o assunto, eu queria fazer coisas mais avançadas, pesquisei muito na internet como realizar algumas tarefas que ele não estava pronto e tudo o que pude fazer era gambiarra, estava na hora, e nos próximos projetos eu radicalizei, voltei ao básico: Servlet e javascript puro. Parece impossível, mas o puro foi mais produtivo que o framework. Mas isso não pôde durar muito.

O Framework Indispensável

Existem alguns frameworks indispensáveis, a linguagem as vezes está parada no tempo ou não quer abstrair tanto, mas a comunidade vê potencial, quer essa abstração e cria frameworks que as estendem totalmente de maneira que simplesmente não dá pra não usa-la. É o caso do Ruby on Rails, e no meu caso, era o jQuery para javascript.
Eu aprendi javascript puro, na época que não existia jQuery e era doloroso (IE6) e cansativo, eu considero o jQuery uma salvação para o javascript, é claro que a linguagem não iria morrer pois todo mundo usava o navegador e todas as empresas tinham um website, mas a linguagem estava largada as traças, você tinha que escrever muito, com métodos muito extensos, sem falar nos vários IFs para navegadores diferentes. Não tinha como não usar jQuery e ele era o framework perfeito.

Não seja um escravo do sistema

Hoje é muito frequente ver vagas de emprego com não só linguagens como requisitos básicos mas também frameworks. Pode isso Arnaldo? Como eu disse anteriormente, é bom adotar um framework em grandes empresas, porém você como desenvolvedor não pode se acomodar com essa situação, você não é apenas um operário para "aplicar" código usando uma arquitetura e sem ter que pensar em nada, não tire essa idéia da cabeça.

A Modinha dos Frameworks

Novos frameworks são criados com cada vez mais frequência, veja o caso de javascript, a velocidade que novos frameworks MVC são criados é incabível, e todos eles implementando o mesmo padrão de projetos, é um desperdício de mão de obra. Angular, Backbone, Knockout, Ember, Batman, Cappuccino, Spine, Sammy, entre tantos outros. E é incrível como continua a ser criados frameworks MVC, só porque eles parecem magica, fazer tudo automático, mas pra falar a verdade a maioria dos projetos web não se encaixam no padrão MVC. Para as aplicações web mais dinâmicas eu prefiro lidar com eventos.

A Difícil Quest do Framework perfeito

Conforme você vai adquirindo experiência e o tempo vai passando, eventualmente você terá que largar o seu framework favorito para seguir em frente, e alguns frameworks novos que você conhecer poderão te dar um bloqueio por tudo que você aprendeu ao longo dos anos, pois estes seguem padrões que você vê que não te darão tanta liberdade quanto gostaria. Quando chegar esse momento você terá que optar em continuar procurando o framework perfeito incessantemente, continuar com a porcaria que você tem ou criar o seu próprio conjunto de bibliotecas.

E se eu criasse meu próprio Framework?

A vantagem de usar o seu próprio conjunto de bibliotecas, fazer seu próprio framework com classes utilitárias, classes abstratas para processos e classes para models genéricos é que a curva de aprendizado é mínima, você poderá altera-lo para se adequar a suas novas necessidades, o código poderá evoluir sempre com mais facilidades, você terá certeza de como funciona e poderá abandonar ou adquirir módulos a qualquer momento. O lado ruim é que nunca conseguirá contratar um funcionário que já sabe usar seu framework.

Na Martin.labs

Na Martin.labs usamos diversas linguagens: Java para o servidor, javascript para a web, C# para Android e iOS; em cada um desses ambientes avaliamos qual seria a melhor estratégia de frameworks:
Para Java nós já conhecíamos muito de como desenvolver webservices sem um framework, e já sofremos muito com frameworks de terceiros, preferimos criar nosso próprio framework para lidar com Servlet, Transações, envio de E-mail, Conexão com Banco de Dados e Classes de Modelos padrão para respostas de WS e Exceptions;
Para javascript usamos essencialmente jQuery e Require, além de outras ferramentas para build e bibliotecas simples, mas juntamos um conjunto de bibliotecas e criamos nosso próprio framework também;
Para Android e iOS a situação é mais delicada, utilizamos um grande framework chamado Xamarin, bom não é exatamente um framework - nós desenvolvemos usando os métodos de Android e iOS porém em C#, e muitas funcionalidades de lógica de negócios fica em um único código - E como não encontramos nenhum ótimo framework para Xamarin e não sentimos a necessidade de um, fizemos nosso próprio conjunto de bibliotecas, e códigos reutilizáveis para vários projetos.

Conclusão

Não posso te dizer para usar o framework X ou criar seu próprio framework, depende de pessoa pra pessoa, da tecnologia que você usa, do seu ambiente de trabalho, e principalmente dos seus gostos e conhecimentos usando as tecnologias que possui. Você precisa enxergar os benefícios e malefícios de cada framework e não simplesmente seguir uma moda.

Tuesday, May 5, 2015

Plataformas Educacionais - Ficou fácil aprender.É só querer.

Sabemos que o estudo é um fator importantíssimo para o ser humano, aprender e repassar o nosso conhecimento é o que faz o homem evoluir de geração para geração.
Muitas vezes somos “obrigados" a estudar seja para passar de ano no colégio ou faculdade. Devido a esta obrigação nem sempre estamos dispostos a absorver este conhecimento naquele certo momento, seja por falta de interesse no assunto ou até mesmo falta de didática de professores que não motivam corretamente seus alunos.
Mas isto está mudando, uma área crescente na tecnologia são as plataformas de estudos on-line que oferecem cursos em diversas áreas : Física, Química, Economia, Marketing, Tecnologia (principalmente), etc. Algumas destas plataformas foram criadas com parcerias de grandes universidades de todo o mundo e outras por consultores e experts em diversas áreas.
Listamos abaixo quatro grandes plataformas de estudos que são ricas em conteúdo e que possibilitam aprender onde, quando e como melhor desejar :

Coursera - www.coursera.org - Gratuito

O Coursera é uma parceria de diversas universidades de todo o mundo e tem como missão oferecer acesso a melhor educação disponível no mundo. Algumas destas universidades são : Stanford University, University of Maryland, Columbia University, e até mesmo USP (Universidade de São Paulo) e Unicamp (Universidade de Campinas) estão entre as que colaboram com a plataforma.
Cursos de diversas áreas são oferecidos como : Biologia, Computação, Engenharia, Economia, Matemática, Física, Estatística entre muitos outros.
Sem dúvida é uma das plataformas mais completas disponíveis atualmente e o melhor de tudo é que seu conteúdo é gratuito.

EDX - www.edx.org - Gratuito

A plataforma foi fundada por uma parceria entre a MIT(Massachusetts Institute of Technology) e Harvard University e possui diversas parcerias de peso.
Com mais de cem mil certificados adquiridos pelos estudantes do site, possui mais de 400 cursos em diversas áreas como Ciência da Computação, Matemática, Humanas, etc. Os cursos são oferecidos por faculdades do mundo todo de peso como : Berkley University Of California, Georgetown University, Caltech, Columbia University, The University of Queensland (Austrália) entre outras.
A maioria dos cursos oferecidos são para as áreas de ciência da computação e tecnologia.

Lynda - www.lynda.com - Pago

O Lynda é uma plataforma de ensino on-line paga que reúne especialistas de várias áreas como: Computação, Fotografia, Design, Negócios, etc.
Atualmente é a plataforma educacional paga de maior sucesso na internet, isto se dá devido a qualidade dos vídeos e conteúdo diversificado de cursos (mais de 3 mil cursos atualmente), dando ao usuário do plano mais completo a possibilidade de baixar o conteúdo e assistí-lo offline.
Possui grandes clientes como Microsoft, Adobe e NBC.
Vale a pena conferir o site que dá a possibilidade de ter uma amostra dos cursos.

Udemy - www.udemy.com - Gratuito/Pago

O Udemy é um site educacional em expansão com mais de 6 milhões de estudantes cadastrados, nele é possível aprender e ensinar. Isto mesmo, o site oferece a possibilidade de se cadastrar como um instrutor, aumentar sua visibilidade no mercado de trabalho e ainda render uma grana extra.
Possui cursos de diversas áreas como Computação (grande parte dos cursos), Design, Marketing, Fotografia, Música entre outros. Alguns cursos são pagos, porém existe uma boa quantidade de cursos gratuitos.
O site foi reformulado atualmente e o número de cursos e instrutores vem aumentando consideravelmente.

Os sites listados acima possibilitam aos estudantes adquirir conhecimento em diversas áreas, com os melhores professores e instrutores de todo o mundo, quando e onde quiser.

Acabou a desculpa que o professor é ruim!

Wednesday, April 8, 2015

Validação de informação Cliente / Servidor

Nunca valide apenas no lado do cliente.

Com a "moda" de serviço na nuvem (nada mais do que deixar web-service disponível) muitos acham que é apenas codificar um software para servidor, outro para o cliente e pronto. Muitos esquecem de fazer a validação da informação, causando inconsistência nos dados em relação a lógica de negócios ou cenários de uso.


O que é validação de informação? Nada mais do que uma avaliação das informações com sua lógica de negócios. Existem três formas aplicadas no mercado de software:

A primeira é fazer a validação APENAS no lado do servidor*.
A segunda é fazer a validação APENAS no lado do cliente*.
E por fim fazer a validação no lado do cliente e no servidor.

O que é melhor? Qual tipo devo utilizar?
Vamos exemplificar.

Digamos que foi definido no sistema que o CPF do usuário é obrigatório.

Vamos supor o primeiro caso, que é validar a informação apenas no servidor. Toda vez que algúem tentar se cadastrar, você deverá acionar o servidor, que fará o cálculo do CPF e verificará se ele é válido. Ok, o sistema estará garantindo que as informações são válidas.

Agora vamos supor o segundo caso, que é validar a informação apenas no cliente. Antes de enviar uma requisição para o web-service, o software fará o cálculo para ver se o número é válido (antes de acionar o servidor).
Ok, aqui você garantiu que o seu sistema sempre irá enviar um número válido e além disso consegue economizar o trafego de dados na rede, já que não precisa que o servidor diga que o CPF está errado, o próprio software que fica no cliente já vai identificar o problema sem a necessidade de se conectar ao servidor. Porém, sem a validação no servidor, o web-service estará vulnerável, porque o servidor não vai conseguir garantir que aquilo que está recebendo seja de fato um CPF, muito menos número válido, ou seja, nos casos onde seu software contará com um número válido de CPF, ele poderá causar uma inconsistência no seu software e provavelmente vai ter que aplicar uma correção em cima da informação incorreta. Isto pode acontecer caso a URL do web-service fique exposta ou se alguém tentar hackear o seu sistema,
Este problema pode afetar todos os usuários, do sistema, mesmo os que tenham inserido CPFs válidos (pois todo o sistema poderá ficar inoperante).

O terceiro caso é a junção dos dois cenários anteriores, realizando a validação no lado do cliente e no lado do servidor. Neste caso, você poderá realizar a validação dos dados sem a necessidade de se conectar ao servidor e ainda poderá permitir que demais pessoas utilizem estes web-services, como uma equipe terceirizada e parceiros.

Sendo desenvolvedor, você NUNCA deverá implementar o segundo caso, isso acarretará em problemas imensos, podendo acabar com seu sistema. Para quem implementa apenas o primeiro caso, ok, porém seria melhor validar também no cliente, economizando rede e recursos computacionais. Se não o faz, o aconselho a realizar o uso da validação tanto no servidor quanto no cliente.

Agora, se você é o cliente final, garanta com sua equipe que existe validação AO MENOS no lado do servidor. Pode parecer brincadeira, mas é muito comum as pessoas validarem as informações apenas no lado do cliente. Imagine o que aconteceria se sua instituição bancária só validasse seu saldo no seu navegador? O que aconteceria se você pudesse(você pode**) manipular as informações enviadas pelo browser?

*Servidor: A máquina principal do sistema, onde as informações de todos os usuários vivem em conjunto. Acesso restrito.
*Cliente: O que o usuário final acessa / baixa para o computador. Pode ser uma página de internet ou um aplicativo.

**Com as opções de desenvolvedor habilitadas (nas preferências do seu navegador), clique com o botão direito em qualquer lugar da página e vá em "inspecionar elemento". Qualquer valor alterado na página terá efeito imediato.