Corrida do Pato na 10ª Festa do Pato em Pirabeiraba-SC

Neste domingo de Dia das Mães fomos fazer um programa diferente: levamos a mãe da Mog para ver a divertida Corrida do Pato, a grande atração da Festa do Pato, que acontece todo ano na área rural de Pirabeiraba, aqui colado com Joinville.

Pirabeiraba oficialmente é um distrito de Joinville, mas na prática, é uma outra cidade. É mais calma, mais simples, mais “do interior”.

Cartaz da Festa do Pato 2011

As regras da corrida são simples:

  1. O pato não pode voar.
  2. O dono não pode encostar no pato.

Percebi que a segunda regra nem sempre é respeitada :)

Foram armados quatro corredores, que são as raias da pista de corrida. Para fazer o pato correr até o final, seu dono, já que não pode encostar nele, tenta assustá-lo. E como fazer isso? A maioria prefere bater palmas e isso parece funcionar bem.

Corrida do Pato

Foto: Carlos Júnior/Notícias do Dia

A corrida é engraçada por dois motivos: 1) é um pato correndo, 2) um pato é imprevisível. Às vezes o bicho empaca já na largada. Às vezes aquele pato que está lá em primeiro lugar simplesmente para no meio do caminho, ou faz meia-volta, deixando o dono com cara de bobo. E quando os patos chegam no final da pista, a área aumenta e eles saem em disparada para qualquer direção, proporcionando cenas impagáveis de uma perseguição homem VS pato.

Outra peculiaridade é o nome dos patos: Ronaldinho, Obama, Bin Laden, Tiririca, Schumacher e Ayrton Senna são alguns deles. Ao todo concorreram 16 patos em várias baterias até chegar à grande final. O pato campeão de 2011 foi o Emerson Fittipaldi. Aliás, ele é bicampeão, pois também venceu em 2010.

Ah, tem também um narrador, que se esgoela no microfone comentando sobre o desempenho dos patos durante as baterias. Ele é um show à parte. Disse que um rapaz deu Viagra para o seu pato no dia anterior, para tentar fazê-lo correr mais. Também disse que o prêmio para o pato campeão seria de R$ 4.000,00. Quaisquer das duas afirmações podem, talvez, ser verdadeiras :)

Curiosidade: A minha sogra tem dois patos, além de alguns gansos e galinhas. Quem sabe em 2012 a gente não vem pra competir também?

Mas independente do campeão, o objetivo de todos é claramente a diversão. O público, o locutor, os donos dos patos; todos estavam com o sorriso no rosto, fazendo realmente uma bela festa. Só os patos que não devem gostar muito ;)

Saiba mais:

Publicado em Meu querido diário | Com a tag , , , | 3 comentários

Vídeo-aula: Como extrair e formatar texto usando Expressões Regulares

Este vídeo demonstra como usar Expressões Regulares para extrair informações de um texto e depois reorganizar no formato que você quiser. São três passos distintos:

  1. Casar o trecho de texto (match)
  2. Marcar as informações desejadas (group)
  3. Formatar o texto (replace)

Sempre faça os três passos sequencialmente, ou seja, não se preocupe com a formatação se você ainda não terminou a expressão que casa o texto. Tampouco saia colocando grupos desnecessários antes de concluir o primeiro passo. Assim, focando em uma tarefa por vez, sua vida com as expressões fica mais tranquila.

Detalhe nerd: Eu precisei dos dados da tabelona do vídeo para fazer o código da função zzunescape, que usa vários comandos s/// do sed para decodificar textos. Com a regex do vídeo pude gerar os comandos de uma só vez, usando o seguinte texto como substituto: s/&#0*$4;/$2/g;\ts/&#x0*$3;/$2/g;\ts/&$1;/$2/g;

Este foi mais um vídeo da série SEM: sem ensaio, sem cortes, sem edição. Ah, e no final do vídeo a galera do twitter dá um alô :)

Expressões Regulares usadas no vídeo:

  • ^\w+\t.\tU\+0*\w+ \(\d+\)\t.*$
  • ^(\w+)\t(.)\tU\+0*(\w+) \((\d+)\)\t.*$

Tabelona da Wikipédia com os dados:

Ferramentas online usadas no vídeo:

Saiba mais sobre Expressões Regulares:

Publicado em Nerd, Vídeo-aula (screencast) | Com a tag , , | 7 comentários

Seu SIM reproduziu um tom

Seu SIM reproduziu um tom

Você já viu essa mensagem? O barulho infernal que vem com ela já te acordou no meio da madrugada? Então estamos no mesmo barco.

