quinta-feira, 3 de novembro de 2011

Map de string em C++

Uma das grandes vantagens de programar em C++ ao invés de C é a utilização da STL (Standard Template Library). Ela disponibiliza Containers, Iterators, Algoritmos e Funções Objetos. Nesse post irei abordar uma característica de busca no container MAP e MULTIMAP.

Container são objetos que armazenam outros objetos e o método de acessar esses objetos. Por exemplo, posso contruir um vetor de inteiros (vector<int> v). Qual a vantagem de utilizar um vector ao invés de criar um elemento do tipo int v[10]? Se você reparar, verá que na declaração do vector eu não especifiquei o tamanho. Isso mesmo, ele é auto dimensionável. Ele também tem algumas funções que facilitam a manipulação de seus elementos.

Outra coisa muito interessante que C++ tem é a classe string. A classe string é um container de char's, que tem algumas funções que facilitam a manipulação dos elementos. Também é auto redimensionável.

Os containers MAP e MULTIMAP são containers associativos com 2 elementos, uma chave e um dado. A diferença é que no map, a chave é única, e no multimap, a chave pode se repetir. A construção básica de um map seria map<int, string> m, onde o primeiro elemento é a chave.

É possível acessar o elemento através de sua chave, por exemplo, tenho um map com os seguintes pares: 1, primeiro; 2, segundo; 3, terceiro; 4, quarto. A função m.find(3) irá retornar um iterator (que deve ser declarado como map<int, string> it, por exemplo) que aponta para o elemento de chave 3. Para acessar o dado, eu faria string elemento = (*it).second.

Mas e se a chave for uma string (map<string, string> mstring), a busca será case sensitive. Para realizar busca case insensitive é preciso implementar o método de busca, e ele deve ser especificado na declaração da variável.

No caso, eu criei um utils.h com o seguinte código:

#ifndef UTILS_H
#define UTILS_H
#include <string>
#include <algorithm>
using namespace std;
struct ltstr
{
    bool operator()(string s1, string s2) const
    {
        string s1Tmp, s2Tmp;
        s1Tmp = s1;
        s2Tmp = s2;
        transform(s1Tmp.begin(), s1Tmp.end(), s1Tmp.begin(), ::toupper);
        transform(s2Tmp.begin(), s2Tmp.end(), s2Tmp.begin(), ::toupper);
        return s1Tmp.compare(s2Tmp) < 0;
    }
};
#endif // UTILS_H

Para declarar a variável map basta fazer como abaixo:


#include <map>
#include <string>
#include "utils.h"
#include <iostream>
using namespace std;
int main()
{
    map<string, string, ltstr> mstring;
    map<string, string, ltstr>::iterator it;
    mstring.insert(pair<string, string>("a", "primeiro"));
    mstring.insert(pair<string, string>("b", "segundo"));
    mstring.insert(pair<string, string>("c", "terceiro"));
    mstring.insert(pair<string, string>("D", "quarto"));
    mstring.insert(pair<string, string>("e", "quinto"));
    it = mstring.find("d");
    if (it != mstring.end())
    {
        cout << "elemento procurado: " << (*it).second.c_str() << endl;
    }
    return 0;
}



Essa solução funciona também para o elemento multimap.


terça-feira, 11 de outubro de 2011

Novo treinamento

Mês passado ministrei mais uma turma do curso de Introdução ao Linux.

A nova versão da apostila está disponível no Megaupload. Somente algumas correções e alguns exemplos simples de expressões regulares foram adicionadas.

Essa turma foi interessante pois havia algumas pessoas que não eram da área de redes. Foi muito curioso a reação de uma desenvolvedora que fazia o curso, pois, apesar de ter uma lógica muito parecida com qualquer outra linguagem, a programação em shell tem uma sintaxe bem diferente, e ela não se conformava.

O curso foi feito utilizando o Vmware, e algumas pessoas tiveram uma certa dificuldade em manuseá-lo. Mas isso depende de alguma prática. Muitos disseram que iam instalar para treinar um pouco mais de Linux, pois tem acesso restrito a alguns servidores no trabalho.

Mas pelo que eu percebi todos conseguiram aproveitar bem o treinamento, e espero que continuem se aprimorando.

quinta-feira, 18 de agosto de 2011

ASP com Ldap

Recentemente no meu trabalho tivemos um pequeno problema quando o pessoal do desenvolvimento teve que alterar algumas aplicações que autenticavam no Active Directory, e que precisam agora autenticar em outro serviço de diretório (o Fedora Directory Server).

As aplicações são em sua maioria em ASP, mas não o ASP .net, mas o ASP mais antigo.

