Elm

Resumo

Como vamos ver, Elm é bastante pequena e simples, o que torna fácil criar interfaces gráficas para a Internet. Elm quando compilada tem como alvos JavaScript, HTML e CSS. Elm é uma linguagem ainda muito jovem, foi criada em 2012 e está na versão 0.16 (https://en.wikipedia.org/wiki/Elm_%28programming_language%29).

Introdução

Elm utiliza o paradigma de programação FRP (Functional Reactive Programming), ou seja é uma linguagem funcional que está alerta ao tempo. Por outro lado desenvolvimento em Elm diverge da maioria das alternativas porque não utiliza a arquitetura MVC (Model, View & Controller). O fluxo de informação num programa Elm, que corre dentro do navegador de Internet, segue apenas uma direção tal como se pode ver na imagem abaixo.

Elm: Fluxo de informação num programa
Fluxo de informação num programa Elm (retirado da documentação oficial)

Instalação

Para instalar a linguagem Elm é necessário o Node.Js para proceder à sua compilação. A infra-estrutura Elm também disponibiliza um gestor de pacotes, ferramenta de testes unitários, REPL (Read, Evaluate, Print, Loop), debugger e instaladores para Windows e Mac que podem ser descarregados em http://elm-lang.org. A instalação em Ubuntu é feita com os seguintes comandos, começando por instalar o Node.Js seguida da instalação de Elm:

$ curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash -
$ sudo apt-get install -y nodejs
$ npm install -g elm

Agora estamos prontos para criar o nosso primeiro programa em Elm. A forma mais simples é partir de uma infra-estrutura e preencher apenas algumas funções. Esta infra-estrutura será responsável pelo fluxo de informação e pela receção de sinais a que o nosso programa responderá (o tempo, o clicar e mover do rato e o teclado são exemplos de sinais). Os sinais registados no programa levarão a uma mudança no estado do programa e consequentemente a uma atualização da interface gráfica. É mais fácil do que parece, vamos a isto.

Programa que conta cliques do rato

A imagem abaixo mostra-nos o programa Click numa janela do navegador.

Elm: programa Click
Este programa reage a dois eventos:

  • se se clicar no botão esquerdo do rato em cima do número a azul, o mesmo aumenta em uma unidade; e
  • se se carregar no botão a contagem fica a zero.

O valor inicial é 100.

O código

Para começar o programa criar a diretoria Click e de seguida ir para a mesma. Escrever o comando:

$ elm-package install evancz/start-app

E responder y às perguntas para autorizar a instalação. Start-app é a infra-estrutura de que falámos atrás. O conteúdo da diretoria é:

  • elm-package.json
  • elm-stuff/

A diretoria elm-stuff não contém nada com que seja necessário preocuparmo-nos agora. O ficheiro elm-package.json contém informação que deve ser editada manualmente, por exemplo a licença, a versão, e uma explicação sobre a aplicação. Para a nossa aplicação temos que acrescentar a informação sobre a biblioteca elm-http, ficando o ficheiro elm-package.json com a seguinte informação:

{
  "version": "1.0.0",
  "summary": "Programa para contar cliques.",
  "repository": "https://github.com/user/project.git",
  "license": "BSD3",
  "source-directories": ["."],
  "exposed-modules": [],
  "dependencies": {
    "elm-lang/core": "3.0.0 <= v < 4.0.0",
    "evancz/elm-html": "4.0.1 <= v < 5.0.0",
    "evancz/start-app": "2.0.2 <= v < 3.0.0"
  },
  "elm-version": "0.16.0 <= v < 0.17.0"
}

Aqui são declaradas as bibliotecas externas utilizadas pelo programa. Um programa em Elm começa pelo ficheiro Main.elm e, no nosso caso criamos o ficheiro Click.elm.

O ficheiro Click.elm

No ficheiro Click.elm temos as funcionalidades do programa conforme, começando pela declaração do tipo de variável Model que guarda o estado do programa. Uma nova variável deste tipo é criada quando o programa reage a um sinal externo. Também é declarado o tipo de variável Action que corresponde às possíveis mudanças de estado do programa.

module Click where

import Html exposing (..)
import Html.Attributes exposing (style)
import Html.Events exposing (onClick)

type alias Model = Int
type Action = Increment | Reset

No programa Click o nosso modelo corresponde a uma contagem de cliques no botão esquerdo do rato, que é guardado num tipo inteiro. O tipo de ações que iremos utilizar no nosso programa serão incrementar a contagem e colocá-la a zero.

Segue-se a função update que cria variáveis do tipo Model sempre que é invocada.

update : Action -> Model -> Model
update action model = case action of
  Increment ->
    model + 1
  Reset ->
    0

A declaração da função update mostra-nos que entram duas variáveis, a primeira do tipo Action e a segunda do tipo Model. A função update devolve uma variável do tipo Model. Se a ação invocada for Increment, à variável com o valor do modelo atual é somado 1. Se a ação for Reset, é criada uma variável do tipo Model com o valor 0.

A função view que atualiza a interface gráfica.

view : Signal.Address Action -> Model -> Html
view address model = div []
  [ div [ textStyle ]
            [ text "Clique no numero para incrementar: " ]
  , div [ countStyle
        , onClick address Increment ]
            [ text (toString model) ]
  , button [ onClick address Reset ]
            [ text "Colocar a 0" ]
  ]

A função view tem como argumentos de entrada uma variável do tipo Action e outra variável do tipo Model. O resultado da função é um DOM (Html).

Os atributos dos elementos criados são dados em textStyle e countStyle, conforme podemos ver abaixo.

countStyle : Attribute
countStyle = style
   [ ("font-size", "20px")
  , ("color", "blue")
  , ("font-family", "monospace")
  , ("display", "inline-block")
  , ("width", "50px")
  , ("text-align", "center")
  ]
textStyle : Attribute
textStyle = style
  [ ("font-size", "20px")
  , ("font-family", "fantasy")
  , ("display", "inline-block")
  , ("text-align", "center")
  ]

O ficheiro Main.elm

O ficheiro Main.elm declara o estado inicial do programa, note-se que iniciamos o modelo a 100.

import Click exposing (update, view)
import StartApp.Simple exposing (start)
main = start
  { model = 100
  , update = update
  , view = view
  }

Compilação

Um programa Elm é compilado para JavaScript. O comando para o fazer é:

$ elm-make Main.elm

Para correr o programa basta abrir o ficheiro index.html na diretoria em que escreveu o programa a partir do seu navegador favorito.

Conclusões

A linguagem Elm corresponde aos anseios de quem pretende fugir à arquitetura MVC e a quem deseja fazer programação funcional nos navegadores.

A linguagem Elm insere-se na família ML, tem variáveis dinâmicas (a declaração dos tipos das funções, tal como foi apresentada neste artigo, é opcional).

A linguagem Elm é pequena e muito pragmática pelo que é acessível a programadores que não conheçam programação funcional. A documentação, principalmente em Inglês, é clara e a comunidade é muito amigável.

Refira-se ainda que as mensagens de erro são muito claras, tentando guiar o programador diretamente para a origem do problema de uma forma direta e sugerindo soluções.

Automação com GENUINO

Introdução

A plataforma Genuino, tornou-se bastante popular ao longo dos anos, sendo uma das plataformas mais usadas em projectos de IoT e automação, tanto pelo seu baixo custo como pela sua capacidade de processamento e de I/O (input/output). Para os leitores que estão menos familiarizados com este tema, o Genuino é análogo da marca Arduino.cc, tendo sido criado pelos co-fundadores do Arduino Massimo Banzi, David Cuartielles, Tom Igoe e David Mellis. Na prática, o Genuino é usado para as boards vendidas fora dos EUA.

Isto é, a marca Genuino certifica também a sua autenticidade com a filosofia de hardware aberto e de código aberto que sempre caracterizou os valores do Arduino. As placas Genuino e Arduino partilham os mesmos componentes e as mesmas características. São as mesmas boards, mas a “marca” do circuito é determinada pelo país. O Arduino é comercializado dentro dos EUA e o Genuino fora dos EUA.

Continuar a ler

O papel do profissional de Marketing & Comunicação no sector das TIs em Portugal

No 29º Encontro das Geek Girls Portugal, lançaram-me o desafio de “transformar” a apresentação e escrever um artigo para a Programar, o que me traz hoje até vos, caros leitores.

Gostaria de vos apresentar e sensibilizar para debater alguns pontos sobre o contributo de um profissional de Marketing & Comunicação no sector das TIs. Ao longo deste artigo foco-me em alguns pontos debatidos ao longo do encontro, que se destinou essencialmente aos profissionais de Marketing que estejam a abraçar o desafio de desenvolver um gabinete de Marketing & Comunicação numa empresa do sector das TIs. De acordo com a minha experiência pessoal e profissional, deverão ter em mente os seguintes aspectos:

Continuar a ler

JavaScript 6

O JavaScript já não é só a linguagem de script da Web. Com o passar dos anos, cada vez mais pessoas recorrem a esta linguagem para automatizar a realização de várias tarefas, uma vez que tem um número infindável de utilizações práticas, que vão desde a criação de páginas Web até à administração de máquinas com diferentes sistemas operativos. Por conseguinte, o conhecimento das funcionalidades de JavaScript é uma mais-valia no currículo de qualquer programador.

Introdução

Neste livro são apresentadas as principais novidades, características e funcionalidades da versão 6 da linguagem JavaScript, com recurso a exemplos práticos. Para além de novos objetos e métodos que foram adicionados aos objetos existentes, esta nova versão introduz também várias novidades ao nível da sintaxe (por exemplo, a definição de classes) que contribuem para simplificar a escrita de código e aumentar a produtividade do programador. 

Continuar a ler

Modelação de Dados em UML – Uma Abordagem por Problemas

A utilização de linguagens formais para representação de aspectos de sistemas informáticos tem vários anos, tendo o UML – Unified Modeling Language – sido adoptado como um standard pelo Object Management Group (OMG) em 1997. No entanto, creio poder dizer que essa formalização, nos últimos anos, tem caído algo em desuso, em detrimento de modelos menos formais mas mais perceptíveis: ou seja, os developers têm-se preocupado mais em desenhar, quando o fazem, diagramas que sejam perceptíveis por outros, sem se preocuparem excessivamente no grau de adequação desses diagramas a standards existentes, dos quais o UML sobressai.

Continuar a ler

O que esconde o CQRS

Introdução

O que é o CQRS (Command Query Responsibility Segregation)? Quais os seus benefícios? Que desafios esconde?

Estas são algumas das questões que este artigo pretende responder, demonstrando que o CQRS parte de um princípio simples e que é capaz de evoluir para dar resposta a problemas mais complexos.

O que é o CQRS?

As origens do CQRS são baseadas no CQS (Command-Query separation), um princípio criado por Bertrand Meyer durante o desenvolvimento da linguagem de programação Eiffel.

Continuar a ler

Comunidades e Voluntariado Presencial

Comunidades: reuniões presenciaisCom o aparecimento de páginas de internet de eventos comunitários como o Eventbrite e Meetup possibilitou um aumento de comunidades gratuitas ligadas a startup, informática, promoções e outros.

Sou assistente assíduo de várias comunidades gratuitas sem fins lucrativos como IoT Portugal, NetPonto, O365PT, PTJug, SQLPort, e outros. Também faço voluntariado em algumas comunidade como o SQL Saturday Lisboa e Porto.

Continuar a ler

Shift Appens 2016 – Coimbra

Dia 19, 20 e 21 de Fevereiro de 2016, Coimbra encheu-se de jovens (e alguns menos jovens) dispostos a escrever um novo mundo em código.

O Pavilhão Centro de Portugal, nas margens do Rio Mondego encheu-se de vida pra um dos mais conhecidos hackathons portugueses. Os participantes foram maioritariamente estudantes ligados à informática, contudo desta vez o evento abriu as portas também a quem já deixou de ser estudante. Organizado pelo Núcleo de Estudantes de Informática da Associação Académica de Coimbra e pela Jeknowledge, este evento superou as expectativas dos participantes.

Continuar a ler

Raspberry Pi 3 Model B

Raspberry Pi 3 Model BDefinitivamente o Raspberry Pi veio para ficar. Na última edição da PROGRAMAR falamos de um novo membro da família, o Raspberry Pi Zero. Passados 3 meses, estamos a falar-vos de mais um novo membro. O Raspberry Pi 3.

A fundação que ultimamente nos tem habituado a ter novidades em curtos espaços de tempo, voltou a “surpreender” os seguidores mais fieis.

Se o Pi zero nos fazia voltar à simplicidade do circuito, o Pi 3 assume-se como o mais bem “preparado” da família, superando o seu antecessor o Pi 2, como alias, seria esperado.

Continuar a ler