Ela aparece do nada, mesmo quando o telefone está travado. Ao tocar qualquer dos botões Cancelar ou Aceitar, a mensagem some, o telefone volta ao normal e nada acontece. É uma mensagem inútil, barulhenta e bastante incômoda. E pior: não consigo desativá-la.

Não sei se este problema só acontece no iPhone, só na minha operadora, ou se é uma combinação esotérica de fatores. De qualquer forma pesquisei na internet pela mensagem, inclusive em inglês (Your SIM played a tone) e vieram pouquíssimos resultados, nenhum esclarecedor.

Escrevo esse texto na esperança de que uma alma caridosa esclareça o mistério nos comentários, assim outros que passam pelo mesmo problema poderão encontrar aqui a solução.

Comigo a mensagem aparece esporadicamente, aleatoriamente, às vezes de madrugada, às vezes durante o dia, calculo que na média seja uma vez a cada 15 dias. Já fucei todos os menus da operadora e não achei nada que a desativasse.

Meus dados:

  • iPhone 3GS comprado no Brasil (sem jailbreak)
  • Chip da Oi, com plano pré-pago
  • Código de área 47, Santa Catarina

Coloque seus dados aqui se você também sofre com este problema!

Atualização em 27/10/2011:

Já faz cinco meses que troquei de operadora (da Oi pra TIM) e desde então, nunca mais recebi essa famigerada mensagem. Que alívio!

Atualização em 28/10/2011:

O leitor Marcio Dantas, que é engenheiro de telecomunicações, nos deu explicações que identificam o problema e sugerem uma solução. Vou colar aqui um resumo:

Meus Caros, Vou dar uma “Luz” para vocês. Sou Eng. Telecom da Huawei. Atuamos com Oi, Tim, Claro, Vivo, Embratel.

Este “SOM” que seu SIM faz, é na verdade uma Atualização nos sistemas da sua operadora. Embora eles dizem que sim, na verdade seu Iphone não está preparado para a Rede Brasileira. [...]

Peguem seu SIM Card e coloquem em qualquer outro telefone, que ao iniciá-lo irá aparecer a mensagem : “Quer Atualizar seu telefone com os serviços da Oi?”. É exatamente isso que acontece nos eu Iphone, mas, como ele não reconhece esse tipo de serviço, ele traduz isso para “Seu SIM fez um Som, Cancelar ou Aceitar”. [...]

Não adianta Cancelar ou Aceitar que não vai fazer diferença em seu Iphone.

Mas, na Operadora, essa atualização vai ficar registrada como “Pendente” assim ele vai continuar a mandar esse sinal para seu telefone até que fique atualizado. Por isso você continuará recebendo essa mensagem durante o dia, noite e etc.

Esses serviços são contratados ou oferecidos gratuitamente, como o OI/Vivo Agenda.

Para melhorar isso, ligue para sua operadora e peça para CANCELAR os serviços de Sincronização de Agenda e outras atualizações de sua operadora. [...]

No Caso de Promoções, deve-se descobrir a fonte e mandar um sms para sair deste programa ou se for da Tim, acredito que no 0800 pedir para desabilitar.

Os comentários completos do Marcio, com informações adicionais, estão aqui, aqui e aqui.

E aí, as dicas do Marcio funcionaram pra você?
As mensagens infernais finalmente sumiram?
Conte pra gente, deixe um comentário!

Publicado em Meu querido diário | Com a tag , , | 53 comentários

O jeito Shell Script de resolver problemas

Shell é diferente, você tem que pensar diferente.

Se você tem um arquivo XML e precisa obter o conteúdo de uma tag, você usa o parser de XML de sua linguagem de programação preferida, certo? Pode ser. Mas há maneiras diferentes de se fazer isso.

E olha que nem precisa ser programador!

Basta saber uma meia dúzia de comandos do shell, abrir a tela preta e viajar na linha de comando. Sem pressa, na tentativa e erro, saboreando o durante para relaxar no depois.

Este vídeo não é sobre XML nem sobre programação.

É sobre shell.
É sobre combinar comandos.
É sobre brincar com texto.

Grepa daqui,
corta dali,
ordena de lá,
junta acolá.

Relaxe. Abra sua mente.

Não precisa ser perfeito.
Não precisa ser veloz.
Não precisa ser eficiente.
Só precisa funcionar.

Resumo dos comandos:

  • grep – extrai linhas
  • sed – edita linhas
  • sort – ordena linhas
  • uniq – remove duplicadas
  • expand – tamanho do TAB

Saiba mais sobre os tópicos do vídeo:

Publicado em Nerd, Vídeo-aula (screencast) | Com a tag , , , | 23 comentários

Site? Blog? Ambos.

Trabalhei bastante nas últimas semanas para tornar realidade algo que há muito tempo eu desejava: unir o site e o blog.

Tinha o blog, o lugar onde eu gosto de contar histórias e interagir com os leitores nos comentários. Ele já mudou de endereço e de servidor algumas vezes, possui um feed RSS para os leitores acompanharem as novidades e roda em cima do popular WordPress. Ele é moderninho, dinâmico.

Tinha o site, o lugar onde desde 1999 coloco artigos, tutoriais, nerdices e textos pessoais, numa salada de arquivos estáticos que criei um por um, digitando código HTML ou usando o txt2tags. Não há comentários, nem interação, nem feed. É um site “old school”.

São dois bichinhos bem diferentes.

Eu sempre fiz sites. Era como escrever um documento no Word, normal. Então apareceu o tal do blog com aqueles conceitos revolucionários de interatividade e coletividade, que fugiam do que era o conceito de site da época: uma central de informações com um autor que escreve e vários leitores que leem, numa via de mão única. O direito de escrita para os leitores era confinado a um cantinho escuro do site chamado Guestbook, o livro de visitas.

É engraçado perceber a mudança, mas hoje não me faz sentido ter um site que não tenha espaço para comentários no final de cada artigo. A opinião dos leitores enriquece o texto, incentiva o autor e torna mais humana e divertida toda a brincadeira.

Aproveitando: muito obrigado a todos que comentam!

Além dos comentários, outra vantagem do blog (e do WordPress, principalmente) são os plugins, menus, widgets e toda a parafernália nerd que dá inteligência, integração e dinamicidade ao site. Poder listar um feed ou os últimos tweets na barra lateral, é muito legal.

Eu queria ter tudo isso também no meu site.

Comecei a pensar em alternativas para deixar o site estático mais… dinâmico. E quanto mais eu pensava, mais o conceito de blog e site se embaralhavam, se mesclavam, e no fim, pareciam uma coisa só. Afinal, qual a grande diferença de um site dinâmico e de um blog? Eu já escrevo de maneira informal em ambos mesmo, então os detalhes tecnológicos são irrelevantes.

É isso. Vou tentar juntar o site e o blog em um só.

E assim começou minha jornada para a integração. Pensei, pesquisei, rabisquei, testei. Repeat.

Site + Blog = Ambos

Site + Blog = Ambos

O caminho é longo e falta muito para uma integração de fato, mas o primeiro grande passo foi dado em 03/03/2011: juntei. O site estático com seus milhares de arquivos e o blog WordPress, agora ambos funcionam simultaneamente na raiz do domínio aurelio.net.

Os detalhes técnicos (nerds) desta junção eu coloquei em um artigo separado, já estreando a criação de uma página dinâmica fora do blog: Site estático e WordPress juntos na raiz do domínio.

Tá, mas direto ao ponto, o que muda para você, leitor?

  • Se você já conhece o site, nada muda. Os endereços permanecem os mesmos, o leiaute também.
  • Se você acessa o blog, agora ele está de cara nova e endereço novo: aurelio.net/blog/. Mas não se preocupe, todos os endereços antigos serão redirecionados automaticamente para os endereços novos, graças ao santo htaccess.

O blog continua no WordPress e o site continua estático, mas o plano de longo prazo é que fique tudo (ou pelo menos a maior parte) dentro do WordPress. Vou fazer a migração aos poucos, com calma.

Para agilizar a integração hoje, enquanto ainda uso tecnologias diferentes para ambos, o menu do blog agora conta com vários links para conteúdos que estão no site. A caixa de pesquisa também funciona para ambos. E a página principal do site ficou uma mistura de WordPress e do que era a antiga versão estática.

Para o futuro próximo, você pode esperar ver páginas que hoje são estáticas, serem integradas ao WordPress e ganharem comentários, além de todos os benefícios dinâmicos já citados. Os endereços terminados em .html vão mudar, mas farei o redirecionamento automático. As áreas nerds (shell, vim, sed, etc) serão as últimas da fila, pois hoje dependem bastante do txt2tags.

Bem, é isso. Um texto chato para a maioria, mas muito importante para mim. O site/blog é um dos meus mais preciosos patrimônios, que construí do zero e já dediquei infinitas horas de trabalho – só nessa integração foram 125h. Estou muito satisfeito com este primeiro passo, e espero um dia poder avisar aqui que a integração está completa.

E agora chega de textos institucionais! :)

Publicado em Mudanças no site | Com a tag , , , , | 17 comentários

