Apple Watch detecta diabetes em usuários com 85% de precisão

Um estudo DeepHeart realizado entre a Cardiogram e UCSF revelou algo interessante: o Apple Watch de 462 usuários detectou que estes possuíam diabetes através do sensor de batimentos cardíacos. Os usuários nos quais o relógio detectou a diabetes já sabiam de sua condição – e a precisão foi de 85%.

Na pesquisa, foram analisados dados de 14 mil Apple Watches. O sensor é do mesmo tipo dos utilizados em outros aparelhos do tipo (que, supostamente, possuem esta mesma capacidade de detecção). Um estudo do Framingham Heart Study publicado em 2015 já havia informado que a frequência dos batimentos cardíacos pode predizer de forma significante a diabetes e hipertensão.

O CEO da Cardiogram, Brandon Ballinger e seus colegas já haviam feito um movimento semelhante ao detectar um ritmo cardíaco normal com 97% de eficiência a partir de um Apple Watch. A apneia do sono e hipertensão também foram detectadas, com 90% e 82% de precisão, respectivamente.

Agora, Ballinger e seus colegas pretendem analisar outras doenças a partir de sensores de batimentos cardíacos. Esse é um exemplo de como a tecnologia pode impactar positivamente em nossas vidas, podendo servir de alarme a usuários desavisados, além de trazer dados consistentes sobre sua saúde.

É claro que a análise feita pelo aparelho não substitui uma consulta ou exame médico, mas é um bom ponto de partida para prestar atenção em possíveis anormalidades. E claro, se você recebe um aviso para investigar, este pode ser um excelente ponto de partida para você começar a tratar e evitar problemas maiores.

pesquisa VIGITEL (Vigilância de fatores de risco e proteção para doenças crônicas por inquérito telefônico) divulgada em abril do ano passado mostrou que teve um aumento de 61,8% de diabetes no país. O dado alarmante comprova a necessidade de diagnóstico e um acompanhamento ainda mais próximo desta condição, o que pode ser ainda mais facilitado pela tecnologia.

Se você deseja saber mais sobre como a tecnologia está impactando na saúde – geralmente através de empresas e startups do setor, as healthtechs -, leia o nosso e-book gratuito e participe da HealthTech Conference.

 

Fonte:  https://conteudo.startse.com.br/tecnologia-inovacao/taina/applewatch-detectou-diabetes-usuarios-85-precisao-healthtech-conference/?utm_campaign=startse_news_16_-_09022018&utm_medium=email&utm_source=RD+Station

Anúncios

Estratégia da Reunião de Necessidades de Desenvolvimento -DNMS

Estratégia da Reunião de Necessidades de Desenvolvimento

 

 

Estratégia de Reunião de Necessidades de Desenvolvimento ( DNMS ) é uma abordagem de psicoterapia desenvolvida por Shirley Jean Schmidt, MA, LPC. [1] É projetado para tratar adultos com feridas de trauma psicológico (como os infligidos por abuso verbal, físico e sexual) e com feridas de anexos (como as que são infligidas por rejeição, negligência e entupimento dos pais). O DNMS é uma terapia do estado do ego com base no pressuposto de que o grau em que as necessidades de desenvolvimentonão foram adequadamente atendidas é o grau em que um cliente pode ficar preso na infância. Este modelo visa identificar os estados do ego que estão presos no passado e ajudá-los a se soltar corrigindo as necessidades de desenvolvimento insatisfeitas. O processamento começa com o terapeuta DNMS orientando um paciente para mobilizar três estados internos do ego do recurso: um ser adulto adulto, um eu adulto protetor e um eu básico espiritual. O terapeuta, então, orienta esses três Recursos para ajudar gentilmente os estados de ego infantil feridos a se libertar do passado, atendendo às suas necessidades de desenvolvimento insatisfeitas, ajudando-os a processar através de emoções dolorosas e estabelecendo um vínculo emocional. O relacionamento causado pelas partes infantis com esses Recursos é considerado o principal agente para a mudança. Alternativa de estimulação bilateral (popularizada pelo EMDRterapia) é aplicado em pontos-chave no protocolo para melhorar o processo. O DNMS enfoca uma atenção especial na cura de introjetos inadaptados (estados do ego feridos que imitam os cuidadores abusivos, negligentes ou disfuncionais). O modelo pressupõe que estes estados do ego causam maior dificuldade para os clientes; portanto, ajudá-los a curar podem resultar em um benefício significativo – levando a uma diminuição nos comportamentos indesejados, crenças e emoções.

 

Ego states / parts of self 

De acordo com Daniel Siegel , um estado de espírito pode se enraizar quando um evento positivo é experimentado repetidamente; quando um evento negativo é experimentado repetidamente; ou quando um evento traumático é esmagador. [2] O DNMS assume que os estados de mente enraizados podem se tornar sub-personalidades, partes de si ou estados do ego com um ponto de vista. Algumas partes se formam reagindo aos outros, enquanto outras se formam introduzindo outras. [3]

A introjecção é a internalização inconsciente dos comportamentos, idéias, valores ou pontos de vista de outra pessoa. [4] [5] [6] [7] Um introject é uma representação interna de outra pessoa. O DNMS assume que um introjetor pode se formar quando os neurônios espelhos disparam durante eventos de relacionamento significativamente positivos ou negativos. Os estudos de neuroimagem demonstraram que certos circuitos neurais se ativam em uma pessoa que está realizando uma ação, expressando uma emoção ou experimentando uma sensação, e em uma pessoa que está observando a ação, a emoção ou a sensação dessa pessoa. [8] Vittorio Gallese , um dos descobridores de neurônios espelhados, chama essa ativação compartilhada. Ele acredita que a ativação compartilhada de circuitos neurais leva a simulação incorporada . A simulação incorporada significa que as representações internas dos estados do corpo associados às ações, emoções e sensações dos observados são evocadas no observador, “como se” ele ou ela estava fazendo uma ação similar ou experimentando uma emoção ou sensação semelhante. [9] Gallese acredita que este processo seja um mecanismo funcional básico do cérebro, que se envolva de forma automática e inconsciente, não como resultado de um esforço cognitivo desejado ou consciente, não destinado a interpretar as intenções dos outros. Isso sugere que a formação de introjetos das pessoas significativas em nossas vidas é um reflexo biológico que – para melhor ou pior – não temos controle sobre isso.

Partes de si podem interagir umas com as outras, como membros da família – por exemplo, de forma cooperativa, antagônica ou ambas. Eles podem ter agendas concorrentes, o que pode levar a conflitos internos. O DNMS é uma terapia do estado do ego . Como outras terapias do estado do ego, visa ajudar os estados feridos do ego ferido e estimular a cooperação e a integração entre estados do ego. (Outras terapias do estado de ego incluem psicossíntese , Gestalt-terapia , análise transacional , Sistemas de Terapia Familiar Interno , Diálogo Voz e psicoterapia criança interior .)

Partes saudáveis ​​de si 

Peças saudáveis ​​da própria forma em resposta a afirmações positivas, afirmando relacionamentos com modelos que são amorosos e sintonizados. Eles vivem no presente; sentir e gerenciar toda a gama de emoções; ter opiniões positivas sobre o eu e o mundo; envolver-se em comportamentos apropriados e desejáveis; e têm um ponto de vista adaptativo. Algumas partes saudáveis ​​de si podem ser introjetos adaptativos, ou representações internas de cuidados, pessoas de apoio. Um terapeuta DNMS ajudará um paciente a mobilizar estados do ego de Recursos saudáveis ​​e internos que possam reparar partes feridas de si para ajudá-los a curar.

Peças feridas de SI

Partes feridas de autoforma em resposta a traumas; e negativos, ferindo relacionamentos com modelos que são abusivos, negligentes, rejeitados e enredados . Eles vivem no passado; estão presos em emoções dolorosas; ter crenças negativas e irracionais sobre o eu e o mundo; envolver comportamentos indesejados ou inapropriados; e tem um ponto de vista inadaptado. O modelo DNMS pressupõe duas categorias de estados de ego feridos – partes reativas e introjectos inadaptados.

Peças reativas

Peças reativas da autoforma em reação a experiências significativamente feridas. As pessoas geralmente são muito conscientes dos comportamentos problemáticos, crenças ou emoções de partes reativas. Existem muitos tipos de peças reativas. Alguns possuem emoções cruas, como ansiedade, terror, raiva, tristeza, tristeza, desespero, vergonha e desesperança. Alguns realizam reações a experiências traumáticas específicas. Alguns lidam com emoções dolorosas com comportamentos que evitam a dor como retirar, beber ou comer em excesso. Alguns lidam com emoções dolorosas com comportamentos auto-punitivos como cortar, morrer de fome ou isolar. Alguns rebeldes com comportamentos arriscados ou autodestrutivos, como beber, fumar ou se engajar em sexo desprotegido. Alguns tentam gerenciar pessoas prejudicadas com comportamentos estratégicos agradáveis, como o cumprimento ou a superação. Alguns tentam evitar ataques de outros através de comportamentos agressivos – colocando uma fachada de força, intimidação, controle ou poder. E alguns tentam controlar outras partes do self com advertências, ameaças, comandos ou admonições destinadas a encorajar comportamentos que agradam os outros ou desencorajam comportamentos que possam prejudicar os outros.

Introddos maladaptivos

Um introjeto mal adaptado é uma parte do eu que se forma quando os neurônios espelhos disparam na presença de um modelo importante que está fisicamente ou emocionalmente ferido (como um pai abusivo ou rejeitando). No modelo DNMS, um introjetor inadaptado é conceitualizado como parte de si mesmo com uma verdadeira natureza intrinsecamente boa, que está vestindo uma máscara ou uma fantasia de forma involuntária que transmite as mensagens de ferimento do modelo. A máscara é a gravação gravada do neurônio espelho de uma experiência de ferimento do passado.

Quando a máscara é ativada (ou quando a gravação é reproduzida), a mensagem de ferimento é direcionada para partes reativas que percebem a experiência de ferimento do passado ainda está acontecendo no presente. (A relação entre os introjetos inadaptados e as partes reativas no modelo DNMS é semelhante à relação entre o cão superior e as peças underdog no modelo Gestalt). [10]

Intervenções

O DNMS se empenha em retirar inadaptados introjetos do passado. Isso se destina a parar o conflito interno gerado entre as máscaras introjetando feridas e as peças reativas feridas.

O processamento começa com o Resource Development Protocol. Este protocolo fortalece a conexão de um cliente com três partes saudáveis ​​de si mesmo – um ser adulto induzido, um eu adulto protetor e um eu básico espiritual. Esses recursos são baseados em experiências reais que um paciente teve de nutrir e proteger um ente querido e experiências espirituais de pico – para que os pacientes compreendam seus recursos são partes reais de si mesmos e não apenas ajudantes imaginários.

Em seguida, uma série de etapas são empregadas para identificar um grupo de importantes introjects maladaptivos conectados por um tema comum, como rejeição, abuso ou enredadinho. Os passos incluem um Questionário de Necessidades de Anexos, um Protocolo de Sala de Conferências e um Protocolo de Mudança de Dominância.

