Como escolher uma biblioteca/framework?

No desenvolvimento de projetos de software, saber quando recorrer a uma biblioteca/framework e como optar por uma entre muitas, não é tão óbvio quanto parece. Neste artigo decidi sintetizar o processo. Tentarei abstrair-me da linguagem/runtime (PHP, Java, .NET, etc.) em causa, visto que os conceitos são transversais.

Artigo escrito originalmente no Pplware

Read in english at MediumComo escolher uma biblioteca ou framework

Programação de um backoffice em OutSystems

NOTA: 5 anos depois da criação da app, apagaram-me a aplicação e todos os dados de forma inesperada. Não tinham backups.

Este artigo vem na sequência de um pequeno projeto feito em freelancing que consistia num gestor de sócios para uma escola de dança. O objetivo é demonstrar as capacidades do OutSystems (e da sua cloud) neste tipo de projeto.

OutSystems é uma empresa de software nascida em Portugal com sede em Atlanta, EUA. Foca o seu negócio numa plataforma de ferramentas CASE (Computer-aided software engineering: software de apoio à conceção e implementação de outro software).

Continue a ler “Programação de um backoffice em OutSystems”

Correr uma webapp Java na Google cloud

Sabia que o Google tem uma cloud para as suas aplicações/sites web? Sabe o que é o Google App Engine e o que pode fazer com ele? Neste artigo pretendo explicar o enquadramento e os primeiros passos desta plataforma.

Enquadramento

O Google App Engine (GAE) é uma plataforma como serviço (PaaS). O GAE percence ao Google Cloud Platform. Este é comparável ao Microsoft Azure e aos Amazon Web Services: os três são soluções de cloud computing. Na prática, este sistema oferece hardware (servidores web, alojamento, etc.) para que os developers desenvolvam e corram web apps (e outros serviços web).

Google Cloud Platform

Este sistema é gratuito até certos limites (freemium).

Podemos, por exemplo, criar um web site e um serviço de backend para servir aplicações mobile. Terá diversos recursos à disposição, tais como bases de dados, API REST, etc.

app_design_numbered[1]

Antes de começar

Vejamos como ter o seu primeiro projeto na cloud do GAE.

Comece por escolher um runtime: o GAE suporta Java, Go, PHP e Python. Aqui vou usar Java para ilustrar os conceitos do GAE. O suporte atual é para a versão 1.7. Estou a assumir que já tem o Java JDK. Confirme que tem a última versão do Maven e configure-a no NetBeans.
Pense no IDE que quer usar. No caso do Java, pode usar o Eclipse, NetBeans, IntelliJ, etc. Todos têm plugins para o GAE, mas por motivos de simplicidade, recomendo o NetBeans sem plugin GAE. É dessa forma que será dado este exemplo.

