Quantos bytes uma variável float ocupa? E uma int?

Bom, dias atrás um colega virou pra mim e perguntou:

- Quantos bytes tem uma variável float?

Respondi de bate-pronto:

- Depende... Mas na maioria dos casos são quatro.

E mostrei pra ele um velho truque para saber quantos bytes um tipo de variável ocupa (em C):

printf("%i",sizeof(float));    /* troque o float para o tipo desejado */

Então, em 99% dos casos você vai ver que o float ocupa quatro bytes (32 bits). O grande problema em C é o tal do int, que depende do processador e/ou do compilador. Normalmente o pessoal que programa para PC não se preocupa muito com isso, mas para sistemas com microcontroladores pode dar uma dor de cabeça quando for salvar a variável (numa EEPROM por exemplo). A melhor opção é não usar int. Não custa nada incluir a inttypes.h e usar os tipos dela (int8_t, uint8_t e por aí vai) ou criar os seus próprios typedefs num canto qualquer.

Pois então, depois da pergunta fiquei curioso e resolvi testar alguns compiladores e sistemas diferentes. O programa de testes é este:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#include <stdio.h>

int main(int argc, char** argv) 
{
    
    printf("\nInt = %i bytes",sizeof(int));
    printf("\nFloat = %i bytes",sizeof(float));
    
    printf("\nFloat* = %i bytes",sizeof(float*));
    printf("\nInt* = %i bytes",sizeof(int*));
    printf("\n\n\n");

    
    return 0;
}

As linhas 6 e 7 são pra mostrar a quantidade de bytes dos int e float. Incluí logo depois (linhas 9 e 10) um teste para os ponteiros para estes mesmos tipos. Claro que os ponteiros ocuparão a mesma quantidade de bytes, mas vai que alguém resolveu inventar moda. Nunca se sabe...

Para começar, o bom e velho Dev C que mantenho instalado e uso quando preciso gerar um programinha rápido. E o resultado foi este:

Compilador Dev C
Ele usa o GCC 4.8.1 para 64 bits e o resultado foi 4 bytes para int e float e 8 bytes para os ponteiros. Testado no Windows 7 de 64 bits. Aí vemos que o int não segue o número de bits do sistema, parece que ele vai ficar nos 32 bits mesmo.

Agora os testes com compiladores online, via browser (como é bom viver no futuro):

Compilador C

Compilador C
No primeiro caso o jdoodle deu nó (warnings) com o %i no printf, mas funcionou direitinho (o sizeof retorna um int). E junto com o Codingground deu o mesmo resultado do Dev C.

Dos compiladores online o que deu uma pequena diferença foi o Codechef com ponteiros de 32 bits:

Compilador C

Um sistema diferente que testei foi o Nios II da Altera, numa plaquinha chinesa com uma FPGA Cyclone IV (já tinha tudo ligado e instalado no PC):
Console NIOS II
O NIOS II pode ser definido como um "microcontrolador por software" e o teste confirma a sua natureza de 32 bits.

E nos microcontroladores? Como não queria perder tempo ligando uma placa e instalando uma IDE resolvi testar no CodeWarrior 6.3 que tenho instalado numa máquina virtual com windows XP. Nele eu posso simular o software sem precisar gravar numa placa.

Usei o Wizard dele e gerei um programa mínimo com o Processor Expert:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* Code Warrior */

int var_int,var_float,pointer_float,pointer_int,res;

void main(void)
{
  /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
  PE_low_level_init();
  /*** End of Processor Expert internal initialization.                    ***/

  /* Write your code here */
  /* For example: for(;;) { } */    
  
  for(;;) 
  {  
    var_int = sizeof(int);
    var_float = sizeof(float);
    pointer_float = sizeof(float*);
    pointer_int = sizeof(int*);    
    
    res = var_int + var_float + pointer_float + pointer_int;
    
  }
}

Salvei os resultados dos sizeof em variáveis para aparecer no simulador e a soma ali na linha 21 é só pra ele gerar o código. Sem ela o CodeWarrior dá um de esperto e não compila as linhas anteriores, já que não serviriam pra nada.

Algo interessante é que numa das telas do wizard dá pra escolher o tamanho do double, mas não o tamanho do float (ou não tem ou é IEEE32):
CodeWarrior HCS08

