Debugando usando .gdbinit
Um excelente recurso do grande GDB é poder criar nossos próprios comandos para auxiliar no debug das aplicações. Fazemos isso num arquivo chamado .gdbinit, a sintaxe é bem simples, porém não encontrei documentação a respeito do suporte do .gdbinit, até então a documentação é ver os .gdbinit que o Google encontrar.
É possível chamar os comandos existentes, obviamente, e tambem declarar variáveis, fazer type-casting, acessar os membros de estruturas, tem um printf, podemos chamar as funções C, e etc.
Regex: Special Backtracking Control Verbs
"Special Backtracking Control Verbs" é o recurso introduzido no Perl 5.10, já suportado pela PCRE, embora não totalmente fidedigno. Recentemente encontrei um uso para um desses Control verbs, a situação é a seguinte: Casar o bloco do IF e se houver o ELSE também, mas com uma condição, o bloco do ELSE deverá estar em branco.
Simples exemplo de uso do re2c
Para quem não conhece, o re2c é um tool para escrever rápidos e flexíveis scanners. Um adepto desse tool não tão recentemente, é o PHP em sua versão 5.3, vindo assim a substituir o velho Flex, o qual já demostrei em posts anteriores envolvendo parsers. Em questão de atualizações, o re2c vem se mantendo mais ativo, visto que o Flex não atualiza desde fevereiro de 2008.
A forma de utilização do re2c é diferente do Flex, vendo o código abaixo percebemos que as declarações ficam dentro de uma espécie de comentário, que no fim de tudo tornar-se-á naquele conhecido código cheio de GOTOs. Enfim, veja como é simples!
Nested loops, Hash join e Sort Merge joins
Traduzi um ótimo post explicando os tipos operações que um join pode ter no Oracle. Assim podemos ter uma notação de quando devemos mudar os planos do Oracle para agir da forma que queremos, mas claro, sabendo o que está fazendo!
Gerando linhas no Oracle
Uma das coisas interessantes também vistas no Oracle, é a possibilidade de gerar linhas! Esses dias eu vi utilidade para isso, utilizei num relatório onde mostra informações por período. (08:00 à 08:30, etc).
Facilidades do Oracle: Descobrindo ratio com RATIO_TO_REPORT()
Mais uma facilidade provida pelo gigante Oracle sendo exposta! Novamente eliminando subquery, que é indispensável para resolver a próxima questão se estiver usando o MySQL.
Dessa vez, a questão é a seguinte:
Retornar o nome dos usuários (únicos na tabela), e o ratio no qual o valor do campo valor representa em relação a soma de todos usuários.
Facilidades do Oracle: Usando MAX() com PARTITION BY
Salve, salve.
Quem já navegou pela documentação do Oracle, pôde (terceira pessoa do singular do pretérito perfeito do indicativo do verbo poder) supreender-se com a quantidade de recursos, principalmente na área das funções para aggregate e analytic. Tentarei selecionar algumas para fazermos um comparativo, demonstrando a aplicação em apropriados (ou não) casos de uso. :D
Criando um parser reentrant (pure parser) e brincando com actions
Olá!
Mais uma vez brincando com criação de parser, depois de apanhar bastante para fazer o Flex usar yylval, notei que o meu problema era atualizar a versão do mesmo! :D
Dessa vez trabalhei com actions, que são os códigos entre colchetes nas regras do parser (no arquivo .y) e atribuindo valores ao tokens, que é usando a tal yylval, sendo ela, do tipo de uma estrutura que criei.
Deletando registros duplicados no MySQL
Esta é uma tarefa que sempre alguem aparece em IRC/fórum precisando. Então deixarei registrado aqui para servir como uma referência.
Como podem ver abaixo, não será necessário usar qualquer linguagem de programação para realizar esta operação, apenas um client que mantenha uma sessão se for utilizar o método como tabela temporária.
Comandos e declarações em expressões
O GCC oferece várias extensões à linguagem, inclusive recursos que estão no ISO C99, mas não no C89 ou C++, sendo aceitos pelo GCC no modo C89 e em C++.
Vou dar uma olhada nessas extensões e ir postando para compartilhar com quem lê essa coisa. :)
Enfim, como está no título, a primeira extensão que veremos é essa.
Ela simplesmente permite criar um bloco com loops, switch, variáveis locais no lugar de uma expressão. Um uso interessante, seria em uma macro onde você não quer avaliar uma expressão mais de uma vez, como visto abaixo.