domingo, 23 de junho de 2019

Dia desses o povo lá do grupo de MSX estava procurando por cartuchos com a linguagem Logo para MSX. Eu lembrava que uns 20 anos atrás eu tinha comprado um lote de cartuchos da Sharp, talvez tivesse um Hot-Logo lá. Mas não, só tinha Hot-Arte e Editor de Música.

Bem, mas sempre dá para regravar a EPROM né? O problema é que tanto o Hot-Arte quanto o Editorde Música tem 16kb, e o Hot-Logo tem 32kb. E isso é um problema, porque essa placa da Sharp não tem o pino do A14! Para economizar metal eles nem colocaram a trilha no conector, e sem A14 não tem como aumentar de 16kb para 32kb né? 



Mas com um pouco de criatividade a gente sempre dá um jeito haha. Olha só, o Hot-Logo é um cartucho em Assembly, e o Editor de Música é um cartucho em BASIC. Como a placa é a mesma para os dois, significa que tem que ter um sinal no conector que diferencia entre asm e basic.

Aí eu dei uma bizoiada no esquemático do Hotbit, e tcharam: o pino 1 do conector, que tem trilha no cartucho, é o /CS1; e esse sinal, pelo esquemático, é /CS1=(A15 AND /A14).

Agora fechou! O Logo só usa os addrs entre 4000 e BFFF. Nessa faixa, o /CS1 vai ser 0 de 4000 a 7FFF, e 1 de 8000 a BFFF, que é exatamente a mesma coisa que o A14! Então é só puxar o /CS1 para o A14 da eprom e pronto. Funcionou direitinho!


Para quem quiser um totorial com as fotos da modificação, coloquei aqui:
https://sites.google.com/site/ricbitmsx/hardware-development/adapting-16kb-sharp-cartridge

quarta-feira, 1 de maio de 2019

Livros novos da semana:
Generatingfunctionology: Eu já tinha em pdf (free no site do autor), mas é tão bom como referência que comprei uma versão em papel. Pode parecer redundante para quem já tem o Concrete, mas esse livro é muito mais malandro, ensina até a técnica do Óleo de Cobra para resolver somatórias (e funciona mesmo, é bem boa essa técnica).
Elliptic Tales: Faz tempo que eu estava querendo aprender funções elípticas, e esse livro aqui bateu certinho com o meu nível. Os autores são bons em visualização, deu para imaginar bem os truques de resolução. Por exemplo, a assimetria das cônicas: o círculo e a elipse são fechados, mas a parábola e a hipérbole são abertas. Mas não é bem assim, a parábola e a hipérbole são fechadas também, você que está desenhando no plano errado! Usando o plano projetivo ao invés do plano cartesiano dá para ver direitinho onde a parábola fecha.
99 Variations on a Proof: É um livro de humor haha. Ele pega um problema bobo (achar as raízes de x^3-6x^2+11x-6=2x-2), faz 99 demonstrações diferentes. Tem umas que são tradicionais (demonstração por álgebra, por topologia, pelo axiomas, por matrizes), umas que são bem curiosas (demostração mecânica, eletrostática, musical), e outras que são da zoeira mesmo (demonstração por calculadora, por blog, por email para o orientador, por experiência mística).
Geometric Folding Algorithms: Eu comprei esse para aprender a geometria dos origamis (com régua e compasso você só faz equações quadráticas, com origami você faz cúbicas). Mas acabou que eu gostei mais das dobraduras 1D do que das dobraduras 2D! (A geometria de dobrar uma linha é a mesma geometria dos espirógrafos e dos braços robóticos).
Games, Puzzles and Computation: Esse livro mostra uma álgebra para calcular complexidade de jogos e puzzles. Por exemplo: o 15-puzzle é P, o Sudoku é NP-completo, o Othello é PSPACE-completo, o Go japonês é EXPTIME-completo, o Go chinês, com regra de superko, ninguém sabe ainda! Mas a parte curiosa é que ele faz uma álgebra completa só com OR e AND. Na minha cabeça para ser completa precisa ter NOT, mas ele fez sem isso.
Tribute to a Mathemagician e A Lifetime of Puzzles: Esses dois são coletâneas de puzzles baseados na obra do Gardner. Tem um evento que eu quero muito ir que é o Gathering for Gardner, mas esse evento é fechado, só entra e você inventar um puzzle novo e tiver um convite de alguém que já participa. O convite eu consigo, só falta inventar um puzzle! Então com esses livros eu tenho um monte de exemplos para me inspirar.


