terça-feira, 31 de janeiro de 2017

Blog Lambda3 - Como usar NuGet sem escancarar a rede?

Mais um post da série “causos de ALM nos cliente Lambda3“.
De um lado, os desenvolvedores querendo ter acesso irrestrito ao NuGet (www.nuget.org) por razões óbvias. De outro lado, o pessoal responsável por segurança e infraestrutura preocupados com o risco de liberar o acesso irrestrito ao NuGet no firewall.
#comofaz?

O problema

O grande desafio encontrado neste caso – que, aliás, é comum à maioria de nossos clientes – é como equilibrar entre a conveniência para os desenvolvedores e a segurança para a empresa?
Mais especificamente: a política de firewall da empresa em questão prevê, entre outras coisas, whitelisting de IPs que podem ser acessados a partir de sua rede interna. Em outras palavras, é preciso liberar um determinado range de IPs para que eles possam ser acessados.
Entretanto, em tempos de cloud computing e de endereços IPv4 esgotados, está cada vez difícil sustentar esta estratégia. Isso porque é cada vez mais comum que provedores de serviço mudem os IPs de seus serviços com uma certa frequência, contando com os serviços de DNS para notificar os clientes quando tais mudanças acontecem.
No caso do NuGet, isso quer dizer que os IPs dos endpoints de serviço do NuGet podem mudar. Veja o resultado atual (consultado no dia da publicação deste post) do DNS lookup para um dos domínios do NuGet:
C:\> nslookup api.nuget.org

Server:   ***************
Address:  ***.***.***.***

Non-authoritative answer:
Name:    cs9.wpc.v0cdn.net
Addresses:  2606:2800:157:1508:1539:174:1a75:1191
          192.16.48.200
Aliases:  api.nuget.org
          db16.wpc.azureedge.net
Viu como o domínio api.nuget.org é, na verdade, um alias (ou CNAME) para um CDN? Isso quer dizer que não há nenhuma garantia de que o IP retornado por api.nuget.org vai ser sempre 192.16.48.200. Pelo contrário – a natureza dinâmica dos CDN é quase uma certeza de que esse IP vai mudar em algum momento.
Portanto, uma liberação baseada em IPs não resolve. Neste caso, qual a alternativa?

Soluções

Obviamente precisamos de uma alternativa. Principalmente porque, no caso deste cliente, ele nos perguntou explicitamente:
Como outros clientes de você atuam nesta situação?
Bem, deixe-me compartilhar com vocês o que andamos vendo em nossos clientes:

Acesso irrestrito a *.nuget.org

Sim, é claro que esta é uma opção válida – ainda que pouco desejável em muitos de nossos clientes, que ficam desconfortáveis com acesso irrestrito à internet. Entretanto, esta é uma opção relativamente comum, em especial naqueles clientes que não podem (ou não querem) ter o overhead de gerenciar o acesso ao NuGet. Afinal, limitações de acesso aqui podem impactar diretamente na produtividade dos desenvolvedores.
Se você não se quiser liberar todos os domínios abaixo de nuget.org (*.nuget.org), pode liberar apenas estes dois:
  • www.nuget.org (HTTP, HTTPS);
  • api.nuget.org (HTTP, HTTPS).
O maior inconveniente dessa abordagem (segundo alguns de nossos clientes) é que o acesso precisa ser dado para todo mundo: desenvolvedores, agentes de build e release, servidores… Todo mundo pode precisar acessar o NuGet.org.
Será que não tem um meio-termo?

Servidor proxy de NuGet

