quarta-feira, junho 30, 2010

PC Assembler Volume I - O eBook (grátis)


Há quase três anos, coloquei aqui no blog o texto do livro "PC Assembler" que eu escrevi nos anos 80. O texto foi disponibilizado de forma bastante grosseira e sem a listagem do programa exemplo.



Desde aquela época existia o plano de gerar uma versão mais caprichada. É o que finalmente consegui concluir. O link abaixo aponta para uma versão PDF, com o texto devidamente formatado. Embora eu tenha revisado o texto ele continua sendo basicamente o mesmo (e portanto restrito à programação em 16 bits nos processadores 8088 e 8086).

Baixe aqui o eBook PC Assembler


Vamos ver se não demoro outros três anos para disponibilizar o texto dos dois livros seguintes da série (Usando o Bios e Usando o DOS).


Atualização 26/9/11: O eBook pode ser baixado  do SkyDrive através do ícone no alto à direita ("Arquivos do Blog").

segunda-feira, junho 28, 2010

Quadrinho Insano

E acho que não vai melhorar se eu explicar que o Leslie está tentando fazer o Oscar cuspir o cérebro do Dean, que caiu quando ele testou a lavadora automática de cabelos inventada pelo Ralph.

A história começa aqui.

Placa Protótipo PIC - Teste

Embora a minha placa não seja muito complicada, já tem um número de conexões suficiente para não ser improvável um erro. É, portanto, importante fazer alguns testes em uma ordem que diminua a probabilidade de queimar um dos componentes.


sábado, junho 26, 2010

Maigret e o Mendigo & O Revolver de Maigret

Seguem as resenhas de mais dois livros de Maigret da coleção L&PM Pocket: "Maigret e o Mendigo" e "O Revolver de Maigret". Para quem não conhece Maigret, sugiro dar uma pesquisada aqui no blog.


sexta-feira, junho 25, 2010

Placa Protótipo PIC - Montagem

Este projeto certamente mereceria uma placa de circuito impresso de verdade, mas fazer placas em casa é algo que ainda está na fase de planejamento.


quarta-feira, junho 23, 2010

Três Milhões de iPads em 80 dias

Nesta segunda feira (21/6) a Apple vendeu o iPad número 3.000.000. É um indício de aceleração das vendas, já que o primeiro milhão demorou 28 dias, o segundo 29 dias e o terceiro apenas 20 dias.

É realmente um produto "mágico e revolucionário", principalmente porque os analistas não conseguem dizer o que atrai os clientes.

Fonte: http://www.theregister.co.uk/2010/06/23/ipad_sales_boost/

Press-release oficial: http://www.apple.com/pr/library/2010/06/22ipad.html

Placa Protótipo PIC - Projeto

O projeto da minha placa protótipo é bastante trivial, baseando-se nos circuitos sugeridos nas documentações do PIC, do MAX232 (conversor TTL <-> RS232) e do gravador McFlash. Segue abaixo o circuito que eu montei (clique para ampliar):


terça-feira, junho 22, 2010

Amazon Reduz o Preço do Kindle

Não sei se é um "efeito iPad", mas o preço dos leitores de ebook está caindo. Ontem a Barnes&Noble reduziu o preço do Nook de $259 para $199, horas depois a Amazon reduziu o preço do Kindle de $259 para $189.

No mês passado eu cheguei a pensar em comprar um Kindle de presente para o meu pai (ainda bem que resisti, pois agora eu estaria triste com a queda do preço). As vantagens do Kindle são suportar a comunicação aqui no Brasil, duração razoável da bateria e uma tela do tipo "electronic ink" (projetada especificamente para leitura). As desvantagens são que ainda sai caro aqui no Brasil e livros técnicos ou mais antigos não estão disponíveis ou tem preços até maiores que as cópias físicas.

Além disso, estou convencido que estes aparelhos ainda vão melhorar muito e existe o risco de "micar" com ebooks em um formato proprietário.