Uma vez identificados, esses introjetos são convidados a se conectar aos Recursos. Um terapeuta DNMS orientará os Recursos para atender às suas necessidades de desenvolvimento, processando suas emoções dolorosas e fortalecendo um vínculo emocional. De acordo com o modelo DNMS, essas interações com recursos partes de si ajudarão a curar introjetos. Enquanto curam, os pacientes relatam comportamentos indesejados, crenças e emoções diminuem.

Pesquisa

Dois artigos de estudo de caso da DNMS foram publicados em revistas com revisão de pares. Um é um estudo de caso sobre um paciente com transtorno de identidade dissociativa. [11] O outro é oito estudos de caso que representam o trabalho de três terapeutas DNMS. [12] Embora estes estudos de caso publicados tendam a sustentar a afirmação de que o DNMS é efetivo, eles não atendem aos critérios para pesquisas empíricas. O DNMS ainda não foi testado em ensaios clínicos controlados e não pode ser chamado de terapia baseada em evidências.

Veja também

Referências

  1. Ir para cima^ Schmidt, Shirley Jean (2009). A Estratégia de Reunião de Necessidades de Desenvolvimento: Uma Terapia do Estado de Ego para Cura de Adultos com Trauma da Infância e Feridas de Anexos. San Antonio: Instituto DNMS. ISBN 978-0-615-27469-0.
  2. Ir para cima^ Siegel, DJ(1999). A mente em desenvolvimento: Rumo a uma neurobiologia da experiência interpessoal. Nova York: Guilford Press. ISBN 978-1-57230-453-6.
  3. Ir para cima^ Introjecção
  4. Ir para cima^ Berne, E. (1961). Análise transacional em psicoterapia, psiquiatria individual e social sistemática. Nova York: Grove Press. ISBN 978-0-345-33836-5.
  5. Salte para cima^ Freud, S. (1923/1961). O ego e o id. Em J Strachey (Ed. E Trans.), A edição padrão das obras psicológicas completas de Sigmund Freud (Vol.19). Londres: Hogarth Press. (Trabalho original publicado em 1923).
  6. Ir para cima^ Perls, FS (1973). A abordagem Gestalt e a testemunha ocular da terapia. Science and Behavior Books, Inc.ISBN 978-0-553-20540-4.
  7. Salte para cima^ Watkins, JG, & Watkins, HH (1997). Ego afirma: Teoria e terapia. Nova York: Norton. ISBN 978-0-393-70259-0.
  8. Salte-se^ Gallese V., Fadiga L., Fogassi L. e Rizzolatti G. (1996). Reconhecimento de ação no córtex premotor. Brain 119: 593-609.
  9. Ir para cima^ Gallese V., Eagle ME e Migone P. (2007). Sintonização intencional: neurônios espelho e os fundamentos neurais das relações interpessoais. Jornal da American Psychoanalytic Association, 55: 131-176.
  10. Ir para cima^ Perls, FS, Hefferline, RF, & Goodman, P. (1951). Terapia Gestalt: Excitação e crescimento na personalidade humana. Nova Iorque: Dell. ISBN 978-3-423-15050-7.
  11. Ir para cima^ Schmidt, SJ (2004) Estratégia de reunião de necessidades de desenvolvimento: uma nova abordagem de tratamento aplicada ao transtorno de identidade dissociativa. Journal of Trauma and Dissociation, 5 (4), 55-78.
  12. Ir para cima^ Schmidt, SJ, & Hernandez, A. (2007). A Estratégia da Reunião de Necessidades de Desenvolvimento: oito estudos de caso. Traumatologia. 13: 27-48.

Links externos

Fonte: https://en.wikipedia.org/wiki/Developmental_Needs_Meeting_Strategy

 

Melhorando o desempenho do MongoDB com recomendações de índices

Hoje trazendo um conteúdo originalmente escrito por Jay Gordon, vou falar sobre o novo recurso de recomendação de índices agora disponível no MongoDB Atlas.

Além de uma boa modelagem de dados, existem alguns processos que as equipes responsáveis pela otimização do desempenho da consulta podem aproveitar: procurando COLLSCANS em logs, analisando explain results, ou confiando em ferramentas de terceiros.

O MongoDB Atlas, serviço de banco de dados totalmente gerenciado, ajuda você a resolver problemas de desempenho com um maior nível de facilidade, fornecendo ferramentas para garantir que seus dados sejam acessados da forma mais eficiente possível. Esse artigo mostrará uma visão geral básica sobre como acessar o MongoDB Atlas Performance Advisor, uma ferramenta que analisa suas consultas por até duas semanas e fornece recomendações de índices quando necessário.

Começando

Este pequeno tutorial utiliza os seguintes recursos:

  • Um data set de demonstração gerado com o mgodatagen
  • Um cluster no MongoDB Atlas (o Performance Advisor está disponível para M10 ou maior)
  • MongoDB shell instalado (para criar índices)

Meu banco de dados tem dois milhões de documentos em duas coleções separadas:

Revisando o Performance Advisor

O Performance Advisor monitora as consultas com execução lenta (qualquer coisa que leve mais de 100 milissegundos para executar) e sugere novos índices para melhorar o desempenho da consulta.

Para acessar esta ferramenta, vá até o painel de controle do Atlas e clique no nome do seu cluster. Você encontrará “Performance Advisor” no topo.

 

Clique no link e você será levado para a página onde vai ver recomendações relevantes de índice, com base no período de tempo fixado no topo da página.

 

Neste exemplo, vou analisar o desempenho das minhas consultas nas últimas 24 horas. O Performance Advisor me fornece algumas recomendações sobre como melhorar a velocidade das consultas lentas:

 

Parece que a coleção test com o campo “name” pode usar um índice. Podemos ver as mudanças específicas a serem feitas clicando no botão “More Info”.

Posso copiar o conteúdo desta recomendação e colar no meu MongoDB Shell para criar o índice recomendado. Você notará que uma opção especial, {background: true}, é passada com o comando createIndex. O uso deste comando garante que a criação do índice não bloqueie nenhuma operação. Se você estiver construindo novos índices em ambientes de produção, recomendo que você leia mais sobre as operações de construção de índice.

 

 

Agora que o índice recomendado foi criado, posso rever o desempenho da minha aplicação e ver se ele atende aos requisitos dos meus usuários. Os alertas do Atlas que recebi anteriormente foram resolvidos, o que é um bom sinal:

Perda de performance em consultas desindexadas prejudicam a experiência do usuário em sua aplicação, o que pode resultar na redução do engajamento ou atrito com clientes. O Performance Advisor no MongoDB Atlas oferece uma maneira simples de garantir que você aproveite ao máximo os recursos provisionados em seu cluster.

Para começar, entre para o MongoDB Atlas e implemente um cluster em minutos.

É isso, espero que tenham gostado! Fiquem à vontade para compartilhar e comentar, se quiser conferir o artigo original em inglês clique aqui.

Até mais!

 

 

Fonte: https://codigosimples.net/2018/02/07/melhorando-o-desempenho-do-mongodb-com-recomendacoes-de-indices/

 

 

 

Aprenda a instalar e usar o EVE-NG para emular roteadores da MikroTik

Nesse vídeo iremos ensinar como instalar e usar o EVE-NG para emular roteadores da MikroTik.

O EVE-NG é um emulador de redes que está ganhando cada vez mais usuários.

Esse novo emulador possui várias vantagens em relação ao GNS3, abaixo listamos algumas delas:
– Melhor performance de CPU devido ao uso do KVM.
– Pode ser usado em uma máquina virtual.
– Fácil instalação e poucos problemas.

Learn Medical Neuroscience

 

 

 

Bem-vindo ao site Learn Medical Neuroscience. Acima de tudo, este site de neurociências apoia membros da comunidade de aprendizagem do curso Coursera ” Neurociências Médicas “. O professor Len White da Duke University ensina este curso. Outros alunos de Neurociências são bem-vindos, é claro, mas não são o principal grupo-alvo do site.

Estrutura do site Learn Medical Neuroscience

  • Comunidade de aprendizagem 

    Este é o lugar para mais informações sobre a classe Global Medical Neuroscience. Aqui você pode encontrar informações sobre como usar o fórum de discussão no site do curso, exemplos de fotos dos desafios #GetNeuro do curso que são compartilhados no Instagram e o link para um grupo do Facebook altamente ativo para o curso. Há imagens agradáveis ​​sobre ‘Neurociências Médicas nos bastidores’. A página Notícias apresenta notícias sobre o curso e notícias gerais de neurociências, todas relevantes para a comunidade de aprendizado.

  • Laboratório virtual

Na verdade, esse é o núcleo do site. Você pode encontrar uma lista de links para sites relevantes na internet tudo sobre o cérebro no Laboratório Virtual. O Virtual Lab possui 7 sub-páginas. A estrutura do curso de Neurociências Médicas é a base do Laboratório Virtual. A página Virtual Lab explica a estrutura do conteúdo desta parte do site. Os vídeos em destaque são uma boa parte do Virtual Lab. Os vídeos em destaque são vídeos curtos no campo da Neurociência relevantes para a informação do conteúdo da página. Eles nem sempre estão diretamente ligados ao conteúdo da subpágina do laboratório virtual. Eles formam um complemento para o material principal do curso e dão uma visão adicional.

Nesta página você pode encontrar mais links para mais sites. Os sites que esta parte do site liga para não explicar o conteúdo do curso. Esta página apresenta links para sites que você pode usar para revisar seu conhecimento de Neurociências. Esta página também contém recomendações sobre o livro de Neurociências. Além disso, existe um link para o  Resumo de Pathways Medical Neuroscience . Este Resumo de Caminhos é um documento, livre de direitos autorais, feito especialmente para este curso. Você pode baixá-lo diretamente do site.

O exame neurológico faz parte do site com links para sites e vídeos que explicam o exame neurológico. Existe um link para o site especialmente relevante do NeuroLogical Cases da Universidade de Utah. Este é um site bastante sistemático e educacional para aprender o exame neurológico. Outros recursos também estão presentes nesta página. Como “Vídeos de Neurologia Clínica”, um recurso maravilhoso, criado especificamente para aprimorar e facilitar o estudo da Neurologia. Você também pode ver os casos no parágrafo: “Lidar com as restrições neurológicas”. Você encontra material inspirador que mostra que as pessoas podem se adaptar a grandes restrições neurológicas e viver uma vida plena, apesar dessas restrições.

No lado direito da tela (não nas páginas do Laboratório Virtual e no Exame Neurológico da página), você vê Notícias e abaixo dessas páginas com Estratégias de Estudo e Dicas de Estudo. Essas páginas provaram ser muito úteis para os alunos no passado. Você pode verificá-los e usá-los para sua vantagem. Por último, mas certamente não menos importante, há o quadro de fóruns . Lá, você pode encontrar informações importantes quando faz o curso como: Onde estão as Notas do Tutorial? O que acontece com minhas notas quando mudo para uma próxima sessão?

 

 

Fonte: http://www.learnmedicalneuroscience.nl/

Brasileiro desenvolve nova arquitetura para processadores quânticos

