May
22
guax
A algum tempo atrás fiz um programinha que mantém um icone na systray para notificar se havia alguma atualização para o Slackware. Feito em python e pyGTK usando o código do wicd como base ele funciona em usermode e fica bonitinho no XFCE. Coloquei o código no github para algum interessado.
Repositório: https://github.com/guax/slackpkg-notifier
Tags: pyGTK, python, slackpkg, slackpkg-notifier, slackware, wicd
Posted in slackware | No Comments »
Jan
19
guax
Depois de uma semana e meia resolvi colocar as coisas devolta no ar.
Muito obrigado a pessoa especial que mija colorido que me forçou a tirar o blog no ar explorando uma vulnerabilidade do wordpress. Deus te ama meu filho.
Posted in Uncategorized | 1 Comment »
Dec
05
guax
SOAP:
POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 299
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
</soap:Header>
<soap:Body>
<m:GetStockPrice xmlns:m="http://www.example.org/stock">
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>
REST:
GET /stocks/getPrice?stockname=IBM HTTP/1.1
Host: www.example.org
Importante: eu sei que são coisas diferentes. Mas ainda assim a comparação é interessante. O ponto é: SOAP é complexo demais, grande demais e feio demais para a maioria das aplicações.
Tags: pog, REST, SOAP
Posted in Uncategorized | 1 Comment »
Nov
14
guax
A alguns dias atrás me debati com um problema na compilação do asterisk nas versões 13.1+ do Slackware Linux. Esse problema era causado por um negligência dos desenvolvedores ao linkar os módulos que fazem uso da libcap que causava o seguinte erro ao carrega-los:
[Nov 14 14:05:16] WARNING[3840]: loader.c:433 load_dynamic_module: Error loading module 'res_agi.so': /usr/lib/asterisk/modules/res_agi.so: undefined symbol: cap_set_proc
Apesar da compilação ser feita com sucesso por conta do link ser feito no binário “asterisk” os módulos não são carregados com sucesso. Com o slackware manteve a biblioteca estática no sistema em /usr/lib/libcap.a e este diretório é procurado antes que o /lib pelo GCC na hora de linkar o problema acaba por ocorrer. O certo seria que na compilação dos módulos que fazem uso da libcap estes fossem linkado com o parâmetro -lcap.
A correção mais rápida, fácil e inelegante desse problema é mover a libcap.a para um diretório temporário fora do caminho do linker, compilar o asterisk e devolver ao seu diretório. Para conferir se o seu binário do asterisk foi linkado corretamente com a biblioteca dinâmica da libcap basta usar o comando ldd /usr/sbin/asterisk, o retorno deverá ser semelhante a:
linux-gate.so.1 => (0xffffe000)
libdl.so.2 => /lib/libdl.so.2 (0xb76f2000)
libcap.so.2 => /lib/libcap.so.2 (0xb76ed000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb76d4000)
libtermcap.so.2 => /lib/libtermcap.so.2 (0xb76d0000)
libm.so.6 => /lib/libm.so.6 (0xb76a9000)
libresolv.so.2 => /lib/libresolv.so.2 (0xb7692000)
libc.so.6 => /lib/libc.so.6 (0xb752f000)
/lib/ld-linux.so.2 (0xb7724000)
libattr.so.1 => /lib/libattr.so.1 (0xb752a000)
Caso não tenha dado certo o resultado será semelhante a:
linux-gate.so.1 => (0xffffe000)
libdl.so.2 => /lib/libdl.so.2 (0xb7797000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb777e000)
libtermcap.so.2 => /lib/libtermcap.so.2 (0xb777a000)
libm.so.6 => /lib/libm.so.6 (0xb7754000)
libresolv.so.2 => /lib/libresolv.so.2 (0xb773c000)
libc.so.6 => /lib/libc.so.6 (0xb75d9000)
/lib/ld-linux.so.2 (0xb77b0000)
Tags: asterisk, bug, desenvolvimento, gambiarra, linker, slackware, sobrinhagem
Posted in asterisk, desenvolvimento, slackware | No Comments »
Oct
02
guax
Uma anedota de como o Asterisk se transformou de nossa melhor solução para nosso maior problema num período de menos de 2 anos.
No começo tudo eram flores, as centrais eram instaladas na mão e configuradas com carinho e atenção digno de um artista brincando com uma tela. Esse foi o primeiro grande problema quando estávamos tentando crescer a base instalada e aumentar a estabilidade ao longo de todos os sistemas, o erro aqui não era do Asterisk, mas nosso em acreditar que ele era um pbx. Não é, o asterisk não é mais do que uma plataforma para a construção de soluções de telefonia. Ele é a base dos PBX e não este em si.
Após criarmos uma visão de produto e implementar tudo aquilo que nos faltava, conseguimos maior estabilidade e sincronismo entre as centrais. Nos batemos então com um problema básico e que já foi fonte de reclamações nesse blog a alguns meses atrás. CDR e Transferências. A arquitetura interna do asterisk não possui uma thread para cada canal de ligação, isso faz com que uma “magia negra”, como descrito pelos desenvolvedores, seja necessária para que as transferências sejam possíveis: o maskerading. O fato do plano de discagem do asterisk ser baseado em contexto e não em eventos faz com que as aplicações só possam ser executadas no canal que é dono do fluxo atual da ligação. Isso impede por exemplo que uma gravação seja feita em sua totalidade caso haja uma transferência feita pelo originador da chamada e também impede que o log das ligações seja registrados corretamente no banco de dados.
Nesse ponto, nossa especialidade estava em trabalhar com o Asterisk vanilla usando suas APIs públicas para implementar nossas soluções. Com isso se tornou comum as famigeradas “gambiarras” no código e na configuração do Asterisk para que esses problemas fossem contornados. A solução de software que nos permitiu criar toda uma familia de produtos se tornou agora nosso calcanhar de Aquiles pois as limitações delas agora estão se sobressaindo sobre as nossas próprias.
Esse é o ponto onde estou no momento em que escrevi o texto. Agora começa a batalha para correção desses problemas no próprio Asterisk ou na substituição do mesmo por softwares com outra abordagem como o FreeSWITCH.
Tags: asterisk, confissao, desenvolvimento, pog
Posted in asterisk, desenvolvimento, Telephony | 1 Comment »
Aug
07
guax
Depois do debate da Band entre os candidatos a presidente eu percebi que o comportamento e aparência de um deles era muito semelhante a um famoso personagem da internet

Esse sorriso nunca me enganou.
Tempos sem postar nada por que as férias estavam boas.
Tags: lol, plinio arruda, politica, troll, trollface
Posted in Uncategorized | No Comments »
Jun
21
guax
Já dizia o grande comentarista Galvão Bueno.

Ele nunca me enganou com essa carinha. aeuheuahue
Tags: CALA BOCA GALVAO, fail, haha, lol, trollface
Posted in Uncategorized | No Comments »
Jun
14
guax
Meus quotes do twitter no blog nunca mais serão os mesmos
CSS devidamente kibado daqui.
Tags: frescura, guax.net, quote, twitter
Posted in Uncategorized | No Comments »
Jun
14
guax
É comum não compreender como funciona o conceito de branching em um repositório SVN, fiz um diagrama para exemplificar como funciona o branching para manutenção de uma versão antiga de software em um repositório SVN. Sintam-se a vontade para editar/imprimir redistribuir ou qualquer coisa.

Você pode baixar a versão para impressão 300 DPI A4 landscape Abaixo
Você pode editar o SVG original (gziped) usando o Inkscape. Ou a versão para impressão.
Tags: branch, inkscape, subversion, svn
Posted in Uncategorized | No Comments »