segunda-feira, novembro 27, 2006

Delphi Odd Form

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 voilá: um form diferente!



Veja mais no site do Delphi Odd Form.





powered by performancing firefox

sábado, novembro 25, 2006

Ruby on Rails

Um colega de trabalho, o Chico Ary (http://chicoary.wordpress.com/), 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.



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.



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.



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.



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)



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:



Em php:



$sql = "SELECT * FROM tickets WHERE id = 10";

$result = mysql_query($sql);

$ticket = mysql_fetch_array($result);



$sql = "SELECT * FROM categories WHERE id = " . $ticket["category_id"];

$result = mysql_query($sql);

$category= mysql_fetch_array($result);



$sql = "SELECT * FROM user_groups WHERE id = " . $category["id"];

$result = mysql_query($sql);

$user_group =
mysql_fetch_array($result);



$sql = "SELECT * FROM user_groups_user WHERE user_group_id = " . $user_group["id];

$result = mysql_query($sql);


while $user =
mysql_fetch_array($result)

{

$sql = "SELECT * FROM users WHERE id = " . $user["id"];

$result2 = mysql_query($sql);

$user_data = mysql_fetch_array($result2);

echo "Nome do usuário: " . $user_data["full_name"];

}

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:



No modelo de Ticket:

belongs_to :category



No modelo de Category

belongs_to :user_group



No modelo de UserGroup

has_and_belongs_to_many :users



No modelo de User

has_and_belongs_to_many :user_groups



no código



ticket = Ticket.find(10) # o id do ticket era 10, lembra?

lista_usuarios = ""

for user in ticket.category.user_group.users

lista_usuarios = "Nome do usuário: " + user.full_name + "\n"

end



render :text = lista_usuarios


Agora me diga: o que foi mais legível? Mais fácil de escrever? Então visite www.rubyonrails.org e comece a conversão! :)



Se quiser um tutorial bom e gratuito, tem lá no www.rubyonbr.org





powered by performancing firefox

sexta-feira, outubro 20, 2006

Dos2Unix

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.

sexta-feira, outubro 13, 2006

Firefox 2.0

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.

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.

Uma característica muito 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.

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.

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! :)

sábado, outubro 07, 2006

GNU make

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.

Dêem uma olhada no manual do GNU make

sexta-feira, setembro 22, 2006

Putty e o Ctrl+S

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.

Mas os seus problemas acabaram!!! Simplesmente pressione Ctrl+Q e tudo voltará ao normal! :)

quinta-feira, setembro 21, 2006

Jogos para Linux

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 Techgage, que fizeram a lista dos 10 melhores jogos para Linux. E olha que não é Tetris e outros que vêm junto com o Gnome ou KDE não! :)

PS: Ainda acho que faltam muitos jogos, e que apesar do wine ser bacana, a melhor solucao ainda é o Windows (ao menos para jogos).

Shell Revealed

É isso aí! Parece até curso de shell script para Linux né não? O Shell Revealed , 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.

domingo, setembro 17, 2006

Flickr e Firefox

Acreditem em mim quando digo que o Flickr é muito bom. E acreditem em mim quando digo que o Firefox é o melhor browser do mundo.

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.

Já o Platypus é uma ferramenta excelente para criar scripts para o GreaseMonkey. É quase um editor WYSIWYG. Experimente e não vai se arrepender.

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.

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!

Debugando JavaScript

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.

É ó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.

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: (1) A Debug Window (2) O MS Script Debugger e (3) O MS Script Editor.

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.

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.

PS: O código não é meu, apenas estou copiando aqui. Ele se encontrava originalmente no artigo JavaScript Debug Utility da Isocra.

O código tinha originalmente 3 partes. Eu só utilizo as duas primeiras, mas vou reproduzir aqui a terceira também.

Essa é a função que cria a janela:

// Show the debug window
function showDebug() {
window.top.debugWindow =
window.open("",
"Debug",
"left=0,top=0,width=300,height=700,scrollbars=yes,"
+"status=yes,resizable=yes");
window.top.debugWindow.opener = self;
// open the document for writing
window.top.debugWindow.document.open();
window.top.debugWindow.document.write(
"<HTML>" +
"<HEAD>" +
" <TITLE>Debug Window</TITLE>" +
"</HEAD>" +
"<BODY>" +
" <PRE> \n");
}


Essa é a função que imprime o texto desejado na janela de debug:

// If the debug window exists, then write to it
function debug(text) {
if (window.top.debugWindow && ! window.top.debugWindow.closed) {
window.top.debugWindow.document.write(text+"\n");
}
}


E essa função, que eu não utilizo, fecha a janela de debug

// If the debug window exists, then close it
function hideDebug() {
if (window.top.debugWindow && ! window.top.debugWindow.closed) {
window.top.debugWindow.close();
window.top.debugWindow = null;
}
}
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á!

Quando o sistema for para produção, basta retirar a linha inicial. O site do artigo original 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 time-sensitive. Nesse caso, dê uma olhada no artigo.

Firefox

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.

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.

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 (Webdeveloper), 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.

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.

O número de extensões é monstruoso e cresce a cada dia. Dê uma chance ao Firefox. No dia que você instalar o Google Browser Sync 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.

Flickr

Tudo bem, esse post é atrasado, o flickr já é um sucesso enorme e eu fui o último a tomar conhecimento dele. Mas o site é realmente muito bom. Imaginava que o Webshots 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.

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.

terça-feira, setembro 12, 2006

HowTo Forge

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 HowTo Forge é uma boa pedida.

Adesivos Powered by Ubuntu

Os teams locais de Ubuntu de vários países estão fornecendo adesivos gratuitos* com o texto Powered by Ubuntu linux. 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.

Para os preguiçosos o endereço no Brasil é:
Comunidade UbuntuBR
A/C Etiquetas Ubuntu
Av. Rui Barbosa, 2095 cj63
Santana - Sao Jose dos Campos/SP
CEP: 12211-000

Os adesivos estão disponíveis no site da System76 .