Showing posts with label dicas e macetes. Show all posts
Showing posts with label dicas e macetes. Show all posts

2009/05/23


Como definir um atalho para alternar a marcação de quebra de linha no modo longlines do emacs

Hoje fiz meu primeiro script mais complicadinho usando o lisp do emacs.

Acontece que estou fazendo uma mudança de hábitos. Eu costumava digitar textos do LaTeX no emacs no modo com quebra de linha e com o texto justificado. Só que isso não permite fazer buscas facilmente no texto por strings que tenham espaço no meio, porque se a justificação tiver botado mais um ou dois espaços, não bate. Então estou passando a usar o modo longlines, com o texto apenas alinhado à esquerda para visualização, mas na prática cada parágrafo é uma linha.

Como o longlines quebra o texto pra visualização, às vezes a gente fica sem saber se em algum lugar tem mesmo uma quebra de linha ou não. Pra isso ele tem os comandos longlines-show-hard-newlines, e longlines-unshow-hard-newlines, que ativam e desligam a colocação de um símbolo nos lugares em que realmente há quebra de linha. Parece até coisa de editores de texto tipo WIMP, como o OpenOffice e o ABI word, assim.

Pois bem, acontece que eu queria botar isso num atalho, porque eu só gosto de ver isso rapidamente pra tirar dúvidas. Então queria atribuir a uma única tecla um ligar e desligar desse show-hard-newlines. Não daria então pra fazer isso simplesmente atribuindo o comando, sendo que são dois!...

O que eu fiz foi colocar o seguinte script no meu "dotemacs":