Quando se pensa no conceito de processadores quânticos, logo vem à cabeça um computador ultramoderno, com altíssima tecnologia. Porém, eles ainda não são acessíveis, já que o processo de produção ainda é extremamente difícil e caro.

Porém, pesquisadores australianos e o brasileiro Guilherme Tosi, que trabalham na University of New South Wales, criaram um novo conceito para a construção desses chips, que podem ser desenvolvidos a partir do silício, sendo muito próximo ao uso já existente em outros dispositivos.

O processador quântico de silício funciona em torno de qubits “flip-flop”, ou seja, afastam o elétron do núcleo e usam os eletrodos na parte superior. Isso significa que eles podem ser controlados com sinais elétricos, ao contrário dos conduzidos magneticamente – como acontece hoje.

 

Diferente dos circuitos desenvolvidos pela IBM e pela Google, o novo conceito é construído a uma distância em nanômetros, de maneira que continuem entrelaçados, o que torna o processo mais fácil na hora da produção, e sem interferir no estado dos qubits.

Por sua vez, os circuitos feitos pelas gigantes da tecnologia também contam com a facilidade de condução dos dados, porém podem ter um tamanho maior do que se imagina.

Apesar de ser uma ideia promissora, ela ainda está no papel. Os pesquisadores envolvidos no projeto já estão iniciando a primeira empresa de computação quântica da Austrália e, caso a teoria se aplique, em breve teremos supercomputadores quânticos acessíveis.

 

Fonte: https://www.tecmundo.com.br/ciencia/122183-brasileiro-desenvolve-nova-arquitetura-processadores-quanticos.htm

 

Maior chacina do Ceará Protagonizada pelo Exército e Polícia Militar

Nem todo cearense sabe, mas a maior “chacina” registrada no estado aconteceu, na verdade, há 81 anos quando o Exército Brasileiro e a Polícia Militar do Ceará bombardearam a comunidade do Caldeirão da Santa Cruz do Deserto, na cidade do Crato.

O número oficial do Exército é de 400 mortos, mas fala-se em mais de mil. Não há certeza pois, até hoje, o Exército não informou o local da vala comum onde foram levados os corpos.

A comunidade foi fundada por um filho de escravos alforriados, o Beato José Lourenço, e recebia todo tipo de gente miserável e faminta que buscava refúgio por lá. Toda a produção de alimentos era dividida igualmente e o excedente era vendido na cidade ou trocado por remédios.

Os latifundiários da região não gostaram da situação, pois viram muitos dos seus empregados deixando pra trás uma vida de exploração, para viver na comunidade do Caldeirão. O massacre aconteceu em 1937, a mando de Getúlio Vargas, e com o apoio dos ricos da região da Bahia.

ABB lança software de otimização de ativos para suportar transformação digital

ABB lança software de otimização de ativos para suportar transformação digital

A ABB lançou seu pacote de soluções de software Ability Ellipse na DistribuTECH US, para ajudar os utilitários a maximizar o desempenho dos ativos e acelerar sua rota para a digitalização. 

ABB Ability Ellipse tem como objetivo oferecer uma abordagem entre empresas para gerenciamento de ciclo de vida de ativos conectado. O conjunto de software foi projetado para permitir que os utilitários de energia elétrica otimizem a utilização de ativos, reduzam os custos de manutenção e reduzam as falhas de equipamentos e as quedas do sistema. O número de novos ativos que entram na grade está explodindo – desde contadores inteligentes e switches, até fontes de energia distribuídas, como energia solar e eólica, para estações de carregamento de veículos elétricos.

A nova solução ABB Ability Ellipse oferece aos serviços públicos uma abordagem pró-ativa para manutenção preditiva que combina um sistema de gerenciamento de ativos com coleta e análise de dados de desempenho e uma solução de gerenciamento de força de trabalho para despachar equipes e manter ativos críticos. Especificamente, a solução unifica a funcionalidade das soluções da ABB para gerenciamento de ativos corporativos (EAM), WFM e Asset Performance Management (APM).

“Entendemos os desafios que as empresas de serviços elétricos enfrentam ao gerar maiores níveis de desempenho em uma rede cada vez mais complexa”, disse Massimo Danieli, diretor do negócio de Grid Automation da ABB na divisão Power Grids da empresa. “Com a ABB Ability Ellipse, os utilitários agora podem usar uma solução única e simplificada para gerenciamento, manutenção e monitoramento de ativos que permitem uma rede mais forte, mais inteligente e mais verde”.

Como o Gerenciamento de desempenho de ativos torna-se um ponto focal para transformar a grade moderna, é de vital importância que os serviços públicos gerenciem seus ativos e mão de obra com uma estratégia coesa.

Para informações adicionais:

ABB

Fonte:  https://www.renewableenergymagazine.com/energy_saving/abb-launches-asset-optimisation-software-to-support-20180124

Padrão de interface de software do microcontrolador Cortex

Padrão de interface de software do microcontrolador Cortex

O CMSIS permite um suporte de dispositivo consistente e interfaces de software simples para o processador e seus periféricos, simplificando a reutilização de software, reduzindo a curva de aprendizado para desenvolvedores de microcontroladores e reduzindo o tempo de mercado para novos dispositivos.


Visão geral

A partir do CMSIS-CORE, uma camada de abstração de hardware independente do fornecedor para os processadores Cortex-M, o CMSIS expandiu-se para áreas como o gerenciamento de componentes de software e as interfaces de depurador de referência. A criação de software é um fator de custo importante na indústria incorporada. A padronização das interfaces de software em todos os produtos do fornecedor de silício Cortex-M, especialmente ao criar novos projetos ou a migrar o software existente para um novo dispositivo, significa redução significativa de custos.

O CMSIS é definido em estreita cooperação com vários fornecedores de silício e software e fornece uma abordagem comum para a interface para periféricos, sistemas operacionais em tempo real e componentes de middleware. Isso simplifica a reutilização de software, reduzindo a curva de aprendizado para novos desenvolvedores de microcontroladores e reduzindo o tempo de colocação no mercado para dispositivos.


Componentes do CMSIS

CMSIS-CORE: inicialização consistente do sistema e acesso periférico

A inicialização do sistema, o acesso ao núcleo do processador e as definições periféricas são essenciais para cada aplicativo incorporado. O CMSIS-CORE padronizado é implementado para mais de 3900 dispositivos diferentes e facilita a introdução de um novo dispositivo ou migra software em microcontroladores.

CMSIS versão 5

O CMSIS é desenvolvido publicamente no GitHub. A última versão pode ser baixada aqui:

CMSIS-RTOS: Execução determinista de software em tempo real

Um conceito de super-loop só é adequado para aplicativos embutidos simples. Os microcontroladores Cortex-M são projetados para sistemas operacionais em tempo real que oferecem controle de recursos e tempo.

O CMSIS-RTOS é uma API que permite camadas de software consistentes com componentes de middleware e biblioteca. O CMSIS-RTOS RTX é executado em todos os dispositivos Cortex-M e é a implementação de referência comprovada que é fácil de aprender e usar.

CMSIS-DSP: implementação rápida de processamento de sinal digital

O desenvolvimento de um sistema de processamento de sinais digitais em tempo real (DSP) não é trivial, já que os algoritmos DSP dependem fortemente de operações matemáticas complexas que são mesmo críticos para o tempo.

A biblioteca CMSIS-DSP é uma rica coleção de funções DSP que o Arm optimizou para os vários núcleos de processadores Cortex-M. O CMSIS-DSP é amplamente utilizado na indústria e também permite a geração de código C otimizada a partir de várias ferramentas de terceiros.

CMSIS-Driver: interfaces periféricas genéricas para middleware e código de aplicativo

Interfacing microcontroller periféricos com middleware ou código genérico de aplicação pode ser um desafio, pois cada dispositivo é diferente. As interfaces CMSIS-Driver prontas para usar estão disponíveis para muitas famílias de microcontroladores e evitam a portabilidade do driver pesada e demorada.

CMSIS-Pack: acesso fácil a componentes de software reutilizáveis

Anteriormente, os módulos de software eram difíceis de integrar, pois os arquivos de origem e de cabeçalho tinham requisitos pouco claros, documentação inconsistente ou informações de licença perdidas.

Como o CMSIS-Pack define a estrutura de um pacote de software que contém componentes de software, esses problemas são abordados. Os componentes de software são facilmente selecionáveis ​​e todas as dependências de outros softwares são destacadas.

CMSIS-SVD: visão consistente para dispositivos e periféricos

Para cada microcontrolador suportado, os depuradores podem fornecer visualizações detalhadas aos periféricos do dispositivo que exibem o estado do registro atual.

Os arquivos CMSIS-SVD permitem essas visualizações e garantem que a exibição do depurador coincida com a implementação real dos periféricos do dispositivo.

CMSIS-DAP: conectividade para hardware de avaliação de baixo custo

Planos de desenvolvimento baratos estão disponíveis em muitos fornecedores de microcontroladores. Freqüentemente, uma unidade de depuração de baixo custo está incluída, mas interfaces diferentes precisam de uma configuração de ferramenta específica.

O CMSIS-DAP é uma interface padronizada para a Porta de Acesso de Depuração Cortex (DAP) e é usado por muitos kits de inicialização e é suportado por vários depuradores.

CMSIS-NN: kernels de rede neural eficiente

As soluções baseadas em rede neural estão se tornando cada vez mais populares para aplicações de aprendizado de máquinas incorporadas.

O CMSIS-NN é uma coleção de kernels de redes neurais eficientes desenvolvidos para maximizar o desempenho e minimizar a pegada de memória de redes neurais nos núcleos de processadores Cortex-M.

 

Fonte:  https://developer.arm.com/embedded/cmsis

https://developer.arm.com/products/system-design/development-boards

https://developer.arm.com/products/system-design/development-boards/logictile-express

https://community.arm.com/b/carlosdelfino/posts/facilitando-o-desenvolvimento-para-a-proxima-geracao-de-embarcados-inteligentes-e-conectados

EFEITO PARALAX DE MANEIRA SIMPLES

No exemplo abaixo, são três divs, porém, apenas a primeira e última estarão recebendo o efeito de parallax, por isso é adicionado a classe .prlx, mas as configurações serão feitas normalmente na folha de estilo CSS e o script será sempre fixo no seu js.

<div id="top" class="prlx">
</div>

<div id="mid">
</div>

<div id="bot" class="prlx">
</div>

style.css:

#top,
#mid,
#bot {
  width: 100%;
  padding: 20px 0;
}
        
#top {
  background: url("../img/background.jpg");
  height: 1200px;
}
        
#mid {
  background: #f0494d;
  height: 460px;
}
        
#bot {
  background: url("../img/background.jpg");
  height: 1200px;
}

javascript.js

$('.prlx').each(function() {
    var $obj = $(this);
    $obj.css('background-position', '50% 0');
    $obj.css('background-attachment', 'fixed');
    if ($(window).width() > 940) {
        $obj.css('background-size', '100%');
        $(window).scroll(function() {
            var offset = $obj.offset();
            var yPos = -($(window).scrollTop() - offset.top) / 10;
            var bgpos = '50% ' + yPos + 'px';
            $obj.css('background-position', bgpos);
        });
    }
});

