Angular - Entendendo as dependências

Angular possui algumas de dependências para que possa rodar um Hello World, mas você já se perguntou o que são essas dependências e porque estão lá?

image

Quando eu comecei a programar e acredito que a maioria de nós já foi assim, eu costumava a procurar tutoriais de como resolver um determinado problema mas nunca buscava a fundo como aquela solução funcionava e não sabia o mal que isso traria para mim. Quando apenas copiamos e colamos, não entendemos como aquilo funciona por detrais dos panos e quando surge um problema, não sabemos como resolver.

Depois de muitos tapas na cara, aprendi a ler livros e pesquisar mais a fundo sobre o como as coisas funcionam e isso melhorou e muito minha vida.

Como sei que com a saída da nova versão do Angular, muitas pessoas podem ter essa dificuldade. No Angular a partir da versão 2 em diante, existem algumas dependências básicas para seu funcionamento:

  • ES6 Shim
  • Reflection API
  • zone.js
  • RxJS

ES6 Shim

ES6 Shim, traduzindo “enchimento” ou “calço”, fornece “enchimentos” para os buracos que navegadores mais antigos teem em relação as novas funcionalidades da ECMA Script 6 possui.

Resumindo, faz com que os navegadores antigos suportem recursos das versões mais recentes do Javascript.

No futuro, a utilização de shims como ES6 Shim não será mais necessária, quando versões antigas de navegadores entrarem em desuso. Navegadores como Microsoft Edge e versões mais recentes do Chrome já suportam os novos recursos da ES 6.

Metadata Reflection API

Já ouviu falar de decorators? reflection-metadata é a shim que dá suporte ao uso de metadados através de decorators. Esse recurso é crucial para o Angular, pois é através dele que se torna simples e possível a injeção de dependências em componentes.

Reflection-Metadata é uma proposta para a próxima versão do ECMA Script, o ES7.

Zone.js

Zone.js é um contexto de execução que persiste entre tarefas assíncronas. Zone é um patch low-level que cria hooks para que você possa “monitorar” tasks assíncronas, saber quando elas terminaram sua execução e etc, facilitando o a criação de profiling, debugging, testes, mocking e etc.

Mas porque angular o utiliza? Zone é utilizado pelo angular, além de fazer debug, para saber quando ele deve atualizar as views. Como Angular trabalha com tasks assíncronas, através do zone, ele pode saber quando uma determinada task finalizou e executar facilmente determinadas tarefas, sem ter que fazer chamadas $rootScope.$apply como é feito no angular 1.x.

Para saber mais sobre como funciona, segue uma ótima palestra feita por Brian Ford:

RxJS

RxJS é uma biblioteca de programação reativa para javascript. A definição mais simples de programação reativa é a programação com streaming de dados assíncronos. 

O recurso mais conhecido são os Observers que representa um evento stream. Através do uso de observers, podemos fazer múltiplas assinaturas e monitorar eventos de streams, alem de fazer filtros, mapeamentos e reduções diretamente na entrada de dados.

Se você quer se aprofundar mais em programação reativa, há um excelente artigo de introdução escrito por André Staltz em seu gist.

Conclusão

Boa parte desses recursos são já se tornaram propostas para as novas versões do JavaScript, Reflection, Observers e Zone já possuem propostas em andamento de implementação no ES7, se forem aceitas e implementadas a tempo, futuramente essas dependências poderão não ser mais necessárias.

Espero que tenha tirado suas dúvidas, fiquem com Deus e qualquer dúvida ou se precisarem de mais sobre um determinado assunto, só enviar suas perguntas. Abraços!

Linux para Desenvolvedores

Arquivo com os slides utilizados na palestra Linux para Desenvolvedores apresentada no devitz 2016.

BroTip #4 - Erro na instalação do psycopg2 após atualização do macOS? Saiba como resolver

image

O erro é bem simples, quando há uma novo macOS geralmente é lançado uma nova versão do Xcode, assim você precisa atualizar o command line tools, que nos dá as ferramentas e bibliotecas necessárias para compilação de diversos softwares. Eis o erro quando você tenta instalar o psycopg2 sem o command line tools instalado:


ld: library not found for -
clang: error: linker command failed with exit code 1 (use -v to see error: command 'clang' failed with exit status 1

Para corrigir o problema, basta executar o comando do Xcode para instalar o command line tools:


$ xcode-select --install

Após a instalação basta executar o instalador do psycopg2 normalmente.

Abraço, fiquem com Deus!

Livro: O último teorema de Fermat

Há uns meses vi uns colegas de trabalho falando sobre a história de Fermat, um matemático que viveu no século XVII e que tinha como principal diversão resolver e criar problemas relacionados a lógica e a teoria dos números. Fiquei tão curioso pela história que resolvi procurar o livro e encontrei numa ótima promoção da Amazon, pagando apenas 13 reais pelo livro físico.

livro-fermat

O livro é uma aula sobre a história da matemática usando como ponto central os esforços de estudiosos de vários tempos para conseguir uma demonstração para esse teorema, deixado como uma anotação de canto de livro por Pierre de Fermat alguns anos antes de sua morte e que só foi resolvido quase quatro séculos depois, tendo “derrotado” vários dos mais importantes matemáticos da história.

A leitura é bem tranquila e não é restrita apenas a pessoas com conhecimento matemático, já que os fatos são mostrados em uma linguagem muito clara e não se apega a detalhes de cálculo. Um outro ponto interessante é a forma que o autor traz uma minibiografia de todos os gênios que tentaram demonstrar o teorema e explica de forma clara qual a contribuição que cada um deixou para seus sucessores, o que me deixou bem curioso pra saber como a história terminaria.

Esse livro é uma ótima fonte para quem se interessa por matemática e também para aqueles que gostam de uma boa história. Mas não vá por mim, pois eu sou um mentiroso.

Domínios customizados no Heroku com PointDNS

Há tempos uso o heroku para testar algumas ideias mas nunca havia chegado ao ponto de apontar um domínio relevante pra lá, até hoje.

Bom, o heroku permite que você coloque um domínio próprio(desde que deixe seu cartão de crédito lá), mesmo no plano gratuito, o problema é que como o apontamento só pode ser feito para o domínio do app no heroku(algo como app-exemplo.herokuapp.com), não temos como fazer apontamentos que não sejam do tipo CNAME. Para termos mais flexibilidade nas configurações de DNS o heroku oferece alguns addons, entre eles o PointDNS, que no plano gratuito oferece a possibilidade de várias configurações para um domínio. Então vamos lá configurar.

Adicionando o PointDNS ao projeto

O primeiro passo para configurar o serviço de DNS é vincular o PointDNS ao projeto. Isso pode ser feito tanto pela página do addon no heroku quanto pela linha de comando, usando o heroku toolbelt:

$ heroku addons:create pointdns:developer -a nome_do_app
Creating pointdns:developer on ⬢ nome_do_app...

Feito isso você pode adicionar um domínio customizado pelo dashboard ou pela linha de comando:

$ heroku domains:add dominio-exemplo.com -a nome_do_app
$ heroku domains:add *.dominio-exemplo.com -a nome-do-app

Para abrir o painel do PointDNS você pode seguir usando a linha de comando:

$ heroku addons:open pointdns

O painel abrirá no seu browser padrão. Na aba “Nameservers” você pode encontrar uma lista de endereços de DNS que você pode usar para fazer o apontamento do domínio(no painel da godaddy, registro.br, etc).

A partir daí você pode ir na aba “Domains” e selecionar o seu domínio criado nos passo anteriores, podendo criar registros de redirect , CNAME, A e fazer configurações mais complexas.

poindns-exemplo

Bom, é isso. Até onde deu pra ver as únicas limitações do PointDNS na versão gratuita é a quantidade de domínios(apenas 1) e a quantidade de registros(no máximo 10) e resolve bem o problema que se propõe.

Abraço!

Como criar aplicativos para Smart TV Samsung - Instalando ambiente de desenvolvimento

Nesse post, vou mostrar o processo de configuração e instalação do ambiente de desenvolvimento de aplicativos para Samsung Smart TV. Irei cobrir a versão 5.1 do SDK e Emulador.

Pré requisitos de sistema

  • Processados: Dual Core 1.5GHz / Single Core 3GHz ou superior
  • RAM: 1 GB ou superior
  • OS: 
  •     Windows: Windows XP Service Pack 2 ou superior, Windows 7
  •     Mac OS X: 10.6 ou superior
  •     Linux: qualquer SO que suporte Virtual Box 4.2.4 ou recentedeve suportar o Smart TV SDK 5.1. Uma lista completa dos sistemas operacionais suportados: https://www.virtualbox.org/wiki/Linux_Downloads
  • Resolução de tela: 1280 x 1024 ou superior
  • HDD: 5GB superior

Pré requisitos de software

Instalação

Instalando o Emulador

Após fazer a instalação do Virtualbox, podemos agora instalar o Emulador da Samsung Smart TV:

  1. Selecione File ( Arquivo ) ‣ Import Appliance ( Importar aplicação ).
  2. Selecione Open Appliance (Abrir Aplicação) e selecione o arquivo do emulador baixado que possui a extensão “.ova”.
  3. Selecione Next ( Próximo ) e então Import ( Importar ).
  4. Depois que o emulador é importado, o share folder ( diretório compartilhado ) deve ser modificado. Selecione o emulador e em seguida escolha Settings (Configurações) ‣ Shared Folders ( Diretórios Compartilhados).
  5. A imagem abaixo mostra a configuração padrão. Se você deseja escolher um local diferente, por favor selecione um novo diretório para Apps ( que pode ser em qualquer lugar ).

Instalando o Editor IDE

  1. Descompactar o arquivo SDK baixado.
  2. Para iniciar a IDE, basta executar o arquivo dentro do diretório descompactado chamado eclipse.exe ( A extensão vai mudar de acordo com sistema operacional).
  3. Quando a IDE iniciar, basta selecionar o diretório de trabalho, onde os projetos serão criados e mantidos, qualquer local pode ser selecionado.


Pronto, feito isso, você terá todas as ferramentas necessárias para dar inicio ao desenvolvimento de aplicativos para Samsung Smart TV. O próximo artigo irei mostrar como desenvolver um aplicativo simples e testa-lo no Emulador.

As informações dessa postagem podem ser encontrados na integra em inglês e mais informações em clicando aqui.

É isso galera, qualquer dúvida pode mandar seu comentário ou pergunta no link encontrado no topo. Abraços e fiquem com Deus!

Como criar aplicativos para Smart TV Samsung - Estrutura de aplicativos

Aplicativos Samsung Smart TV são baseados na web, ou seja, são softwares que rodam em tv digital conectada a internet. A principal diferença em páginas da web e aplicações baseadas na web é que o aplicativo pode acessar recursos de hardware, como por exemplo em uma smart tv, você pode utilizar recursos como aumentar e diminuir volume diretamente pelo aplicativo. 

Os usuários podem baixar os aplicativos através do SamsungApps e instalar em suas televisões.

Camadas de um aplicativo Smart TV

Fonte: Forum Samsung

Estrutura de arquivos

A estrutura de um aplicativo Smart TV é uma web page, que contem:

  • Página HTML - Responsável por mostrar a estrutura da aplicação.
  • Arquivo CSS - Responsável por definir o estilo visual da aplicação.
  • Javascript - Responsável por controlar os comportamentos da aplicação.
  • Config.xml - Contem informações sobre o ambiente de operação e versão da aplicação. Este arquivo é obrigatório para a execução do aplicativo.
  • Flash não é permitido

Estrutura do aplicativo

Fonte:  Forum Samsung

Aplicativos Samsung Smart TV rodam em um browser ( navegador ) e também incluem um Gerenciador de Aplicações que manipula tarefas de aplicativo relacionados.

Gerenciador de Aplicações

Fonte:  Forum Samsung

Tipos de Visualização

Existem diferentes tipos de visualizações para que aplicativos possam ser mostrados, segue abaixo alguns exemplos:

Aplicativos Full-screen

São aqueles aplicativos que rodam em tela cheia, tomando todo espaço da tela.

Aplicação Single-Wide 

São aplicações que são visualizadas em uma parte da tela.

Aplicativos Ticker

São aplicações que permanecem na tela enquanto você está fazendo outras coisas em sua TV.

Essa é a estrutura básica de aplicativos Samsung Smart TV e alguns dos tipos de aplicativos que podem ser feitos. No próximo post, irei falar um pouco sobre a criação de um projeto e como fazer testes através do emulador.

É isso galera, qualquer dúvida comentem ou mandem suas perguntas através do link de perguntas no topo. Abraços, fiquem com Deus!

Como criar aplicativo para Samsung Smart TV - Guia de inicio

image

Hoje as smart tvs estão vindo com tudo no mercado. Com suas próprias lojas de aplicativos, as empresas de smart tv desenvolvem seus próprios ambientes para o desenvolvimento de aplicativos. E nesse post, vou mostrar um pequeno guia sobre o processo de desenvolvimento de apps para a plataforma Samsung.

Segue o guia de introdução que a Samsung fornece para o desenvolvimento de aplicativos:

1. Instalar o Samsung Smart TV SDK

Antes de iniciar o desenvolvimento de um aplicativo você precisa instalar o Samsung Smart TV SDK. Você pode encontrar informações sobre a instalação aqui.

2. Criar um Projeto de aplicativo para TV na IDE para o Samsung smart TV SDK.

O Samsung smart TV SDK dá suporte a uma IDE baseada no Eclipse. Se você já possui uma experiência com eclipse você não terá dificuldades. A Samsung Smart TV SDK suporta alguns tipos de projeto, projeto básico, Projeto Javascript, Projeto CAPH que suporta CAPH Framework, Projeto Apps Framework 2.0 e Projeto PNaCl. Mais informarções sobre alguns tipos de projetos em:

3. Você precisa checar sua aplicação em um emulador ou em uma Samsung Smart TV através de sincronização.

Samsung smart TV SDK suporta um emulador que testa e checa uma aplicação em uma maquina virtual. Mas o emulador não suporta todas as funções de uma Samsung smart TV. Então você deve testar e checar sua aplicação em uma Samsung smart TV para tornar seu aplicativo melhor. Um guia para testar sua aplicação em um TV pode ser encontrado aqui.

4. Você precisa definir um ponto de inicio e um fim de fim no aplicativo Samsung Smart TV.

Aplicativos Samsung Smart TV possuem um ponto de inicio e fim. Se você não fizer a aplicação com esses pontos de partida e finalização do aplicativo, você poderá ter problemas finalizando sua aplicação de maneira inadequada e ela poderá não inicializar novamente. Antes de usar o comando de inicializar e finalizar o aplicativo, é preciso importar o objeto widget no Samsung Smart TV SDK:

<script src=“$MANAGER_WIDGET/Common/API/Widget.js”></script>
var widgetAPI = new Common.API.Widget();

Os comandos a serem utilizados para inicializar e finalizar uma aplicação através do objeto widget são:

widgetAPI.sendReadyEvent(); // Inicializar uma aplicação
widgetAPI.sendReturnEvent(); // Finalizar uma aplicação (Chave de retorno) widgetAPI.sendExitEvent(); // Finalizar uma aplicação (Chave de saida)

5. Entender como controlar um controle remoto Samsung Smart TV

Uma das coisas mais importantes no desenvolvimento de aplicações Samsung Smart TV é controlar ações vindas através do controle remoto. Os eventos de teclas são similares aos encontrados no HTML. Se você já é familiarizado, você poderá criar facilmente seus próprios eventos de teclas para sua aplicação. Você pode encontrar um guia sobre como controlar um controle remoto Samsung aqui.

6. Você precisa saber como criar conteúdo de mídia no Samsung Smart TV.

Além das funções básicas de TV, há também suporte para tocar mídias. Você pode facilmente criar aplicações para tocar alguns conteúdos de mídias. Segue alguns links para ajudar você:

Esse guia pode ser encontrado na integra em: http://www.samsungdforum.com/Guide/?FolderName=ovw001&FileName=index.html

Com essas informações básicas você terá um norte para a criação de aplicações para Samsung Smart TV. No próximo post, irei mostrar como funciona uma aplicação, organização e arquitetura de uma aplicação. 

Qualquer dúvida mande sua pergunta ou comentário que será prazer ajudar. Abraços, fiquem com Deus!

6 meses no Rio de Janeiro

Há tempos planejava me mudar para uma cidade maior e entre as cidades brasileiras o Rio de Janeiro sempre esteve em primeiro lugar na minha lista de possibilidades. Convencer a Jerssica de que essa seria uma boa decisão não foi nada fácil e não aconteceu da noite pro dia, mas depois de alguns meses de muita conversa - e de vários “e se” - chegamos a um consenso e decidimos que esse seria o melhor “próximo passo” que poderíamos dar na nossa vida.

Processo seletivo

Logo que tomamos a decisão entrei no processo seletivo para uma vaga no time de plataformas da Globo.com. O processo é separado em algumas fases. No início tive uma entrevista por telefone com o gestor da área, após um longo papo(~1h) fui convidado a fazer um desafio de programação, topei de imediato.

Alguns dias depois de enviar o código do desafio, entraram em contato comigo me convidando a ir até a sede da empresa e participar de mais uma fase do processo. Nessa fase eu passaria o dia dentro da empresa interagindo com um ou dois times para me avaliarem. Algum tempo depois dessa visita à empresa recebi uma proposta e decidi aceitar, em mais ou menos um mês eu embarcava de Imperatriz para o Rio.

Cittá América / Globo.com Cittá América / Globo.com

A mudança

Sem dúvidas essa foi a parte mais chata de todas. Como forma de facilitar a contratação de pessoas de outras partes do país, a Globo.com ajuda na mudança dos funcionários contratados. Até aí beleza, mas eu precisava me livrar de muita coisa que não poderia trazer(em Imperatriz a rede é 220v e aqui no Rio é 110, tchau eletrônicos), entregar a casa que eu morava, embalar caixas, desmontar móveis, etc. Uma tarefa e tanto pra ser feita em um mês mas tinha que dar.

E deu. Entreguei a casa 2 dias antes da viagem e ficaram poucos detalhes que a Jerssica ficou de resolver antes de vir pra cá com o Bruce. Aliás, esse foi outro “problema”, mas conseguimos resolver. Apesar de encher muito o saco durante o vôo conseguimos trazer o Bruce sem problemas. Aliás, se o Bruce não pudesse vir ninguém viria, né.

Então há exatos 6 meses peguei o vôo para o Rio. Uma coisa chata que tivemos que lidar é que como passei o primeiro mês inteiro procurando apartamento para alugar e morando num hotel, tivemos que ficar separados, a Jerssica e o Bruce lá em Imperatriz e eu aqui. Mas já passou, ainda bem. :)