;; Ativa longlines
(defvar my-state-hard t)
(defun my-toggle-longlines-show-hard-newlines ()
"Toggle longlines-show-hard-new-lines"
(interactive)
(if my-state-hard
( progn (setq my-state-hard nil) (longlines-show-hard-newlines) )
( progn (setq my-state-hard t) (longlines-unshow-hard-newlines) )
) )
(global-set-key (quote [(meta control return)]) 'my-toggle-longlines-show-hard-newlines)

Primeiro eu defino uma variável, que vai dizer se o "show-hard-newlines" tá ligado ou não. Aí eu defino uma função que confere o valor, e inverte, ligando ou desligando o lance conforme o caso. A função faz portanto um "toggle" da variável, e do modo.

Funcionou muito bem! Aqui mesmo, enquanto escrevo esse post, eu também estou usando isso. Escrevo os posts com o longlines tb pq se eu mandar o texto com quebras de linha elas são forçadas, e aí perde a formatação no browser.

2009/04/22


Porta aberta, ao transpor-te entrei no céu

Lá vai uma dica para todos ratos de UNIX por aí.

Estava querendo fazer um túnel para permitir a um amigo usar a minha máquina através de um firewall, mas meu cenário é um pouco diferente do normal, então tive uma certa dificuldade.

O ssh consegue criar túneis, com as opções -L e -R, mas pelo que entendi nenhuma delas me atenderia.

Meu problema é o seguinte: estou numa máquina (meu notebook) atrás de um gateway. Eu até tenho IP real aqui, mas o gateway bloqueia tudo pro lado de dentro (é um "firewall" da vida). Eles inclusive bloqueiam conexões de bittorrent e IRC aqui... Gozado que MSN skype funcionam numa boa, ainda não descobri direito porque.

O lance é que eu consigo logar lá no servidor, e executar programas que ouvem portas altas. (Pssst, não digam pra ninguém isso é segredo.) Eu queria portanto dar um jeito de abrir uma porta lá no servidor, e simplesmente redirecionar o que quer que chegue pra minha porta 80, ou 22, e assim conseguir acessar essa minha máquina dentro da "intranet" pelo lado de fora.

Depois de muito penar pra concluir que não é isso que o ssh deixa fazer, e pesquisar em alguns blogs, finalmente cheguei na fórmula ideal. E a solução usa, como não podia deixar de ser, um dos mais maravilhosos programas pra estas situações: o netcat!

Depois que funciona dá aquela raiva, porque na verdade é bem simples. O que a gente precisa fazer é rodar um nc ouvindo a porta lá no firewall, e redirecionar tanto a entrada quanto saída dele prum outro nc que vai se conectar na porta que eu quero na minha máquina.

A dificuldade é fazer esse redirecionamento de entrada _e_ de saída, e ainda acertar a ordem de execução dos processos. A solução minha foi criar um fifo, e usar um pipe. Basta rodar portanto lá no gateway/firewall:

$ mkfifo fifi

E então

$nc -l 31337 < fifi | nc 654.234.654.142 80 > fifi

onde o 31337 é a porta (alta) que você escolher ouvir, e o número críptico é o ip (obviamente inválido) da sua máquina na intranet, seguido pela porta alvo. Neste caso, porta 80, de HTTP.

Agora qualquer browser que apontar para http://www.end.do.meu.servidor:31337 vai ser atendido, indiretamente, pela minha máquina. Não é legal?

(OBS: o título do post é da música do Vicente Celestino.)

ADDENDUM: parece que usando o ssh -R não funcionou só porque falta liberar o acesso da porta por IPs estrangeiros, através de uma diretriz GatewayPorts no arquivo sshd_config.

2008/12/03


Blogando de dentro do Emacs

Estou testando um programinha pra postar no Blogger de dentro do emacs. Tentei previamente usar um tal g-client que não funcionou direito não. Mas esse e-blogger aqui parece ser bacaninha. Se esse post não for deletado,q ue dizer que funcionou, e que eu gostei!...

2008/07/10


Just works

Estava aqui com uma imagem de um CD feita não sei como, e queria montar no meu sistema usando o velho macete:

mount -o loop


Pra quem não sabe, no Linux vc consegue montar imagens numa boa, não precisa de nenhum aplicativo mágico especial não. Esse programa "mount", é exatamente o mesmo que monta qualquer outro dispositivo no sistema, incluindo seus HDs.

O arquivo da imagem tinha a extensão "iso", mas não funcionou. Resolvi dar uma olhada com hexdump pra ver obtinha alguma luz. Não é nenhuma genialidade minha não, é que às vezes tem uns headers óbvios no começo de arquivos. Por exemplo, em arquivos PNG temos:
00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR|
00000010 00 00 04 5a 00 00 03 20 08 02 00 00 00 9c 42 91 |...Z... ......B.|
00000020 ed 00 00 00 09 70 48 59 73 00 00 0b 13 00 00 0b |í....pHYs.......|
00000030 13 01 00 9a 9c 18 00 00 00 07 74 49 4d 45 07 d7 |..........tIME.×|


Já nos PDF:
00000000 25 50 44 46 2d 31 2e 33 0d 25 e2 e3 cf d3 0d 0a |%PDF-1.3.%âãÏÓ..|
00000010 36 38 31 20 30 20 6f 62 6a 0d 3c 3c 20 0d 2f 4c |681 0 obj.<< ./L|
00000020 69 6e 65 61 72 69 7a 65 64 20 31 20 0d 2f 4f 20 |inearized 1 ./O |
00000030 36 38 33 20 0d 2f 48 20 5b 20 31 31 31 30 20 31 |683 ./H [ 1110 1|


Perceberam? É óbvio, tem um textinho escrito... Queria ver se tinha algo assim, mas não tinha não, o que tinha era isso:

0000000 ff00 ffff ffff ffff ffff 00ff 0200 0200
0000010 0000 0000 0000 0000 0000 0000 0000 0000
*
0000930 ff00 ffff ffff ffff ffff 00ff 0200 0201
0000940 0000 0000 0000 0000 0000 0000 0000 0000
*
0001260 ff00 ffff ffff ffff ffff 00ff 0200 0202
0001270 0000 0000 0000 0000 0000 0000 0000 0000
*
0001b90 ff00 ffff ffff ffff ffff 00ff 0200 0203
0001ba0 0000 0000 0000 0000 0000 0000 0000 0000
*
(...)
*
00089d0 ff00 ffff ffff ffff ffff 00ff 0200 0215
00089e0 0000 0000 0000 0000 0000 0000 0000 0000
*
0009300 ff00 ffff ffff ffff ffff 00ff 0200 0216
0009310 0000 0009 0000 0009 4301 3044 3130 0001
0009320 4443 522d 4f54 2053 4443 422d 4952 4744
(...)
0009c20 ebc1 1b7c 9558 31ab 976b 5c00 dcf6 0019
0009c30 ff00 ffff ffff ffff ffff 00ff 0200 0217
0009c40 0000 0009 0000 0009 4302 3044 3130 0001
0009c50 4443 522d 4f54 2053 4443 422d 4952 4744
(...)
000a550 02dd bee4 634a 8e1a fa7c fbaf 9560 b68b
000a560 ff00 ffff ffff ffff ffff 00ff 0200 0218
000a570 0000 0009 0000 0009 43ff 3044 3130 0001
000a580 0000 0000 0000 0000 0000 0000 0000 0000
*


Comparei com uma imagem ISO criada por mim mesmo (com genisofs), e não apareceu nada assim...

O que vemos neste arquivo são blocos de 2352 bytes (0x930), com um header de 16 bytes que é um monte de "ff", e um número seqüencial. Achei que tinha cara de algo mais "cru" do que o tal formato iso9660... Talvez fosse o famoso par de arquivos "cue/bin", mas sem o cue acompanhando? Infelizmente não me lembrava de cor do tamanho de um quadro de CD pra saber se era.

Busquei no google, "2352 bytes", já que era um número tão incomum (nada como "2048 bytes", por exemplo), e de fato achei vários sites falando sobre imagens de CD e formatos de CD... Um cara reclamava por exemplo que estava criando uma imagem e ela estava com 2352 bytes a menos do que devia...

No final das contas achei enfim alguém comentando que havia mesmo a possibilidade de se encontrar por aí imagens "bin" sem o "cue", e que tinha que usar um programinha macete pra criar o cue, tipo um tal bin2cue.

Resolvi tentar, porque era a única coisa que faltava. Já tinha inclusive tentado antes converter como se fosse um tal formato ccd.

Mas aí dessa vez procurei no apt por outros programas que pudessem fazer o serviço. E aí apareceram:

cyberon:/home/nwerneck# apt-cache search bin iso cd
bchunk - CD image format conversion from bin/cue to iso/cdr
iat - Converts many CD-ROM image formats to iso9660
mybashburn - Burn data and create songs with interactive dialog box
texlive-latex-extra - TeX Live: LaTeX supplementary packages
arson - KDE frontend for burning CDs


Uau! Peguei o tal iat, rodei, e tchanãnãnã!... Funcionou com perfeição.

Da próxima vez que tiver um mistério desses, é claro, vou tentar antes rodar direto o tal iat, mas vou perder a oportunidade de relembrar que quadros de CD tem 2532 bytes... (Não lembro porquê esse número, vou pesquisar.)

Achei essa história toda um belo exemplo de como ser um pouquinho hacker (não ter medo ou vergonha de brincar com o hexdump), e usar o apt, você pode resolver seus problemas... Do hexdump descobri que o arquivo era um conjunto de pacotes de um tamanho característico de CDs, me confirmando que devia ser mesmo alguma imagem, e mais do que isso, uma imagem "crua", nada muito sofisticado. Isso me deu segurança pra seguir em frente, me garantiu que não era um pau do bittorrent, por exemplo, ou que fosse um arquivo compactado de alguma forma estranha, ou encriptado. Aí no APT descobri um programa excelente pra converter o arquivo, que não vi mencionado em blog nenhum, mas estou mencionando aqui no meu agora.

É isso aí. Usando linux, hexdump, google, apt e o iat, e dando um mount -t iso9660 -o loop, tudo "just works", igual as pessoas acham que apenas certas plataformas alternativas oferecem...

O quão fácil é descobrir o formato de um arquivo no wimdoms, descobrir um programa pra converter ele (tem apt-cache search??) e depois montar? O wirduws só "detecta" coisas manjadas, que ele consiga desenhar o iconezinho, coisas "cadastradas" no sistema... Detecção de formatos é apenas um instrumento de barganha capitalista pra micozofrt, e aliás, freqüentemente a detecção é realizada com base na EXTENSÃO DO NOME DO ARQUIVO, que diga-se de passagem, estava precisamente errada nessa instância.

Me pergunto que não estava assim pra que na máquina de alguém o winpouf "detectasse" que era pra chamar algum programa fodão de montar imagens, e aí esse programa que descobre que não era iso na verdade, e sim outro... É ridículo, um arquivo chamado com um nome errado pras coisas funcionarem redondo. Isso que é "just works"?

No Debian as funcionalidades de procurar programas e montar CD são praticamente "nativas"...

2008/02/29


Resolvendo a tela azul do mplayer no Ubuntu

Por falar em Ubuntu ali no post anterior, parece que tem alguma versão aí do Ubuntu que tá dando um problema com o Mplayer e outros programas de tocar vídeo, fazendo aparecer uma janela azul quando vc manda tocar qualquer coisa. O som fica normal, não dá nenhuma mensagem de erro, mas o filme fica todo azul!... (Não, não é uma BSOD!... :) pelo menos não das originais) E o problema não se limita só ao mplayer...

Nosso leitor, contribuidor e cidadão exemplar Mön5i€ur N.F. passou uma dica que funcionou pra resolver o problema aqui no computador da minha namorada. Foi só mandar o mplayer usar o driver x11... No comando do mplayer, use “mplayer -vo x11 ...”. Vc pode automatizar isso colocando a linha

vo=x11

no seu arquivo ~/.mplayer/config

Claro que o melhor é descobrir o que está errado na instalação do sistema, mas até lá vc vai se virando!... E se vc não puder editar algum arquivo de configuração porque tem medinho que usar vi, ou achar que é a coisa mais difícil do mundo colocar as palavras mágicas "-vo x11" numa linha de comando (ou nem concebe usar uma linha de comando pra abrir um filme), nesse caso, amigo, ou vai chorar em algum fórum, ou contate o seu revendedor!...

Ops!! Não tem revendedor!!... (ou sera que as pessoas acham que o pessoal que ajuda nos fóruns, e os programadores, são tipo “o revendedor” do software livre?)

((E se alguém souber como resolve the Ubuntu way, eu gostaria de saber! :) ))