Lançar um projeto localmente e remotamente

  1. Vamos preparar o projeto na cloud: vá à consola web do Google Developers, clique em “Create Project” e dê um nome.


    (opcionalmente, pode clicar em opções avançadas e escolher a zona geográfica)

  2. Espere um pouco depois de clicar em “Create”. O projeto fica automaticamente selecionado no canto superior direito:

  3. Expanda o primeiro portlet e copie/guarde o “Project ID”. Este identifica o projeto acabado de criar:

  4. Crie um projeto no NetBeans. Usaremos uma aplicação web em Maven para o ilustrar.  Faça: File > New Project > Maven > Web Application. Preencha o nome de projeto e siga o wizard até ao fim (o servidor web não importa muito porque o app engine traz/usa o Jetty).
  5. Abra o pom.xml e adicione o jar do GAE (use a versão mais recente) (na zona das dependencies):
    <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-api-1.0-sdk</artifactId>
        <version>1.9.34</version>
    </dependency>
  6. Ainda no pom.xmlna zona buildplugins, adicione o plugin de deploy do GAE. Use a última versão.
    <plugin>
       <groupId>com.google.appengine</groupId>
       <artifactId>appengine-maven-plugin</artifactId>
       <version>1.9.34</version>
    </plugin>
  7. Crie um web.xml:
  8. Dentro de WEB-INF, crie o ficheiro appengine-web.xml, com o conteúdo:
    <?xml version="1.0" encoding="utf-8"?>
       <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
       <application>erudite-canto-110614</application>
       <version>1</version>
       <threadsafe>true</threadsafe>
    </appengine-web-app>
  9. Preencha o campo application com o Project ID obtido no passo 3.
  10. Saque o ficheiro nbactions.xml e coloque-o ao mesmo nível que o pom.xml. Este contém os Maven goals do projeto GAE, tais como deploy local ou para a cloud.
  11. Faça deploy local (isto irá lançar o Jetty na porta 8080, a qual pode ser alterada):
  12. Abra o browser em http://localhost:8080:

    Parabéns.
  13. Tentemos ver a mesma coisa mas na cloud. Faça:

    Um browser irá abrir. Aceite as permissões pedidas.
    Copie o código que lhe foi dado e cole-o na consola do NetBeans.
  14. Todas as apps vão parar ao appspot.com e podem ser lançadas a partir de lá.
    Abra http://O-SEU-PROJECT-ID.appspot.com
    Neste caso seria: http://erudite-canto-110614.appspot.com
    Parabéns!

Saiba mais na documentação oficial GAE para Java.

Widget do GitHub para o WordPress

Na sequência do desenvolvimento de widgets WordPress, decidimos fazer mais um. Desta feita, para o GitHub. Este widget exibe o perfil de alguém desta rede de programadores (avatar, info. geral, repositórios, seguidores/seguidos, organizações).

Felizmente não tivemos de fazer web scrapping, dado que o GitHub tem uma excelente API. Inclusive, fizemos questões sobre a mesma por email e eles responderam sempre.

Embora o plugin suporte a colocação de um token oAuth (o que aumenta muito o número possível de chamadas à API), decidimos criar o conceito de cache, também ela configurável (em minutos):

GitHub Profile Widget
Configuração do GitHub Profile Widget

A cache armazena o resultado das chamadas à API GitHub. Para reduzir as dependências técnicas, é implementada fazendo uso direto da API de opções do WordPress.

Além de poder exibir o perfil de uma pessoa, também pode fazê-lo para uma organização GitHub.

Versões futuras do plugin poderão vir a exibir o feed.

Saber mais

Saiba como ser um melhor programador

Em todas as profissões existe o interesse pela autosuperação. A profissão de programador não foge à regra. Esta reveste-se da particularidade de exigir lucidez de raciocínio, por um lado, e por outro, criatividade e inspiração.

Tentarei refletir sobre o assunto e sintetizar ideias resultantes da minha experiência e forma de estar na área. Afinal de contas, a instrospeção fomenta a melhoria. É por isso natural que alguns pontos sejam subjetivos e muitos não estejam isentos de exceções. Os objetivos passam por pensar, fazer pensar e promover a discussão.

Continuar a ler (Pplware)…

Um widget para o WordPress (HackerRank)

Eu e o Henrique Dias criámos um widget do HackerRank para colocar no WordPress. O HackerRank é um site com exercícios de programação organizados por área (I.A., algoritmia, etc.). Promove o pensamento sistematizado nas técnicas de resolução de problemas.

O HackerRank é uma plataforma para realizar exercícios de dificuldade progressiva e de forma didática, assim como entrar em concursos, ganhar medalhas, etc. A ideia é competir de forma saudável, assim como criar um perfil útil para colocar no CV e LinkedIn. Alguns empregadores conceituados usam esta plataforma para avaliar os candidatos, pelo que é importante, para quem quer ser developer, conhecê-la.

A ideia permitiu aprender um pouco sobre o processo de criação de widgets para o WordPress, assim como de PHP e AngularJS. A ideia foi alvo de apreciação pelos developers do HackerRank, mostrando-o através de um tweet e o envio de t-shirts. 🙂