No primeiro teste selecionei um microcontrolador MC9S08QE128 de 8 bits:
CodeWarrior HCS08

E tá lá o float de 32 bits (4 bytes). O interessante (e esperado) são os ponteiros para 16 bits. Já o int são dois bytes.

Agora passando para Coldfire V1 (MCF51QE128 de 32 bits) a tela do wizard muda e temos a opção do float e double de 64 bits.

CodeWarrior Coldfire Wizard
E o resultado:
CodeWarrior Coldfire
Eita, temos um problema aí. Eu selecionei o float de 64 bits, mas ele saiu com 32 bits. Provavelmente um erro na tela do wizard. Os ponteiros são de 32 bits, de acordo com a arquitetura dos Coldfires. Era pra testar com o CodeWarrior para Coldfire V2, mas ele está instalado num HD antigo e não quis abrir meu PC pra fazer o teste.

Acho que já ficou claro então que o float é de 32 bits e o int varia. Mas fiz um último teste, com o saudoso Turbo C. Como vivemos no futuro posso rodar o compilador ancião diretamente no browser:

Turbo C

O Turbo C é do tempo do DOS e o resultado não poderia ser outro:
Turbo C
É igual ao do microcontrolador de 8 bits da Freescale: int de 2 bytes, float de 4 e endereços de 16 bits. Era assim nos tempos anteriores ao Pentium.

Por dentro do Sega Game Gear

Sega Game Gear

E para concluir os posts (e vídeos) sobre videogames da Tectoy, vamos dar uma olhada no Game Gear. Já falei dele lá em 2009, mais especificamente sobre os problemas com os capacitores eletrolíticos. Este post seria então apenas um complemento do que já falei lá.

Primeiro segue o vídeo:


No vídeo eu não mostrei o Game Gear onde foi feita a troca dos capacitores. É o mesmo do post de 2009, mas segue a foto com maior resolução:

Sega Game Gear PCB

O VDP é o CI 315-5377 e ele vai ligado a uma memória RAM externa de 32k x 8 bits. Já o processador Z80 está dentro do CI 315-5378A que inclui também o controlador de I/Os e o do LCD. Ele usa uma memória externa de 8k x 8 bits. A placa do áudio, com saída para alto falante ou fone de ouvido é esta aqui, com um CI TBA2822:

Sega Game Gear audio PCB

E a placa da fonte, de onde saem o +5V para a parte lógica e o 34V para o LCD, com um CI MB3775:
Sega Game Gear placa da fonte

Agora as placas dos dos cartuchos. A primeira foto é do cartucho Sonic original da Sega. A segunda foto é do cartucho "genérico" Rei Leão (Lion King):

Sega Game Gear Cartridge PCB

Cartucho de Game Gear Genérico

Por dentro de um osciloscópio Engro ORC-10 ou "Quer ganhar um osciloscópio velho? Leia aqui!

Osciloscópio Engro ORC-10
Este osciloscópio (Engro ORC-10) já foi assunto de um post lá em 2012 e faltava um vídeo pra ele. A foto acima, do post antigo, é de como ele estava em 2012. Ele ficou na casa da minha mãe e só o trouxe pra casa quando me mudei. No apartamento onde morava não tinha lugar pra ele...

Pois então, depois desses anos lá na casa da minha mãe, ele agora está assim:

Osciloscópio Engro ORC-10
Os plugs bananas foram para na fonte de bancada que meu sobrinho montou enquanto fazia o curso técnico. Os dois knobs brancos que faltam eu nem sei o que aconteceu. Por dentro ele não foi tocado, até a gravação do vídeo abaixo:


E é isso mesmo pessoal, eu tenho muita coisa acumulada aqui que era pra um dia consertar ou fazer algo de útil, mas que não tenho tempo pra mexer. Está na hora de esvaziar um pouco o quarto de bagunça laboratório. O osciloscópio será de quem me mandar um e-mail pedindo para marcar um dia para vir pegar aqui em casa e sem me perguntar onde eu moro... ;-)

Conversor de arquivos binários para headers em C (arquivos .h)

Conversor Binario para header (.h)