Google Docs: Como baixar todos os seus documentos e planilhas (download, salvar, backup)

Faz alguns anos que uso o Google Docs para criar meus documentos e (principalmente) planilhas, substituindo com louvor, para o meu uso, os similares que se encontra no desktop: Microsoft Word, Excel, Pages, Numbers, OpenOffice/BrOffice/LibreOffice*.

* Ou (Open|Br|Libre)Office para aqueles que já viram a luz ;)

Tanto tempo alimentando as planilhas com dados, hoje elas são monstros lotados de informações preciosas, que se por acaso eu perdesse, juro que choraria. Eu confio na competência do Google, sei que minhas planilhas vão estar sempre lá, na nuvem, quando eu precisar. Mas… Vai que?

Hackers, desastres naturais, derrapagem do estagiário do Google. E se um dia meus documentos simplesmente não estiverem mais lá?

É bom ter uma cópia local (também chamada cópia de segurança) de meus documentos. Não para editar e usar, mas somente para guardar numa pastinha e deixar lá. Se por acaso um dia algum documento desaparecer do Google Docs e não houver como recuperá-lo, eu uso minha cópia local como último recurso. Outra utilidade pode ser uma rápida consulta offline, caso necessário.

Pois bem, como fazer esta cópia local de todos os documentos de maneira rápida e prática?

É simples e tudo acontece direto dentro do próprio Google Docs, mas como demorei um tempo até achar exatamente onde clicar, resolvi fazer este post para ajudar aqueles que também estão meio perdidos.

Então vamos lá.

  1. Entre no Google Docs.
  2. Na tela inicial, clique com o botão direito sobre um documento qualquer.
  3. Escolha a opção Fazer download….
  4. Na parte superior da janela que abre, clique em Todos os itens.
  5. Clique no link MS Office ou em Open Office, conforme sua preferência, para escolher qual será o formato dos documentos. Não é possível baixar o documento no formato original do Google Docs.
  6. Aperte o botão Fazer download.
  7. Vai aparecer a tela Compactando arquivos, aguarde.
  8. Quando ele terminar, o download vai começar automaticamente.

Pronto!

Vai ser baixado um arquivo com um nome parecido com documents-export-2011-03-14.zip, onde os números indicam a data atual. Este é um arquivo .ZIP e todos os seus documentos e planilhas estão ali dentro. Basta descompactá-lo para ter acesso aos seus documentos.

Note que foi feita uma conversão automática em todos os seus documentos, do formato do Google Docs para o formato que você escolheu: MS Office ou OpenOffice. Como em toda conversão automatizada, é possível que haja alguma perda durante o processo: formatação, gráficos ou fórmulas de planilhas.

Lembre-se: esta é somente uma cópia de segurança, se precisar editar os documentos, use o original no Google Docs.

Já que não há garantia de que todos os dados serão preservados durante a conversão, aconselho também baixar uma cópia em PDF de todos os documentos e planilhas. Basta repetir o processo e escolher PDF no passo 5. Você terá uma cópia mais fiel ao documento original, e no caso das planilhas, terá os resultados das fórmulas, exatamente como você os enxerga no Google Docs. Assim você pode conferir se ao abrir o documento no Excel ou no OpenOffice, algum valor foi alterado.

Agora é só lembrar de repetir este processo de tempos em tempos, para ter uma cópia de segurança mais atualizada. Para quem não faz um uso muito intenso do Google Docs, pode ser uma vez por mês ou até mesmo por trimestre.

Publicado em Nerd | Com a tag , , , , , , , | 8 comentários

Migração do meu site: SourceForge → DreamHost

O fato

Meu site, que estava há 10 anos hospedado no SourceForge, foi migrado para o DreamHost em 15/02/2011.

A história

Meu site foi criado em 1999 e desde o início ele ficava hospedado nos servidores da Conectiva, a empresa onde eu trabalhava. Cerca de dois anos depois, pelo que me lembro, alguma política interna mudou e decidiram suspender os sites pessoais dos funcionários. Meu site ficou desabrigado.

Naquela época, por motivos que hoje não me fazem sentido, eu considerava errado e imoral pagar por softwares ou qualquer serviço digital, tipo hospedagem de sites. Então procurei uma alternativa gratuita que tivesse suporte ao rsync, que eu já estava acostumado.

Sabe como é, eu era jovem, linuxeiro e achava que dentro do computador tudo deveria ser FREE, no sentido de livre e de gratuito. Hoje compro softwares (proprietários cara!!!) para o Mac e o iOS e sou feliz. É, pode falar: sou um vendido :)