http://matheusp.com.br/blog/tutoriais/efeito-parallax-sem-plugins-apenas-com-html-css-e-javascriptFonte: 

E-Cidade – Novo Pacote de Atualização (2018-1)

Boa tarde membros da comunidade do e-cidade,
Foram disponibilizados novos pacotes para atualização do e-cidade. Contendo a atualização da melhoria de sequência 651 até a sequência de número 750.
Link de acesso do pacote completo da nova versão -> https://softwarepublico.gov.br/social/e-cidade/
Link de acesso do pacote de atualização da nova versão -> https://softwarepublico.gov.br/social/e-cidade/versoes/pacotes-para-atualizacao-do-e-cidade
Abraço.

Construindo um Blockchain: The Gray Paper

Background

O trem de excitação do blockchain está em um alto histórico! Existem inúmeros artigos e notícias que o chamam de maior invenção desde a internet. Por outro lado, há um acampamento igualmente grande dizendo que, embora a tecnologia seja ótima, não existe um caso de uso real .

Até recentemente, estive em algum lugar do meio. Intrigado por blockchain comecei a pesquisá-lo. Depois de ler vários artigos e white papers, senti-me confortável com alguns dos termos e conceitos. No entanto, eu ainda não tinha esse momento “aha” O conteúdo que eu estava lendo era um nível muito alto e não transmitia claramente o poder eo potencial de construção de aplicativos distribuídos e descentralizados.

Há duas semanas Blockchain Academy TLV iniciou sua sessão inaugural. A premissa da Academia Blockchain é promover uma discussão técnica ativa e produtiva sobre blocos.

Meu objetivo é explicar o que eu aprendi até agora na minha jornada de blocos de bloco, e acompanhar você através de uma implementação de bloqueio inspirado Ethereum, eu tenho trabalhado nas últimas 2 semanas.

O que não posso criar, não entendo

Durante o primeiro encontro do Blockchain TLV, Leonid Beder discutiu os conceitos básicos do blockchain, e codificou uma implementação de bloqueio básico em formato simples. A implementação incluiu a seguinte funcionalidade:

Blockchain: uma lista crescentemente crescente de registros , denominados blocos , que são vinculados e protegidos usando criptografia . Cada bloco geralmente contém um ponteiro hash como um link para um bloco anterior, um carimbo de data e hora e dados de transação. Definimos uma classe inicial com a seguinte interface:

  • Nós armazenamos todos os blocos na cadeia de blocos.
  • Nós armazenamos o conjunto de todas as transações que esperam ser processadas.
  • Método para criar novos blocos
  • Método para envio de novas transações no pool.

Blocos: Todo bloco da nossa cadeia conterá

  • Número do bloco (ou seja, “3º bloco na cadeia”)
  • transações
  • Timestamp – tempo de criação do bloco
  • Número não-arbitrário que só pode ser usado uma vez
  • O hash do bloco anterior – usando o hash anterior, tornamos a cadeia de blocos imutável

Transações: definimos uma classe de transações que continha

  • O endereço público do remetente
  • O endereço público do destinatário
  • O valor da transação.

Enviar um nó : um bloco é um banco de dados distribuído e descentralizado, onde cada nó da rede possui uma cópia completa do histórico de transações Uma vez que estamos desenvolvendo uma cadeia de bloqueio sem permissões, todos podem participar. Este método nos permite adicionar nós à rede.

Enviar uma transação : um bloco de cadeias serve como registro do histórico de transações. Embora uma transação possa ser definida de forma ampla, o caso de uso mais popular é uma transferência de fundos do usuário A para o usuário B. Esse método nos permite criar transações, esperando ser minado.

Mine a Block : as transações não são refletidas na rede imediatamente. Precisamos investir o poder computacional na validação de transações. Isso é chamado de Prova de Trabalho. Minar um bloco é a ação de executar “Prova de Trabalho” em todas as transações que foram recentemente emitidas, mas ainda não foram validadas. Não há almoços gratuitos em criptografia;)

Consenso : Consenso é o processo de todos os nós que chegam a acordo sobre o estado atual da rede. Escolhemos a abordagem da “Cadeia mais longa” (Greedy Maior Observado Subtree). Esta abordagem afirma que todos os nós aceitarão o bloqueio do nó com a maioria dos blocos. O raciocínio por trás disso, é que a cadeia de blocos mais longa possui o poder mais computacional investido nele (lembre-se, exigimos que os blocos sejam validados via PoW) e, portanto, é o mais confiável / credível.

Confira o código fonte das oficinas aqui.

Embora fosse um monte de material novo para processar em uma hora, fiquei preso 🙂 Para o final da oficina, Leonid anunciou uma surpresa!

                                                            Eu gosto de surpresas

Haveria uma competição para ver quem poderia fazer o pedido de atração mais criativo e “incrível” para o bloco de bloco básico que acabamos de construir.

Meu trabalho nas últimas 2 semanas

Eu estava com vontade de aprender mais sobre blockchain, e acredito que construir um é a melhor maneira de fazer isso. Comecei a criar uma cadeia de blocos inspirada na implementação Ethereum com as seguintes características:

  • Sistema de contabilidade – os usuários poderão registrar contas (contas externas) com um saldo e iniciar transferências de fundos. Além disso, os usuários podem registrar contas de contrato e implantar contratos inteligentes em toda a rede
  • Máquina de estado baseada em transações
  • Transações garantidas e validadas e transições de estados
  • Permita que os usuários escrevam contratos inteligentes e aplicativos descentralizados onde eles podem criar suas próprias regras arbitrárias para propriedade, formatos de transação e funções de transição do estado.

Contas

O estado compartilhado global de nós na rede é composto por contas. As contas detêm informações importantes, como

  • endereço: isso servirá como o nome da conta, semelhante ao que fizemos na oficina.
  • saldo: montante dos fundos de propriedade da conta
  • nonce : se a conta é uma conta de propriedade externa, esse número representa o número de transações enviadas pelo endereço da conta.

Minha implementação de bloqueio tem dois tipos diferentes de contas:

  • Contas externas, que são controladas por chaves privadas (via criptografia RSA)
  • Contas contratuais, que são controladas pelo código do contrato.

Estado compartilhado único em toda a rede

As contas são públicas, e você pode ver qualquer conta, dado seu endereço, e o nó foi registrado. Eu criei contas “globais” informando todos os nós da criação de uma conta na rede. Então, quando as transações da conta são despachadas para um nó, eu propagar essa transação para todos os nós na rede. Desta forma, o bloco é verdadeiramente descentralizado, e não dependemos de nós simples para informações valiosas, como existência de conta ou saldos de contas. Essencialmente, criamos um singular “estado compartilhado” entre os nós.

Registramos cada conta em cada nó, de modo que seja “global”

Diferenças entre contas externas e de contrato

A principal diferença entre os dois tipos de contas está enraizada na forma como eles podem se comunicar com outras contas na rede. Uma conta externa pode se comunicar de duas maneiras

  1. Mensagens de outras contas externas (ou seja, uma transação que move fundos da conta A para B).
  2. Invocando a execução do método em contas contratuais. Esses métodos variam, pois dependem apenas do autor do contrato e do contrato que ele / ela criou.

É importante esclarecer que as contas do contrato, em contraste com as contas externas, não podem enviar despachos explícitos para a rede. Em vez disso, as contas de contrato só podem emitir transações em resposta a outras transações que receberam.

Contas Externas

A autenticação de contas é feita via criptografia RSA. Após a inicialização da conta, um par privado de chave pública é criado e gravado no disco.

Teclas criadas no construtor ExternalAccounts. À direita, vemos a chave pública

Essas chaves são usadas para assinar digitalmente pedidos de transações de saída com as credenciais da conta. Uma implementação mais robusta sempre pede uma conta, quer ele quer ou não assinar o pedido antes de enviá-lo. Você pode ver uma implementação rudimentar deste em requestAuthForTransaction.sh.

requestAuthForTransaction.sh

Um pressuposto que fiz para esta implementação é que todas as contas concordam em assinar todos os pedidos de transações com suas credenciais.

Contas de Contrato

As contas do contrato são controladas pelo seu código. Eles simplesmente executam um código específico quando invocados e têm controle direto sobre o equilíbrio.

Um dos desafios aqui foi descobrir como suportar isso em uma maneira dinâmica, distribuída, descentralizada e de confiança. O Ethereum usa uma máquina virtual acessível a nível mundial (dado um ponteiro para o código de byte do contrato) para executar o código do contrato. Mas JS não tem uma VM globalmente acessível fora da caixa para todos os nós a serem consultados. Inicialmente, tentei implantar um contrato para todos os nós na rede como um objeto JSON com stringência, de modo que a execução do contrato poderia ser invocada de forma independente em cada nó, analisando o objeto recebido. Infelizmente, o JSON.stringify ignora métodos e funções, portanto, eliminando contratos inteligentes de suas funcionalidades em gravações. A minha solução alternativa para o envio de contratos de forma dinâmica (não codificada em cada instância de nó) em toda a rede foi a seguinte:

Implantando um Contrato

  1. Escreva um contrato inteligente como um objeto JS simples.

2. Envolva-o com parênteses para torná-lo uma string e remova todas as novas linhas para que possa ser processado através do método JS eval incorporado quando outros nós a recebem.

3. Envie a string como dados para todos os nós na rede.

Implantando um contrato em toda a rede

Isso permite que os nós criem contratos on-line e os implante na rede. Agora, um nó pode receber um contrato que não conheceu antes e executar seu código! 😀😀😀

Escrevendo atualizações do contrato

Inicialmente, podemos analisar o contrato stringificado usando o método JS eval incorporado, que leva uma seqüência de caracteres e o avalia como uma declaração JS.

Depois de executar um método que altera o estado do contrato (ou seja, altera o saldo do contrato), queremos armazenar o contrato na íntegra, sem perder o acesso aos nossos métodos.

Portanto, usaremos o método de stringis JSON e passamos uma função “substituição” personalizada , instruindo-o sobre como seqüenciar as funções.

No futuro, para ler a versão especialmente rigorosa do contrato, passaremos um “reviver” personalizado para o método JSON.parse.

Emitir transações através da execução do contrato

Algumas mutações contratuais só podem atualizar o estado interno do contrato. Outras execuções de contrato podem “emitir” transações que efetuam o estado da rede. Por exemplo, um contrato que detém fundos (os contratos regem seus próprios fundos) pode enviá-los a um usuário específico após uma determinada condição ser cumprida. Essas transações emitidas são ouvidas e colocadas na fila de mineração, de forma semelhante a outras transações na rede. Eles devem ser validados antes de serem gravados no bloco. O fluxo parece assim:

Uma transação emitida por meio de um pedido de mutação do contrato, anexado ao mempool

Contratos inteligentes com permissões

Chamar um contrato inteligente simplesmente invoca um método que resulta em uma emissão de transação. Os contratos são implantados globalmente e gostaríamos de uma maneira fácil de controlar quem pode invocar métodos de contrato. Gostaríamos de permitir que os usuários criem contratos que suportem permissões de usuários. Por exemplo, em uma eleição, nós só queremos que os usuários elegíveis possam votar (podemos determinar a elegibilidade, no entanto, achamos adequado). Como todas as transações solicitadas são assinadas digitalmente via criptografia RSA pelo solicitante, podemos verificar com segurança o usuário que solicitou a execução do contrato e decidir se ele está ou não autorizado a fazê-lo.