Algumas vezes quando preciso fazer algo mais rápido ou automatizado escrevo umas linhas de código e gero um programinha para resolver o problema. Nada muito elaborado e só para problemas pontuais. Geralmente o código é usado só uma vez e fica esquecido em alguma pasta. E acaba que preciso novamente do mesmo código anos depois e não lembro onde deixei ou, pela ação de Murphy, apaguei o programinha numa limpeza ou formatação.

Para evitar que isso aconteça vou ver se salvo estas pequenas ferramentas no Github. Assim terei uma cópia de segurança fora dos meu PC e backups, além de (quem sabe) poder ser útil para alguém. Um outro beneficio é que terei que ter mais cuidado com o código e comentários, afinal estará a vista de outras pessoas.

Para começar coloquei o programa "bintoh" que foi feito para um projetinho que estou desenvolvendo. Minha necessidade era a de converter um arquivo binário que antes era gravado em uma EPROM (.bin) em um arquivo header em C (.h), para ser incluído no código de um projeto com microcontrolador (ARM Cortex M3). Funciona por linha de comando (veja imagem acima, rodando no PowerShell), bastando informar o nome da tabela, arquivo de entrada e arquivo de saída. Ele gera também um define com o tamanho da tabela.

Antigamente eu criava a maioria destas ferramentas de software em VB6 e depois passei a usar (e ainda uso) o VB.NET 10. Mas eu tento variar de vez em quando com Python, Javascript ou o bom e velho C puro. O bintoh era pra ter sido feito em VB.Net também, mas acabei fazendo em C já que não precisa de uma UI cheia de flu-flus...

Como é uma ferramenta para uso pessoal ele tem suas limitações (e falta delas). Ele não checa as extensões dos arquivos, que só precisa existir para ser convertido. Isso acabou transformando o programa em um conversor "universal" de arquivos para headers C. Para mim isso é uma vantagem até e devo usar em breve para outra coisa aqui.

Aproveitando a oportunidade deixa eu testar aqui o formatador de código hilite.me (Vou precisar formatar outros códigos pra postar aqui, num futuro post). O código abaixo é do bintoh e até que ficou bonito:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*
    Bintoh - Binary to c header file converter
    Rodrigo Feliciano - 08/02/2017
*/
#include "stdio.h"

#define MAX_FILE_SIZE   524288  /* bytes */

int main(int argc, char *argv[]) {
    FILE *infile;   /* Binary file - input */
    FILE *outfile;  /* Header file - output */
    int chrin = 0;  /* Temp char input */
    int bytecount = 0;
    int i = 0;
    
    if(argc == 4)
    {
        infile = fopen(argv[2],"rb");   /* open input file for binary read */
    
        if(infile == 0)
        {
            printf("\n\nInput file error...\n\n");    /* No file... */
        }else
        {
            fseek(infile, 0L, SEEK_END);
            bytecount = ftell(infile);      /* Get the number of bytes in the file */
            rewind(infile);
            
            if(bytecount <= MAX_FILE_SIZE)
            {
                outfile = fopen(argv[3],"w");   /* Open the output file for write */
                
                if(outfile == 0)
                {
                    printf("Output file error...");
                }else
                {
                    fprintf(outfile,"/* Bintoh - Bin to Header file converter */\n");
                    fprintf(outfile,"\n#ifndef %s_H_",argv[1]);
                    fprintf(outfile,"\n#define %s_H_\n",argv[1]);
                    fprintf(outfile,"\n#define    FTABLE_SIZE    %i",bytecount);
                
                    fprintf(outfile,"\n\nconst unsigned char %s[%i] = \n{\n",argv[1],bytecount);
                
                    while((chrin = fgetc(infile)) != EOF)
                    {
                        if(i >= 7)  /* Number of items in a row - 1 */
                        {
                            fprintf(outfile,"0x%02x,\n",chrin); /* Last item in a row */
                            i=0;
                        }else if(i == 0)
                        {
                            fprintf(outfile,"    0x%02x,",chrin);   /* first item in a row */
                            i++;
                        }else
                        {
                            fprintf(outfile,"0x%02x,",chrin);   /* item in a row */
                            i++;
                        }
                    }
                
                    fprintf(outfile,"};\n\n\n#endif /* %s_H_ */",argv[1]);
                    fclose(outfile);
                }
            }else
            {
                printf("\nInput file too big!");
                printf("\nMaximum file size: %i bytes",MAX_FILE_SIZE);
                printf("\nInput file size: %i bytes\n\n",bytecount);
            }
            fclose(infile);
        }
    }else
    {
        printf("\nCreate a C Header file from a binary file\n");
        printf("\nusage: bintoh [table_name] [input_filename] [output_filename]\n\n");
    }
    
    return 0;
}