Em 25/09/2001 registrei o projeto verde666 no SourceForge para poder hospedar meu site pessoal. O SourceForge é um site feito para hospedar somente projetos de software com código aberto/livre, e meu site, é claro, não se encaixava neste escopo. Porém, na época as regras não eram tão rígidas, e como eu também disponibilizava alguns softwares livres dentro de meu site, eles aprovaram.

E assim fiquei “de favor” lá no SourceForge durante uma década. Com o tempo as regras deles foram endurecendo para evitar abusos, e ao mesmo tempo meu site foi crescendo em popularidade e visitas, então sempre tive medo que um dia me chutassem de lá por não estar dentro do perfil. Mesmo temendo, a inércia imperou até 2011.

O DreamHost entrou na história em 13/07/2010, quando abri uma conta lá pois queria hospedar um blog para a Mog. Gostei muito do serviço deles, paguei o plano anual e aos poucos fui migrando todos os meus sites para lá também: codare, coisinha, funcoeszz, piazinho, shellscript e txt2tags, agora tá todo mundo no mesmo servidor.

Satisfeito com o novo provedor, decidi migrar também o mastodonte, e assim, após 10 anos de excelentes serviços prestados pelo SourceForge (que recomendo muitíssimo), hoje tenho casa própria e não tenho mais medo de ser chutado :)

Esta migração também foi necessária para eu poder colocar em prática meus planos de integração do site com o blog, para torná-los uma coisa só, mas sobre isso eu falo em um texto futuro.

A nerdice

Migrar um site pode ser simples ou complicado, depende do que exatamente consiste este site e quais são os pré-requisitos para que tudo funcione.

  • São só alguns arquivos HTML estáticos?
  • Tem arquivos PHP também?
  • É um WordPress?
  • Você usa banco de dados?
  • Ele depende de serviços configurados no servidor?
  • É preciso ter quais linguagens de programação à disposição?
  • Você atualiza o site via FTP, scp ou rsync?
  • O servidor novo suporta tudo isso?

No meu caso, felizmente estou no lado simples da balança. O conteúdo do site é todo estático, com arquivos TXT e HTML e a atualização é feita com o rsync. Os requisitos são mínimos (nada de cronjob, SSI, CGI) e preciso de PHP e MySQL para fazer funcionar o cadastro de leitores do livro.

Como curiosidade, aqui estão alguns dados sobre o site, que pesquei antes da migração:

  • 114MB de tamanho total
  • 369 pastas
  • 3.746 arquivos
    • 2.148 imagens
    • 21 mp3
    • 0 vídeos
    • 1.086 .html
    • 120 .txt

Para chegar nestes números, os comandos du, find e wc foram meus amigos:

# tamanho
du -hs /a/www

# pastas
find /a/www -type d | wc -l

# arquivos
find /a/www -type f | wc -l

# arquivos .html
find /a/www -type f -iname "*.html" | wc -l

# imagens (PNG, JPG, GIF)
find /a/www -type f -iname "*.png" -or -iname "*.jpg" -or -iname "*.gif" | wc -l

O processo de migração não foi complicado, basicamente foi só copiar tudo para o servidor novo:

  1. Fiz um rsync da minha máquina para o servidor novo, copiando todos os arquivos do site.
  2. Comparei a listagem de arquivos do servidor novo e do antigo, para ter certeza que eram iguais. Não eram :)
  3. Fiz ajustes no script de rsync e copiei/apaguei alguns arquivos aqui e ali até ficar tudo 100%.
  4. Usando o phpMyAdmin, migrei os bancos de dados: exportei no servidor antigo e importei no novo.
  5. Atualizei host/usuário/senha no arquivo PHP que acessa esse banco.
  6. Mudei o DNS do domínio para apontar para o novo servidor.
  7. Testei o site todo.

A falha no item 2 aconteceu porque durante os anos, alterei as opções que usava no rsync e também adicionei/removi muita coisa no conteúdo dos arquivos usados nas opções --include-from e --exclude-from. Como agravante, também fiz uso intensivo de links simbólicos e as regras de inclusão/exclusão de arquivos do rsync variam conforme a área do site (em algumas eu também subo para o servidor os arquivos-fontes .t2t do txt2tags). Com isso, foram sobrando alguns lixos no servidor antigo, que eu nem sabia que ainda estavam lá.