quarta-feira, 10 de abril de 2019

Hoje liberaram a imagem do ano: finalmente conseguimos tirar a foto de um buraco negro!
Antes de mais nada, agora finalmente conseguimos prova de que um buraco negro existe. Quer dizer, antes a gente só tinha o pato. Nós sabíamos que existia uma coisa que grasnava como pato, voava como pato, nadava como pato, logo não tinha como não ser um pato. Mas agora nós conseguimos *ver* o pato, é outro nível de confirmação.
E como nós conseguimos ver um buraco negro? Quer dizer, buraco negro é negro né? Em princípio tinha que ser invisível. Por sorte, alguns buracos negros tem accretion disks, que são como os anéis de Saturno. Esse buraco negro que foi fotografado, no centro da galáxia M87, está bem alinhadinho com a gente, então é como se estivéssemos vendo ele "de cima". O buraco negro em si está no meio da região escura dentro do anel.
E porque escolheram justo esse da M87? Bem, ele é o segundo maior para a gente. Buracos negros existem em todos os tamanhos, mas para tirar foto o que interessa é o tamanho aparente visto da Terra, esse que você mede em ângulos no céu. O maior de todos seria o Sag A* no centro da Via Láctea, o M87 é o segundo maior (não consegui achar um motivo para não terem feito do Sag A*, talvez ele não tenha accretion disk).
Pela foto tem mais um monte de informações para tirar. Primeiro dá para tirar o tamanho físico, o diâmetro da parte escura na foto é por volta de um dia-luz, o que é mais ou menos o tamanho do sistema solar. A parte escura é mais ou menos o ISCO (a menor órbita estável de fótons em volta do buraco negro), mas não é o ISCO completamente porque tem uns efeitos de lente gravitacional distorcendo. O horizonte de eventos em si é linear com a massa, como a massa dele é 6.5 bilhões a massa do sol, então o raio do horizonte de eventos deve ser uns 0.37 dias-luz, se eu não errei a conta.
O anel em si é assimétrico, uma metade é mais brilhante que a outra. Isso é por conta do Doppler, o accretion disk gira tão rápido, mas tão rápido, que o efeito Doppler fica visível mesmo nessa distância pequena entre eles. Por conta, disso, também dá para deduzir que o buraco negro está girando no sentido horário haha. Quer dizer, o accretion disk está girando no sentido horário, o buraco negro em si poderia estar rodando com um vetor diferente, mas aparentemente o vetor de rotação dos dois é quase igual para esse buraco negro.
Inclusive isso é outra coisa que tiramos da foto, esse buraco negro tem métrica de Kerr. Tem quatro tipos básicos de buracos negros, eles podem ser com ou sem rotação, e com ou sem carga elétrica. Parece que essa foto só é consistente com um buraco negro que gira, mas não tem carga. Também deu para excluir um monte de outras possibilidade de "coisas que deixam buracos no céu", por exemplo, os dados são suficientes para concluir que esse não é um wormhole. Só tem duas alternativas que são mais difíceis de excluir (uma boson star, que é tipo uma "estrela de dark matter", ou uma gravastar, que é tipo uma "estrela de dark energy"). Mas a gente entende tão pouco de dark matter ou dark energy que isso não é falsificável com nosso conhecimento.
O método usado para tirar a foto em si é fascinante. Nenhum telescópio na Terra tem resolução para ver o buraco no meio do anel, então o jeito foi usar literalmente a Terra como telescópio. Nos usamos vários radio telescópios pequenos espalhados pelo mundo como se fossem um só telescópio gigante apontando para o buraco negro.
O problema nesse caso é que a imagem fica ill-posed. Imagina uma tv lcd com seis dead pixels. O dado bruto que coletamos foi exatamente o contrário, é como se fosse uma tv cheia de dead pixels, e só tem seis pixels acesos. Tirar a imagem inteira só de seis pixels é impossível; ou melhor, é ambíguo: tem várias imagens possíveis que podem ter gerado esses pixels. Dá melhorar um pouco apontando os telescópios para o buraco negro ao longo de um dia inteiro, como a Terra está girando, é como se tivéssemos seis tracinhos ao invés de seis pontos. Mas não é o suficiente.
O jeito então é sair fazendo suposição para completar a imagem. Não é diferente de como fazemos tomografias. A tomografia bruta que sai do aparelho no hospital é 1D, a gente usa algoritmos do tipo backprojection para transformar em 2D. Para recuperar a dimensão perdida, você sai fazendo suposições, por exemplo, você supõe que a imagem é contínua (não tem como não ser né).
No caso desse buraco negro, dava para usar dados de outras frequências como parâmetros de inicialização (por exemplo, medidas fora do vísivel, em x-rays). Mas ainda não era suficiente, só com isso não tinha como distinguir se era um anel simétrico, um anel assimétrico, um disco inteiro sem buraco, um par binário, etc. Aí o jeito foi apelar: eles construíram uma simulação usando as equações do Einstein e as variáveis que a gente já conhecia (massa, x-rays, etc), deixaram a simulação rodando, e depois usaram a saída da simulação como parâmetros iniciais na reconstrução. O processo é super complicado e lento, por isso que a imagem demorou tanto para sair (os dados foram coletados em 2017, só agora em abril de 2019 que a imagem ficou pronta).
Uma parte curiosa é que esses dados ocupam muito, muito espaço, vários petabytes. Não tinha como ficar mandando de um laboratório para outro pela internet, então eles comunicavam por avião ("não subestime a largura de banda de um caminhão cheio de hds"). Durante o press release, um dos cientistas levou o rack com hds para mostrar, deixou em cima de um banquinho (Aí, na hora das perguntas, o cara ao lado usou o rack como descanso de copo. Herege, isso tinha que estar num museu, não servindo de apoio de copo haha).
Aliás, lendo os papers você tem noção de quem eram os cientistas que fizeram esse trabalho. O algoritmo de reconstrução chama "PIpeline for the Calibration of high Angular Resolution Data" (PICARD), e o algoritmo de redução de dimensionalidade é o Advance Long Baseline User Software (ALBUS). A biblioteca em python que implementa o ALBUS é a ParselTongue. Manjei esses cientistas.
Enfim, altamente excitado com a foto. Acho muito louco o quanto eu pude ver nesse meu lifetime. Eu vi o teorema de Fermat sendo resolvido, eu vi a detecção de ondas gravitacionais, só não vi mesmo o cometa de Halley mas esse eu ainda não perdi as esperanças haha.