Por dentro do Master System da TecToy

Master System TecToy

Continuando os posts sobre videogames, desta vez trago pra vocês o Master System da TecToy. Na foto acima vemos o Master System e o Master System II. O II pode confundir um pouco, pois a TecToy chamou ele de 2, mas só muda a ROM interna.

Mas vamos lá, primeiro o vídeo e depois as fotos e comentários, como sempre:



A foto da placa do videogame (PCB):

PCB do Master System TecToy

O CI grandão no centro em cima, é um Z80 e os dois CIs de baixo são as memorias ligadas a seu barramento. A RAM é uma D4168C da NEC (8k x 8) e a ROM é a que fica entre o Z80 e a RAM:
CPU do Master System TecToy

O CI 315-5216 é o controlador de IOs. Os joysticks vão ligados diretamente nele:
315-5216 Master System TecToy

O encoder RGB é o manjado MC1377P:
MC1377 na placa do Master System TecToy

E o VDP 315-5124 com duas memórias iguais a RAM do Z80. Isso dá 16k x 8 para o vídeo:
VDP 315-5124 na placa do Master System TecToy

Por dentro de um Sega Power Base (conversor de Master System para Mega Drive)

Aproveitando o post (e o vídeo) anterior trago pra vocês uma vista interna do adaptador de cartuchos de Master System para Mega Drive da TecToy (conhecido lá fora como Sega Power  Base). Ele não tem nada demais, sendo só um conector para cartuchos de Master System na parte de cima e uma placa com as conexões para a entrada de cartucho do Mega Drive. Por fora ele é assim:


E segue o "por dentro" em vídeo:



A vista por baixo do aparelho:

Existe uma versão dele no formato de um cartucho, que não é tão estilosa mas é mais prática. E também existe a versão feita em casa. Existe um tópico clássico sobre como montar um (com o esquema) lá no AtariAge. Não funciona com todos os jogos, mas já quebra um galho. A diferença para estes jogos parece ser o problema de o Mega Drive não ter um ROM de inicialização, como o Master System. No adaptador original isso é contornado com uma CK2605 (PAL?  GAL?) ali no canto da placa:
O código para este CI e mais informações estão disponíveis lá no SMSPower.

Por dentro de um Mega Drive americano (Sega Genesis)

Sega Genesis - Mega Drive Americano

Esse aí de cima é meu Sega Genesis (Mega Drive americano) velho de guerra. Pra dar uma ideia de como faz tempo que ele está comigo basta dizer que comprei o videogame no Ibazar. Ele estava parado já há alguns anos e agora vai pra um novo dono. Mas antes disso vamos ao nosso tradicional "por dentro". Primeiro em vídeo:

[Vídeo retirado em 24/05/2017 - Estava fora de foco, tenho que regravar!]

O vídeo ficou ruim e meio sem foco e não tive tempo de regravar. Tenho que ver isso no celular antes de gravar novos vídeos. Mas, para compensar, seguem as fotos começando por uma vista geral da placa do console:
Sega Genesis - Mega Drive Americano - PCB

O processador é um Motorola MC68000 de 16 bits rodando a 7,6MHz. Ele vai ligado a duas memórias RAM de 32k x 8 bits. 
Sega Genesis - Mega Drive Americano - Processador

Agora o CI CXA1145, encoder RGB para vídeo composto. Ali no canto esquerdo dá pra ver os dois reguladores 7805 sem o dissipador de calor. Aquele DB9 ao lado do modulo de RF não tem furo no painel e não sei qual a sua função.
Sega Genesis - Mega Drive Americano - Modulador de RF

