Bitcoin e Blockchain para leigos

O ativo financeiro digital mais famoso da internet é o BitcoinQue funciona em cima de uma tecnologia chamada “Blockchain”, que registra todas as transações envolvendo bitcoins, eletronicamente numa espécie de livro-razão imutável e criptografado.

Uma das característica do Bitcoin é mecanismo é que o registro dos negócios não é centralizado ou administrado por uma única instituição. O histórico das transações é armazenado em blocos que somente se encaixam se for utilizada certo tipo de assinatura digital.

E para haver a efetiva liquidação das operações, a cadeia de transações deve ser validada pelos demais participantes do mercado(mineradores, que emprestam sua força computacional para validar transações e criar novos bitcoins na rede, com isso ganham frações de bitcoins), para isso precisam confirmar a veracidade da chave pública divulgada. O desenvolvimento dessa intrincada engrenagem é atribuído a uma pessoa – ou a um grupo – que usou o pseudônimo de SatoshiNakamoto. Tecnologia criada em 2008, que seu autor até hoje permanece no anonimato.

Na prática a tecnologia do “Blockchain” implica mudança significativa na forma como a internet pode ser utilizada. Como distribuir e compartilhar informações, passa ser possível a transferência eletrônica da propriedade de ativos.

Por essa razão, a expectativa é que, no futuro próximo, será construída uma internet dos valores. Nesse novo ambiente, ao enviar um arquivo contendo determinado código, a propriedade do bem será automaticamente transferida.

Com o Blockchain já é possível imaginar diversos usos para a tecnologia, tais como contratos inteligentes onde se encerram e automaticamente, operações no mercado financeiro onde você poderá custodiar suas ações e trocá-las, transações de comércio internacional e a compra e venda de imóveis, registros de casamentos, nascimento e falecimento.

Hoje já existem 16,5 milhões de bitcoins no mercado. Por definição, o estoque máximo de bitcoins emitidos será de 21 milhões de unidades.

Nota: “Um” bitcoin é dividido em oito casas decimais (1.00000000), fracionando o seu valor, sendo assim você pode comprar frações de bitcoins, que no momento que foi escrito esse texto, a cotação atual comprando R$ 50,00 reais daria por volta de 0,00600000 bitcoins.

Os verificadores das transações, chamados no jargão do mercado de mineradores, podem criar bitcoins conforme o volume de cálculos executados, a rede dificulta a quantidade de bitcoins criados, pela quantidade de mineradores trabalhando nela e com tempo pelo seu processo deflacionário, escassez. A rede de mineradores é que garante o processamento das transações e a segurança do mercado(mineradores, são quaisquer pessoas que emprestam sua força computacional para validar e registrar as transações).

Leia também  Novo regulamento de criptomoedas da Coréia do Sul proíbe completamente Marketing Multinível

À prova de balas e transparente

Ninguém foi capaz, pelo menos por enquanto, de invadir o sistema para criar bitcoins falsos. Isso tem garantido a confiança na segurança da estrutura e atraído novos participantes.

Nas operações bancárias tradicionais, o Banco é a instituição responsável pelo controle do livro caixa das transações. E cobra altas tarifas por esse serviço, e sem contar que a qualquer momento pode “confiscar a sua poupança”, como já vimos há tempos atrás.

Por exemplo, para enviar um TED ou DOC, o Banco exige o pagamento de determinada remuneração. O mesmo acontece para manter a conta corrente ativa e emitir extratos, já o Bitcoin, você não precisa pagar taxas de custódia, manutenção, extratos, apenas paga pela sua transferência, uma taxa irrisória.

As operadoras de cartão de crédito também cobram para processar as transações entre lojistas e consumidores e também taxas de anuidade. O mesmo acontece com as bolsas de valores e de mercadorias para administrar a posição de cada investidor cobrando taxa de custódia e corretagens.

Em algumas transações os custos podem ser tão altos a ponto de inviabilizar as operações de pequeno montante, como no caso das transferências internacionais de valores financeiros, onde são inseridas novas taxas e ainda pode demorar dias para se concretizar, se concretizar… Onde pode aumentar o prazo, dependendo de finais de semanas e feriados.

Aceitação do Bitcoin no mundo

Uma das ideias do Bitcoin, portanto, é baratear os custos das transações, com valores irrisórios comparados a Bancos. A consequência pode ser o aumento no volume de negócios.

Por exemplo, um desenvolvedor de softwares no Brasil pode contratar os serviços de um programador na Ucrânia e pagar pelo trabalho por meio da transferência de bitcoins. Nessa situação o Bitcoin é usado como um meio de troca.

Considerando que a atual estrutura da internet já viabiliza a troca de arquivos sem barreiras geográficas, o uso em larga escala do bitcoin teria o efeito de estimular o comércio global de bens e serviços, com transferência de bitcoin para qualquer parte do mundo, com tempo médio de 10 minutos..

Leia também  Coreia do Sul prepara-se para taxar o uso do Bitcoin

Dado que o bitcoin possui cotação tanto em dólares quanto nas demais moedas mundiais, o programador ucraniano do exemplo poderia optar por manter parte de sua remuneração recebida do desenvolvedor brasileiro em bitcoins, como uma poupança.

Por fim, a decisão do programador ucraniano poderia ser a de gastar parte dos bitcoins na compra de produtos e serviços para serem consumidos, ou comprar produtos para o aperfeiçoamento do seu trabalho, tal como computadores e eletrônicos. A empresa americana Dell Computer, que fabrica computadores e notebooks, é um das lojas que aceitam bitcoin, na compra de seus produtos. Existe também um site brasileiro, chamado “Classificados BTC“, onde é possível comprar e vender produtos e serviços, com bitcoin.

Mesmo o Bitcoin não sendo considerado uma “moeda” (meio de troca, unidade de conta e reserva de valor; baseado no conceito econômico), pelos economistas, ainda sim é um excelente meio de troca, universalmente aceito, ainda que galgando.

O Bitcoin possui um valor especulativo. A cotação de um bitcoin saltou de pouco menos de US$ 300 em julho de 2015 para mais de US$ 2 mil em julho de 2017.

Para negociar Bitcoin, vale o alerta: como em todo investimento especulativo, é fundamental conhecer os riscos envolvidos, mas ao mesmo tempo o Bitcoin não é definido pelo preço, e sim sua tecnologia disruptiva que vamos descrever abaixo:

Bitcoin

  • 24h – Bitcoin funciona 24 horas por dia, 365 dias no ano, nunca para e as transações podem acontecer a qualquer hora do dia ou da noite, independente de finais de semanas e feriados.
  • Rápido – simples como enviar um e-mail ou sms, de um telefone móvel.
  • Descentralizado – não tem um controlador central, podemos transacionar com qualquer pessoa sem depender de um intermediador, uma rede ponto-a-ponto ou peer-to-peer, parecida com a rede do BitTorrent. BTC, também conhecido como Bitcoin, é um sistema livre, que não pode ser confiscado, como já aconteceu com a poupança nos anos 90.
  • Deflacionário – ao contrário do dinheiro emitido a esmo pelos Bancos Centrais, que geram inflação, o bitcoin é deflacionário e poderá ser criado somente 21 milhões, onde são criados em uma ordem decrescente.
  • Sistema de pagamento – O bitcoin é um ativo ao portadorvocê pode ser seu próprio Banco, transacionando e custodiando seus BTCs (a sigla de bitcoin).
  • Meio de troca – uma das maiores construtoras  do Brasil, a Tecnisa, aceita bitcoin como meio de pagamento em seus imóveis e várias pessoas no Brasil já entenderam as vantagens de aceitar Bitcoin e estão vendendo desde eletrônicos, até carros e casas de luxo, no Classificados BTC.
  • Privacidade – você pode ter milhões em Bitcoins, sem ter sua vida exposta pela FORBES, pois o seu nome não será divulgado na rede, você será identificado na rede com uma chave pública(parecida com essa: 1hlY78hOwe46VCd90oNuRX2j80se43WZ).
  • Segurança – a rede conjuntamente faz com que as regras sejam cumpridas, e acompanhada de uma resposta rápida dos seus usuários se alguém tentar fraldar o sistema, e também o custo benefício não compensa
  • Barato – custo irrisório, seja para enviar bitcoin para seu vizinho ou para o Japão, o custo é o mesmo.
  • Transparência – Bitcoin é um sistema de código aberto e as transações estão totalmente disponíveis para auditoria de qualquer pessoa, em tempo real, elas ficão registradas no Blockchain, o livro razão imutável com todas as transações da história do software Bitcoin registradas.
  • Inclusão social – metade da população brasileira não tem acesso a contas bancárias, por “N” motivos, mas o Bitcoin veio para mudar essa situação, onde quem quiser transferir dinheiro para qualquer parte do mundo, seja para se incluir no sistema financeiro ou ajudar em uma catástrofe mundial, você só precisa de um telefone móvel, acesso a internet e baixar o software do Bitcoin para transferir recursos para qualquer parte do mundo ou mesmo se incluir nele.
Com o Blockchain, Bitcoin é apenas o começo!

 

Fonte: https://guiadobitcoin.com.br/bitcoin-e-blockchain-para-leigos/

Anúncios

A segurança do bitcoin pela força computacional

 

A segurança no bitcoin é alcançada pela descentralização e pela força computacional. Este não é um vídeo técnico, mas sim uma visão geral do funcionamento da tecnologia.

Para fontes mais técnicas e detalhas, ver artigos abaixo.

Para saber mais:

Artigo “A grande inovação tecnológica do bitcoin Parte 1/2” http://www.infomoney.com.br/blogs/cam… Mining Bitcoin Wiki: https://en.bitcoin.it/wiki/Mining

Beginners’ Guide to Mining: https://99bitcoins.com/beginners-guid…

Bitcoin Mining Explained: https://chrispacia.wordpress.com/2013…

Everything you need to know about BTC mining: https://www.bitcoinmining.com/

How the bitcoin protocol actually works: http://www.michaelnielsen.org/ddi/how…

“Bitcoin – a Moeda na Era Digital”, livro publicado pelo Instituto Mises Brasil em 2014. http://www.mises.org.br/Ebook.aspx?id=99

Blog “Moeda na Era Digital” no portal InfoMoney http://www.infomoney.com.br/blogs/cam…

Está pensando em usar ou comprar bitcoin? Leia aqui antes: http://www.infomoney.com.br/blogs/cam…

Apoie este canal! Bitcoin: 1C6qa2DctPUcyAasDkgdBTJjhgpXaVjcUE

Contatos: Email: ulrich@mises.org.br

Facebook: https://www.facebook.com/fernando.ulrich

Twitter: https://twitter.com/fernandoulrich

Nós quase demos em construir cérebros artificiais

Hoje, as redes neurais artificiais estão fazendo arte, escrevendo discursos, identificando rostos e até mesmo dirigindo carros. Parece que estamos montando a onda de uma era tecnológica inovadora, mas o aumento atual das redes neurais é realmente uma espécie de renascimento.

Pode ser difícil de acreditar, mas os pesquisadores de inteligência artificial já começaram a ver a promessa nas redes neurais durante a Segunda Guerra Mundial em seus modelos matemáticos. Mas, na década de 1970, o campo estava pronto para desistir deles inteiramente.

“[T] aqui não houve resultados impressionantes até que os computadores crescessem, isto é, até os últimos 10 anos”, diz Patrick Henry Winston, professor do MIT especializado em inteligência artificial. “Continua a ser o facilitador mais importante do aprendizado profundo”.

Redes Neurais

As redes neurais de hoje são essencialmente árvores de decisão que dependem da lógica matemática que se assemelha, por falta de uma melhor analogia, ao disparo de sinapses no cérebro humano. Várias camadas de neurônios artificiais, ou nós, são utilizados para chegar à solução de um problema. À medida que os dados são alimentados através das camadas, uma computação simples ocorre em cada nó e a solução é passada para a próxima camada de neurônios para outra rodada de cálculos. O tempo todo, a matemática que ocorre em cada neurônio está sendo ligeiramente modificada pelo resultado anterior. Desta forma, uma rede neural pode se ensinar padrões em dados que combinam com uma solução desejada e otimizar o caminho para ele, como ajustar um violão. Quanto mais dados você alimenta uma rede neural, melhor fica ao ajustar seus neurônios e encontrar um padrão desejado.

Enquanto o campo emergiu nos últimos anos como um tour de force para especialistas em informática e até mesmo alguns hobbyists, a história da rede neural remonta até o início dos computadores. O primeiro mapa de uma rede neural veio em 1943 em um artigo de Warren Sturgis McCulloch e Walter Pitts. Mas o quadro de McCulloch tinha pouco a ver com a computação; Em vez disso, ele estava focado na estrutura e função do cérebro humano. O modelo de função de neurônio de McCulloch-Pitts, é claro, surgiu durante um tempo em que a tecnologia para monitorar essa atividade não existia.

McCulloch e Pitts acreditavam que cada neurônio no cérebro funcionaria como um interruptor on-off (como números binários 1 e 0), e que as combinações desses neurônios disparariam ou desativariam, produzindo decisões lógicas. Na época, havia muitas teorias concorrentes para descrever a forma como o cérebro operava, mas de acordo com um artigo de Gualtiero Piccinni da Universidade do Missouri, St. Louis, o modelo de McCulloch-Pitts fez algo que os outros não tinham: Funcionam para algo que se assemelhava a um computador simples, e isso despertou interesse em construir um cérebro artificial a partir do zero.

Sucesso inicial

O primeiro sucesso – e esse é um generoso termo – conceito de rede neural foi o algoritmo Perceptron do Frank Rosenblatt da Universidade Cornell. O Perceptron foi originalmente concebido para ser uma máquina, embora a sua primeira implementação fosse como uma classe de redes neurais que pudessem tomar decisões razoavelmente rudimentares. Eventualmente, o algoritmo foi incorporado em um computador com tamanho de geladeira chamado Mark 1, que era uma máquina de reconhecimento de imagem. Possui uma matriz de 400 fotocélulas ligadas à sua rede neural artificial, e poderia identificar uma forma quando era realizada antes do “olho”.

Poucos anos depois, em 1959, ADALINE chegou por meio de pesquisadores da Universidade de Stanford e, na época, era o maior cérebro artificial. Mas, também, só pode lidar com alguns processos por vez e foi concebido como uma demonstração de aprendizagem de máquinas em vez de ser configurado para uma tarefa específica.

Esses pequenos, mas tentadores avanços na computação alimentaram a histeria em torno da inteligência artificial na década de 1950, com a Sciencedirigindo a manchete “Human Brains Replaced?” Em uma questão de 1958 sobre redes neurais. Robôs inteligentes invadiram a ficção científica com um clipe mais rápido. Este mesmo ciclo, porém, repetiu-se com muitos processos automatizados ao longo da história. Como Adelheid Voskuhl apontou nos Andróides no Iluminismo , os autômatos executados no relógio foram construídos no século 18 como uma ameaça para a humanidade e a prova de que as máquinas governariam o mundo no devido tempo. Mas esses andróides do Iluminismo não passaram de marionetes glorificados.

Em meados do século 20, a pesquisa era lenta e não conseguia acompanhar a imaginação pública, como observa o professor de psicologia da Universidade de Toronto, Eyal Reingold. Relata que o cérebro artificial estava prestes a substituir a mente humana tão longe da realidade quanto possível.

“Infelizmente, esses sucessos anteriores causaram que as pessoas exagerassem o potencial das redes neurais, particularmente à luz da limitação na eletrônica, então disponível”, escreveu ele em uma história de inteligência artificial. “Este exagero excessivo, que decorreu do mundo acadêmico e técnico, infectou a literatura geral da época”.

O inverno está chegando

Não era o receio de uma aquisição de robôs que quase mataram a pesquisa da IA ​​no início dos anos 1970, porém; Era uma combinação de fatores. Enquanto o professor de informática do MIT, Marvin Minsky, é muitas vezes acreditado por fornecer um título de morte para Perceptrons, havia muito mais na história.

Havia o problema dos cortes no financiamento do governo. O governo estava canalizando mais dinheiro em programas de tradução que poderiam converter o russo para o inglês quase instantaneamente. As redes neurais iniciais mostraram essas habilidades com um vocabulário de 250 palavras , mas a pesquisa subseqüente foi lenta no melhor. Em meados da década de 1960, uma comissão governamental chamada Comitê Consultivo de Processamento de Linguagem Automática considerou a tradução automática “sem esperança”.