Eu gostaria de poder dizer que a migração foi tranquila, mas na realidade me tomou 10 horas de trabalho porque, claro, aconteceram alguns imprevistos. Além de alguns detalhes pequenos e fáceis de arrumar, o arquivo .htaccess foi um que deu pau. Isso porque as versões do Apache usado no SourceForge e no DreamHost são diferentes, assim como sua configuração padrão.

  • Antes eu precisava usar a opção Options Indexes, e agora ela dava erro. Bastou removê-la.
  • Antes arquivos .py eram tratados como arquivos de texto normal, agora são executados como programas. Precisei usar um RemoveHandler cgi-script .py para impedir essa execução. Se bem que poder executar programas em Python dentro do site me atiçou as ideias :)
  • Agora eu podia usar URLs relativas nos redirecionamentos (opção Redirect) que apontavam para o próprio site, tornando o arquivo .htaccess mais diet.

O SourceForge era mais conservador e demorava para atualizar os sistemas que rodavam em seus servidores. O DreamHost parece mais moderninho e senti (mas não medi) que o site ficou mais rápido. Para quem estiver curioso, o sistema do servidor lá é:

Linux 2.6.32.8-grsec-2.1.14-modsign-xeon-64 #2 SMP Sat Mar 13 00:42:43 PST 2010 x86_64 GNU/Linux

Olhei, olhei e não entendi que Linux é esse :)

Publicado em Mudanças no site | Com a tag , , , , , | 12 comentários

Como excluir uma subpasta do Dropbox (no servidor), mantendo a cópia local

A versão 1.0 do Dropbox trouxe uma opção há muito tempo desejada pelos usuários, que é poder excluir uma ou mais pastas da sincronização .

Chamada Selective Sync, é útil para deixar sua pasta do Dropbox mais diet em determinadas máquinas. Por exemplo, em sua máquina de casa você usa o Dropbox completo, com todos os seus arquivos. Já no notebook da empresa, você pode querer somente seus documentos, mas não as músicas e fotos. Então neste notebook você desmarca as pastas indesejadas e o Dropbox não vai baixá-las.

Mas o que eu queria mesmo era outra coisa: era poder excluir completamente uma pasta do servidor, mas continuar com minha cópia local de maneira que ela nunca seja sincronizada.

Por exemplo, digamos que dentro da minha pasta de arquivos pessoais há uma pasta chamada TORRENTS, que uso para guardar os arquivos incompletos que ainda estão sendo baixados da internet. São arquivos enormes, que depois de baixados são movidos para um HD externo e não devem nunca ser guardados no meu Dropbox.

Mas como eu inclui minha pasta pessoal no Dropbox, lá foi junto a subpasta TORRENTS e não havia como eu dizer “inclua tudo, menos essa pasta“.

Até agora.

O novo Selective Sync não foi feito pra isso, mas usando de artifícios técnicos criativos (vulgos xunxos), ele pode ser usado pra excluir uma subpasta do servidor.

Vou usar o cenário já descrito como exemplo: tenho minha pasta pessoal no Dropbox e quero excluir somente a subpasta TORRENTS do servidor.

  1. Em sua máquina, copie a pasta TORRENTS e todo seu conteúdo para uma pasta fora do Dropbox.
  2. Apague o conteúdo da pasta TORRENTS original, mas não a pasta em si, deixando-a vazia.
  3. Neste momento o Dropbox vai apagar também o conteúdo dessa pasta no servidor, removendo de vez os arquivos indesejados de seu Dropbox. Espere que ele termine de fazer tudo e fique parado.
  4. Agora você vai usar o Selective Sync para dizer ao Dropbox para não sincronizar mais a pasta TORRENTS (que no momento está vazia). Ele vai levar um tempo processando e no final apagará a pasta vazia.

Nas preferências do Dropbox, aperte o botão Selective Sync

Use o botão Advanced View e desmarque a pasta indesejada

Pronto!

Agora esta é uma pasta “proibida” para o Dropbox. Você pode recriá-la (com o mesmo nome, claro) e colocar o que quiser lá dentro que ele vai ignorar e não tentará sincronizar com o servidor.

Nerds, leiam o tópico For Our Advanced Users para saber dos detalhes sórdidos.

Então agora basta você mover de volta para o local original aquela cópia da pasta TORRENTS que você fez no passo 1. Tudo volta ao seu lugar, e agora o Dropbox ignorará esta pasta e todo seu conteúdo.

Hoje usei esta dica para excluir do Dropbox o cache de fotos que o iTunes cria quando você escolhe um ou mais álbuns do iPhoto para ser copiado para seu iPhone, iPod ou iPad. A pasta fica em ~/Pictures/iPhoto Library/iPod Photo Cache/ e nela são guardadas cópias de suas fotos, em tamanho reduzido. É uma pasta inútil, que não precisa estar no Dropbox, e no meu caso tinha 1.3GB. Foi um alívio remover esse peso.