O VDP 315-5313 vai ligado a duas memorias de 64k x 4bits dual port :
Sega Genesis - Mega Drive Americano - VDP

O Z80 e sua RAM 6264 (8k x 8) responsável pelo som e pela retrocompatibilidade com jogos do Master System. Ali em cima no canto esquerdo vemos o CI do som Yamaha YM2612:
Sega Genesis - Mega Drive Americano - Z80

O Mega Drive 1 tem um CI amplificador de áudio (CXA-1034 2 x 30mW) só para a saída de fones. Nos fones o som é estéreo, mas na saída de RF ele é mono.
Sega Genesis - Mega Drive Americano - Amplificador de áudio

A placa do Joystick com um CI 74HC157 (Mux 2x1):

Joystick Mega Drive

Como editar arquivos 3GP no Sony Vegas

Pois é, consegui abrir os arquivos 3GP no Sony Vegas (ver post anterior). Encontrei uma solução num site em espanhol que não consigo encontrar de novo, então fico devendo o link e os créditos.

É bem simples, basta instalar o QuickTime e "magicamente" o Vegas consegue "enxergar" os arquivos 3GP. Dizem que funciona também se instalar o "QuickTime Alternative", mas não testei.

Por dentro de um Pikachu do McDonalds e teste de câmera do celular novo

Desde que comprei o celular novo (Blu Dash X) fiquei de gravar um vídeo para ver se (finalmente) posso aposentar a minha câmera. Como não queria só filmar qualquer coisa e sim fazer um vídeo para o canal, peguei a seguinte cobaia para um "por dentro":

Pikachu do McDonalds

O resultado está no vídeo abaixo:



O brinquedo é destes que se "ganha" quando se compra um McLanche Feliz e é de 2012. Aqui as fotos do bichinho, já com o fio preto ressoldado:
Pikachu do McDonalds

E a placa eletrônica do Pikachu (Dois resistores de 30M em série? Sim, para o sensor de toque):
Então, sobre o celular. A filmagem ficou bem melhor que a da minha câmera (Fuji S1800). O problema é que ele gera arquivos no formato 3GP que o Sony Vegas não gosta. Tive que converter para AVI no VLC. Isso gera mais alguns minutos na produção de um vídeo e uma perda na qualidade do original. Este do Pikachu foi bem curto, mas as vezes eu filmo mais de meia hora em um único vídeo e como meu tempo é curto não sei se aposentarei a câmera tão cedo. Preciso pesquisar uma forma de trabalhar diretamente com os arquivos 3GP.

Agora sobre a gambiarra do tripé. Eu não tinha aqui um suporte próprio para celular e tive que improvisar. Usei um pedaço de alumínio que sobrou da instalação das janelas aqui de casa, uma porca catada nas caixas de parafusos e um elástico. Ficou assim ó:
Suporte improvisado para celular

Suporte improvisado para celular

Pequena retrospectiva de 2016 e o que espero para 2017

E lá vamos nós, ou melhor: Lá vou eu, pois sou só eu que cuido disso aqui...

Primeiro, revisando as metas da versão anterior (de 2015):


1. Pelo menos 50 posts no blog. Para bater a marca de 2014.

Ok, foram 51 posts. Seriam mais, mas quando vi que tinha alcançado a meta em Novembro eu parei. Tinha posts para fazer, mas vão ficar para 2017.

2. Gravar, editar e publicar 20 novos vídeos no canal.

Ok, foram 26 vídeos.

3. Atingir 5000 inscritos no canal. Para isso é preciso aumentar em 2 ou 3 a média de inscritos por dia. Quanto a visualizações, no ritmo atual deve chegar a um total de 800.000 até o fim do ano. Então uma meta de chegar a 1 milhão não é tão absurda.

Ok para os inscritos (foram mais de 5500), já as visualizações ficaram em pouco mais de 950 mil. A marca de 1 milhão só deve ser alcançada no fim de Janeiro de 2017.

4. Divulgar mais o que eu faço. De certa forma eu tenho receio (ou mesmo vergonha) de contar aos outros sobre o Pakéquis. Muitas pessoas próximas nem sabem que ele existe.

Eu continuo sendo uma negação em marketing. De vez em quando posto alguma coisa em um grupo do Facebook e tentei voltar ao Twitter. Preciso melhorar isso...