Conforme destacado por Gary Yang, um relatório de 1973 chamado Lightfoot Report também apontou que várias áreas onde a aprendizagem de máquinas poderiam ser aplicadas – como as funções de piloto automático – eram realmente melhor atendidas por métodos muito menos tecnologicamente avançados.

Nils Nilsson, professor aposentado de ciência da computação da Universidade de Stanford, trabalhou nessas primeiras gerações de inteligência artificial. Uma das maiores reivindicações da fama foi Shakey , um robô construído na década de 1960 que poderia realizar um reconhecimento de imagem rudimentar. Foi assim chamado, porque ele se perdeu quando se moveu, usando uma câmera de TV para capturar e entender o mundo ao seu redor. Poderia interpretar as entradas do computador sobre um objeto na sala e interagir com ele de determinadas formas. Também foi um sucesso inicial na rede neural, mas não foi suficiente.

Winston diz que um dos problemas era que as redes neurais não podiam ter uma abordagem abrangente. Ele diz que o documento Perceptron de Marvin Minsky mostrou que outras áreas de pesquisa de inteligência artificial eram necessárias – e que a tecnologia ainda não estava disponível.

“Os escritos de Minsky eram para uma categoria especial de Perceptrons”, diz Nilsson. “A principal razão pela qual a pesquisa sobre redes neurais se desviou na década de 60, que ninguém conseguiu descobrir uma maneira de treinar redes neurais de várias camadas”.

Para resumir: o artigo de Minsky demonstrou que, mesmo no seu mais complexo, a classe Perceptron de AI era muito binária em seus pensamentos, dificultando a habilidade da máquina de aprender a atacar tarefas mais complexas. Na opinião de Minsky, você precisava de diferentes tipos de inteligência artificial para conversar uns aos outros, o que pode ter ultrapassado as capacidades do hardware no momento.

“Minsky era tudo sobre pensar que você precisava de múltiplas representações, métodos e abordagens”, diz ele.

A rede neural começou assim a se retirar da imaginação pública, inaugurando o que foi chamado de “Inverno de Inverno”, onde o financiamento da pesquisa de inteligência artificial secou e muitas linhas de pesquisa pararam. Isso incluiu redes neurais e pesquisa de AI mudou para outras áreas de foco.

“As pessoas trabalharam em uma variedade de coisas: sistemas experientes, o uso da lógica para fazer raciocínio, reconhecimento de fala, visão computacional e robôs”, diz Nilsson. Sistemas experientes, destinados a ser vastos repositórios de conhecimento de especialistas computorizados em declarações de lógica, levaram a um segundo tipo de inverno AI quando suas habilidades também estavam superadas.

Fazendo um retorno

Mas em 1974, Paul Werbos, então estudante de doutorado de Harvard, introduziu uma maneira de melhorar as redes neurais. Ao espalhar várias redes neurais um ao outro, você poderia ter certos erros nos neurônios verificar os outros em um processo chamado backpropagation, uma maneira em que um cérebro artificial poderia “adivinhar” e procurar uma nova decisão.

Isso foi importante. As redes neurais anteriores poderiam ficar penduradas na mesma decisão. Se você colocou várias decisões em um resultado final, a máquina poderia essencialmente usar uma parte da rede neural para verificar novamente outra parte. Isso, de fato, deu uma complexidade em camadas à sua linha de pensamento. Em vez de pensar em preto e branco de entradas verdadeiras / falsas Perceptron, poderia interpretar um valor neutro para chegar a uma decisão pesando vários fatores.

Na verdade, ele iria além das declarações de lógica e na aprendizagem complexa de máquinas.

Era um documento arrojado e avançado – talvez um pouco mais ansioso. Nenhum hardware de computador no momento poderia lidar com operações tão complexas.

Nilsson também aponta para a publicação de 1986 do processamento distribuído paralelo: explorações na microestrutura da cognição de David E. Rumelhart da Universidade da Califórnia em San Diego e James L. McClelland da Universidade Carnegie Mellon. Melhorou o trabalho de Werbos mostrando um dos melhores mapas modernos da rede neural humana, criando o melhor mapa do cérebro.

Este mapa também ajudou a refinar as idéias de Werbo, mostrando como os neurônios funcionaram no cérebro e como você poderia aplicar isso às redes neurais artificiais. Você poderia resolver a incapacidade de entender as funções neutras ao ter outras redes neurais conectadas para obter uma resposta mais “refinada” neutra. Só precisava de um chute de algumas áreas: “grandes avanços no poder do computador e grandes bancos de dados que permitiram” aprendizado profundo “, como disse Nilsson. Esses avanços na computação chegaram. Hoje, os pesquisadores têm o poder de processamento e acesso a troves de dados armazenados em “a nuvem” para ensinar novas funções de algoritmos.

ADALINE e seus primos primitivos podem ter desaparecido da percepção pública, uma vez que a aprendizagem por máquinas passou a ser própria na última década. Mas essa revolução, décadas atrás, não foi dificultada por essas redes neurais. Em vez disso, eles eram de alguma forma muito primitivos e muito avançados para o seu tempo, mas seu tempo certamente chegou.

 

Sistemas Operacionais de Tempo Real – Timers

Introdução

Estava desenvolvendo algumas idéias para um novo artigo técnico, quando encontrei perdida, no fundo de uma gaveta virtual, uma biblioteca de rotinas em C que desenvolvi há algum tempo. É uma preciosidade!!! Eu mesmo já utilizei essas funções em vários projetos. Estou aqui disponibilizando esse material para você.

Vou contar um pouco a história dessa biblioteca. Houve uma época em que o meu trabalho era focado em projetos de desenvolvimento de sistemas dedicados baseados em processadores da família 8051. Desenvolvemos uma célula de carga digital, um sistema de monitoramento ambiental, um mini CLP, um sistema de monitoramento e controle de um processo químico, sistema de controle de elevadores etc. Daí surgiu a ideia de elaborar funções e rotinas padronizadas, pois quase todos esses sistemas tinham alguma coisa em comum, como por exemplo teclas, displays etc. e deveriam operar em tempo real. O objetivo foi diminuir o tempo gasto para o desenvolvimento de um novo projeto. Antes de prosseguir, recomendo a leitura do artigo Sistemas Operacionais de Tempo Real – Introdução, onde são abordados alguns conceitos que serão aplicados neste artigo.

É necessário apresentar aqui alguns esclarecimentos a respeito da filosofia usada na elaboração dessas rotinas. Eu parti do princípio de que os nossos sistemas são de tempo real e que realizam periodicamente algumas funções rotineiras, tais como verificar um teclado, atualizar displays, administrar LEDs de sinalização, realizar medidas, etc. Outras ações são tomadas por demanda, ou seja, apenas quando ocorrem. Essas demandas podem ser periódicas ou assíncronas (aleatórias). Daí já reconhecemos o primeiro elemento a ser implementado no nosso Sistema Operacional: um temporizador (Timer). Para quem não sabe, os processadores tradicionais da família 8051 têm apenas 2 temporizadores, enquanto outras versões oferecem pelo menos mais um. Antes de continuar, acho interessante recordarmos a arquitetura dos microcontroladores da família MCS-51 e os modos de operação dos seus temporizadores. Na parte final desse artigo será desenvolvido um pequeno exemplo prático, cujo código poderá ser compilado e simulado.

TIMERS da família MCS-51

Para ilustrar o que será abordado aqui, vamos nos referenciar aos microcontroladores de fabricação da ATMEL, com a arquitetura baseada no 8051, cujo documento completo você pode consultar aqui: ATMEL 8051 Microcontrollers Hardware Manual. Na Figura 1 podemos observar a arquitetura interna de um microcontrolador AT89S8253, que continua sendo produzido, mostrando em destaque o bloco dos temporizadores.

Timers - Diagrama em blocos da arquitetura interna de um microcontrolador
Figura 1: Diagrama em blocos da arquitetura interna de um microcontrolador AT89S8253

 

Sem entrar nos detalhes referentes aos contadores / temporizadores Timer 0 e Timer 1 dessa família de microcontroladores, basta dizer que eles podem ser programados para funcionarem em 4 modos distintos de operação:

  • Modo 0: O temporizador é configurado como um contador de 13 bits, que pode receber um valor inicial e conta para cima. Na transição do valor limite superior 0x1FFF para  0x0000, é acionado um flag de sinalização;
  • Modo 1: Similar ao modo 0, porém é configurado o contador para 16 bits;
  • Modo 2: O temporizador é configurado como um contador de 8 bits, com um registro de 8 bits associado para recarregar o valor inicial automaticamente. Na transição, é acionado um flag;
  • Modo 3: Nesse modo de operação, o Timer 0 opera como 2 contadores distintos de 8 bits, enquanto o Timer 1 nesse modo de operação permite que se congele a contagem.

Convenções para o uso dos Timers

Para o objetivo de projetar uma biblioteca com rotinas padronizadas, foi definido que o Timer 0 seria o temporizador padrão do sistema e o Timer 1 também poderia ser usado para isso, se acaso não fosse necessário usá-lo para gerar baud-rate da comunicação serial.

O período de interrupção do temporizador deve ser o maior possível e baixo o suficiente para atender às necessidades prioritárias do sistema. Para que se entenda o motivo disso, observe o seguinte exemplo:

Suponhamos que:

  • Um microcontrolador que, por restrições de sua arquitetura e do oscilador (clock) utilizado, possa executar no máximo 10.000 instruções por segundo;
  • Uma rotina de interrupção provocada pelo temporizador execute 20 instruções na média a cada interrupção.

Se numa hipótese absurda o temporizador for dimensionado para gerar 500 interrupções por segundo, a rotina de interrupção vai consumir todo o tempo disponível para executar as instruções do microcontrolador (500 x 20 = 10.000)! Se por exemplo esse número puder cair para 50 interrupções por segundo, sem prejudicar a operação do sistema, a rotina de interrupção vai consumir apenas 10% do total disponível (1.000), deixando os outros 90% para as demais atividades do microprocessador.

A compreensão do que foi ilustrado nesse exemplo é fundamental. As rotinas que são executadas com maior frequência devem ser otimizadas para serem executadas no menor tempo possível e na menor frequência possível também. Voltando ao exemplo das 500 interrupções, se acaso a rotina de interrupção executasse apenas 18 instruções ao invés das 20, já sobrariam 1.000 instruções por segundo que poderiam ser executadas por outras atividades. Em muitos casos isso é suficiente. Note que para esse exemplo em particular, só analisamos uma das soluções possíveis para viabilizar a operação do sistema. Poderia-se também lançar mão de outros recursos, como por exemplo aumentar a frequência do oscilador do microcontrolador.

Assim a frequência da interrupção do nosso timer deve ser dimensionada de modo que:

  • A função que deverá ser executada com maior frequência possa ser atendida pelas interrupções do timer no menor tempo necessário para isso (e maior possível), definindo assim as especificações do timer de referência do sistema;
  • Outras temporizações mais lentas sejam realizadas como múltiplos da interrupção do timer e implementadas por meio de temporizadores virtuais de software.

Um temporizador virtual de software é uma estrutura no programa em que a cada temporizador é associado um valor inicial, que se traduz num número inteiro de interrupções do Timer 0, e um flag de sinalização. A cada interrupção do Timer 0, o temporizador de software é decrementado e testado se zero. Se for zero, é ligado o flag para avisar que a contagem de software foi terminada e o temporizador é reinicializado para o seu valor inicial. O tratamento do final de contagem é realizado no programa principal, testando-se o flag e reinicializando-o depois.

O timer de referência deverá funcionar no modo 2 de operação. Observe que a programação do Timer 0 depende da frequência de clock do microcontrolador, do fator de divisão do clock, que nas CPUs tradicionais do MCS-51 é de 12 vezes, e da frequência requerida de interrupção. Um último limitante é que o valor inicial do Timer nessa configuração é de no máximo 255 (8 bits). Na biblioteca também foi desenvolvido um padrão para a programação do Timer 1, especialmente se não for usado para gerar baud-rate.

Detalhes da Biblioteca em C

O código em C a seguir foi desenvolvido para o compilador KEIL C51 μVision, na versão de avaliação. Se você quiser testar o programa exemplo que desenvolveremos no final deste artigo, recomendo que você baixe e instale esse programa.  O arquivo de biblioteca com os trechos de código em C para a utilização dos timers de forma padronizada está dividido em segmentos. O primeiro segmento define uma série de constantes, que podem ser ajustadas conforme as especificações do projeto. Veja o trecho do código a seguir.

Nesse código há alguns parâmetros que precisam ser alterados, conforme o projeto:

  • #define   FREQUENCIA_DO_CLOCK_DA_CPU 12.0e+6 // Hz —->  12 MHz, por exemplo.

Inicializar essa constante com o valor do clock do seu microcontrolador.

  • #define   FATOR_DE_ESCALA_CLOCK_TIMER    12.0f     // Divide o clock por 12

Valor do pre-scaler.

  • #define   FREQUENCIA_DE_INTERRUPCAO_TIMER_0 5e+3  // Hz —- > 5 kHz, por exemplo.

Define a frequência da interrupção do timer.

São apenas esses três parâmetros que devem ser inicializados. Não é necessário alterar outras partes do código!

O segundo segmento da biblioteca refere-se às inicializações dos timers, conforme o modo de operação, e os comandos para iniciar a operação do temporizador. Observe que nesse segmento é mostrada a rotina principal (void main(void)) e indicado onde devem ser inseridos os trechos do código.

O terceiro segmento mostra como são definidas as rotinas de interrupção.

EXEMPLO

A seguir vamos desenvolver o nosso programa de exemplo. Nesse programa, será programado o Timer 0 no modo 2 de operação, com o microcontrolador operando com um clock de 4 MHz e uma frequência de interrupção de 1,5 kHz. Confira o código no quadro abaixo.

Se você quiser simular o programa exemplo acima e explorá-lo um pouco mais, siga os seguintes passos:

  • Instale o KEIL C51 μVision;
  • Baixe o arquivo Testa_Timer.zip;
  • Instale os arquivos de Testa_Timer.zip num diretório para testes;
  • Navegue até o diretório de testes e acione o arquivo Testa_Timer.uvproj (2 “clickes”)  (Figura 2).

Timers - Arquivos no diretório de teste
Figura 2: Arquivos no diretório de teste

Nesse instante deverá abrir o programa Keil e a tela deverá ser a retratada na Figura 3. Esse painel permite navegar no código em C, editá-lo e compilá-lo. Não é necessário fazer isso para realizar a simulação, mas você poderá posteriormente alterar alguns parâmetros do código e testar o programa com as novas alterações.

Timers - Programa Keil pronto com o programa exemplo carregado
Figura 3: Programa Keil pronto com o programa exemplo carregado

A seguir coloque o programa no modo de Debug (Figura 4, Figura 5 e Figura 6) para que se possa iniciar a simulação.

timers - Selecionando o modo Debug do programa
Figura 4: Selecionando o modo Debug do programa

Antes de entrar no modo de depuração, aparece na tela a mensagem da Figura 4. “Clicke” no  “OK” para continuar.

Timers - Aviso de que no modo de avaliação, o código fica limitado a 2K
Figura 5: Aviso de que no modo de avaliação, o código fica limitado a 2K

timers - Modo Debug de operação
Figura 6: Modo Debug de operação

 

Observe que já estão destacados os painéis de monitoramento do Timer 0 e do Port 3, cujo bit 1 deverá ser alternado a cada término de contagem do temporizador de software. As duas variáveis principais (bFlagTimerDeSoftware e nTimerDeSoftware) poderão ser monitoradas na janela Watch 1 durante a simulação.

É possível utilizar as teclas de função F11 para executar o programa passo a passo ou F5 entrar em execução. Recomendo que você inicie a simulação utilizando o passo  a passo para poder observar detalhadamente como que funciona o mecanismo de operação desse programa.

Resumo

Neste artigo técnico foram apresentados alguns conceitos relativos à utilização de temporizadores de hardware de um microcontrolador associados a temporizadores de software para a implementação de arquiteturas de software típicas de  sistemas operacionais de tempo real. Também foi apresentada e explicada uma biblioteca padronizada para a utilização dos timers de microcontroladores da família MCS-51, codificada em C, para ser compilada no programa da Keil. Depois foi desenvolvido um programa exemplo para que você possa simular o que foi apresentado e observar os detalhes dessa implementação.

