Clonando partições teimosamente (2)

Bem, como eu prometi, vou documentar o que eu tentei usar para clonar partições, muitas vezes indo contra os conselhos da internet, por teimosia, hehehe.

Aos poucos vou tentando encontrar os links de páginas que me ajudaram, e às vezes de coisas novas que resumem bem o assunto.

Os dois links abaixo explicam sobre o robocopy

http://serverfault.com/questions/409991/on-windows-is-it-safe-to-do-a-robocopy-in-order-to-clone-the-system

http://www.ijdens.com/home/usingrobocopytobackupallfilesfromadisk

Mas a página que eu usei mesmo como referência foi esta aqui:

http://winhlp.com/node/66

Analisei as opções do robocopy e vi o que seria necessário fazer além da cópia dos arquivos. Achei razoável e comecei os trabalhos.

Um exemplo de comando que usei foi:

robocopy d:\Windows c:\Windows /e /copy:datsou /r:3 /w:2 /zb /np /xj /log:robocopy_windows.log

(o exemplo acima é só para a pasta Windows, eu fui fazendo aos poucos para testar)

Embora haja ótimo suporte para copiar atributos, permissões e proprietários (/copy:datsou), o máximo de suporte a symbolic links e junctions é ignorá-los durante a cópia (/xj no exemplo acima, e também o /sl). Senão há o risco de fazer cópias infinitas recursivamente. Como uma instalação do Windows faz pouco uso desses recursos do sistema de arquivos, recriei as junctions e symbolic links de “Users” e “Program Files” manualmente usando uns poucos scripts.

Infelizmente esqueci dos hard links, e são milhares na pasta do Windows. Acabei ficando com uma cópia onde os arquivos hardemente linkados ficaram duplicados de verdade… Tentei corrigir com alguns scripts, procurando e recriando os links. Aprendi VbScript para complementar os scripts .bat, já que escrever muita lógica em .bat é muito sofrimento (e VbScript também está disponível no ambiente de recuperação iniciado pelo DVD de instalação do Windows, olha só). Acho que poderia ter sido JScript, que é quase igual a JavaScript, mas resolvi usar VbScript porque não precisaria duplicar todas as barras invertidas nas strings (VbScript aceita \ normalmente, JScript tem aqueles escapes precisaria trocar tudo por \\) e também para mexer em algo diferente. Consegui recriar alguns links mas ocorreram erros de permissão em alguns outros. Aprendi então uns comandos interessantes para alterar permissões de alguma pasta:

takeown /F alguma_pasta /R
icacls alguma_pasta /grant:r todos:f /T

Pois é, no Windows não basta você ser administrador e estar executando fora do sistema operacional cujos arquivos você quer copiar: ainda assim é necessário apropriar-se dos arquivos com takeown e alterar as permissões com icacls! No caso do robocopy, o tal “modo backup” da opção /zb deve ter dado uma ajudada para diminuir o sofrimento com permissões. Ah, e sim, o “todos” aparece no comando traduzido para a língua do sistema. A dica que eu segui dizia para usar everyone mas comigo o que funcionou foi o todos mesmo. Bizarro. O formato todo dos comandos é curioso, aliás: cada um tem seu jeito de indicar ação recursiva (/R e /T)…

No fim, mais ou menos neste instante, tendo alterado as permissões de toda a pasta Windows (a cópia), sem ter certeza quais hard links tinham sido corrigidos e quais faltavam no meu script, e sem saber como restauraria as permissões depois, decidi mudar a estratégia e fazer um clone da partição, apesar da cópia anterior ter resultado numa instalação do Windows funcional no novo disco rígido. Usei as ferramentas gráficas de edição de partições do Linux para criar um backup da partição original e restaurá-la por cima de outra. Mais especificamente, usei o gerenciador de partições do KDE, mas imagino que as capacidades não seriam muito diferentes se usasse o Gnome Disks que também tenho instalado (ainda estava seguindo a ideia de evitar instalar coisas novas…).

Não foi nenhum problema restaurar uma partição NTFS menor para uma maior em outro disco. A ferramenta suportou essa situação sem dificuldade. Exceto pelo setor de boot… O resultado era o tal do “blinking cursor”, o cursor piscante que não prossegue para o sistema operacional mas também não dá nenhuma mensagem de erro.