5. Terminar o amplificador do PC.

Não deu. Até comprei um kit pronto com TDA2030 pra acabar de vez com isso, mas está com um grave problema de ronco da rede. Quando e se arrumar isso eu posto tudo.

6. Ler mais livros de ficção. Antigamente eu lia muito mais ficção do que hoje. Tem vários volumes esperando na estante e no projeto Gutenberg.

Não deu também. Li alguns contos apenas, nenhum livro completo. Tentei ler "O Homem do castelo alto" mas a leitura não foi pra frente.

7. Escrever um livro (ou dois) de ficção. Nos primórdios da Internet participei de listas de discussão sobre literatura e escrevi alguns contos e histórias curtas. Tudo perdido, já que as listas morreram. Nesta época surgiu a ideia para um livro mais ou menos de terror que nunca foi pra frente. Conversando com o Lucas sobre publicar na Amazon me pareceu um bom momento pra retomar o projeto.

O livro não saiu, embora esteja com a história toda na cabeça. Mas escrevi três continhos para uma coletânea (disponível na Amazon).

8. Anotar as coisas durante o ano pra fazer um post melhor que este no fim do ano. E publicar no dia 31 de Dezembro.

Tudo anotado durante o ano, só não deu pra escrever e publicar no dia 31 de dezembro por causa das minhas férias. E por falar nisso, minhas férias resumidas em uma foto:

Férias na rede


________________________________________

Agora vamos a retrospectiva de 2016:

1. Números:
- Como já disse acima, foram 51 postagens. 

- Já o canal no Youtube chegou a mais de 5500 inscritos em 31 de Dezembro e mais de 950.000 visualizações. Vídeos novos foram 26.

- Ambos (o canal e o blog) tiveram um bom crescimento nos acessos. Preciso calcular os números corretos pra postar aqui.

2. "Trecnologias" usadas por aqui:
Mantido o mesmo do ano passado e sem upgrades exceto pelo celular. Acabei quebrando a tela do meu LG Optimus Black (P970 2011) durante as férias, bem no fim do ano. Por coincidência alguém estava vendendo um Blu Dash X novinho e por um bom preço. Talvez eu faça um review dele.

3. Melhor post de 2015: "50 coisas sobre eletrônica (e eletricidade)". Este rendeu bastante, com muitos compartilhamentos e cópias por aí.

4. Evento mais marcante: Nascimento do Rafael, meu terceiro filho. ;-)

5. Grande dor de cabeça: Após vários anos perdi a batalha aqui em casa e comprei um carro pra dona esposa.

6. Projetos incompletos: Meu amplificador de PC não andou como esperado. O primeiro post sobre o assunto saiu em Outubro de 2013 e depois de muitas mudanças no projeto ele ainda não está pronto. (nota: mesma linha do post do ano passado)

- O índice de revistas de eletrônica está andando a passos de tartaruga, mas pelo menos ele anda. O Rinaldo está ajudando na criação de um site com os dados dos arquivos.

- Tentei voltar a escrever os posts de aleatoriedades de Sexta-feira, mas desisti. Consome muito tempo para juntar as coisas durante a semana.

*** Agora um pouco de aleatoriedades ***

8. Noticias da área que chamaram minha atenção:
- Microchip compra a Atmel: Minha aposta é que a linha PIC morra em poucos anos.

9. Produtos que chamaram minha atenção:

- Estou de olho num Arduino Due para um projeto antigo.

10. Livros técnicos que li (ou usei):
- "The Potentiometer Handbook" da Bourns. Antigo (70s) e ainda muito útil.

- "Designing Analog Chips" de Hans Camenzind. Do criador do 555, muitas histórias e parte técnica muito boa.

- "Arduino Cookbook" de Michael Margolis. Tudo que tem no livro tem na Internet.

- "Analog Seekrets" de Leslie Green. Livro muito bom, escrevi sobre ele aqui.

- "Design and Construction of Tube Guitar Amplifiers" de Robert Megantz. Achei num sebo, livro (bem) básico sobre amplificadores valvulados. São apenas 150 páginas e acho que foi escrito mais para músicos.

