<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6773680198919979676</id><updated>2011-11-27T21:50:47.939-03:00</updated><title type='text'>dito.info</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ditoinfo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ditoinfo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Dante S. Regis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_68f8fhzUzmM/TA5-eok_bmI/AAAAAAAABq0/iba9xLkwjok/S220/carinha_8.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6773680198919979676.post-7657272846638590256</id><published>2007-02-22T12:34:00.001-03:00</published><updated>2007-02-22T12:34:39.391-03:00</updated><title type='text'>firefox e memória</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Se você usa o Firefox, já se acostumou a abrir inúmeras abas. Eu mesmo já cheguei ao ponto (que certamente alguns de vocês considerarão pequeno) de abrir 68 abas de uma só vez. &lt;br&gt;&lt;/br&gt;O problema é que na configuração padrão, o micro chora diante de uma quantidade tão grande de abas. Isso porque, para cada aba, o FireFox guarda na memória todo o histórico de navegação, incluindo o conteúdo das páginas (CSS, imagens, JavaScript etc), fazendo com que o browser consuma uma quantidade absurda de memória (já cheguei a 300MB).&lt;br&gt;&lt;/br&gt;Você pode mudar esse comportamento facilmente, sem nem mesmo precisar de um add-on. &lt;br&gt;&lt;/br&gt;Primeiro, siga para a página de configuração do browser "about:config" (sem as apas). Você deve digitar isso na barra de endereços como se estivesse indo visitar outro site qualquer.&lt;br&gt;&lt;/br&gt;A página especial de configuração deverá surgir. Procure, nesta página, pela chave &lt;b&gt;browser.sessionhistory.max_total_viewers&lt;/b&gt; . O valor padrão é de &lt;b&gt;-1&lt;/b&gt;, ou seja, infinitas páginas. Coloque um número adequado. Aqui em casa utilizo 2 e no trabalho 1. &lt;br&gt;&lt;/br&gt;É importante notar que o desempenho do browser fica um pouco prejudicado, pois, guardando apenas uma página em memória, ele terá que buscar outras no cache em disco ou refazer o download. Assim, ajuste o valor de acordo com o uso das abas que você faz (quanto mais abas, menor deve ser o valor) e de acordo com a quantidade de memória do seu computador (se você tiver memória sobrando, pode aumentar o valor um pouco).&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Abraços&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;p class='poweredbyperformancing'&gt;powered by &lt;a href='http://performancing.com/firefox'&gt;performancing firefox&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6773680198919979676-7657272846638590256?l=ditoinfo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ditoinfo.blogspot.com/feeds/7657272846638590256/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6773680198919979676&amp;postID=7657272846638590256' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/7657272846638590256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/7657272846638590256'/><link rel='alternate' type='text/html' href='http://ditoinfo.blogspot.com/2007/02/firefox-e-memria.html' title='firefox e memória'/><author><name>Dante S. Regis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_68f8fhzUzmM/TA5-eok_bmI/AAAAAAAABq0/iba9xLkwjok/S220/carinha_8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6773680198919979676.post-1082693540028404295</id><published>2007-02-06T13:52:00.001-03:00</published><updated>2007-02-06T13:52:42.909-03:00</updated><title type='text'>modal dialogs no ruby on rails</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Uma funcionalidade muito legal do JavaScript é a possibilidade de se fazer caixas de diálogo modais - elas aparecem e impedem o uso do que estiver por trás dela, como uma tela de erro que por vezes surge nos programas mais comuns. Várias são as utilidades dos diálogos modais, especialmente nesse fuzuê da web 2.0beta ;). &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;O RedBox é um plugin para o Ruby on Rails que fornece um "magical one-liner helper" para caixas de diálogo modais: uma simples linha de código gera a caixa para você. O site do projeto é &lt;a href='http://www.craigambrose.com/projects/redbox'&gt;este aqui&lt;/a&gt;, aproveite para dar uma conferida!&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;p class='poweredbyperformancing'&gt;powered by &lt;a href='http://performancing.com/firefox'&gt;performancing firefox&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6773680198919979676-1082693540028404295?l=ditoinfo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ditoinfo.blogspot.com/feeds/1082693540028404295/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6773680198919979676&amp;postID=1082693540028404295' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/1082693540028404295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/1082693540028404295'/><link rel='alternate' type='text/html' href='http://ditoinfo.blogspot.com/2007/02/modal-dialogs-no-ruby-on-rails.html' title='modal dialogs no ruby on rails'/><author><name>Dante S. Regis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_68f8fhzUzmM/TA5-eok_bmI/AAAAAAAABq0/iba9xLkwjok/S220/carinha_8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6773680198919979676.post-6916702352731235851</id><published>2007-02-05T20:49:00.001-03:00</published><updated>2007-02-05T20:49:49.738-03:00</updated><title type='text'>the rails way</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;O Rails (herdando característica do Ruby) tem uma capacidade intrínseca de simplificar as coisas. Muitas vezes nós estamos acostumados a dar muitas voltas para escrever determinadas rotinas. Um método, que normalmente não conhecemos, e que transforma 10 linhas de código em uma, sempre existe para simplificar a nossa vida. O site The Rails Way discute formas práticas, simples e, claro, bonitas, de se escrever código em Rails. Dê uma olhada! :) &lt;a href='http://www.therailsway.com'&gt;The Rails Way&lt;/a&gt;.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;p class='poweredbyperformancing'&gt;powered by &lt;a href='http://performancing.com/firefox'&gt;performancing firefox&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6773680198919979676-6916702352731235851?l=ditoinfo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ditoinfo.blogspot.com/feeds/6916702352731235851/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6773680198919979676&amp;postID=6916702352731235851' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/6916702352731235851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/6916702352731235851'/><link rel='alternate' type='text/html' href='http://ditoinfo.blogspot.com/2007/02/rails-way.html' title='the rails way'/><author><name>Dante S. Regis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_68f8fhzUzmM/TA5-eok_bmI/AAAAAAAABq0/iba9xLkwjok/S220/carinha_8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6773680198919979676.post-7022048494620051025</id><published>2007-01-21T22:47:00.001-03:00</published><updated>2007-01-21T22:47:51.031-03:00</updated><title type='text'>new wget - Parte 2</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;O código saiu triste. experimentem então usar esse aqui: http://pastie.caboo.se/34721&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;p class='poweredbyperformancing'&gt;powered by &lt;a href='http://performancing.com/firefox'&gt;performancing firefox&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6773680198919979676-7022048494620051025?l=ditoinfo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ditoinfo.blogspot.com/feeds/7022048494620051025/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6773680198919979676&amp;postID=7022048494620051025' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/7022048494620051025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/7022048494620051025'/><link rel='alternate' type='text/html' href='http://ditoinfo.blogspot.com/2007/01/new-wget-parte-2.html' title='new wget - Parte 2'/><author><name>Dante S. Regis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_68f8fhzUzmM/TA5-eok_bmI/AAAAAAAABq0/iba9xLkwjok/S220/carinha_8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6773680198919979676.post-1393038507561088383</id><published>2007-01-21T22:46:00.001-03:00</published><updated>2007-02-05T21:37:01.137-03:00</updated><title type='text'>new wget</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Bom pessoal, ainda não está funcionando mas está quase. Como eu tinha prometido antes, fica feio não entregar pelo menos no estado em que se encontra. Aqui está um pequeno programinha em Ruby que, ao menos em tese, deveria baixar partes de um mesmo arquivo ao mesmo tempo. Ele não está funcionando porque por algum motivo ou vem dados estranhos pro arquivo (no tamanho certo), ou os arquivos ficam vazios ou com o conteúdo completo. Estou trabalhando nisso ainda... Não há nenhuma proteção de erro, mas isso é pra depois que funcionar. Se alguém tiver sugestões, estou pronto a ouví-las. :) Segue o código abaixo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Código excluido.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Abraços&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="poweredbyperformancing"&gt;powered by &lt;a href="http://performancing.com/firefox"&gt;performancing firefox&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6773680198919979676-1393038507561088383?l=ditoinfo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ditoinfo.blogspot.com/feeds/1393038507561088383/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6773680198919979676&amp;postID=1393038507561088383' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/1393038507561088383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/1393038507561088383'/><link rel='alternate' type='text/html' href='http://ditoinfo.blogspot.com/2007/01/new-wget.html' title='new wget'/><author><name>Dante S. Regis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_68f8fhzUzmM/TA5-eok_bmI/AAAAAAAABq0/iba9xLkwjok/S220/carinha_8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6773680198919979676.post-6397388479160402499</id><published>2007-01-20T12:24:00.001-03:00</published><updated>2007-01-20T12:24:39.855-03:00</updated><title type='text'>vou reprovar por falta</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;faz tempo que não adiciono um post, eu admito. Mas (promessa de início/fim de ano) prometo que vou me disciplinar! :) Já já vem um post bacana aí com um programa muito legal em ruby que estou fazendo nesse exato momento.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;até lá&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;p class='poweredbyperformancing'&gt;powered by &lt;a href='http://performancing.com/firefox'&gt;performancing firefox&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6773680198919979676-6397388479160402499?l=ditoinfo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ditoinfo.blogspot.com/feeds/6397388479160402499/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6773680198919979676&amp;postID=6397388479160402499' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/6397388479160402499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/6397388479160402499'/><link rel='alternate' type='text/html' href='http://ditoinfo.blogspot.com/2007/01/vou-reprovar-por-falta.html' title='vou reprovar por falta'/><author><name>Dante S. Regis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_68f8fhzUzmM/TA5-eok_bmI/AAAAAAAABq0/iba9xLkwjok/S220/carinha_8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6773680198919979676.post-6449246238922534312</id><published>2006-11-27T10:23:00.001-03:00</published><updated>2006-11-27T10:23:15.620-03:00</updated><title type='text'>Delphi Odd Form</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Se você quer fazer uma janela com formas não convencionais no Delphi e não quer mexer com a API do Windows, uma boa solução pode ser o Delphi Odd Form. É uma ferramenta que pega uma imagem e gera o código para conversão de um form qualquer para o formato desejado em um arquivo .PAS. Depois, é só chamar a função correta e &lt;i&gt;voilá&lt;/i&gt;: um form diferente! &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Veja mais no site do &lt;a href='http://www.informatics.no/progvareOF.htm'&gt;Delphi Odd Form.&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;p class='poweredbyperformancing'&gt;powered by &lt;a href='http://performancing.com/firefox'&gt;performancing firefox&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6773680198919979676-6449246238922534312?l=ditoinfo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ditoinfo.blogspot.com/feeds/6449246238922534312/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6773680198919979676&amp;postID=6449246238922534312' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/6449246238922534312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/6449246238922534312'/><link rel='alternate' type='text/html' href='http://ditoinfo.blogspot.com/2006/11/delphi-odd-form.html' title='Delphi Odd Form'/><author><name>Dante S. Regis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_68f8fhzUzmM/TA5-eok_bmI/AAAAAAAABq0/iba9xLkwjok/S220/carinha_8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6773680198919979676.post-6106226107767042121</id><published>2006-11-25T02:22:00.001-03:00</published><updated>2006-11-25T02:22:53.924-03:00</updated><title type='text'>Ruby on Rails</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Um colega de trabalho, o Chico Ary (&lt;a href='http://chicoary.wordpress.com/'&gt;http://chicoary.wordpress.com/&lt;/a&gt;), certa feita falou sobre um tal de Ruby on Rails. Na época não dei muita atenção, apenas fiz a anotação mental de que seria algo interessante para se dar uma olhada quando sobrasse tempo. &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Acontece que não há tempo livre para quem trabalha na área de informática. Foi portanto num dia em que estava de saco cheio do trabalho que estava tendo com um sistema em PHP que resolvi olhar o que era esse tal desse Rails. &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Eu não sei se dizer que eu estava trabalhando nessa aplicação php por 4 meses e, começando a reescreve-la (do zero) em RoR (Ruby on Rails) consegui atingir 50% da funcionalidade que tinha (além de algumas cositas mas) em 9 dias faz jus à tecnologia. &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Falo sério. O RoR aumentou minha produtividade de modo assombroso. Os detalhes mínimos que tomavam meu tempo no PHP são entregues ao Rails. Além disso a sintaxe do Ruby é agradável, mais fácil de se ler e se escrever. Em resumo é muito mais prático. &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Acho que uma forma de comparação é colocando dois códigos lado a lado, então vamos lá (eu tirei a conexão ao banco porque no Rails é um arquivo de configuração enquanto que no PHP está no próprio código)&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Temos 4 tabelas. tickets, categories, user_groups e users. Um ticket pertence a uma categoria que por sua vez pertence a um grupo de usuários responsável. Um user pode pertencer a vários grupos e, obviamente, um grupo tem vários users (implicitamente temos a 5a tabela). Queremos imprimir a lista dos usuários responsáveis por aquele ticket:&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Em php:&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;blockquote&gt;&lt;small&gt;$sql = "SELECT * FROM tickets WHERE id = 10";&lt;/small&gt;&lt;br&gt;&lt;/br&gt;&lt;small&gt;$result = mysql_query($sql);&lt;/small&gt;&lt;br&gt;&lt;/br&gt;&lt;small&gt;$ticket = mysql_fetch_array($result);&lt;/small&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;small&gt;$sql = "SELECT * FROM categories WHERE id = " . $ticket["category_id"];&lt;br&gt;&lt;/br&gt;$result = mysql_query($sql);&lt;br&gt;&lt;/br&gt;$category= mysql_fetch_array($result);&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;$sql = "SELECT * FROM user_groups WHERE id = " . $category["id"];&lt;br&gt;&lt;/br&gt;&lt;/small&gt;&lt;small&gt;$result = mysql_query($sql);&lt;br&gt;&lt;/br&gt;$user_group = &lt;/small&gt;&lt;small&gt;mysql_fetch_array($result);&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;$sql = "SELECT * FROM user_groups_user WHERE user_group_id = " . $user_group["id];&lt;br&gt;&lt;/br&gt;&lt;/small&gt;&lt;small&gt;$result = mysql_query($sql);&lt;br&gt;&lt;/br&gt;&lt;br /&gt;while $user = &lt;/small&gt;&lt;small&gt;mysql_fetch_array($result)&lt;br&gt;&lt;/br&gt;{&lt;br&gt;&lt;/br&gt; $sql = "SELECT * FROM users WHERE id = " . $user["id"];&lt;br&gt;&lt;/br&gt; $result2 = mysql_query($sql);&lt;br&gt;&lt;/br&gt; $user_data = mysql_fetch_array($result2);&lt;br&gt;&lt;/br&gt; echo "Nome do usuário: " . $user_data["full_name"];&lt;br&gt;&lt;/br&gt;}&lt;br&gt;&lt;/br&gt;&lt;/small&gt;&lt;/blockquote&gt;Você faz as contas. Certo, eu poderia ter usado um JOIN na consulta, mas ainda assim o código seria desnecessariamente complicado. No rails? Faríamos assim: &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;No modelo de Ticket:&lt;br&gt;&lt;/br&gt; &lt;small&gt;belongs_to :category&lt;/small&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;No modelo de Category&lt;br&gt;&lt;/br&gt; &lt;small&gt;belongs_to :user_group&lt;/small&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;No modelo de UserGroup&lt;br&gt;&lt;/br&gt; &lt;small&gt;has_and_belongs_to_many :users&lt;/small&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;No modelo de User&lt;br&gt;&lt;/br&gt; &lt;small&gt;has_and_belongs_to_many :user_groups&lt;/small&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;no código&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;blockquote&gt;&lt;small&gt;ticket = Ticket.find(10) # o id do ticket era 10, lembra?&lt;br&gt;&lt;/br&gt;lista_usuarios = ""&lt;br&gt;&lt;/br&gt;for user in ticket.category.user_group.users&lt;br&gt;&lt;/br&gt; lista_usuarios = "Nome do usuário: " + user.full_name + "\n"&lt;br&gt;&lt;/br&gt;end&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;render :text = lista_usuarios&lt;/small&gt;&lt;br&gt;&lt;/br&gt;&lt;/blockquote&gt;Agora me diga: o que foi mais legível? Mais fácil de escrever? Então visite &lt;a href='http://www.rubyonrails.org'&gt;www.rubyonrails.org&lt;/a&gt; e comece a conversão! :)&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Se quiser um tutorial bom e gratuito, tem lá no &lt;a href='http://www.rubyonbr.org'&gt;www.rubyonbr.org&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;p class='poweredbyperformancing'&gt;powered by &lt;a href='http://performancing.com/firefox'&gt;performancing firefox&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6773680198919979676-6106226107767042121?l=ditoinfo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ditoinfo.blogspot.com/feeds/6106226107767042121/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6773680198919979676&amp;postID=6106226107767042121' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/6106226107767042121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/6106226107767042121'/><link rel='alternate' type='text/html' href='http://ditoinfo.blogspot.com/2006/11/ruby-on-rails_25.html' title='Ruby on Rails'/><author><name>Dante S. Regis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_68f8fhzUzmM/TA5-eok_bmI/AAAAAAAABq0/iba9xLkwjok/S220/carinha_8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6773680198919979676.post-1033380359786300137</id><published>2006-10-20T14:21:00.000-03:00</published><updated>2006-10-20T14:46:21.701-03:00</updated><title type='text'>Dos2Unix</title><content type='html'>Eis um utilitário bem interessante. Ele converte as quebras de linha do formato dos(CRLF) para o formato unix(LF) e vice-versa.  Ótimo para quem usa Linux e pega alguns scripts prontos que fazem você usar algumas coisas do DOS. Bom, eu achei útil em duas ocasiões aqui em casa. O nome do pacote não é óbvio: sysutils. Para instalar, o velho apt-get install sysutils dá conta do recado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6773680198919979676-1033380359786300137?l=ditoinfo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ditoinfo.blogspot.com/feeds/1033380359786300137/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6773680198919979676&amp;postID=1033380359786300137' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/1033380359786300137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/1033380359786300137'/><link rel='alternate' type='text/html' href='http://ditoinfo.blogspot.com/2006/10/dos2unix.html' title='Dos2Unix'/><author><name>Dante S. Regis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_68f8fhzUzmM/TA5-eok_bmI/AAAAAAAABq0/iba9xLkwjok/S220/carinha_8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6773680198919979676.post-2743541663288744750</id><published>2006-10-13T00:19:00.000-03:00</published><updated>2006-10-13T00:50:50.309-03:00</updated><title type='text'>Firefox 2.0</title><content type='html'>O release oficial do Firefox 2.0 está se aproximando. Salvo engano está marcado para o dia 24 de outubro, uma terça-feira (é dia de encontro do pessoal do Mozilla no saguão de um hotel - é sempre lá que são lançadas versões alpha, beta, RCs etc). Fiz o download do RC2 para instalar no meu pendrive e testar as novas funcionalidades. Posso dizer que gostei muito da nova versão. Não espere grandes mudanças. O diferente está nas novas funcionalidades. Tudo que era bom foi mantido praticamente do mesmo jeito.&lt;br /&gt;&lt;br /&gt;A interface mesmo. Sinceramente, gostava mais da antiga, mas não me incomoda a nova. Só um pouco mais "metálica", eu acho, na falta de palavra melhor.&lt;br /&gt;&lt;br /&gt;Uma característica &lt;span style="font-weight: bold;"&gt;muito&lt;/span&gt; legal é o search suggestion: funciona especialmente bem com o google, claro. Você vai digitando a sua busca e o google sugere as palavras pra você completar a frase, como o GMail, ao você digitar o e-mail de um contato.&lt;br /&gt;&lt;br /&gt;Outra coisa bacana é o phishing filter. Claro que até extraterrestres já sabem que existem pessoas enviando e-mails falsos, mas parece que muita gente não consegue entender que o Bradesco ou o Banco do Brasil não enviariam para eles e-mails com erru groceiros de portugês especialmente pontuassão concordânsia ortografia. Para essas pessoas o phishing filter já ajuda bastante.&lt;br /&gt;&lt;br /&gt;Mas, sinceramente, o que eu mais gostei foi uma característica um tanto escondida: UNDO CLOSE TAB! Já apertou o botão do meio na aba errada (sim, o botão do meio fecha uma aba, mesmo que seja de rodinha)? Pois clique logo após com o botão direito na barra de abas e desfaça a operação. Só isso já vale o upgrade, com certeza! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6773680198919979676-2743541663288744750?l=ditoinfo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ditoinfo.blogspot.com/feeds/2743541663288744750/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6773680198919979676&amp;postID=2743541663288744750' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/2743541663288744750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/2743541663288744750'/><link rel='alternate' type='text/html' href='http://ditoinfo.blogspot.com/2006/10/firefox-20.html' title='Firefox 2.0'/><author><name>Dante S. Regis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_68f8fhzUzmM/TA5-eok_bmI/AAAAAAAABq0/iba9xLkwjok/S220/carinha_8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6773680198919979676.post-1011656458124934752</id><published>2006-10-07T15:37:00.000-03:00</published><updated>2006-10-07T15:40:13.348-03:00</updated><title type='text'>GNU make</title><content type='html'>Já estava chegando a hora de criar vergonha na cara e começar a programar algumas inutilidades para Linux. Achei esse manual incrível sobre o GNU make (ja que o pessoal lá faz tanta questão da nomenclatura) e que, apesar de provavelmente já conhecido por qualquer programador Linux, achei válido colocar aqui para os que estão começando ou desejando começar.&lt;br /&gt;&lt;br /&gt;Dêem uma olhada no manual do &lt;a href="http://www.gnu.org/software/make/manual/html_node/index.htm"&gt;GNU make&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6773680198919979676-1011656458124934752?l=ditoinfo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ditoinfo.blogspot.com/feeds/1011656458124934752/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6773680198919979676&amp;postID=1011656458124934752' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/1011656458124934752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/1011656458124934752'/><link rel='alternate' type='text/html' href='http://ditoinfo.blogspot.com/2006/10/gnu-make.html' title='GNU make'/><author><name>Dante S. Regis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_68f8fhzUzmM/TA5-eok_bmI/AAAAAAAABq0/iba9xLkwjok/S220/carinha_8.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6773680198919979676.post-5190639131200464332</id><published>2006-09-22T17:22:00.000-03:00</published><updated>2006-09-22T17:24:43.430-03:00</updated><title type='text'>Putty e o Ctrl+S</title><content type='html'>Essa me deu muito trabalho: toda vez que eu apertava Ctrl+S acidentalmente no Putty(costume dos programas Windows), a sessão travava. Dava um trabalho danado, porque eu tinha que fechar o Putty e abrir novamente o arquivo, etc, digitar senha e tal... E se você estiver no vi, tem que dar um Recover e depois lembrar de excluir o arquivo temporário. Enfim, uma trabalheira.&lt;br /&gt;&lt;br /&gt;Mas os seus problemas acabaram!!! Simplesmente pressione Ctrl+Q e tudo voltará ao normal! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6773680198919979676-5190639131200464332?l=ditoinfo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ditoinfo.blogspot.com/feeds/5190639131200464332/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6773680198919979676&amp;postID=5190639131200464332' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/5190639131200464332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/5190639131200464332'/><link rel='alternate' type='text/html' href='http://ditoinfo.blogspot.com/2006/09/putty-e-o-ctrls.html' title='Putty e o Ctrl+S'/><author><name>Dante S. Regis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_68f8fhzUzmM/TA5-eok_bmI/AAAAAAAABq0/iba9xLkwjok/S220/carinha_8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6773680198919979676.post-692598756107447922</id><published>2006-09-21T07:07:00.000-03:00</published><updated>2006-09-21T07:11:33.343-03:00</updated><title type='text'>Jogos para Linux</title><content type='html'>O Linux não é uma plataforma para jogos? Se você quiser se divertir deverá fazer dual boot para o Windows ou usar o wine? Bom, não é a opinião dos caras da &lt;a href="http://techgage.com/"&gt;Techgage&lt;/a&gt;, que fizeram a lista dos &lt;a href="http://techgage.com/article/top_10_free_linux_games"&gt;10 melhores jogos para Linux&lt;/a&gt;. E olha que não é Tetris e outros que vêm junto com o Gnome ou KDE não! :)&lt;br /&gt;&lt;br /&gt;PS: Ainda acho que faltam muitos jogos, e que apesar do wine ser bacana, a melhor solucao ainda é o Windows (ao menos para jogos).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6773680198919979676-692598756107447922?l=ditoinfo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ditoinfo.blogspot.com/feeds/692598756107447922/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6773680198919979676&amp;postID=692598756107447922' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/692598756107447922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/692598756107447922'/><link rel='alternate' type='text/html' href='http://ditoinfo.blogspot.com/2006/09/jogos-para-linux.html' title='Jogos para Linux'/><author><name>Dante S. Regis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_68f8fhzUzmM/TA5-eok_bmI/AAAAAAAABq0/iba9xLkwjok/S220/carinha_8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6773680198919979676.post-6856811488026428204</id><published>2006-09-21T07:05:00.000-03:00</published><updated>2006-09-21T07:06:23.118-03:00</updated><title type='text'>Shell Revealed</title><content type='html'>É isso aí! Parece até curso de shell script para Linux né não? O &lt;a title="Shell Revealed" href="http://www.shellrevealed.com/"&gt;Shell Revealed&lt;/a&gt; , na verdade, é o blog do pessoal que desenvolve a interface ao usuário do Windows Vista. Um bom lugar para dar uma olhada no que vai mudar para nós programadores que estamos presos às vontades da gigante. Claro que tem coisas legais, como a tal da TaskDialog, por exemplo, por isso vale a pena dar uma olhada.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6773680198919979676-6856811488026428204?l=ditoinfo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ditoinfo.blogspot.com/feeds/6856811488026428204/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6773680198919979676&amp;postID=6856811488026428204' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/6856811488026428204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/6856811488026428204'/><link rel='alternate' type='text/html' href='http://ditoinfo.blogspot.com/2006/09/shell-revealed.html' title='Shell Revealed'/><author><name>Dante S. Regis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_68f8fhzUzmM/TA5-eok_bmI/AAAAAAAABq0/iba9xLkwjok/S220/carinha_8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6773680198919979676.post-5636285248695292448</id><published>2006-09-17T23:36:00.001-03:00</published><updated>2006-09-17T23:36:59.656-03:00</updated><title type='text'>Flickr e Firefox</title><content type='html'>Acreditem em mim quando digo que o Flickr é muito bom. E acreditem em mim quando digo que o Firefox é o melhor browser do mundo.&lt;br /&gt;&lt;br /&gt;Para fazer inveja aos ainda não convertidos faça o seguinte: Instale duas extensões excelentes no FF - o GreaseMonkey e o Platypus. O GreaseMonkey já deve ser seu conhecido - permite que alguns scripts criados por usuários modifiquem páginas da web, retirando partes indesejadas ou acrescentando alguma coisa nova. Eu modifiquei o site da OI por exemplo, para só me mostrar a área de digitação do torpedo e mais nada.&lt;br /&gt;&lt;br /&gt;Já o Platypus é uma ferramenta &lt;span style="font-weight: bold;"&gt;excelente&lt;/span&gt; para criar scripts para o GreaseMonkey. É quase um editor WYSIWYG. Experimente e não vai se arrepender.&lt;br /&gt;&lt;br /&gt;Em relação ao Flickr. Normalmente você não pode salvar uma imagem do flickr na tela normal (se você não clicou no link "all sizes"). Uma outra imagem - spaceball.gif - é salva no lugar. O que o GMonkey faz é excluir essa imagem da frente da que realmente interessa.&lt;br /&gt;&lt;br /&gt;Como fazer? Vá em uma imagem, clique no botão ERASE do Platypus, clique em cima da imagem que você está visualizando. A imagem principal não será apagada, mas sim a spaceball.gif. Clique em salvar e, na tela que se abre, em Install Script. Pronto!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6773680198919979676-5636285248695292448?l=ditoinfo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ditoinfo.blogspot.com/feeds/5636285248695292448/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6773680198919979676&amp;postID=5636285248695292448' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/5636285248695292448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/5636285248695292448'/><link rel='alternate' type='text/html' href='http://ditoinfo.blogspot.com/2006/09/flickr-e-firefox.html' title='Flickr e Firefox'/><author><name>Dante S. Regis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_68f8fhzUzmM/TA5-eok_bmI/AAAAAAAABq0/iba9xLkwjok/S220/carinha_8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6773680198919979676.post-5764257795002731261</id><published>2006-09-17T10:59:00.000-03:00</published><updated>2006-09-17T11:40:10.528-03:00</updated><title type='text'>Debugando JavaScript</title><content type='html'>Se você for desenvolvedor web ou por qualquer motivo lidar com JavaScript, sabe o quanto é difícil  debugar Javascript. Você passa horas e horas escrevendo um código fabuloso e quando vai testar surge um erro tão sugestivo e estimulante quanto "Unknown Error". A linha, claro, não é indicada.&lt;br /&gt;&lt;br /&gt;É óbvio que esse problema só existe quando você usa o InternetExplorer. O Firefox vem "de fábrica" com um excelente Console de Javascript que indica todos os erros de uma forma muito mais clara do que o IE. Mas como, infelizmente, a maioria das pessoas ainda usa o IE é necessário testar o site nele também.&lt;br /&gt;&lt;br /&gt;Normalmente, se colocaria milhões de alert("Entrou no loop") e coisas do tipo. Mas fuçando na internet achei três soluções interessantes: &lt;span style="font-weight: bold;"&gt;(1) &lt;/span&gt;A Debug Window &lt;span style="font-weight: bold;"&gt;(2)&lt;/span&gt; O MS Script Debugger e &lt;span style="font-weight: bold;"&gt;(3)&lt;/span&gt; O MS Script Editor.&lt;br /&gt;&lt;br /&gt;Os últimos dois programas são da Microsoft. O primeiro é gratuito e o segundo vem com MS Office 2003. Não tive a oportunidade de testar o Script Editor, pois no meu trabalho usa-se o Office 2000. Tentei usar o Script Debugger mas aparentemente ele só funcionava enquanto estava de administrador da máquina. E não sei quanto a você, mas pra mim, usar o IExplorer logado como Administrador é um crime.&lt;br /&gt;&lt;br /&gt;Resumindo, o método que estou usando agora é o número 1, da Debug Window. Ele consiste em criar uma janela (pop-up) que irá receber todas as mensagens de debug do programa. O método é interessante por que em uma única linha você habilita ou desabilita o debug. Além disso, ele não trava o Javascript como o "alert" faz, tornando-o uma boa opção para scripts em que o tempo é precioso. Não é, claro, a melhor opção, que seria uma interface completa de debug (ou usar o Firefox que tem vários debuggers entre suas extensões - vide post anterior) mas está quebrando um bom galho pra mim no trabalho.&lt;br /&gt;&lt;br /&gt;PS: O código não é meu, apenas estou copiando aqui. Ele se encontrava originalmente no artigo &lt;a href="http://www.isocra.com/articles/jsdebug.php"&gt;JavaScript Debug Utility&lt;/a&gt; da &lt;a href="http://www.isocra.com/"&gt;Isocra&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;O código tinha originalmente 3 partes. Eu só utilizo as duas primeiras, mas vou reproduzir aqui a terceira também.&lt;br /&gt;&lt;br /&gt;Essa é a função que cria a janela:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;// Show the debug window&lt;br /&gt;function showDebug() {&lt;br /&gt;window.top.debugWindow =&lt;br /&gt;   window.open("",&lt;br /&gt;           "Debug",&lt;br /&gt;           "left=0,top=0,width=300,height=700,scrollbars=yes,"&lt;br /&gt;           +"status=yes,resizable=yes");&lt;br /&gt;window.top.debugWindow.opener = self;&lt;br /&gt;// open the document for writing&lt;br /&gt;window.top.debugWindow.document.open();&lt;br /&gt;window.top.debugWindow.document.write(&lt;br /&gt;     "&amp;lt;HTML&amp;gt;" +&lt;br /&gt;     "&amp;lt;HEAD&amp;gt;" +&lt;br /&gt;     "   &amp;lt;TITLE&amp;gt;Debug Window&amp;lt;/TITLE&amp;gt;" +&lt;br /&gt;     "&amp;lt;/HEAD&amp;gt;" +&lt;br /&gt;     "&amp;lt;BODY&amp;gt;" +&lt;br /&gt;     "   &amp;lt;PRE&amp;gt; \n");&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Essa é a função que imprime o texto desejado na janela de debug:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;// If the debug window exists, then write to it&lt;br /&gt;function debug(text) {&lt;br /&gt;if (window.top.debugWindow &amp;&amp;amp; ! window.top.debugWindow.closed) {&lt;br /&gt;window.top.debugWindow.document.write(text+"\n");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;E essa função, que eu não utilizo, fecha a janela de debug&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;// If the debug window exists, then close it&lt;br /&gt;function hideDebug() {&lt;br /&gt;if (window.top.debugWindow &amp;&amp;amp; ! window.top.debugWindow.closed) {&lt;br /&gt;window.top.debugWindow.close();&lt;br /&gt;window.top.debugWindow = null;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Utilizar o código é bem simples. Coloque, no início da página uma chamada para a função showDebug(); Em seguida, nos lugares desejados chame a função "debug" com um texto como parâmetro. Algo do tipo 'debug("valor da variavel x:" + x)'. Abra a página e voilá!&lt;br /&gt;&lt;br /&gt;Quando o sistema for para produção, basta retirar a linha inicial. O site do &lt;a href="http://www.isocra.com/articles/jsdebug.php"&gt;artigo original&lt;/a&gt; tem umas dicas de performance que você pode olhar se lhe parecer interessante. Mas me parece que a performance perdida com o script é tão minúscula que não vale a pena. Claro que é possível que o script seja &lt;span style="font-style: italic;"&gt;time-sensitive&lt;/span&gt;. Nesse caso, dê uma olhada no artigo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6773680198919979676-5764257795002731261?l=ditoinfo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ditoinfo.blogspot.com/feeds/5764257795002731261/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6773680198919979676&amp;postID=5764257795002731261' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/5764257795002731261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/5764257795002731261'/><link rel='alternate' type='text/html' href='http://ditoinfo.blogspot.com/2006/09/debugando-javascript.html' title='Debugando JavaScript'/><author><name>Dante S. Regis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_68f8fhzUzmM/TA5-eok_bmI/AAAAAAAABq0/iba9xLkwjok/S220/carinha_8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6773680198919979676.post-896252504846941087</id><published>2006-09-17T02:55:00.000-03:00</published><updated>2006-09-17T03:22:56.676-03:00</updated><title type='text'>Firefox</title><content type='html'>Pois é, o Firefox. Faça a você mesmo um favor e, se ainda não o estiver usando, começe. Não é porque eu ganho alguns poucos centavos cada vez que você faz download do browser através do link desta página (sim, isto é verdade. Para usuários brasileiros eu ganho 20 centavos de dólar). É muito mais do que isso.&lt;br /&gt;&lt;br /&gt;Alguns dizem que o melhor do FF é a sua segurança, em muito superior à do IExplorer. Outros que é o seu tamanho pequeno, sua agilidade e rapidez. Mas eu acredito que a melhor coisa do FF é a possibilidade de customização.&lt;br /&gt;&lt;br /&gt;Hoje, meu FF tem 14 extensões. E eu tenho certeza de que muitos usuários tem muito mais do que eu. Mas eu fico fascinado com muitas possibilidades que as extensões oferecem. Eu tenho aqui uma extensão (&lt;a href="http://chrispederick.com/work/webdeveloper/"&gt;Webdeveloper&lt;/a&gt;),  por exemplo, que faz milagre. Se eu quero saber como é o layout dessa página por exemplo, eu mando o FF contornar (de cores diversas) as tabelas, células, divs e etc do documento.&lt;br /&gt;&lt;br /&gt;Gostaria muito de ter a IETab, para usar o IE em uma aba do Firefox. Para aqueles sites que não seguem os padrões W3C. Só que uso o Linux e provavelmente não posso. Mas no trabalho, onde uso Windows, ela está lá. Um clique e vejo o site no IE. Outro clique e vejo no FF.&lt;br /&gt;&lt;br /&gt;O número de extensões é monstruoso e cresce a cada dia. Dê uma chance ao Firefox. No dia que você instalar o &lt;a href="http://www.google.com/tools/firefox/browsersync/"&gt;Google Browser Sync&lt;/a&gt; em casa e no trabalho vai ver o tempo que perdeu. E de quebra, se usar o link lá no fim da página, ainda contribui com 20 centavos de dólar para o pobre editor deste blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6773680198919979676-896252504846941087?l=ditoinfo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ditoinfo.blogspot.com/feeds/896252504846941087/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6773680198919979676&amp;postID=896252504846941087' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/896252504846941087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/896252504846941087'/><link rel='alternate' type='text/html' href='http://ditoinfo.blogspot.com/2006/09/firefox.html' title='Firefox'/><author><name>Dante S. Regis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_68f8fhzUzmM/TA5-eok_bmI/AAAAAAAABq0/iba9xLkwjok/S220/carinha_8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6773680198919979676.post-358859609009062821</id><published>2006-09-17T02:50:00.000-03:00</published><updated>2006-09-17T02:54:51.430-03:00</updated><title type='text'>Flickr</title><content type='html'>Tudo bem, esse post é atrasado, o &lt;a href="http://www.flickr.com"&gt;flickr&lt;/a&gt; já é um sucesso enorme e eu fui o último a tomar conhecimento dele. Mas o site é realmente muito bom. Imaginava que o &lt;a href="http://www.webshots.com"&gt;Webshots&lt;/a&gt; era o melhor site de fotos online, apesar de ser mais ou menos grátis e mais ou menos pago. Mas o flickr bateu por ser gratuito e por, aparentemente, ter muito mais fotos.&lt;br /&gt;&lt;br /&gt;Em resumo, o flickr é um site de fotos ótimo. Você também pode mandar suas fotos pra lá, mas eu particularmente fico só navegando nas mais indicadas (http://www.flickr.com/explore/interesting/) e em poucos minutos já achei papel de parede para o mês inteiro.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6773680198919979676-358859609009062821?l=ditoinfo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ditoinfo.blogspot.com/feeds/358859609009062821/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6773680198919979676&amp;postID=358859609009062821' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/358859609009062821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/358859609009062821'/><link rel='alternate' type='text/html' href='http://ditoinfo.blogspot.com/2006/09/flickr.html' title='Flickr'/><author><name>Dante S. Regis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_68f8fhzUzmM/TA5-eok_bmI/AAAAAAAABq0/iba9xLkwjok/S220/carinha_8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6773680198919979676.post-2151926443923208473</id><published>2006-09-12T23:51:00.000-03:00</published><updated>2006-09-13T00:00:17.523-03:00</updated><title type='text'>HowTo Forge</title><content type='html'>Se você se interessa ou precisa de informações técnicas sobre Linux e seus colegas, provavelmente já conhece esse site. Mas se você é daqueles que foram surpreendidos com um pedido do chefe do tipo "vamos montar um filtro anti-spam para semana que vem" e não tem muita experiência no assunto, o site do &lt;a href="http://www.howtoforge.com/"&gt;HowTo Forge&lt;/a&gt; é uma boa pedida. &lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6773680198919979676-2151926443923208473?l=ditoinfo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ditoinfo.blogspot.com/feeds/2151926443923208473/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6773680198919979676&amp;postID=2151926443923208473' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/2151926443923208473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/2151926443923208473'/><link rel='alternate' type='text/html' href='http://ditoinfo.blogspot.com/2006/09/howto-forge.html' title='HowTo Forge'/><author><name>Dante S. Regis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_68f8fhzUzmM/TA5-eok_bmI/AAAAAAAABq0/iba9xLkwjok/S220/carinha_8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6773680198919979676.post-5888553081231279992</id><published>2006-09-12T21:08:00.000-03:00</published><updated>2006-09-12T21:14:11.109-03:00</updated><title type='text'>Adesivos Powered by Ubuntu</title><content type='html'>Os teams locais de Ubuntu de vários países estão fornecendo adesivos gratuitos* com o texto &lt;span style="font-weight: bold;"&gt;Powered by Ubuntu&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;linux&lt;/span&gt;. Eu coloquei um asterisco em gratuitos porque apesar de não pagar pelo adesivo você paga pela postagem. Funciona assim: você envia para o endereço informado, via correio tradicional, um envelope (já com selos suficientes) endereçado a você mesmo. Claro que você deverá colocar esse envelope dentro de outro, também com selos, endereçado ao local informado. Em miúdos você paga duas postagens. Mas isso dá menos de 2 reais, e eu particularmente achei os adesivos muito legais.&lt;br /&gt;&lt;br /&gt;Para os preguiçosos o endereço no Brasil é:&lt;br /&gt;Comunidade UbuntuBR&lt;br /&gt;A/C Etiquetas Ubuntu&lt;br /&gt;Av. Rui Barbosa, 2095 cj63&lt;br /&gt;Santana - Sao Jose dos Campos/SP&lt;br /&gt;CEP: 12211-000&lt;br /&gt;&lt;br /&gt;Os adesivos estão disponíveis no site da &lt;a href="http://www.system76.com/index.php/cPath/53_64"&gt;System76&lt;/a&gt; .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6773680198919979676-5888553081231279992?l=ditoinfo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ditoinfo.blogspot.com/feeds/5888553081231279992/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6773680198919979676&amp;postID=5888553081231279992' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/5888553081231279992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6773680198919979676/posts/default/5888553081231279992'/><link rel='alternate' type='text/html' href='http://ditoinfo.blogspot.com/2006/09/adesivos-powered-by-ubuntu.html' title='Adesivos Powered by Ubuntu'/><author><name>Dante S. Regis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_68f8fhzUzmM/TA5-eok_bmI/AAAAAAAABq0/iba9xLkwjok/S220/carinha_8.jpg'/></author><thr:total>0</thr:total></entry></feed>
