Pesquisar aqui

quarta-feira, 13 de novembro de 2019

Blockchain pode exponencialmente melhorar a IoT

Primeiramente, o que é uma Blockchain? Esta é uma técnica que foi inicialmente descrevida em 1991, porém, tem ganho extrema relevância recentemente devido principalmente às criptomoedas como a Bitcoin. Esta técnica consiste numa corrente de blocos que transporta informação de uma maneira muito particular e interessante. Cada bloco possui três informações: o conteúdo (data) que no exemplo das criptomoedas indica o montante transferido e as carteiras envolvidas (de quem para quem); a hash, que funciona como uma impressão digital, que sendo assim é um número único para cada bloco, gerado aleatoriamente, usado para o identificar e que se altera sempre que o conteúdo do bloco é alterado; a hash do bloco anterior. 





O facto de cada bloco ter a hash so anterior é o que cria a cadeia de blocos. Por sua vez o facto de a hash de cada bloco ser alterada sempre que o conteúdo do bloco também o é, torna esta cadeia extremamente segura. Por exemplo, se tivermos uma cadeia com 3 blocos e o conteúdo do 2º bloco for alterado, o seu hash não irá corresponder ao que está presente no 3º bloco, sendo assim detetada uma falha e inviabilizando a cadeia dali para a frente.


Mas talvez esteja a pensar porque não mudar todos os blocos. Assim não existiria maneira de provar que ouve uma manipulação, certo? Felizmente esta técnica possui algo que se chama prof of work, que é um mecanismo que atrasa a criação de novos blocos (no caso das bitcoins demora cerca de 10 minutos a ser aceite um novo bloco à cadeia).

Para além disto a Blockchain usa algo que se chama peer to peer network, consistindo numa rede aberta em que qualquer pessoa pode participar. Sempre que é criado um novo bloco, este é enviado para todos os integrantes da rede que verificam o bloco de modo a perceber se não foi adulterado. Caso esteja tudo correto, este é adicionado à cadeia. É importante referir que para que um bloco seja aceite, a maioria dos integrantes da rede têm que identificar o novo bloco como válido.




Como é possível entender, esta técnica é extremamente eficaz em impedir a alteração de informação. Ora, isto é algo de extrema importância para a IoT que sendo completamente baseada na partilha de informação entre dispositivos pela internet, precisa garantir que a informação que chega e que é enviada não é acedida e alterado pelo caminho por hackers. 

Para além disso, a IoT é na sua grande maioria centralizada numa Cloud, caso esta seja exposta, todos os dispositivos integrantes da mesma ficam extremamente vulneráveis. A Blockchain por sua vez é uma técnica que utiliza a descentralização, sendo cada dispositivo individualmente responsável pela aferição e gestão da informação da rede. Isto não é só uma vantagem de segurança, mas também uma vantagem monetária, visto que os custos de manter uma Cloud são elevados, caso esta não seja necessário, o custo dos dispositivos IoT poderá descer exponencialmente, ajudando na sua popularização.

Como é evidente isto não é apenas um conto de fadas, também existem obstáculos. Primeiramente, ainda há muito para descobrir sobre a Blockchain, sendo uma técnica ainda muito "tenra". O maior problema é mesmo falta de consenso em relação ou setor de pouca energia sem fios WLAN.

Para terminar, quero apenas deixar um bónus. O laboratório de IoT da Bosch está neste momento a trabalhar num protótipo de um sensor que regista a quilometragem de um veículo e a envia permanentemente para uma blockchain através da internet de modo a combater a recorrente diminuição dos valores de quilometragem de um carro, de modo a aumentar o seu valor comercial.

Blogue pessoal sobre tech:
Imagens:
  • Printscreens de um vídeo
  • consultado no dia 10/11/2019

Fontes:

C++ - Operadores de igualdade (==, !=)


Para termos um valor lógico, podemos simplesmente atribuir esse valor (true ou false).
bool valor = true;

Mas outra forma de gerar um valor lógico é a partir das igualdades.
Uma igualdade entre duas variáveis vai nos dizer se as variáveis (ou valores lógicos) têm o mesmo valor ou não.