Essa linguagem tem uma característica (ou seria uma limitação???) interessante ao acessar diretórios. Ela faz um cache do schema dos objetos do diretório localmente. Mas esse cache, pelo que percebemos, tem certa dificuldade em armazenar atributos que não são padrão do Ldap. Ou seja, se você precisou criar algum atributo, o ASP não irá conseguir determinar qual seu valor.

Depois de praticamente dois dias de pesquisa, encontrei uma solução disponível neste http://www.selfadsi.org/deep-inside/get-all-attributes.htm.

Ele consegue determinar como os dados são gravados no diretório sem ler o schema armazenado em cache local. Para isso, ele le o valor do atributo em octetstring, depois converte para ascii.

No Fedora Directory Server conseguimos ler todos os atributos que foram criados, e eles foram exibidos corretamente no browser.

Ainda não vi como fazer para o ASP se conectar com o servidor Ldap usando criptografia, pois, apesar de ter uma opção para isso, não vi como especificar onde fica o arquivo com a chave criptográfica.


quinta-feira, 28 de julho de 2011

Experiência como instrutor

Em um post passado eu mencionei que ministrei um curso de Introdução ao Linux. O curso foi pelo CISL - Comitê Técnico de Implementação de Software Livre do governo Federal. A chamada para o curso está no site ainda http://www.softwarelivre.gov.br/eventos/treinamento-do-cisl-administracao-de-linux-basico/

O curso foi aberto para órgãos do governo

A idéia do curso era realmente uma introdução ao Linux, mas voltado para administradores de rede. E realmente foi isso que aconteceu. Todos os participantes do curso já trabalhavam com redes, e tinham muitos conhecimentos inclusive. Mas não tiveram muito contato prático com Linux.


O fato de todos já terem muitos conhecimentos em redes facilitou muito o curso, pois não foi necessário explicar conceitos básicos.

Claro que tivemos várias dificuldades, mas isso é normal no início pois o curso foi todo voltado para a linha de comando. Minha idéia inicial para o título do curso era "Introdução ao Linux: Perdendo o medo da tela preta".

A ementa do curso foi:
  • Instalação do Debian
  • Entendendo o prompt e comandos básicos
  • Usando o vim
  • Gerenciamento de pacotes
  • Configurações básicas
  • Serviços
  • Comandos avançados
  • Programação shell
Tirando algumas falhas minhas, achei o curso muito gratificante. Pelo que percebi o pessoal conseguiu assimilar bem as informações. Claro que é necessário eles praticarem para conseguirem fixar e aprimorar tudo.

A apostila está disponível no Megaupload e pode ser utilizada livremente. Caso encontrem algum erro, ou tenham alguma sugestão é só avisar.

Um dos órgãos perguntou se irá ter outra turma, por isso estamos agendando, mas ainda não tem data definida.

terça-feira, 5 de julho de 2011

Novo notebook

A briga com o novo notebook continua. Estou aproveitando as férias para terminar de configurar.

No Debian, só consegui reconhecer a placa wireless depois que atualizei o kernel. Tentei recompilar o kernel padrão do Debian mas lí em algum lugar que somente as versões mais novas trabalham bem com minha wireless.

Com isso, a placa de vídeo também funcionou com o driver intel, e consegui configurar o gráfico em 1366x768, que é o correto. Mas ao abrir algum vídeo, a parte gráfica trava.

No Gentoo eu consegui configurar corretamente tanto a wireless como o gráfico. Tentei abrir um vídeo e não travou.

Pelo que eu percebi até agora o gráfico está funcionando com o driver da intel. Ainda não tentei fazer a troca para o driver da ati. Mas como não costumo usar nada 3D não está fazendo diferença por enquanto.

O som desse notebook não se compara ao do meu notebook antigo. De todos os notebooks que eu já ví até agora, o som do Toshiba é insuperável (é Toshiba mesmo, e não Semp Toshiba. O Toshiba que eu tinha era importado). Isso se não levar em consideração esses notebooks mais caros feitos para jogo, pois eles costumam ter uma placa de som e uns auto-falantes e melhor qualidade. Mas o Toshiba tem um som excelente em qualquer modelo.

Bom, depois que eu tentar fazer o gráfico funcionar com driver 3D eu posto minha experiência.

sábado, 18 de junho de 2011

Notebook com placa de vídeo 3D

Depois de muito tempo, eis que consigo escrever novamente em meu blog. Ultimamente estava sem assunto, pois estava trabalhando na documentação de um projeto. E também fiz um curso sobre Storage e switch para storage.

Também ministrei um curso de Linux Básico pelo CISL - Comite de Implantação de Software Livre do Governo Federal. Irei escrever depois sobre isso.

Vamos então para o assunto principal do post.

Resolvi comprar um novo notebook, visto que o meu já tinha alguns anos. Depois de muito pesquisar escolhi um Dell Vostro 3450.