11. Livros "comuns" (que não são técnicos):
Não leio tantos livros como antigamente e ando preferindo coletâneas de contos e histórias curtas. Destas histórias duas ficaram na memória:

- "The Machine Stops" de E. M. Fosrter publicada em 1909. É desconfortável a semelhança entre a Máquina e a Internet.

- "The Last Question" de Isaac Asimov (1956). Bilhões de anos de história em menos de 10 páginas. Não sou fã de Asimov, li muito pouco dele, mas essa já está entre as melhores histórias de ficção científica que li.

12. Melhor do twitter: Did I Just Win? Uma bela demonstração de engenharia social.

13. Melhor site: Ken Shirriff's blog - Excelente blog com um nível altíssimo de qualidade de posts. A série sobre o Xerox Alto é uma aula de debug de hardware.

14. E no Facebook? Nada... Não achei nada bom sobre eletrônica.

15. Melhor ferramenta na Web: Radio Garden - Google Maps + rádios Web. Ideia simples e bem implementada.

16. Melhor filme com eletrônica: "Spectral" (Netflix). Uma boa ficção científica com tudo explicadinho e boas cenas de ação. Soluções técnicas e caracterização lá dos laboratórios certinhas.

17. Outros filmes que assisti (e que valem mencionar):

- Consegui ver dois filmes no cinema em 2016: "Doutor Estranho" e "Rogue One". O primeiro não é o melhor filme de super-herói do ano ("Deadpool" levou fácil), mas é legal. Só me incomodou por o Doutor ter ficado muito engraçadinho, cheio das piadinhas. Já "Rogue One" surpreendeu. Pegaram um pedaço bem pequeno do universo de "Guerra nas Estrelas" e fizeram um filmão. Lembra muito os antigos filmes sobre a Segunda Guerra Mundial.

18. Séries e mini-séries:

- Diminuí o ritmo das séries. "Marvel's Agents of Shield" melhorou de novo com o "motorista fantasma". "Stranger Things" foi a grande surpresa para mim. Acho que foi a primeira vez que ouvi a palavra "Heathkit" na TV. "WestWorld" não foi tudo o que eu esperava (pra que laboratórios escuros daquele jeito?). "Game of Thrones" deixou o lado novelão e partiu pra porrada.

19. Jogos:
- No início de 2016 joguei e terminei "Call of Duty: Black Ops". Mais do mesmo, com algumas partes legais com os helicópteros russos.

- Continuando a saga "Angry Birds" terminei o "Seasons" e o "Rio" com três estrelas em todas as fases. Agora estou no "Space". Ainda para passar o tempo na hora do almoço...

20. Música:
Algumas músicas que descobri e que mais ouvi em 2016 (meu TOC me faz ouvir repetidamente as mesmas músicas):

----------------------------------

E pra 2017? Bom, tenho algumas metas:

1. Pelo menos 50 posts no blog (de novo).

2. Gravar, editar e publicar 30 novos vídeos no canal. Os vídeos terão prioridade daqui pra frente. O blog passará a ser um complemento do canal e não o contrário (como era até agora).

3. Atingir 10000 inscritos no canal. Meta alta, mas possível com marketing, marketing e marketing.

4. Divulgar mais o que eu faço. Um pouco de marketing não faz mal a ninguém...

5. Terminar o amplificador do PC. Vou deixar esta meta aqui... Vai que dá certo.

6. Ler mais livros de ficção. Pelo menos cinco. Aquele "Os meninos do brasil" que eu comprei no sebo lá no século passado finalmente será lido?

7. Escrever um livro (ou dois) de ficção. A história está pronta, com começo, meio e fim, só falta botar no papel. O segundo tem um esqueleto de história. E tem uma terceira história só com um começo e fim que precisa de um meio.

9. Usar os dados dos índices de revistas de eletrônica para gerar um site no estilo "Guia dos Quadrinhos" com as capas das revistas.

10. Comprar uma chave Inglesa. Por várias vezes em 2016 precisei de uma e não tinha...

11. Criar um blog para assuntos fora da eletrônica e para colocar umas fotos aleatórias que tenho aqui.

8. Anotar as coisas durante o ano pra fazer um post melhor que este no fim do ano. E publicar no dia 31 de Dezembro.