Este artigo é o segundo da série de artigos que abordam algumas funções comuns em projetos de sistemas embarcados de tempo real. Confira os demais artigos (em breve).

Sistemas Operacionais de Tempo Real

Bibliotecas de funções e rotinas padronizadas em linguagem C para MCS-51

  • Timers (este artigo) – É apresentada uma biblioteca desenvolvida em linguagem C para a inicialização e o uso dos Timers do MCS-51;
  • Displays de 7 segmentos – É apresentada uma biblioteca desenvolvida em linguagem C para a inicialização e o uso em displays de 7 segmentos;
  • Teclados Matriciais – É apresentada uma biblioteca desenvolvida em linguagem C para varredura, leitura, debounce, identificação da tecla acionada e desvio para a rotina de tratamento. A forma como as rotinas foram escritas, permitem sua fácil reutilização em outros projetos;
  • Periféricos – É apresentada uma biblioteca desenvolvida em linguagem C para a inicialização e o uso de alguns periféricos, tais como conversores A/D, sensor de temperatura e memórias seriais.

Fonte: https://www.embarcados.com.br/rtos-timers/

Guia completo dos Seletores CSS3

Introdução

O Módulo das CSS3 denominado “Selectors Level 3” atingiu, em 29 de setembro de 2011, o status de Recomendação do W3C. Essa Recomendação descreve os seletores já existentes nas CSS1 e CSS2 e cria novos seletores para as CSS3.

Seletores são “padrões” ou “modelos” que casam com os elementos de uma árvore do documento e portanto podem ser usados para selecionar os nós de um documento XML. Seletores foram otimizados para serem usados com as linguagens de marcação HTML e XML.

CSS (Cascading Style Sheets) é uma linguagem para descrever a renderização de documentos HTML e XML em uma tela, em papel, em sintetizadores de voz, etc.

As CSS usam seletores para atrelar propriedades de estilização aos elementos de um documento.

Tabela de seletores

Padrão Casa com Tipo CSS
* qualquer elemento Seletor universal 2
E elementos do tipo E Seletor tipo 1
E[foo] elementos com o atributo “foo” Seletor atributo 2
E[foo=”bar”] elementos E cujo valor do atributo “foo” é exatamente igual a “bar” Seletor atributo 2
E[foo~=”bar”] elementos E cujo valor do atributo “foo” é uma lista de valores separados por espaço, um dos quais é exatamente igual a “bar” Seletor atributo 2
E[foo^=”bar”] elementos E cujo valor do atributo “foo” começa exatamente com a string “bar” Seletor atributo 3
E[foo$=”bar”] elementos E cujo valor do atributo “foo” termina exatamente com a string”bar” Seletor atributo 3
E[foo*=”bar”] elementos E cujo valor do atributo “foo” contém a substring “bar” Seletor atributo 3
E[foo|=”en”] elementos E cujo atributo “foo” tem uma lista de valores começando com “en” e seguida por um hífen Seletor atributo 2
E:root elemento E raiz do documento Pseudo-classe estrutural 3
E:nth-child(n) elemento E que é o enésimo filho do seu elemento pai Pseudo-classe estrutural 3
E:nth-last-child(n) elemento E que é o enésimo filho (contado de trás para frente) do seu elemento pai Pseudo-classe estrutural 3
E:nth-of-type(n) elemento E que é o enésimo irmão do seu tipo Pseudo-classe estrutural 3
E:nth-last-of-type(n) elemento E que é o enésimo irmão (contado de trás para frente) do seu tipo Pseudo-classe estrutural 3
E:first-child elemento E que é o primeiro filho de seu elemento pai Pseudo-classe estrutural 2
E:last-child elemento E que é o último filho de seu elemento pai Pseudo-classe estrutural 3
E:first-of-type elemento E que é o primeiro irmão de seu tipo Pseudo-classe estrutural 3
E:last-of-type elemento E que é o último irmão de seu tipo Pseudo-classe estrutural 3
E:only-child elemento E que é o único filho de seu elemento pai Pseudo-classe estrutural 3
E:only-of-type elemento E que é irmão único do seu tipo Pseudo-classe estrutural 3
E:empty elemento E que não tem elementos filhos (inclusive nós de texto) Pseudo-classe estrutural 3
E:link
E:visited
elemento E que sendo destino de um link ainda não foi visitado (:link) ou que já tenha sido visitado (:visited) Pseudo-classe link 1
E:active
E:hover
E:focus
elemento E durante determinadas ações do usuário Pseudo-classe ação do usuário 1 e 2
E:target elemento E que é o destino de um fragmento identificador de um URI Pseudo-classe :target 3
E:lang(pt-br) elemento E em um determinado idioma – “exemplo: pt-br” Pseudo-classe :lang() 2
E:enabled
E:disabled
elemento E de uma interface de usuário que está habilitado (:enabled) ou desabilitado (:disabled) Pseudo-classe estado do elemento UI 3
E:checked elemento E de uma interface de usuário que está marcado (:checked) (por exemplo: radio-button ou checkbox) Pseudo-classe estado do elemento UI 3
E::first-line primeira linha formatada do elemento E Pseudo-elemento ::first-line 1
E::first-letter primeira letra formatada do elemento E Pseudo-elemento ::first-letter 1
E::before conteúdo gerado antes do elemento E Pseudo-elemento ::before 2
E::after conteúdo gerado depois do elemento E Pseudo-elemento ::after 2
E.foo elemento E cujo valor da classe é “foo” Seletor classe 1
E#foo elemento E cujo valor do atributo ID é “foo”. Selector ID 1
E:not(seletor) elemento E que não casa com o seletor simples seletor Pseudo-classe negação 3
E F elemento F descendente do elemento E Elemento descendente 1
E > F elemento F filho do elemento E Elemento filho 2
E + F elemento F imediatamente precedido pelo elemento E Elemento irmão adjacente 2
E ~ F elemento F precedido pelo elemento E Elemento irmão geral 3

Criei versões HTML, PNG e SVG desta tabela otimizadas para impressão. Que tal imprimir a tabela e tê-la na sua mesa de trabalho para uma referência e consulta rápida?
versão HTML para impressão desta tabela (link abre em nova janela)
versão PNG para impressão desta tabela (link abre em nova janela)
versão SVG com personalização de cores para impressão desta tabela (link abre em nova janela).

Vamos estudar a seguir cada um dos seletores constantes da tabela.

Incorporamos nesta página, para cada um dos seletores estudados, com uso de IFRAME para o JSFiddle, exemplos que demonstram o efeito de estilização. Você poderá complementar seus estudos clicando o link existente no canto superior direito do IFRAME e editando os códigos dos exemplos de modo interativo.

Seletor universal

♦ Casa com qualquer elementoOs conteúdos de cada um dos elementos da marcação, ao serem renderizados em um navegador, são estilizados com regras CSS mínimas (por exemplo: cor e tipo de fonte, margens, paddings, etc.) que fazem parte de uma folha de estilos nativa do navegador e que na ordem de cascata tem a prioridade mais baixa, ou seja, qualquer declaração de estilo do autor ou usuário sobrescreve a folha de estilos nativa.

Não existe uma padronização para essa folha de estilos e cada navegador implementa sua própria folha de estilos nativa. Como consequência ocorrem inconsistências de renderização, em relação a estilização básica, entre navegadores.

Destas inconsistências a que produz maiores transtornos é a não padronização dos valores para as propriedades margin e padding.

A principal utilização do seletor universal é “zerar” essas propriedades para todos os elementos da marcação. Como consequência o autor terá que definir explicitamente para cada elemento, na sua folha de estilos, aqueles valores.

* {
  margin: 0;
  padding: 0;
  }

O seletor universal quando declarado de forma contextual pode produzir resultados interessantes. Observe os exemplos a seguir:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

Seletor tipo

♦ Casa com elementos de um determinado tipoSintaxe: E

Usado para estilizar os elementos da marcação que são de um mesmo tipo; por exemplo: elemento do tipo p(parágrafo), do tipo div, do tipo ol, do tipo strong, e assim por diante.

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

Seletores de atributo

♦ Casam com elementos cujo atributo satisfaçam determinadas condições

presença de um atributo

♦ Casa com elementos que contenham um determinado atributoSintaxe: E["foo"]

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

valor de um atributo

♦ Casa com elementos com determinado valor de atributoSintaxe: E[foo="bar"]

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

valor de um atributo pertence a uma lista de valores separados por espaço

♦ Casa com elementos cujo valor de atributo pertença a uma lista de valores separados por espaçoSintaxe: E[foo~="bar"]

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

valor de um atributo começa com string

♦ Casa com elementos cujo valor de atributo começa com uma determinada stringSintaxe: E[foo^="bar"]

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

valor de um atributo termina com string

♦ Casa com elementos cujo valor de atributo termina com uma determinada stringSintaxe: E[foo$="bar"]

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

Seletores do tipo pseudo-classe

elemento raiz

♦ Casa com o elemento raiz do documentoSintaxe: :root

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

Nesse exemplo a cor dos elementos é herdada do elemento raiz.

enésimo filho

♦ Casa com o elemento que é o enésimo filho do seu elemento paiSintaxe: E:nth-child(n)

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

enésimo filho de trás para frente

♦ Casa com o elemento que é o enésimo filho do seu elemento pai, contado de trás para frente na marcaçãoSintaxe: E:nth-last-child(n)

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

enésimo irmão do seu tipo

♦ Casa com o elemento que é o enésimo irmão (filhos do mesmo elemento pai) do seu tipoSintaxe: E:nth-of-type(n)

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

enésimo irmão do seu tipo de trás para frente

♦ Casa com o elemento que é o enésimo irmão (filhos do mesmo elemento pai) do seu tipo, contado de trás para frente na marcaçãoSintaxe: E:nth-last-of-type(n)

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

primeiro filho

♦ Casa com o elemento que é o primeiro filho do seu elemento paiSintaxe: E:first-child

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

último filho

♦ Casa com o elemento que é o último filho do seu elemento paiSintaxe: E:last-child

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

primeiro do mesmo tipo

♦ Casa com o elemento que é o primeiro irmão (filhos do mesmo elemento pai) do mesmo tipoSintaxe: E:first-of-type

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

último do mesmo tipo

♦ Casa com o elemento que é o último irmão (filhos do mesmo elemento pai) do mesmo tipoSintaxe: E:last-of-type

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

único filho

♦ Casa com o elemento que é o único filho do seu elemento paiSintaxe: E:only-child

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

único irmão

♦ Casa com o elemento que é o único irmão (filhos do mesmo elemento pai) do mesmo tipoSintaxe: E:only-of-type

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

elemento vazio

♦ Casa com o elemento que não tem filhos (inclusive filhos do tipo nós de texto)Sintaxe: E:empty

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

link

♦ Casa com o elemento que é um link não visitadoSintaxe: a:link

Exemplo:

<a href="http://maujor.com">Site do Maujor<</a>
a:link {
  color: red; 
  text-decoration: none;  
}

link visitado

♦ Casa com o elemento que é um link que já foi visitadoSintaxe: a:visited

Exemplo:

<a href="http://maujor.com">Site do Maujor<</a>
a:visited {
  color: orange; 
  text-decoration: underline;  
}

ativo

♦ Casa com o elemento que por ação do usuário foi tornado ativoSintaxe: a:active

Exemplo:

<a href="http://maujor.com">Site do Maujor<</a>
:active {
  outline: 1px solid pink;  
}

sobre

♦ Casa com o elemento que, por ação do usuário, teve um dispositivo apontador colocado sobre eleSintaxe: a:hover

Exemplo:

<a href="http://maujor.com">Site do Maujor<</a>
a:hover {
  color: green;
  background: black;  
}

foco

♦ Casa com o elemento que por ação do usuário a ele foi dado o focoSintaxe: E:focus

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

Não existe uma padronização relacionando os elementos HTML que podem receber foco. Mas, em geral são eles:

  • Elemento a
  • Elemento area com atributo href
  • Elemento input
  • Elemento select
  • Elemento textarea
  • Elemento button (não desabilitado)
  • Elemento iframe
  • Elemento a
  • Qualquer elemento com o atributo tabindex

alvo

♦ Casa com o elemento que é o alvo do fragmento identificador de um linkSintaxe: E:target

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

idioma

♦ Casa com o elemento que foi marcado em determinado idiomaSintaxe: E:lang

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

habilitado ou desabilitado

♦ Casa com o elemento da interface de usuário que seja habilitado ou desabilitadoSintaxe: E:enabled e E:disabled

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

marcado

♦ Casa com o elemento da interface de usuário que tenha sido marcadoSintaxe: E:checked

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

primeira linha

♦ Casa com a primeira linha do texto formatado de um elementoSintaxe:
E:first-line — até as CSS2.1
E::first-line — modificada peals CSS3

As CSS3 modificaram a sintaxe para esse seletor. Os navegadores antigos não suportam a nova sintaxe e o modernos suportam as duas sintaxes.

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

Notas:

1 – Esse seletor aplica-se somente a elementos nível de bloco

2 – Somente às propriedades listadas a seguir podem ser estilizadas por esse seletor

  • propriedades para fontes
  • propriedades para cores
  • propriedades para background
  • word-spacing
  • letter-spacing
  • text-decoration
  • vertical-align
  • text-transform
  • text-shadow
  • line-height
  • clear

primeira letra

♦ Casa com a primeira letra do texto formatado de um elementoSintaxe:
E:first-letter — até as CSS2.1
E::first-letter — modificada pelas CSS3

As CSS3 modificaram a sintaxe para esse seletor. Os navegadores antigos não suportam a nova sintaxe e o modernos suportam as duas sintaxes.

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

Notas:

1 – Esse seletor aplica-se somente a elementos nível de bloco

2 – Somente às propriedades listadas a seguir podem ser estilizadas por esse seletor

  • propriedades para fontes
  • propriedades para cores
  • propriedades para background
  • propriedades para margens
  • propriedades para padding
  • propriedades para bordas
  • text-decoration
  • vertical-align (para elementos não flutuados)
  • text-transform
  • text-shadow
  • line-height
  • float
  • clear

conteúdo antes

♦ Casa com o conteúdo gerado antes de um elementoSintaxe: E::before

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

conteúdo depois

♦ Casa com o conteúdo gerado depois de um elementoSintaxe: E:after

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

negação

♦ Casa com o elemento que não casa com determinado seletor simples seletorSintaxe: E:not(seletor)

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

Seletor classe

♦ Casa com o elemento que tem determinado valor para o atributo classeSintaxe: E.foo

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

Seletor ID

♦ Casa com o elemento que tem determinado valor para o atributo idSintaxe: E#foo

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

Seletor descendente

♦ Casa com o elemento que descende de determinado elementoSintaxe: E F

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

Seletor filho

♦ Casa com o elemento filho de determinado elementoSintaxe: E>F

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

Seletor que imediatamente sucede

♦ Casa com o elemento irmão que imediatamente segue-se a determinado elementoSintaxe: E+F

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

Seletor que sucede

♦ Casa com o elemento irmão que segue-se a determinado elementoSintaxe: E~F

Exemplo:

Ver no jsFiddle um exemplo interativo (abre em nova janela)

O IE outra vez! 😦

Os seletores CSS3 são suportados pelos navegadores modernos. Para servir os seletores das CSS3 aos navegadores Internet Explorer 6 até 8 use uma pequena biblioteca JavaScript (4K) chamada Selectivizr.

Basta adicionar o seguinte código na seção head do documento:

<script type="text/javascript" src="[JS library]"></script>
<!--[if (gte IE 6)&(lte IE 8)]>
  http://selectivizr.js
  <noscript><link rel="stylesheet" href="[fallback css]" /></noscript>
<![endif]-->

Boa sorte com os poderosos seletores das CSS!

Procedimento de gatilho PL/pgSQL para registrar inserção e atualização

O gatilho deste exemplo garante que quando é inserida ou atualizada uma linha na tabela, fica sempre registrado nesta linha o usuário que efetuou a inserção ou a atualização, e quando isto ocorreu. Porém, diferentemente do gatilho anterior, a criação e a atualização da linha são registradas em colunas diferentes. Além disso, o gatilho verifica se é fornecido o nome do empregado, e se o valor do salário é um número positivo. [1]

CREATE TABLE emp (
    nome_emp       text,
    salario        integer,
    usu_cria       text,        -- Usuário que criou a linha
    data_cria      timestamp,   -- Data da criação da linha
    usu_atu        text,        -- Usuário que fez a atualização
    data_atu       timestamp    -- Data da atualização
);

