Este documento apresenta um minicurso sobre encoding, abordando os seguintes pontos essenciais:
1) Explica o que é encoding e por que é necessário para representar informações em computadores.
2) Discorre sobre a história dos standards ASCII e Unicode e como eles lidam com a codificação de caracteres.
3) Destaca as principais diferenças entre os encodings LATIN-1 e UTF-8, sendo este último o mais usado atualmente.
O documento discute encodings e como eles funcionam. Em 3 frases:
(1) Encodings mapeiam caracteres abstratos para sequências concretas de bytes para armazenamento em computadores; (2) Historicamente houveram muitos encodings diferentes causando problemas de interoperabilidade; (3) O Unicode criou uma tabela única de caracteres e encodings como UTF-8 para representá-los de forma consistente entre sistemas.
O documento discute encodings e como eles afetam a representação de caracteres em computadores. Inicialmente, vários encodings foram usados, causando problemas de interoperabilidade. Posteriormente, o Unicode foi criado como um padrão único para mapear todos os caracteres, enquanto os encodings UTF-8, UTF-16 e UTF-32 permitem representá-los em bytes. Hoje, UTF-8 é o mais comum.
Expressões regulares são padrões usados para manipular texto de forma flexível. Elas permitem encontrar, processar e substituir texto de maneira elegante. As expressões regulares são onipresentes em linguagens de programação, editores de texto e ferramentas de desenvolvimento.
1. O documento introduz os conceitos fundamentais de expressões regulares, incluindo alfabeto, cadeia de caracteres, concatenação e linguagens.
2. Apresenta os conceitos teóricos básicos de expressões regulares, como operações de união, concatenação e estrela.
3. Explica como aplicar expressões regulares na prática usando caracteres especiais e operadores em ferramentas como egrep e no Python.
Este documento discute encodings e como eles funcionam. Em três frases:
(1) Encodings mapeiam caracteres abstratos para sequências concretas de bytes, porém a mesma sequência pode representar caracteres diferentes dependendo do encoding. (2) Isso causava problemas de interoperabilidade até o Unicode criar uma tabela universal de caracteres e encodings como UTF-8 para transformá-los em bytes. (3) Apesar disso, LATIN-1 ainda é usado e pode corromper caracteres se confundido com UTF-8.
O básico que ainda deveríamos entender sobre Unicode e encondingsThiago Colares
Representar caracteres em computadores evoluiu muito nas últimas 3 décadas. Como funcionam exatamente: Unicode, conjunto de caracteres, ��� (diamante preto com interrogação), plain text, ASCII, UTF-8, BOM? Essas e outras coisas básicas que todo(a) desenvolvedor(a) ainda deveria saber em 2019.
Arquitetura de Sistemas Operacionais 32 x 64 BitsCleber Ramos
O documento discute as diferenças entre sistemas operacionais de 32 bits e 64 bits. Sistemas de 64 bits podem usar mais memória RAM, processar mais informações ao mesmo tempo e lidar melhor com aplicativos pesados, enquanto sistemas de 32 bits ainda são mais compatíveis com softwares existentes. A escolha depende do hardware e tipo de uso da máquina.
O documento discute sistemas numéricos, incluindo binário, hexadecimal, octal e decimal. Explica como cada sistema funciona e como eles são usados em computadores e eletrônica digital. Também aborda codificações como ASCII e UNICODE e como caracteres são representados numericamente.
O documento discute encodings e como eles funcionam. Em 3 frases:
(1) Encodings mapeiam caracteres abstratos para sequências concretas de bytes para armazenamento em computadores; (2) Historicamente houveram muitos encodings diferentes causando problemas de interoperabilidade; (3) O Unicode criou uma tabela única de caracteres e encodings como UTF-8 para representá-los de forma consistente entre sistemas.
O documento discute encodings e como eles afetam a representação de caracteres em computadores. Inicialmente, vários encodings foram usados, causando problemas de interoperabilidade. Posteriormente, o Unicode foi criado como um padrão único para mapear todos os caracteres, enquanto os encodings UTF-8, UTF-16 e UTF-32 permitem representá-los em bytes. Hoje, UTF-8 é o mais comum.
Expressões regulares são padrões usados para manipular texto de forma flexível. Elas permitem encontrar, processar e substituir texto de maneira elegante. As expressões regulares são onipresentes em linguagens de programação, editores de texto e ferramentas de desenvolvimento.
1. O documento introduz os conceitos fundamentais de expressões regulares, incluindo alfabeto, cadeia de caracteres, concatenação e linguagens.
2. Apresenta os conceitos teóricos básicos de expressões regulares, como operações de união, concatenação e estrela.
3. Explica como aplicar expressões regulares na prática usando caracteres especiais e operadores em ferramentas como egrep e no Python.
Este documento discute encodings e como eles funcionam. Em três frases:
(1) Encodings mapeiam caracteres abstratos para sequências concretas de bytes, porém a mesma sequência pode representar caracteres diferentes dependendo do encoding. (2) Isso causava problemas de interoperabilidade até o Unicode criar uma tabela universal de caracteres e encodings como UTF-8 para transformá-los em bytes. (3) Apesar disso, LATIN-1 ainda é usado e pode corromper caracteres se confundido com UTF-8.
O básico que ainda deveríamos entender sobre Unicode e encondingsThiago Colares
Representar caracteres em computadores evoluiu muito nas últimas 3 décadas. Como funcionam exatamente: Unicode, conjunto de caracteres, ��� (diamante preto com interrogação), plain text, ASCII, UTF-8, BOM? Essas e outras coisas básicas que todo(a) desenvolvedor(a) ainda deveria saber em 2019.
Arquitetura de Sistemas Operacionais 32 x 64 BitsCleber Ramos
O documento discute as diferenças entre sistemas operacionais de 32 bits e 64 bits. Sistemas de 64 bits podem usar mais memória RAM, processar mais informações ao mesmo tempo e lidar melhor com aplicativos pesados, enquanto sistemas de 32 bits ainda são mais compatíveis com softwares existentes. A escolha depende do hardware e tipo de uso da máquina.
O documento discute sistemas numéricos, incluindo binário, hexadecimal, octal e decimal. Explica como cada sistema funciona e como eles são usados em computadores e eletrônica digital. Também aborda codificações como ASCII e UNICODE e como caracteres são representados numericamente.
Este documento fornece uma introdução às unidades de medida computacionais, explicando como os bits são agrupados em bytes e como diferentes conjuntos de bytes como kilobytes e megabytes são definidos. Também discute como os dados são representados internamente no computador usando sistemas numéricos binários, decimais e outros.
Entendendo como funciona a codificação de caracteres na Teoria e na Prática. Foco em especial para Unicode e como resolver a falta de suporte nativo de Unicode no PHP. Dicas para banco de dados, Editores de texto, IDE, além de dicas relacionadas a conversão e migração de codificação.
1) O documento introduz os conceitos de bits e bytes, unidades básicas usadas para medir armazenamento em computadores.
2) Bits funcionam como dígitos binários, podendo assumir apenas os valores 0 ou 1, enquanto bytes são grupos de oito bits.
3) A matemática binária funciona de forma semelhante à decimal, porém cada dígito pode ser 0 ou 1.
O objetivo da palestra é valorizar o esforço dos programadores que criaram os jogos clássicos do Atari 2600. Uma apresentação básica da arquitetura (em particular das limitações de CPU/memória e do chip TIA), montagem e rodagem, em um emulador, de um pequeno experimento, demonstrando a complexidade envolvida na criação de um jogo completo.
Palestrante
Carlos Duarte do Nascimento
Matemático pelo IME/USP e Gerente de Produto no Apontador, faz "artesanato" de software há 20 anos, defendendo plataformas e conteúdo livres.
O documento fornece uma introdução sobre registradores em sistemas x86, descrevendo os principais registradores de uso geral e especiais, como EAX, EBX, EIP e EFLAGS. Explica a organização dos registradores e diferenças entre as sintaxes AT&T e Intel.
O documento descreve e compara diferentes códigos digitais, incluindo BCD, Gray e ASCII. Explica como cada código representa números ou caracteres e as vantagens de cada um, como a capacidade do código Gray de detectar erros em transições entre números.
As classes de modelagem podem ser comparadas a moldes ou
formas que definem as características e os comportamentos dos
objetos criados a partir delas. Vale traçar um paralelo com o projeto de
um automóvel. Os engenheiros definem as medidas, a quantidade de
portas, a potência do motor, a localização do estepe, dentre outras
descrições necessárias para a fabricação de um veículo
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...Faga1939
Este artigo tem por objetivo apresentar como ocorreu a evolução do consumo e da produção de energia desde a pré-história até os tempos atuais, bem como propor o futuro da energia requerido para o mundo. Da pré-história até o século XVIII predominou o uso de fontes renováveis de energia como a madeira, o vento e a energia hidráulica. Do século XVIII até a era contemporânea, os combustíveis fósseis predominaram com o carvão e o petróleo, mas seu uso chegará ao fim provavelmente a partir do século XXI para evitar a mudança climática catastrófica global resultante de sua utilização ao emitir gases do efeito estufa responsáveis pelo aquecimento global. Com o fim da era dos combustíveis fósseis virá a era das fontes renováveis de energia quando prevalecerá a utilização da energia hidrelétrica, energia solar, energia eólica, energia das marés, energia das ondas, energia geotérmica, energia da biomassa e energia do hidrogênio. Não existem dúvidas de que as atividades humanas sobre a Terra provocam alterações no meio ambiente em que vivemos. Muitos destes impactos ambientais são provenientes da geração, manuseio e uso da energia com o uso de combustíveis fósseis. A principal razão para a existência desses impactos ambientais reside no fato de que o consumo mundial de energia primária proveniente de fontes não renováveis (petróleo, carvão, gás natural e nuclear) corresponde a aproximadamente 88% do total, cabendo apenas 12% às fontes renováveis. Independentemente das várias soluções que venham a ser adotadas para eliminar ou mitigar as causas do efeito estufa, a mais importante ação é, sem dúvidas, a adoção de medidas que contribuam para a eliminação ou redução do consumo de combustíveis fósseis na produção de energia, bem como para seu uso mais eficiente nos transportes, na indústria, na agropecuária e nas cidades (residências e comércio), haja vista que o uso e a produção de energia são responsáveis por 57% dos gases de estufa emitidos pela atividade humana. Neste sentido, é imprescindível a implantação de um sistema de energia sustentável no mundo. Em um sistema de energia sustentável, a matriz energética mundial só deveria contar com fontes de energia limpa e renováveis (hidroelétrica, solar, eólica, hidrogênio, geotérmica, das marés, das ondas e biomassa), não devendo contar, portanto, com o uso dos combustíveis fósseis (petróleo, carvão e gás natural).
Este certificado confirma que Gabriel de Mattos Faustino concluiu com sucesso um curso de 42 horas de Gestão Estratégica de TI - ITIL na Escola Virtual entre 19 de fevereiro de 2014 a 20 de fevereiro de 2014.
Em um mundo cada vez mais digital, a segurança da informação tornou-se essencial para proteger dados pessoais e empresariais contra ameaças cibernéticas. Nesta apresentação, abordaremos os principais conceitos e práticas de segurança digital, incluindo o reconhecimento de ameaças comuns, como malware e phishing, e a implementação de medidas de proteção e mitigação para vazamento de senhas.
Este documento fornece uma introdução às unidades de medida computacionais, explicando como os bits são agrupados em bytes e como diferentes conjuntos de bytes como kilobytes e megabytes são definidos. Também discute como os dados são representados internamente no computador usando sistemas numéricos binários, decimais e outros.
Entendendo como funciona a codificação de caracteres na Teoria e na Prática. Foco em especial para Unicode e como resolver a falta de suporte nativo de Unicode no PHP. Dicas para banco de dados, Editores de texto, IDE, além de dicas relacionadas a conversão e migração de codificação.
1) O documento introduz os conceitos de bits e bytes, unidades básicas usadas para medir armazenamento em computadores.
2) Bits funcionam como dígitos binários, podendo assumir apenas os valores 0 ou 1, enquanto bytes são grupos de oito bits.
3) A matemática binária funciona de forma semelhante à decimal, porém cada dígito pode ser 0 ou 1.
O objetivo da palestra é valorizar o esforço dos programadores que criaram os jogos clássicos do Atari 2600. Uma apresentação básica da arquitetura (em particular das limitações de CPU/memória e do chip TIA), montagem e rodagem, em um emulador, de um pequeno experimento, demonstrando a complexidade envolvida na criação de um jogo completo.
Palestrante
Carlos Duarte do Nascimento
Matemático pelo IME/USP e Gerente de Produto no Apontador, faz "artesanato" de software há 20 anos, defendendo plataformas e conteúdo livres.
O documento fornece uma introdução sobre registradores em sistemas x86, descrevendo os principais registradores de uso geral e especiais, como EAX, EBX, EIP e EFLAGS. Explica a organização dos registradores e diferenças entre as sintaxes AT&T e Intel.
O documento descreve e compara diferentes códigos digitais, incluindo BCD, Gray e ASCII. Explica como cada código representa números ou caracteres e as vantagens de cada um, como a capacidade do código Gray de detectar erros em transições entre números.
Semelhante a Minicurso de Encoding - resolvendo problemas com acentuação (#TDC2012 Goiânia) (6)
As classes de modelagem podem ser comparadas a moldes ou
formas que definem as características e os comportamentos dos
objetos criados a partir delas. Vale traçar um paralelo com o projeto de
um automóvel. Os engenheiros definem as medidas, a quantidade de
portas, a potência do motor, a localização do estepe, dentre outras
descrições necessárias para a fabricação de um veículo
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...Faga1939
Este artigo tem por objetivo apresentar como ocorreu a evolução do consumo e da produção de energia desde a pré-história até os tempos atuais, bem como propor o futuro da energia requerido para o mundo. Da pré-história até o século XVIII predominou o uso de fontes renováveis de energia como a madeira, o vento e a energia hidráulica. Do século XVIII até a era contemporânea, os combustíveis fósseis predominaram com o carvão e o petróleo, mas seu uso chegará ao fim provavelmente a partir do século XXI para evitar a mudança climática catastrófica global resultante de sua utilização ao emitir gases do efeito estufa responsáveis pelo aquecimento global. Com o fim da era dos combustíveis fósseis virá a era das fontes renováveis de energia quando prevalecerá a utilização da energia hidrelétrica, energia solar, energia eólica, energia das marés, energia das ondas, energia geotérmica, energia da biomassa e energia do hidrogênio. Não existem dúvidas de que as atividades humanas sobre a Terra provocam alterações no meio ambiente em que vivemos. Muitos destes impactos ambientais são provenientes da geração, manuseio e uso da energia com o uso de combustíveis fósseis. A principal razão para a existência desses impactos ambientais reside no fato de que o consumo mundial de energia primária proveniente de fontes não renováveis (petróleo, carvão, gás natural e nuclear) corresponde a aproximadamente 88% do total, cabendo apenas 12% às fontes renováveis. Independentemente das várias soluções que venham a ser adotadas para eliminar ou mitigar as causas do efeito estufa, a mais importante ação é, sem dúvidas, a adoção de medidas que contribuam para a eliminação ou redução do consumo de combustíveis fósseis na produção de energia, bem como para seu uso mais eficiente nos transportes, na indústria, na agropecuária e nas cidades (residências e comércio), haja vista que o uso e a produção de energia são responsáveis por 57% dos gases de estufa emitidos pela atividade humana. Neste sentido, é imprescindível a implantação de um sistema de energia sustentável no mundo. Em um sistema de energia sustentável, a matriz energética mundial só deveria contar com fontes de energia limpa e renováveis (hidroelétrica, solar, eólica, hidrogênio, geotérmica, das marés, das ondas e biomassa), não devendo contar, portanto, com o uso dos combustíveis fósseis (petróleo, carvão e gás natural).
Este certificado confirma que Gabriel de Mattos Faustino concluiu com sucesso um curso de 42 horas de Gestão Estratégica de TI - ITIL na Escola Virtual entre 19 de fevereiro de 2014 a 20 de fevereiro de 2014.
Em um mundo cada vez mais digital, a segurança da informação tornou-se essencial para proteger dados pessoais e empresariais contra ameaças cibernéticas. Nesta apresentação, abordaremos os principais conceitos e práticas de segurança digital, incluindo o reconhecimento de ameaças comuns, como malware e phishing, e a implementação de medidas de proteção e mitigação para vazamento de senhas.
7. Por que encoding?
▒ Computador é uma máquina de armazenar
e processar informação
▒ Informação é um conceito abstrato
▒ Computador não entende conceitos
abstratos
▒ Computador entende de bits, bytes,
números
12. Por que encoding?
▒ Como a gente representa uma
imagem num computador?
▒ Imagem pixels
▒ pixels números
▒ números bytes/bits
▒ bytes/bits algum formato
(png, jpeg, gif etc.)
14. Por que encoding?
▒ A imagem é uma informação
▒ Bytes / bits são dados
▒ Dados são concretos, informação é
abstrata
▒ Informação = dados + forma de
interpretálos
21. História
▒ Década de 60
▒ Mais de 60 maneiras diferentes de
representar caracteres
▒ Cada fabricante implementava do seu
jeito
▒ Bob Bemer:
▒ “Vamos uniformizar esse negócio...”
26. ASCII
▒ 128 caracteres (nenhum
acentuado)
▒ Intervalo válido
▒ Em decimal: 0 – 127
▒ Em binário: 0000000 – 1111111
▒ Em hexadecimal: 0x00 – 0x7F
27. ASCII
▒ 7 bits?
▒ Muitas máquinas usavam/usam o padrão
de 8 bits para 1 byte
▒ E esse bit sobrando aí?
▒ “Já sei... Vamos usar pra codificar
caracteres locais de cada país!”
43. Exemplo
▒ Você, aqui no Brasil, usando o DOS,
gostaria de dar o seu olá
▒ Você escreve:
▒ Ola!
▒ No Brasil, a gente usava o encoding
chamado “Codepage 850” (ou CP850)
44. Exemplo
▒ Essa sua sequência de 4 caracteres
(“Ola!”) é uma informação
▒ Informação só existe na cabeça dos
seres humanos
▒ Computador não conhece informação.
Computador conhece dados.
45. Exemplo
▒ Para um computador, não existe:
▒ Ola!
▒ O que existe são estes 4 bytes:
▒ 0x4F 0x6C 0x61 0x21
▒ Resultado:
47. Exemplo
▒ Mensagem foi codificada em CP850
▒ Todos os caracteres eram ASCII
também
▒ Na prática:
▒ A mensagem está em ASCII
▒ Todo computador entende ASCII
▒ Então blz!
62. O que é Unicode?
▒ Unicode é:
▒ Um padrão gigantesco
▒ Subdividido em muitas partes
▒ Unicode, ao contrário do ASCII:
▒ Não É uma tabela de caracteres
▒ Não É um encoding
63. O que é Unicode?
▒ Unicode TEM uma tabela de
caracteres:
▒ UCS: Universal Character Set
▒ Unicode TEM diversos encodings
▒ UTF8, UTF16, UTF32 (Unicode
Transformation Format)
64. UCS
▒ Tabela gigante de caracteres
(~100.000)
▒ Cada caractere possui um código,
chamado code point
▒ Code point é representado por U+ e
um número em hexadecimal
72. UTF8
▒ Compatível com ASCII entre
U+0000 e U+007F
▒ A partir de U+0080, usa mais de
1 byte
▒ Para os caracteres da língua
portuguesa, usa 1 ou 2 bytes
73. UCS e UTF
▒ O que eu preciso saber disso
tudo?
▒ Apenas o seguinte:
74. UCS e UTF
▒ Tabela de caracteres ≠ encoding
▒ Diferentes de representação
▒ Mais comum: UTF8
▒ UTF8
▒ Número variável de bytes por
caractere (em geral, 1 ou 2)
75. No mundo real de hoje
▒ Encodings mais usados nos
sistemas que rodam no Brasil:
▒ UTF8
▒ LATIN1
76. No mundo real de hoje
▒ U+0000 – U+007F
▒ Mesmos caracteres da tabela ASCII
▒ U+0000 – U+00FF
▒ Mesmos caracteres da tabela LATIN1
90. LATIN1 e UTF8
▒ O texto foi:
▒ Escrito em UTF8
▒ Enviado a outro sistema
▒ Como o outro sistema vai
adivinhar que o texto está em
UTF8?
91. Unicode
▒ Mas então não é só todo mundo
codificar seus caracteres usando
Unicode e vai dar tudo certo!?
92. Unicode
▒ Calma ...
▒ Em 1º lugar, Unicode não é um
encoding. Não existe “codificar
caracteres usando Unicode”.
▒ Em 2º lugar, não temos controle
sobre todos os sistemas do mundo.
Não podemos fazer com que todos usem
o mesmo encoding (nem deveríamos).
99. Como faz pra dar certo
▒ 2 dicas para evitar problemas de
encoding:
100. Como faz pra dar certo
▒ 1) Use sequências de escape
sempre que possível
▒ Para escrever “Programação”:
▒ Em Java:
▒ "Programau00e7u00e3o"
▒ Em HTML:
▒ <p>Programação</p>
101. Como faz pra dar certo
▒ 2) Faça conversões só quando
realmente for necessário
▒ Ao fazer qualquer conversão, SEMPRE
especifique o encoding
102. Como faz pra dar certo
▒ Vetor de bytes não é string!
▒ String não é vetor de bytes!
▒ O que é válido é:
▒ Decompor string em vetor de bytes +
encoding
▒ Compor string a partir de um vetor de
bytes + um encoding
103. Como faz pra dar certo
▒ Quando é que realmente precisamos
fazer conversões?
▒ Quando fazemos entrada/saída
105. Como faz pra dar certo
▒ Você vai enviar texto em uma
requisição HTTP?
▒ Converta a string para bytes usando
algum encoding
▒ Avise ao servidor que você vai usar
esse encoding
▒ Envie os bytes
106. Como faz pra dar certo
▒ Errado:
▒ Content-Type: text/plain
▒ Certo:
▒ Content-Type: text/plain; charset=utf-8
▒ Content-Type: text/plain; charset=iso-8859-1
107. Como faz pra dar certo
▒ Vai receber um XML?
▒ Receba o conteúdo (bytes)
▒ Repasse diretamente os bytes para a
sua biblioteca de processamento de
XML
108. Como faz pra dar certo
▒ Não preciso me preocupar com
encoding ao processar XML?
▒ Em geral, não!
▒ XML informa seu encoding dentro do
próprio documento
▒ <?xml version="1.0" encoding="utf8"?>
▒ (deveria, pelo menos!)
109. Como faz pra dar certo
▒ “Tem que passar o encoding, tem
que passar o encoding...”
▒ E se eu não passar o encoding?
Não funciona?
110. Como faz pra dar certo
▒ Funciona!
▒ ...às vezes!
▒ O que acontece se eu não
especificar encoding?
▒ Nenhum encoding será usado!
▒ Certo!?
113. Como faz pra dar certo
▒ Se você não especificar
encoding, será usado o encoding
padrão da plataforma
▒ E isso é ERRADO!
▒ É um perigo!
▒ É um absurdo!
114. Como faz pra dar certo
▒ Plataformas MUDAM!
▒ Configurações de ambiente MUDAM!
▒ Encoding padrão MUDA!
115. Java: jeito errado
▒ byte[] meusBytes =
string.getBytes();
(...)
String minhaString =
new String(bytes);
▒ Está dependente de plataforma!
123. Conclusões
▒ Causas são sempre as mesmas:
▒ String sendo lida e/ou escrita usando o
encoding errado
▒ Uso indevido do encoding padrão da
plataforma
▒ Causa raiz de todo o problema:
▒ Ambiguidade: mais de uma maneira de
representar a mesma informação
124. Conclusões
▒ A solução é:
▒ Lembrar: não existe string sem
encoding!
▒ Informar o encoding toda vez que
fizer entrada/saída
125. Referências
▒ The Absolute Minimum Every
Software Developer Absolutely,
Positively Must Know About
Unicode and Character Sets (No
Excuses!)
▒ http://www.joelonsoftware.com/articles/U
126. Referências
▒ Lista de caracteres Unicode e
suas diferentes representações
▒ http://www.fileformat.info/info/unicode/
▒ The Unicode Consortium
▒ http://unicode.org/
128. Adendo
▒ “José” em UTF8 gasta 8 bytes?
▒ http://en.wikipedia.org/wiki/Byte_order_
▒ Encoding padrão da plataforma?
▒ Em geral, é errado usar
▒ Em raras situações, é correto. Ex:
upload de arquivo no cliente.
129. Contatos
▒ Andru00e9 Willik Valenti
▒ awvalenti@gmail.com
▒ @awvFi
▒ Andrei de Oliveira Tognolo
▒ andreitognolo@gmail.com
▒ /andreitognolo