Novo processador Core i5 2410. Revestimento em alumínio, 1 pente de 4GB de memória (o que é muito bom, pois se eu quiser expandir só preciso comprar outro de 4GB). Muito bom mesmo.

O grande problema: ele vem com placa 3D. Mas hoje em dia, muitos notebooks que tem placa 3D, na verdade tem 2 placas de vídeo. Um chamada de "discrete" (3D) e outra chamada de "integrated". São as placas híbridas.

Com isso, a placa 3D só é ativada quando há necessidade de um maior desempenho de vídeo. Isso economiza energia, pois as placas 3D consomem bem mais que as placas que não tem aceleração gráfica.

Em alguns notebooks é possível  deixar somente uma delas ativadas através do BIOS. Com isso, o Linux só reconhece a placa ativada, e não há problema nenhum para configurar. Mas o meu notebook não tem essa opção, ou seja, por enquanto só consegui carregar o modo gráfico usando driver vesa, com resolução 1024x768.

Mas durante algumas horas de pesquisas, encontrei alguns tutorias de como fazer para configurar corretamente. Assim que eu conseguir eu posto a experiência.

Por enquanto preciso fazer a wireless funcionar, porque ela também não funcionou automaticamente. Vou dar uma prioridade maior a isso, pois tem algumas pessoas interessadas em comprar meu notebook antigo.

sexta-feira, 13 de maio de 2011

Dicas de atualização do seu Gentoo Linux

Assim como a instalação, a atualização do Gentoo é um processo demorado. Isso deve-se ao fato de todos os pacotes serem compilados localmente.

A atualização é feita com o comando

# emerge --update world --deep

Depois de finalizar a atualização é importante executar dois comandos,

# revdep-rebuild


# etc-update

O segundo verifica se arquivos de configuração dos pacotes que foram instalados tiveram alguma alguma modificação em relação a versão anterior. Ele não verifica se o usuário alterou o arquivo, ou seja, caso alguma customização tenha sido feita, ela será retirada, e o arquivo instalado será o padrão do novo pacote.

O comando sempre lista os arquivos que serão alterados, e é possível ver as diferenças para as versões anteriores. Pode-se por exemplo, fazer um backup dos arquivos, deixar o comando sobrescrevê-los, e depois reconfigurá-los conforme a necessidade de cada um.

Já o revdep-rebuild é muito importante, pois ele verifica se, a versão antiga dos pacotes tem alguma dependência. Se tiver, esses pacotes dependentes serão recompilados.