Igualdade (==)
Se tiverem o mesmo valor, o resultado vai ser verdadeiro.
Caso contrário, será falso.
Escreve-se com "==" entre duas variáveis (ou valores lógicos).
bool variable = true == true;
bool variable2 = false == false;
bool variable3 = true == false;
variable vai ser verdadeira (verdadeiro é verdadeiro).
variable2 vai ser verdadeira (falso é falso).
variable3 vai ser falsa (verdadeiro é falso).

Desigualdade (!=)
Se tiverem o mesmo valor, o resultado vai ser falso.
Caso contrário, será verdadeiro.
Escreve-se com "!=" entre duas variáveis (ou valores lógicos).
bool variable = true != true;
bool variable2 = false != false;
bool variable3 = true != false;
variable vai ser falsa (verdadeiro não é verdadeiro).
variable2 vai ser falsa (falso não é falso).
variable3 vai ser verdadeira (verdadeiro não é falso).

Não se confundam:
  • O igual (=) serve para atribuir um novo valor à variável;
  • Enquanto a o operador de igualdade (==) serve para verificar igualdade de valor (entre variáveis ou valores lógicos).
Assim como os operadores lógicos, vão ser utilizados nas condições.

Referências

Python - Biblioteca 'Math' (Parte 2)

UMA DAS COISAS MAIS IMPORTANTES EM TODA A PROGRAMAÇÃO, SÃO CÁLCULOS ARITMÉTICOS, FUNÇÕES, NÚMEROS ENTRE OUTROS CONCEITOS MATEMÁTICOS, ESTA BIBLIOTECA VAI NOS AJUDAR COM ISSO!

Nota: Como esta biblioteca é bastante vasta, tive de publicar duas partes sobre a mesma, sendo esta a parte 2 de 2.

Comecemos por importar a biblioteca, como demonstrei nas publicações "Python - Bibliotecas" e "Python - Biblioteca 'Random'", para podermos utilizar os seus comandos:

import math

Esta é a segunda biblioteca de que estou a explorar em Python, sendo uma das mais importantes e úteis.

Para mais informações sobre esta biblioteca, consultar: docs.python.org/3/library/math.html

Seleccionei alguns comandos mais interessantes desta biblioteca para demonstrar nesta segunda parte:
  • Constante e - este comando não é uma função, mas sim um valor de uma constante; o Número de Euler ou Constante de Napier, que é uma constante matemática que em Python é igual a 2.718281828459045 e para a utilizarmos basta usar 'e':
import math

print(math.e)

e aparecerá:

2.718281828459045

  • Potenciação de e - na primeira parte falei de um comando para criar potências, este é semelhante mas só pode ser utilizado para o Número de Euler ou Constante de Napier, que falei acimapara adiciona expoentes basta utilizarmos o comando 'Exp':
import math

print(math.exp(2))

print(math.exp(5))

print(math.exp(10))

em que obteríamos:

7.38905609893065
148.4131591025766
22026.465794806718

  • Pi (π) - como a constante e, o valor pi também tem um comando para apresentar esse valor, através de 'pi':
import math

print(math.pi)

que em Python é:

3.141592653589793

  • Calcular seno, cosseno e tangente - para calcularmos o seno, cosseno e tangente de um ângulo qualquer, a biblioteca Math disponibiliza 3 comandos bastante simples, 'sin', 'cos' e 'tan' respectivamente:
import math

print(math.sin(60))

print(math.cos(30))

print(math.tan(87))

que neste exemplo resultará:


-0.3048106211022167
0.15425144988758405
-1.4424174716642324

  • Calcular a raiz quadrada - para calcularmos a raiz quadrada de qualquer valor, basta usarmos o comando 'Sqrt' :
import math

print(math.sqrt(25))

print(math.sqrt(36))

print(math.sqrt(64))

onde obteríamos...


5
6
8


A biblioteca Math ainda tem muitas outras funções que não demonstrei aqui, como cálculo de logaritmos, que poderei falar com algum detalhe se precisarmos das usar em programas futuros.


Referências:


terça-feira, 12 de novembro de 2019

Introdução



O design de jogos engloba muitos processos que eu pretendo discutir neste blogue.