CREATE FUNCTION emp_gatilho() RETURNS trigger AS $emp_gatilho$
    BEGIN
        -- Verificar se foi fornecido o nome do empregado
        IF NEW.nome_emp IS NULL THEN
            RAISE EXCEPTION 'O nome do empregado não pode ser nulo';
        END IF;
        IF NEW.salario IS NULL THEN
            RAISE EXCEPTION '% não pode ter um salário nulo', NEW.nome_emp;
        END IF;

        -- Quem paga para trabalhar?
        IF NEW.salario < 0 THEN
            RAISE EXCEPTION '% não pode ter um salário negativo', NEW.nome_emp;
        END IF;

        -- Registrar quem criou a linha e quando
        IF (TG_OP = 'INSERT') THEN
            NEW.data_cria := current_timestamp;
            NEW.usu_cria  := current_user;
        -- Registrar quem alterou a linha e quando
        ELSIF (TG_OP = 'UPDATE') THEN
            NEW.data_atu := current_timestamp;
            NEW.usu_atu  := current_user;
        END IF;
        RETURN NEW;
    END;
$emp_gatilho$ LANGUAGE plpgsql;

CREATE TRIGGER emp_gatilho BEFORE INSERT OR UPDATE ON emp
    FOR EACH ROW EXECUTE PROCEDURE emp_gatilho();

INSERT INTO emp (nome_emp, salario) VALUES ('João',1000);
INSERT INTO emp (nome_emp, salario) VALUES ('José',1500);
INSERT INTO emp (nome_emp, salario) VALUES ('Maria',250);
UPDATE emp SET salario = 2500 WHERE nome_emp = 'Maria';

SELECT * FROM emp;

 nome_emp | salario | usu_cria |         data_cria          | usu_atu |          data_atu
----------+---------+----------+----------------------------+---------+----------------------------
 João     |    1000 | folha    | 2005-11-25 08:11:40.63868  |         |
 José     |    1500 | folha    | 2005-11-25 08:11:40.674356 |         |
 Maria    |    2500 | folha    | 2005-11-25 08:11:40.679592 | folha   | 2005-11-25 08:11:40.682394
(3 linhas)

Programação, Robótica e Música Para Baixinhos

Exemplo de ensino da programação e robótica em sala de aula. Evidentemente que o primeiro protótipo lhe dará um trabalhão para fazer, porém depois de pronto, você possui matéria para meio ano letivo, nesse pequeno e encantador brinquedinho Cover. A didática fica por sua conta. Quem tiver o interesse em desenvolver esse projeto com Raspberry PI + Arduino Mega + Arduino Nano, estamos aí…

Não esqueça, o Youtube é uma rede Social.

CONTROLANDO ARDUINO COM APLICAÇÕES EM DELPHI

Uma dica para quem quiser obter comunicação entre arduino e o delphi, para desenvolver interfaces que possibilita controlar o arduino através dodelphi, desenvolver aplicações para projetos de automação e outros projetos. Para conseguir esta comunicação com o delphi será necessário ainstalação do componente TComPort, pois é este componente que lhe dará todo suporte para que você consiga obter a comunicação quanto ao envioe o recebimento de dados com arduino.Para instalar o componente TComPort, é preciso fazer o download do componente no LINK: http://www.cuin.com.br/wp-content/uploads/2013/05/COMPONENTE.rar 
Instalando o componente utilizarei a versão Delphi 7:1º Passo:
Depois de baixar o componente, salve ele em uma pasta de preferencia a pasta que você utiliza pra salvar outros componentes.
2º Passo:
 Abra o delphi é necessário encerrar as aplicações abertas para isto clique em FILE e clique em CLOSE ALL

IBM libera seu processador quântico para testes pela nuvem

A IBM anunciou hoje que permitirá que pessoas e instituições testem o seu processador quântico por meio de seus serviços de nuvem, sem nenhum tipo de cobrança. A iniciativa, chamada de IBM Quantum Experience, tem o objetivo de ajudar a divulgar as possibilidades da computação quântica.

De acordo com a empresa, instituições de ensino, pesquisa e outras empresas poderão acessar um processador quântico da IBM. O processador, mostrado acima, poderá ser acionado por meio de qualquer computador ou dispositivo móvel. Os dispositivos enviarão os dados e cálculos desejados para o processador quântico da IBM pela internet, e o computador então devolverá os resultados.

Além de realizar cálculos e executar algoritmos, a plataforma de computação quântica na nuvem da IBM também oferecerá tutoriais e simulações que mostram o que seria possível de se realizar com essa tecnologia. A página do projeto pode ser acessada por meio deste link.

O processador

O processador da IBM utiliza cinco qubits – unidades básicas de processamento de informação no nível quântico – para realizar os cálculos. Por utilizar materiais supercondutores e por ser muito frágil, o processador precisa ser refrigerado a -272,778ºC para funcionar.

Nos computadores tradicionais, cada bit pode ter o valor de 1 ou 0. Os qubits, por sua vez, podem assumir os valores 1, 0 ou os dois ao mesmo tempo, numa condição chamada de “superposição” – um dos pilares fundamentais da mecânica quântica. Por esse motivo, eles conseguem realizar cálculos de maneira muito mais rápida do que os processadores tradicionais.

processador-quantico

Ele utiliza uma tecnologia desenvolvida pela própria IBM para detectar erros de cálculo realizados pelo processador quântico. Segundo a empresa, a arquitetura utilizada nele pode ser eventualmente aumentada para chegar a 50 a 100 qubits. Um processador quântico de 50 qubits seria mais potente que o maior supercomputador disponível atualmente.

A IBM acredita que a computação quântica pode ser a próxima revolução no mundo da tecnologia, por conta da falência cada vez mais aparente da Lei de Moore. Gigantes da tecnologia e da ciência, como o Google e a NASA, também têm investido nesse ramo, e mesmo organizações supranacionais, como a União Europeia, investem em pesquisa nessa área. Outras empresas também apostam no uso de neurônios para criar computadores exponencialmente mais potentes.

Fonte: http://olhardigital.uol.com.br/pro/noticia/ibm-libera-seu-processador-quantico-para-testes-pela-nuvem/57974

The CIPRES Science Gateway V. 3.3

arvore-da-vida

The CIPRES Science Gateway V. 3.3 é um recurso público para a inferência de grandes árvores filogenéticas. Ele é projetado para fornecer à todos os pesquisadores com acesso a NSF XSEDE, grandes recursos computacionais através de uma interface simples navegador. Agora também é possível acessar esses mesmos recursos programaticamente com a CIPRES REST API .

Códigos paralelos de desempenho elevados para o Grande Árvore Inferência e alinhamento de sequências em XSEDE:
RAxML ; MrBayes ; BEAST ; BEAST2 ; Garli ; mafftDPPDIV ; FastTree, jModelTest2 e Migrate-N . Se você precisa de acesso a PhyloBayes , por favor consulte.

Códigos seriais para Tree Inference:
PAUP * (Inferência por Parcimônia); Poy  (alinhamento e inferência);

Códigos de série para Sequence Alignment:
ClustalW ; Contralign ; MUSCULARES ; PROBCONS ; PROBALIGN

Códigos paralelos atualmente suportados pela CIPRES Cience Gateway

Código Versão Língua Compilador Computador Cores
cobrado
biblioteca MPI enfiando outro Software
FERA 1.8.3 Java Cometa 2-48 Java BEAGLE 2.1
BEAST2 2.3.2 Java Cometa 1-3 Java BEAGLE 2.1
DPPDiv 1.0 C ++ GNU Gordon 16 pthreads
FastTree 2.1.8 C Intel Cometa 2 OpenMP
Garli 2.0.1 C ++ Intel Cometa 1 a 24 OpenMPI NCL 2.1.18
jModelTest2 2.1.6 Java Gordon 8 Java PhyML 20120412
mafft 7.187 C Intel Gordon 8 pthreads
MrBayes 3.2.6 C Intel Gordon 8 ou 16 mvapich2 BEAGLE 2.1
Migre-N 3.6.11 C Intel Cometa 1-72 mvapich2
PhyloBayes 1.5a C ++ Intel Gordon 64 mvapich2
RAxML 8.2.8 C Intel Cometa 12, 24, ou 48 OpenMPI pthreads

 

CLIQUE AQUI E DESCUBRA

Mais de 600GB de material para estudo em TI: Cursos, vídeo aulas, livros, apostilas de todas as variantes da Tecnologia da informação:

 60 GB em vídeos aulas de Java 16 DVDS – Senha = pr0mp7.torrent

Tamanho:153 KB
https://mega.co.nz/#!JRgjRLBT!nNg8JO31WWskPXH96xn1efu9mZqfgM%20jVZo24v6CAiLg

Livro Python para Pentester e Hackers

https://mega.nz/#!atQHACib!jff1wMGqCDMq1s8CjGWcbLDAcgol53DXvWYrwehV6tE

Curso de PHP

https://mega.nz/#F!WJVmQI4K!oosRA55mOWFMGR5qu9ssJg

Curso DreamWeaver

https://mega.nz/#F!AUhkiSpK!HlSxR0lexLecXjCowGG3AQ

Curso de Redes

https://mega.co.nz/#F!hZxDHLIZ!Pw8xfRmJirbL9Jvvip_iKw

Segurança em Redes

https://mega.co.nz/#F!cdQWjA5S!cX1sn4-sDpl1iWTH2b8-8w

Banco de Dados

https://mega.co.nz/#F!4R4ywJYb!-QLSTcDQ7GyhLeauC9HOlA

Curso de Eletrônica

https://mega.co.nz/#F!EYplFZRJ!Hd3g53t4SWuZ_ocF1fGLaw

Curso de JOOMLA completo

https://mega.co.nz/#F!kAohEChQ!C0XDspJDpw7tVxAgZizcaw

Curso de Linux

https://mega.co.nz/#F!YNI3kS5R!VsbYhu0sYIidqlKwwnH14Q

Curso Hardware

https://mega.co.nz/#F!EBAUCBDC!M2L3z07ypj05HtAQSeXkGA

Mega pacote de cursos Alura

https://mega.nz/#!FhxXwK7K!-Kzt-IDBs-rhVWC1_DgaULd7vSkZG7dWULCi_99kiOY

Curso Wireless Hacking

https://mega.co.nz/#F!AFJm2TLK!I6f4pZSX2ltoGBs0b1ztsQ

Curso WordPress

https://mega.co.nz/#F!cBIUBDTZ!Qtx1ahx-YeXUPdzIghwatA

Engenharia de software

https://mega.co.nz/#F!gUAmjbpD!BW7cylJHD_rcO1rryJ1sVQ

Hacking

https://mega.co.nz/#F!ER53kboI!H2RKhe5oMegv0APK2cQoFQ

https://mega.co.nz/#F!9QhWHbTI!oarMp7t3tzyY_yu08KHoEQ

Hardware

https://mega.co.nz/#F!oIZW3AzQ!LqcZV5fNLLmsxKfXAl6EtA

Introdução aos Sistemas Operacionais

https://mega.co.nz/#F!oZpVgbTR!MnX35yBQTexHPm4J8nIP2A

Linux

https://mega.co.nz/#F!YNg3xYhY!KQxsOV5rOF4ZhZm5LaiTwQ

Linux Essentials

https://mega.co.nz/#F!sBZhXDAI!NCWJslFznUXBaymdg_kmuA

Lógica de Programação Usando Python

https://mega.co.nz/#F!QAZ31aYY!JtCs0a5who41VK3jNsBa4Q

OYS pentest – Curso Teste de Invasão em Redes e Sistemas

https://mega.co.nz/#F!dVQkDTIQ!MLNKb5ZELHuIarpqHA0HxQ

Programação WEB

https://mega.co.nz/#F!AQQU3LYI!MIYAsxFZtfFTxpIqfHfIBg

Redes

https://mega.co.nz/#F!NMh1SZQC!5CKtEXGJy2JrIafPhvUuew

Segurança

https://mega.co.nz/#F!MN402QIb!_S4Jg-opFAFQVtl3lR4yJQ

Sistemas Operacionais

https://mega.co.nz/#F!JJAVwQAC!FB-jqhynRl_3CUuNzt7oMw

Software Livre

https://mega.co.nz/#F!EMgUkKxI!Wmv2SRC5bQNiLaZdbNBa9w

Teste de Invasão em Redes Sem Fio

https://mega.co.nz/#F!AUQwgIpa!NFW83TBeph3-7A7-LZqy4Q

Apostila HTML CSS

https://mega.co.nz/#!8FpXjbKB!11EMXK2wdfH3OC5BseR0PMbT9MYSGO%20tMtJrfiv5umEE

Artigo – wireshark

https://mega.co.nz/#!pc43VIpR!qy50wLU0yM7TsaeJtNu7RdaFw88BId%20VmDxCqd_E7ouQ

Curso Android Básico

https://mega.co.nz/#!pRAglZqB!hxJ9kG6dvUVukuT5tKQFMzf7_2jKdx%20V4SjM-IFzl2ns

Curso Banco de dados SQL e Modelagem

https://mega.co.nz/#!QYZSlCLB!FudRrApaiBV1oshkcHo2Rm38KeKSk1%20i_WN_0G84Q41M

Curso completo de Python

https://mega.co.nz/#!pEwA1IBL!REq1z_rnrc-ttqhEI-aGnxHcxc__0x%20gix5F98CwCkKI

Curso Linux

https://mega.co.nz/#!JIxVgYTZ!2aVR4SMtttlGoaEbTl7NGXa8n_VuhE%20K9XzjrlchSqss

Curso ipv6

https://mega.co.nz/#!xd50wAjA!sXt5m6tdZkZ_0ppNw7RKAw9gWgNYsM%20qVR12tr9FoTvM

Hackeando Mentes

https://mega.co.nz/#!kIBzmYAQ!VEYe_yI1Q6xBBsq_m5yvv_eIG3DH3n%20Xbp2AKkqLly88

Hacker inside

https://mega.co.nz/#!9ZgSyCCY!sBTV9Mva-fCYw5QKF0TkJfolcDsuox%20KqadjDqrjQTIM

Kevinmitnick a arte de enganar

https://mega.co.nz/#!INJglDRQ!H1KGBLTP9pEWtfZrp5VAbspu0Uo_Me%20_hkvtNh4B3Dm0

Banco de dados

https://mega.nz/#F!edRGmCIC!RS7TIjy7Krd4blcpLk2_hw

Computação Forense

https://mega.nz/#F!LVZgyKxT!0UEl9uphWKK5XN2iHo2ZTg

Curso inglês

https://mega.nz/#F!rMQW2CiD!nUNJvZ1nIeRHBMx33Vw8oQ

DeepWeb

https://mega.nz/#F!SdACSJSL!ck9c2S2FvjdI-L1ji-8JkQ

Edição de imagens

https://mega.nz/#F!vFIGFBpI!eRnEOpNziIS_mZx4IAIUsg

Engenharia de software

https://mega.nz/#F!ScwiGDhY!mFZz6mdkPMGVs5_6ZPOQeQ

Hacking

https://mega.nz/#F!vVoUhSrY!CCRwM3BC7U31BaAFZHl5SQ

Introdução a sistemas operacionais

https://mega.nz/#F!3doigIaC!pbDI81QC_3K2sD-Y08i1_g

Microsoft office

https://mega.nz/#F!KE4h2KQJ!ARugbDhPAqm9WWet6R606g

Normas para a apresentação de trabalhos acadêmicos

https://mega.nz/#F!2YpWWYrQ!njzFN2wdEjcL-n48ouCwvA

Programação WEB

https://mega.nz/#F!Lc4jwILR!YjIOrB8spSKjbwHmNvP8hQ

Redes

https://mega.nz/#F!vdIXgCRB!LpBx2GGbuthGu7FLHL5CsA

Segurança

https://mega.nz/#F!bFgHiBZB!XHC6bDoVYO3JEMJzf3pPmg

Sistemas operacionais

https://mega.nz/#F!fBxDULYK!g6jOZV3cjXwLYzuWhqCUnA

Software Livre

https://mega.nz/#F!HFABDDgQ!eH-cL2wdBu5y_fbY8yV78A

Teoria da computação

https://mega.nz/#F!rRwjTSiC!QOCkako5vL8sIarKYrZHPA

Vídeo aulas