Após a atualização é importante verificar as mensagens geradas (caso não consiga ver no terminal por algum motivo, é possível vê-las no arquivo /var/log/portage/elog/summary.log.

Alguns pacotes podem retornar uma mensagem que contenha uma informação como por exemplo:

Old versions of installed libraries were detected on your system.
In order to avoid breaking packages that depend on these old libs,
the libraries are not being removed. You need to run revdep-rebuild
in order to remove these old dependencies. If you do not have this
helper program, simply emerge the 'gentoolkit' package.


# revdep-rebuild --library '/usr/lib64/liblzma.so.0'


Once you've finished running revdep-rebuild, it should be safe to
delete the old libraries. Here is a copy & paste for the lazy:
# rm '/usr/lib64/liblzma.so.0'

É muito interessante executar esses comandos, pois isso irá recompilar as dependências somente desse pacote, e depois pode-se remover a versão antiga da biblioteca, que não será mais utilizada.

Ao realizar esses comandos deve-se ter paciência para que eles terminem, pois em alguns casos pode-se ter alguma conseqüência grave.

Outro dia, após atualizar meu Gentoo, fui executar o revdep-rebuild --library para uma das bibliotecas instaladas. Alguns dos pacotes dependentes iriam demorar muito para compilar, por isso resolvi interromper o processo antes de iniciar a compilação.

Como resultado, meu servidor X não carregou mais corretamente. Vendo seu log, verifiquei que o problema era uma biblioteca que havia sido corrompida. Tentei recompilar a biblioteca, mas algumas outras bibliotecas necessárias para o gcc também haviam sido corrompidas.

Para resolver o problema tive que baixar o stage e copiar algumas bibliotecas para substituir as que foram corrompidas. Com isso foi possível recompilar os pacotes.

Ainda não terminei a recuperação. Provavelmente ainda precisarei recompilar vários pacotes para resolver todos os problemas.

Com isso fica a dica: nunca interrompa o processo de atualização do Gentoo. Tanto para atualização/instalação de pacotes como para o revdep-rebuild sempre utilize o parâmetro -v para ver o que será executado. Execute os comandos somente quando tiver certeza que poderá esperar a finalização deles.

Aproveitando a oportunidade: atualize seu Gentoo periodicamente, caso contrário haverá muitas atualização a serem feitas de uma vez.

quinta-feira, 28 de abril de 2011

Samba com LDAP sem smbldap-tools

Quando se pensa em uma integração de Samba com LDAP normalmente utiliza-se o pacote smbldap-tools. Mas é possível fazer com que o Samba acesse a base LDAP diretamente.

Fiz um artigo com os procedimentos necessários. Não me apeguei muito a configuração do Samba e do OpenLDAP, pois há diversos tutorias sobre eles na Internet.

O artigo está disponível no Megaupload.

Segundo o man do Samba, o processo de login no domínio fica bem mais rápido configurando-se dessa forma.

terça-feira, 19 de abril de 2011

Banco de Dados

Para facilitar algumas buscas em um arquivo CSV em meu trabalho, resolvi carregar esse arquivo em um banco de dados relacional MySQL. Obs.: Como trabalho em uma área que mexe com diretórios LDAP, eu deveria ter carregado em uma base LDAP, mas algumas buscas são realmente mais fáceis com SQL.

Eu precisava saber os tipos de funcionários existentes na empresa. Fiz então a seguinte busca:


SELECT codigoCaracteristica, quadro
FROM  `Empregados` 
GROUP BY codigoCaracteristica

E ela trouxe os dados como deveria.

Pensando um pouco, imaginei que isso poderia ser feito de outras maneiras, e pensei também que, isso poderia ter um desempenho diferente.

Levando-se em conta que o campo codigoCaracteristica é um campo indexado, e o campo quadro não é. O banco tem 11.411 registros. O banco tinha acabado de ser criado, portanto não havia cache.
Realizei 3 buscas diferentes, com os seguintes tempos de resposta:


SELECT DISTINCT codigoCaracteristica, quadro
FROM  `Empregados` 
Mostrando registros 0 - 3 (4 total, Consulta levou 0.0194 segundos)


SELECT codigoCaracteristica, quadro
FROM  `Empregados` 
GROUP BY codigoCaracteristica
Mostrando registros 0 - 3 (4 total, Consulta levou 0.0141 segundos)


SELECT codigoCaracteristica, quadro
FROM  `Empregados` 
GROUP BY quadro
Mostrando registros 0 - 3 (4 total, Consulta levou 0.0335 segundos)

A diferença entre fazer um group by em um campo indexado foi significativa. Mas não considerei relevante a diferença entre fazer um distinct e um group by em um campo indexado.

Acredito que buscas utilizando distinct e group by, mas utilizando mais de uma tabela, deva trazer diferenças mais significativas, mas não fiz testes para verificar.

domingo, 3 de abril de 2011

Configuração de teclado: udev + UPower

Final de semana fui atualizar meu Gentoo, e uma das atualizações disponíveis era a do gnome. Finalizada a instalação percebo que existem algumas diferenças no funcionamento do teclado e do mouse.

Antes, o teclado e mouse funcionavam com o HAL, e agora utilza udev. Devido a isso, meu teclado, que é padrão Americano Internacional, não estava mais acentuando.

Após muita pesquisa, verifiquei que o HAL é considerado obsoleto, e que no lugar dele, usa-se o udev e UPower.

A dificuldade foi que, com o HAL, era possível desativar a inserção automática de dispositivos e configurá-los através do arquivo /etc/X11/xorg.conf. Com o udev/UPower, isso não foi possível. Mas quando o udev carregava a configuração do teclado, ele definia o layout como us, e não como us_intl.

Era possível verificar tudo isso através do log do servidor X (/var/log/Xorg.0.log) que exibia uma mensagem como a abaixo:

[  3955.251] (II) XINPUT: Adding extended input device "Power Button" (type: KEYBOARD)
[  3955.251] (**) Option "xkb_rules" "evdev"
[  3955.251] (**) Option "xkb_model" "evdev"
[  3955.251] (**) Option "xkb_layout" "us"



Verificado isso, comecei nova pesquisa, e nesta wiki do ArchLinux, a solução foi encontrada. Para configurar o teclado agora, é preciso editar o arquivo /etc/X11/xorg.d/10-evdev.conf, que tem uma sintaxe muito parecida com o xorg.conf.

No meu caso, precisei criar o diretório xorg.conf.d dentro de /etc/X11, e copiar um arquivo base de /usr/share/X11/xorg.conf.d.

Feito isso somente inseri algumas linhas na área definida para o teclado, ficando como o abaixo:

Section "InputClass"
        Identifier "evdev pointer catchall"
        MatchIsPointer "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

Section "InputClass"
        Identifier "evdev keyboard catchall"
        MatchIsKeyboard "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
    Option "XkbLayout" "us_intl,br"
    Option "XkbOptions" "grp:menu_toggle,grp_led:scroll"


EndSection

Section "InputClass"
        Identifier "evdev touchpad catchall"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

Section "InputClass"
        Identifier "evdev tablet catchall"
        MatchIsTablet "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

Section "InputClass"
        Identifier "evdev touchscreen catchall"
        MatchIsTouchscreen "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

As linhas adicionadas são as em negrito.

Aproveitei a oportunidade e pesquisei também como fazer para definir mais de um layout de teclado para o caso de eu querer ligar um teclado abnt2. Como pode-se ver, a linha Option "XkbLayout" "us_intl,br" define dois layouts, o us_intl e o br. A linha seguinte Option "XkbOptions" "grp:menu_toggle,grp_led:scroll" diz que, se pressionar o botão de "menu de contexto" do teclado, haverá a troca de layout, e o led de scroll lock irá indicar esta troca.


A tecla de "menu de contexto" foi uma escolha pessoal, visto que é uma tecla que eu não utilizava para nada. Outras opções podem ser vistas nesta wiki do Gentoo.

sexta-feira, 1 de abril de 2011

Palestra: Processo de desenvolvimento do Kernel e do QEMU

Hoje tive a oportunidade de assistir uma palestra em minha empresa sobre o Processo de desenvolvimento do Kernel Linux e do Qemu.

O palestrante, Glauber Costa, é engenheiro e mestre em computação pela Unicamp. É envolvido com o processo de desenvolvimento do kernel Linux desde 2004. Está envolvido no projeto Qemu a cerca de 3 anos. Já trabalho no Linux Technology center da IBM e atualmente trabalha no grupo de virtualização da Red Hat.

O objetivo da palestra foi mostrar como funciona o processo de desenvolvimento de dois softwares livres.

Segundo Glauber, o processo de desenvolvimento do kernel funciona como uma árvore de confiança. O mantenedor do kernel não revisa todo o código. Ele confia no mantenedor de cada ramo da árvore de desenvolvimento, que por sua vez, confia nos sub-ramos, se eles existirem. Cada mantenedor fica responsável por garantir que todo o código de sua árvore é confiável, seja revisando, seja confiando em outra pessoa que revisaram.

Isso é necessário porque não é possível alguém revisar todas as alterações, pois atualmente o kernel tem mais de 14 milhões de linhas.

O Qemu é utilizado para virtualização, e começou como um projeto individual de Fabrice Bellard.

Por ser um projeto individual, as colaborações muitas vezes demoravam para serem inseridas a ele. Isso tornava a evolução lenta.

Com o advento da virtualização, alguns desenvolvedores viram que era interessante investir no Qemu, mesmo que fosse necessário um pouco de tempo para melhorar o processo de desenvolvimento colaborativo.

Glauber concluiu que, mesmo o Qemu tendo um processo de desenvolvimento complicado, ele era sim, um software bem sucedido, pois atendia as expectativas do desenvolvedor.

Ou seja, mesmo tendo processos de desenvolvimento diferentes, tanto o kernel Linux como Qemu, são softwares livres bem sucedidos.

Glauber destacou que, num processo colaborativo como o do kernel, muitas vezes tem-se conflitos, mas isso nem sempre é algo ruim. Normalmente isso ajuda na evolução do software. Alguns desses conflitos podem gerar forks, e esses forks podem acabar ou seguir por muito tempo.

O fato de ter Red Hat e Suse, que são concorrentes, trabalhando no kernel não é ruim para ambas, muito pelo contrário, pois os custos de melhoria do kernel acaba sendo dividido entre várias empresas.

Glauber também enfatizou que a Red Hat figura atualmente como a maior contribuidora, responsável pelo desenvolvimento de aproximadamente 12% do kernel. Ou seja, se ela parar de contribuir, causará algum impacto, mas não impossibilitará a continuidade do projeto.

quarta-feira, 30 de março de 2011

Humberto Gessinger

Para quem não conhece, Humberto Gessinger é o vocalista da banda Engenheiros do Hawaii. Ele acaba de publicar seu terceiro livro "Mapas do Acaso. 45 variações sobre um mesmo tema".

Hoje foi o lançamento do livro em São Paulo. Pocket show e sessão de autógrafos na Livraria Cultura do Shopping Market Place.

Foi meio cansativo. Fila para pegar senha, depois quase 2 horas esperando na fila para o início do pocket show.

E finalmente a fila para pegar o autógrafo no livro.


Depois de tudo, maratona recompensada.


Ele quase errou meu nome, mas tudo bem.

terça-feira, 29 de março de 2011

Syslog


Final de semana tive um problema de falta de espaço no meu HD.Para investigar abri um terminal, fui até o raiz e executei o comando du -hs *.

Para os que não conhecem, o du estima o espaço utilizado pelo arquivo. O parâmetro h é para deixar a saída mais amigável, mostrando os tamanhos em Kilobyte, Megabyte, etc.. O parâmetro s “sumariza” o resultado, mostrando o total de cada diretório (informações retiradas do man).

Como resultado, verifiquei que o diretório /var/log estava muito cheio. Comecei a verificar a configuração e percebi que, além de ter dois serviços de log rodando (syslog-ng e sysklogd), eles estavam gerando log dos pacotes que estavam trafegando pela rede wireless.

Primeiro, não precisamos de dois serviços de log rodando no mesmo sistema, por isso precisava escolher qual utilizar. Decidi ficar com o syslog-ng.
 
Segundo, precisava descobrir porque era gerado tanto log sobre a wireless. Abaixo segue um trecho desses logs:

Mar 29 21:59:25 taiga kernel: TKIP decrypt: data(len=1211) 35 35 dc 20 00 00 00 00 eb 2a 2c 8e 20 ed ce 2a a1 36 81 f4 15 6c 52 de 08 8b ed 0c b7 c1 2e 23 a9 9e c9 03 c8 94 da 45 b4 6a 19 7b e5 9f 54 f3 92 0a 2b 3f e1 72 2e 54 ce 4a 62 2d b1 45 26 5b 62 8f fe 3d 2f ee b5 74 37 19 e7 ac 80 d3 6f 6b af 52 ea b7 e7 26 17 c2 42 af 1f 2c 79 3b 05 9b 82 08 90 00 ed 75 3d 7a 14 57 21 23 97 16 58 8e 5c 80 9e 71 eb ca 04 62 ec 0b b2 ae 55 96 e6 d8 37 29 6d 66 93 e6 ef 1f b9 ad df 55 cf e7 40 7b 79 55 06 18 e0 77 e1 e0 78 29 65 7c 19 e4 40 22 9b 47 1d da 41 04 90 87 9c 2f 1a a3 c4 53 c9 70 bd fc 82 b6 a5 b8 15 d4 66 1e 45 2b 6d 01 4a ef 06 1f b1 ad 0a 52 7c e0 4e 3d c5 5f 7b 38 9d 52 ab 5a a4 06 33 8a f1 25 44 ee 5f ec ed 41 e2 10 2c 1a a7 c5 27 b5 39 63 d4 74 2a 37 ee b0 47 61 5f 2e 1f d2 fb 0a cf 9e 64 ba e3 f0 e1 07 78 12 0e 57 93 71 c2 a1 52 b6 66 28 6c c7 57 c8 b0 20 17 7b 9f c8 1a e0 00 66 02 2f bf 71 40 05 e0 df b8 54 3d b2 49 85 33 53 31 5f ed 48 9a 72 92 3e e7 fb b8 35 53 a6 25 37 91 fb 97 ae db e9 58 0b 32 25
Mar 29 21:59:25 taiga kernel: 6 8e 98 62 d2 ed 5e 91 a6 f4 f0 78 25 de f9 c7 b4 b7 3b 4d 1f 58 99 a8 14 23 a3 73 d2 62 76 11 2e 7d 71 e5 3d 0d 20 b3 bf 16 e5 df 88 07 f0 1f 35 2b 7a 11 31 8a 2c e5 d0 cd 06 56 3d e1 bb c5 1e 2b 58 5a 25 2f 67 9e 39 e8 ae 98 812 9f b9 ad 29 cb e5 2e e8 33 4f e4 68 b8 cd 38 9a 15 4b fd 5c 0a d0 45 d3 33 30 53 92 ae 15 5a 1d 11 60 5b 9e ad e0 9f 44 ec 4d 7e 95 75 10 6d 03 fa ad 6b 0b b5 6a e4 ac 91 a8 2f 40 db bf 06 10 3c 1d 5d 97 28 21 84 e9 66 c7 3e 5c 55 57 80 8b e9 4a 73 34 65 0b 4e 4c 12 b9 c4 04 c0 fc 7d f0 d1 ab d0 99 b4 bd c4 ce d1 51 36 aa 24 fa da ef 7a 99 35 0e 1c 11 37 a 46 ca 8f d6 0b d6 1f da ec e9 8e 49 9d 2 57 7d 6d 9a 1c 36 2 42 b5 27 d6 32 34 ed 1a ea bc 0e d4 4d c6 ea b4 64 0e 77 aa 52 26 37 0b cf 68 3b 07 73 9 d5 2b 6b e0 62 f3 ed 56 53 22 3f 91 d7a 54 e5 d3 e3 e3 1d 57 a2 0d 21 c39d d3e ae 82 64 f6 6f 7b 42 a3 64 3e b6 84 9f f5 bb f8 2d 80 2c 1f d6 63 a4 87 ad 98 8c 7b 20 59 ba 4f d5 b7 59 91 83 9c 45 29 da 7c 54 9a 00e 6b 63 7c ce 66 cc 3a 82 c2 9d 29 4c e 

Após pesquisar muito sobre como suprimir esse tipo de mensagem, encontrei alguns relatos como esse https://bugs.launchpad.net/intellinuxwireless/+bug/190475
onde pode-se ver que não é exatamento um problema de loglevel, e sim alguma coisa no kernel.

 
Verifiquei a configuração do meu kernel e havia uma parte habilitada sobre debug da wireless:

Networking support --->
     Wireless --->
          Select mac80211 debugging features --->
               [ ] Do not inline TX/RX handlers (NEW)
               [ ] Verbose debugging output (NEW)
               [ ] Verbose HT debugging (NEW)
               [ ] Verbose TKIP debugging (NEW)
               [ ] Verbose IBSS debugging (NEW)
               [ ] Verbose powersave mode debugging (NEW)
               [ ] Verbose mesh peer link debugging (NEW)
               [ ] Verbose mesh HWMP routing debugging (NEW)
               [ ] Extra statistics for TX/RX debugging (NEW)

Desabilitei todas e reiniciei o computador e os logs excessivos não apareceram mais mesmo com os dois syslogs executando.

Não é normal as pessoas compilarem o kernel, visto que, o kernel que vem com as distribuições atende a praticamente todas nossas necessidades. Mas caso você queira compilar, muito cuidado com algumas opções. Algumas coisas que são esquecidas podem melhorar o desempenho do sistema. E algumas coisas que são adicionadas sem necessidade podem comprometer o funcionamento.

segunda-feira, 28 de março de 2011

Teclado e Mouse Wireless no Linux

No natal eu comprei um kit de teclado e mouse wireless da Microsoft (Comfort Desktop 5000, se não me engano) para minha irmã. Resolvi testar no meu linux para ver se funcionava.

Segundo a documentação oficial (disponível em http://www.gentoo.org/doc/en/bluetooth-guide.xml), é necessário ativar suporte ao bluetooth no kernel (sim, eu compilo o kernel). Eu instalei o serviço do bluetooth conforme o tutorial, mas depois percebi que não precisava. O teclado e o mouse continuaram funcionando mesmo com ele parado.

Na grande maioria das distribuições tal suporte já vem ativado, por isso basta configurar o X para que reconheça o mouse. Na sessão específica do mouse deve-se trocar o protocolo, ficando Option "Protocol"  "IMPS/2".

Para o teclado não precisou de nenhuma alteração. O único problema é que o teclado do meu notebook é padrão americano, e o teclado wireless é abnt2.

Obs1.: Minha irmã não está usando o kit. Só usou o mouse algumas vezes.
Obs2.: Eu considero o hardware da Microsoft muito bom.

sábado, 26 de março de 2011

Hora do Planeta

A Hora do Planeta é um evento simbólico no qual todos são convidados a mostrar sua preocupação com o aquecimento global. É uma iniciativa da Rede WWF para enfrentar as mudanças climáticas (retirado de http://www.wwf.org.br/informacoes/especiais/horadoplaneta/)

Bom faça sua parte. Apague todas as luzes entre 20:30 e 21:30 hoje.

Qual o efeito na prática? Ano passado, um amigo enviou um e-mail para a CPFL perguntando se havia dados sobre a utilização de energia. Eles enviaram um link onde podia-se ver a variação no consumo de energia durante o dia. Pelo gráfico podia-se ver a diferença dos dias anteriores. A conclusão que chegamos é que não houve diferença no consumo.

Para que serve isso então? O objetivo não é diminuir o consumo de energia, como durante o horário de verão, mas sim, conscientizar as pessoas. Claro que, se nossa preocupação ficar restrita somente a essa hora durante o ano todo não irá resolver nada.

Precisamos pensar em soluções sustentáveis, não só em energia, mas em tudo. Você que mora em um apartamento alugado, já verificou se há vazamento de água na descarga do vaso sanitário??? Para você pode não fazer diferença, pois a conta de água não vem discriminada para seu apartamento, mas todos estão pagando. E não só os moradores de seu condomínio. Hoje as guerras são por petróleo, amanhã serão pela água potável.

Você utiliza lâmpadas incandescentes??? Já pensou em trocá-las por fluorescentes??? Você que tem um monitor antigo de tubo, já pensou em trocar por um de LCD??? Acreditem, isso trás economia de energia. A diferença no mês pode ser pequena, mas se você verificar durante um ano deverá notar.

Eu vou fazer a minha parte, e você???

Gerenciamento de Identidade

Como primeiro post importante, irei comentar sobre uma palestra que assisti hoje.

Ela foi sobre um produto de Gerenciamento de Identidade. Não irei me aprofundar no conceito, mas basicamente, gerenciamento de identidade é "um conjunto de processos e tecnologias voltadas para o tratamento e manipulação de identidades de usuários, desde o nascimento dos dados em sistemas de RH e cadastros de terceiros até as aplicações gerenciadas" (retirado do livro Gerenciamento de Identidades de Alfredo Luiz dos Santos).

Um exemplo: Em uma empresa, existe, além do sistema de RH, um sistema de caixa, onde as vendas são registradas, com um controle de estoque. Quando um funcionário é contratado, ele precisa ser cadastrado nesse sistema também, pois, vamos supor que, a política da empresa defina que somente quem é gerente tem direito de receber mercadorias e adicionar os produtos no estoque. Se um funcionário é promovido a gerente, alguém precisa atualizar o cadastro para que ele tenha tal acesso. Um sistema de Gerenciamento de Identidades irá automatizar essa tarefa. Ao realizar a atualização no sistema de RH, um processo será disparado para atualizar também no sistema de vendas. A primeira vista pode parece algo não tão complicado, mas em empresas maiores, com dezenas ou centenas de sistemas, esse gerenciamento é algo realmente importante.

A palestra foi ministrada por Allan Foster, vice-presidente de tecnologia da empresa ForgeRock, e foi mais voltada para a área de negócios. Allan Foster explicou como surgiu a ForgeRock.

A Sun Microsystem trabalhava no desenvolvimento de três ferramentas, OpenSSO, OpenIDM e OpenDS (Single Sign On, Gerenciamento de Identidade e Serviço de Diretório, respectivamente). O OpenSSO e o OpenDS tiveram o código aberto pela Sun, mas o OpenIDM não, pois, na época que iriam abrir o código, a Oracle comprou a Sun, e impediu a abertura.

Com isso os produtos ficaram praticamente abandonados pela Oracle, e os clientes começaram a procurar por suporte. Aproveitando-se dessa oportunidade de negócio, nasce a ForgeRock.
Hoje eles desenvolvem e prestam suporte para os três produtos, tornando-se uma alternativa a outros produtos comerciais.

Para quem quiser conhecer melhor, o site é www.forgerock.com. Na área Consulting Partners temos os parceiros, inclusive no Brasil.

No wiki da parte Community já estão disponíveis alguns tutoriais de instalação e configuração (não tentei instalar nenhum ainda, mas assim que eu tentar postarei como foi minha experiência).

sexta-feira, 25 de março de 2011

Apresentação

Meu nome é Ruy Minoru Ito Takata. Tenho alguns anos de experiência em Redes de Computadores e Software Livre.

Para as pessoas que não são da área, o nome "Diário Pinguim" surgiu pelo fato de eu preferir utilizar o sistema operacional Linux ao invés do Microsft Windows. O símbolo do Linux é um pinguim.

Fiz faculdade de Tecnologia em Processamento de Dados na Fatec Ourinhos, e Pós graduação em Administração de Redes Linux pela Universidade Federal de Lavras.

Resolvi compartilhar um pouco do que eu aprendi nesses anos todos.
Não sei se conseguirei fazer realmente um diário. Provavelmente não terei algo interessante para postar todos os dias, mas vou me esforçar. Talvez poste algumas que não são de informática. Afinal, a vida não é só informática.

"Deve ser só mais um blog sobre informática" alguns irão pensar. Pode ser que sim. Administradores experientes podem achar que é só mais uma página inútil. Isso é algo interessante na vida, sempre tem alguém que sabe mais que nós mesmos. Sempre podemos aprender um pouco mais.

Uma coisa que tentarei fazer nos posts técnicos é utilizar uma escrita mais formal. Tentarei, pois escrever não é meu forte.

Resolvi fazer dessa maneira pois durante os anos de faculdade e pós graduação sempre encontrei os mais diversos tutoriais, mas poucos utilizando uma linguagem formal.

Não que isso seja ruim, mas é que quando estamos lendo para escrever trabalhos de graduação, acaba sendo difícil escrever algo mais formal quando só lemos textos mais informais.

Muitas vezes procuramos somente uma melhor técnica, e não estamos preocupados com o texto adicional escrito em volta das linhas de comando.
Acho que escrever um texto de uma maneira mais formal é importante. Como profissional de informática, acho que, se queremos ser respeitados, temos que mostrar que somos bons profissionais. E eu acho que bons profissionais devem escrever bem.

Bom, enfim. Essa é minha opnião. Espero que meu blog ajude algumas pessoas. Espero que as informações sejam úteis.

Não sei tudo. Por isso, se você estiver lendo, e quiser contribuir, por favor, contribua. Se tiver alguma informação errada, comentem. Se você tentou fazer algo que leu aqui, e não conseguiu, diga qual foi sua dificuldade. Toda informação é sempre bem vinda.