//platform.twitter.com/widgets.js

//platform.twitter.com/widgets.js

Em WordPress, um widget é um plugin. É de notar a facilidade com que se criam plugins. Tal como com os plugins para o jQuery e outros sistemas, os plugins WordPress vêm provar que esta é melhor forma de estender um sistema, mantendo a base limpa e simples, e aumentado a complexidade à medida das necessidades.

Em server-side, usámos PHP, dado que é a linguagem em que o WordPress está escrito. Tirando as chamadas à API do HackerRank e o código de instanciação do plugin (basta estender a classe WP_Widget), não há muito a dizer neste lado.

Quanto ao client-side, usámos AngularJS, não apenas para conhecer e testar, mas porque achámos que é a melhor forma de transformar JSON (as respostas da API do HackerRank) em HTML. Em vez de uma abordagem imperativa do tipo jQuery, em que se cria DOM “manualmente”, ou de uma abordagem server-side, em que se prepara HTML com PHP (e fica uma confusão de código markup assustadora), o AngularJS permite uma abordagem declarativa mais elegante, em que no próprio HTML, fazemos uso do modelo de dados.

Seria interessante criar código boilerplate que serviria como ponto de partida para a criação de outros widgets (já pensamos criar um widget para o IMDb, para o Goodreads, entre outros).

Saber mais…

Introdução ao debugging de software

O debugging de um programa baseia-se em alguns princípios e técnicas transversais à maioria das linguagens e ambientes de programação. Tentarei, neste artigo, sintetizar o que entendo por debugging, introduzindo o tema, colocando algumas luzes nos conceitos fundamentais e mostrando que há um mundo para além de alertsprints.

Continuar a ler (publicado em Pplware)…

Os erros mais comuns do programador

É importante analisar os projetos de software que correm mal. Nem sempre são resultado dos prazos impossíveis ou de maus gestores. Geralmente é um somatório de fatores que entra numa espiral causa-efeito. Tentarei agora identificar alguns erros comuns dos programadores (também aqui me incluo). Tais erros não são exclusivos do programador júnior. De facto, alguns são cometidos mais frequentemente pelo programador sénior.

Por outro lado, não se pretende aqui falar em más práticas de programação mas sim de soft skills e de gestão pessoal.

Continuar a ler (publicado no Pplware)…

Read version in english at Medium

Como não gerir um projeto de software

Em engenharia de software, existe alguma incerteza nas metodologias, nas estimativas, nas representações, entre outros. É muito fácil falhar, porque não existe uma “receita” de como fazer as coisas bem. A gestão de projetos não é uma ciência exata, muito menos a de projetos de software. Sendo uma pessoa por si só complexa, um conjunto de pessoas e as suas dinâmicas podem ser muito mais.

Continuar a ler (publicado no Pplware)…

Read article in English

Apps nativas vs Web apps

Web apps (também conhecidas por RIA ou apps HTML5) ou apps nativas? Qual a melhor abordagem? Que argumentos favorecem cada uma? Haverá uma tendência? São complementares ou concorrentes? A pergunta faz sentido? E se só houver orçamento para uma?
Este é um tópico muito discutido por empreendedores, gestores, marketeers e equipas de software. Tentemos colocar alguma luz na questão.

Continuar a ler (publicado no Pplware)…

Bibliotecas de componentes JSF

O objetivo é conhecer bibliotecas de componentes JSF e o porquê de incluir uma no seu projeto. Existem diversas, mas a que usaremos para exemplificar o processo é o PrimeFaces, a que mais se tem afirmado no mundo das interfaces-utilizador para Java.

Este é o quarto artigo da série JSF:

  1. Introdução ao JSF
  2. Ambiente de desenvolvimento
  3. Backing beans
  4. Bibliotecas de componentes

Continue a ler “Bibliotecas de componentes JSF”

Create your website at WordPress.com
Iniciar