De qualquer forma, está ficando cada dia mais tentador.

Fonte: The Register

segunda-feira, junho 21, 2010

Placa Protótipo PIC - Introdução

Estou trabalhando em um novo "brinquedo" utilizando o microcontrolador PIC (que será oportunamente descrito aqui no blog). Logo no começo do projeto me peguei montando mais uma vez um mesmo circuito básico na breadboard.


Embora a breadboard seja muito prática para fazer teste, facilitando mudanças no circuito, o resultado é bastante frágil e suscetível a mau-contatos. Surgiu daí a ideia de montar de forma mais definitiva um circuito básico, para ser usado como ponto de partida para projetos futuros.

quinta-feira, junho 17, 2010

Download de Arquivos ZIP Suspenso no Google Groups

Recebi um aviso de que o link para download do livro PC Assembler (que está neste post) não está funcionando. Investigando, descobri que todos os downloads de .zip do blog estão dando erro.

Finalmente encontrei um aviso sucinto fórum de ajuda do Google Groups (aqui):

We have received reports of suspicious .zip files being sent to users
with Google Groups. For the time being, we will be disabling .zip
downloads while we investigate this issue. I will update this forum
once we have resolved this issue.

Ou seja, estão suspensos os downloads de arquivos ZIP do Google Groups. Se a situação continuar, vou ter que procurar algum outro local para hospedar os arquivos do blog.

Por enquanto, peço paciência com as mensagens de erro.

quarta-feira, junho 16, 2010

Vulnerabilidade do hcp:// Já Começa a Ser Explorada

Nos links comentados #9 eu mencionei o insensato que divulgou publicamente uma falha de segurança do Windows e um exemplo de código para explorá-la. Segundo o blog de Graham Cluley, já tivemos o primeiro caso de um site ter sido "contaminado" com um ataque. Quem acessava o site (que já foi limpo) corria o risco de ter um "cavalo de troia" instalado automaticamente.

Lembrando, a falha afeta o XP e o Server 2003 mas não as versões mais recentes (Vista, Seven e Server 2008).

Google Code Jam 2010: Making Chess Boards

Making Chess Boards (fazendo tabuleiros de xadrez) foi o terceiro e último problema da rodada !C do Google Code Jam 2010. Segundo a análise oficial, seria uma combinação de parsing, programação dinâmica e truques espertos. Embora eu tenha resolvido com sucesso o problema, minha solução envolve somente parsing e força bruta.

terça-feira, junho 15, 2010

Google Code jam 2010: Load Testing

Load Testing (teste de carga) foi o segundo problema da rodada 1C. Uma distração minha neste problema me impediu de obter a pontuação máxima na rodada.

O enunciado (que você encontra aqui) parece confuso na primeira leitura; felizmente os exemplos são mais claros. Tentando colocar de uma forma simples:
  • Você precisa determinar qual o número mínimo de testes de carga a serem feitos em um site.
  • Os testes são concluídos quando sabemos que o site suporta, dentro de um fator C, pelo menos P participantes ou uma quantidade X < P
  • Suportar X participantes dentro de um fator C significa que você sabe que o site suporta uma carga a mas não uma carga a*C com a < P < a*C
  • Inicialmente você sabe que o sistema suporta uma carga L mas não uma carga P.

segunda-feira, junho 14, 2010

Fontes do Unreal IRC Server Comprometidos

Como diz o comunicado oficial, é embaraçoso. No começo de novembro de 2009, os fontes do Unreal IRC Server (um servidor bastante popular para IRC) foram substituídos por um contendo um backdoor. Quem baixou, compilou e instalou estes fontes está "comprometido" - um usuário remoto pode executar um comando qualquer com as permissões do usuário que roda o daemon (o correspondente a um serviço do Windows).