Sim, há um meio-termo. Com um servidor de proxy de NuGet (usamos o ProGet em alguns de nossos clientes), não há a necessidade de liberar o acesso ao NuGet.org para todo mundo. Apenas o servidor de ProGet precisa ter acesso irrestrito ao NuGet.org.
Quando você configura um servidor ProGet interno, ele é quem baixa os pacotes do NuGet.org para você – por isso é que ele é um “proxy” do NuGet. Isso implica em uma mudança na configuração do NuGet na máquina dos desenvolvedores.
No Visual Studio de cada desenvolvedor, vá em Tools | Options, selecione a página Package Sources da configuração do NuGet e faça duas coisas:
  • Inclua o endereço do feed do seu proxy (http://proget/nuget/default no meu exemplo); e
  • Desabilite os outros feeds de acesso ao NuGet público.
Caixa de diálogo de configuração do Visual Studio, na página "Package Sources", com um feed personalizado apontando para um servidor ProGet interno e os outros feeds desabilitados
Caso você queira evitar de fazer esse processo de configração “na mão”, pode ao invés disso atualizar o arquivo de configuração do NuGet de cada desenvolvedor (por padrão, fica em C:\Users\<nome do usuário>\AppData\Roaming\NuGet\nuget.config), seguindo o exemplo abaixo:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="Package source" value="http://proget/nuget/default" />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
  </packageSources>
  <disabledPackageSources>
    <add key="nuget.org" value="true" />
    <add key="Microsoft and .NET" value="true" />
    <add key="Microsoft Visual Studio Offline Packages" value="true" />
  </disabledPackageSources>
</configuration>
Um benefício adicional, do ponto de vista de segurança, é que o ProGet permite fazer a “curadoria” dos pacotes – ou seja, é possível aprovar/reprovar pacotes que aparecem à disposição dos desenvolvedores. Com isso, as empresas acabam com uma alternativa ainda mais segura: o invés de barrar/liberar o NuGet.org como um todo, podem fazer isso seletivamente – pacote a pacote, se necessário.

Importante

O recurso de proxy de feeds do ProGet não está disponível na versão gratuita. Para mais detalhes, visite http://inedo.com/proget/pricing

Liberação por IP

Bom, se ainda assim nada der certo e você precisar fazer a liberação por IP, resta um problema: Como saber se/quando os IPs do nuget.org mudaram? Uma alternativa é criar um script e executá-lo de tempos em tempos, a fim de verificar se os IPs mudaram ou não (visto que não há um feed oficial com essa finalidade).
Como ponto de partida, você pode dar uma olhada nest Gist. Ele tem uma função chamada Resolve-ServerAddressque recebe um FQDN como parâmetro e retorna seu IP atual, indicando se ele mudou desde a última execução. Em caso positivo, você poderia por exemplo enviar um email para um administrador avisando da mudança, a fim de que ele possa reconfigurar as regras de firewall. Daí, basta agendar sua execução (via Agendador de Tarefas do Windows) e pronto!

Passando a régua

NuGet é algo que veio para resolver um monte de problemas no ecossistema .NET – mas, como qualquer mudança de paradigma, traz seus próprios desafios. Achar o ponto de equilíbrio entre a conveniência desejada pelos desenvolvedores e a segurança necessária para a infraestrutura da empresa não é fácil, mas não dá para empurrar com a barriga. Sem resolver esse tipo de questão, não faz o menor sentido começar a discutir DevOps e assuntos correlatos.
E aí, o que achou? Deixe seus comentários!
Um abraço,
Igor
(Cross-post de http://www.tshooter.com.br/2017/01/27/como-usar-nuget-sem-escancarar-rede/)

Portal ERP - Mercado mundial de serviços de TI crescerá 4,2% em 2017

Publicado: 29 Janeiro 2017

Com relação aos gastos gerais com TI, pesquisa do Gartner Group aponta que taxa de crescimento será inferior às projeções anteriores, que eram de 3%.

Eles devem totalizar US$ 3,5 trilhões em 2017, um aumento de 2,7% em comparação a 2016.

O Gartner Group revelou na última semana que os gastos mundiais com TI devem totalizar US$ 3,5 trilhões em 2017, um aumento de 2,7% em comparação a 2016. Entretanto, essa taxa de crescimento é inferior às projeções anteriores, que eram de 3%.
“2017 estava prestes a ser um ano de recuperação em gastos com TI. Algumas tendências importantes convergiram, inclusive Cloud, blockchain, negócios digitais e inteligência artificial. Normalmente, isso teria impulsionado os gastos com TI muito além do crescimento de 2,7%. No entanto, parte da incerteza política nos mercados globais promoveu uma estratégia de esperar para ver o que acontece, fazendo com que muitas empresas evitassem investimentos em TI”, explica John-David Lovelock, Vice-Presidente de Pesquisas do Gartner.
A Previsão de Despesas Mundiais de TI do Gartner é o mais importante indicador das principais tendências tecnológicas nos mercados de hardware, software, serviços de TI e telecomunicações. 
Por mais de uma década, executivos globais de TI e de negócios têm usado esses relatórios trimestrais altamente antecipados para reconhecer oportunidades e desafios de mercado e basear suas decisões de negócios críticas em metodologias comprovadas.
Já o mercado mundial de serviços de TI crescerá 4,2% em 2017. Os investimentos dos compradores em negócios digitais, automação inteligente, e otimização e inovação de serviços continuam a impulsionar o crescimento no mercado, mas o cuidado na hora de comprar, alimentado por grandes desafios econômicos, continua a ser um contrapeso para um desenvolvimento mais rápido.
“A variação de crescimento das despesas será muito maior em 2017 do que nos últimos anos. Normalmente, o ambiente econômico provoca algum nível de divisão, no entanto, em 2017, isso é agravado pelo aumento dos níveis de incerteza”, afirma Lovelock. “O resultado dessa incerteza é uma divisão entre indivíduos e corporações que gastarão mais devido às oportunidades que surgem e aquelas que retrairão ou suspenderão os gastos com TI".
Por exemplo, a criação agressiva de plataformas de computação em Nuvem por empresas como Microsoft, Google e Amazon é um item que está impulsionando a previsão feita para o mercado de servidores globais de atingir 5,6% de crescimento em 2017.
Isso foi revisto em relação à previsão de crescimento de 3% no último trimestre, sendo um aumento suficiente para superar o esperado declínio de 3% em armazenamento externo controlado pela base e permitir que o segmento de sistemas de Data Center cresça 2,6% em 2017.
A metodologia de previsão de despesas de TI do Gartner depende fortemente da análise rigorosa das vendas de milhares de fornecedores em toda a gama de produtos e serviços de TI.
O Gartner utiliza técnicas de pesquisa primária, complementadas por fontes de pesquisa secundárias, para construir uma base de dados abrangente de informações de tamanho de mercado para basear sua previsão.
Fonte: Redação

sexta-feira, 27 de janeiro de 2017

Ambiente de simulação baseado no jogo Super Bomberman para ensino e pesquisa em Inteligência Artificial

Igor V. de Souza¹, Fábio M. Pereira¹

¹Departamento de Ciências Exatas e Tecnológicas – Universidade Estadual do Sudoeste da Bahia (UESB) Vitória da Conquista, BA – Brasil

Resumo. Existem diversos problemas envolvendo o processo de ensino aprendizagem na área da Inteligência Artificial, como os que envolvem a compreensão superficial dos conteúdos pelos discentes ou a ausência de ambientes que permitam a aplicação de conteúdos vistos em sala de aula. Diante disso, neste trabalho, propomos a criação do jogo programável BomberAgent a fim de apresentar um ambiente de simulação e testes que possa ser explorado como uma ferramenta para estudo, análise e aplicação de técnicas na área de Inteligência Artificial.  

CIO - Como se tornar uma empresa orientada a dados

Carlos Eduardo Salvador *

Publicada em 25 de janeiro de 2017 às 16h51

-See more at: http://cio.com.br/opiniao/2017/01/25/como-se-tornar-uma-empresa-orientada-a-dados/#sthash.ydKIqUFv.dpuf

Todo mundo está falando sobre como se tornar uma empresa orientada a dados para melhorar a tomada de decisões e a gestão como um todo. Mas o que, afinal, significa ser uma empresa orientada a dados? 
1 - Aborda os problemas de maneira objetiva
“Ser orientado a dados é, antes de mais nada, ter como meta nas decisões corporativas a objetividade e estar sempre baseado em evidências,” afirma Kirk Borne, principal cientista de dados da Booz Allen Hamilton. No seu prefácio para o livro "Data-Driven Leaders Always Win"(Líderes orientados a dados sempre vencem, em tradução literal), ele afirma que esse tipo de mentalidade engloba todo tipo de decisão em qualquer área do negócio — incluindo produtos (fabricação, logística, colocação, precificação, e conteúdo social/móvel/de internet), processos (monitoramento, detecção, descoberta, previsão e otimização), e pessoas (funcionários, clientes, acionistas e possíveis novos clientes).

2 - Designa um defensor dos dados no comando
Diversas empresas orientadas a dados já reconhecem que precisam ter alguém responsável pela iniciativa de análise de dados na corporação. “O executivo responsável pode ter diversos cargos (e papéis) nas diferentes corporações, mas a sua importância é real. Pode ser o CDO (chief data officer), o CDS (chief data scientist), ou o CAO (chief analytics officer)”, afirma Borne.

3 - São mais criativas na obtenção dos dados
Os departamentos podem estar com os dados jogados em um canto que eles não veem nenhum valor, mas que podem ser muito importantes para outras áreas. É tudo uma questão de pensar sobre todas as possibilidades disponíveis. De acordo com um relatório da McKinsey & Company, “normalmente as empresas já possuem os dados que precisam para resolver problemas de negócios, mas os gestores muitas vezes não sabem como podem usar essas informações para tomar decisões de crucial importância. Executivos da área de operações, por exemplo, talvez não visualizem o valor em potencial de dados sobre a atuação por dia ou por hora da fábrica e do atendimento ao cliente. Empresas orientadas a dados “incentivam uma análise mais ampla dos dados ao serem mais específicas em relação aos problemas e as oportunidades que precisam resolver”.

tuneldados
4 - Todo mundo tem acesso a algum dado
Empresas orientadas a dados oferecem algum nível de acesso para vários níveis da sua força de trabalho. “No entanto, quase ninguém tem acesso a tudo”, escreve Satyen Sangani para a VentureBeat. “Há pouquíssimas empresas que permitem que todos sejam capazes de ver tudo.” Por mais que a segurança dos dados seja algo fundamental, “a maioria das empresas orientadas a dados é capaz de atingir um nível de maturidade em que conseguem criar processos de negócios para equacionar esse tipo de problema”.

5 - Desenvolvem profissionais “renascentistas”
Em empresas orientadas a dados, executivos de análise são motivados a serem profissionais “renascentistas de várias maneiras, tendo profundo conhecimento das mais diversas disciplinas”, de acordo com análise publicada pela EY. “Os executivos na função de líderes em análises também precisam ter profundo conhecimento dos negócios, assim como uma disposição para inovar para serem capazes de levar ao mundo real as descobertas possibilitadas pelas análises.”

6 - Colocam as pessoas em primeiro lugar
Análise de dados pode parecer algo frio e com foco em cálculos, mas, no seu núcleo, está o respeito pelas pessoas. Os líderes em análise “possuem competências avançadas em gestão de pessoas, na esfera relacionada aos dados e as análises”, de acordo com a EY. Empresas orientadas a dados também fornecem “programas robustos de treinamento que atendem a escassez potencial de certas competências”.

7 - Incentivam uma mentalidade orientada para as análises
 “O sucesso de uma empresa orientada a dados depende de criar uma mentalidade com foco nas análises e em permitir que os executivos de negócios se tornem melhores consumidores de análises”, conforme o relatório da EY sugere. “A disseminação da mentalidade de análise é mais eficiente quando as pessoas se sentem confortáveis com a ideia de análise. Os 10% do topo da empresa têm maior probabilidade do que seus pares de realizar seminários e workshops no escritório, matricular funcionários em treinamentos externos ou em coaching, e para oferecer mentoria por profissionais ou líderes especializados em dados e de análises.”


(*) Carlos Eduardo Salvador é gerente sênior de pré-vendas da Informatica
- See more at: http://cio.com.br/opiniao/2017/01/25/como-se-tornar-uma-empresa-orientada-a-dados/#sthash.ydKIqUFv.dpuf

quinta-feira, 26 de janeiro de 2017

O uso da Inteligência Artificial (IA) na Formulação da Estratégia Organizacional: Um Estudo sobre a Aplicação da Computação Cognitiva em Empresas

Klaus Fuchs1 Luis André¹
Wernecke Fumagalli²

1. Aluno do 8º período do curso de Administração da FAE Centro Universitário. Bolsista do Programa de Apoio à Iniciação Científica (PAIC 2015-2016). E-mail: kofuchs@gmail.com
2. Doutor em Administração pela Pontifícia Universidade Católica do Paraná. Professor da FAE Centro Universitário. E-mail: luis.fumagalli@fae.edu

RESUMO 
A aplicação de novas metodologias de processamento na área da Inteligência Artificial (IA) tem demonstrado um potencial cognitivo que sugere uma vasta utilização em diferentes áreas. Este artigo pretende discorrer sobre a sua utilização no processo de tomada de decisões referentes ao planejamento estratégico organizacional. Para isso, com o objetivo de definir as possibilidades atuais dessas tecnologias, foram realizados levantamentos sobre o estado atual do processamento de informações que necessitem reconhecimentos do modelo de pensamento humano para que os algoritmos possam ser executados com variáveis traduzidas para uma linguagem computacional. A pesquisa bibliográfica e documental possibilitou a validação dos objetivos propostos e a criação de um modelo lógico de processamento das informações inseridas com base nas diretrizes estratégicas da empresa, construído com base na pesquisa experimental. Os resultados obtidos podem servir de base para estudos posteriores já que o que se apresenta neste artigo são modelos hipotéticos baseados em conceitos da Administração, sem grandes desenvolvimentos na criação dos algoritmos necessários.



Portal ERP - Oracle anuncia programa de expansão de startups

Publicado: 24 Janeiro 2017

Oracle PortalERP45 0904e
Companhia dará apoio às startups em sete cidades pelo mundo, incluíndo São Paulo.

Com o Programa Oracle Startup Cloud Acelerator, a empresa pretende impulsionar a inovação e novas soluções na nuvem.

Oracle anunciou nesta terça-feira (24/01) a ampliação do programa Oracle Startup Cloud Accelerator, que tem por objetivo o de impulsionar a inovação e novas soluções na nuvem ao redor do mundo.
A proposta da empresa é levar o programa a sete novas cidades, como: Bristol (Inglaterra), Deli e Mumbai (Índia), Paris (França), São Paulo (São Paulo), Cingapura e Tel Aviv (Israel).
O programa foi lançado pela companhia, na Índia, em abril de 2016 e foi criado por membros da equipe de pesquisa e desenvolvimento da Oracle.
O Oracle Startup Cloud Accelerator oferece seis meses de orientação de especialistas técnicos e de negócios, tecnologias avançadas, um espaço de coworking, acesso a clientes, parceiros e investidores, além de créditos livres para as soluções de Oracle Cloud. A ação também oferece uma rede global em expansão composta por outras startups. 
Com base nas próprias atividades iniciais de um novo negócio, a Oracle acredita que apoiar o empreendedorismo e a criatividade entre empresas emergentes é fundamental para a promoção da inovação tecnológica no mundo. 
O programa é aberto a startups de tecnologia ou baseadas em tecnologia em fase inicial. As empresas interessadas poderão se candidatar ao decorrer de 2017 de acordo com o cronograma de cada uma das novas cidades. 
“Depois do sucesso do lançamento desse programa em Bangalore, na Índia, estamos empenhados em desenvolver um ecossistema de apoio às startups em todo o mundo”, afirma Thomas Kurian, presidente da área de Desenvolvimento de Produtos da Oracle. 
“A nuvem está abrindo espaço para inovações incríveis em todos os aspectos dos negócios e em todos os setores. Queremos apoiar essa nova revolução tecnológica impulsionada pela nuvem”, diz. 
Fonte: Redação

quarta-feira, 25 de janeiro de 2017

Profissionais TI - Novidade no Google Drive, vem aí o Team Drives

Apesar do Google Drive permitir o compartilhamento, é comum os usuários perderem muito tempo tentando localizar um arquivo compartilhado por ele, muito disso se deve ao fato de existirem muitos mecanismos de busca oferecidos pelo produto, soma-se a isso a falta de hábito do usuário em utilizar estas ferramentas e também a falta de treinamento adequado.
Sensível a este cenário a Google irá lançar em breve o Drives de Equipe / Team Drives, que é um recurso que ajuda no problema de Organização de Arquivos. No momento apenas alguns usuários tem acesso a este recurso em caráter de teste, quando estiver 100% testado ele será lançado.
O Drive de Equipe é um novo Painel adicionado ao Google Drive que permite aos usuários de um domínio G-Suite, compartilharem entre si arquivos num local único e específico para suas atividades.
Por exemplo, suponhamos que a minha empresa tenha 4 equipes de colaboradores focados nas seguintes atividades: Financeiro, Marketing, RH e TI. Poderíamos criar um repositório de dados para cada equipe e depois convidar os membros de cada equipe para participarem deste local.

COMO ACESSAR

Para acessar, localize no canto superior à esquerda da tela do Google Drive o ícone Meu Drive e abaixo dele Drives de Equipe (Team Drives). Se nenhum Drive de Equipe ainda não foi criado, haverá um link no centro da tela oferecendo essa possibilidade.
Drive de Equipe
Caso existam Drives de Equipe criados, você terá uma imagem representando cada um. Se desejar criar um novo, clique no Botão “NOVO DRIVE DE EQUIPE” no canto superior esquerdo da tela.

CONFIGURANDO UM DRIVE DE EQUIPE

Para configurar um Drive de Equipe, podemos fazê-lo de duas formas. A primeira e mais simples é clicar com o botão direito do mouse sobre a imagem do Drive.
Configurando um Drive de Equipe
A segunda é executada dentro do Drive, clique duplo para entrar e a seguir clique no ícone de triângulo invertido ao lado do nome do Drive de Equipe para acessar as opções de configuração.

ADICIONANDO MEMBROS

Adicionando Membros
Para incluir participantes no seu Drive de Equipe, escolha uma das formas acima e clique na opção “Adicionar membros”.
Você pode estipular os níveis de acesso aos membros de acordo com os seguintes critérios:
  • Acesso total (Padrão): O membro tem poder total sobre o Drive de Equipe, pode convidar membros e fazer upload de arquivos, além de editá-los e excluí-los.
  • Acesso para editar: O membro tem poder de edição/uploads, pode editar todos os arquivos e fazer uploads de novos arquivos, não consegue excluir arquivos e convidar membros.
  • Acesso para comentar: O membro tem poder apenas de fazer comentários nos arquivos.
  • Acesso para visualizar: O membro pode visualizar os arquivos.

ADICIONANDO CONTEÚDO

Adicionando Conteúdo
Para adicionar conteúdo (Pastas ou Arquivos) em um Drive de Equipe, clique no botão “NOVO” no canto superior esquerdo do Drive.
É possível utilizar a mesmas opções disponíveis do Google, mas neste caso voltadas apenas para o Drive de Equipe selecionado.
Podemos fazer Criação de Pastas, Upload de arquivos, Upload de pasta, Criar Documentos, Planilhas, Apresentações, Formulários e Desenhos do Google. Além disso podemos podemos conectar mais aplicativos se for necessário.

CONCLUSÃO

Este recurso ainda está em fase de desenvolvimento, mas a expectativa é que ele evolua além desta versão preliminar e venha a se tornar uma ferramenta valiosa para concentrar materiais específicos para setores de uma organização. Aguarde em breve no seu domínio G-SUITE :)
Gostou da novidade? Aguarde, pois em breve retornaremos com mais novidades. 
AGRADEÇA AO AUTORCOMPARTILHE!

SILVIO ROCHA

Mais artigos deste autor »
Especialista em Treinamento e Desenvolvimento/Comunicação Interna. Atuou em grandes empresas do segmento de TI. Atualmente é responsável pela área de Gestão de Conhecimento na Setesys, uma empresa Google Partner com ênfase na aquisição/ disseminação de conhecimento e concepção e desenvolvimento de soluções corporativas em Google Apps/Cloud Computing. Escreve no blog da Setesys sobre tecnologia, soluções corporativas, novidades da Google e Google Apps. Um dos membros do Google Business Group São Paulo e criador do Portal de EAD - Instituto Google Apps.

terça-feira, 24 de janeiro de 2017

CIO - Fog Computing é o novo paradigma para a Internet das Coisas, diz Cisco

Da Redação Publicada em 23 de janeiro de 2017 às 10h41 
See more at: http://cio.com.br/tecnologia/2017/01/23/fog-computing-e-o-novo-paradigma-para-a-internet-das-coisas-diz-cisco/#sthash.dXv9wHPZ.dpuf

O conceito de Fog Computing ("Computação em Névoa")você já conhece. Ou deveria conhecer. Ele define a arquitetura que estende a capacidade computacional e o armazenamento da nuvem para as camadas de acesso da rede, permitindo que os dados sejam analisados e transformados em informações ou em ações antes de serem simplesmente transmitidos. Pensou em computação sem servidor? Ou em Edge Computing? Pois é...
Na opinião da Cisco, Fog (neblina) é uma extensão da Cloud para dentro do mundo físico, ou seja, para o mundo das ‘coisas’. Portanto, um novo paradigma para alavancar a Internet das Coisas.  Atende a um novo cenário em que o volume de tráfego em nuvem deve quadruplicar nos próximos anos chegando a 92% do total, até 2020. Serão 507,5 zettabytes (1 zettabyte = 1 trilhão de gigabytes) de dados até 2019, de acordo com a própria Cisco.  E que armazenar, processar, gerenciar e analisar tantos dados, de modo a garantir os reais benefícios da IoT, será um enorme desafio para as organizações. 
"Enviar tudo isso para a nuvem, para um processamento centralizado, faria com que as organizações aumentassem demais os custos com infraestrutura de comunicação para transmissão desses dados. A saída é fazer uma pré-análise dos dados no local em que são coletados e só transferir aquilo que interessa", explica Severiano Leão Macedo, Cisco Digital Transformation Advisor. A Fog Computing distribui os recursos e os serviços de procesaamento, comunicação, controle e armazenamento mais perto dos dispositivos. Na opinião do executivo, Fog Computing ajuda a reduzir os custos das aplicações de IoT. Também endereça questões como performance e confiabilidade do sistema e segurança.
Do ponto de vista de um construtor de rede, o maior desafio que aplicações de IoT trazem é backhaul, ou as ligações entre dispositivos no campo e os data centers que podem analisar e gerar as informações que vão fazer diferença para as áreas de negócio. Normalmente, os dispositivos IoT falam com um pequeno roteador nas proximidades, mas esse roteador pode ter uma conexão tênue e intermitente com a Internet.
Por exemplo, um motor a jato pode produzir 10TB de dados sobre seu desempenho e condição em apenas 30 minutos. É muitas vezes um desperdício de tempo e largura de banda enviar todos os dados capturados pelos sensores existentes no jato para uma nuvem e depois transmitir as respostas da nuvem de volta para a borda, para que o jato responda adequadamente. O mesmo acontece com os veículos autônomos. Muitos dos dados coletados precisam ser analisados localmente para gerar ações rápidas, em segundos. Não dá para esperar por uma conexão de rede para acessar a nuvem, para que ela diga o que fazer: identificar um sinal de pare ou um pedestre e agir instantaneamente. Esse processamento precisa acontecer no carro. Muitos dados precisam ser processados em roteadores, switches, pontos de acesso sem fio e câmeras de videovigilância e servidores UCS, diz a Cisco.
Robôs, drones, e carros de autônomos são indicadores precoces da necessidade de pequenas nuvens de inteligência distribuída. Na prática, a "computação em névoa" pode estar "em qualquer lugar ao longo de um sistema de computação contínua". Inclui A computação em nuvem, computação de borda  (edge Computing) e computação feita no dispositivo.
Para equipar seus roteadores a fazer essa computação, a companhia planeja combinar o Linux com seu IOS (Internetwork Operating System) para criar uma infraestrutura de computação distribuída que empresa chama de Fog Computing, a arquitetura IOx.   Tudo baseado nos padrões definidos pelo OpenFog Consortium, do qual também fazem parte empresas como AMR, Dell, Intel e Microsoft. O grupo também está filiado ao Instituto de Engenheiros Elétricos e Eletrônicos (IEEE), Schneider Electric e GE Digital, e lançou iniciativas de inovação no Japão, que envolvem gigantes tecnológicos Toshiba e Fujitsu. E planeja trabalhar em estreita colaboração ouros grupos industriais, incluindo o Industrial Internet Consortium (IIC), o ETSI-MEC (Mobile Edge Computing), a Open Connectivity Foundation (OCF) e o OpenNFV para evitar a duplicação de esforços e estabelecer uma estrutura harmoniosa.
fogcomputing
Como funciona?
Imagine uma Cidade Conectada, em que uma câmera de tráfego inteligente detecte o padrão de luzes de emergência de uma ambulância, e então manda essa informação para o semáforo, avisando para liberar o tráfego, nesse caso o tempo é crucial. Se for necessário o envio dessas informações para serem processadas para a nuvem e então serem enviadas para o semáforo pode se perder um tempo crucial.

A computação em névoa adiciona uma camada adicional de poder de computação entre o dispositivo e a nuvem, mantendo a análise crítica mais próxima do dispositivo e, portanto, reduzindo o tempo necessário para resposta. Dispositivos individuais se tornam nós de processamento que podem lidar com tarefas menores, sem ter que enviar todos os seus dados até a nuvem.
Como cada um desses dispositivos se torna seu próprio centro de análise em miniatura, eles podem lidar com uma ampla variedade de processos estreitamente definidos em apenas milissegundos, deixando o pipeline da nuvem livre para o trabalho de análise em larga escala.
Segundo a Cisco, "o nevoeiro estende a nuvem para estar mais perto das coisas que produzem e atuam sobre os dados de IoT. As aplicações de nevoeiro são tão diversas quanto a própria Internet das Coisas. O que eles têm em comum é monitorar ou analisar dados em tempo real de coisas conectadas em rede e, em seguida, iniciar uma ação".
fogcomputing
Os benefícios?
Essa abordagem pode gerar vários benefícios, na opinião da companhia. Em primeiro lugar, maximiza a análise do Big Data, mantendo algumas tarefas fora da fila de armazenamento de dados da nuvem principal, permitindo que sejam concluídas mais rapidamente. Simplesmente não é necessário que cada ação analítica passe do dispositivo para a nuvem e vice-versa. "No caso de uma solução com câmeras de vídeo para o varejo, em aplicações de segurança ou de comportamento do consumidor, é possível criar regras de negócio que só envie para o data center relatórios sobre eventos", explica  Severiano Macedo.

Os dispositivos de Fog Computing podem classificar tarefas com base em sua prioridade, mantendo ações críticas dentro do nó, enviando dados que podem aguardar alguns minutos para um nó de agregação maior que gerencia vários dispositivos IoT, por exemplo. 
Ainda no caso do varejo, é possível fazer com que as câmeras de videovigilância só comecem a transmitir dados para nuvem a partir da ocorrência de um evento. "Identificada uma invasão, a transmissão é iniciada", comenta o executivo.
Iot_fog625
E porque não é necessário passar cada pedaço de dados para a nuvem, os dispositivos podem executar suas tarefas em regiões onde a largura de banda é pequena, ou a conexão internet nem sempre está disponível. "A mesma câmera de videovigilância pode acionar outros sensores para responder a eventos", afirma Severiano. Segundo ele, bancos estariam trabalhando em soluções de segurança para coibir a explosão e roubo de ATMs, usando Fog Computing. 
Imagine um equipamento que está sendo monitorado, e emite alertas a cada minuto, o processamento poderia ser feito por algum concentrador próximo e só então um relatório com tempo maior, como de hora em hora seria enviado para a nuvem para informar que está tudo funcionando corretamente.
No mundo da manufatura, os usos também são claros. Medidores de temperatura em cubas químicas podem desligar instantaneamente processos para evitar uma fusão ou sensores de proximidade podem detectar quando um trabalhador está entrando em uma área restrita ou perigosa e notificar imediatamente supervisores ou seguranças.
Quando se trata de saúde, a computação em nevoeiro pode ser particularmente valiosa também para monitoramento de pacientes e resposta a crises nas áreas rurais. Esse alerta pode desencadear um protocolo de coordenação de cuidados, ou mesmo acionar serviços de emergência, imediatamente, se os sinais vitais do paciente caírem dramaticamente.
A criação de interfaces IoT que atendam às demandas muito específicas do fluxo de trabalho clínico continuará a ser um desafio, e definir o escopo do que constitui "dados úteis" para o cuidado do paciente será outro. A criação de dispositivos médicos seguros e aprovados pelas autoridades de saúde para a coleta de dados não é tarefa fácil, e distribuí-los aos pacientes carentes e educar os consumidores sobre seu uso provavelmente será uma proposta difícil por algum tempo para vir. Mas são todas iniciativas que podem ser implantadas rapidamente usando modelos de Fog Computing.
"Para nós da Cisco, IoT não é custo. É investimento. E Fog pode ajudar a reduzir bastante o custo fixo da solução", afirma Severiano.
- See more at: http://cio.com.br/tecnologia/2017/01/23/fog-computing-e-o-novo-paradigma-para-a-internet-das-coisas-diz-cisco/#sthash.dXv9wHPZ.dpuf

segunda-feira, 23 de janeiro de 2017

Blog Lambda3 - Map | Filter | Reduce – Javascript

No processo de aprendizagem de uma linguagem de programação, vamos, certamente, nos deparar com o tratamento de Arrays. Em Javascript e em outras linguagens de programação, temos três métodos que são muito importantes para trabalharmos com eles: map, reduce, filter. Vamos conversar um pouco sobre estes métodos e sua importância para a escrita de um código melhor.

Array.prototype.map

Pense no método map como um loop for-each que irá transformar todos os elementos de seu array. Quando usamos o método map, todos os elementos do array serão transformados e retornados como um novo array de dados.
Pense no seguinte código:
1
2
3
4
5
6
7
8
let numbers = [1,2,3];
let doubledNumbers = [];
 
for (let i = 0; i < numbers.length; i++) {
  doubledNumbers[i] = numbers[i] * 2;
}
 
console.log('números duplicados: ' + doubledNumbers); //[2, 4, 6];
Note a quantidade de código necessária para fazermos uma tarefa relativamente simples. A função map irá nos ajudar a deixar o código muito mais conciso:
1
2
3
4
5
let numbers = [1,2,3];
 
let doubledNumbers = numbers.map((el) =>; el * 2);
 
console.log('numeros duplicados: ' + doubledNumbers); //[2, 4, 6]
Note que o método map retorna uma instancia de um array com o resultado retornado na função passada como argumento. Note também que utilizei aqui uma novidade (não mais tão nova assim) do ES6, as Arrow Functions.
O fato da função map retornar um Array, também faz com que eu possa fazer códigos como:
1
2
3
4
5
let numbers = [1,2,3];
 
let doubledNumbers = numbers.map(el => el * 2).map(el => el + 1);
 
console.log('numeros duplicados e incrementado: ' + doubledNumbers) //[3, 5, 7]
Como disse anteriormente, o número de elementos de entrada será o mesmo número dos elementos de saída. Portanto, imagine o seguinte código:
1
2
3
4
5
6
7
8
9
let numbers = [1, 2, 3];
 
let oddNumbers = numbers.map(el => {
  if (el % 2 === 1){
    return el;
  }
});
 
console.log(oddNumbers); //[1, undefined, 3];
Claro, este resultado não é o que queremos para uma função como esta. Precisamos de uma função que retorne somente os resultados que satisfaçam determinada condição que buscamos. Para tal, devemos utilizar a função filter:
1
2
3
4
5
let numbers = [1, 2, 3];
 
let oddNumbers = numbers.filter(el => el % 2 === 1);
 
console.log(oddNumbers); //[1, 3]
Uma das grandes vantagens dos métodos map e filter é que eles retornam instâncias de Arrays, o que significa que podemos fazer utilizações como:
1
2
3
4
5
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
 
let oddDoubledNumbers = numbers.filter(x => x % 2 === 1).map(x => x * 2);
 
console.log(oddDoubledNumbers); //[2, 6, 10, 14, 18, 22, 26, 30] - Números ímpares dobrados.
Além de modificar todos os itens de um array ou filtrar itens por determinadas condições, por vezes queremos efetuar operações que agreguem os valores, tais como a somatória de todos os itens ou a média dos valores do array:
let numbers = [1, 3, 5];
let average = numbers.reduce((total, currentElement) => total + currentElement, 0) / numbers.length;

console.log(average); //3
O reduce tem uma assinatura um pouco mais complexa que os outros métodos:
Array.prototype.reduce(function(previousValue, currentValue, index, array)[, initialValue])
  • callbackfunção que é executada em cada valor no array:
    • previousValueÉ o valor retornado na última invocação do callback, ou o argumento initialValue, se fornecido;
    • currentValueO elemento atual que está sendo processado no array;
    • indexO índice do elemento atual que está sendo processado no array;
    • arrayO array ao qual a função reduce foi executado;
  • initialValue: Objeto que será utilizado como valor do argumento previousValue no momento da primeira chamada da função de callback.

Na vida real

Em um software que irá para produção, provavelmente utilizaremos estas funções para trabalhar com arrays que contém objetos complexos e iremos fazer operações que façam mais sentido no mundo real que somente procurar números ímpares dentro de um array. Vamos simular a seguinte situação:
Preciso de uma listagem dos alunos de determinada turma que foram aprovados (regra para aprovação: média maior ou igual 7). Comparativamente, quão melhor os alunos aprovados foram que os alunos reprovados (quantos % a média dos alunos aprovados foi superior aos alunos reprovados)?
Vamos ao código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
let Aluno = function(nome) {
  notas: [],
  this.nome = nome,
  this.definirNotas = function(...n) {
    this.notas = n;
  },
  this.calcularMedia = function() {
    return this.notas.reduce((p, c) => p + c) / this.notas.length;
  }
}
 
let joao = new Aluno('joao');
let pedro = new Aluno('pedro');
let bruna = new Aluno('bruna');
 
joao.definirNotas(1, 4, 7);
pedro.definirNotas(5, 8, 9);
bruna.definirNotas(10, 6, 10);
 
let alunos = [joao, pedro, bruna];
 
let alunosAprovados = alunos.filter(el => el.calcularMedia() >= 7);
let alunosReprovados = alunos.filter(el => el.calcularMedia() < 7);
let mediaDosAlunosAprovados = alunosAprovados.map(el => el.notas.reduce((p, e) => p + e)).reduce((p, e) => p + e) / alunosAprovados.map(el => el.notas.length).reduce((p, e) => p + e);
 
let mediaDosAlunosReprovados =
alunosReprovados.map(el => el.notas.reduce((p, e) => p + e)).reduce((p, e) => p + e) / alunosReprovados.map(el => el.notas.length).reduce((p, e) => p + e);
 
console.log('Os alunos aprovados foram: ' + alunosAprovados.map(x => x.nome));//[Pedro, Bruna]
console.log('A média dos alunos aprovados foi: ' + mediaDosAlunosAprovados);//8
console.log('A média dos alunos reprovados foi: ' + mediaDosAlunosReprovados);//4
console.log('Os alunos aprovados tiveram uma média de notas ' + ((mediaDosAlunosReprovados /mediaDosAlunosAprovados) * 100) + '%' + ' superior aos alunos reprovados');//50%

Performance

Se quiser ver a comparação entre esta versão do código fonte, outra versão utilizando for ao invés dos métodos e uma terceira versão que retira a duplicação de código para o cálculo da média dos alunos, veja o comparativo feito utilizando a ferramenta jsperf.com
Outras linguagens
Muitas outras linguagens utilizam este mesmo conceito para trabalhar com arrays e coleções de objetos. No C#, desde a implementação do Linq, métodos como Select/SelectMany, Where e Sum tem finalidades parecidas.

Escrevendo códigos melhores

Devemos sempre procurar utilizar os recursos da linguagem para escrever códigos que sejam mais legíveis, antes mesmo de tentar escrever códigos que tenham a melhor performance possível. Os recursos apresentados trazem o melhor dos dois mundos: Tornam o código mais legível e, muitas vezes, melhoram a performance do código Javascript. Para saber o custo benefício de utilizar uma abordagem ou funcionalidade da linguagem para melhorar a performance do algoritmo, em detrimento da legibilidade do código, não há outra maneira do que testar estas diferentes abordagens.
Nos próximos posts iremos utilizar este mesmo exemplo de código para criar um projeto nodejs e vamos estudar como separar e organizar este código na estrutura da solução.