Achar um lugar pra morar foi um desafio. A Globo.com fica na Barra da Tijuca, que é um bairro bem caro e bem distante da parte mais famosa da cidade, logo, morar longe não era uma boa opção mas morar perto também não sairia barato. Depois de visitar váaaarios apartamentos nas redondezas e aqui na Barra achei um apartamento bacana com um custo aceitável e de certa forma bem perto do trabalho. Com o apartamento alugado pude receber meus negros maravilhosos e começar mais uma fase da jornada, a adaptação.

O Bruce parece que gostou da nova vista. :) O Bruce parece que gostou da nova vista. :)

A vida no Rio

De certo modo acredito que tenhamos subestimado essa mudança. Começar uma nova vida do zero nunca vai ser algo fácil. No fim das contas a gente deixou todo o conforto que tínhamos da nossa casa, família e amigos por um monte de incertezas. Mas mesmo com tudo isso acreditamos que esteja valendo a pena.

Comparar Imperatriz com o Rio não faz sentido, são cidades bem diferentes, com estilos diferentes e funções diferentes. E foi com essa cabeça que cheguei aqui e foi justamente isso que deixou tudo mais fácil.

Fomos no Maracanã ver o Barcelona da Gávea Fomos no Maracanã ver o Barcelona da Gávea

