Monthly Archives: June, 2009
Foxit reader no Linux
Nem tudo nessa vida é perfeito como gostaria. Em meu caso específico, ainda uso Windows no trabalho e muitos documentos que utilizo são em formato PDF. Tá, tudo bem, aí vem um e me pergunta, poxa mas porque não utilizar o Linux em vez do usar o…
Firefox 3.5 e Tab Mix Plus
Dica rápida:
1) Novo Firefox na praça
2) o TabMixPlus pra variar ainda não foi lançado oficialmente, permanece a sugestão dos releases anteriores: vá ao fórum do desenvolvedor e baixe a versão de testes: basta clicar no link em azul no final do primeiro post Tab Mix Plus Dev-Build 0.3.7.4pre.090516
(ou neste é claro)
Google Developer Day
Eh, eu fui ao Google Developer Day. Não devo ser uma pessoa deslumbrável. Ou minha personalidade de diva resmungona realmente chegou ao ápice. A falta de internet me incomodou (tinha wireless do hotel, mas custava uma pequena fortuna), a falta de chá/café me incomodou (tava frio, pô, eu sei que lindas modelos distribuíram picolés [...]
Ubuntu at FISL 10 in Brazil
As some of you may know, we had the FISL 10 in Porto Alegre, here in Brazil. As always, it was a great event with a lot of good speaks and crazy people hanging out! If you had never been there, I really advise you to make an effort to go for it!
This year we [...]
10º FISL – Uma resenha pessoal
Terminou a maratona do 10º FISL, especial pela edição (com direito a 8000 pessoas e o presidente Lula) quanto por ser o meu primeiro. A expectativa era muito e hoje ao escrever estas palavras posso dizer que a mesma foi alcançada com boas n…
Variaridade
Uma função variádica variária – em inglês variadic, variable arity, aridade¹ variável – é aquela que suporta uma quantidade variável de parâmetros.
Muitas linguagens suportam funções variárias, aliás de forma bem simples. Python usa o operador * para indicar quantidade variável de parâmetros, Lua usa o operador ... e Common Lisp o operador &rest.
Outras linguagens podem ser ainda mais simples, como por exemplo Perl, onde toda função é variária e os parâmetros são recebidos na lista @_, tradicionalmente capturados por shift.
Já Java não suporta funções verdadeiramente variárias devido a sua limitação forçada de tipagem, no entanto é possível simular com o uso de Object e casting («vazamento» na falta de uma tradução melhor):
void myFunction(Object... args) { // Código do método …}
Funções variárias em C/C++
C/C++ usa o cabeçalho stdarg.h para suporte a funções variárias.
O exemplo apresentado na Wikipédia é bastante simples: uma função printargs que recebe uma quantidade arbitrária de números inteiros, encerrando com -1 (ou qualquer número negativo em nosso exemplo), e os exibe na saída padrão.
Precisamos incluir dois cabeçalhos em C++, cstdarg para suporte a funções variária e cstdio para exibir o resultado:
#include <cstdio>#include <cstdarg>
Ou, em C:
#include <stdio.h>#include <stdarg.h>
A assinatura da função fica assim:
void printargs(int arg1, ...) {
Para acesso aos parâmetros múltiplos é usado um objeto va_list:
va_list args;
A função va_start() inicializa o objeto. Ela recebe dois parâmetros: o objeto va_list e o nome do último argumento antes da lista:
va_start(args, arg1);
Portanto é preciso haver pelo menos um argumento antes da lista variável. Podemos então exibir o primeiro parâmetro, recebido no argumento arg1:
printf("%d", arg1);
A função va_arg() retorna o argumento seguinte. Ela recebe como parâmetros o objeto va_list e o tipo do parâmetro da lista a ser recuperado.
O tipo precisar ser plenamente promovido, ou seja, ponteiro, inteiro, ponto flutuante ou precisão dupla. Outros tipos, como char precisam sofrer casting, como por exemplo (não faz parte do código de printargs):
char c = static_cast<char>(va_arg(va, int));
Continuando o código, podemos agora reiterar sobre os resultados de va_arg() até encontrarmos o valor de parada negativo:
int arg; while((arg = va_arg(args, int)) >= 0) printf(" %d", arg);
Após o fim da reiteração dos parâmetros obtidos do objeto va_list através de va_arg(), é preciso encerrar o objeto:
va_end(arg); printf("\n");}
Caso você queira restringir o formato de entrada da função, isso é possível usando __attribute__ em sua declaração. Por exemplo, se a função log() recebe o nível de log como primeiro parâmetro, uma string de formatação como segundo parâmetro (2) e os parâmetros variáveis a partir do terceiro (3), com formato similar ao da função printf(), isso é feito com a seguinte assinatura:
extern voidlog(int level, cons char *fmt, ...)__attribute__((format(printf, 2, 3)));
As opções para format() são printf, scanf, strftime e strfmon. Veja Declaring Attributes of Functions da documentação do GCC.
[]‘s
Cacilhas, La Batalema
¹Aridade: em Matemática é o número de operandos de uma função.
Google Docs agora tem um Linear Solver
O Google lançou uma nova feature no Google Docs, um Linear Solver para problemas de Otimização Linear. A utilização é muito simples, basta construír uma planilha com os dados, entrar com a função objetivo desejada (maximizar ou minimizar) e ir…
Palavra do presidente
Tem quem não goste, tem quem critique. Porém eu senti firmeza nessas palavras.
Tagged: Discurso, Fórum Internacional de Software Livre, FISL, Lula, Política, Software Livre
I Encontro Brasileiro de Usuários Archlinux
Na quarta feira (dia 24/04) aconteceu o I encontro de usuários brasileiros do Archlinux no FISL. O encontro contou com 4 palestras:
“Introdução ao Archlinux” por mim mesmo;
“From * import Arch” pela Kessia “even” Pinheiro;
“Archlinux Brasil – O que somos seremos e fomos” por Douglas Soares de Andrade
“Construindo pacotes para o Archlinux” por Hugo Dória
Nosso objetivo [...]
fotos
FISL 10
http://picasaweb.google.com/guilhermemunizdacunha/FISL10
LatinoWare 2008
http://picasaweb.google.com/guilhermemunizdacunha/LatinoWare2008
TcheLinux 2008
http://picasaweb.google.com/guilhermemunizdacunha/Tchelinux2008