Exemplo DAOVotingContract.ts com permissões

Validação de transação

Durante a primeira oficina, implementamos uma versão bruta das transações. Porque não tínhamos contas, nenhuma forma de identificação e nenhum saldo para atualizar, não tinham significado. Depois de implementar o acima, agora podemos verificar a legalidade, ou “correção” de uma transação solicitada

Função de transição estatal

O white paper da Ethereum descreve um cronograma de cryptocurrency como um sistema de transição do estado, onde o estado é composto pelo status de propriedade da moeda dentro do sistema. Na minha implementação, cada nó possui contas que possuem um saldo específico. Mas como o estado (equilíbrio) muda ao longo do tempo? Ethereum especifica uma Função de Transição de Estado da seguinte forma:

Ilustração do Livro Branco Ethereum

Em nossa implementação, tomaremos uma abordagem semelhante para validar transições de estado. Nós vamos:

  1. Verifique se uma transação adere à estrutura solicitada e possui todos os valores necessários.
  2. Todas as transações têm um SenderNodeId e um SenderAddress. Embora esta seja uma hipótese insegura, para a implementação atual e para a falta de um cliente de usuário apropriado, assumiremos que todas as contas concordam e assinam digitalmente todos os pedidos de transações de saída com suas credenciais. Antes de ser submetido à fila de mineração, verificaremos essa assinatura digital .
  3. Verifique se o nonce corresponde ao nonce na conta do remetente .
blockchain.ts

Depois de verificar a transação através do método stateTransitionValidation , podemos adicionar a transação para a fila de mineração e a minha. É importante notar que essas transações ainda não modificaram o estado da rede . Após o consenso, se essas transações pertencem à cadeia mais longa, e é uma transação que move fundos, validaremos que o remetente tenha um saldo de conta adequado. Um exemplo de filtragem de transações ilegais (o remetente A que envia mais fundos, ele possui) pode ser visto em apropriadoFunds.sh.

apropriadoFunds.sh

Para visualizar este processo:

Exemplo de Contratos

Agora que nosso bloco possui contas, transações validadas e uma maneira de criar e propagar contratos em toda a rede, podemos observar alguns contratos reais. Esses contratos são bastante legais e mostram a flexibilidade e o potencial de criar contratos inteligentes na cadeia de blocos.

Contra-contrato

Para começar as coisas, vejamos um contrato simples que atua como um contador. Toda vez que o método incrementValue do contrato é chamado, incrementaremos o contador. Observe que qualquer pessoa pode invocar este código de contrato.

const CounterContract = {
balance: 0,
counter: 0,
incrementValue: function() {
this.counter++;
},
id: 1,
fromAddress: Alice,
call: function() {
return {
getBalance: this.balance,
getFromAddress: this.fromAddress
};
},
send: function() {
return {
incrementValue: this.incrementValue
};
},
abi: function() {
return {
sendables: this.incrementValue.toString()
};
}
};

Invocamos o código do contrato enviando uma solicitação mutateContract /: CounterContract PUT . Este contrato tem seu próprio estado interno que governa. Quando o incrementValue é chamado, o estado do contrato emite uma transação, solicitando a mutação do estado do contrato. Depois de ser minado, a mutação é escrita na cadeia de blocos, de modo que tenhamos um registro de quem usou o contrato (iniciou o pedido de mutação) e como o contrato foi usado.

Este contrato pode ser executado através do cliente Postman ou executando o script counter_contract.sh no diretório shell-scripts.

Transferir fundos após a data arbitrária Contrato

Um cenário mais realista para um contrato inteligente é transferir fundos da conta A para a conta B. O contrato a seguir é baseado no cenário em que Bob quer transferir 400 moedas para Alice, após uma data arbitrária ter passado. Em vez de usar um serviço de terceiros, ou sistema de custódia, ele pode criar um contrato inteligente que verifica quando a data passou, e iniciar uma transferência de fundos.

const MoveFundsAfterDateContract = {
balance: 400,
expirationDate: new Date(October 13, 2016 11:13:00),
id: 2,
fromAddress: Bob,
call: function() {
return { getBalance: this.balance, getFromAddress: this.fromAddress };
},
send: function() {
return { changeBalance: this.changeBalance };
},
abi: function() {
return { callables: this.call(), sendables: this.send() };
},
moveFunds: function() {
var currentDate = new Date();
if (currentDate > this.expirationDate) {
return {
senderNodeId: B,
senderAddress: Bob,
recipientNodeId: A,
recipientAddress: Alice,
value: 20,
action: TRANSACTION_EXTERNAL_ACCOUNT
};
}
return null;
}
};

Quando o método moveFunds do contrato é invocado, ele verificará a data, verá que passou e transferiu fundos para Alice.

Este contrato pode ser executado através do cliente Postman ou executando o script move_funds_after_data_contract.sh no diretório shell-scripts.

DAO Vote para o contrato de bônus

Este cenário envolve um DAO (organização autônoma descentralizada) que quer dar um bônus a um de seus funcionários. Como este DAO é uma organização completamente justa 😀😀😀, devemos votar em quem é merecedor do bônus.

Mas lembre-se, o blockchain é um livro público! Portanto, no momento em que carregamos para contratar a rede, qualquer pessoa pode vê-lo e fazer chamadas para o código do contrato. Nós gostaríamos de restringir a votação somente aos funcionários da DAO. Como mencionei anteriormente, cada solicitação com credenciais de contas, é assinada digitalmente por essa conta, com sua chave privada. Desta forma, é fácil verificar a verdadeira origem dos eleitores. Então, este contrato tem um campo “autorizadoVoters” que verificaremos contra, sempre que uma conta tentar votar.

const DAOVotingContract = {
balance: 400,
id: 3,
authorizedVoters: [
{ nodeId: A, address: Alice },
{ nodeId: B, address: Eve },
{ nodeId: A, address: Gal Gadot }
],
votes: [
{
nodeId: C,
address: Gal Gadot,
votes: 0
},
{
nodeId: C,
address: Ben Affleck,
votes: 0
}
],
fromAddress: Bob,
candidateA: {
nodeId: C,
address: Gal Gadot
},
candidateB: {
nodeId: A,
address: Selena Gomez
},
call: function() {
return {
getBalance: this.balance,
getFromAddress: this.fromAddress
};
},
send: function() {
return {
moveFunds: this.changeBalance
};
},
moveFunds: function(userData, vote) {
// Check if vote requester is authorized
const authorizedVoterIdx = this.authorizedVoters.findIndex(
user =>
user.nodeId === userData.nodeId && user.address === userData.address
);
if (authorizedVoterIdx === 1) return null;
// Check if candidate requester is voting for exists
const candidateIndex = this.votes.findIndex(
candidate => candidate.address === vote
);
if (candidateIndex === 1) return null;
// Cast Vote and verify users can’t vote twice
this.votes[candidateIndex].votes++;
this.authorizedVoters.splice(authorizedVoterIdx, 1);
// Users still need to cast vote
if (this.authorizedVoters.length > 0) return;
this.votes.sort((voteA, voteB) => voteB.votes voteA.votes);
return {
senderNodeId: B,
senderAddress: Bob,
recipientNodeId: this.votes[0].nodeId,
recipientAddress: this.votes[0].address,
value: 400,
action: TRANSACTION_EXTERNAL_ACCOUNT
};
}
};

Este contrato pode ser executado através do cliente Postman ou executando o script vote_permissions_contract.sh no diretório shell-scripts.

Estes são apenas vários exemplos de contratos inteligentes. A estrutura atual permite que qualquer pessoa faça o upload de qualquer contrato (desde que adira ao formato analisável que estou usando), implante-o na rede em sessão e comece a executá-lo. Podemos criar contratos para eleições, armazenamento de arquivos distribuídos e muito mais.

Conclusão

A programação dessa cadeia de bloqueio de prova de conceito foi um desafio! É apenas a ponta do iceberg em termos de formas de melhorar e garantir. Fui um excelente momento pesquisando os conceitos e aprendendo sobre implementações e mecanismos de cadeias de blocos.

Um grande agradecimento a Leonid Beder pela graciosa introdução do blockchain e aos colaboradores da Kin , Orbs e Samsung Next para organizar a Academia Blockchain .

Você pode verificar minha implementação completa aqui.

Se você quiser continuar a discussão do blockchain, sinta-se à vontade para alcançar o Linkedin .

Por último, se você chegou até aqui, obrigado por ficar com isso 🤗🤗🙌🙌🖖🏼

 

Fonte:  https://hackernoon.com/building-a-blockchain-the-grey-paper-5be456018040

Como ver quais sites o seu computador acessa secretamente

Dos computadores que você tem em casa, quantos deles estão conectados na internet? Praticamente todas as máquinas que saíram das lojas nos dois últimos anos, seja notebook ou PC, estão ligadas à rede mundial de computadores, o que faz com elas se tornem alvo de usuários mal-intencionados.

Existem diversos programas que ajudam a proteger sua máquina dessas pragas, mas nem sempre eles são suficientes para impedir que elas invadam o computador. Outro problema bem comum é que os aplicativos de proteção não conseguem detectar 100% dos invasores que batem à porta do usuário.

Um tipo bem comum de spyware é aquele que não tem a intenção de roubar dados, mas sim de utilizar o computador como zumbi, utilizando a sua conexão com a internet para hackear sites e serviços disponíveis na rede. Mas existe uma forma de monitorar a sua conexão com a internet e ver todo e qualquer site ou endereço de IP que é acessado por meio do seu roteador.

 

Como fazer?

O primeiro passo para descobrir quais serviços estão sendo acessados do seu computador é iniciar o prompt de comandos do Windows com os privilégios de administrador. Para isso, abra o Menu Iniciar e escreva “cmd” na caixa de pesquisa. Em seguida, clique com o botão direito do mouse sobre a opção encontrada e escolha o item “Executar como administrador”.

O “-a” do comando significa que todas as conexões e portas serão ouvidas e armazenadas no arquivo; o “-b” mostrará quais aplicações estão criando os caminhos para acesso à internet; o “-f” gravará os DNS completos de cada conexão, para facilitar a compreensão dos dados. Caso queira que apenas os endereços IPs sejam gravados, coleque o -n no lugar do “-f”, ficando ”-abn”. O valor “5” indica o intervalo de tempo, em segundos, entre uma leitura e outra.

Não será mostrado nada na tela enquanto o comando estiver sendo executado. Depois de alguns minutos, pressione Ctrl+C para encerrar a leitura das conexões e finalizar a gravação dos dados no arquivo. Agora é só abrir o arquivo de? texto criado e começar a investigar quais são os serviços acessados a partir do seu computador.

Como interpretar os resultados?

Ao abrir o arquivo activity.txt você poderá notar que o conteúdo está dividido em quatro colunas principais: “Proto”, “Endereço local”, “Endereço externo” e “Estado”. A primeira indica o protocolo de comunicação utilizado pelo processo. A segunda e a terceira mostram os endereços IP utilizados e a última coluna exibe a atividade que estava sendo realizada no momento da leitura.