Mas nem tudo são flores e tem algumas coisas que me incomodam por aqui. O custo de vida é um negócio maluco, e aqui na Barra é pior ainda, a sensação que se tem é de que você está o tempo todo dentro de um aeroporto. A distancia entre os lugares também é bem chato, até os lugares que teoricamente são perto no fim das contas são bem longe. No geral as pessoas parecem estar boladas o tempo inteiro e pelo menos comigo tem sido raro dar um obrigado e ouvir um de nada.

Algumas coisas me surpreenderam de forma positiva. O transporte público apesar de ser uma bosta é muito bom dependendo de onde você veio. Eu não estava acostumado a poder ir tão longe gastando tão pouco. Outra coisa é a violência que apesar de ser algo bem presente não é tão ruim quanto se vê no jornal.

No mais, ainda estamos acostumando com a cidade e com as pessoas. Ainda nos assustamos ao entrar no supermercado e ver um senhorzinho de sunga, ou em perceber que dois(ou três) corpos podem sim ocupar o mesmo espaço como acontece nos ônibus. Ou que o pouco aqui ainda é muito, o perto ainda é muito longe, o barato ainda é bem caro e coisas do tipo. São detalhes que a gente vai aprendendo com o tempo, mas que não chegam a ser um problema.

A cidade é maravilhosa, mas se liga.

Instalando gettext ou xgettext no mac osx

Falaaa galera, blz? Se você foi um daqueles que rodou o comando django-admin.py makemessages no osx e se deparou com o erro:

CommandError: Can’t find xgettext. Make sure you have GNU gettext tools 0.15 or newer installed.

Eis que este post é para você. Para resolver esse problema de forma rápida, você vai precisar do Brew instalado no osx. E o comando é este:

$ brew install gettext

$ brew link gettext –force

O primeiro comando vai instalar o pacote gettext para você e o segundo irá fazer o Symlink dos binários no sistema.

Feito isso, os binários do gettext estarão disponíveis para uso.

Abraços, qualquer dúvida, só perguntar.

Fiquem com Deus!