https://mega.nz/#F!iJgkhDRI!LcvTfLA5rRUe1fwdqa1BUA

São tantos cursos que não dá nem pra mencionar aqui do que eles tratam, mas tem coisa muito boa lá, e grande parte deles são bem atuais, tratando sobre Web, Deepweb, Programação, Pentest, Hacker, Linux. Office, Idiomas, e muitos mais.

+BONUS DE MAIS 380GB em cursos ainda não catalogados:

https://mega.co.nz/#F!98cg2TSR!1q1OctEo3sOq25J11JAbOg

https://mega.nz/#F!V55BFDbD!3cBs3zMuk168LXfhfRmm-g
https://mega.nz/#F!wVsCjS7A!K7jrAMW6b7RX_AC6TT3msA!tZcAXCrK
https://mega.nz/#F!mIcTSRgJ!or6uaG2MJdh4jEKuHPYo_g!SAEDHBbB
https://mega.nz/#F!wVsCjS7A!K7jrAMW6b7RX_AC6TT3msA!ARcBlRhZ
https://mega.nz/#F!WJVmQI4K!oosRA55mOWFMGR5qu9ssJg
https://mega.nz/#F!wVsCjS7A!K7jrAMW6b7RX_AC6TT3msA
https://mega.nz/#F!WcBzgZhK!pJ1WsYkq8Evo1EhJi5oiJA
https://mega.nz/#F!mBB1BSrJ!RPojuKs757rJAIk-hVo4vw

https://mega.nz/#F!khhRAbwa!W5xZdG5Yat_y10Em_rmCng

https://mega.nz/#F!AE9GlDRT!mQQ1laUDxLw52-q1DljDsg

https://mega.nz/#F!CV9WFJYK!cjNuwXYg5wm6rc0YZTqaIg

https://mega.nz/#F!YF12iJ6B!933zM4O_EAxQWR16jC7I3Q

https://mega.nz/#F!ml8xGDYT!8LXsPyDMvQj8jWaM1k4rYQ

https://mega.nz/#F!tsNijbTR!Qj–39YrI4RsIwu6NTrfTQ

http://suporteninja.com/mais-de-300gb-de-cursos-em-ti-para-download-no-mega/

( Na verdade tem mais de 600GB de conteúdo)

Projeto Valkyrie

Você pode usá-lo para automação residencial, bem como controlar dispositivos como braço robo, robôs etc. Valkyrie está ligado à IOT usando Wi-Fi, BLE, Bluetooth clássico, UHF RF Transceiver e XBee, usando o protocolo universal chamado V-API. Este é Valkyrie o caminho futuro do gesto e voz controle.

Características do projeto Valkyrie:

  • processamento de movimento em tempo real inovadora
  • serviço de controle de voz
  • detecção de controle por gestos inteligentes
  • aplicações para smartphones
  • funcionalidade de Bem-Estar
  • API aberta para desenvolvedores
  • Várias interfaces de comunicação

Luva: Projeto Valkyrie é destinado a completar o desafio “SpaceGlove”. Para os 2 dias que trabalharam nesse projeto nós fizemos uma luva de couro e material elástico que é confortável para o uso diário e trabalha cerca de 70 horas em modo de transmissão de energia integral.

Com essa luva, fizemos experiências para controlar muitos dos dispositivos domésticos padrão (lâmpadas, luzes, aquecedor de fã, tiras de luz LED, TV, caixa de configuração) com gestos baseados tais como slide, de cima para baixo, para baixo-up etc Depois que fizemos um serviço que está transmitindo dados a partir da luva a um iPhone, e nós temos modificado a base de dados gesto, e acrescentou gestos personalizados. Com precisão de 10% que têm distinguido com sucesso 16 gestos diferentes e adicionou suporte para mais de 60.

Centro de controle: . Para controlar muitas interfaces precisamos de um centro de controle que está repetindo sinais recebidos a partir de qualquer das interfaces de comunicação e enviá-lo para as outras interfaces
As seguintes interfaces são suportados:

  • Wi-fi
  • Bluetooth Low Energy
  • Classi Bluetooth
  • XBee (ZigBee)
  • 433 MHz transceptor de rádio, e
  • comunicação USB

 Nós integramos muitas bibliotecas e de comunicação único e universal e implementou-lo em um V-API (Valkyrie API). A ideia na V-API é que é pode ser usado com qualquer tipo de dispositivos e usando o protocolo universal você pode facilmente escrever os códigos para a comunicação. O V-API é explicado em detalhes no slide 17 da documentação de hardware e firmware incluídos nos recursos.

Luva das posições dos sensores e descrições:

AccGyro

force-sensor graphic

heart-rate-sensor

As aplicações móveis: Nós desenvolvemos 2 aplicações de interface com o centro de comando (e a luva) – uma para Android e um para iOS. O aplicativo Android usa apenas o serviço de detecção de voz usando o google agora pesquisar e se o comando é reconhecido que envia a solicitação HTTP POST para o nosso serviço on-line (imp elétrica). O serviço Android está trabalhando no telefone, bem como no relógio Android. O aplicativo iOS suporta serviço feito sob encomenda Reconhecimento de voz, controle de automação residencial usando a voz ou entrada directa na aplicação, e informações da estação meteorológica. O nosso serviço de bem-estar está verificando a sua frequência cardíaca automaticamente a cada 30 minutos ou continuamente enquanto você está treinando. Ele também pode contar seus passos e detectar sua qualidade de sono. O aplicativo também pode ser usado para upload de novo firmware para a luva e para criar mais gestos de ser reconhecidos pela luva e ligá-los para executar uma variedade de ações.

iPhoneScreens

No momento, temos uma luva totalmente funcional, a aplicação iOS com todas as propriedades que precisamos, controles remotos para computadores (luva agindo como dispositivo HID), controle de telefone embora o serviço HID BLE, controle de casa inteligente com os hábitos e gestos já implementadas, controle robo braço, controle de jogo de computador, controle rover / carro gesto, controle remoto da TV inteligente e muitos mais por causa do protocolo V-API universal que pode ser usado em muitos lugares.

Q & A:

  • Não há gravidade no espaço aberto – podemos usar um transmissor magnético para determinar o ponto “zero” no espaço e usá-lo para calibrar e sentir a gravidade pseudo e velocidade angular.

  • É difícil usar a maioria dos dispositivos de comunicação GHz no espaço – É por isso que nós temos transceptores de 433 MHz  no Centro de Controle. As bandas de VHF e UHF são capazes de penetrar na atmosfera terrestre e transmitir a comunicação de baixo ruído da terra para o espaço. Isto é usado pelos radioamadores para fazer QSOs utilizando as estações espaciais internacionais como repetidor.

  • velocidade de dados de baixo se o dispositivo controlado é muito longe da terra – não há muito que possamos fazer sobre isso, então decidimos fazer macros personalizadas (por exemplo, se você está controlando braço robótico), você faz o movimento uma vez com a mão então este é enviado para o braço robótico, que memoriza o movimento e fazê-lo pelo comando. Por exemplo no vídeo temos usado este sistema para agarrar a caixa e movê-lo algumas polegadas atrás.
  • Conexão cai enquanto controla algo – Se não há nenhuma conexão para 300 ms, a operação pára até que a ligação não for retomada.
  • Carregar – estamos considerando o carregamento sem fio, porque com as novas tecnologias no carregamento sem fio é possível cobrar 800 mAh por menos de 40 min.
  • Consumo de energia – é 13 – 15 mA no modo de transmissão.
  • você pode usar dispositivos externos (como celulares com Android, Bluetooth Joystic) para controlar dispositivos periféricos Control Center – Sim, pode-V API é um protocolo universal para comunicação, todos os relatórios recebidos são repetidos para as outras interfaces de comunicação.

Imagens da luva feita durante os 2 dias do desafio Apps Space: sistema de sensor de pressão real.

IMG_2025_photoshop

 

Desenvolvimento futuro

  • Para tornar totalmente funcional Aplicativo para Android
  • Para adicionar mais sensores para a estação de controle
  • Para melhorar e tornar as bibliotecas V-API claramente legíveis para C, C ++, C #, Java, Java Script, Objective C
  • A cooperar com muitas universidades e outras instituições de ciência em todo o worlд
  • Para tornar a placa de circuito impresso flexível para a luva
  • Para desenvolver personalizados Bluetooth Serviços de Energia baixa para ser fácil de usar por desenvolvedores Android / iOS
  • Para adicionar mais documentação e estabelecer centro de suporte para suportar os desenvolvedores usando o nosso V-API
  • Para fazer algumas variações a luva por exemplo, negócios, esporte, casual e fazer o hardware para ser fácil mutável
  • Testes oficiais
  • Lançamento do projeto (Se começarmos em 2015/06/01 até o final de setembro ’15 teremos um produto)

 

https://open.nasa.gov/innovation-space/valkyrie/

Como criar UIPageViewController Usando Storyboard

We’ve covered UIPageViewController before. The original tutorial demonstrates how to create UIPageViewController using Interface Builder. To make it compatible with iOS 7 and Xcode 5, we completely rewrite the whole tutorial. In addition, we’ll use Storyboard to create UIPageViewController.

For the very first time you launch an app, you’ll probably find a series of walkthrough (or tutorial) screens to give you a brief introduction of the features. It’s a common practice to explain how the app works. In this tutorial, we’ll show you how to build a similar type of walk through screens by using UIPageViewController.

The UIPageViewController class was first introduced in iOS 5 SDK that lets developers build pages of content, where each page is managed by its own view controller. The class was further improved in iOS 6 to support the scrolling transition. With page view, users can easily navigate between multiple pages through simple gesture. The page view controller is not limited to create walkthrough screens. You can find examples of page view implementation in games like Angry Birds to show the available levels or book apps to display pages of content.

page-view-controller-nilton-felipe

The UIPageViewController is a highly configurable class. You’re allowed to define:

  • the orientation of the page views – vertical or horizontal
  • the transition style – page curl transition style or scrolling transition style
  • the location of the spine – only applicable to page curl transition style
  • the space between pages – only applicable to scrolling transition style to define the inter-page spacing

We’ll create a simple app together in order to demonstrate how UIPageViewController works. However, we’ll not demonstrate every option of UIPageViewController. We’ll just use the scrolling transition style to display a series of walkthrough screens. Don’t worry. With the basic understanding of the UIPageViewController, I believe you should be able to explore other features in the page view controller.

Let’s get started.

A Glance at the Demo App

The demo app we are going to create is very simple. It displays 4 pages of screens to give users a brief introduction to the user interface. User can navigate between pages by swiping through the screen. Whenever user taps the “Start again” button to go back to the first page of tutorial. This type of walkthrough/tutorial screens shouldn’t be new to you as they are commonly found in apps such as Snapguide and Airbnb.

page-view-controller-1-2-nilton

Creating the Project

Launch Xcode and create a new Project by using the Single View Application template. It might seem a little bit strange to select the Single View Application template as Xcode already comes with a Page-Based Application template, which contains a fully functional app based on the UIPageViewController. However, this template is a little bit complex and it will take us more time to clean-up the code of the template than to start from scratch. Needless to say, we can better grasp the concept behind the UIPageViewController when we start from scratch.

page-view-controller-1-3-nilton

Okay, let’s move on. In the next screen enter PageViewDemo as the product name and set com.appcoda in the company identifier field. Select iPhone for the Devices option. Press next and create the project.

page-view-controller-1-4-nilton

Creating Page View Controller in Storyboard

Next, select the Main.storyboard. As usual, you should find a default view controller generated by Xcode. Leave it as it is. Drag a Page View Controller from the Object Library into the storyboard. Then add another View Controller and put it in the same storyboard.

page-view-controller-1-5-nilton

For this project, the original view controller is used as the root view controller for holding the page view controller. The view controller you’ve just added will be used for displaying the page content. Throughout the article, we refer the original view controller as the root view controller and the other view controller as page content controller.

You may wonder why we just add a single view controller for 4 pages of content. Shouldn’t we use four view controllers instead of one? As you can see from the final deliverable, the walkthrough screens are very similar. It’s better to share the same view controller for different screens.

Next, assign a Storyboard ID for the page view controller and the page content controller. You can simply select the controller and set the ID under Identity Inspector. Set the Storyboard ID of the page view controller as “PageViewController” and name the ID of the page content controller as “PageContentController”. Later we’ll refer to these IDs in our code.

page-view-controller-1-6-nilton

By default, the transition style of the page view controller is set as Page Curl. The page curl style is perfect for book apps. For walkthrough screens, we prefer to use scrolling style. So change the transition style to Scroll under Attribute Inspector.

page-view-controller-1-7-nilton

We’ll design the user interface of page content view controller. Drag an image view and a label into the controller. You’re free to change the font type and size. But your view controller should be similar to the below screenshot.

page-view-controller-1-7-nilton

For the default view controller, add a “Start again” button and put it at the below of the screen.

page-view-controller-1-8-nilton

Creating View Controller Class

The next step is to create view controller class and associate it with the corresponding view controller. From the menu, select File -> New -> File … and choose the “Objective-C class” template. Name the class as PageContentViewController and make it a subclass of UIViewController.

page-view-controller-1-9

Go back to Storyboard. Select the page content view controller and set the custom class to PageContentViewController under Identify Inspector.

page-view-controller-1-10

Next, we’ll create outlets for the image view and label. Switch to the Assistant Editor and make sure the PageContentViewController.h is opened. Control and drag from the image view to the PageContentViewController.h and create an IBOutlet. Set the name as backgroundImageView for the image view. For the label, set the name of the outlet as titleLabel.

page-view-controller-1-11-nilton

After the change, the PageContentViewController.h should look like this:

Next, select the root view controller and make sure the ViewController.h is opened. Create an action for the “Start again” button and name the action as “startWalkthrough”.

page-view-controller-1-12

Okay, we’ve completed the design of user interface and created all the outlets. Let’s move onto the implementation of the view controller classes.

Implementing the Page Content View Controller

It’s very straightforward to implement the page content view controller. First, add the following properties in PageContentViewController.h:

The pageIndex stores the current page index (or page number). The view controller is designed to display an image and a title. So we create two parameters for passing the title text and image file. Next, open PageContentViewController.m and change the viewDidLoad: method:

Implementing the Page View Controller

The UIPageViewController class is classified as a container controller. The container controller is used to contain and manage multiple view controllers shown in the app, as well as, controlling the way one view controller switches to another. Here the UIPageViewController is the container controller that lets the user navigate from page to page, where each page is managed by its own view controller object. The following illustration depicts the relationship between the page view controller and the page content view controller.

page-view-controller-1-13

In order to make UIPageViewController work, we must adopt the UIPageViewControllerDataSource protocol. The data source for a page view controller is responsible for providing the content view controllers on demand. By implementing the data source protocol, we tell the page view controller what to display for each page.

In this case, we use the ViewController class as the data source for the UIPageViewController instance. Therefore it is necessary to declare the ViewController class as implementing the UIPageViewControllerDataSource protocol.

The ViewController class is also responsible to provide the data of the page content (i.e. images and titles). Open the ViewController.h. Modify the @interface declaration, add a new property to hold the UIPageViewController, as well as, properties for both images and titles:

In the ViewController.m, initialize the pageTitles and pageImages in the viewDidLoad method:

Note: You can download image files from here and add them into the Xcode project.

We have created the data model for the page content. Next, we have to implement at least two methods of the UIPageViewControllerDataSource protocol:

  • viewControllerAfterViewController – provides the view controller after the current view controller. In other words, we tell the app what to display for the next screen.
  • viewControllerBeforeViewController – provides the view controller before the current view controller. In other words, we tell the app what to display when user switches back to the previous screen.

Add the following lines of code before the end of the ViewController.m file:

The above methods are very straightforward. First, we get the current page index. Depending the method, we simply increase/decrease the index number and return the view controller to display. Of course, we have to verify if we have reached the boundaries of the pages and return nil in that case.

As you may notice, we haven’t created the viewControllerAtIndex: method. It is a helper method that is designed to create the page content view controller on demand. It takes in the index parameter and creates the corresponding page content controller.
In the ViewController.m, add the helper method:

Recalled that we have set a storyboard ID for the view controllers when designing the user interface. The ID is used as reference for creating the view controller instance. To instantiate a view controller in storyboard, you can use the instantiateViewControllerWithIdentifier: method with a specific storyboard ID.

To display a page indicator, you have to tell iOS the number of pages (i.e. dots) to display in the page view controller and which page must be selected at the beginning. Add the following two methods at the end of the ViewController.m file:

Again the above code is very straightforward. We simply tell iOS that we have the total number of pages to display in the page view controller and the first page should be selected by default.

Note: You must implement both methods in order to display the page indicator. Also the page indicator only works in scroll transition mode.

Initializing the UIPageViewController

The final step is to create and initialize the UIPageViewController. The best place to do that is in the viewDidLoad method. Open the ViewController.m file and change the method to:

Let’s see what the method does. We first create the PageViewController instance. Next we specify the data source, in this case it is the class itself. We then create the first page content controller, add it to an array of controllers and assign it to the page view controller for display.

Lastly, we change the size of the page view controller and add the page controller view to the current view.

Customize the Page Indicator

If you compile and run the app now, your app should run properly but you may find the page indicator missing. Actually the page indicator is there but the color of the dots is the same as the color of the view. So let’s change its color.

In the AppDelegate.m, add the following lines of code in the didFinishLaunchingWithOptions: method:

Compile and Run the App

And there we go, start the application and see how the UIPageViewController works. You should be able to load the page view controller by using the iPhone Simulator. Try to swipe through the screen to navigate between pages.

page-view-controller-1-14-nilton

Back to the First Page

There is still one thing left. The “Start again” is not yet implemented. When tapped, we expect the page view controller will scroll back to the first page. You can use the setViewControllers: method of the UIPageViewController to switch page. To go back to the first page of the page view controller, change the startWalkthrough: method of ViewController.m:

Run the app again. The app will bring you back to the first page when tapping the “Start again” button.

Summary

In this tutorial, we cover the basics of UIPageViewController and demonstrate how to implement the controller by using Storyboard. The UIPageViewController is a very handy class for implementing walkthrough screens in your app. That said, the usage of UIPageViewController is unlimited. You can use it to display whatever information as you like such as pages of web view. The UIPageViewController is highly configurable. This tutorial only covers the scroll transition style. But don’t you know that you can easily use the class to build a simple book app? Simply change the transition style from scroll to page curl and see what you’ll get. So don’t stop here. Try to change the available options and learn about UIPageViewController.

For your complete reference, you can download the Xcode project from here. As always, please leave us comment and share your thought.

Fonte: http://www.appcoda.com/uipageviewcontroller-storyboard-tutorial/

Chartist.js – criando gráficos responsivos com o chartist.js

Outro dia, pesquisando outras bibliotecas para criar gráficos responsivos com HTML5 e javascript, acabei encontrando esta chamada Chartist.js. Inicialmente eu confundi essa biblioteca com a Chart.JS, achava que era uma espécie de major update, mas depois percebi que era uma solução a parte, mas que também fica nem um pouco para trás em termos de funcionalidades modernas e simplicidade. Acabei criando esse post com base nos testes que fiz na ferramenta então sintam-se livres para encaminhar duvidas e testar o demo que está disponibilizado no artigo.

Bom, esse é o primeiro post de 2015 no blog, então um ótimo ano para todos.

Como de costume nos posts do blog, eu sempre crio um demo para tentarexplicar como eu entendi e aprendi a utilizar tal ferramenta. Com essa não vai ser diferente, então segue o link para baixar o demo e o repositório do GitHub.

Introdução ao Chartist.js

O Chartist.js é mais uma solução disponível para facilitar a forma com que trabalhamos com gráficos para web, utilizando HTML5 e JavaScript.

O diferencial do Chartist.js e o motivo que me fez testar a solução foi a questão estética que chama muito a atenção, com um design flat muito bem elaborado, e a simplicidade na utilização da solução, seguindo a documentação (que é tão simples e direta que chega a ser bem curta).

Além disso, os gráficos são renderizados com SVG inline, o que significa que você tem maior controle do gráfico pois as tags SVG que compõem o gráfico estão no DOM. Você pode testar essa funcionalidade visualizando a página do Chartist.js através da ferramenta para desenvolvedores do seu navegador.

Para maiores informações a respeito do Chartist.js, acesse a documentação oficial.

Como utilizar

Bom, como já citei antes, a utilização é muito simples. Primeiro precisamos adicionas os links para os arquivos que presentes nos repositórios, dentro da tag head. No demo ficou algo como:

1
2
<link rel=“stylesheet” href=“//cdn.jsdelivr.net/chartist.js/latest/chartist.min.css”>
<script src=“//cdn.jsdelivr.net/chartist.js/latest/chartist.min.js”></script>

Note que no demo eu utilizei links CDN para os arquivos da biblioteca. Se você quiser testar localmente baixe o repositório do GitHub e substitua os caminhos de apontamento para os arquivos locais, os repositórios CDN precisam de acesso a internet para carregar as funcionalidades da solução.

Após isso podemos declarar as funções para chamar o primeiro gráfico. Antes de criar um gráfico, temos que entender a metodologia de design utilizada pelo Chartist.js para abordar a reponsividade dos gráficos.

Ao invés de utilizar tamanhos fixos para a box (320×320, por exemplo), são utilizadas medidas de proporção, como 4:3, 3:2, 16:9 (famoso widescreen). Com essa técnica fica mais fácil garantir a reponsividade do gráfico em qualquer tamanho de tela.

Com isso em mente, criamos uma box onde o gráfico deve ser renderizado, conforme o exemplo abaixo:

1
<div class=“ct-chart ct-square”></div>

Utilizei a proporção ct-square, que medindo em proporção da um quadrado. Existem diversas medidas na documentação, além dessa do exemplo eu também testei a .ct-perfect-fourth que seria 4:3, e a .ct-golden-ratio.

Se você utilizar uma box com medidas fixas você não precisa declarar uma classe para proporção, basta declarar a função que de fato vai criar o gráfico na box que criamos acima. Utilizamos o seguinte código para criar o gráfico:

1
2
3
4
5
6
7
8
9
window.onload = function() {
var data = {
labels: [‘segunda’, ‘terça’, ‘quarta’, ‘quinta’, ‘sexta’],
series: [
[10, 24, 51, 3, 12]
]
};
new Chartist.Line(‘.ct-chart’, data);
};

Feito isso, e se estiver seguindo o demo, ao carregar a página deve ser apresentado um gráfico similar ao da imagem abaixo.

chartist_js_Nilton_Felipe

Se você criou o gráfico sem uma proporção, você pode utilizar as opções da API para declarar as medidas fixas. Primeiro adicionamos uma variável com as informações de medidas:

1
2
3
4
var options = {
width: 300,
height: 200
};

E depois criamos o objeto com referência a variável:

1
new Chartist.Line(‘.ct-chart’, data, options);

Na documentação oficial, na parte de informações sobre a API você tem todas as informações sobre as opções disponíveis para customização do gráfico. Com o Chartist.js você consegue customizar praticamente qualquer gráfico que você criar, ainda mais utilizando SVG inline para renderizar os gráficos.

Além deste exemplo, no demo que eu criei tem mais três testes, apresentando quatro gráficos em uma mesma página, com diferentes valores e estilos.

As opções de customização do Chartist.js vão ainda muito além, você pode animar a visualização do gráfico, criar sinalizadores para pontos cruciais, tudo isso com recursos disponíveis na própria biblioteca da solução que é toda baseada em JavaScript, mais alguns plugins disponíveis para funções especificas.

Não vou muito a fundo na ferramenta porque a intenção era apenas uma introdução, mas se você conseguiu entender como funciona a biblioteca até aqui, acredite, não vai ter problemas para criar exemplos mais avançados como estes exemplos da documentação, e este exemplo abaixo (visualize no Chrome para um resultado satisfatório).

Fonte: http://websocialdev.com/chartist-js-criando-graficos-responsivos-com-o-chartist-js/

Introdução ao Google Chart Tools

“Veja neste artigo como criar gráficos usando a biblioteca Google Chart Tools, uma biblioteca simples porém muito poderosa com a qual podemos desenhar e interagir com diversos tipos de gráficos.”

 

Sem dúvida alguma, gráficos são uma fonte importante de informação, sendo assim são imprescindíveis a boa partes dos sistemas. No decorrer do artigo vamos aprender a construir gráficos utilizando Javascript.

Gráficos oferecem certa dificuldade para sua construção em qualquer linguagem, mas para que reinventar a roda se alguém já fez isso (e muito bem feito) para nós?

Com uma rápida procura na internet encontraremos algumas bibliotecas para este propósito, mas para esse artigo vamos usar a biblioteca do Google, a Google Chart Tools, pois é tida por muitos como a melhor disponível hoje em dia por ser de uma clareza muito grande, ter uma curva de aprendizagem pequena e uma documentação muito boa.

Com ela podemos desenhar os principais tipos de gráficos, torta (pizza), barras, linhas, tabelas entre outros. Veja alguns exemplos na Figura 1.

Figura 1: Exemplos de gráficos criados com a Google Chart Tools

Figura 1: Exemplos de gráficos criados com a Google Chart Tools

 

Desenhando os Gráficos.

Vamos colocar a mão na massa, ou melhor, no código. Vamos começar com o gráfico torta (pizza), em inglês Pie.

Mas antes de mais nada precisamos incorporar a biblioteca e importar o core do Google Chart Tools. Acompanhe a Listagem 1.

Listagem 1: Incorporando biblioteca

<html>
  <head>
    https://www.google.com/jsapi
    
      google.load("visualization", "1", {packages:["corechart"]});
    
  </head>
</html>

A listagem é bastante autoexplicativa, mas por desencargo de consciência vejamos alguns comentários: na linha 3 importamos a API do Google e na linha 5 carregamos o modulo visualization do pacote corechart.

Pronto, agora sim podemos começar a brincadeira de verdade. Vamos implementar um gráfico do formato Pie com as porcentagens de qual linguagem de programação gostamos mais.

Listagem 2: Desenhando o gráfico de torta

<html>
  <head>
    https://www.google.com/jsapi
    
		//carregando modulo visualization
      google.load("visualization", "1", {packages:["corechart"]});
      
	  //função de monta e desenha o gráfico
      function drawChart() {
	//variavel com armazenamos os dados, um array de array's 
	//no qual a primeira posição são os nomes das colunas
	var data = google.visualization.arrayToDataTable([
          ['Linguagem', 'Quando gosto dela'],
          ['Java',     40],
          ['PHP',      30],
          ['Javascript',  25],
          ['C#', 5],
          
        ]);
		//opções para exibição do gráfico
        var options = {
          		title: 'Linguagens',//titulo do gráfico
		is3D: true // false para 2d e true para 3d o padrão é false
        };
		//cria novo objeto PeiChart que recebe 
		//como parâmetro uma div onde o gráfico será desenhado
        var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
		//desenha passando os dados e as opções
        chart.draw(data, options);
      }
	//metodo chamado após o carregamento
	 google.setOnLoadCallback(drawChart);
    
  </head>
  <body>
    
</body> </html>

Foram colocados comentários no meio do código para que fique mais claro de acompanhar cada passo, porém muitas outras opções podem ser usadas. Podem ser tantas que não iremos colocá-las aqui, mas haverá um link no final desse artigo onde podemos encontrar todos os detalhes sobre as mesmas.

Continuando, vamos desenhar mais três tipos de gráficos, Linhas, Barras e Tabelas.

Basicamente o que muda de um tipo de gráfico para outro no que diz respeito ao código é o formato do array de dados que passamos para ele e o objeto que é instanciado. Vejamos, por exemplo, os dos formatos Linhas e Barras que tem o formato de dados idênticos.

Listagem 3: desenhando gráficos Barras e Linhas

<html>
  <head>
    https://www.google.com/jsapi
    
      google.load("visualization", "1", {packages:["corechart"]});
      google.setOnLoadCallback(drawChart);
      function drawChart() {
	  //montando o array com os dados
        var data = google.visualization.arrayToDataTable([
          ['Ano', 'Vendas', 'Despesas'],
          ['2004',  1000,      400],
          ['2005',  1170,      460],
          ['2006',  660,       1120],
          ['2007',  1030,      540]
        ]);
		//opçoes para o gráfico barras
        var options = {
          title: 'Performance',
          vAxis: {title: 'Anos',  titleTextStyle: {color: 'red'}}//legenda vertical
        };
		//instanciando e desenhando o gráfico barras
        var barras = new google.visualization.BarChart(document.getElementById('barras'));
        barras.draw(data, options);
		//opções para o gráfico linhas
		var options1 = {
          title: 'Performance',
		  hAxis: {title: 'Anos',  titleTextStyle: {color: 'red'}}//legenda na horizontal
        };
		//instanciando e desenhando o gráfico linhas
        var linhas = new google.visualization.LineChart(document.getElementById('linhas'));
        linhas.draw(data, options1);
		
      }
    
  </head>
  <body>
    
</body> </html>

O formato do array mudou em relação ao gráfico torta, porém foi comum aos dois da Listagem 3. Agora vejamos o formato tabela que tem um modo um pouco diferente dos outros três na montagem do array.

 

Listagem 4: Desenhando a Tabela

<html>
  <head>
    https://www.google.com/jsapi
    
	  //importando o pacote table
      google.load('visualization', '1', {packages:['table']});
	  //metodo que será chamado após 
      google.setOnLoadCallback(drawTable);
      function drawTable() {
		//instanciando array do formado de tabela
        var data = new google.visualization.DataTable();
		//adicionando colunas, tipo e nome
        data.addColumn('string', 'Aluno');
        data.addColumn('number', 'Nota');
        data.addColumn('boolean', 'Aprovado');
		//adicionando linhas
        data.addRows([
          ['Allan',  {v: 10, f: '10'}, true],
          ['Douglas',   {v:8,   f: '8'},  true],
          ['Larissa', {v: 5.5, f: '5,5'}, false],
          ['Eliane',   {v: 7,  f: '7'},  true]
        ]);
		//instanciando e desenhando tabela
        var table = new google.visualization.Table(document.getElementById('table_div'));
        table.draw(data, {showRowNumber: true});
      }
    
  </head>

  <body>
    
</body> </html>

Embora diferente dos outros exemplos no que diz respeito à importação do pacote table e no tipo de objeto array para armazenar os dados, ainda fica muito fácil de entender o desenrolar do código. Uma coisa interessante é no caso da segunda coluna (‘number’, ‘Nota’) que, como vocês podem ver, é um array que tem duas posições: uma para o valor “v:10” e outra para o texto formatado.

Manipulando eventos

O que fizemos até agora foi muito bom e já nos ajuda muito, mas por que não fazermos mais? Vamos criar uma interação com os gráficos através de eventos que são disparados quando, por exemplo, clicamos sobre a linha de uma tabela.

Para realizarmos essa tarefa vamos modificar o código da Listagem 4. Iremos adicionar um listener para ficar escutando o objeto table e criar uma função para manipular o evento. Na Listagem 5 podemos ver um exemplo de manipulação do evento select.

Listagem 5: Manipulando evento select.

