tag:blogger.com,1999:blog-45771988716617233232024-03-13T08:47:33.100-07:00Ricbit PermanenteRicardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.comBlogger406125tag:blogger.com,1999:blog-4577198871661723323.post-69759808777392586072022-05-02T20:41:00.005-07:002022-05-02T20:42:45.948-07:00Unicomp<p><span style="font-family: inherit;">(Depois de muita procura finalmente achei em um backup a versão original da cronologia da Unicomp, enjoy!)</span></p><p><span style="font-family: courier;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">Uma cronologia computacional</span></p><p><span style="font-family: courier; font-size: x-small;">Jorge Stolfi e Joao Carlos Setubal</span></p><p><span style="font-family: courier; font-size: x-small;">(abril de 1996)</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">1966: Fundada a Universidade Estadual de Campinas.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">1969: Criado o departamento de Ciencia da</span></p><p><span style="font-family: courier; font-size: x-small;"> Computacao, do Instituto de Matematica, Estatistica e Ciencia da</span></p><p><span style="font-family: courier; font-size: x-small;"> Computacao da Unicamp.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">1971: Formada a primeira turma do curso de Bacharelado em</span></p><p><span style="font-family: courier; font-size: x-small;">Ciencia da Computacao da Unicamp. Alguns alunos da turma afirmam terem</span></p><p><span style="font-family: courier; font-size: x-small;">visto com os proprios olhos o computador IBM 1130, instalado</span></p><p><span style="font-family: courier; font-size: x-small;">apenas 3 anos antes, em 1968.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">1973: Inaugurado o Centro de Computaccao da Unicamp, que passa a</span></p><p><span style="font-family: courier; font-size: x-small;">operar um PDP-10 da Digital Equipment Corporation, em time-sharing</span></p><p><span style="font-family: courier; font-size: x-small;">atraves de terminais. Os cinco primeiros alunos da</span></p><p><span style="font-family: courier; font-size: x-small;">terceira turma do curso de Bacharelado em</span></p><p><span style="font-family: courier; font-size: x-small;">Ciencia da Computacao ganham o privilegio, apos a formatura,</span></p><p><span style="font-family: courier; font-size: x-small;">de digitarem seus nomes num terminal do PDP-10.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">1990: Criado o curso de Engenharia de Computacao.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">1992: Criado o curso noturno de Bacharelado em Ciencia da Computacao.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">marco de 1996: O Departamento de Ciencia da Computacao se</span></p><p><span style="font-family: courier; font-size: x-small;"> separa do IMECC, tornando-se o Instituto de Computacao (IC).</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">marco de 1996: A Faculdade de</span></p><p><span style="font-family: courier; font-size: x-small;"> Engenharia Eletrica muda o nome para Faculdade de Engenharia</span></p><p><span style="font-family: courier; font-size: x-small;"> Eletrica e de Computacao (FEEC).</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">maio de 1996: O IMECC passa a se chamar</span></p><p><span style="font-family: courier; font-size: x-small;"> Instituto de Matematica, Estatistica e Computacao Cientifica</span></p><p><span style="font-family: courier; font-size: x-small;"> (IMECC).</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">junho de 1996: O Instituto de Quimica muda o nome para</span></p><p><span style="font-family: courier; font-size: x-small;"> Instituto de Computacao Quimica (ICQ).</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">julho de 1996: A Faculdade de Engenharia</span></p><p><span style="font-family: courier; font-size: x-small;"> Mecanica muda o nome para Faculdade de Engenharia Mecanica</span></p><p><span style="font-family: courier; font-size: x-small;"> Computacional (FEMC).</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">agosto de 1996: O IFCH anuncia uma nova disciplina optativa,</span></p><p><span style="font-family: courier; font-size: x-small;"> HG913A -- Topicos Especiais em Etica, Cibernetica, e</span></p><p><span style="font-family: courier; font-size: x-small;"> Internetica. Apesar do anuncio tardio, o numero de matriculas</span></p><p><span style="font-family: courier; font-size: x-small;"> supera todas as expectativas; a tal ponto que as aulas tem que</span></p><p><span style="font-family: courier; font-size: x-small;"> ser transferidas para o Ginasio de Esportes da Unicamp.</span></p><p><span style="font-family: courier; font-size: x-small;"> Ignorando a chuva torrencial, uma multidao de 2500 alunos</span></p><p><span style="font-family: courier; font-size: x-small;"> assiste de pe a aula inaugural da disciplina, sobre</span></p><p><span style="font-family: courier; font-size: x-small;"> "Personalizacao de fontes e cores no Netscape 2.1 beta".</span></p><p><span style="font-family: courier; font-size: x-small;"> </span></p><p><span style="font-family: courier; font-size: x-small;">setembro de 1996: O Instituto de Biologia muda seu nome para</span></p><p><span style="font-family: courier; font-size: x-small;"> Instituto de Biologia Computacional (IBC).</span></p><p><span style="font-family: courier; font-size: x-small;"> </span></p><p><span style="font-family: courier; font-size: x-small;">outubro de 1996: O Instituto de Filosofia e Ciencias Humanas passa</span></p><p><span style="font-family: courier; font-size: x-small;"> a se chamar Instituto de Filosofia Computacional e Ciencias da</span></p><p><span style="font-family: courier; font-size: x-small;"> Automacao Humana (IFCCAH). </span></p><p><span style="font-family: courier; font-size: x-small;"> </span></p><p><span style="font-family: courier; font-size: x-small;">novembro de 1996: O Instituto de Computacao introduz tres novas carreiras:</span></p><p><span style="font-family: courier; font-size: x-small;"> "acharelado em Computacao Orientada a Objetos (noturno)",</span></p><p><span style="font-family: courier; font-size: x-small;"> "Engenharia de Vaporware (diurno)", e "Bacharelado em</span></p><p><span style="font-family: courier; font-size: x-small;"> Configuracao do Sendmail (diurno)".</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">novembro de 1996: A Faculdade de Engenharia Civil muda o nome para</span></p><p><span style="font-family: courier; font-size: x-small;"> Faculdade de Engenharia de Software Civil (FESC).</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">dezembro de 1996: Para surpresa geral, as Faculdades de Engenharia</span></p><p><span style="font-family: courier; font-size: x-small;"> Agricola e Engenharia de Alimentos anunciam sua fusao, formando</span></p><p><span style="font-family: courier; font-size: x-small;"> a Faculdade de Engenharia de Computacao Vegetariana (FECV),</span></p><p><span style="font-family: courier; font-size: x-small;"> e criam um novo curso interdisciplinar,</span></p><p><span style="font-family: courier; font-size: x-small;"> "Analise de Galhos e Pepinos de Sistemas".</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">dezembro de 1996: Gracas a uma doacao de R$ 5.000 da Microsoft, </span></p><p><span style="font-family: courier; font-size: x-small;"> complementada com R$ 2.495.000 da FAPESP e FUNCAMP, o Ginasio </span></p><p><span style="font-family: courier; font-size: x-small;"> de Esportes da Unicamp e recoberto, restaurado, e rebatizado</span></p><p><span style="font-family: courier; font-size: x-small;"> "Ginasio William H. Gates de Esportes Computacionais". Para</span></p><p><span style="font-family: courier; font-size: x-small;"> inaugurar a obra, a Unicamp promove um match historico</span></p><p><span style="font-family: courier; font-size: x-small;"> entre Windows 95 e MacOS (que infelizmente termina em 0 a 0,</span></p><p><span style="font-family: courier; font-size: x-small;"> devido a falta de energia eletrica).</span></p><p><span style="font-family: courier; font-size: x-small;"> </span></p><p><span style="font-family: courier; font-size: x-small;">fevereiro de 1997: Assustada com a queda vertiginosa</span></p><p><span style="font-family: courier; font-size: x-small;"> na procura de seus cursos no vestibular, a Faculdade de Ciencias</span></p><p><span style="font-family: courier; font-size: x-small;"> Medicas se submete a uma re-estruturacao radical, criando</span></p><p><span style="font-family: courier; font-size: x-small;"> os novos departamentos:</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;"> * Anatomia de Sistemas</span></p><p><span style="font-family: courier; font-size: x-small;"> * Anestesiologia por Computador</span></p><p><span style="font-family: courier; font-size: x-small;"> * Cirurgia e Programacao de Computadores</span></p><p><span style="font-family: courier; font-size: x-small;"> * Clinica Multimidica</span></p><p><span style="font-family: courier; font-size: x-small;"> * Computacao Preventiva e Social</span></p><p><span style="font-family: courier; font-size: x-small;"> * Dermatologia Distribuida</span></p><p><span style="font-family: courier; font-size: x-small;"> * Enfermagem Homem-Maquina</span></p><p><span style="font-family: courier; font-size: x-small;"> * Engenharia de Sistemas Digestivos</span></p><p><span style="font-family: courier; font-size: x-small;"> * Farmacologia e Administracao Unix</span></p><p><span style="font-family: courier; font-size: x-small;"> * Genetica Algoritmica</span></p><p><span style="font-family: courier; font-size: x-small;"> * Informatica Ortopedica e Traumatologia de Software</span></p><p><span style="font-family: courier; font-size: x-small;"> * Neurologia de Redes Neurais</span></p><p><span style="font-family: courier; font-size: x-small;"> * Oftalmologia Grafica Computacional</span></p><p><span style="font-family: courier; font-size: x-small;"> * Otocomputorrinocomputolaringocomputologia </span></p><p><span style="font-family: courier; font-size: x-small;"> * Pediatria e Downsizing</span></p><p><span style="font-family: courier; font-size: x-small;"> * Psiquiatria e Inteligencia Artificial</span></p><p><span style="font-family: courier; font-size: x-small;"> * Radiologia e Depuracao de Programas</span></p><p><span style="font-family: courier; font-size: x-small;"> * Saude Publica Virtual</span></p><p><span style="font-family: courier; font-size: x-small;"> </span></p><p><span style="font-family: courier; font-size: x-small;">marco de 1997: Passa a ser oferecida a disciplina "Vida e </span></p><p><span style="font-family: courier; font-size: x-small;"> Obra de William H. Gates" no curso de Engenharia de Computacao, como</span></p><p><span style="font-family: courier; font-size: x-small;"> optativa. As 250 vagas sao imediatamente preenchidas, e </span></p><p><span style="font-family: courier; font-size: x-small;"> so a intervencao do exercito (a pedido do Reitor) </span></p><p><span style="font-family: courier; font-size: x-small;"> impede a destruicao completa do predio da DAC</span></p><p><span style="font-family: courier; font-size: x-small;"> pelos alunos que tiveram suas matriculas recusadas.</span></p><p><span style="font-family: courier; font-size: x-small;"> </span></p><p><span style="font-family: courier; font-size: x-small;">maio de 1997: O Instituto de Artes submete pedido</span></p><p><span style="font-family: courier; font-size: x-small;"> de mudanca de nome para Instituto de Computacao Multimidia (ICM). </span></p><p><span style="font-family: courier; font-size: x-small;"> O pedido e frustrado, entretanto, por divergencias politicas</span></p><p><span style="font-family: courier; font-size: x-small;"> internas, que levam os departamentos de Danca e Artes Plasticas</span></p><p><span style="font-family: courier; font-size: x-small;"> a sair do IA e criar o Instituto de Computacao Coreografica e</span></p><p><span style="font-family: courier; font-size: x-small;"> Processamento de Imagens Artisticas (ICCgPIA). Os demais departamentos </span></p><p><span style="font-family: courier; font-size: x-small;"> do IA se reorganizam na Faculdade de Engenharia Artistica Computacional</span></p><p><span style="font-family: courier; font-size: x-small;"> (FEAC).</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">junho de 1997: Apos um ano de acirradas disputas internas entre </span></p><p><span style="font-family: courier; font-size: x-small;"> "tradicionalistas" e "progressistas", que praticamente</span></p><p><span style="font-family: courier; font-size: x-small;"> paralisaram as atividades da Faculdade de Ciencias Medicas, o CONSU</span></p><p><span style="font-family: courier; font-size: x-small;"> conclui que a reconciliacao entre os dois campos e impossivel, e</span></p><p><span style="font-family: courier; font-size: x-small;"> determina que a FCM seja dividida em duas unidades: a Faculdade</span></p><p><span style="font-family: courier; font-size: x-small;"> de Ciencias Medicas Computacionais (FCMC), e a Faculdade de</span></p><p><span style="font-family: courier; font-size: x-small;"> Ciencia da Computacao Medica (FCCM).</span></p><p><span style="font-family: courier; font-size: x-small;"> </span></p><p><span style="font-family: courier; font-size: x-small;">janeiro de 1998: No proprio ano de sua criacao, o curso de Bacharelado</span></p><p><span style="font-family: courier; font-size: x-small;"> em Filosofia Windows do IFCCAH passa a frente dos demais cursos</span></p><p><span style="font-family: courier; font-size: x-small;"> da Unicamp (incluindo Bacharelado em Computacao Orientada a</span></p><p><span style="font-family: courier; font-size: x-small;"> Objetos, do IC, e Medicina Computacional, da FCMC) como</span></p><p><span style="font-family: courier; font-size: x-small;"> recordista nas opcoes do vestibular.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">fevereiro de 1998: O Instituto de Computacao tenta mudar seu</span></p><p><span style="font-family: courier; font-size: x-small;"> nome para Instituto de Informatica e Ciencia da Computacao (IICC).</span></p><p><span style="font-family: courier; font-size: x-small;"> O Reitor veta a mudanca, alegando possivel confusao </span></p><p><span style="font-family: courier; font-size: x-small;"> com o Instituto de Informatica e Computacao Cientifica</span></p><p><span style="font-family: courier; font-size: x-small;"> (antigo Instituto de Fisica).</span></p><p><span style="font-family: courier; font-size: x-small;"> </span></p><p><span style="font-family: courier; font-size: x-small;">marco de 1998: Gracas a intenso lobby nos bastidores,</span></p><p><span style="font-family: courier; font-size: x-small;"> e a uma habil campanha propagandistica na Internet, o Instituto</span></p><p><span style="font-family: courier; font-size: x-small;"> de Computacao consegue mudar seu nome para Instituto de</span></p><p><span style="font-family: courier; font-size: x-small;"> Informatica, Informatizacao, Computabilidade, e Computacao</span></p><p><span style="font-family: courier; font-size: x-small;"> Computacional (IIICCC).</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">junho de 1998: Portaria do reitor determina que a Unicamp</span></p><p><span style="font-family: courier; font-size: x-small;"> sera oficialmente chamada de Universidade Computacional</span></p><p><span style="font-family: courier; font-size: x-small;"> de Campinas (Unicompcamp).</span></p><p><span style="font-family: courier; font-size: x-small;"> </span></p><p><span style="font-family: courier; font-size: x-small;">agosto de 1998: A disciplina "Vida e Obra de William</span></p><p><span style="font-family: courier; font-size: x-small;"> H. Gates" torna-se obrigatoria no curso de Engenharia de</span></p><p><span style="font-family: courier; font-size: x-small;"> Computacao Computacional, e optativa nas demais carreiras de</span></p><p><span style="font-family: courier; font-size: x-small;"> ciencias exatas.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">dezembro de 1998: A camara dos vereadores de Campinas aprova, por</span></p><p><span style="font-family: courier; font-size: x-small;"> unanimidade, a mudanca do nome da cidade para Compinas. </span></p><p><span style="font-family: courier; font-size: x-small;"> Numa reuniao de emergencia, o CONSU da Unicompcamp </span></p><p><span style="font-family: courier; font-size: x-small;"> oficializa a mudanca da sigla da universidade para</span></p><p><span style="font-family: courier; font-size: x-small;"> Unicomp.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">marco de 1999: A disciplina "Calculo I" passa a ser ministrada</span></p><p><span style="font-family: courier; font-size: x-small;"> pelo software "Calculus Teacher 1.0",</span></p><p><span style="font-family: courier; font-size: x-small;"> recentemente introduzido pela Microsoft.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">junho de 1999: Devido aos problemas encontrados no</span></p><p><span style="font-family: courier; font-size: x-small;"> "Calculus Teacher 1.0" (principalmente, sua inabilidade</span></p><p><span style="font-family: courier; font-size: x-small;"> em distinguir integral de derivada)</span></p><p><span style="font-family: courier; font-size: x-small;"> a Unicomp decide substitui-lo pela versao do</span></p><p><span style="font-family: courier; font-size: x-small;"> "Calculus Teacher 2.14 (beta)".</span></p><p><span style="font-family: courier; font-size: x-small;"> </span></p><p><span style="font-family: courier; font-size: x-small;">julho de 1999: Uma incompatibilidade nao-documentada entre </span></p><p><span style="font-family: courier; font-size: x-small;"> o pacote "Calculus Teacher 2.14 (beta)"e o screen saver da</span></p><p><span style="font-family: courier; font-size: x-small;"> Microsoft acaba causando a reformatacao completa dos discos</span></p><p><span style="font-family: courier; font-size: x-small;"> rigidos de todos os computadores da Unicomp. Por um descuido</span></p><p><span style="font-family: courier; font-size: x-small;"> dos administradores do IIICCC, os comandos de reformatacao</span></p><p><span style="font-family: courier; font-size: x-small;"> propagaram-se via Internet, apagando tambem todos os arquivos da</span></p><p><span style="font-family: courier; font-size: x-small;"> Universidade de Compina Grande (Paraiba), da Unisys Computers</span></p><p><span style="font-family: courier; font-size: x-small;"> do Brasil S/A, do Uncle Remus Computer</span></p><p><span style="font-family: courier; font-size: x-small;"> Camp for Kids (Florida), e das</span></p><p><span style="font-family: courier; font-size: x-small;"> United Armed Forces of Compuchea (novo nome do Camboja).</span></p><p><span style="font-family: courier; font-size: x-small;"> </span></p><p><span style="font-family: courier; font-size: x-small;">julho de 1999: A Compucheia declara guerra ao Brasil,</span></p><p><span style="font-family: courier; font-size: x-small;"> em represalia ao incidente do "Calculus Teacher 2.14 (beta)".</span></p><p><span style="font-family: courier; font-size: x-small;"> </span></p><p><span style="font-family: courier; font-size: x-small;">agosto de 1999: A Compucheia desiste da guerra</span></p><p><span style="font-family: courier; font-size: x-small;"> contra o Brasil, pois a fita de backup que deveria conter os </span></p><p><span style="font-family: courier; font-size: x-small;"> planos para tal contingencia esta inutilizavel devido a defeito no software</span></p><p><span style="font-family: courier; font-size: x-small;"> "Super Backup 99.7b for Windows".</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">fevereiro de 2000: A disciplina "Vida e Obra de William</span></p><p><span style="font-family: courier; font-size: x-small;"> H. Gates" passa a ser obrigatoria para todos os ingressantes da</span></p><p><span style="font-family: courier; font-size: x-small;"> Unicomp.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">marco de 2000: Todas as disciplinas de calculo da Unicomp passam a</span></p><p><span style="font-family: courier; font-size: x-small;"> ser ministradas exclusivamente pelo software "Calculus</span></p><p><span style="font-family: courier; font-size: x-small;"> Teacher 3.4 for Windows". Enquanto isso, o Instituto de</span></p><p><span style="font-family: courier; font-size: x-small;"> Informatica Biologica Computacional (antigo Instituto de</span></p><p><span style="font-family: courier; font-size: x-small;"> Biologia Computacional) passa a utilizar, em carater</span></p><p><span style="font-family: courier; font-size: x-small;"> experimental, o software "Virtual Frog Dissector 2.0", da</span></p><p><span style="font-family: courier; font-size: x-small;"> Apple, na disciplina "Laboratorio de Biologia I", em substituicao</span></p><p><span style="font-family: courier; font-size: x-small;"> a sapos de verdade.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">junho de 2000: A camara dos vereadores de Compinas aprova, por</span></p><p><span style="font-family: courier; font-size: x-small;"> unanimidade, a mudanca do nome da cidade para Compunas. </span></p><p><span style="font-family: courier; font-size: x-small;"> </span></p><p><span style="font-family: courier; font-size: x-small;">julho de 2000: O IIICCC submete ao CONSU mocao para mudar o nome</span></p><p><span style="font-family: courier; font-size: x-small;"> da universidade de Unicomp para UnixComp; mas a tentativa</span></p><p><span style="font-family: courier; font-size: x-small;"> fracassa, devido principalmente a oposicao das Engenharias (que</span></p><p><span style="font-family: courier; font-size: x-small;"> preferiam ver o nome alterado para WinComp)</span></p><p><span style="font-family: courier; font-size: x-small;"> </span></p><p><span style="font-family: courier; font-size: x-small;">julho de 2000: Pesquisa informal entre docentes e alunos do</span></p><p><span style="font-family: courier; font-size: x-small;"> Instituto de Informatica Biologica Computacional</span></p><p><span style="font-family: courier; font-size: x-small;"> constata aprovacao unanime e entusiastica do software "Virtual</span></p><p><span style="font-family: courier; font-size: x-small;"> Frog Dissector 2.0". Em vista disso, o Instituto decide</span></p><p><span style="font-family: courier; font-size: x-small;"> informatizar todas as aulas de laboratorio, substituindo os seres</span></p><p><span style="font-family: courier; font-size: x-small;"> vivos pelos softwares simuladores correspondentes.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">julho de 2000: Seguindo o exemplo do IIBC, a Faculdade </span></p><p><span style="font-family: courier; font-size: x-small;"> Computacional de Medicina Informatizada Computacional (antiga</span></p><p><span style="font-family: courier; font-size: x-small;"> Faculdade de Ciencias Medicas Computacionais) passa a utilizar</span></p><p><span style="font-family: courier; font-size: x-small;"> exclusivamente o "Virtual MacPatient 6.0 Turbo" para o</span></p><p><span style="font-family: courier; font-size: x-small;"> treinamento de residentes. Para implementar essa decisao, a</span></p><p><span style="font-family: courier; font-size: x-small;"> FCMIC assina convenio com o Centro de Computacao Computacional</span></p><p><span style="font-family: courier; font-size: x-small;"> por Computador Computacional (antigo Centro de</span></p><p><span style="font-family: courier; font-size: x-small;"> Computacao) e com a Apple Computer, visando substituir 300 leitos</span></p><p><span style="font-family: courier; font-size: x-small;"> do HCC (Hospital</span></p><p><span style="font-family: courier; font-size: x-small;"> Computacional das Clinicas) por uma rede de 300 estacoes </span></p><p><span style="font-family: courier; font-size: x-small;"> SuperUltraPowerMac 90000 rodando MacMacOS 11.0.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">agosto de 2000: William H. Gates visita a Unicomp e profere</span></p><p><span style="font-family: courier; font-size: x-small;"> palestra sobre biologia computacional no</span></p><p><span style="font-family: courier; font-size: x-small;"> IIBC. O titulo da palestra e</span></p><p><span style="font-family: courier; font-size: x-small;"> "Bounds for sorting by prefix reversals", e seu conteudo se torna</span></p><p><span style="font-family: courier; font-size: x-small;"> materia obrigatoria no vestibular da Unicomp, com peso maior do que</span></p><p><span style="font-family: courier; font-size: x-small;"> o da redacao.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">agosto de 2000: A ACDCUNICOMP (Associacao Computacional</span></p><p><span style="font-family: courier; font-size: x-small;"> dos Docentes Computacionais da Unicomp) registra que</span></p><p><span style="font-family: courier; font-size: x-small;"> 51% das disciplinas da Unicomp estao sendo ministradas pelo</span></p><p><span style="font-family: courier; font-size: x-small;"> software "College Teacher 1.2". Professores demitidos fazem</span></p><p><span style="font-family: courier; font-size: x-small;"> passeata pelo campus, mas sao vaiados pelos alunos, </span></p><p><span style="font-family: courier; font-size: x-small;"> espancados pela policia, e insultados na TV pelo Boris Casoy.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">outubro de 2000: Em consequencia de um escandalo envolvendo corrupcao,</span></p><p><span style="font-family: courier; font-size: x-small;"> perversao de menores, quebra de senhas, e variaveis nao</span></p><p><span style="font-family: courier; font-size: x-small;"> inicializadas, o CONSU da Unicomp e dissolvido por interventor da</span></p><p><span style="font-family: courier; font-size: x-small;"> Microsoft, que cria em seu lugar o COMPSU, COnselho</span></p><p><span style="font-family: courier; font-size: x-small;"> Multi-Processual de Sistemas da Unicomp. (A sigla inicialmente</span></p><p><span style="font-family: courier; font-size: x-small;"> proposta pelo interventor, COMPSUN, foi rapidamente descartada</span></p><p><span style="font-family: courier; font-size: x-small;"> devido a pressoes da IBM e outros fabricantes.) Conforme os</span></p><p><span style="font-family: courier; font-size: x-small;"> estatutos, o COMPSU sera formado por representantes dos</span></p><p><span style="font-family: courier; font-size: x-small;"> principais sistemas operacionais e arquiteturas de hardware,</span></p><p><span style="font-family: courier; font-size: x-small;"> eleitos democraticamente pelos membros discentes, docentes, e</span></p><p><span style="font-family: courier; font-size: x-small;"> funcionais do parque computacional da Unicomp.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">novembro de 2000: A camara dos vereadores de Compunas aprova, por</span></p><p><span style="font-family: courier; font-size: x-small;"> unanimidade, a mudanca do nome da cidade para Computinas.</span></p><p><span style="font-family: courier; font-size: x-small;"> Aproveitando o ensejo, o deputado Abi Chedid apresenta projeto de</span></p><p><span style="font-family: courier; font-size: x-small;"> lei mudando o nome do Estado de Sao Paulo para Estado</span></p><p><span style="font-family: courier; font-size: x-small;"> Computacional de Sao Paulo.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">dezembro de 2000: A disciplina "Vida e Obra de William</span></p><p><span style="font-family: courier; font-size: x-small;"> H. Gates" passa a ser materia eliminatoria no vestibular</span></p><p><span style="font-family: courier; font-size: x-small;"> da Unicomp, substituindo as provas de Redacao, Matematica,</span></p><p><span style="font-family: courier; font-size: x-small;"> e Fisica.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">janeiro de 2001: Para cumprir com nova lei federal que obriga</span></p><p><span style="font-family: courier; font-size: x-small;"> as Universidades a preencherem todas as vagas, independentemente</span></p><p><span style="font-family: courier; font-size: x-small;"> da existencia de candidatos, a Unicomp adquire e matricula</span></p><p><span style="font-family: courier; font-size: x-small;"> 1300 copias do software "Virtual Student 1.5 for Windows".</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">fevereiro de 2001: A Unicomp torna-se a primeira universidade brasileira</span></p><p><span style="font-family: courier; font-size: x-small;"> cuja administracao e realizada pelo software "College</span></p><p><span style="font-family: courier; font-size: x-small;"> Administrator 0.9" da IBM.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">marco de 2001: O software "College Professor 2.1" (com </span></p><p><span style="font-family: courier; font-size: x-small;"> "Object-Oriented Tenure Option") recebe o titulo de Doutor Honoris </span></p><p><span style="font-family: courier; font-size: x-small;"> Computatis Causa pela Unicomp.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">marco de 2001: Empossado o novo reitor da Unicomp: trata-se da versao</span></p><p><span style="font-family: courier; font-size: x-small;"> beta do software "College President for Windows". Comparecem a cerimonia</span></p><p><span style="font-family: courier; font-size: x-small;"> os softwares "College Teacher", "College Administrator",</span></p><p><span style="font-family: courier; font-size: x-small;"> e a pagina WWW do representante do corpo discente.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">marco de 2001: Exemplares do filme e livro "2001, Uma</span></p><p><span style="font-family: courier; font-size: x-small;"> odisseia no espaco" sao queimados na praca central da</span></p><p><span style="font-family: courier; font-size: x-small;"> Unicomp em repudio ao tratamento computacionalmente incorreto</span></p><p><span style="font-family: courier; font-size: x-small;"> dado pelo autor Arthur Clarke ao famoso computador HAL</span></p><p><span style="font-family: courier; font-size: x-small;"> 9000. Simula-se o enforcamento de Clarke e Stanley Kubrick no</span></p><p><span style="font-family: courier; font-size: x-small;"> software "Virtual Torture 13.13".</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">abril de 2001: 5000 alunos fazem passeata diante do gabinete</span></p><p><span style="font-family: courier; font-size: x-small;"> do Reitor, protestando contra o software "Virtual Student 1.5</span></p><p><span style="font-family: courier; font-size: x-small;"> for Windows" --- especificamente, contra o sistema de protecao</span></p><p><span style="font-family: courier; font-size: x-small;"> de acesso desse software, que impede a cola em provas por alunos</span></p><p><span style="font-family: courier; font-size: x-small;"> que nao disponham da senha correta (vendida pela Microsoft).</span></p><p><span style="font-family: courier; font-size: x-small;"> </span></p><p><span style="font-family: courier; font-size: x-small;">maio de 2001: O DCCEC (Diretorio Computacional Central dos </span></p><p><span style="font-family: courier; font-size: x-small;"> Estudantes de Computacao) nega a alegacao da Microsoft de que a</span></p><p><span style="font-family: courier; font-size: x-small;"> maioria dos alunos que participaram da passeata eram na verdade</span></p><p><span style="font-family: courier; font-size: x-small;"> copias piratas do software "Virtual Student 1.5 for Windows".</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">junho de 2001: A camara dos vereadores de Computinas aprova, por</span></p><p><span style="font-family: courier; font-size: x-small;"> unanimidade, a mudanca do nome da cidade para Computer City;</span></p><p><span style="font-family: courier; font-size: x-small;"> porem a decisao e impugnada em processo movido pela cadeia de</span></p><p><span style="font-family: courier; font-size: x-small;"> lojas americana de mesmo nome.</span></p><p><span style="font-family: courier; font-size: x-small;"> </span></p><p><span style="font-family: courier; font-size: x-small;">julho de 2001: O deputado Manoel Moreira propoe na Assembeia</span></p><p><span style="font-family: courier; font-size: x-small;"> Legislativa de Sao Paulo mudanca do nome oficioso da entidade,</span></p><p><span style="font-family: courier; font-size: x-small;"> de "Camara de Deputados" para "Camara com Computados".</span></p><p><span style="font-family: courier; font-size: x-small;"> </span></p><p><span style="font-family: courier; font-size: x-small;">agosto de 2001: Todos os 300 alunos em carne-e-osso da Unicomp tem sua</span></p><p><span style="font-family: courier; font-size: x-small;"> matricula recusada pelo software "College Administrator".</span></p><p><span style="font-family: courier; font-size: x-small;"> Investigacao da IBM determina que o problema foi causado por um</span></p><p><span style="font-family: courier; font-size: x-small;"> defeito na instrucao "NOP" dos processadores billgatium da Intel,</span></p><p><span style="font-family: courier; font-size: x-small;"> usados para o processamento da matricula.</span></p><p><span style="font-family: courier; font-size: x-small;"> </span></p><p><span style="font-family: courier; font-size: x-small;">agosto de 2001: O professor Sivasubramanian Chandrasegarampillai,</span></p><p><span style="font-family: courier; font-size: x-small;">do departamento de Linguas e Codigos da Antiguidade da Unicomp,</span></p><p><span style="font-family: courier; font-size: x-small;">ganha o premio Zeferino Computacional Vaz com sua tese de livre</span></p><p><span style="font-family: courier; font-size: x-small;">docencia "Deciframento de um disquete de 5 1/4 polegadas gravado no</span></p><p><span style="font-family: courier; font-size: x-small;">formato MSDOS 1.2".</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">setembro de 2001: Pressionada por todos os lados, a Intel eventualmente</span></p><p><span style="font-family: courier; font-size: x-small;"> concorda em substituir os processadores billgatium</span></p><p><span style="font-family: courier; font-size: x-small;"> defeituosos; mas avisa que segundo os </span></p><p><span style="font-family: courier; font-size: x-small;"> criterios da propria Intel, a matricula da Unicomp tem prioridade</span></p><p><span style="font-family: courier; font-size: x-small;"> "17-m", significando que que os processadores nao serao</span></p><p><span style="font-family: courier; font-size: x-small;"> substituidos antes de outubro de 2015. Indignado, o Reitor decide</span></p><p><span style="font-family: courier; font-size: x-small;"> ignorar o parecer do COMPSU (que tinha recomendado uma atitude</span></p><p><span style="font-family: courier; font-size: x-small;"> mais passiva e conciliadora), e envia uma carta aberta a todos os</span></p><p><span style="font-family: courier; font-size: x-small;"> alunos afetados, incitando-os, em termos nada ambiguos, a ter paciencia.</span></p><p><span style="font-family: courier; font-size: x-small;"> </span></p><p><span style="font-family: courier; font-size: x-small;">outubro de 2001: A camara dos vereadores de Computinas rejeita,</span></p><p><span style="font-family: courier; font-size: x-small;"> por pequena margem de votos, proposta de mudanca do nome da cidade </span></p><p><span style="font-family: courier; font-size: x-small;"> para Computanas.</span></p><p><span style="font-family: courier; font-size: x-small;"> </span></p><p><span style="font-family: courier; font-size: x-small;">outubro de 2001: O governo federal apresenta novo plano </span></p><p><span style="font-family: courier; font-size: x-small;"> de reforma da previdencia, segundo o qual a aposentadoria exige</span></p><p><span style="font-family: courier; font-size: x-small;"> 35 anos de servico e 24 MBytes de memoria para os homens, ou 30</span></p><p><span style="font-family: courier; font-size: x-small;"> anos e 16 Megabytes para as mulheres. Por via das duvidas, os</span></p><p><span style="font-family: courier; font-size: x-small;"> ultimos docentes em carne-e-osso da Unicomp se aposentam. Em</span></p><p><span style="font-family: courier; font-size: x-small;"> vista disso, o Reitor demite todas as funcionarias que preparam o</span></p><p><span style="font-family: courier; font-size: x-small;"> cafe, substituindo-as por um servidor centralizado de applets</span></p><p><span style="font-family: courier; font-size: x-small;"> Java.</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">dezembro de 2001: A Unicomp muda-se para um novo campus,</span></p><p><span style="font-family: courier; font-size: x-small;"> inteiramente virtual, situado nas vizinhancas da pagina</span></p><p><span style="font-family: courier; font-size: x-small;"> WWW da Cybercidade de Computinas, no sub-diretorio de Barao</span></p><p><span style="font-family: courier; font-size: x-small;"> Geraldo (para quem chega pela infovia d.pedro.i@sp.br, </span></p><p><span style="font-family: courier; font-size: x-small;"> o mais simples e sair na altura do hyperlink para </span></p><p><span style="font-family: courier; font-size: x-small;"> <a HREF="http:Paulinia.html">Paulinia</a>).</span></p><p><span style="font-family: courier; font-size: x-small;"> </span></p><p><span style="font-family: courier; font-size: x-small;">dezembro de 2001: O Centro de Memoria RAM da Unicomp</span></p><p><span style="font-family: courier; font-size: x-small;">finalmente publica a monumental obra "A hagiografia de William</span></p><p><span style="font-family: courier; font-size: x-small;">H. Gates", em 1.11 Gigabytes (comprimidos).</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">24 dezembro de 2001: Um virus de computador, escrito</span></p><p><span style="font-family: courier; font-size: x-small;"> por um aluno do JICOTUCO (Jardim de Infancia Computacional</span></p><p><span style="font-family: courier; font-size: x-small;"> Tecnico da Universidade de Computinas), e por ele "plantado"</span></p><p><span style="font-family: courier; font-size: x-small;"> dentro do applet Java "Merry.Christmas", apaga do Cyberspace a Faculdade</span></p><p><span style="font-family: courier; font-size: x-small;"> de Informatizacao Computacional de Educacao Fisica</span></p><p><span style="font-family: courier; font-size: x-small;"> Computacional (FICEFC.html). Horrorizadas, as demais unidades da</span></p><p><span style="font-family: courier; font-size: x-small;"> Unicomp assistem impotentes ao progresso inexoravel do virus</span></p><p><span style="font-family: courier; font-size: x-small;"> pela rede Uninet, qu</span></p><p><span style="font-family: courier; font-size: x-small;"><br /></span></p><p><span style="font-family: courier; font-size: x-small;">bus error</span></p><p><span style="font-family: courier; font-size: x-small;">core dumped</span></p><p><span style="font-family: courier; font-size: x-small;">IIICCC.html: no such file or directory</span></p><p><br /></p>Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com2tag:blogger.com,1999:blog-4577198871661723323.post-5970860758218629172020-03-31T10:55:00.002-07:002020-03-31T10:56:38.394-07:00<div dir="ltr" style="text-align: left;" trbidi="on">
Eis que no meio da quarentena eu faço 44 anos! A primeira coisa que notei foi 44 é palíndromo em base 10, mas estamos no ano de 2020, que é palíndromo em base 100.
<br />
<br />
A pergunta natural é: isso vai acontecer mais vezes? Fiz um scriptinho para descobrir, e se eu viver o suficiente vou passar seis vezes por essa situação. As duas primeiras foram 15 anos (em base 4), 24 anos (em base 7), 44 que é o atual em base 10, e depois ainda tem 52 (em base 5), 54 (em base 17), e 63 (em base 4).
<br />
<br />
Se alguém mais quiser computar, aqui tem o gist, e abaixo as minhas idades palíndromas!
<br />
<br />
<a href="https://gist.github.com/ricbit/6bb4b5c9dfbff036d374f0612b761d46">https://gist.github.com/ricbit/6bb4b5c9dfbff036d374f0612b761d46</a><br />
<br />
15 4 [3, 3] [7, 12, 7]
<br />
24 7 [3, 3] [40, 40]
<br />
44 10 [4, 4] [20, 20]
<br />
52 5 [2, 0, 2] [3, 6, 3]
<br />
54 17 [3, 3] [7, 7]
<br />
63 4 [3, 3, 3] [7, 15, 7] <br />
<br />
<br />
</div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com1tag:blogger.com,1999:blog-4577198871661723323.post-21590682248610777282019-06-23T08:21:00.000-07:002019-06-23T09:26:53.603-07:00<div dir="ltr" style="text-align: left;" trbidi="on">
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.<br />
<br />
Bem, mas sempre dá para regravar a EPROM né? O problema é que tanto o Hot-Arte quanto o Editor<span class="text_exposed_show" style="display: inline; font-family: inherit;">de 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é? </span><br />
<span class="text_exposed_show" style="display: inline; font-family: inherit;"><br /></span>
<span class="text_exposed_show" style="display: inline; font-family: inherit;"><a href="https://1.bp.blogspot.com/-IWBkiS3SVKI/XQ-YXC-voZI/AAAAAAADQzE/E2gemKDwps0ArSPlTDnRv12XJyd2dvF2gCLcBGAs/s1600/IMG_20190622_153320.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="867" data-original-width="1000" height="277" src="https://1.bp.blogspot.com/-IWBkiS3SVKI/XQ-YXC-voZI/AAAAAAADQzE/E2gemKDwps0ArSPlTDnRv12XJyd2dvF2gCLcBGAs/s320/IMG_20190622_153320.jpg" width="320" /></a>
<br /><br />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.<br /><br />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).<br /><br />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!</span><br />
<span class="text_exposed_show" style="display: inline; font-family: inherit;"><br /></span>
Para quem quiser um totorial com as fotos da modificação, coloquei aqui:<br />
<a href="https://sites.google.com/site/ricbitmsx/hardware-development/adapting-16kb-sharp-cartridge">https://sites.google.com/site/ricbitmsx/hardware-development/adapting-16kb-sharp-cartridge</a></div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com2tag:blogger.com,1999:blog-4577198871661723323.post-75101260844315775052019-05-01T12:31:00.002-07:002019-05-01T12:31:40.407-07:00<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px;">
Livros novos da semana:</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
<b>Generatingfunctionology</b>: 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).</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
<b>Elliptic Tales</b>: Faz tempo que eu estava querendo aprender funções elípticas, e esse livro aqui bateu certinho com o meu nível.<span class="text_exposed_show" style="display: inline; font-family: inherit;"> 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.</span></div>
<div class="text_exposed_show" style="background-color: white; color: #1d2129; display: inline; font-family: Helvetica, Arial, sans-serif; font-size: 14px;">
<div style="font-family: inherit; margin-bottom: 6px;">
<b>99 Variations on a Proof</b>: É 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).</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
<b>Geometric Folding Algorithms</b>: 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).</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
<b>Games, Puzzles and Computation</b>: 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.</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
<b>Tribute to a Mathemagician</b> e <b>A Lifetime of Puzzles</b>: 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.</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-Ud7JaY9IV50/XMnz7hjNPvI/AAAAAAADMIA/ikuDi_v0hNoVwpQY_xklQ2YFK75VsT-XwCLcBGAs/s1600/IMG_20190430_113701.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://4.bp.blogspot.com/-Ud7JaY9IV50/XMnz7hjNPvI/AAAAAAADMIA/ikuDi_v0hNoVwpQY_xklQ2YFK75VsT-XwCLcBGAs/s320/IMG_20190430_113701.jpg" width="320" /></a></div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
<br /></div>
</div>
</div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com1tag:blogger.com,1999:blog-4577198871661723323.post-35735367509288812532019-04-10T11:48:00.001-07:002019-04-10T12:00:59.664-07:00<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px;">
Hoje liberaram a imagem do ano: finalmente conseguimos tirar a foto de um buraco negro!</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
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.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
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.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
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).</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
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.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
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.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
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.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
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.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
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.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
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é).</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
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).</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
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).</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
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.</div>
<div style="background-color: white; color: #1d2129; display: inline; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-top: 6px;">
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.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-zPezBO8kXpA/XK46aRx_CHI/AAAAAAADKZ8/R2LQRQkvvnwKhSPv_QYN4gAkGqAi8WQqACLcBGAs/s1600/grandefoto.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="549" data-original-width="976" height="180" src="https://4.bp.blogspot.com/-zPezBO8kXpA/XK46aRx_CHI/AAAAAAADKZ8/R2LQRQkvvnwKhSPv_QYN4gAkGqAi8WQqACLcBGAs/s320/grandefoto.jpg" width="320" /></a></div>
<br /></div>
</div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com3tag:blogger.com,1999:blog-4577198871661723323.post-34147562315511036172019-01-30T06:06:00.002-08:002019-01-30T06:08:42.836-08:00<div dir="ltr" style="text-align: left;" trbidi="on">
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.
<br />
<br />
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.
<br />
<br />
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.
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-1IW-mfkPWEg/XFGvJ4SUg4I/AAAAAAADHIQ/6PmTUOGXk1kpmkFs_XjSuWIAkCrauV3zwCPcBGAYYCw/s1600/0proc.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="702" data-original-width="1261" height="178" src="https://4.bp.blogspot.com/-1IW-mfkPWEg/XFGvJ4SUg4I/AAAAAAADHIQ/6PmTUOGXk1kpmkFs_XjSuWIAkCrauV3zwCPcBGAYYCw/s320/0proc.png" width="320" /></a></div>
<br />
<br />
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).
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-ZYr9yOjDnFA/XFGvPBLONyI/AAAAAAADHIQ/3fRS185fhtoVL_z5oMOPE_Un0isa36MnQCPcBGAYYCw/s1600/1proc.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="702" data-original-width="1261" height="178" src="https://1.bp.blogspot.com/-ZYr9yOjDnFA/XFGvPBLONyI/AAAAAAADHIQ/3fRS185fhtoVL_z5oMOPE_Un0isa36MnQCPcBGAYYCw/s320/1proc.png" width="320" /></a></div>
<br />
<br />
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).
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-l_s1xFg0wPM/XFGvTeAPAsI/AAAAAAADHIU/jW6-3wRtIQohTJCinolk0sFpF8vr8ZSBACPcBGAYYCw/s1600/2proc.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="703" data-original-width="1254" height="179" src="https://4.bp.blogspot.com/-l_s1xFg0wPM/XFGvTeAPAsI/AAAAAAADHIU/jW6-3wRtIQohTJCinolk0sFpF8vr8ZSBACPcBGAYYCw/s320/2proc.png" width="320" /></a></div>
<br />
<br />
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.
<br />
<br />
(Para medir o clock real da CPU eu uso o i7z, tem no apt mas recomendo compilar um fork atualizado: <a href="https://github.com/infowolfe/i7z">https://github.com/infowolfe/i7z</a> )<br />
<br />
<br />
<br />
<br /></div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com0tag:blogger.com,1999:blog-4577198871661723323.post-83351946800864463762018-11-18T13:59:00.004-08:002018-11-18T13:59:56.778-08:00<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">
<div style="color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px;">
<br class="Apple-interchange-newline" />Consegui mais dois autógrafos, dessa vez do Steve Russell e do Peter Samson, criadores do Spacewar!</div>
<div style="color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Para quem não conhece, o Spacewar foi o primeiro videogame a viralizar. Existiram outros videogames antes, mas nenhum fez sucesso como Spacewar. Foi criado em 1962 no MIT e dali os cartões perfurados com o jogo foram parar em todos as universidade que tinham um PDP-1. (Um desses cartões foi parar na mão do Bushnell, e ele criou o primeiro arcade do mundo, Computer Space, que também foi o produto que deu origem à Atari).</div>
<div style="color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
O Russell e o Samson estavam ontem no Computer History Museum de Mountain View fazendo uma demonstração do Spacewar no PDP-1 funcional que tem lá. O Russell foi o idealizador do jogo e main programmer, o Samson pegou o jogo original e adicionou as estrelinhas no fundo haha. (Você pode achar que estrelinhas no fundo são meh, mas essas estrelinhas são astronomicamente corretas: ele desenha corretamente o céu do MIT no horário atual. Se você jogar por horas a fio, dá para ver as estrelas mexendo).</div>
<div style="color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Aproveitei, é claro, para matar minhas curiosidades técnicas. A primeira coisa impressionante é que apesar do PDP-1 ter o tamanho de quatro armários grandes, o jogo boota instantaneamente. O segredo é que o PDP-1 usa core memory, e core memory não é volátil. Se deixar desligado por vinte anos, o jogo ainda vai estar na memória quando você ligar. Outra coisa que eu não entendia é como ele tinha um framerate tão alto. Um Z80 iria morrer calculando as equações de Newton nessa velocidade. O truque é que o PDP-1 tem multiplicação e divisão por hardware! (Quando você comprava o PDP-1, podia escolher quais opcodes queria instalar na CPU dele).</div>
<div style="color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Agora, o que me pegou de surpresa na apresentação, e que eu não fazia a menor idéia, é que o Peter Samson foi o autor da primeira música polifônica sintetizada por computador! O PDP-1 tem leds programáveis no gabinete, então o que ele fez foi conectar os fios que iam pros leds num alto-faltante, e ligar e desligar rapidinho o sinal neles. Tcharam: quatro ondas quadradas programáveis por software. E ele tinha alguns cartões originais, então além de jogar ao vivo o primeiro videogame, deu também para ouvir ao vivo a primeira melodias polifônica sintetizada.</div>
<div style="color: #1d2129; display: inline; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-top: 6px;">
(Eu gravei o audio da palestra, depois edito e coloco online em algum canto).</div>
</div>
<div style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">
<div style="color: #1d2129; display: inline; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-top: 6px;">
<br /></div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-BG53C9UT16U/W_HgzBMMj4I/AAAAAAAC4ZM/N7lkVABeaGgCXo-TmWcc08g3i636ALxSACLcBGAs/s1600/pdp1spacewar.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1166" data-original-width="1024" height="320" src="https://3.bp.blogspot.com/-BG53C9UT16U/W_HgzBMMj4I/AAAAAAAC4ZM/N7lkVABeaGgCXo-TmWcc08g3i636ALxSACLcBGAs/s320/pdp1spacewar.jpg" width="281" /></a></div>
<div style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">
<div style="color: #1d2129; display: inline; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-top: 6px;">
<br /></div>
</div>
</div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com1tag:blogger.com,1999:blog-4577198871661723323.post-27328242844145592912018-10-08T07:07:00.004-07:002018-10-08T07:07:41.144-07:00<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px;">
Começando com um mea culpa, infelizmente eu sou responsável por boa parte dessa merda toda. Na década de 90 eu tinha website e fanzine digital, ajudei a criar a cultura brasileira na internet. No começo do século eu trabalhava criando dispositivos de inclusão digital, e depois eu fui desenvolvedor do Orkut, a rede social que ensinou os brasileiros a usar a internet.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Eu fiz tudo isso na inocência, achava de verdade que a internet iria trazer mais informação a todos, e que isso melhoraria o mundo. Hoje vejo que fui ingênuo, subestimei o papel da falsa informação e de como a internet permitiu a manipulação de massa de um jeito muito mais eficiente.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Mas se me permitem, eu acho que sei onde a coisa deu errado e tenho uma sugestão para melhorar. Eu acho que o foco do problema é o *broadcast privado*.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Broadcast nunca fui problema na internet. As pessoas mandavam mensagens em lista de discussão, postavam em comunidade do orkut, e nesses meios o fake news nunca teve esse poder que tem hoje.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
O que mudou é que hoje em dia você pode fazer broadcast para grupos fechados (tipo o zap da família). Isso foi o game changer. Quando você postava na lista de discussão ou na comunidade do orkut, você estava aberto à contestação, se você posta X, alguém sempre pode postar não-X logo abaixo. Em termos de evidência acumulada, as coisas se cancelam.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Mas o zap da família é diferente porque é uma rede de contatos confiáveis. Você confia nos seus parentes. Quando chega uma mensagem nesse grupo, você tende a confiar por default na mensagem porque você confia em quem mandou, e essa confiança no emissor transfere para a mensagem.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Aí você forma uma rede de confiança. Não importa que o emissor original seja um bandido na cadeia, escrevendo de um celular que entrou na cela enfiado no cu. Se a mensagem dele passar de grupo em grupo, ela vai ganhando confiança ao longo do trajeto, porque cada broadcast privado aumenta a confiança dela. A confiança vem do caminho, não do conteúdo.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
A solução fácil para isso seria banir broadcast privado. Não pode mais ter grupo de zap, ou pelo menos não pode ter botão de share para grupo privado: se você quiser repassar, vai ter que reescrever. Aumentando a fricção no processo de share, a mensagem falsa tem mais dificuldade de propagar.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Outra solução seria fazer tracking da confiança da mensagem. Eu não faço idéia de como implementar isso, mas cada mensagem teria que ter um score que medisse a confiança da origem. Uma mensagem que transitou inalterada de uma fonte primária teria score alto, uma mensagem enviada por celular tirado do cu teria score baixo.</div>
<div style="background-color: white; color: #1d2129; display: inline; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-top: 6px;">
Mas eu não sei se nenhuma dessas alternativas é economicamente viável, dado que os times que implementam esses apps medem sucesso baseado em quantidade de shares. Se alguém tiver uma idéia melhor para atacar o problema eu agradeço.</div>
<div>
<div style="background-color: white; color: #1d2129; display: inline; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-top: 6px;">
<br /></div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-SGvgprWoRvg/W7tkl6OLRRI/AAAAAAAC1IY/X6LeoK_WRnMJ2kUwCe728hFvucWsh1bngCLcBGAs/s1600/trustnetwork.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="230" data-original-width="500" src="https://4.bp.blogspot.com/-SGvgprWoRvg/W7tkl6OLRRI/AAAAAAAC1IY/X6LeoK_WRnMJ2kUwCe728hFvucWsh1bngCLcBGAs/s1600/trustnetwork.jpg" /></a></div>
<div>
<div style="background-color: white; color: #1d2129; display: inline; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-top: 6px;">
<br /></div>
</div>
</div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com5tag:blogger.com,1999:blog-4577198871661723323.post-40089674263923457332018-09-13T05:45:00.001-07:002018-09-13T05:45:52.642-07:00<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px;">
Programar computadores para mim é mais que uma atividade, é um estilo de vida. Praticamente tudo que eu faço gira em torno disso. Meu trabalho é programar computadores, nas horas vagas eu programo computadores por hobby, até minha esposa eu conheci numa comunidade de computadores.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
E quem me ensinou a programar computadores foi meu pai. Quando eu era bem pequeno, nós programávamos BASIC usando papel e lápis. Nos fins de semana ele me levava para o trabalho dele, onde eu trein<span class="text_exposed_show" style="display: inline; font-family: inherit;">ava nos computadores da empresa. E depois de um tempo nós conseguimos comprar um TK90X que foi o meu primeiro computador.</span></div>
<div class="text_exposed_show" style="background-color: white; color: #1d2129; display: inline; font-family: Helvetica, Arial, sans-serif; font-size: 14px;">
<div style="font-family: inherit; margin-bottom: 6px;">
Estava aqui pensando que meu pai tem muito em comum com o Prometheus da lenda. Prometheus deu a vida aos humanos a partir do barro, e depois roubou a chama do conhecimento para a humanidade. Foi isso que meu pai fez, me deu a vida e o conhecimento da programação. Todo o resto que eu fiz veio disso.</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
Após roubar a chama do conhecimento, Prometheus foi preso em uma montanha, onde toda noite uma águia comia um pedaço de seu fígado. Infelizmente, meu pai também teve isso em comum com ele. Mas, ao invés de uma águia, foi um câncer que comeu o fígado do meu pai. Desses que crescem muito rápido, e não tem remédio nem Hércules que segure.</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
Hoje meu pai faleceu. Obrigado por tudo pai, você foi um Titã.</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-YuuCm-3R1W8/W5pb5j-8CTI/AAAAAAAC03o/KH_wPbisPp0brI220VIrpJ614shVIIcsQCLcBGAs/s1600/promethiuscropped.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="306" data-original-width="481" height="203" src="https://4.bp.blogspot.com/-YuuCm-3R1W8/W5pb5j-8CTI/AAAAAAAC03o/KH_wPbisPp0brI220VIrpJ614shVIIcsQCLcBGAs/s320/promethiuscropped.png" width="320" /></a></div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
<br /></div>
</div>
</div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com5tag:blogger.com,1999:blog-4577198871661723323.post-37709748431281628002018-03-20T06:28:00.000-07:002018-03-20T06:29:37.705-07:00<div dir="ltr" style="text-align: left;" trbidi="on">
O Sloane publicou uma sequência que eu inventei no OEIS! A sequência é "a quantidade de caminhos de n passos feitos por um rei que começa no canto de um tabuleiro de xadrez infinto". O link é <a href="https://oeis.org/A300665">https://oeis.org/A300665</a><br />
<br />
A história da sequência é assim: a gente sabe que o melhor método para resolver puzzles é o exact cover, mas ele só funciona para puzzles tipo sudoku (cada quadrado pode ter só um número), e não funciona em puzzles tipo akari (cada quadrado pode estar iluminado por mais de uma lâmpada).
<br />
<br />
Mas no começo do ano o Knuth publicou uma variação do exact cover que funciona com todos os puzzles, de fato, funciona com qualquer problema que possa ser descrito como constraint programming.
<br />
<br />
É claro que a primeira coisa que passou pela minha cabeça foi: "serve para o Torto Reverso?" (*) Quer dizer, é claro que serve, mas é um bom algoritmo na prática? Antes de codificar, eu resolvi estimar qual seria o tamanho da matriz de cover, e de cabeça ela tem que ser mais ou menos da ordem do número de caminhos que um rei por fazer no tabuleiro de xadrez (já que os movimentos do rei são os mesmos movimentos do torto reverso).
<br />
<br />
Usar os métodos do post de ontem (**) não funciona porque os caminhos não podem repetir casas. Então tem que ser a força bruta mesmo. Fiz um scriptinho em python e damn, a(7)=60215, isso não vai convergir nunca, a matriz é muito grande.
<br />
<br />
De curiosidade, eu peguei a sequência e coloquei no OEIS para ver se tinha assintótico, e uepa! ninguém tinha calculado essa sequência ainda! Fiz uma implementação em Mathematica para conferir as contas e submeti a sequência.
<br />
<br />
O povo do OEIS adorou, mas achou pouco. Com o python eu consigo ir até a(12) só e eles queriam mais. Então eu apelei e reimplementei em C++, aí deu para ir até a(15). Mesmo com a cpu em 100% não dá para ir muito além.
<br />
<br />
Mas eu não me preciso me limitar a 100% de cpu né? Reimplementei em Go e usando 800% de cpu eu consegui o a(16). Depois eu reparei as sequencias são simétricas em relação ao eixo de 45 graus, então só preciso calcular metade delas. Aí cheguei no a(17). Depois disso todas as minhas heurísticas falharam, mas eu ainda não desisti. (Quer dizer, é só deixar o computador ligado uma semana direto que eu pego mais números, mas eu queria um jeito que dê para computar rapidamente).
<br />
<br />
(*) Se você não conhece o torto reverso, o prêmio ainda não teve ganhadores -> <a href="http://blog.ricbit.com/2011/05/torto-reverso.html">http://blog.ricbit.com/2011/05/torto-reverso.html</a><br />
(**) Se você perdeu o post de ontem sobre otimização em grafos, ainda dá tempo -> <a href="http://blog.ricbit.com/2018/03/a-marcha-dos-lemmings.html">http://blog.ricbit.com/2018/03/a-marcha-dos-lemmings.html</a></div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com3tag:blogger.com,1999:blog-4577198871661723323.post-59128548838489558052018-01-04T12:30:00.001-08:002018-01-04T12:30:13.749-08:00<div dir="ltr" style="text-align: left;" trbidi="on">
Estava lendo agora sobre a vulnerabilidade nova que estão exploitando, e é bem legal!<br />
<br />
Funciona assim: primeiro você executa um código desse jeito:<br />
<br />
If (bigvalue < a.length) { value = a[bigvalue]; }<br />
<br />
Se bigvalue for um valor maior que o tamanho do array, voce faria uma leitura fora de bounds, o que te permitiria ler qualquer valor da memória. Mas isso não deveria acontecer, por dois motivos: primeiro o if garante que você nunca executa aquele trecho; segundo mesmo que permitisse a cpu iria estourar um page fault porque você não tem permissão de ler aquele endereço.<br />
<br />
SÓ QUE sua cpu tem execução especulativa. Se o a.length estiver fora do cache, a cpu precisa esperar uns 100 ciclos até o valor chegar. Para não ficar parada, ela sai executando o interior do if, e descarta essa execução quando o valor chega.<br />
<br />
Em princípio isso não deveria ser acessível para o usuário, mas olha a pegadinha: como ele executou especulativamente o if, então agora o a[bigvalue] está no cache!<br />
<br />
Agora você pode usar o seguinte código:<br />
<br />
If (bigvalue < a.length) { value = a[bigvalue];<br />
If (value&1 > 0) { x = a[100]; } else { x= a[200];}<br />
}<br />
<br />
Você controla o array a, então suponha que você forçou o array inteiro para fora do cache. Quando você executar esse código, a cpu vai tentar ler o a.length e travar (já que está fora do cache). Ela vai tentar executar especulativamente o if interno, e ela consegue (nesse ponto o a[bigvalue] está no cache e a cpu está executando especulativamente, então não checa as permissões). Dependendo do bit 0 do a[bigvalue] ela vai tentar ler o a[100] ou o a[200]. Eventualmente o valor de a.length chega e a cpu rebobina tudo porque o primeiro if falhou.<br />
<br />
Agora vem a malandragem, você mede o tempo que leva para ler a[100] e a[200]. Só um deles foi parar no cache, aquele que ler mais rápido indica qual o valor do bit 0 de a[bigvalue]! Você acabou de ler um bit que não tinha permissão! Repete isso para os outros bits e você consegue ler qualquer valor da memória, até a senha do banco que está no outro tab do seu browser!<br />
<br />
Para matar isso é fácil, só desligar o cache na bios. Mas aí seu computador de 2018 vai ficar mais lento que 386 rodando Windows 10, então ninguém vai fazer isso. Sacada muito boa, kudos para quem inventou a técnica.</div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com4tag:blogger.com,1999:blog-4577198871661723323.post-87241203892123225102017-12-16T11:09:00.003-08:002017-12-16T11:09:49.428-08:00<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="b_7lpr6dzhf j_7lpr67ghy clearfix" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 12px; margin-bottom: -1px; zoom: 1;">
<div class="clearfix l_7lpr6dyfm" style="font-family: inherit; margin-bottom: -6px; zoom: 1;">
<div class="clearfix _42ef" style="font-family: inherit; overflow: hidden; zoom: 1;">
<div class="m_7lpr6dyft" style="font-family: inherit; padding-bottom: 6px;">
<div style="font-family: inherit;">
<div class="_6a _5u5j" style="display: inline-block; font-family: inherit; width: 426px;">
<div class="_6a _5u5j _6b" style="display: inline-block; font-family: inherit; vertical-align: middle; width: 426px;">
<h5 class="_5pbw _5vra" data-ft="{"tn":"C"}" id="js_n" style="font-family: inherit; font-size: 14px; font-weight: normal; line-height: 1.38; margin: 0px 0px 2px; padding: 0px 22px 0px 0px;">
Star Wars - COM SPOILER</h5>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="_5pbx userContent _3576" data-ft="{"tn":"K"}" id="js_p" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.38; margin-top: 6px;">
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
Não clique no "ver mais" se você ainda não viu o filme!</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
Sério, o filme sem spoiler é muito bom, qualquer coisinha que você ler vai diminuir a experiência!</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
(Abaixo da linha tracejada tem spoiler)</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-igehNCF8HAc/WjVvctEwrLI/AAAAAAACso8/00ltqbOAI-0z8hzl6pHlqlouxcBmC3jYgCLcBGAs/s1600/spoiler.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="320" data-original-width="500" height="204" src="https://1.bp.blogspot.com/-igehNCF8HAc/WjVvctEwrLI/AAAAAAACso8/00ltqbOAI-0z8hzl6pHlqlouxcBmC3jYgCLcBGAs/s320/spoiler.png" width="320" /></a></div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
<br /></div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
--------------------------------------</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
SPOILERS AHEAD</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
Separando em tópicos:</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
- Sim, um monte de gente morreu. Mas só teve uma morte que me deixou sentido, que foi o Ackbar. Poxa, um personagem tão legal morrendo off-screen? E não apenas mataram o Ackbar, destruíram também a nave dele, a Home One. Eu fiquei aqui pensando que essa não deveria ser a versão original do roteiro. Veja que todas as cenas com a almirante de cabelo roxo poderiam ter sido passadas para o Ackbar sem problemas, e o final seria muito melhor. O Ackbar sozinho na Home One, começa a ligar os hyperdrives, todo mundo achando que ele vai fugir, até que o Hux percebe que o Ackbar está virando na direção dele e fala "IT'S A TRAP!". Diz aí se não seria uma cena muito mais épica!</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
- (Se alguém pensou nisso, eu acho que mudaram para a almirante genérica porque a trama do Poe precisava que ele não conhecesse direito o comandante. Sem isso não teria o motim. A <a class="profileLink" data-hovercard-prefer-more-content-show="1" data-hovercard="/ajax/hovercard/user.php?id=1792372059&extragetparams=%7B%22fref%22%3A%22mentions%22%7D" href="https://www.facebook.com/ilafox?fref=mentions" style="color: #365899; font-family: inherit; text-decoration-line: none;">Ila Fox</a> tem uma teoria mais simples de que essas cenas precisam de alguém que consiga atuar e mostrar emoção no rosto, e a máscara do Ackbar é meio limitada né. Não tem como fazer um fruto do mar ser expressivo).</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
- Eu posso estar sendo muito polêmico, mas agora eu acho que o Kylo Ren é um vilão melhor que o Vader. Sim, o Vader é malvadão e tal, mas eu tenho mais medo do Kylo Ren que do Vader. Veja, eu sei o que o Vader faz, ele faz malvadeza. O Kylo Ren eu não sei! Uma hora ele está amiguinho, na outra ele surta e fica contra você. Eu tenho muito mais medo de quem é imprevisível do que quem é consistente. O Vader sacaneava quem era subordinado, mas os chefes mesmo ele obedecia (tipo o Tarkin e o Imperador). O Kylo Ren não respeita mestre do light side, nem mestre do dark side, nem subordinado, nem ninguém. O Vader é lawful evil, o Kylo é chaotic.</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
- Inclusive, eu não sei se vocês tem experiência com gente surtada, mas ver isso de perto é um negócio assustador. E o Adam Driver conseguiu colocar isso no Kylo Ren. Naquela cena final dele com o Luke, o Kylo estava com o olhar do cara surtado (se você não sabe como é, procura no youtube o vídeo do Morre Diabo). Aquele é o olhar de quem está surtado, e é o olhar do Adam Driver na luta final (e eu acho que foi por isso que escolheram especificamente ele para interpretar o Kylo Ren, na série do Girls ele tinha uns momentos assim).</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
- Aliás, agora eu entendo as razões do Kylo Ren. Imagina a cena: você está de boa dormindo, aí de repente aquele tio que nunca casou entra no seu quarto à noite, com um olhar estranho e o pau de luz na mão. Quem não surtaria? E veja ainda que a escola Jedi é uma escola religiosa. O Luke era padre né. Super entendo a revolta do Kylo Ren.</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
- Sobre o Luke, achei muito bom como as dicas da cena final estavam todas lá, e mesmo assim eu não percebi. Quando o Luke aparece, ele está com a barba de outra cor, a barba está aparada ao invés de largada, o lightsaber está com a cor errada (azul ao invés de verde), estava tudo indicando que não era o Luke de verdade. Acho que o único que percebeu foi o C3PO, ele ia comentar alguma coisa mas o Luke interrompeu com uma piscadinha.</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
- Falando em pequenos detalhes, eu preciso ver o filme de novo para confirmar, mas eu posso jurar que no finalzinho, quando o Finn vai entrar na Falcon, ele abre uma gaveta/armário/something e de relance dá para ver os livros sagrados dos Jedi lá dentro. A Rey roubou os livros antes de fugir da ilha. Se realmente for isso que aconteceu, então a fala do Yoda fica ainda melhor ("não tem nada nessa árvore que a Rey já não tenha").</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
- Sobre a Rey, o diretor conseguiu encaixar bem as cenas desse filme com as do Império. Parece que todo lugar que é forte na Força de um lado também precisa ser do outro. O Yoda se escondeu em Dagobah, mas lá tinha uma caverna cheia de dark side; assim como na ilha desse filme. Achei bacana como as imagens se encaixam: o Luke vai procurar a resposta sobre o Vader e só encontra a si mesmo; a Rey vai procurar a resposta sobre seus pais e só encontra a si mesma. Talvez o diretor esteja sugerindo que o dark side é pensar mais em si mesmo que nos outros, o que bate com a mensagem da Rose antes de desmaiar.</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
- Inclusive eu estava com medo desse filme ser muito copiado do Império como o Force Awakens foi com o episódio 4, e a cena inicial da first order atacando a resistência em fuga me deixou apreensivo. Mas foi melhor que isso, o filme se descolou dos fatos e manteve só a temática em comum. No Império, o plano do Han de esconder com o Lando falha, o plano do Lando de vender o Luke e salvar o Han falha, o plano do Luke de derrotar o Vader e salvar todo mundo falha. O mesmo nesse filme, o motim do Poe falha, o plano do Finn de desligar o sensor falha, o plano da Rey de redimir o Kylo falha.</div>
<div style="display: inline; font-family: inherit; margin-top: 6px;">
(Vou ver de novo no imax na quinta, depois eu complemento).</div>
</div>
</div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com1tag:blogger.com,1999:blog-4577198871661723323.post-3119873692022588652017-12-16T10:16:00.002-08:002017-12-16T10:16:40.835-08:00<div dir="ltr" style="text-align: left;" trbidi="on">
(Star Wars - Sem Spoiler)
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-logOLr2c8Os/WjVi7tAgjVI/AAAAAAACsos/jsUGWSeWQl4id67DgriyP_ovIMUdt0GkQCLcBGAs/s1600/porgo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="833" data-original-width="1438" height="185" src="https://3.bp.blogspot.com/-logOLr2c8Os/WjVi7tAgjVI/AAAAAAACsos/jsUGWSeWQl4id67DgriyP_ovIMUdt0GkQCLcBGAs/s320/porgo.jpg" width="320" /></a></div>
<br />
<div style="font-family: inherit; margin-top: 1em;">
Eu não gosto de futebol. Não gosto de jogar, não gosto de assistir, não vejo graça. E por isso, eu não entendo essa emoção toda que as<span class="text_exposed_show" style="display: inline; font-family: inherit;"> pessoas sentem quando vão ao estádio e assistem ao time predileto fazer um gol. Para mim não faz sentido.</span></div>
<div class="text_exposed_show" style="display: inline; font-family: inherit;">
<div style="font-family: inherit; margin-bottom: 1em; margin-top: 1em;">
Mas eu imagino que deve ser parecido com assistir a uma pré-estréia de Star Wars. Eu lembro que na pré-estréia do episódio 2, quando o Yoda ligou o lightsaber na luta final a galera no cinema aplaudiu e gritou de emoção, como se fosse futebol mesmo.</div>
<div style="font-family: inherit; margin-bottom: 1em; margin-top: 1em;">
Pois bem, nesse filme novo isso aconteceu umas cinco vezes. Teve gente gritando, gente aplaudindo, gente rindo, teve até gente chorando. Esse diretor sabe construir cenas de impacto, a impressão que me deu é que ele mandou todo mundo ir lá no tv tropes ler a entrada de Up To Eleven antes de interpretar os personagens.</div>
<div style="font-family: inherit; margin-bottom: 1em; margin-top: 1em;">
Achei engraçado como tem muito de Star Trek nesse filme. Tem uma cena com um diálogo inteiro de technobabble que parece episódio de TNG. E Star Wars sempre teve escudos com campo de força na mitologia, mas dessa vez eles aparecem visualmente de um jeito que lembrou demais a Enterprise.</div>
<div style="font-family: inherit; margin-bottom: 1em; margin-top: 1em;">
Dá para ver uma decisão consciente de expandir o público-alvo. Star Wars originalmente era coisa de menino. Mas agora tem cenas que foram claramente inseridas para o público feminino (e pelo alvoroço nas listas femininas de Star Wars que a Ila Fox participa, eu sei que funcionou). Eu achei curioso também que esse é o primeiro Star Wars vegetariano(!)</div>
<div style="font-family: inherit; margin-bottom: 1em; margin-top: 1em;">
Mas o melhor do filme mesmo já estava escondido no trailer. A mensagem do trailer era "let the past die", e isso fizeram com maestria. Tanto o Force Awakens quanto o Rogue One eram filmes que olhavam para trás, o Last Jedi é um filme que olha para a frente. O foco não é nostalgia, pelo contrário, é destruir a nostalgia para reconstruir uma coisa nova.</div>
<div style="font-family: inherit; margin-bottom: 1em; margin-top: 1em;">
Esse exercício de destruir para reconstruir melhor eu já vi antes, quando o Alan Moore criou o America's Best Comics. Ao invés de fazer super-heróis autofágicos como a Marvel e a DC fazem, ele foi na fonte original da mídia (pulps) e reconstruiu a partir da dali. Esse diretor fez o mesmo com Star Wars (a fonte original de Star Wars era Kurosawa, e esse filme tem momentos explícitos de Rashomon. Duna também. Tatooine era Arrakis, e nesse filme tem dilemas que são saídos de Duna, como a ética da presciência).</div>
<div style="font-family: inherit; margin-top: 1em;">
Enfim, recomendo de com força.</div>
</div>
</div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com0tag:blogger.com,1999:blog-4577198871661723323.post-72640866918774011632017-11-13T03:50:00.001-08:002017-11-13T03:50:21.772-08:00<div dir="ltr" style="text-align: left;" trbidi="on">
Nessa última viagem eu aproveitei para comprar um fone de ouvido Bose QuietComfort 35 e foi de longe A MELHOR COMPRA DO ANO!<br />
<br />
Primeiro a teoria. Eu uso fone de ouvido no trabalho para poder concentrar melhor, quanto menos ruído melhor. Mas é impossível tirar todo o ruído (acima de 0K sempre vai ter ruído de Boltzmann), e de qualquer modo minimizar ruído é errar o alvo, o que você quer mesmo é maximizar a relação sinal ruído (SNR)<br />
<br />
Note que maximizar a SNR é fácil, basta aumentar o volume do fone! Se o volume estiver no talo, vai mascarar todo o ruído em volta. Mas isso não é bom porque detona seu ouvido. Outro truque é maximizar o espalhamento em frequência: tocar heavy metal mascara mais o que está em volta do que concerto de flauta.<br />
<br />
Pois bem, o cancelamento ativo de ruido do QC35 é tão bom que eu ouço ZERO RUÍDO, mesmo com volume baixo, e tocando música clássica! Melhor fone da vida!<br />
<br />
Para escolher esse modelo eu fui na B&amp;H e testei exaustivamente todos os modelos da loja (50+ marcas). Se fosse só pela SNR, empataram um da Bose, um da Sennheiser, e um da Sony. Mas como eu uso o dia todo, o desempate foi pelo mais confortável, a almofadinha do Bose era a mais suave.<br />
<br />
Esse modelo é Bluetooth com um alcance super bom (consegui uns 40m sem paredes), mas você pode ligar por fio opcionalmente. Pelo fio tem um tiquinho de ruido analógico (trabalho na paulista né, ali é mar de radiação eletromagnética induzindo no cabo). Mas pelo Bluetooth é limpinho.<br />
<br />
Ele sincroniza em dois devices ao mesmo tempo. Eu deixo o note e o celular (tem que deixar o celular porque literalmente não dá para ouvir o toque quando alguém te chama). Dá para parear por NFC para deixar a coisa ainda mais fácil.<br />
<br />
O Bluetooth tem latência alta (200ms), o que não faz a menor diferença no meu caso. Mas se você for usar para jogar videogame competitivo é melhor usar pelo fio, aí a latência é zero.<br />
<br />
A bateria carrega por USB e dura horrores (usei uma semana direto sem precisar carregar). Se quiser economizar bateria dá para desligar o cancelamento ativo. (O cancelamento passivo já é super bom, mas as baixas frequências acoplam na caixinha e ele acaba amplificando esse tipo de ruido. A impressão é que metade do serviço do cancelamento ativo é tirar esse ruído de baixa frequência. Ligado, o ativo tira tudinho)<br />
<br />
A má notícia é que é caro horrores, e pelos reviews na internet parece que as partes plásticas são meio frágeis. Mas o resultado final é tão bom que estou disposto a comprar outro sempre que quebrar, é bom assim!<br />
<br />
(Paguei uns 300 trumpinhos nele. A foca é para lembrar de focar no trabalho).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-EsmqoVuwoHk/WgmG2wlrsSI/AAAAAAACYsw/QeHQT39PvhkRm0UhbYdj_qydR0r9-OqfgCLcBGAs/s1600/23467180_10154867483166594_4844618041701619081_o.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1247" height="320" src="https://1.bp.blogspot.com/-EsmqoVuwoHk/WgmG2wlrsSI/AAAAAAACYsw/QeHQT39PvhkRm0UhbYdj_qydR0r9-OqfgCLcBGAs/s320/23467180_10154867483166594_4844618041701619081_o.jpg" width="249" /></a></div>
<br /></div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com2tag:blogger.com,1999:blog-4577198871661723323.post-37202863296077887712017-08-14T17:48:00.002-07:002017-08-15T20:04:32.185-07:00<div dir="ltr" style="text-align: left;" trbidi="on">
Nesse mês o meu emulador BrMSX faz 20 anos! (sim, estamos velhos)<br />
<br />
Para comemorar, eu coloquei no github todos os fontes. Por todos eu quero dizer *todos mesmo*, eu fui nos backups, recuperei os fontes de todas as versões, e criei um repositório onde cada versão é um commit. Consegui salvar também as descrições originais; e até a data e hora de cada release.<br />
<br />
Curiosidades:<br />
<br />
- O primeiro commit é de 29 Aug 1997, o último é de 10 May 2000, foram quase 4 anos de desenvolvimento contínuo.<br />
<br />
- A maioria dos commits é de sábado e domingo (eu estudava durante a semana), mas aparentemente eu programava bastante de terça à tarde também.<br />
<br />
- O desenvolvimento da versão MSX2 começou em 11 Jul 1999 com release em 29 Jul 1999 (claramente eu esperei as férias para fazer uma mudança tão grande).<br />
<br />
- As primeiras linhas que eu escrevi não mudaram do começo ao fim! É a função readmem no brmsx.asm, se você der um git blame dá para ver que ela é a mesma desde o primeiro commit. Ela também é o caminho crítico, a função que mais é executada no emulador:<br />
<br />
readmem:<br />
mov esi,ecx<br />
mov ebx,ecx<br />
shr esi,13<br />
and ebx,01fffh<br />
mov esi,[offset mem+esi*4]<br />
mov al,byte ptr [esi+ebx]<br />
ret
<br />
<br />
Para quem quiser se divertir, o link é o abaixo.<br />
<br />
<a href="https://github.com/ricbit/brmsx/commits/master"> https://github.com/ricbit/brmsx/commits/master</a><br />
<br />
(Deu um trabalhão do inferno reconstruir o repositório, espero que alguém mais goste haha)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-5NXeM4AHSzw/WZJEvFYpjGI/AAAAAAACWm8/5mob_JO1sj0-qk2WAITJxV49SIiNkZLGQCLcBGAs/s1600/brmsx2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="234" data-original-width="368" height="203" src="https://3.bp.blogspot.com/-5NXeM4AHSzw/WZJEvFYpjGI/AAAAAAACWm8/5mob_JO1sj0-qk2WAITJxV49SIiNkZLGQCLcBGAs/s320/brmsx2.jpg" width="320" /></a></div>
<br /></div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com4tag:blogger.com,1999:blog-4577198871661723323.post-14258046530515292552017-08-05T17:07:00.000-07:002017-08-05T17:07:02.842-07:00<div dir="ltr" style="text-align: left;" trbidi="on">
Brinquedo do dia: fiz uma ferramenta de code coverage para Assembly Z80!<br />
<br />
Mês passado eu tinha feito um parser de json em Assembly Z80, e fiz um monte de unit tests para garantir que estava direitinho. Mas aí eu pensei que só unit test não é suficiente, eu precisava também de code coverage para garantir que não esqueci de testar nenhum code path.<br />
<br />
Escrever a ferramenta foi fácil, um plug-in em TCL pro openmsx e um script python para gerar o html. O que eu não esperava é que eu fosse realmente achar um bug com ele!<br />
<br />
A história é que eu otimizei esse parser por espaço, e usei um monte de truques bem sujos para isso. Um deles é esse aí da foto, que eu chamo de "saltar no meio". Funciona assim: a rotina get_json_action tem dois entry points, um que chama com o registro A zerado (get_token_type), e outra que chama com o A não-zero (get_token_value).<br />
<br />
O natural seria a primeira ter um XOR A para zerar o registrador, e a segundo um LD A,1 ou algo do tipo para setar com não-zero. Mas eu fiz diferente: usei os opcodes 3E AF em seguida. Se você executar a partir do 3E, o Z80 entende como LD A, 0xAF, que é não-zero. Se você rodar a partir do AF, ele entende como XOR A, que é zero. Eu saltei no meio do opcode e salvei alguns bytes assim.<br />
<br />
O problema é que o wiring estava errado! Na hora de inicializar os ponteiros, eu fiz get_token_value = get_token_type + 1, quando deveria ser get_token_type - 1. E os unit tests não pegaram, porque, por coincidência, no turboR o registro A sempre estava não-zero naquele ponto. Ia passar batido, se a ferramenta de coverage não tivesse me avisado que aquele 3E nunca estava sendo executado!<br />
<br />
Para quem ficou curioso, aqui o report mostrando o erro:<br />
<br />
<a href="http://www.ilafox.com.br/ricbit/coverage_error.html">http://www.ilafox.com.br/ricbit/coverage_error.html </a><br />
<br />
E os scripts de coverage estão no repositório do msxjson:<br />
<br />
<a href="https://github.com/ricbit/msxjson">https://github.com/ricbit/msxjson</a></div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com0tag:blogger.com,1999:blog-4577198871661723323.post-51772076045285948672017-08-04T17:29:00.001-07:002017-08-04T17:29:10.267-07:00<div dir="ltr" style="text-align: left;" trbidi="on">
Fiz mais um open source de sucesso!<br />
<br />
Antes de mais nada, como você define um open source de sucesso? Você poderia medir número de usuários ativos, ou algo nessa linha, mas a minha métrica é diferente: o código open source é de sucesso se ele foi reusado por mais pessoas em outros projetos. E aconteceu isso com meu script de músicas em formato VGM!<br />
<br />
Lá por volta de 2014 eu estava com uma música de MSX que foi escrita no formato PLAY do BASIC, e precisava passar isso para Assembly. A maneira natural seria converter nota por nota, mas acabei tendo uma idéia melhor. O emulador openmsx permite que você crie plug-ins usando TCL, então eu criei um plug-in que chama o interpretador BASIC, toca a música, e captura o conteúdo dos registros do PSG e do OPLL.<br />
<br />
Para mim já era o suficiente, mas aí eu pensei que poderia transformar isso num utilitário de uso geral, se eu guardasse o dump dos registros em um formato conhecido. Acabei fazendo um script que converte a música no formato VGM (video game music):<br />
<br />
<a href="https://github.com/openMSX/openMSX/blob/master/share/scripts/_vgmrecorder.tcl"> https://github.com/ricbit/Oldies/blob/master/2014-11-grabfm/grabfm.tcl </a><br />
<br />
Em 2015 o Grauw (da Holanda), pegou o meu script e fez uma versão que captura não só músicas em BASIC, mas em qualquer ambiente (jogos, por exemplo):
<br />
<br />
<a href="https://bitbucket.org/grauw/vgmplay-msx/annotate/536b64e03ffcc5c28e2b65deaa54f213b01abb90/tools/vgmrec.tcl?at=default&fileviewer=file-view-default">https://bitbucket.org/grauw/vgmplay-msx/annotate/536b64e03ffcc5c28e2b65deaa54f213b01abb90/tools/vgmrec.tcl?at=default&fileviewer=file-view-default </a><br />
<br />
Depois o Niek (também da Holanda), pegou a versão do Grauw e adicionou suporte a outros chips de som (SCC, MSX-Audio e Moonsound):<br />
<br />
<a href="https://github.com/niekvlessert/openmsx_tcl_vgm_export/blob/master/vgmrecorder.tcl"> https://github.com/niekvlessert/openmsx_tcl_vgm_export/blob/master/vgmrecorder.tcl </a><br />
<br />
Por fim, hoje esse código foi integrado na main branch do openmsx, agora ele é distribuído como plug-in oficial do emulador:<br />
<br />
<a href="https://github.com/openMSX/openMSX/blob/master/share/scripts/_vgmrecorder.tcl"> https://github.com/openMSX/openMSX/blob/master/share/scripts/_vgmrecorder.tcl </a><br />
<br />
Coloquei na web meio de farra e acabou sendo útil para um monte de gente :)<br />
<br />
(Na foto a fita original do Death Wish 3, que tem uma das melhores músicas do MSX. Na verdade essa fita de brinde num lote, o que eu tinha comprado mesmo era a fita do Goody, que é um jogos prediletos da Ila Fox).
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-UXQJHAwmSDk/WYUQTchBduI/AAAAAAACWiE/XhETAcAtWVYjJTsZC39ZFS2N9qxI60FbgCEwYBhgL/s1600/20170804_211257_HDR.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1234" height="320" src="https://2.bp.blogspot.com/-UXQJHAwmSDk/WYUQTchBduI/AAAAAAACWiE/XhETAcAtWVYjJTsZC39ZFS2N9qxI60FbgCEwYBhgL/s320/20170804_211257_HDR.jpg" width="246" /></a></div>
<br /></div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com2tag:blogger.com,1999:blog-4577198871661723323.post-12326123705710859202017-07-18T07:26:00.001-07:002017-07-18T07:28:06.471-07:00<div dir="ltr" style="text-align: left;" trbidi="on">
Depois de 11 anos, finalmente saiu a tradução completa do Hikaru no Go GBA!<br />
<br />
A história é assim: em 2006 eu estava loucamente viciado em Go e ficava jogando no trem e no ônibus. Mas só tinham duas opções de Go portátil naquela época, um port do gnugo para Palm que era bem fraquinho, e o Hikaru no Go de Game Boy Advance que era mais forte e mais divertido.<br />
<br />
Mas esse Hikago do GBA só tinha em japonês, como eu já tinha experiência em tradução de jogos resolvi fazer eu mesmo. Infelizmente, o japonês do jogo estava acima do meu nível, então eu publiquei na web tudo que eu tinha feito e deixei uma mensagem pedindo ajuda caso alguém tivesse interesse e habilidade.<br />
<br />
Pois bem, em março desse ano um chinês me mandou um email falando que podia continuar a tradução. Eu dei as dicas, expliquei como funcionava o meu script de tradução, e ele se virou sozinho daí em diante. Ontem ele me mandou o resultado, todos os textos do jogo estão traduzidos agora!
<br />
<br />
Agora faltam só os gráficos (tem uns kanjis desenhados como gráficos), e reprogramar alguns trechos do código (tipo a tela onde você insere seu nome, atualmente só dá para colocar kana).<br />
<br />
Para quem quiser jogo, aqui está o ips para aplicar na rom original:
<br />
<br />
<a href="http://www.ricbit.com/mundobizarro/hikago-2017-07-18.zip">http://www.ricbit.com/mundobizarro/hikago-2017-07-18.zip</a><br />
<br />
E eu coloquei no github os scripts de tradução:<br />
<br />
<a href="https://github.com/ricbit/hikago">https://github.com/ricbit/hikago</a><br />
<br />
(E fiquei impressionado como eu era diferente na época, hoje em dia nunca que eu ia usar java e xml para fazer script de tradução. Mas até que foi bom porque o chinês entende de java e conseguiu mudar sozinho um monte de partes do script.)
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-m2kBp6UTtvc/WW4afC1zLkI/AAAAAAACWSQ/0lAtivP1Qr4SNA4WR-C0b6PE4aDoY_HogCLcBGAs/s1600/hikaru.2%2B%25281%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="160" data-original-width="240" src="https://1.bp.blogspot.com/-m2kBp6UTtvc/WW4afC1zLkI/AAAAAAACWSQ/0lAtivP1Qr4SNA4WR-C0b6PE4aDoY_HogCLcBGAs/s1600/hikaru.2%2B%25281%2529.png" /></a></div>
<div class="_1mf _1mj" data-offset-key="bnpio-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="bnpio-0-0" style="font-family: inherit;"><br /></span></div>
</div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com0tag:blogger.com,1999:blog-4577198871661723323.post-55767974612275097152017-07-06T12:50:00.005-07:002017-07-06T12:50:37.883-07:00<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px;">
No episódio de hoje de "great minds think alike":</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Um dos caras que eu recomendo seguir no twitter é o John Carmack (o programador original do Doom). Apesar de ser zilionário por causa do jogo, ele ainda é programador, porque é a coisa que ele mais gosta de fazer. E ele manja pra caramba de programação, então quando passa uma dica é bom parar pra ouvir, porque ele sabe do que está falando.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Dia desses ele twittou um artigo antigo sobre "implementações paralelas". Quem é, ou já foi, da área de jogos, certamente teve que otimizar código até o caroço; e normalmente o ciclo de desenvolvimento é algo do tipo: otimiza, testa, se ficou mais rápido git commit, goto 1.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Isso é legal, mas não é muito honesto. Você pode acabar fazendo uma otimização que desfaz um ganho que você teve alguns ciclos para trás e nem vai perceber. O Carmack, no artigo, menciona que o mais correto é manter todas as implementações em paralelo: você faz copy-and-paste no código, otimiza, e mantém as duas versões funcionando para ter comparação honesta.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Aí eu pensei: ahá! Foi exatamente o que eu fiz com o meu descompressor de gzip em Rust!</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
No meu caso, eu estava começando Rust do zero e simplesmente não sabia qual era o jeito mais rápido de otimizar. Então eu fiz várias implementações em paralelo, e eu troco na linha de comando qual implementação eu quero usar. Assim eu acho a combinação de implementações que dá o melhor ganho global!</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Eu tenho quatro pedaços que posso trocar: um pedaço que "lê os bytes do disco" (entre aspas porque uma das implementações não lê nada, faz um mmap). Outro pedaço é o que converte bytes em bits, outro pedaço é o buffer de 32kb usado para manter a janela do LZ, e o último pedaço é que o escreve no disco de várias maneiras diferentes.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Os resultados não foram intuitivos at all pra mim. Eu achei que o mmap ia bombar, mas nem foi (provavelmente porque é melhor manter um buffer menor no L1 que sujar o cache com um pedação continuo de memória). Escrever no disco em uma thread separada foi ruim também (o overhead de comunicação entre as threads matava o ganho). Um buffer circular de 32kb não é necessariamente melhor que manter o arquivo todo em memória, depende de qual módulo está escrevendo no disco, e assim por diante.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Recomendo a técnica para todos que estão otimizando!</div>
<div style="background-color: white; margin-bottom: 6px; margin-top: 6px;">
<span style="color: #1d2129; font-family: Helvetica, Arial, sans-serif;"><span style="font-size: 14px;">Aqui o artigo do Carmack:</span></span><br /><span style="color: #1d2129; font-family: Helvetica, Arial, sans-serif;"><span style="font-size: 14px;"><a href="http://www.gamasutra.com/view/news/128325/Opinion_Parallel_Implementations.php">http://www.gamasutra.com/view/news/128325/Opinion_Parallel_Implementations.php</a></span></span></div>
<div style="background-color: white; color: #1d2129; display: inline; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-top: 6px;">
Aqui o meu codigo do rgzip:<br /><a href="https://github.com/ricbit/rgzip">https://github.com/ricbit/rgzip</a></div>
</div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com0tag:blogger.com,1999:blog-4577198871661723323.post-51375003503990943502017-05-23T09:57:00.003-07:002017-05-23T09:57:54.639-07:00<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px;">
Ontem o alphago ganhou mais uma, vitória por meio ponto em cima do Ke Jie, campeão chinês. Antes que alguém ache que ele ganhou raspando, lembro que o algoritmo do alphago é tunado para maximizar a probabilidade de vitória, não para maximizar a diferença de pontos. Então é comum que a diferença seja pequena mesmo.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Na partida contra o Lee Sedol o alphago fez um monte de jogadas loucas e fora do comum. Eu estava esperando ver isso de novo, e aconteceu mesmo. Só que as jogadas d<span class="text_exposed_show" style="display: inline; font-family: inherit;">oidas vieram do Ke Jie!</span></div>
<div class="text_exposed_show" style="background-color: white; color: #1d2129; display: inline; font-family: Helvetica, Arial, sans-serif; font-size: 14px;">
<div style="font-family: inherit; margin-bottom: 6px;">
Isso faz sentido, e eu cantei essa bola na minha análise dos jogos contra o Sedol ano passado. O alphago tem dois estágios de processamento, uma rede neutral treinada com partidas profissionais, e um monte Carlo tree search. Se você fizer jogadas loucas, você neutraliza a rede neural, e briga só com o mcts. O Ke Jie estava tentando fazer isso (mas não foi o suficiente).</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
A impressão que eu tive na partida é que eu não sei mais jogar Go. Os dois estavam fazendo jogadas que até ano passado eram consideradas ruins (tipo invadir o sansan no começo do jogo, como assim?). Mas ouvindo os comentaristas parece que é assim que os outros estão jogando hoje em dia, eles aprenderam essas jogadas com o alphago e agora elas são mainstream.</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
Os comentaristas foram curiosos também, era claro que o ocidental comentando era mais forte que a chinesinha, mas eu entendia melhor os comentários dela (porque está mais próximo do meu nível, o ocidental é avançado demais pra mim). E a chinesinha falando era engraçado porque ela falava em inglês, mas com sotaque chinês, e usando termos técnicos em japonês (sente, dame, etc).</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
Também achei engraçada a contagem de pontos, a chinesa contou os pontos das brancas de um jeito muito louco, eu não entendi a conta dela haha. Mas o Ke Jie parecia estar entendendo.</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
A próxima é na quarta, vou assistir mas já não tenho muita esperança de ver o humano ganhando.</div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-VWbpyJdf--Y/WSRqDorkCVI/AAAAAAACVSw/_wfKo7i9X0cIlHlhJY4l8HSp0AqqtogLwCLcB/s1600/kejie.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="212" src="https://2.bp.blogspot.com/-VWbpyJdf--Y/WSRqDorkCVI/AAAAAAACVSw/_wfKo7i9X0cIlHlhJY4l8HSp0AqqtogLwCLcB/s320/kejie.jpg" width="320" /></a></div>
<div style="font-family: inherit; margin-bottom: 6px; margin-top: 6px;">
<br /></div>
</div>
</div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com7tag:blogger.com,1999:blog-4577198871661723323.post-43202692899081011182017-05-13T08:46:00.003-07:002017-05-13T08:46:58.326-07:00<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="67j22-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="67j22-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="67j22-0-0" style="font-family: inherit;">Essa semana eu achei um bug em três compiladores diferentes!</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="9ml5e-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="9ml5e-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="9ml5e-0-0" style="font-family: inherit;"><br data-text="true" /></span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="966f4-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="966f4-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="966f4-0-0" style="font-family: inherit;">Eu estava de boa otimizando o rgzip quando notei ele gerando um assembly bizarro. A função era equivalente a essa:</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="esc72-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="esc72-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="esc72-0-0" style="font-family: inherit;"><br data-text="true" /></span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="7u4dh-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="7u4dh-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="7u4dh-0-0" style="font-family: inherit;">fn vecsum(v : &[u32]) -> u32 {</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="502jk-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="502jk-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="502jk-0-0" style="font-family: inherit;"> return v[0] + v[1] + v[2] + v[3] + v[4] + v[5];</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="3nc70-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="3nc70-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="3nc70-0-0" style="font-family: inherit;">}</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="dolq7-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="dolq7-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="dolq7-0-0" style="font-family: inherit;"><br data-text="true" /></span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="987j1-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="987j1-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="987j1-0-0" style="font-family: inherit;">O Rust tem como princípio sempre fazer bounds checking para evitar buffer overflow, isso é cool. Mas olha só o assembly que ele gera:</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="3gei6-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="3gei6-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="3gei6-0-0" style="font-family: inherit;"><br data-text="true" /></span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="enbt4-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="enbt4-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="enbt4-0-0" style="font-family: inherit;">movq %rsi, %rax</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="9bt19-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="9bt19-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="9bt19-0-0" style="font-family: inherit;">testq %rax, %rax</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="c5ljd-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="c5ljd-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="c5ljd-0-0" style="font-family: inherit;">je .LBB0_7</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="eabih-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="eabih-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="eabih-0-0" style="font-family: inherit;">cmpq $1, %rax</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="b1tgb-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="b1tgb-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="b1tgb-0-0" style="font-family: inherit;">je .LBB0_8</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="1ej0e-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="1ej0e-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="1ej0e-0-0" style="font-family: inherit;">cmpq $3, %rax</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="f2a5s-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="f2a5s-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="f2a5s-0-0" style="font-family: inherit;">jb .LBB0_9</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="7s74-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="7s74-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="7s74-0-0" style="font-family: inherit;">je .LBB0_10</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="3nucg-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="3nucg-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="3nucg-0-0" style="font-family: inherit;">cmpq $5, %rax</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="6nbac-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="6nbac-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="6nbac-0-0" style="font-family: inherit;">jb .LBB0_11</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="f4quq-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="f4quq-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="f4quq-0-0" style="font-family: inherit;">je .LBB0_12</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="dhm4v-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="dhm4v-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="dhm4v-0-0" style="font-family: inherit;"><br data-text="true" /></span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="47s35-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="47s35-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="47s35-0-0" style="font-family: inherit;">Um bound check para cada acesso! Claramente não precisava. Se você fizer só o bound check no v[5], então todos os outros garantidamente passam, porque o vetor é contínuo.</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="960au-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="960au-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="960au-0-0" style="font-family: inherit;"><br data-text="true" /></span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="89dmr-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="89dmr-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="89dmr-0-0" style="font-family: inherit;">Reportei isso na comunidade de Rust e aí ficou mais bizarro ainda. Primeiro, o bug não aparece se você inverter a função:</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="f2ttk-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="f2ttk-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="f2ttk-0-0" style="font-family: inherit;"><br data-text="true" /></span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="6i8f9-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="6i8f9-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="6i8f9-0-0" style="font-family: inherit;">return v[5] + v[4] + v[3] + v[2] + v[1] + v[0];</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="b4fal-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="b4fal-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="b4fal-0-0" style="font-family: inherit;"><br data-text="true" /></span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="6lrbn-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="6lrbn-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="6lrbn-0-0" style="font-family: inherit;">Segundo, não é um bug do Rust, é na camada mais embaixo do LLVM. A gente sabe disso porque um código equivalente em C++ no clang gera o mesmo bug:</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="e34q9-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="e34q9-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="e34q9-0-0" style="font-family: inherit;"><br data-text="true" /></span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="eep0s-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="eep0s-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="eep0s-0-0" style="font-family: inherit;">struct Vec {</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="27nt4-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="27nt4-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="27nt4-0-0" style="font-family: inherit;"> int len;</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="ehqru-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="ehqru-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="ehqru-0-0" style="font-family: inherit;"> int* data;</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="f5bpk-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="f5bpk-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="f5bpk-0-0" style="font-family: inherit;">};</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="42d33-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="42d33-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="42d33-0-0" style="font-family: inherit;"><br data-text="true" /></span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="f25l8-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="f25l8-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="f25l8-0-0" style="font-family: inherit;">inline int get(struct Vec* vec, int i) {</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="cpkss-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="cpkss-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="cpkss-0-0" style="font-family: inherit;"> if (i < vec->len) {</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="do1in-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="do1in-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="do1in-0-0" style="font-family: inherit;"> return vec->data[i];</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="84kvn-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="84kvn-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="84kvn-0-0" style="font-family: inherit;"> } else {</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="54boc-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="54boc-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="54boc-0-0" style="font-family: inherit;"> abort();</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="2e3uv-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="2e3uv-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="2e3uv-0-0" style="font-family: inherit;"> }</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="90nlh-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="90nlh-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="90nlh-0-0" style="font-family: inherit;">}</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="as050-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="as050-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="as050-0-0" style="font-family: inherit;"><br data-text="true" /></span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="3niqi-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="3niqi-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="3niqi-0-0" style="font-family: inherit;">int sum5(struct Vec* vec) {</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="aosfm-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="aosfm-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="aosfm-0-0" style="font-family: inherit;"> return get(vec, 0) + get(vec, 1) + get(vec, 2) + get(vec, 3) + get(vec, 4) + get(vec, 5);</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="8qlae-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="8qlae-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="8qlae-0-0" style="font-family: inherit;">}</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="7fhuk-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="7fhuk-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="7fhuk-0-0" style="font-family: inherit;"><br data-text="true" /></span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="8hcts-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="8hcts-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="8hcts-0-0" style="font-family: inherit;">Por fim, o bug não é só no LLVM, ele aparece também no gcc e o no icc! Confiram:</span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="chdg7-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="chdg7-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="chdg7-0-0" style="font-family: inherit;"><br data-text="true" /></span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="36nnn-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="36nnn-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="36nnn-0-0" style="font-family: inherit;"><a href="https://goo.gl/iEACYr">https://goo.gl/iEACYr</a></span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="fri8k-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="fri8k-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="fri8k-0-0" style="font-family: inherit;"><br data-text="true" /></span></div>
</div>
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="20rth-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
<div class="_1mf _1mj" data-offset-key="20rth-0-0" style="direction: ltr; font-family: inherit; position: relative;">
<span data-offset-key="20rth-0-0" style="font-family: inherit;">Já foi tudo reportado, agora é só esperar alguém consertar. Idealmente eu mesmo consertaria, mas infelizmente a vida é curta :(</span></div>
</div>
<br />
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="ccehj-0-0" style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
</div>
<br />
<div class="" data-block="true" data-editor="9ps3d" data-offset-key="d9ovu-0-0" style="-webkit-text-stroke-width: 0px; background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
<div class="_1mf _1mj" data-offset-key="d9ovu-0-0" style="direction: ltr; font-family: inherit; position: relative; text-align: left; white-space: pre-wrap;">
<span data-offset-key="d9ovu-0-0" style="font-family: inherit;"><br data-text="true" /></span></div>
</div>
</div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com0tag:blogger.com,1999:blog-4577198871661723323.post-50995002030533958952017-04-29T14:10:00.000-07:002017-04-29T14:10:10.021-07:00<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px;">
Eu estava com vontade de escrever um descompressor de gzip do zero, também estava com vontade de aprender Rust, aí pensei: por que não os dois ao mesmo tempo? O resultado é o rgzip:</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
<a href="https://github.com/ricbit/rgzip">https://github.com/ricbit/rgzip</a></div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
A parte gzip foi relativamente simples, eu só segui os RFCs. Por dentro ele é um LZ codificado com Huffma, não tem muito segredo. Mas tem duas coisas curiosas sobre o formato.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
A primeira é que ficou claro para mim que o Phil Katz escreveu a primeira versão em assembly. Tem partes do formato que são difíceis de escrever em linguagens de alto nível, mas são triviais para quem tem rot e shl.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
A segunda é que o formato permite emular RLE, usando janelas para o futuro. Por exemplo, se o arquivo começa com AB, você pode colocar uma janela "volta 2 e copia 6", aí o output é ABABABAB.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Sobre a linguagem Rust, achei bem bacana. A idéia foi tentar construir uma linguagem focada em segurança, onde é impossível programar um bug. Ele faz isso colocando restrições bem severas no tipo de código que você consegue escrever, e usando compile-time checks para garantir isso.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Por exemplo, em C++ você pode fazer isso:</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
int *func () {<br />int x = 1;<br />return &x;<br />}</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Esse código vai dar segfault porque x estava no stack, quando a função retorna o x já morreu. Em Rust isso nem compila, ele saca que o lifetime do &x está restrito ao escopo da função e não deixa você retornar o ponteiro.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Outro problema do C++ é assim:</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
class X {<br />X(int *p) : p_(p) {}<br />int *p_;<br />};</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
int *p = new int;<br />X x(p);</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
E aí, quem vai dar o delete *p, o X() ou quem chamou o X()? O Rust resolve isso com sintaxe própria para dizer quem é o dono do ponteiro. (E como ele sabe quem é o dono, você nem precisa dar o delete. Ele deleta sozinho quando o dono sai do escopo).</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
Tem mais um monte de manhas, achei bem legal. Outras características são:</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
- Ele usa o sistema de type inference do Haskell, e tem muitas ferramentas de programação funcional disponíveis.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
- O const é invertido em relação ao C++. Por default, todas as variáveis são const, se você quiser alterar o valor de uma variável precisa declarar como mut (inspirado em linguagens funcionais provavelmente).</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
- A sintaxe lembra bastante o Go, mas ele possui generics, o que é uma grande vantagem! Generics + type inference permite pegar um monte de erros em tempo de compilação.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
- Além de generics, ele tem também macros! Mas não são as macros podres do C, ao invés de preprocessar texto, as macros do Rust atuam em cima da syntax tree do Rust. Muito mais legal e ainda permite um tipo de "template metaprogramming".</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
- Ele não tem o tipo int! Todos os tipo precisam ser explicitamente declarados. Ao invés de int você pode usar u32 ou i16.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
- E falando nisso, ele não absolutamente nenhum tipo de cast automático, nem para variáveis inteiras. Você precisa explicitamente fazer um cast para copiar um valor u8 para uma variável u32. Isso vem da filosofia dele de ser o mais explícito possível.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
- A stdlib dele é pequena, mas tudo bem porque ele tem um pip-like no pacote default. É só dar um include que ele baixa e instala a lib externa sozinho.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
- Em geral, é mais difícil programar em Rust que em Go, C++ ou Python. Mas tem um motivo, é que você é obrigado a escrever um programa sem bugs sempre, senão não compila. Um monte de coisas nas outras linguagens só são fáceis porque você pode ignorar side-effects ou tratamento de erros.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
- Inclusive, Rust não tem exceptions. Todo o tratamento de erros é feito com o Option<> e Result<> do Haskell (que colocaram recentemente no java também). Acho isso muito, muito melhor que retornar tuplas como no Go.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
- Ele não tem goroutines, mas tem um sistema de threads usando canais para concorrência. Ainda não testei, mas o doc diz que ele pega deadlocks em tempo de compilação. Veremos.</div>
<div style="background-color: white; color: #1d2129; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 6px; margin-top: 6px;">
- Ele também não tem garbage collector, mas nem precisa porque o sistema de RAII, lifetime e ownership explicito toma conta da memória sem precisar de gc.</div>
<div style="background-color: white; color: #1d2129; display: inline; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-top: 6px;">
Recomendo dar uma olhada, achei promissor. Já está na versão 1.x então a linguagem está mais ou menos estável. Eu lembro que programei bastante no Go 0.x e os meus programas dessa época nem compilam mais, em Rust stable isso não deve acontecer.</div>
<div>
<div style="background-color: white; color: #1d2129; display: inline; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-top: 6px;">
<br /></div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-Zl_0uHwGMto/WQUBHFV0YwI/AAAAAAACU6g/MHTiyD6FoAsDp7NLHRgkgRIpyaNCWrYNgCLcB/s1600/D%252Bd%252Binteresting%252Bmonsters%252Bthis%252Bis%252Ba%252Blist%252Bof%252Bsome%252Binteresting_58a516_5444521.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="256" src="https://2.bp.blogspot.com/-Zl_0uHwGMto/WQUBHFV0YwI/AAAAAAACU6g/MHTiyD6FoAsDp7NLHRgkgRIpyaNCWrYNgCLcB/s320/D%252Bd%252Binteresting%252Bmonsters%252Bthis%252Bis%252Ba%252Blist%252Bof%252Bsome%252Binteresting_58a516_5444521.jpg" width="320" /></a></div>
<div>
<div style="background-color: white; color: #1d2129; display: inline; font-family: Helvetica, Arial, sans-serif; font-size: 14px; margin-top: 6px;">
<br /></div>
</div>
</div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com1tag:blogger.com,1999:blog-4577198871661723323.post-32688999775463314062016-09-07T17:50:00.002-07:002016-09-07T17:51:14.893-07:00<div dir="ltr" style="text-align: left;" trbidi="on">
Custa nada avisar a galera: a brincadeira da vez é postar uma foto da primeira mensagem que você recebeu no gmail, pra mostrar como você é fodão e usava internet no tempo das cavernas e tal. NÃO FAÇAM ISSO.<br />
<br />
Talvez você não saiba, mas essa é uma das perguntas de segurança da sua conta. Se por algum motivo você ficar com a conta travada (por exemplo, mudou de celular, aí não consegue receber o otp, e o email alternativo era um do ig que nem existe mais), então o único jeito de destravar a conta é ligando no suporte, e eles vão te fazer perguntas para confirmar. Por exemplo, qual era seu email alternativo e qual a data aproximada em que você criou a conta.<br />
<br />
Se você postar a foto do seu gmail, você está dando metade da informação de graça pro hacker. Não faça isso.<br />
<br />
(De quebra, não custa nada ir na página de segurança e imprimir uns otps para usar quando você estiver sem celular. Pode acontecer de você ter wifi mas não ter 3g, por exemplo numa viagem, e você não quer ficar travado para fora da conta por isso).
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-Jyf4g8IStJ4/V9C1xrYt6iI/AAAAAAACGUI/t5NnTuH9IkEjxfbpPYyx-Pu5Y3I_xKIhgCLcB/s1600/gmail-is-different.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="270" src="https://1.bp.blogspot.com/-Jyf4g8IStJ4/V9C1xrYt6iI/AAAAAAACGUI/t5NnTuH9IkEjxfbpPYyx-Pu5Y3I_xKIhgCLcB/s320/gmail-is-different.png" width="320" /></a></div>
<div class="_1mf _1mj" data-offset-key="296ks-0-0" style="direction: ltr; position: relative;">
<span data-offset-key="296ks-0-0"><br /></span></div>
</div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com0tag:blogger.com,1999:blog-4577198871661723323.post-36956018564954612922016-08-07T07:01:00.000-07:002016-08-07T07:01:03.718-07:00<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px;">
No desfile dos atletas a <a class="profileLink" data-hovercard="/ajax/hovercard/user.php?id=1792372059" href="https://www.facebook.com/ilafox" style="color: #365899; cursor: pointer; text-decoration: none;">Ila Fox</a> estava falando que deve ser emocionante ser um dos atletas que vai representar o seu país, aí disse "ah, eu sei mais ou menos qual é a sensação!".</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
Como assim?, ela perguntou. Veja, eu nunca fui na olimpíada de esporte, mas já fui na olimpíada de matemática! Foi na Olimpíada Brasileira em 1993, onde ganhei medalha de prata.</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
A parte do mais ou menos é que eu nunca representei o país de fato. Quem ganhava medalha na olimpíada brasileira era indi<span class="text_exposed_show" style="display: inline;">cado para ir na Olimpíada Internacional, e de fato eles me chamaram.</span></div>
<div class="text_exposed_show" style="background-color: white; color: #1d2129; display: inline; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px;">
<div style="margin-bottom: 6px;">
Mas tinha um detalhe: a comissão organizadora não tinha dinheiro para pagar a minha passagem até Hong Kong, onde seria o evento! Como eu também não tinha dinheiro, acabei cedendo minha vaga para o próximo na fila.</div>
<div style="margin-bottom: 6px; margin-top: 6px;">
Hoje em dia seria mais fácil, só ir num crowdfunding qualquer e fazer uma vaquinha. De fato, sempre que eu vejo algum aluno pedindo grana para ir em olimpíada eu faço questão de contribuir.</div>
<div style="margin-bottom: 6px; margin-top: 6px;">
De curiosidade, eu resgatei do backup a prova original da época. Eu fechei essa prova, fiz todas as questões, mas peguei a medalha de prata no desempate. (Quem ganhou o ouro naquele ano foi o <a class="profileLink" data-hovercard="/ajax/hovercard/user.php?id=100003144473654" href="https://www.facebook.com/dougvasc" style="color: #365899; cursor: pointer; text-decoration: none;">Douglas Cancherini</a>).</div>
<div style="margin-bottom: 6px; margin-top: 6px;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-FemJ6-ylowM/V6c_EbPEuWI/AAAAAAACFT4/1IQMG8mTk7UmzRUv80brEjOYZOUUxLiegCLcB/s1600/obm.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://1.bp.blogspot.com/-FemJ6-ylowM/V6c_EbPEuWI/AAAAAAACFT4/1IQMG8mTk7UmzRUv80brEjOYZOUUxLiegCLcB/s640/obm.jpg" width="374" /></a></div>
<div style="margin-bottom: 6px; margin-top: 6px;">
<br /></div>
</div>
</div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com0tag:blogger.com,1999:blog-4577198871661723323.post-77188688122519096692016-08-04T18:34:00.000-07:002016-08-04T18:34:11.780-07:00<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px;">
Não sei se já mencionei, mas minha mãe costumava bater em mim para sair de casa. Olha só, eu tinha um microcomputador e uma biblioteca grande, sair de casa pra quê?</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
Claro que isso foi antes do Pokemon Go. Agora eu já saí de casa dois dias seguidos! A <a class="profileLink" data-hovercard="/ajax/hovercard/user.php?id=1792372059" href="https://www.facebook.com/ilafox" style="color: #365899; cursor: pointer; text-decoration: none;">Ila Fox</a> até achou que eu deveria escrever um diário, então aí vai:</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
DIA 1</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
Eu estava no Uber voltando pra casa quando o jogo saiu. Decidi que ia jantar fora e capturar pokemons no caminho, então peguei meu charmander starter e fui.</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
No restaurante mexicano já peguei um Poliwag. Os garçons juntaram todos em volta pra ver. Um deles até mencionou "tô ligado esse aí, vira Poliwhirl" (tava manjando mais que eu!)</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
Depois da janta fui até a igreja onde tinha um marcador, eu não sabia o que fazer com o marcador. Tinha um tiozinho na frente da igreja também. Nós trocamos uma idéia e descobrimos, tinha que girar o marcador, libera pokebola. Boa!</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
Tinha um marcador rosinha no mapa e resolvi ver o que era. No caminho, passei por uns cinco jogadores (e isso foi tipo uma hora depois do jogo ter lançado). Felizmente o bairro aqui é seguro para andar, o aluguel é caro mas pelo menos dá para caçar pokemon no sossego.</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
O marcador rosa eu descobri que era spawn de pokemon, alguém usou um item ou something. Tinha um Pinsir na frente de um restaurante coreano que eu nem sabia que existia (nota mental, voltar lá e ver se posso experimentar tô-mandu-ku).</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
Segui em outra direção, vi um Caterpie mas não conseguia clicar nele no jogo. Não ia de jeito nenhum. Achei que tinha tanta gente jogando que ou o server baleiou, ou a ERB da tim não deu conta de segurar tanto celular ligado.</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
Tinha um grupinho na esquina e resolvi perguntar se para eles funcionava. Um dos guris me explicou que às vezes acontece isso, tem que sair e entrar de novo no jogo. Testei e funcionou! Perguntei se os guris já se conheciam, nope, todos eles tinham se conhecido ali na esquina. Avisei que tinha um Pinsir três quarteirões pra baixo e eles foram lá contentes.</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
Terminei a ronda e voltei pra casa. Entrando no elevador eu vi um gurizinho saindo com celular na mão. Batata! Perguntei se ele tinha pego Pikachu, e ele disse que sim! Eu estava disposto a sair de novo se fosse pra pegar Pikachu, então perguntei onde que ele pegou. "Foi em Times Square", ele disse. - "Times Square, New York?" - "Isso!" - "Dammit, muito longe!"</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
Achei que tinha acabado pelo dia, mas dei sorte, tinha um Staryu no banheiro! Esse foi o último do dia.</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
DIA 2</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
Por motivos de força maior eu fui almoçar às 16h30 apenas. Já que ia sair, aproveitei para caçar. No caminho já vi um guri caçando pokemon de skate. Mano, eu tenho medo de deixar o celular cair enquanto estou andando, imagina andando de skate. Mas o guri tava de boa.</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
Na esquina, outro guri. "Pegou pikachu?", eu perguntei, e ele "já peguei, foi meu primeiro!". Como assim primeiro? "Quando você começa o jogo, se você fugir dos três iniciais aparece um Pikachu", ele respondeu, olhando com aquela cara de "adultos são burros mesmo".</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
Depois de mais meia dúzia de Pokemons, cheguei no nivel 5, agora posso ir em estádio! Fui em um aqui perto, na hora de escolher o time eu fiquei com dó e peguei o time vermelho. Nesse bairro ninguém vai escolher o time vermelho.</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
Continuei até uma praça onde tem dois pokestops juntos. Tinha uma galera ali, tipo mais de vinte guris. Todo mundo caçando pokemon quando eu olho pro lado e vejo um filhote de gato. Gato cinza, bonitão, sedoso, não resisti e capturei ele. Perguntei se era de algum dos vinte guris, ninguém reconheceu, então fui pra casa.</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
Chegando em casa, diagnóstico. Gata filhote, porém gordinha, mansa, sem medo de humanos, provavelmente fugiu de alguém. Nós a batizamos temporariamente de Vesicula. Side mission: achar o dono!</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
Ila e eu voltamos para a praça dos pokestops. Notamos que agora, além dos caçadores de pokemons, estava cheio de casais adolescentes. Deduzimos que falaram para os pais que iam caçar pokemon, espertos eles.</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
Batemos de porta em porta até que nos indicaram uma casa no fim de uma vila. Lá dentro tinha a dona Lindalva falando que a gata sumiu. Nós achamos, peraí que vamos trazer!</div>
<div style="background-color: white; color: #1d2129; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-bottom: 6px; margin-top: 6px;">
Voltamos para casa, colocamos a Vesicula em uma caixa de transporte, e a levamos até a dona Lindalva. Nesse meio tempo os filhos tinham chegado da escola. O menorzinho falou "olha a gata voltou!". Depois meteu uma bifa na gata e disse "não foge mais!". A Vesicula olhou pra mim com raiva e eu pensei "Desculpa Vesicula, eu não sabia".</div>
<div style="background-color: white; color: #1d2129; display: inline; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-top: 6px;">
Antes de ir para casa, passei na praça dos pokestops com a caixa de transporte vazia e anunciei pra galera "trouxe uma caixa para transportar os pokemons capturados!". Todo mundo riu. つづく</div>
<div>
<div style="background-color: white; color: #1d2129; display: inline; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-top: 6px;">
<br /></div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-0JXD3I55gE8/V6PtDIsWCqI/AAAAAAACFRU/jbtR9zLM4Gkh_Xt2zc9r4SswnqQA47XmACLcB/s1600/vesicula.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="273" src="https://2.bp.blogspot.com/-0JXD3I55gE8/V6PtDIsWCqI/AAAAAAACFRU/jbtR9zLM4Gkh_Xt2zc9r4SswnqQA47XmACLcB/s320/vesicula.jpg" width="320" /></a></div>
<div>
<div style="background-color: white; color: #1d2129; display: inline; font-family: helvetica, arial, sans-serif; font-size: 14px; line-height: 19.32px; margin-top: 6px;">
<br /></div>
</div>
</div>
Ricardo Bittencourthttp://www.blogger.com/profile/17393980440854756685noreply@blogger.com1