Não, não é o fim da "civilização tal qual a conhecemos". Também não é a primeira vez que fontes de software livre são comprometidos. Entretanto, demonstra alguns pontos importantes:
  • Existem sim indivíduos (grupos?) gerando "malvadezas" para Linux.
  • Usuários Linux também podem ser vítimas de "cavalos de troia". O costume de não rodar programas como administrador certamente minimiza o estrago.
  • Um malware pode circular por vários meses no mundo Linux sem ser detectado. O fato do fonte estar aberto para a inspeção não garante que ele será periodicamente inspecionado. Também não é costume dos sistemas Linux terem um esquema de verificação automatizado e diariamente atualizado, como é o caso dos anti-vírus usados por quase todos os usuários Windows.
A discussão do anúncio pode ser vista aqui. Achei interessante um comentário de DustinErnest: "That solves the question of why our server kept getting compromised these last couple months" (isto resolve a questão do porque o nosso servidor estar sendo continuamente comprometido nos últimos dois meses), o que reforça o fato (negado por alguns fanáticos) de que existem sim máquinas Linux comprometidas por aí.

Informação obtida no artigo ligeiramente sensacionalista da ZDNet, graças a menção no blog do Ricardo Oneda.

Isto sim é um Laptop!

O vídeo abaixo lembra muito as tiradas de Harpo Marx.



Fonte: Dvorak Uncensored

A Lei de Murphy Ocorrendo na Prática

Muitas pessoas enunciam a Lei de Murphy como "Se algo pode dar errado, vai dar". Pessoalmente prefiro a versão "Se algo puder ser feito errado, alguém o fará". A primeira versão não é apenas pessimista, é fatalista: vai dar errado, independente das precauções. A segunda versão trás embutido um conselho: tome o cuidado de não deixar as coisas poderem ser feitas erradas. Segundo a Wikipedia, não existe consenso sobre o que Edward Murphy disse e se esta é a origem da expressão "Lei de Murphy".

Acabo de ter um exemplo prático da segunda versão. Estou fazendo um pequeno projeto com o microcontrolador PIC (que deve aparecer aqui no blog em breve). Durante o meu desenvolvimento, estou montando o circuito em uma protoboard e regravando continuamente o PIC. Estou usando duas fontes distintas, uma para alimentar o circuito e outra para alimentar o gravador. A primeira é de 5 Volts e a segunda de 12 Voltas. E as duas usam o mesmo conector.

Em retrospecto, é incrível como demorei para fazer uma confusão entre as duas fontes. Mas a minha sorte chegou ao fim e liguei a fonte de 12 Volts ao circuito. Com isto pifei o microcontrolador e um servomotor (acho que o motor ainda está bom, mas ele não obedece mais ao controle de posicionamento).

Minha primeira providência pós-desastre: trocar o conector da fonte de 5 Volts. Pelo menos neste erro não pretendo insistir.

domingo, junho 13, 2010

Links Comentados #9 - Semana da (In)Segurança

A semana passada foi bastante agitada em termos de segurança e insegurança no "mundo digital", com uma surpresa nos patches da Microsoft, versões novas de Flash, Chrome e Safari, invasão em massa de sites, roubo de emails de usuários do iPad e uma divulgação incomum de uma nova falha de segurança no Windows.

Obs.: a maioria dos links é para o The Register, que agrupa muito bem este tipo de notícia.

sábado, junho 12, 2010

Morre Tony Peluso

Hã? Quem é Tony Peluso? O guitarrista dos Carpenters! É provável que você não tenha ouvido falar dele. Aliás, não achei muita coisa na Web fora o anúncio da morte (em quase todos os casos, o mesmo texto).

Devo explicar que o fã dos Carpenters em casa é um dos meus irmãos, eu preferia algo mais pesado. Entretanto, tinha somente um toca disco na casa e nós tínhamos poucos discos, portanto era inevitável conhecer a música deles. O que me impressionou (e continua impressionando) são os arranjos (de Richard Carpenter), sempre muito precisos (ouça por exemplo "This Masquerade"). Para quem pensa que conhece o som dos Carpenters, recomendo procurar o primeiro ("Offering", depois renomeado para "Ticket to Ride").

