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.