Publicado em Nerd | Com a tag , , | 6 comentários

Em regex, nem sempre menos é mais

Uso expressões regulares há tantos anos, que hoje para mim é muito natural, diria até automático, ficar compondo uma regex na cabeça, nas mais diversas (e inúteis) situações. Por exemplo, se estou relaxado lendo um artigo e em seu texto aparece alguma repetição, pequena variação ou formato numérico, me pego pensando nos metacaracteres que casariam aquilo.

Tá, é bizarro, eu sei :)

Nos artigos anteriores do blog, falei sobre os equipamentos da Apple e várias vezes precisei citar os três brinquedos pretos: iPod, iPad e iPhone. Ao escrever estes nomes, um alerta apita aqui dentro: Epa! Repetição e variação detectados!

There’s a regex for that :)

Compor uma expressão regular que case os três nomes não é difícil. Uma primeira alternativa, mais simplista, seria usar o metacaractere ou para fazer a lista de palavras permitidas:

iPod|iPad|iPhone

A barra vertical indica que esta expressão casa iPod ou iPad ou iPhone. Simples, não? Fácil de ler e entender. Mas podemos tornar esta expressão menor e mais eficiente.

O segredo para fazer uma boa expressão é saber identificar padrões. Ao olhar com atenção para estas três palavras, percebemos que todas possuem o mesmo prefixo, ou seja, todas iniciam com as letras “iP”:

  • iPod
  • iPad
  • iPhone

Assim, podemos tornar nossa expressão mais eficiente deixando claro que o padrão começa com “iP”, e depois disso, há três alternativas:

iP(od|ad|hone)

Essa nova expressão continua casando as três palavras, mas agora ficou menor e mais rápida. Porém, agora ela ficou mais difícil para ler e entender. Trocamos legibilidade por eficiência.

Aplicando mais uma vez a mesma técnica de identificar padrões e melhorar a expressão, podemos perceber que tanto iPod quanto iPad terminam com a letra “d”. Podemos isolar esta letra, trocando o trecho od|ad por [oa]d:

iP([oa]d|hone)

Continuamos casando as mesmas palavras, porém agora a legibilidade foi pelo ralo. É preciso interpretar a expressão mentalmente para saber quais são as palavras que ela casa. Será que fomos longe demais?

Você sempre deve avaliar se esse tipo de melhoria é mesmo uma vantagem.

  • Era necessário otimizar a expressão?
  • A expressão anterior estava lenta?
  • Todos que darão manutenção nesta expressão saberão entendê-la?
  • O que é mais importante: velocidade ou legibilidade?

Acostume-se a sempre fazer estas perguntas a si mesm[ao] cada vez que for melhorar alguma expressão regular. Você pode se surpreender com as respostas :)

Às vezes, é possível encontrar um meio termo que não prejudica tanto a legibilidade, mas resulta em um ganho na performance.

i(Pod|Pad|Phone)

Nesta expressão, isolei somente a letra “i”, que é um prefixo muito conhecido para os produtos da Apple. Deixei o “P” repetindo em todas as alternativas para não quebrar as palavras. Assim fica clara a separação entre o prefixo “i” e o nome dos produtos: Pod, Pad e Phone.

i(Phone|Pod|Pad)

Como última melhoria, movi o trecho “Phone” para o início das possibilidades, para deixar mais claro que esta é uma lista de palavras com produtos da Apple. As alternativas Pod e Pad são muito parecidas e podem gerar confusão. Deixando o “Phone” no início, ali bem pertinho do “i”, fica mais fácil do leitor enxergar “iPhone” e deduzir o iPod e iPad com mais facilidade.

Agora, comparemos as duas expressões:

iP([oa]d|hone)

i(Phone|Pod|Pad)

A primeira seguiu somente o caminho da eficiência, enquanto a segunda fez um balanço entre eficiência e legibilidade.

Nos meus primeiros anos de expressões regulares, eu faria sempre a primeira, pois é a menor e mais eficiente. Hoje, depois de já ter sofrido muito dando manutenção para minhas próprias expressões enigmáticas do passado, valorizo mais uma expressão legível, melhorando a velocidade somente quando estritamente necessário.

Quem já usa as Funções ZZ há tempos, sabe que seu código era afetado por essa mentalidade do “menor é melhor”. Ainda bem que evoluí :)

Aprenda mais sobre os tópicos deste texto:

Publicado em Nerd | Com a tag , | 8 comentários

Imprimir como PDF do iPhone/iPod/iPad para o Dropbox (via AirPrint)