2008/02/26


Como editar textos no mozilla usando um editor externo

Você também quer editar janelinhas de texto do tipo <textarea> usando seu editor externo preferido, como o emacs, ou vim, nano, pico, ed, elvis, notepad, wordstar, carta fácil, lotus notes??? Não se desespere! Pra isso existe o mozex, a melhor extensão de mozilla que jamais foi criada!...

Aí vc pode fazer coisas como editar um post de blog no modo html do emacs, e dar o comando C-c C-c h pra entrar com um hiperlink. Muito melhor do que entrar o comando inteiro na mão, ou do que usar essa janelinha chata do editor do blogger, que abre um diálogo modal irritante e te obriga e ficar indo dum lado pro outro e mirando nas coisas...

2008/02/22


Colocando links de social bookmarks no seu blog

Você quer saber como colocar um link de bookmark do de algum desses sites imitadores do digg nos artigos do seu blog no blogger? Prepare-se!! Lá vem:

Pegue o código dessa página aqui:
Something About J: Add Social Bookmarks to New Blogger

Descubra depois o endereço que vc tem que usar no site do seu coisador de bookmarks blog social da vida... Aí é só botar o URL, adaptando pra escrever o título e URL do post nos lugares certos...

(...)
<a expr:href='"http://eu.com.ia//programa.php?url=" + data:post.url + "&amp;title=" + data:post.title' target='_blank'><img border='0' src='http://eu.com.ia/imagens/botao.png'/></a>
(...)