Eu pretendo abordar tudo desde a música dos jogos, à criação das personagens e história, à programação e animação envolvida. Eu irei escrever sobre estes temas principalmente sozinhos mas, também pretendo falar da interligação dos mesmos temas e, se descobrir ou me lembrar de algo para dizer sobre um tema do qual já falei irei criar um novo post para acrescentar a informação. Eu irei começar com um pouco da história dos videojogos e da sua evolução nos últimos anos, depois pretendo falar sobre a influência da música nos jogos, depois a história e a criação da narração de um jogo e, depois disto logo se vê (posso nem por estes três primeiros se por alguma razão no dia em que for pôr um deles me apetecer falar de outra coisa.

O meu objetivo é ensinar vos sobre os processos da criação de um videojogo e aprender coisas novas pelo caminho.

segunda-feira, 11 de novembro de 2019

Carros autónomos serão uma realidade através da IoT!

Carros autónomos e inteligentes eram apenas ficção científica à poucos anos atrás. Porém, cada vez mais este conceito é uma realidade, sendo possível possuir veículos com capacidade de condução autónoma, um pouco limitada, como os Tesla. No futuro espera-se que estes veículos sejam capazes de até reabastecer sozinhos.

Mas vamos ao fundamental deste post, como a IoT torna tudo isto possível? Apesar de a tecnologia envolvida na fabricação destes automóveis depender de cada marca, a maioria usa uma série de radares detectores de laser e câmaras para mapear o ambiente envolvente ao automóvel. A informação é depois processada e analisada, sendo depois enviadas instruções para o carro tendo em conta os dados obtidos. 

No futuro (após a implementação do 5G) espera-se criar uma rede que conecte todos os carros que se encontrem próximos, e consequentemente os seus sensores, pois apenas quando todos os carros estiverem a funcionar em sincronia, partilhando informação com a qual todos acordam, será possível atingir a tão desejada, completa automação. Ora isto nada mais é do que conectar todos os sensores de diversos carros a uma só rede, através da internet, traduzindo, criar um sistema IoT!


blogue pessoal sobre tech:



fonte:



imagem:

  • URL
  • consultada 10/11/2019

C++ - Operadores lógicos


Assim como na matemática (e a vida real, no fundo), na programação existem os valores lógicos: verdadeiro e falso.

Como já devem saber, o tipo de dado boolean (bool) é o que guarda true ou false.
bool valor = false;

Então, também existem os operadores lógicos:

Negação (!)
A negação serve para "inverter" um valor lógico, assim como o til (~) da matemática:
Falso será verdadeiro, Verdadeiro será falso.

Escreve-se com um ponto de exclamação (!) antes da variável (ou valor lógico).
bool variable = true;
bool notvariable = !variable;

bool variable2 = false;
bool notvariable2 = !variable2;
notvariable vai ter o valor oposto a verdadeiro (falso).
notvariable2 vai ter valor oposto a falso (verdadeiro).

Conector E (&&)
O conector E, também chamado de AND, vai nos dar a combinação de dois valores lógicos, assim como o Λ da matemática (os dois têm de ser verdadeiros):

  • Verdadeiro e Verdadeiro - Verdadeiro
  • Verdadeiro e Falso - Falso
  • Falso e Falso - Falso
Escreve-se com "&&" entre duas variáveis (ou valores lógicos).
bool variable = true && true;
bool variable2 = true && false;
bool variable3 = false && false;
variable vai ser verdadeiro (verdadeiro e verdadeiro).
variable2 vai ser falso (verdadeiro e falso).
variable3 vai ser falso (falso e falso).

Conector Ou (||)
O conector OU, também chamado de OR, vai nos dizer se pelo menos um de dois valores lógicos é verdadeiro, assim como o da matemática:
  • Verdadeiro ou Verdadeiro - Verdadeiro
  • Verdadeiro ou Falso - Verdadeiro
  • Falso ou Falso - Falso

Escreve-se com "||" entre duas variáveis (ou valores lógicos).
bool variable = true || true;
bool variable2 = true || false;
bool variable3 = false || false;
variable vai ser verdadeiro (verdadeiro ou verdadeiro).
variable2 vai ser verdadeiro(verdadeiro ou falso).
variable3 vai ser falso (falso ou falso).


Se tentarmos fazer print da variável com valor lógico, vai ser 0 (falso) ou 1 (verdadeiro).
Em vez de false e true podemos usar 0 e 1 da mesma forma.

Estes operadores lógicos vão ser muito úteis nas condições, que falarei brevemente.

Referências

Python - Biblioteca "Math" (Parte 1)

UMA DAS COISAS MAIS IMPORTANTES EM TODA A PROGRAMAÇÃO, SÃO CÁLCULOS ARITMÉTICOS, FUNÇÕES, NÚMEROS ENTRE OUTROS CONCEITOS MATEMÁTICOS, ESTA BIBLIOTECA VAI NOS AJUDAR COM ISSO!

Nota: Como esta biblioteca é bastante vasta, terei de publicar duas partes sobre a mesma, sendo esta a parte 1 de 2.

Comecemos por importar a biblioteca, como demonstrei nas publicações "Python - Bibliotecas" e "Python - Biblioteca 'Random'", para podermos utilizar os seus comandos:

import math

Esta é a segunda biblioteca de que estou a explorar em Python, sendo uma das mais importantes e úteis.

Para mais informações sobre esta biblioteca, consultar: docs.python.org/3/library/math.html

Seleccionei alguns comandos mais interessantes desta biblioteca para demonstrar nesta primeira parte:
  • Arredondar para inteiro - para arredondarmos um valor real para o número inteiro mais próximo e acima, utilizamos o comando 'Ceil':
import math

print(math.ceil(6.012))

print(math.ceil(3.7))

print(math.ceil(0.0004))

Nestes exemplos, o que apareceria:

7
4
1

  • Remover o sinal - para removermos um sinal positivo ou negativo, aparecendo apenas o valor, usamos o comando 'Fabs':
import math

print(math.fabs(-6.333))

print(math.fabs(6.333))

em que o resultado seria:

6.333
6.333

  • Factorial - para calcular o factorial de um valor, usamos o comando 'Factorial':
import random

print(math.factorial(3))

print(math.factorial(5))

print(math.factorial(10))

e iria resultar:

6
120
3628800

  • Manter a 'parte inteira' - este comando permitenos remover todos os valores à direita da virgula, apresentando apenas o valor inteiro, através do comando 'Floor':
import math

print(math.floor(6.333))

print(math.floor(0.001))

print(math.floor(7.403))

e vamos obter:

6
0
7

  • Potenciação - para além do método que falei na publicação "Python - Operações Aritméticas", podemos criar potências com o comando 'Pow':
import math

print(int(math.pow(2, 3)))

print(int(math.pow(5, 1)))

print(int(math.pow(8, 0)))

assim sendo, apareceria:


8
5
1


Terminando assim a Parte 1 da biblioteca Math, com 5 comandos que nos irão ser úteis em diversos programas futuros. A Parte 2 será publicada dia 13 de Novembro (quarta-feira)!


Referências:




domingo, 10 de novembro de 2019

iOS 12


IOS 12 logo.svg


IOS 12 Homescreen iPhone X.png
  Este iOS foi lançado no dia 17 de setembro de 2018 e a sua ultima versão lançada foi a 12.4.3 no dia 28 de outubro de 2019, há menos de um mês e esteve disponível para as seguintes plataformas: iPhone 5S, 6, 6 Plus, 6S, 6S Plus, 7, 7 Plus, 8, 8 Plus, X, XS, XS Max e XR, iPod Touch de 6ª e 7ª geração e iPad Air, Air 2, Air 3ª geração, iPad de 5ª e 6ª geração, Mini 2, 3, 4 e de 5ª geração e para todos os modelos do Pro lançados.

  As modificações efetuadas neste sistema operativo foram as seguintes:

 - As aplicações iniciam 40% mais rápido, o teclado do sistema ativa-se 50% mais rápido e a câmera ativa-se 70% mais rápido;

 - O Screen Time que é um novo recurso que regista a quantidade de tempo que o utilizador passou no dispositivo e em cada aplicação. Este novo recurso também fornece opções de bloqueio para limitar o uso de aplicativos com restrições de tempo;

 - o Teclado tem modo trackpad (que permite que o utilizador mova o cursor livremente) é ativado pressionando a barra de espaço em dispositivos sem o 3D Touch;

 - A app medidas serve para que o utilizador faça medições de objetos reais. Também funciona como um nível, um recurso que foi originalmente incorporado como parte da aplicação Compass;

 -A aplicação Mapas começou a ser reconstruída, contando com dados de mapas de terceiros em vez de usar dados de mapas fornecidos por terceiros. Isso permite instruções e previsões mais precisas nas rotas mais rápidas.