Imagine que legal: você está em seu iPhone (ou iPod/iPad) lendo um email. Aí você usa o botão Imprimir e plim, aparece um PDF dentro do seu Dropbox, contendo o email. Depois você abre o Safari e acessa um site legal. Novamente usa o botão imprimir e plim, um PDF com o site aparece em seu Dropbox. Depois você abre o Pages, edita um documento e… Acho que você já entendeu, né?

Em qualquer aplicativo do iOS que tenha a função de imprimir, você pode gerar um PDF e guardá-lo automaticamente em seu Dropbox, ficando disponível em todos os seus computadores, smartphones, etc. Você só precisa de um Mac (ou Windows, ou Linux) na mesma rede, configurado para funcionar com o AirPrint e Dropbox. Vou te ensinar como se faz.

Mas antes, deixa eu te explicar o porquê.

Eu tive essa necessidade quando precisei pagar um boleto no banco e tentei fazer isso pelo iPad. Acessei o site do banco, preenchi os dados e fiz o pagamento, deu tudo certo. Aí apareceu a opção para emitir o comprovante, que eu sempre salvo como PDF e guardo. Mas dessa vez, por estar no iPad, travei.

Como vou fazer isso? Não posso baixar arquivos nem tem a opção mágica de imprimir como PDF, que eu sempre uso no Mac. E depois, mesmo que eu conseguisse, ainda teria que plugar o iPad no computador para enfim poder copiar o comprovante para junto de meus arquivos. Que saco.

Na busca de uma solução, aprendi como converter um site pra PDF e guardá-lo na biblioteca do iBooks. Mas isso não funcionaria no site do banco, que é inacessível para os sites externos que poderiam convertê-lo para PDF. Pesquisando mais, caí neste artigo que mostrou a solução para o meu problema:

  • A partir do iOS, imprimir via AirPrint para uma impressora PDF em meu Mac, que salva direto dentro do meu Dropbox.

Sei que isso parece complicado (e na verdade é!), mas já expliquei aqui no blog como fazer a parte mais difícil. Vamos lá para o passo a passo.

  1. Configure seu Mac para ser uma impressora PDF.
  2. Ative o AirPrint em seu Mac.
  3. Mande imprimir algo direto do iPhone para testar tudo e para que seja criada a pasta especial que guarda os PDFs.
  4. Confira se o PDF foi mesmo criado. Para isso, abra a seguinte pasta:

    Seu HD > Usuários > Compartilhado > CUPS-PDF

    Se tudo deu certo, ali haverá uma pasta chamada guest e seu PDF estará dentro dela.

    Aqui vem a pegadinha: a pasta guest é protegida e você não tem permissão para ver seu conteúdo. É preciso fazer mágicas no Terminal para resolver este problema:

      cd /var/spool/cups-pdf
      sudo chmod o+rwx guest/
      sudo chmod 666 guest/*

    Agora sim, você poderá ver seu PDF. Mais pra frente eu te ensino como fazer para que não ocorra mais esse problema de permissões.

    Então neste ponto já está quase tudo funcionando, você consegue imprimir do iPhone e salvar como PDF em seu Mac. Agora vem o pulo do gato, que é colocar este PDF na nuvem.

  5. Dentro do seu Dropbox, faça um link para a pasta com os PDFs. Primeiro, entre em sua pasta do Dropbox:
      cd ~/Dropbox

    Agora crie um link para a pasta com os PDFs de impressão. Chamarei o link de “PDF”, mas use o nome que você quiser:

      ln -s /var/spool/cups-pdf/guest PDF

Pronto! O Dropbox já vai começar a mandar seus PDFs para a nuvem.

Mais nuvens bizarras aqui.

O programa cups-pdf é responsável por salvar o PDF em seu Mac. Você pode configurá-lo editando o arquivo /etc/cups/cups-pdf.conf. Ali você consegue resolver o problema das permissões, e ainda pode mudar o nome dos arquivos PDF gerados.

  • Permissões: Procure pela configuração UserUMask e deixe-a somente com zeros. Assim você não terá mais problemas para ler os PDFs gerados.
      UserUMask 0000
  • Prefixo job_: Todos os PDFs criados ganham um prefixo “job_” seguido de um número. Para remover este prefixo, mude a configuração Label para zero.
      Label 0

    Após fazer estas alterações, basta salvar o arquivo que elas já entrarão em vigor. Mande outra impressão para testar se tudo está certo.

Related Posts Plugin for WordPress, Blogger...
Publicado em Nerd | Com a tag , , , , , | 6 comentários