Nesse exemplo coloquei um link de imagem, mas óbvio que pode ser texto como no original. Recomendação: boicote sites que usam imagens gif.

[ ATUALIZAÇÃO! ]

O Technorati não tem esqueminha de comentar posts individuais. O máximo que vc pode fazer lá é dizer que algum blog é preferido seu. Quer dizer, vc pode falar que algum post individual seria um “URL preferido seu”, mas não sei bem se é o que os caras lá esperam que vc faça.

O link correto pro technorati, pra incluir o blog como favorito, e que estou usando hoje, é:

<a expr:href='"http://technorati.com/faves?add=" + data:blog.homepageUrl' target='_blank'&gt;Technorati</a> |


Resultado abaixo...

2008/02/18


Como integrar seu blog ao digg

A HelenaN outro dia me fez finalmente entrar no tal digg. Procurei e procurei um jeito que botar o digg no meu blog, e finalmente funcionou, depois que eu li esse blog aqui:
Testing Blogger Beta (now New Blogger): Testing adding Digg vote button to every post

Aí eu pergunto: “CAN YOU DIGG IT!??!”



Se você também quer integrar o digg ao seu blog no blogger, Aqui vai o macete. No meu blog, eu usei os seguintes códigos. Nos posts:

<p>
<!-- DIGG -->
<div style='float:right; margin-left:10px;'>
<script type='text/javascript'>
digg_url = '<data:post.url/>';
digg_bgcolor = '#f6f7f7';
digg_title = '<data:post.title/>';
digg_bodytext = '<data:post.url/>';
digg_skin = 'compact';
digg_window = 'new';
</script>
<script src='http://digg.com/tools/diggthis.js' type='text/javascript'/>
</div>
<data:post.body/>
</p>


E na barra lateral:

<div align="center">
<script type="text/javascript">
digg_url = 'http://philogroky.blogspot.com';
digg_skin = 'new';
digg_color='#ffffff'
</script>
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>


O digg_color muda a cor em volta do botão (parece que não rola transparência ainda). O skin é o modelo do botão, e o url, o url!... Tem uma opção ainda que te permite já sugerir antecipadamente o título da notícia, categoria et cætera... Isso tudo tem na documentação no próprio site do digg.