É na terceira coluna que os esforços serão concentrados, pois ela indica as URLs e endereços IP externos acessados utilizando a sua máquina. Uma maneira fácil de encontrar alguma atividade suspeita é olhar o nome dos processos, apresentados entre colchetes ao longo do documento.

Ao notar um processo estranho, verifique o endereço externo que ele utiliza. Se mesmo assim você não conseguir identificar do que se trata, uma boa saída é procurar pelo nome da atividade no Google. Se for algo comum nos computadores, certamente há algum site explicando do que se trata.

Outra forma de descobrir o serviço acessado é utilizando algum serviço que rastreia endereços IP. Duas boas opções são o IP Address Tracer e o Global Whois Search. Nos dois casos, você só precisa copiar o IP nos campos de pesquisa e aguardar até que a busca seja finalizada e os dados comecem a aparecer na tela.

 

Outras ferramentas

Existem diversos aplicativos que ajudam a monitorar as portas e conexões abertas em um computador. O CurrPorts é um dos mais usados pelos usuários com um pouco mais de experiência, pois é relativamente fácil de usar e a interpretação dos resultados exibidos na tela se dá de forma mais natural.

Há ainda o Wireshark, mais indicado para quem possui uma rede de computadores em casa, pois ele também analisa a troca de mensagens entre as máquinas conectadas pelo hub (ou switch). Assim, caso algum PC esteja infectado e a invasão acabe se propagando pela rede, você consegue detectá-la sem maiores problemas.

 

O que faço depois?

Se o resultado das investigações apontarem que o processo é, de fato, um invasor, é preciso tomar algumas providências para que ele seja eliminado do computador e não utilize mais a sua conexão. A maneira mais simples de fazer isso é utilizando aplicativos de segurança, como anti-spywares, que varrem a máquina em busca de possíveis sanguessugas de internet.

 

 

Caso as ferramentas não tenham efeito algum sobre o possível invasor, uma alternativa é buscar na rede mundial de computadores por injeções específicas para determinada praga. O Google sempre ajuda nessas horas. É muito comum as empresas de segurança lançarem soluções gratuitas para combater apenas determinadas ameaças.

…..

Agora que você já sabe como usar o “netstat” e viu como é fácil interpretar os dados e utilizar as informações fornecidas, comece as investigações em seu computador para descobrir se não há nenhum processo rodando escondido e que esteja prejudicando a sua conexão. Depois não se esqueça de voltar aqui para deixar um comentário contando a sua experiência.

 

Fonte: https://www.tecmundo.com.br/seguranca-de-dados/16199-como-ver-quais-sites-o-seu-computador-acessa-secretamente.htm

Learn CI: Teste Automatizado e Publicação em 10 min

Aqui está um modelo para iniciar e executar testes automatizados e publicação de código JS cliente ou servidor

Há muitas dependências por aí. Claramente, o mundo precisa de mais testes automatizados. Mas, precisamos nos instalar rapidamente.

Objetivos:
deve ser livre, como em dinheiro.
Deve ter pequena curva de aprendizado, poucas palavras mágicas para aprender!
Deve ser UI grátis. Teste o código do cliente usando o uso de Chrome sem cabeça
Travis CI para testes automatizados, com emblema de aprovação / falha no github
Execute testes em cada commit
Fácil publicação no NPM e URL memorável para incluir scripts em páginas da web

Então, em cada compromisso com o repositório Github :

  1. A Travis CI iniciará sua instância de teste
  2. Instale a última versão do nó e o navegador Chrome
  3. Inicie o Chrome para testes sem cabeça
    (apenas necessários para projetos que sejam clientes JS)
  4. Execute dois exemplos de scripts de teste. Um para testar aplicativos de servidor e outro para navegador JS
    (Um deles pode ser eliminado dependendo se o seu é um aplicativo de nó ou script de cliente)
  5. Mostrar resultado do teste
  6. Publicar no NPM se for bem-sucedido
  7. Mostre os cartões de aprovação / aprovação para o projeto no NPM e no github.

Você pode adicionar / remover para isso conforme necessário, dependendo das necessidades do seu projeto.

Aqui estão todos os arquivos :

Para Travis CI, que hospedará o teste, apenas um  arquivo .travis.yml é necessário.

Se o projeto for um aplicativo de nó e não o cliente JS, você não precisa das peças do Chrome.

Também publicará para npm. Para scripts de clientes, podemos usar um link curto e fácil de lembrar usando unpkg.com

Não há estruturas de teste extravagantes para aprender aqui. Nós simplesmente escrevemos nossos scripts de teste, que lançam erros de falha.

A estrutura de teste é a seguinte , qualquer erro nativo constitui um teste falhado.

Para aplicativos de nó, test-server.js

main.js é o arquivo principal no aplicativo. O que está sendo testado.
Se tivéssemos chamado test_fail, o teste falharia e Travis nos diria assim.

test-browser.js para scripts de clientes.
Como realmente queremos automatizar as coisas, não podemos ter UI. Ninguém estará prestes a clicar nas coisas. Então, o cromo sem cabeça é usado para executar testes.

testchrome , é apenas um invólucro simples na interface remota cromada usada para testes sem cabeça.

Testchrome passa a usar uma API simplificada, apenas
.evaluar (JS no navegador)
.get (JSON de um URL)

Alternativamente, você pode usar os outros módulos de teste de Headless Chrome que estão disponíveis, como o marionetismo.

Conseguir esta configuração localmente em uma máquina pode ser desagradável. Travis CI realmente brilha aqui!

Indo para travisci.org (para reposos públicos) e siga as instruções para configurar seu repo. Conecte seu Travis CI acct ao github e especifique seu repo para teste.

Existe uma configuração necessária no Travis, seu token NPM que permitirá que o Travis publique o aplicativo, em Configurações:

Em seguida, apenas comprometa-se com o repo, ou use o console, para iniciar um teste.

Monitorize seu teste no console do Travis:

e ver resultados

Uma última coisa, o distintivo. Na README.md do repo:

que sempre mostra nosso emblema de aprovação / falha no NPM e no Github.

Finalmente, precisamos de um URL facilmente lembrado (para scripts de clientes). Usando o unpkg.com sem necessidade de configuração adicional, porque ele irá puxar o mais recente do NPM.

<script src = // unpkg.com/reponame> </ script>

Claro, para aplicativos de servidor, simplesmente

npm instalar o reponame

É isso mesmo, para a nossa estrutura que fornece testes e publicação automatizados. Por favor comente com quaisquer pensamentos ou sugestões. O exemplo de repo está em https://github.com/digplan/learn-ci

Testes felizes!

 

Fonte: https://hackernoon.com/learn-ci-automated-test-and-publish-in-10-min-3096717dc81e

Equipes de software de segurança psicológica, tolerância ao risco e alto desempenho

Alguns anos atrás, o Google decidiu pesquisar o que foi o ingrediente chave que fez algumas equipes de software na empresa mais bem sucedidas do que outras . Para sua surpresa, o traço-chave mais correlacionado com as equipes de sucesso não foi a proeza técnica, as personalidades ou os antecedentes educacionais dos membros da equipe. Em vez disso, foi a noção de segurança psicológica – ” uma crença compartilhada dos membros de uma equipe de que a equipe está segura para a tomada de riscos interpessoais “.

Segurança psicológica e cultura tecnológica às probabilidades

A pesquisa do Google mostrou que os membros de uma equipe de software de alto funcionamento compartilham um senso de confiança de que a equipe não vai embaraçar, rejeitar ou punir alguém por compartilhar suas idéias ou falar sua mente. Essa capacidade de assumir riscos e experimentar as idéias da caixa sem medo ou constrangimento leva a idéias e abordagens mais inovadoras que podem parecer estranhas ou até mesmo idiotas no início (alguém se lembra do livro de quadrinhos do Chrome ?).

No entanto, a cultura tecnológica, especialmente como definida pelas lendas de software que surgiram na década de 1980 e 1990, é inversa. Envergonhar as pessoas por idéias que alguém acredita serem precárias como forma de inspirá-las é uma abordagem familiar. Nós temos exemplos como Steve Jobschamando equipes de engenharia “f ** ing dickless a ** holes”, Bill Gates como com sua linha infame favorita “essa é a coisa mais estúpida que já ouvi” e claro, Linus Torvalds, cujos lendários inclui informar os mantenedores do kernel do Linux para “fechar o f ** k” para enviar um patch ruim.

Um ambiente de trabalho em que seu chefe o despreza em público é literalmente o oposto da segurança psicológica. Infelizmente, dado o sucesso da Apple, Microsoft e Linux, nossa indústria tem provas de existência que você pode criar produtos e empresas extremamente bem sucedidas em um ambiente de trabalho tóxico.

O alto custo da falta de segurança psicológica

Há agora um grande conjunto de pesquisas que mostram o impacto de organizações onde um ambiente de trabalho tóxico e estressante regra. Abaixo estão alguns excertos do artigo Harvard Business Review. Prova de que as culturas positivas são mais produtivas

Primeiro, os gastos com cuidados de saúde em empresas de alta pressão são quase 50% maiores do que em outras organizações. A American Psychological Association estima que mais de US $ 500 bilhões são retirados da economia dos EUA devido ao estresse no local de trabalho, e 550 milhões de dias úteis são perdidos a cada ano devido ao estresse no trabalho. Sessenta por cento a 80% dos acidentes de trabalho são atribuídos ao estresse, e estima-se que mais de 80% das visitas ao médico são devidas ao estresse. O estresse no local de trabalho tem sido associado a problemas de saúde que variam de síndrome metabólica a doença cardiovascular e mortalidade.

O estresse de pertencer às hierarquias em si está ligado à doença e à morte. Um estudo mostrou que, quanto menor a classificação de alguém em uma hierarquia, maior as chances de doenças cardiovasculares e morte por ataques cardíacos. Em um estudo em larga escala de mais de 3.000 funcionários conduzido por Anna Nyberg no Instituto Karolinska , os resultados mostraram uma forte ligação entre o comportamento de liderança e a doença cardíaca nos funcionários. Os chefes de estresse são literalmente ruins para o coração.

Há uma série de outras deficiências de não criar um ambiente de segurança psicológica no local de trabalho no artigo, mas eu pensei que a última frase acima realmente leva o ponto para casa. Um chefe que prospera na criação de um ambiente de trabalho de alta pressão está literalmente enviando seus funcionários para uma sepultura precoce.

Estruturas de desmontagem que trabalham contra a segurança psicológica

Entre as equipes, existem estruturas formais e informais que impedem as pessoas de se sentir completamente seguras de confiar e compartilhar todas as suas idéias com a equipe, independentemente de quão inane eles possam parecer ao primeiro. Em muitas empresas, a maior estrutura formal que funciona contra esse senso de confiança é um sistema de revisão de desempenho que usa alguma forma de classificação forçada .