sexta-feira, junho 11, 2010

Google Code Jam 2010: Rope Internet

Rope Internet foi o primeiro problema da rodada 1C. O enunciado oficial está aqui; considere a figura abaixo que mostra uma série de segmentos de reta unindo dois prédios:


O problema consiste em, dadas as alturas A e B das extremidades das retas, determinar quantas intersecções ocorrem. Para simplificar, é garantido que nenhum par de segmentos começa ou termina na mesma altura e que nunca ocorre de mais de dois segmentos cruzarem no mesmo ponto.

quinta-feira, junho 10, 2010

Google Code Jam 2010: File Fix-It

File Fix-It foi o primeiro problema da rodada 1B, e um dos mais simples da competição.

O enunciado completo está no site oficial, mas pode ser resumido da seguinte forma: o seu programa recebe duas listas de nomes de diretório (todos a partir da raiz e usando '/' como separador das partes), uma com os nomes dos diretórios que já existem e outra com os nomes dos diretórios que se deseja criar, e deve informar quantas operações de criação de diretório (mkdir) serão necessárias (considerando que cada operação cria somente a última parte do nome).

quarta-feira, junho 09, 2010

Google Code Jam 2010: Rodada 2

Neste sábado (5/junho) ocorreu a rodada 2 do Google Code Jam 2010. Estavam classificados para a rodada 3000 competidores; apenas os 500 melhores avançaram para a rodada 3. Eu não estava muito otimista quanto a passar (no que estava correto), ainda mais que nas últimas semanas o rítmo no trabalho tem sido intenso (o que explica também a redução dos posts aqui no blog).

Quando começou a rodada, meu primeiro objetivo era ver se tinha algum problema que eu tivesse uma boa chance de resolver; se não tivesse eu ia simplesmente desistir. Foram 4 problemas, com 2,5 horas para solução. Numa primeira olhada os três primeiros problemas pareciam atacáveis, o quarto envolvia uma geometria pesada. Embora os enunciados fossem razoavelmente simples, nos primeiros 20 minutos ninguém tenha resolvido nenhum problema (nem mesmo um small input). A análise oficial dos problemas pode ser vista aqui.

Eu me interessei pelo problema C (Bacteria), uma versão simplificada do clássico Life. Uma solução "força bruta" capaz de resolver o small input parecia simples. E realmente era, mas levei uma hora para implementar. O problema é que o large input era simplesmente imenso. Tive uma ideia para tentar reduzir a memória necessária e gastei uns 50 minutos implementando uma das minhas soluções complexas, cheia de alocação manual de memória. Para minha surpresa, o código funcionou praticamente de primeira... mas se mostrou muito mais lento que a força bruta! Eu cheguei a imaginar uma terceira solução, mas não tinha certeza se conseguiria implementar nos 40 minutos restantes. Dando uma olhada na classificação, percebi que mesmo que conseguisse resolver o large input não ia dar para passar para a rodada seguinte e entreguei os pontos. Pela análise da Google, esta minha solução não deveria ser suficiente.

A rodada foi realmente difícil. Ninguém conseguiu a pontuação máxima. Somente 12 competidores enviaram uma solução para o large input do último problema, e somente 2 acertaram. Somente os seis primeiros acertaram todo o resto (somente um deles tentou o large input do problema D, mas estourou o tempo). O sétimo colocado acertou os problemas A, B e D, mas não teve tempo para o problema C. O último classificado conseguiu acertar o problema B inteiro e mais o small input do C em uma hora e meia, fazendo 31 pontos (o mesmo que eu teria obtido se tivesse conseguido resolver o problema C inteiro).

Minha principal conclusão da minha participação este ano é que usando C puro não vai dar para ir em frente. Para o ano que vem preciso estar preparado para usar uma linguagem com mais recursos.

Sobra a pendência de apresentar minhas soluções para os problemas que eu resolvi na rodada 1. Vamos ver se as coisas acalmam no trabalho e consigo preparar isto.