sábado, 11 de fevereiro de 2012

Campus Party Brasil 2012

 Nesse momento escrevo diretamente do Campus Party Brasil 2012. Agora finalmente posso dizer com orgulho que sou um nerd. Após uma semana ajudando no Install Fest, peguei a sexta-feira a noite para aproveitar um pouco.

Resumo da semana: Várias pessoas nos procuraram para instalar Linux em seus notebooks. Poucas disseram que podia tirar o Windows. A maioria pediu para instalar Ubuntu.

Infelizmente muito hardware ainda é totalmente feito para Windows. Os fabricantes ainda não se preocupam com os usuários de Linux. Por isso algumas placas de rede wireless não funcionaram. Duas Broadcom, e dois notebooks da Itautec com placas diferentes, mas com um maldito botão de ativar a placa que o Linux não entende para que serve. Algumas placas que eu nunca tinha ouvido falar. Mas a grande maioria transcorreu sem nenhum problema.

Dois rapazes que estavam usando Windows e se sentaram na mesma bancada onde estávamos fazendo o Install Fest resistiram bravamente até a tarde de sexta-feira, mas acabaram convencidos a instalar Linux após verem o pesssoal de Software Livre se divertindo muito jogando um jogo para Linux. Depois de serem atormentados a semana inteira, finalmente deixaram-nos Linux em seus computadores.

Foi hilário o modo como uma mocinha ficou impressiona pelo fato de ser possível instalar o Moodle com um simples apt-get no Ubuntu. Ela disse que está tentando instalar a algumas semanas, mas não consegue instalar mesmo seguindo os diversos tutoriais disponíveis na Internet.

Tirando o Install Fest. Teve muitas palestras que pareciam interessantes, mas não vi nenhuma. A noite as pessoas fazem várias bagunças. Jon "Maddog" Hall muito simpático de pijama, tirando foto com todo mundo. O pessoal entrando em toda e qualquer fila, sem nem mesmo saber para que ela servia.

Enfim, foi uma grande experiência tanto profissional como pessoal. Tive a oportunidade de configurar Linux em vários notebooks diferentes. Conheci várias pessoas que gostam muito de Software Livre.
Espero que ano que vem eu seja chamado novamente para ajudar no Install Fest, e agradeço muito a amiga Gabriela pelo convite esse ano.

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.