quarta-feira, 30 de janeiro de 2019

Dia desses eu estava apanhando para fazer benchmarks, os resultados não saiam consistentes de jeito nenhum, aí eu pesquisei e descobri o culpado: era o Intel Turbo Boost.

Minha história é a seguinte: se eu rodasse um torto reverso sozinho, ele levava uns 180min para terminar. Mas se eu rodasse dois tortos reversos ao mesmo tempo, aí dava uns 220min, o que não faz sentido, porque minha cpu tem vários cores né? Em paralelo, sem compatilhar memória, o tempo tinha que ser o mesmo.

Pois bem, minha cpu é uma Intel(R) Core(TM) i7-8550U ("Kaby Lake"), que nominalmente roda a 1.80GHz. Esse clock, naturalmente, é variável. Se a CPU está idle, ele abaixa o clock para gastar menos energia. No meu caso, o ubuntu sem nada em background rodando deixa o clock em uns 800MHz mais ou menos.



Mas essa CPU tem o danado do Intel Turbo Boost, que me 99% dos casos é super legal! O que o Turbo Boost faz é alterar o clock para cima do nominal (ou seja, overclock automático). Quando a CPU está sendo muito utilizada, ele usa o sensor interno de temperatura da CPU para ir aumentando o clock sozinho até a CPU chegar na temperatura limite (em dias frios pode ir até 4GHz; hoje o dia está quente, então o máximo que ela está chegando é 3.4GHz).



Pois bem, como o limite de clock é dado pela temperatura, se esquentar demais ele abaixa até voltar ao limite novamente. E olha a pegadinha aí: rodando UM torto reverso sozinho, eu tenho um core a 100%, ele sobe o clock até 3.4GHz. Mas se eu rodo DOIS tortos reversos em paralelo, então são dois cores a 100%, o que dá o dobro de área no chip sendo utilizado, e portanto o dobro da dissipação. A temperatura aumenta e o clock cai (acabei de testar e agora está caindo para 2.9GHz).



Então fica a dica: se você for rodar benchmarks e quer resultados consistentes, ou você desliga o Intel Turbo Boost na BIOS, ou roda só um processo por vez.

(Para medir o clock real da CPU eu uso o i7z, tem no apt mas recomendo compilar um fork atualizado: https://github.com/infowolfe/i7z )