A descrição mais próxima do problema que me aconteceu eu encontrei aqui:

http://reboot.pro/topic/8233-problem-with-booting-cloned-xp-from-a-hdd-solved/

(o problema é identificado na mensagem #11)

Ou seja, o setor de boot dentro da partição inclui alguns valores de geometria de disco que estavam corretos logo após a formatação mas ficaram inválidos ao copiar outra partição por cima. No tópico é sugerido usar um tal de testdisk (no fim eu resolvi com o partclone.ntfsfixboot presente no Clonezilla).

Se tiver curiosidade sobre o Volume Boot Record de uma partição NTFS do Windows, encontrei este link: http://thestarman.narod.ru/asm/mbr/VistaVBR.htm

Se tiver curiosidade também sobre o MBR (Master Boot Record), aquele que fica fora das partições do disco, tem também esta página: http://thestarman.pcministry.com/asm/mbr/VistaMBR.htm

Já sobre particionamento GPT eu não aprendi nada nesta empreitada porque meu sistema não usa e eu já estava com atividades suficientes.

Sei que não seria impossível consertar byte-a-byte do VBR e gravá-lo com dd ou alguma ferramenta do tipo (já fiz algo parecido), mas não era exatamente o que eu tinha em mente. Eu queria limitar o número de programas usados, mas também não precisa ser tudo tão artesanal.

O problema ocorrido me surpreendeu porque eu imaginava que ou

  • o programa de copiar partições faria isso corretamente ou simplesmente indicaria que tal tipo de cópia não era suportado; ou
  • que qualquer ferramenta de correção de boot presente no próprio Windows consertaria isso

No fim, a verdade é que nenhum desses é capaz de corrigir isso. No Windows eu testei o bootsect.exe, bootrec.exe e o bcdboot.exe e a operação ou tinha sucesso mas não resolvia, ou não reconhecia o disco como bootável.

Mencionei na postagem anterior que era possível configurar o Grub para fazer boot da nova instalação a partir do boot loader do Windows, ignorando o boot record. Aprendi isso numa página como esta (não sei se foi exatamente esta):

https://ubuntuforums.org/showthread.php?t=2230300

e o conceito é relativamente simples: trocar o

chainloader +1

por

ntldr ($root)/bootmgr

Os outros comandos que vêm antes são basicamente carregamento de módulos para poder usar essa funcionalidade:

insmod part_msdos
insmod ntfs
insmod ntldr

e busca pela partição que será a variável $root

search .......
set root=........

Não copiei o script exato do Grub aqui porque os detalhes do funcionamento e a necessidade de tantos comando me deixaram confuso. No modo interativo do Grub bastou setar o root e chamar o chainloader ou ntldr, mas imagino que para rodar automaticamente o Grub tenha que se precaver e tentar mais de uma estratégia para encontrar a partição certa… Não facilita nada o fato de todos os sistemas operacionais e BIOS concordarem quem é o /dev/sda ou drive C: enquanto só o Grub atribuiu o outro disco para o hd0

Claro, mexer nessas configurações só funciona se você quiser continuar usando o Grub e não for apagar sua instalação do Linux. Para mim estava OK (consegui passar por toda essa aventura sem perder nenhuma partição! \o/), mas eu ainda queria encontrar uma solução que eu pudesse aplicar em outros computadores, caso viesse a ser necessário.

Foi aí que tentei o Clonezilla. Se termina com zilla deve ser bom, foi o que pensei, hahaha. Bem, o resultado da experiência com ele já foi descrita na postagem anterior, então nem precisa explicar muito mais do que já foi dito. A cópia não foi muito melhor que a tentativa anterior (exceto pela velocidade, que foi melhor), deu o mesmo cursor piscante (será que esqueci de marcar alguma opção?), mas esta FAQ resolveu, ao indicar o uso do partclone.ntfsfixboot:

http://drbl.org/faq/fine-print.php?path=./2_System/23_Missing_OS.faq#23_Missing_OS.faq

E esse é o fim da história. Fiz a cópia e não usei; mas não perdi nada e aprendi algumas coisas. Até editei as configurações do Grub para ocultar a partição copiada, que agora já está com o Windows desatualizado. De qualquer jeito estou escrevendo isto no Linux e faz um tempinho que não abro o Windows… Só não apaguei a cópia porque não estou precisando do espaço e serve como backup.

Clonando partições teimosamente (1)

Há alguns dias comprei um disco rígido novo para acrescentar ao meu computador. Inicialmente iria usá-lo apenas para dados (e programas, mas sem sistema operacional). Mas pensei: não é nenhum SSD com o qual eu vá ganhar desempenho movendo o sistema operacional para lá, mas pode ser um aprendizado interessante e pode simplificar a tabela de partições do meu disco existente que tem 5 partições e 2 sistemas operacionais (já teve 3 sistemas: WinXP, Win7, Ubuntu Linux 12.04 e agora tem Win10 e Ubuntu 14.04).

Fui ver na internet quais eram os métodos mais recomendados e os problemas possíveis ao mover um Windows 10 de um disco para o outro. Assim eu poderia tirá-lo da partição do meio do disco e ele ficaria apenas para dados e para o Linux, que na verdade é o sistema principal da máquina (portanto se eu estragasse a instalação do Windows o prejuízo seria mínimo). Tudo sugeria baixar algum programa para Windows (às vezes livre, às vezes em versão grátis com limitações) e deixar que ele fizesse tudo.

Aí que entra a parte “teimosamente” do título. Teimei que queria fazer o serviço com o mínimo de programas adicionais aos que eu já tivesse no Linux ou no Windows (instalado ou no DVD de instalação). Também teimei em não seguir as dicas de “não iniciar o sistema novo com o disco antigo ainda instalado”. O motivo de evitar programas novos era primeiro por imaginar que eles seriam muito opacos e inflexíveis (ex.: só copiar para novos discos vazios; ignorar ou atrapalhar-se com a existência de outros sistemas operacionais, ou até excluí-los; etc.), segundo por não querer arriscar encontrar neles uma fonte de adware ou spyware, e terceiro para aprender os detalhes do que estou fazendo.

O que aconteceu foi o seguinte:

  • Sim, é possível obter uma instalação funcional do Windows 10 em outro disco apenas copiando arquivos com o comando robocopy.
    • Desde que você use as opções certas e execute a cópia fora do Windows que está rodando (fiz no ambiente de recuperação presente no instalador).
    • Ainda assim, directory junctions, symbolic links, e hard links precisarão de muito cuidado especial para ficarem iguais. Fiquei com uma instalação funcional mas onde os hard links não eram mais hard links (os arquivos ficaram duplicados) e mesmo depois de muitos scripts escritos à mão desisti de consertar.
    • Um pouco de edição offline do registro da nova instalação pode ser útil para definir qual será o novo drive C:
    • É ineficiente, mas eu queria testar. Queria saber o quanto de “mágica” existe no sistema de arquivos do Windows. A conclusão é que ele é bem mais chato com permissões de arquivos e você pode ser surpreendido com alguns recursos obscuros (como as junctions e links, que normalmente não são usados no Windows), mas uma cópia arquivo-por-arquivo pode funcionar, sim.
    • Como não altera os setores de boot da partição, evita o problema de boot que menciono abaixo.
  • Fazer clone da partição com um editor de partições normal do Linux funciona, mas tem uma grande chance de deixar a partição não-inicializável.
    • Ao contrário do que eu imaginava, não havia nenhuma santa ferramenta do Windows que consertasse o boot da partição no novo disco. Perdi as contas da quantidade de vezes que tentei isso. Eu achava que elas reescreveriam todo o setor de boot, mas parece não ser o caso.
    • O Grub pode ser configurado para não carregar o Windows a partir do setor de boot, e sim a partir do bootmgr. Isso desvia do problema, mas não é exatamente uma correção.
  • Resolvi relaxar minha regra de não baixar programas novos e usar o Clonezilla. Software livre, baseado em Linux, com diversas opções. Deve resolver.
    • Uma omissão é que não clona para partições menores (que é útil quando se move para um SSD), ainda bem que eu não estava precisando disso.
    • Acabou resultando no mesmo problema de partição não incializável do caso anterior. Mas pode ser que eu tenha simplesmente esquecido de marcar alguma opção essencial para o tipo de cópia que eu queria fazer.
    • Já estava pensando em desistir totalmente ou usar um software específico para mover instalações do Windows para SSDs, que (tomara) seriam capazes de tratar todos os casos corretamente em vez de me deixar com uma cópia que não inicializa.
    • Depois de mais alguns dias descobri que no próprio sistema inicializado pelo drive USB do Clonezilla há um utilitário chamado partclone.ntfsfixboot (que na verdade é um software separado que eu estava pensando em baixar, mas tê-lo ali já é um incentivo a testá-lo), e ele finalmente foi capaz de consertar o setor de boot (obs.: estou falando do setor de boot que fica dentro da partição, não a MBR).

Entretanto, nesse momento eu já tinha meio que desistido e tinha até atualizado o Windows 10 na partição original para o Anniversary Edition (aquele que permite instalar o Ubuntu dentro do Windows, haha). De certa forma a cópia da partição que fiz antes serviu como backup. No fim não achei bom o desempenho de boot no novo disco. Talvez se rodasse um desfragmentador ou usasse por mais tempo daria chance do Windows otimizar o boot, mas nem sei se vale a pena. A esta altura já aprendi o que queria aprender: editei comandos do Grub durante o boot para testar diversas possibilidades e até VBScript eu usei para tentar consertar os hard links.

Gostaria de criar um novo post ou atualizar este aqui com mais detalhes do que tentei como programas, opções usadas, e links úteis. Quem sabe consigo fazer isso em breve.

Descobri o que me incomoda com Lisp-like languages

Não são só os parênteses. É a falta de pistas sobre o significado dos elementos (fora o primeiro de todos) das listas; e também porque tudo “cresce para dentro”, criando mais níveis de aninhamento. Quer uma variável? Põe mais um let ou um destructuring-bind e indente todo o resto do código mais um nível! (estou pensando principalmente em Common Lisp porque foi um dos Lisps que eu “tentei gostar”, mesmo sabendo que não seria o mais elegante de todos).

A falta de pistas é um caso interessante. À primeira vista, a linguagem parece incrivelmente regular: tudo é uma chamada com parâmetros, assim: (chamada param1 param2 param3). Funções, macros, formas especiais (*), tudo igual.

Mas daí você vê que num (if «condição» «código if true» «código if false»), nem tudo tem o mesmo valor. Não dá para começar a ler do meio, porque o terceiro parâmetro do if só executa se a condição for falsa, e não há separador entre as três partes (uma palavrinha “else” seria bem útil). Você vê (a 1) e isso pode ser a chamada da função “a”, ou pode ser a inicialização de uma nova variável, se estiver na posição correta dentro de um “let”, “do”, etc. Isso da “posição correta” é o que complica. Em linguagens como-C (C-like), é mais fácil começar a “ler do meio”. Tem uma palavra “else”? Você está no meio de um “if”, procure-o mais acima. Abriu/fechou {chaves}? Então você está dentro de um bloco, o que em Common Lisp seria um mais ou menos um “progn”. Encontrou um “=”? É uma atribuição a uma variável existente ou a uma variável nova. Você já sabe que o lado esquerdo não terá seu valor calculado, e sim alterado. Não há como surgir uma nova variável numa chamada(normal, com, parâmetros). Encontrou um ponto-e-vírgula? Descanse e comece de novo na próxima linha (descanse = faça um flush mental do seu parser de expressões).

Para um iniciante, no caso do let e suas inúmeras variantes (let*, letrec, aliás, para que tantas?), até dá para administrar, mas em construções usadas com menos freqüência como “do” ou “handler-case” dá um desânimo: quais parênteses são agrupadores da “sintaxe” e quais são parênteses normais?

Eu preferiria que houvesse algum indicativo mais claro para elementos como:

  • Nova variável. Clojure faz isso com colchetes.
  • Código “normal” de tamanho indeterminado. É o chamado “progn implícito” do Common Lisp, que pode surgir a qualquer momento.
  • Decisões. Num cond os blocos de código ficam muito misturados com as condições, bastaria algo como when/then para melhorar a visualização.
  • Símbolos. Em Lisp existe o quote (como em: ‘a), mas como as macros têm liberdade de fazer o que quiserem, e como colocar «’» em tudo ficaria feio de qualquer jeito, o uso do quote é inconsistente. Make-instance usa nomes ‘quotados, diversas outras construções (let, setf, handler-case, destructuring-bind) não usam.
  • Tipos, anotações, valores default e qualquer coisa opcional. Lisps têm a mania de usar mais um nível de parênteses sempre que for necessário adicionar algo que era opcional.
    • Variável num let? Você pode usar simplesmente o nome da sua variável. Ah, você queria inicializá-la, como normalmente é o caso? Então coloque-a entre parênteses junto com o valor.
    • Parâmetro de função? Basta o nome. Ah, você quer colocar um valor default? De novo: parênteses adicionais. Quer colocar um tipo num parâmetro de defmethod? Parênteses.
    • Slot dentro de um defclass? Lista de nomes entre parênteses. Atributos adicionais? Então agrupe cada slot com seus atributos em mais um nível de parênteses.

E não há necessariamente nenhuma lógica na escolha do que vai ser agrupado ou não. As variáveis de um let ficam entre parênteses no primeiro argumento, e o resto é código. Nada impediria que as variáveis e o código fossem separadas por um símbolo, como “in” (ML-like). Isso evitaria vários parênteses duplos. Ou o bloco de código (o progn implícito) é que poderia ter um delimitador (como parênteses ou chaves). Os slots de uma classe ficam entre parênteses, mas poderiam ser separados do resto com uma palavra, como “slots”.

A forma handler-case ilustra diversos pontos que incomodam: o primeiro parâmetro é o código protegido (o “try” de outras linguagens). Ele não é um progn implícito (mas poderia ser, por que não?), então se quiser fazer mais de uma coisa, você precisa colocar seu próprio progn. Depois vêm os tratadores de exceção (os “catch”), cada um entre parênteses. O primeiro item de cada é o nome da condition (sem nenhum indicativo especial, é tudo posicional). Depois, entre parênteses (precisavam de um delimitador, adivinha qual escolheram?), fica o nome da variável que receberá a condition. E então você tem um espaço livre para escrever seu código tratador de exceções usando os parênteses no seu significado normal.

É assim:

(handler-case
    (progn
      (do-stuff)
      (do-more-stuff))
  (some-exception (e)
      (recover se)))

Quando poderia ser:

(handler-case
    :try
      (do-stuff)
      (do-more-stuff)
    :catch some-exception :as e :do
      (recover se))

No exemplo hipotético acima, os parênteses são usados apenas para chamar funções/macros, enquanto que a estrutura dentro do handler-case é marcada de outras formas. Assim some-exception não fica parecendo uma chamada de função, a variável “e” é marcada com :as (que sugere ao leitor a ideia de um nome novo) e os blocos de código são marcados com :try e :catch/:do conforme seu propósito.

Dá para fazer isso com macros, claro que dá. Mas aí fica tão diferente da linguagem, que cada programador acaba tendo seu próprio dialeto. Se eu queria uma linguagem, acabei ganhando um kit de montagem em vez de uma linguagem usável.

O único lugar onde Common Lisp se permite usar algumas palavras a mais é no loop… Na verdade todas as ideias acima foram inspiradas no loop.

(*) Peraí, formas especiais? Pois é, nem Lisp escapa da necessidade de dar valor especial a certas formas. Fico agora pensando se TCL não acaba sendo mais regular…

Burrice além de exosférica

(porque estratosférica seria muito pouco)

Alguns tipos de burrice servem muito bem para o humor. Outros tipos são apenas falta de conhecimento, ninguém sabe tudo, afinal. Por isso não se deve sair criticando e chamando todo o mundo de burro porque dali a 2 minutos pode ser que essas mesmas pessoas te deem uma excelente lição de vida.

Mas tem um tipo de burrice que eu não suporto. A burrice que faz uso de frases de efeito e aparentemente bem construídas para transmitir uma ideia totalmente errada e ainda por cima nociva à sociedade.

Exemplos de burrice ultraexosférica e maligna:

Por que perdem tempo e dinheiro com pesquisas espaciais (ou outras) em vez de solucionar os problemas da educação/saúde/pobreza/etc.? [não diga isso perto de mim se não quiser perder toda a sua reputação]

— Diz o sujeito usando satélites, cabos submarinos, computadores, chips, GPS, Google Maps, previsão do tempo, radares de controle de vôo, sistemas de navegação inteligente, carros com controle de tração, tomografia computadorizada, ressonância magnética, medicina nuclear… Carlos Cardoso

Porque avanços científicos precisam de muita pesquisa.

Porque com pesquisa científica podem ser inventados meios de comunicação e transporte para melhorar a educação/saúde/bem-estar/etc.

Porque invenções não surgem de gênios que tiveram um sonho milagroso. Surgem de muita pesquisa, às vezes através de várias gerações de cientistas.

Porque se for seguir por essa lógica ao extremo, qualquer trabalho que não seja direto pela educação/saúde/caridade seria inútil. Você é cartunista, músico, ou esportista? Por que não está neste momento numa expedição na selva para atender comunidades carentes?

Aliás, como você faria essa expedição se não existissem os biólogos, químicos, médicos, físicos, matemáticos, geógrafos, cartógrafos que criaram os remédios, os tratamentos, os meios de transporte, de comunicação, GPS, mapas, etc.?

[Qualquer coisa preconceituosa ou discriminante finalizada com…] afinal, existem regras [ou] afinal, não seria apropriado [ou] afinal, existem leis.

“Existem regras” não é explicação suficiente. “Existem leis” também não. “Não é apropriado”, por si só não significa nada e também precisa ser complementado com um motivo. As regras e leis foram criadas por pessoas, com algum objetivo. E é esse objetivo que procuramos. E se o objetivo das pessoas que criaram as leis não for mais válido? E se nunca tiver sido válido? Já existiram leis absurdas até pouco tempo atrás: http://blog.goodstuff.im/embracing_illegal

[During my lifetime] It was illegal in certain states for married couples, for anyone, to use birth control. [Durante minha vida] Era ilegal em certos estados (dos Estados Unidos) para casais casados, para qualquer um, usar controle de natalidade.

During my lifetime, it was illegal for whites to marry blacks. Durante a minha vida, era ilegal brancos se casarem com negros.

During my lifetime, it was illegal to engage in oral sex and gay sex. Durante a minha vida era ilegal praticar sexo oral e sexo homossexual.

E isso não são coisas de um passado distante, são leis que foram abolidas muito recentemente (ver o artigo original para detalhes).

Então, se você argumenta que “existem regras” para justificar que não ocorra um certo casamento que não lhe agrada (nem vou colocar link para o caso real para me poupar e poupar os leitores), ou “não é apropriado” para proibir esse ou aquele tipo de roupa ou de casamento, você é um babaca, um burro, ou os dois. Entenda o real motivo das coisas, e talvez você descubra que às vezes o motivo nem existe…

Você está sendo enganado

Parece que é inevitável. Está em tudo que é lugar. Uma notícia com meias-verdades aqui. Outra, meio copiada, omitiu a metade verdadeira (faça as contas e veja o que sobrou). Uma opinião convicta (mas errada) de um anônimo aqui. Outra opinião convicta (também errada) de alguém importante ou formador de opinião ali.

Pensei neste post “você está sendo enganado” há alguns anos, aí por 2009 quando entrou a atual reforma ortográfica (para vocês verem o atraso que há entre surgir uma idéia e virar post neste blog…). Naquela época, saíam várias matérias rasas sobre a reforma, dizendo que ela era para “unificar o português”, e que o português era a única grande língua sem um padrão único internacional (só esqueceram o inglês, que até onde sei não tem uma academia reguladora e tem diferenças como neighbor × neighbour, e mesmo assim é a língua mais estudada do mundo — só não sei se é a mais aprendida, hahaha).

Como era um assunto que me interessava, li o texto da reforma. O próprio; sem intermediários. Encontrei nele, e em sites especializados, coisas que não se encontravam nas matérias rasas repetidas aos quatro ventos. E pude formar minha própria opinião (tá, tudo bem, eu já tinha uma tendência a ser contra, o que só se confirmou depois de ler). As “unificações” entre Brasil e Portugal eram minúsculas. E outras diferenças surgiam ou se mantinham, porque não eram conciliáveis ortograficamente. É como trocar uma ortografia 93% igual por outra 96% igual entre os países. Sem tratar as complicações que realmente atrapalham a gente. E criando o problema do que/qui/gue/gui, que de acordo com a reforma podem ser pronunciados de duas maneiras cada sem que haja qualquer indicação escrita. Completo desperdício de tempo e energia. Um texto incompleto, cheio de “etc.”, omitindo informações essenciais (esqueceram de mencionar o prefixo re na regra do hífen, entre outras esquisitices). Algumas partes eram tão ruins que até hoje tenho certas dúvidas se aquele era realmente o acordo completo.

O ponto a que quero chegar na verdade não é sobre ortografia: se até num caso desses, que não é nenhum grandioso acontecimento político, as informações já chegam a nós distorcidas, sem referências confiáveis, imaginem em situações mais importantes? Por acaso eu tenho interesse suficiente sobre questões do idioma para correr atrás e a internet deixa isso bem mais fácil. Mas e outras coisas mais sérias que estão acontecendo por aí, como os protestos pelo Brasil sobre o transporte público e outros assuntos (obras da copa, PEC 37, estatuto do nascituro, etc.)? Quantas pessoas ficam apenas nas notícias mastigadas e digeridas sem acessar consultar informações mais precisas? Quando surge um projeto de lei importante, quantas pessoas da população realmente leem-no por inteiro antes de sair dando opinião? Eu tenho admitir que por enquanto só tenho paciência de ler algumas especificações de linguagens de programação e sobre a reforma ortográfica que já mencionei. Mas estou treinando para ler outras coisas também, e quem sabe tirar proveito dos dados abertos e da lei de acesso à informação. Se as notícias viessem mais freqüentemente com um link “leia o texto completo da lei aqui” ou “veja todas as estatísticas aqui” seria mais fácil, e bem melhor do que o supercomum e implícito “isto é tudo que você precisa saber, confie na gente”.

(A fazer, num futuro não especificado e que talvez nunca ocorra: colocar aqui alguns links com fontes importantes de informação, para não deixar este post com o mesmo problema que eu critico… Pelo menos um já vou deixar desde agora: apesar de não ser exatamente o texto oficial do acordo este PDF contém o acordo com várias notas extras que são até boas para mostrar a quantidade de lapsos que havia no original)

(Ah, sim, também não quero dizer que textos de opinião não sejam importantes, eles são. Mas quando um diz que a reforma ortográfica é boa porque vai unificar o português e outro diz que não unifica nada, o que sobra é ler o original e ver quem está falando a verdade)

Edição: Tirinha relacionada, A profecia: http://ryotiras.com/?p=3624

Eu tenho cara de…

Situação 1:

— Tu trabalha em quê?

— Com informática.

— Ah, eu sabia! Pensei que fosse isso mesmo!

Situação 2:

— Tu tem cara de quem não estuda muito e vai bem nas provas.

— Hehe, pois é… :-0

Situação 3:

— Tu trabalha com quê?

— Com informática.

— Ah, bem como imaginei! Quando eu olhei pra ti eu pensei: “deve trabalhar com informática!”

Como ele faz isso?

Quando eu era criança, eu sempre quis saber como o Michael Jackson fazia pra se inclinar desse jeito:

http://www.youtube.com/watch?v=eG1QINHPLYI (aos 2:40 do vídeo)

ou aqui, num vídeo mais curto, só com essa parte: http://www.youtube.com/watch?v=-FqGjYH3GBE

Até tentei fazer isso, antes de aprender o que era centro de gravidade, e perceber que nunca daria certo sem algum truque. Bom, até ele cai… http://www.youtube.com/watch?v=bGjTVNKSXHQ (na marca de 1:00).

Daí, como só se fala em Michael Jackson agora que ele morreu, acabei achando por acaso um site que diz que é um sapato especial, inventado por ele mesmo: http://www.oddee.com/item_96731.aspx