<html>
  <head>
    https://www.google.com/jsapi
    
	  //importando o pacote table
      google.load('visualization', '1', {packages:['table']});
	  //metodo que será chamado apos 
      google.setOnLoadCallback(drawTable);
	  
      function drawTable() {
		//instanciando array do formado de tabela
        var data = new google.visualization.DataTable();
		//adicionando colunas, tipo e nome
        data.addColumn('string', 'Aluno');
        data.addColumn('number', 'Nota');
        data.addColumn('boolean', 'Aprovado');
		//adicionando linhas
        data.addRows([
          ['Allan',  {v: 10, f: '10'}, true],
          ['Douglas',   {v:8,   f: '8'},  true],
          ['Larissa', {v: 5.5, f: '5,5'}, false],
          ['Eliane',   {v: 7,  f: '7'},  true]
        ]);
		//instanciando e desenhando tabela
        var table = new google.visualization.Table(document.getElementById('table_div'));
		//adicionando um listner que ouvirá o evento select para o objeto table 
		google.visualization.events.addListener(table,"select",function(e){
			//pega oa array de itens selecionados
			var selection = table.getSelection();
			
			//varre o array de para montar a string que será exibida
			var tam = selection.length;
			var str = "";
			for(var i = 0; i 
  </head>

  <body>
    
</body> </html>

Sobre o método getSelection, ele retorna um array dos itens selecionados (podemos selecionar mais de uma linha usando shift e control), por isso precisamos varrê-lo com o for. Porém, não podemos acessar o valor diretamente, para isso usamos o método getFormattedValue que recebe o número da linha e coluna e retorna o valor da célula.

Aqui está o link para a API oficial para mais detalhes: https://developers.google.com/chart/

Bem pessoal, vou ficando com aqui. Comentem, compartilhem, fiquem à vontade e até a próxima.

 

Fonte: http://www.devmedia.com.br/introducao-a-google-chart-tools/26453

Compilação de tutoriais sobre C#

Compilação de tutoriais em C#:

Desenvolvendo Class ou Classes com C#, ASP.NET e Visual Studio 2010 – Parte 1
http://thecodebr.blogspot.com/2010/07/desenvolvendo-class-ou-classes-com-c.html

Video Aula Tutorial – Criando MasterPage com Visual Studio ASP.NET
http://thecodebr.blogspot.com/2010/07/video-aula-mostrando-como-construir-uma.html

Criando e utlizando Code Snippets no Visual Studio
http://thecodebr.blogspot.com/2010/07/criando-e-utlizando-code-snippets-no.html

Função – Function JavaScript com C# e ClientScriptManager
http://thecodebr.blogspot.com/2010/06/funcao-function-javascript-com-c-e.html

Como converter String para numero com C#.NET
http://thecodebr.blogspot.com/2010/05/como-converter-string-para-numero-com.html

ArrayList com C#, criando e retornando valores
http://thecodebr.blogspot.com/2010/05/arraylist-com-c-criando-e-retornando.html

Saber IP do usuário com C#
http://thecodebr.blogspot.com/2010/05/saber-ip-do-usuario-com-c.html

Como enviar e-mail com Asp.Net e C#
http://thecodebr.blogspot.com/2010/05/como-enviar-e-mail-com-aspnet-e-c.html

Introdução ao LINQ to XML Parte 1 – Lendo dados
http://thecodebr.blogspot.com/2010/05/introducao-ao-linq-to-xml-parte-1-lendo.html

LINQ to XML Parte 2 – Criando XML

http://thecodebr.blogspot.com/2010/05/linq-to-xml-parte-2-criando-xml.html

C# – Concatenando strings com StringBuilder
http://thecodebr.blogspot.com/2010/05/c-concatenando-strings-com.html

C#.NET – Convertendo para MAÍUSCULAS ou minúscula uma string
http://thecodebr.blogspot.com/2010/05/cnet-convertendo-para-maiusculas-ou.html

C#.NET – Substituir Caracteres com Replace()

http://thecodebr.blogspot.com/2010/05/cnet-substituir-caracteres-com-replace.html

C#.NET – Cortar String com Substring()

http://thecodebr.blogspot.com/2010/05/cnet-cortar-string-com-substring.html

C# – Numero Randômico (Random Number)

http://thecodebr.blogspot.com/2010/04/c-numero-randomico-random-number.html

Vários exemplos rápidos de soluções de problemas em C#
http://www.ti4fun.com/

Exportando DataTable para Excel utilizando Interop
http://msmvps.com/blogs/deborahk/archive/2009/07/23/writing-data-from-a-datatable-to-excel.aspx

Exportando DataTable para Excel utilizando OleDb
http://www.codeproject.com/KB/office/excel_using_oledb.aspx

Conceitos e Exemplos Práticos de Acesso a Dados usando ADO.NET, C# com SQL Server e ASP.NET (7 partes):
http://programandodotnet.wordpress.com/tag/acesso-a-dados/

Curso Básico de SQL Server (em andamento):
http://programandodotnet.wordpress.com/category/net/sql-server/basico/

Cadastro Básico de Clientes em C# usando os conceitos de ADO.NET (3 partes):
http://programandodotnet.wordpress.com/tag/cadastro-de-clientes/

Ótimos Links de Blogs/Comunidades/Sites:
http://programandodotnet.wordpress.com/tag/links-uteis/

Cadastro de Consultório em Windows Forms, com C# e SQL Server (12 partes até o momento):
http://programandodotnet.wordpress.com/tag/consultorio

Enviando Emails com ASP.NET:
http://programandodotnet.wordpress.com/2010/05/01/enviando-emails-com-asp-net-usando-system-net-mail/

Leitor de RSS em ASP.NET:
http://programandodotnet.wordpress.com/2010/05/06/criando-um-leitor-de-rss-em-asp-net/

Leitor de Arquivos em ASP.NET:
http://programandodotnet.wordpress.com/2010/05/23/criando-um-leitor-de-arquivos-em-asp-net/

Monitorando Arquivos e Diretórios com FileSystemWatcher – Windows Form:
http://programandodotnet.wordpress.com/2010/06/04/monitorando-arquivos-e-diretorios-com-filesystemwatcher/

Usando DataSet Tipado em ASP.NET:
http://programandodotnet.wordpress.com/2010/06/13/usando-dataset-tipado-com-asp-net/

Prevenindo SQL Injection em ASP.NET:
http://programandodotnet.wordpress.com/2010/06/18/prevenindo-sql-injection-em-asp-net/

Trabalhando com Arquivos em C# (3 partes):
http://programandodotnet.wordpress.com/tag/arquivos/

Manipulando Dados no Web.Config:
http://programandodotnet.wordpress.com/2010/07/11/manipulando-o-web-config-%e2%80%93-armazenando-e-recuperando-dados/

Trabalhando com Cache:
http://programandodotnet.wordpress.com/2010/07/16/trabalhando-com-cache/

Criando um Windows Service:
http://programandodotnet.wordpress.com/2010/07/18/criando-um-windows-service/

Aplicação ASP.NET com Imagens no GridView no lugar de valores:
http://programandodotnet.wordpress.com/2010/07/22/aplicacao-asp-net-com-imagens-no-gridview-no-lugar-de-valores/

Agrupamento no GridView usando TemplateField em ASP.NET:
http://programandodotnet.wordpress.com/2010/07/27/agrupamento-no-gridview-com-templatefield/

Customizando o DataList:
http://programandodotnet.wordpress.com/2010/07/29/customizando-o-datalist/

Filtrando Dados com DataView:
http://programandodotnet.wordpress.com/2010/07/30/filtrando-dados-com-dataview/

Gerando um Executável a partir de uma aplicação em Windows Form:
http://programandodotnet.wordpress.com/2010/08/02/gerando-um-executavel-a-partir-de-um-windows-forms/

Controles ASP.NET – Menu Standard – Parte 1 (em andamento):
http://programandodotnet.wordpress.com/2010/08/09/controles-asp-net-%e2%80%93-menu-standard-%e2%80%93-parte-1/

Controles ASP.NET – Menu Standard – Parte 2 (em andamento):
http://programandodotnet.wordpress.com/2010/08/14/controles-asp-net-%e2%80%93-menu-standard-%e2%80%93-parte-2/

Controle de Login para Windows Forms:
http://www.codeproject.com/KB/miscctrl/logincontrol.aspx

Como criar uma tela de login numa aplicação Windows Forms?
http://www.marcosdellantonio.net/2007/05/30/net-como-criar-uma-tela-de-login-numa-aplicacao-windows-forms/

Troca de dados entre formulários:
http://www.codeproject.com/KB/cs/pass_data_between_forms.aspx

Trabalhando com o controle TreeView em C#:
http://www.c-sharpcorner.com/uploadfile/scottlysle/treeviewbasics04152007195731pm/treeviewbasics.aspx

Brincando com List<T> – como evitar adição de conteúdo duplicado
http://www.50minutos.com.br/blog/post/Brincando-com-List-generico-como-evitar-adicao-de-conteudo-duplicado.aspx

Brincando com List<T> – como fazer uma ordenação customizada
http://www.50minutos.com.br/blog/post/Brincando-com-List-como-fazer-uma-ordenacao-customizada.aspx

Outlook 2007: Como salvar anexos dos e-mails usando C#
http://www.50minutos.com.br/blog/post/Outlook-2007-Como-salvar-anexos-dos-e-mails-usando-C.aspx

Visual Studio 2010: o que há de novo
http://www.50minutos.com.br/blog/post/Visual-Studio-2010-o-que-ha-de-novo.aspx

Salvar anexos do Outlook 2007 usando C#
http://www.50minutos.com.br/blog/post/Salvar-anexos-do-Outlook-2007-usando-C.aspx

Enviar e-mails pelo Outlook 2007 usando C# e WPF
http://www.50minutos.com.br/blog/post/Enviar-e-mails-pelo-Outlook-2007-usando-C-e-WPF.aspx

Como listar as instâncias de SQL Server da rede
http://www.50minutos.com.br/blog/post/Como-listar-as-instancias-de-SQL-Server-da-rede.aspx

C# 3.0, C# 4.0 e VB.Net 10 – Especificação das linguagens para download
http://www.50minutos.com.br/blog/post/Csharp-3-Csharp-4-e-VBNet-10-Especificacao-das-linguagens-para-download.aspx

O que há de novo no C# 4 e no Visual Basic 10 – Slide da apresentação e demos
http://www.50minutos.com.br/blog/post/O-que-ha-de-novo-no-C-4-e-no-Visual-Basic-10-Slide-da-apresentacao-e-demos.aspx

Dica rápida de c#: como obter o nome da pasta onde o aplicativo executa
http://www.50minutos.com.br/blog/post/Dica-rapida-de-c-como-obter-o-nome-da-pasta-onde-o-aplicativo-executa.aspx

Como gravar as imagens de uma página HTML usando C#
http://www.50minutos.com.br/blog/post/Como-gravar-as-imagens-de-uma-pagina-HTML-usando-C.aspx

Como escrever um texto numa imagem usando C#
http://www.50minutos.com.br/blog/post/Como-escrever-um-texto-numa-imagem-usando-C.aspx

Exemplos de C# 4 – 001 – Literais
http://www.50minutos.com.br/blog/post/Exemplos-de-Csharp-4-001-Literais.aspx

Exemplos de C# 4 – 002 – Built-In Types CLS Compliant
http://www.50minutos.com.br/blog/post/Exemplos-de-Csharp-4-002-Built-In-Types-CLS-Compliant.aspx

Exemplos de C# 4 – 003 – Built-In Types Not CLS Compliant
http://www.50minutos.com.br/blog/post/Exemplos-de-Csharp-4-003-Built-In-Types-Not-CLS-Compliant.aspx

Exemplos de C# 4 – 004 – Variáveis e Constantes
http://www.50minutos.com.br/blog/post/Exemplos-de-Csharp-4-004-Variaveis-e-Constantes.aspx

Exemplos de C# 4 – 005 – Operadores
http://www.50minutos.com.br/blog/post/Exemplos-de-Csharp-4-005-Operadores.aspx

Exemplos de C# 4 – 006 – Enum
http://www.50minutos.com.br/blog/post/Exemplos-de-Csharp-4-006-Enum.aspx

Exemplos de C# 4 – 007 – Var
http://www.50minutos.com.br/blog/post/Exemplos-de-Csharp-4-007-Var.aspx

Exemplos de C# 4 – 008 – if
http://www.50minutos.com.br/blog/post/Exemplos-de-Csharp-4-008-if.aspx

Exemplos de C# 4 – 009 – switch
http://www.50minutos.com.br/blog/post/Exemplos-de-Csharp-4-009-switch.aspx

Exemplos de C# 4 – 010 – foreach
http://www.50minutos.com.br/blog/post/Exemplos-de-Csharp-4-010-foreach.aspx

Exemplos de C# 4 – 011 – break
http://www.50minutos.com.br/blog/post/Exemplos-de-Csharp-4-011-break.aspx

Exemplos de C# 4 – 012 – continue
http://www.50minutos.com.br/blog/post/Exemplos-de-Csharp-4-012-continue.aspx

Exemplos de C# 4 – 013 – goto
http://www.50minutos.com.br/blog/post/Exemplos-de-Csharp-4-013-goto.aspx

Exemplos de C# 4 – 014 – Field modifiers (modificadores de campo)
http://www.50minutos.com.br/blog/post/Exemplos-de-Csharp-4-014-Field-modifiers-(modificadores-de-campo).aspx

Exemplos de C# 4 – 015 – Constructor (construtor)
http://www.50minutos.com.br/blog/post/Exemplos-de-Csharp-4-015-Constructor-(construtor).aspx

Exemplos de C# 4 – 016 – Métodos
http://www.50minutos.com.br/blog/post/Exemplos-de-Csharp-4-016-Metodos.aspx

Exemplos de C# 4 – 017 – Property (propriedade)
http://www.50minutos.com.br/blog/post/Exemplos-de-Csharp-4-017-Property-(propriedade).aspx

Exemplos de C# 4 – 018 – Encapsulamento
http://www.50minutos.com.br/blog/post/Exemplos-de-Csharp-4-018-Encapsulamento.aspx

O que está escrito aqui? (brinquedinho em C# 4)
http://www.50minutos.com.br/blog/post/O-que-esta-escrito-aqui-brinquedinho-em-Csharp.aspx

Exemplos de C# 4 – 019 – Interfaces
http://www.50minutos.com.br/blog/post/Exemplos-de-Csharp-4-019-Interfaces.aspx

Exemplos de C# 4 – 020 – Polimorfismo
http://www.50minutos.com.br/blog/post/Exemplos-de-Csharp-4-020-Polimorfismo.aspx

O que está escrito aqui? (solução oficial em C# 4)
http://www.50minutos.com.br/blog/post/O-que-esta-escrito-aqui-(solucao-oficial-em-Csharp-4).aspx

Calcular números primos usando C# 4
http://www.50minutos.com.br/blog/post/Calcular-numeros-primos-usando-Csharp-4.aspx

Como associar itens de um Enum a um ComboBox usando C#
http://www.50minutos.com.br/blog/post/Como-associar-itens-de-um-Enum-a-um-ComboBox-usando-C.aspx

Como associar itens de um Hashtable a um ComboBox usando C#
http://www.50minutos.com.br/blog/post/Como-associar-itens-de-um-Hashtable-a-um-ComboBox-usando-C.aspx

O que está escrito aqui? (outro brinquedinho em C# 4.0)
http://www.50minutos.com.br/blog/post/O-que-esta-escrito-aqui-(outro-brinquedinho-em-Csharp).aspx

O que é isso?
http://www.50minutos.com.br/blog/post/O-que-e-isso.aspx

Um pattern em C# por dia: Decorator – pattern estrutural
http://www.50minutos.com.br/blog/post/Um-pattern-em-C-por-dia-Decorator-pattern-estrutural.aspx

Um pattern em C# por dia: Bridge – pattern estrutural
http://www.50minutos.com.br/blog/post/Um-pattern-em-C-por-dia-Bridge-pattern-estrutural.aspx

Livro online: Parallel Programming with .NET (C#, VB.Net e F#)
http://www.50minutos.com.br/blog/post/Livro-online-Parallel-Programming-with-NET-(C-VBNet-e-F).aspx

Um pattern em C# por dia: Composite – pattern estrutural
http://www.50minutos.com.br/blog/post/Um-pattern-em-C-por-dia-Composite-pattern-estrutural.aspx

Criptografia através de Hash.
http://www.edgaresteves.com.br/DetalharArtigos.aspx?id=8

QueryString com Criptografia e Descriptografia
http://www.edgaresteves.com.br/DetalharArtigos.aspx?id=5

Grafico Pizza 360º com C#
http://www.edgaresteves.com.br/DetalharArtigos.aspx?id=12

Tipos de Dados de Sistema (Variaveis)
http://www.edgaresteves.com.br/DetalharArtigos.aspx?id=22

HTML Acentuações
http://www.edgaresteves.com.br/DetalharArtigos.aspx?id=3

Desabilitar o Botão Fechar (Windows Form)
http://edgaresteves.com.br/DetalharArtigos.aspx?id=26

Replace com C#
http://edgaresteves.com.br/DetalharArtigos.aspx?id=27

Compreendendo o Tipo System.String
http://edgaresteves.com.br/DetalharArtigos.aspx?id=29

Caracteres de Escape (String)
http://edgaresteves.com.br/DetalharArtigos.aspx?id=30

O Tipo System.Text.StringBuilder
http://edgaresteves.com.br/DetalharArtigos.aspx?id=31

Scheduled – Agenda de Tarefas V 1.0
http://edgaresteves.com.br/DetalharArtigos.aspx?id=32

Minimizar Programa junto ao Relogio (colocar icon e minimizar)
http://edgaresteves.com.br/DetalharArtigos.aspx?id=33

3 Camadas efetuando conexão com o Banco de Dados
http://edgaresteves.com.br/DetalharArtigos.aspx?id=34

Controle DropDownList (Banco de Dados e Manual)
http://edgaresteves.com.br/DetalharArtigos.aspx?id=35

Criando controles dinamicos com C#
http://edgaresteves.com.br/DetalharArtigos.aspx?id=36

Conectando ao banco de dados MySQL
http://edgaresteves.com.br/DetalharArtigos.aspx?id=37

Populando um GridView em C#
http://edgaresteves.com.br/DetalharArtigos.aspx?id=38

Laços e Repetições com C#
http://edgaresteves.com.br/DetalharArtigos.aspx?id=39

Monitorar o Desempenho do Servidor
http://edgaresteves.com.br/DetalharArtigos.aspx?id=40

Consultar DNS(IP) com C#
http://edgaresteves.com.br/DetalharArtigos.aspx?id=41

Utilizando IF em sua programação
http://edgaresteves.com.br/DetalharArtigos.aspx?id=47

Utilizando SWITCH em sua programação
http://edgaresteves.com.br/DetalharArtigos.aspx?id=48

Validando com Expressão Regular (E-mail e URL)
http://edgaresteves.com.br/DetalharArtigos.aspx?id=49

Sistema Simples de uma Biblioteca (3 partes):
http://programandodotnet.wordpress.com/tag/biblioteca/

Controles ASP.NET – Menu Standard – Parte 3:
http://programandodotnet.wordpress.com/2010/09/24/controles-asp-net-%E2%80%93-menu-standard-%E2%80%93-parte-3/

Conceitos e Exemplo Prático: QueryString:
http://programandodotnet.wordpress.com/2010/09/27/conceitos-e-exemplo-pratico-querystring/

Conceitos e Exemplo Prático: Breakpoint :
http://programandodotnet.wordpress.com/2010/09/27/conceitos-e-exemplo-pratico-breakpoint/

Conceitos e Sintaxe: ViewState – Parte 1
http://programandodotnet.wordpress.com/2010/09/27/conceitos-e-sintaxe-viewstate-%e2%80%93-parte-1/

Exemplo Prático: Usando ViewState – Parte 2
http://programandodotnet.wordpress.com/2010/09/27/exemplo-pratico-usando-viewstate-%e2%80%93-parte-2/

Conceitos e Dicas: Usando Session – Parte 1
http://programandodotnet.wordpress.com/2010/10/02/conceitos-e-dicas-usando-session-%e2%80%93-parte-1/

Exemplo Prático: Usando Session – Parte 2
http://programandodotnet.wordpress.com/2010/10/02/exemplo-pratico-usando-session-%e2%80%93-parte-2/

Conceitos e Criação do Projeto: Trabalhando com Cookies – Parte 1
http://programandodotnet.wordpress.com/2010/10/05/conceitos-e-criacao-do-projeto-trabalhando-com-cookies-%e2%80%93-parte-1/

Codificação Final: Trabalhando com Cookies – Parte 2
http://programandodotnet.wordpress.com/2010/10/05/codificacao-final-trabalhando-com-cookies-%e2%80%93-parte-2/

Conceitos e Sintaxe: Controles de Login do ASP.NET – Parte 1
http://programandodotnet.wordpress.com/2010/10/09/conceitos-e-sintaxe-controles-de-login-do-asp-net-%e2%80%93-parte-1/

Exemplo Prático: Controles de Login do ASP.NET – Parte 2
http://programandodotnet.wordpress.com/2010/10/09/exemplo-pratico-controles-de-login-do-asp-net-%e2%80%93-parte-2/

Alterando Senhas e Criando Usuários: Controles de Login do ASP.NET – Parte 3
http://programandodotnet.wordpress.com/2010/10/09/alterando-senhas-e-criando-usuarios-controles-de-login-do-asp-net-%e2%80%93-parte-3/

SQL Server 2008 – Parte 9 – Conceitos de MER e DER, Regras e Tipos de Relacionamentos
http://programandodotnet.wordpress.com/2010/11/06/sql-server-2008-%e2%80%93-parte-9-%e2%80%93-conceitos-de-mer-e-der-regras-e-tipos-de-relacionamentos/

Cadastro de um Consultório em Windows Forms, com C# e SQL Server – Parte 13
http://programandodotnet.wordpress.com/2010/11/10/cadastro-de-um-consultorio-em-windows-forms-com-c-e-sql-server-%e2%80%93-parte-13/

Adiconando Conector MySQL no Visual Studio 2010
http://dotnettime.wordpress.com/2010/05/08/adiconando-conector-mysql-no-visual-studio-2010/

ASP.NET MVC Resolvendo problema de Refencia Circular
http://dotnettime.wordpress.com/2010/05/09/resolvendo-problema-de-refencia-circular/

ASP.NET MVC Model Binding List
http://dotnettime.wordpress.com/2010/12/11/asp-net-mvc-model-binding-list/

Sistema de Gestão Pública Municipal E-cidade

O e-cidade destina-se a informatizar a gestão dos Municípios Brasileiros de forma integrada. Esta informatização contempla a integração entre os entes municipais: Prefeitura Municipal, Câmara Municipal, Autarquias, Fundações e outros.

A economia de recursos é somente uma das vantagens na adoção do e-cidade, além da liberdade de escolha dos fornecedores e garantia de continuidade do sistema, uma vez apoiado pelo Ministério do Planejamento.

 

NOVA VERSÃO COMPLETA DO E-CIDADE:

Pacote(Atualização) e-cidade ( Versão 2.3.29 para 2.3.30 ):

Portal da Transparência (Versão v010208):Portal do Aluno (v010103) – Completo
E-CIDADEONLINE2 (NFS-e)NOVA VERSÃO V010301 – COMPLETA

NOVA VERSÃO V010301 – ATUALIZAÇÃO

VERSÕES ANTERIORES
Versões Anteriores:

Pacote(Atualização) e-cidade ( Versão 2.3.28 para 2.3.29 ):

Pacote(Atualização) e-cidade ( Versão 2.3.27 para 2.3.28 ):

Pacote (Completo) e-cidade (Versão 2.3.28):  

Pacote (Completo) e-cidade (Versão 2.3.27):

Pacote(Atualização) e-cidade ( Versão 2.3.26 para 2.3.27 ):

Pacote (Completo) e-cidade (Versão 2.3.26):

Pacote(Atualização) e-cidade ( Versão 2.3.25 para 2.3.26 ):

Pacote (Completo) e-cidade (Versão 2.3.25):

Pacote (Completo) e-cidade (Versão 2.3.24):

Pacote(Atualização) e-cidade ( Versão 2.3.24 para 2.3.25 ):Pacote(Atualização) e-cidade ( Versão 2.3.23 para 2.3.24 ):

Pacote (Completo) e-cidade (Versão 2.3.23):

Pacote(Atualização) e-cidade ( Versão 2.3.19 para 2.3.23 ):

Portal da Transparência (Versão v010206):

Ecidadeonline2 – NFS-e – Sistema de nota fiscal de serviço eletrônica (Versão v010101):

Pacote (Completo) e-cidade (Versão 2.3.19):Pacote(Atualização) e-cidade ( Versão 2.3.17 para 2.3.19 ):

Pacote de Migração da estrutura de senhas do e-cidade  ( Versão 2.3.17 para 2.3.19 ):

Manual para Migração da estrutura de senhas do e-cidade  ( Versão 2.3.17 para 2.3.19 ):

Pacote (Completo) e-cidade (Versão 2.3.17):

Pacote(Atualização) e-cidade ( Versão 2.3.14 para 2.3.17 ):Pacote (Atualização) e-cidade ( Versão 2.3.12 para 2.3.14 ):

Pacote (Atualização) e-cidade ( Versão 2.3.3 para 2.3.12 ):

Pacote (Atualização) e-cidade ( Versão 2.2.60 para 2.3.3 ):

Publiq-BI

Portal Da Transparência

Máquina Virtual VirtualBox Pacote (Completo) e-cidade (Versão 2.3.3) – Parte 1:

Máquina Virtual VirtualBox Pacote (Completo) e-cidade (Versão 2.3.3) – Parte 2:

Máquina Virtual VirtualBox Pacote (Completo) e-cidade (Versão 2.3.3) – Parte 3:

Máquina Virtual VirtualBox Pacote (Completo) e-cidade (Versão 2.3.3) – Parte 4:

Usuário da VM: root

Senha: dbseller

Máquina Virtual VirtualBox Pacote (Completo) e-cidade (Versão 2.3.3) + Integrações – Parte 1

Máquina Virtual VirtualBox Pacote (Completo) e-cidade (Versão 2.3.3) + Integrações – Parte 2

Máquina Virtual VirtualBox Pacote (Completo) e-cidade (Versão 2.3.3) + Integrações – Parte 3

Máquina Virtual VirtualBox Pacote (Completo) e-cidade (Versão 2.3.3) + Integrações – Parte 4

Máquina Virtual VirtualBox Pacote (Completo) e-cidade (Versão 2.3.3) + Integrações – Parte 5

Usuário da VM: root

Senha: dbsellerApresentação e descrição resumida do e-cidade:  clique aqui

Abrangência do e-cidade:

Financeira, Tributária, Patrimonial, Recursos Humanos, Saúde, Educação, PubliQ-BI, Cidadão

Informações Técnicas

 

ambiente

Perguntas Freqüentes (FAQs)

Nome Grupo
Conversão dos dados e-cidade
Instalação e-cidade

 

Fóruns de Discussão

 

Casos de Sucesso

Fórum para relatar caso de sucesso no uso da solução

Estatística dos Casos de Sucesso

Versão 1 – Apenas dados confirmados com o município

Versão 2 – Todos os dados apurados na comunidade porém não confirmados com o município

 

Weblogger

e-cidade Adicionar entrada Visualização Completa

 

 

API de Compras Governamentais

Dados Abertos – Compras Governamentais

Dados Abertos do Sistema Integrado de Administração e Serviços Gerais – SIASG.

O SIASG é o sistema onde se operacionaliza as compras do Governo Federal. Essa operacionalização se dá em diversos módulos, contemplando o catálogo de materiais e serviços (CATMAT / CATSER), o cadastramento e divulgação da licitação (SIDEC, Divulgação), as intenções de registros de preços (IRP), o cadastramento dos fornecedores (SICAF), a realização das licitações (Compras governamentais, Sessão Pública, RDC), o resultado das licitações (SISPP, SISRP), os empenhos de pagamentos (SISME) e o registro e gestão dos contratos (SICON).

Por que Dados Abertos de Compras Governamentais?

A prestação de dados como um serviço governamental traz vantagens para toda a sociedade, incluindo o próprio governo. O Ministério do Planejamento, Orçamento e Gestão está economizando recursos através da publicação dessas informações na Internet.

A disponibilização dos dados das Compras Governamentais é um compromisso firmado pelo governo brasileiro na Parceria para Governo Aberto (Open Government Partnership – OGP do inglês). O governo está comprometido em promover a transparência dos gastos públicos, fornecer informações de valor agregado à sociedade e promover a pesquisa e inovação tecnológica através da implementação da política brasileira de dados abertos. Essa API está sendo desenvolvida como parte da Infraestrutura Nacional de Dados Abertos – INDA.

Quais dados estão disponíveis?

O SIASG – Sistema Integrado de Administração e Serviços Gerais mantém registro das compras e contratações firmadas pelo poder executivo da Administração Pública Federal. Abaixo uma lista dos dados disponíveis por essa API:

  1. Dados dos fornecedores
  2. Dados do catálogo de materiais
  3. Dados do catálogo de serviços
  4. Dados de licitações
  5. Dados dos contratos
  6. Dados de Compras sem Licitação

Modelo de dados

modelo_dados

Breve Explicação sobre a operacionalização das Compras Governamentais do Governo Federal

O SIASG – Sistema Integrado de Administração de Serviços Gerais é o sistema onde se operacionaliza as compras do Governo Federal. Essa operacionalização se dá em diversos módulos, contemplando o catálogo de materiais e serviços (CATMAT / CATSER), o cadastramento e divulgação da licitação (SIDEC, Divulgação), as intenções de registros de preços (IRP), o cadastramento dos fornecedores (SICAF), a realização das licitações (Comprasnet, Sessão Pública, RDC), o resultado das licitações (SISPP, SISRP), os empenhos de pagamentos (SISME) e o registro e gestão dos contratos (SICON).

Como utilizar a API

O acesso aos dados é feito através de URLs, recursos web nos formatos XML, JSON e CSV. Além desses formatos, também é disponibilizada uma representação em HTML, que possibilita uma visualização através do navegador e melhora a classificação desses conteúdos nas ferramentas de busca. Em cada consulta é possível especificar uma série de parâmetros de filtro, que devem compor a URL. Esta API segue os princípios REST e implementa a característica HATEOAS desta arquitetura. Você (ser humano ou máquina) pode navegar através de todos os recursos (fornecedores, serviços, materiais, licitações, contratos, etc.) apenas utilizando os links disponíveis. Para acessar os dados da API é necessário conhecer o endereço ou URL:

http://compras.dados.gov.br/{modulo}/v1/{metodo}.{formato}?{parametro1=valor1}&{parametro2=valor2}&{parametroN=valorN}

O método indica qual informação do módulo selecionado você quer e o “formato” define o formato da resposta, em HTML, XML, JSON ou CSV. Consulte nossa documentação para saber quais são os métodos disponíveis. Na documentação, os campos estão listados em ordem alfabética para facilitar a consulta. Os parâmetros campo e valor são utilizados para filtrar os registros retornados pelos métodos. Alguns exemplos de consultas:

  1. Esta consulta busca todos os órgãos que contém no nome o texto “turismo”:http://compras.dados.gov.br/licitacoes/v1/orgaos.html?nome=turismo
  2. Esta consulta exibe os dados específicos do Ministério do Turismo:http://compras.dados.gov.br/licitacoes/doc/orgao/54000
  3. Esta consulta exibe todos os serviços registrados no Catálogo de Serviços que contenha “construção” na da descrição do serviço:http://compras.dados.gov.br/servicos/v1/servicos.html?descricao=construcao
  4. Esta consulta exibe todos os dados da licitação 180/2012 que envolve o Senado Federal:http://compras.dados.gov.br/licitacoes/doc/licitacao/02000105001802012.html
  5. Esta consulta busca todos os fornecedores do Distrito Federal:http://compras.dados.gov.br/fornecedores/v1/fornecedores.xml?uf=DF

Todas as consultas acima podem retornar dados nos formatos JSON, XML e CSV. Basta trocar o trecho “html” pelo respectivo formato.

Licença de Uso dos Dados

Esses dados são disponibilizados sob a licença ODBL (Open DataBase License). Todos os direitos dos conteúdos individuais estão licenciados sob DBCL (Database Contents License).

Atualidade

Os dados atualmente disponibilizados são referentes a janeiro/2015. O Ministério do Planejamento está desenvolvendo um módulo de integração que tornará automática a atualização periódica dos dados.

Atenção!

Essa é uma versão beta, a api está em estado de desenvolvimento e os métodos poderão sofrer alterações sem aviso. Tire dúvidas sobre o SIASG através do endereço http://www.comprasgovernamentais.gov.br/.

Fonte: http://compras.dados.gov.br/docs/home.html

O que é o Polymer?

image

Polymer é uma biblioteca que facilita a criação de Web Components, que são elementos HTML customizados, independentes e reutilizáveis.

Polímero torna simples a criação de componentes da Web, de forma declarativa.

Elementos personalizados podem alavancar recursos especiais de polímero para reduzir código clichê e torná-lo ainda mais fácil de construir elementos complexos e interativos:

Elementos cadastrar
Retornos de chamada de ciclo de vida
Observação propriedade
Modelo DOM local
Ligação de dados
Nesta seção, você pode fazer um tour rápido da biblioteca Polymer, sem instalar nada. Clique no Editar no Plunker botão para abrir qualquer uma das amostras em um sandbox interativo.

Consulte o guia do desenvolvedor para obter informações detalhadas sobre cada um desses recursos.

Registar um elemento
Para registrar um novo elemento, ligue para o Polymer função, que registra um novo elemento com o browser. Registrando um elemento associa um nome de tag com um protótipo, assim você pode adicionar propriedades e métodos para o seu elemento personalizado. O nome do elemento personalizado deve conter um traço (-) .

A função Polymer leva como argumento um objeto que define protótipo do seu elemento.

Fonte: https://www.polymer-project.org/1.0/docs/start/quick-tour.html

Publicado do WordPress para Android