O ranking forçado é quando os gerentes exigiam que os funcionários fossem distribuídos em uma cota fixa de trabalhadores de alto desempenho que sejam bem recompensados, artistas de médio porte que recebem menos recompensas e artistas de baixa qualidade que recebem pouca ou nenhuma recompensa ou despedido. Uma vez que existe um conjunto fixo de 10% de desempenho inferior ou 20% de melhores desempenhos, os funcionários estão basicamente competindo uns contra os outros por seus aumentos em vez de trabalhar em conjunto para o sucesso conjunto. Ninguém quer dar o seu gerente de forragem para colocá-los no final de 10%, compartilhando uma idéia aparentemente idiota , embora isso possa acabar por ser puro gênio se for perseguido .

As estruturas informais que reduzem a confiança entre os membros de uma equipe são mais difíceis de notar, mas limitam a colaboração irrestrita. É fácil dizer que se deve reduzir o snark, o gerenciamento de imagens ou garantir que pessoas particulares não dominem os outros nas discussões, mas são mais difíceis de se retirar. Aqui estão algumas técnicas que podem ajudar as equipes a se aprimorar ao serem inclusivas

  1. Amplificação: reconheça e amplie a fonte de contribuições nas discussões. Isso serve para o duplo propósito de aumentar a visibilidade da idéia de um colega de trabalho e garantir que sua idéia não seja seqüestrada por uma personalidade mais dominante na discussão. Esta técnica é discutida com mais detalhes no artigo. O truque simples que a mulher na Casa Branca usa para parar de ser interrompido .
  2. Desenhando vozes: trabalhe para garantir que todos na equipe tenham a chance de compartilhar suas perspectivas sobre decisões-chave. Em empresas de tecnologia, nós tentamos contratar pessoas inteligentes e capazes, nunca deixemos que elas falem, enquanto o mesmo grupo de pessoas domina as conversas. Muitas vezes, as pessoas que não falaram têm um ponto de vista sobre o problema que é digno de discussão e podem trazer uma nova visão. Esta prática precisa ser equilibrada, de modo que as pessoas não acabem sendo colocadas no local. Em pessoa, você pode ler a sua linguagem corporal para saber se eles estão envolvidos e quer tocar no telefone, enquanto digitalmente (por exemplo, em um canal Slack) você pode perguntar se as pessoas que não compartilharam uma opinião têm uma.
  3. Check-in antes de finalizar as decisões: Muitas vezes, as decisões-chave acabam sendo feitas por um subconjunto da equipe que é mais apaixonado pelo tema. Muitas vezes é uma boa idéia fazer o check-in com o resto da equipe antes de fechar o tópico porque algumas pessoas podem ter algo importante para adicionar, mas não a energia, para participar de um debate completo. Obtendo a tomada de decisão quando as principais partes interessadas chegaram ao consenso, permite que outros membros da equipe se sintam responsáveis ​​pela decisão enquanto estão conscientes de não reabrir discussões sem justa causa.

Segurança psicológica e o paradoxo da tolerância

Um dos temas que eu vi repetidos em linha é como o conceito de segurança psicológica enquanto trabalha em uma equipe escova contra o Paradox da Tolerância . Se você não está familiarizado com esse paradoxo, aqui está um breve trecho da entrada da Wikipédia

Menos conhecido é o paradoxo da tolerância : tolerância ilimitada deve levar ao desaparecimento da tolerância. Se ampliarmos a tolerância ilimitada mesmo para aqueles que são intolerantes, se não estamos preparados para defender uma sociedade tolerante contra o ataque do intolerante, então o tolerante será destruído e a tolerância com eles.

Há pessoas como James Damore em seu Manifesto Anti-Diversidade e Sam Altman em seu post E Pur Si Muove que argumentam que alguns funcionários talentosos não podem sentir segurança psicológica se forem capazes de expressar formas de fanatismo como o sexismo ou a homofobia. Esses argumentos ignoram a segurança psicológica de mulheres talentosas e membros LGBTQ de tais equipes.

A recomendação é direta; seja intolerante à intolerância. Não há espaço para empurrões brilhantes em equipes de alto funcionamento. Nas palavras de Reed Hastings, CEO da Netflix, o custo para o trabalho em equipe efetivo é muito alto .

 

Fonte: https://hackernoon.com/psychological-safety-risk-tolerance-and-high-functioning-software-teams-75701ed23f68

ALLEN ATLAS CEREBRAL

Visão geral

Esta base de dados de células cerebrais é uma pesquisa de características biológicas derivadas de dados de células únicas, de humanos e ratos.

O banco de dados contém propriedades eletrofisiológicas , morfológicas e transcriptômicas coletadas de células individuais e modelos simulando atividade celular. Nesta fase inicial da geração de dados, a cobertura da pesquisa foi focada em áreas selecionadas do córtex cerebral e nos neurônios talâmicos.

Procure os dados de resposta eletrofisiológica e as morfologias neuronais reconstruídas usando a ferramenta de Pesquisa de Caracteres Celulares . Os dados transcriptômicos podem ser acessados ​​através da página de download .

Use o Kit de Desenvolvimento de Software Allen (SDK) para acessar e analisar programaticamente dados em bruto e executar modelos.

Os dados podem ser baixados selecionando experimentos individuais na ferramenta de Pesquisa de Caracteres de Celular, acessando arquivos RNA-Seq transcriptômicos através da página de Download , ou através do SDK ou API Allen

 

 

 

Dados de rato

As células são adquiridas de áreas cerebrais selecionadas em ratos adultos. As células são identificadas para o isolamento com base em linhas de ratos transgênicos que abrigam repórteres fluorescentes conduzidos por drivers específicos do tipo celular. Para análises eletrofisiológicas e morfológicas, foram selecionadas células excitatórias com expressão enriquecida em camada e células inibitórias baseadas em marcadores clássicos. As áreas cerebrais selecionadas para análise incluem sub-regiões do córtex visual, córtex motor e córtex motor lateral anterior (ALM), na área do motor secundário (MOs).

Para a análise transcriptômica, foram realizadas dissecções regionais e laminares em espécimes de linhas transgênicas pan-neuronais, pan-excitatórias e pan-inibitórias, para amostra de forma abrangente. Os dados do núcleo geniculado lateral (LGd) também estão incluídos.

Este diagrama interativo de Venn mostra quantas células estão disponíveis para cada modalidade de dados (eletrofisiologia, morfologia, transcriptômica) e modelos. Selecione uma categoria para visualizar o subconjunto de células.

Existem 1058 células de mouse para as quais temos dados de eletrofisiologia.

 

 

Dados humanos

As células são adquiridas a partir do tecido cerebral doado nos lobos temporais ou frontais com base em anotações estruturais descritas no Atlas de referência do cérebro humano Allen . Para análises eletrofisiológicas e morfológicas no córtex, as células são selecionadas com base na forma do soma e na localização laminar.

Para a análise transcriptômica, diferentes camadas de córtex são dissecadas e os núcleos neuronais são isolados. A amostragem laminar é guiada pelo número relativo de neurônios presentes em cada camada.

 

 

 

Sobre eletrofisiologia

As gravações de grampos de patch de células inteiras fornecem informações básicas sobre propriedades de disparo celular. As gravações são realizadas usando uma variedade de protocolos de estímulo, incluindo pulsos curtos, passos longos, rampas lentas e ruído naturalista para caracterizar as propriedades intrínsecas desses neurônios. Os protocolos detalhados são descritos no whitepaper técnico de visão geral de eletrofisiologia .

Sobre Morfologia

A estrutura celular informa a função e a diversidade neuronal. Para ver a forma da célula, as células são preenchidas com biocitina e imagens em série para visualizar suas morfologias. Imagens planar e reconstruções de células 3D podem ser visualizadas com os dados de eletrofisiologia da célula, ou baixados para análise off-line. Os protocolos detalhados são descritos no whitepaper técnico da síntese de morfologia .

Sobre Transcriptomics

A seqüência de ARN pode fornecer um perfil transcriptômico para cada célula. Os transcritos genéticos são isolados, amplificados e seqüenciados, e as leituras estão alinhadas com um genoma de referência. A expressão de ARN por gene é relatada como uma média de isoformas de transcrição. Os dados estão disponíveis para células inteiras e, em alguns casos, isolados de frações nucleares. Para os núcleos, uma proporção significativa de lições se alinha aos intrões. Todos os dados podem ser baixados e os protocolos detalhados são descritos no quadro técnico geral da transcriptomics .

Sobre Modelos

Uma variedade de modelos neuronais que simulam propriedades de células intrínsecas estão disponíveis. Os modelos incluem: modelos generalizados de injeção e fogo, modelos biofisicamente realistas, de neurônio único com dendritos passivos e soma ativo (perisomático) e com condutâncias ativas (tudo ativo). As simulações podem ser vistas em linha ao lado das respostas celulares medidas, quando disponíveis. Todos os modelos podem ser baixados, e protocolos detalhados são descritos nos whitepapers técnicos: GLIF , perisomatic , all-active .

 

Fonte:  http://celltypes.brain-map.org/

Como implementar o Blockchain em JavaScript

Ouvimos falar sobre Bitcoin, Ethereum além de outras moedas praticamente todos os dias. 2017 afinal, foi o ano dascryptocurrencies.

Nesse post porém, não vou focar em nenhuma dessas moedas digitais. Mas sim na tecnologia por trás delas, que muitas pessoas dizem ser tão revolucionárias quanto a própria internet, o Blockchain.

A ideia é implementar passo-a-passo uma versão simplificada do Blockchain em JavaScript e ir explicando como essa tecnologia disruptiva funciona por baixo dos panos.

Então, continue lendo esse post para aprender:

  • O que é e como funciona o Blockchain
  • Proof of Work?
  • Pra que servem os Blocos
  • O que é Mineração

Introdução

O Blockchain parece uma tecnologia de outro mundo e gera muitas dúvidas. Apesar disso, é algo extremamente fácil de definir:

O Blockchain nada mais é do que um banco de dados aberto e distribuído.

Esse banco de dados é composto de Blocos. E todos esses Blocos são ligados entre si em uma sequência. Daí o nome, Blockchain (cadeia de blocos).

Além disso, esse banco de dados é imutável.
E faz sentido que seja.

Imagina se fosse possível que alguém intencionalmente modificasse sua conta. Agora os 10 Bitcoins que você possui viraram 1.

Blocos

Vamos começar a implementação pela parte mais fácil: os Blocos. A estrutura de um Bloco deve possuir os seguintes campos:

  • index
  • timestamp
  • hash
  • previousHash
  • data

Crédito: https://medium.com/@lhartikk/a-blockchain-in-200-lines-of-code-963cc1cc0e54

index e o timestamp são campos comuns em praticamente todos bancos de dados. O campo data serve principalmente pra guardar transações mas podemos também colocar outras informações. O hash é calculado internamente e serve pra manter a integridade de cada Bloco e a segurança de todo o sistema (como vamos ver no final do post). E por final, o previousHash é o elo de ligação que liga cada Bloco ao seu Bloco anterior.

Com isso, temos a primeira implementação de um Bloco:

const sha256 = require(crypto-js/sha256)
class Block {
constructor(index = 0, previousHash = null, data = Genesis block) {
this.index = index
this.previousHash = previousHash
this.data = data
this.timestamp = new Date()
this.hash = this.generateHash()
}
generateHash() {
return sha256(this.index + this.previousHash + JSON.stringify(this.data) + this.timestamp).toString()
}
}
module.exports = Block
view rawblock.js hosted with ❤ by GitHub

A função generateHash usa a biblioteca externa crypto-js pra gerar o hash seguindo o padrão sha256.

Parece complicado, mas tudo o que você precisa saber é que essa função vai receber uma string como por exemplo:

foo

E vai retornar uma string encriptada:

2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae

Blockchain

Agora que já temos uma versão mínima de um Bloco, já podemos começar a construir o Blockchain, que como falei anteriormente é uma sequência de Blocos ligados entre si.

Com isso, essa é a primeira versão do Blockchain:

const Block = require(./block)
class Blockchain {
constructor() {
this.blocks = [new Block()]
this.index = 1
}
getLastBlock() {
return this.blocks[this.blocks.length 1]
}
addBlock(data) {
const index = this.index
const previousHash = this.getLastBlock().hash
const block = new Block(index, previousHash, data)
this.index++
this.blocks.push(block)
}
}
module.exports = Blockchain
view rawblockchain.js hosted with ❤ by GitHub

No construtor da classe, temos o array de Blocos inicializado já com o Genesis Block (o primeiro bloco criado no registro do Bitcoin). Adicionei também o index para poder incrementar toda vez que um novo Bloco for adicionado no Blockchain.

Além disso duas funções foram criadas:

  • getLastBlock
  • addBlock

A primeira é extremamente simples, ela serve pra pegar o último Bloco que foi criado.

A segunda é uma pouco mais complicada, mas também não é nada de outro mundo. Ela serve pra adicionar novos Blocos ao Blockchain.

Integridade

Apesar de a versão anterior já funcionar razoavelmente bem, precisamos adicionar alguma garantia de que o Blockchain não tenha sido alterado por algum ataque malicioso.

Precisamos adicionar uma nova função para checar a integridade do Blockchain:

isValid() {
for (let i = 1; i < this.blocks.length; i++) {
const currentBlock = this.blocks[i]
const previousBlock = this.blocks[i 1]
if (currentBlock.hash !== currentBlock.generateHash()) {
return false
}
if (currentBlock.index !== previousBlock.index + 1) {
return false
}
if (currentBlock.previousHash !== previousBlock.hash) {
return false
}
}
return true
}

Lembrando que para verificarmos a integridade do Blockchain precisamos garantir três características:

  • hash de cada Bloco foi gerado corretamente
  • index dos Blocos está em sequência
  • Os Blocos estão ligados entre si através dos hashes

Com essa simples função podemos testar se modificações maliciosas foram feitas e se o Blockchain deve ser invalidado:

const Blockchain = require(./blockchain)
const blockchain = new Blockchain()
blockchain.addBlock({ amount: 4 })
blockchain.addBlock({ amount: 50 })
console.log(blockchain.isValid()) // true
blockchain.blocks[1].data.amount = 30000 // ataque malicioso
console.log(blockchain.isValid()) // false

E finalmente com isso já temos uma primeira versão básica e funcional do Blockchain em JavaScript:

const Block = require(./block)
class Blockchain {
constructor() {
this.blocks = [new Block()]
this.index = 1
}
getLastBlock() {
return this.blocks[this.blocks.length 1]
}
addBlock(data) {
const index = this.index
const previousHash = this.getLastBlock().hash
const block = new Block(index, previousHash, data)
this.index++
this.blocks.push(block)
}
isValid() {
for (let i = 1; i < this.blocks.length; i++) {
const currentBlock = this.blocks[i]
const previousBlock = this.blocks[i 1]
if (currentBlock.hash !== currentBlock.generateHash()) {
return false
}
if (currentBlock.index !== previousBlock.index + 1) {
return false
}
if (currentBlock.previousHash !== previousBlock.hash) {
return false
}
}
return true
}
}
module.exports = Blockchain
view rawblockchain.js hosted with ❤ by GitHub

Problemas

Apesar de já termos uma versão inicial funcionando, ainda podemos melhorar bastante a nossa implementação.

Um dos problemas com essa versão atual é que usuários podem criar novos Blocos de forma muito rápida, podendo invalidar o Blockchain, ou coisas ainda piores. Não vou entrar em muitos detalhes dessa particularidade da tecnologia, mas o post abaixo faz um excelente trabalho nesse sentido:

Explaining blockchain — how proof of work enables trustless consensus

Em resumo, precisamos de alguma ferramenta que não permita que usuários possam criar Blocos desenfreadamente.

Proof of Work

O conceito de Proof of Work, como o próprio nome já sugere, é um mecanismo que faz com que um usuário tenha um trabalho computacional significativo ao realizar determinada tarefa.

Essa ferramenta já era utilizada antes do Bitcoin ser inventado para evitar por exemplo spams e ataques DoS.

No Bitcoin, o Proof of Work funciona da seguinte forma: o hash que é gerado automaticamente em cada Bloco deve começar com uma quantidade X de zeros, dependendo da dificuldade geral do sistema.

Por exemplo, se a dificuldade geral do sistema for 1, esse hash é inválido porque não começa com um zero:

a5036427617139d3ad9bf650d74ae43710e36d4f63829b92b807da37c5d38e8d

Porém, esse outro hash é válido porque começa com um zero:

07da8bff6cfea68a3f0a5bafc9b24d07f503e2282db36ffb58d43f9f4857c54b

Sempre que um usuário for criar um novo Bloco, ele vai precisar criar diversos hashes até que um deles tenha a quantidade de zeros no começo fazendo com que a regra geral do sistema seja atendida.

Ah, o nome disso é Mineração.

Lembrando que quanto maior o número de zeros que devem estar no começo do hash, maior o poder computacional necessário para a tarefa.

Dito isso, vamos agora implementar a versão final do Blockchain com a mineração.

Primeiramente vamos alterar os Blocos.

class Block {
constructor(index = 0, previousHash = null, data = Genesis block, difficulty = 1) {
this.index = index
this.previousHash = previousHash
this.data = data
this.timestamp = new Date()
this.difficulty = difficulty
this.nonce = 0
this.mine()
}
/* */
}
view rawblock.js hosted with ❤ by GitHub

No construtor, adicionamos os campos difficulty (dificuldade geral do sistema) e nonce (quantidade de tentativas até que o hash correto seja criado). Além disso, temos também um chamada para a função mine.

mine() {
this.hash = this.generateHash()
while (!(/^0*$/.test(this.hash.substring(0, this.difficulty)))) {
this.nonce++
this.hash = this.generateHash()
}
}
view rawblock.js hosted with ❤ by GitHub

A função mine vai criar hashes até que a quantidade de zeros à esquerda do hash seja atentida.

Lembrando que para que os hashes criados sejam diferentes, devemos adicionar o campo nonce na função generateHash:

generateHash() {
return sha256(this.index + this.previousHash + JSON.stringify(this.data) + this.timestamp + this.nonce).toString()
}
view rawblock.js hosted with ❤ by GitHub

Com isso temos a versão final do Blocos com a mineração:

const sha256 = require(crypto-js/sha256)
class Block {
constructor(index = 0, previousHash = null, data = Genesis block, difficulty = 1) {
this.index = index
this.previousHash = previousHash
this.data = data
this.timestamp = new Date()
this.difficulty = difficulty
this.nonce = 0
this.mine()
}
generateHash() {
return sha256(this.index + this.previousHash + JSON.stringify(this.data) + this.timestamp + this.nonce).toString()
}
mine() {
this.hash = this.generateHash()
while (!(/^0*$/.test(this.hash.substring(0, this.difficulty)))) {
this.nonce++
this.hash = this.generateHash()
}
}
}
module.exports = Block
view rawblock.js hosted with ❤ by GitHub

Agora basta alterarmos o Blockchain para que o campo difficulty seja passado para os Blocos:

const Block = require(./block)
class Blockchain {
constructor(difficulty = 1) {
this.blocks = [new Block()]
this.index = 1
this.difficulty = difficulty
}
getLastBlock() {
return this.blocks[this.blocks.length 1]
}
addBlock(data) {
const index = this.index
const difficulty = this.difficulty
const previousHash = this.getLastBlock().hash
const block = new Block(index, previousHash, data, difficulty)
this.index++
this.blocks.push(block)
}
isValid() {
for (let i = 1; i < this.blocks.length; i++) {
const currentBlock = this.blocks[i]
const previousBlock = this.blocks[i 1]
if (currentBlock.hash !== currentBlock.generateHash()) {
return false
}
if (currentBlock.index !== previousBlock.index + 1) {
return false
}
if (currentBlock.previousHash !== previousBlock.hash) {
return false
}
}
return true
}
}
module.exports = Blockchain
view rawblockchain.js hosted with ❤ by GitHub

E é só isso 🙂

Lembrando que o código está todo no GitHub.

Ah, se você quiser saber mais sobre o Blockchain:

Outras implementações:

Fonte: https://tableless.com.br/como-implementar-blockchain-em-javascript/?utm_source=tablelessRelatedLink

Sistema de correção de postura sentada em tempo real com base em sensores de pressão têxteis eletrônicos altamente duráveis ​​e laváveis

 

Destaques

•  Foi desenvolvido um sistema de correção de postura assente em tempo real com base em sensores de pressão têxtil altamente duráveis ​​e laváveis.
• A condução de fibras de liga Ni-Ti revestidas com elastômero de poliuretano resultou em sensores de pressão têxtil altamente duráveis ​​e laváveis.
• Ao analisar a pressão detectada nas diferentes posições sob o quadril, coxa e costas, sete tipos de posturas de sessão foram classificadas com sucesso.
• A exibição em tempo real em um monitor de mudanças na postura sentada, que faz os usuários reconhecer e corrigir o equilíbrio corporal, foi simulada.

 

 

Abstract

Foi demonstrado um sistema de correção de postura sentada em tempo real com base em sensores de pressão têxtil altamente durável e laváveis. Os sensores de pressão têxtil consistiram na condução de fibras de liga de Ni-Ti com uma excelente resistência à fadiga e um elastômero de poliuretano sensível à pressão resultou em mudança de capacitância confiável por uma pressão aplicada em uma faixa de 10 a 180 kPa com uma sensibilidade de 2,39 kPa -1. O desempenho sensitivo foi mantido em 100%, mesmo após a repetida ação de sentar mais de 1000 vezes e a dura lavagem na solução detergente. Ao analisar a pressão detectada nas diferentes posições sob o quadril, coxa e costas, sete tipos de posturas sentadas, incluindo a sessão vertical, sentado com uma perna cruzada, e sentado com as duas pernas levantadas foram classificadas com sucesso. Finalmente, a exibição em tempo real em um monitor das mudanças na postura sentada foi simulada para permitir aos usuários reconhecer e corrigir o equilíbrio corporal.

Palavras-chave

  • Sensor de pressão têxtil lavável ;
  • Fibras de liga Ni-Ti revestidas com poliuretano;
  • Sensor do tipo capacitância ;
  • Correção de postura sentada

 

Fonte: https://www.sciencedirect.com/science/article/pii/S0924424717312815