N-tier em .NET 3.5, Spaanjaars’ Style

O Imar Spaanjaars publicou o primeiro de uma nova série de artigos dedicado à construção de aplicações web N-Tier, em .NET. Os artigos são extensões ao primeiro conjunto do autor, e inclui a adição de um framework de validação, e ajustos na organização das classes. O primeiro artigo da série é o N-Layered Web Applications with ASP.NET 3.5 Part 1: General Introduction

O primeiro conjunto de artigos do autor foram uma ajuda grande na abordagem à organização dos conceitos e espero ver, brevemente, a abordagem à validação dos campos.

CloneZilla

No HowToForge surgiu um novo tutorial de como clonar discos (uma óptima forma de cópia e backup estrutural) usando o produto open source CloneZilla. É uma ferramenta óptima para, por exemplo, logo após um reinstall, efectuar uma cópia do disco para facilmente recomeçar. Suporta o envio da imagem para discos externos ou discos partilhados.

Tb a ver: Hiren’s Boot CD e o Ultimate Boot CD que efectuam o mesmo tipo de operação e incluem muitas ferramentas.

Construir o servidor

Já iniciei as operações de construção da caixa do meu servidor. É essencialmente acrílico cinza transparente e partes salvas de uma caixa de pc que eu tinha, especialmente o suporte traseiro da motherboard e fonte, e os suportes de CD e Discos, a incluir internamente. Optei pela caixa com medidas costumizadas, devido a necessidades concretas que eu tinha em termos de arrumação. Erá conveniente o formato horizontal, para encaixar por debaiso de umas gavetas da secretária, e espero incluir o sistema de RAID e rede internamente na caixa.

O que descubri para esta tarefa, foi o Araldite. O nome não me era estranho , mas o material sim. é um genero de cola de contacto DIY – duas botijas/seringas, com materiasi diferentes que necessitam de ser misturadas e aplicadas. Fica com uma viscosidade semelhante à cola de contacto, mas sem o cheiro. A ver se resulta!

Dictionary<,>

O tipo Dictionary do framework .NET é uma classe muito útil para armazenar listas de objects que queremos que sejam identificáveis por uma chave. O tipo pertence ao namespace System.Collections.Generic da framework e partilha alguns métodos das listas genéricas.

O tipo Dictionary, para cada item, contem dois valores – TKey, que é uma chave e que pode ser de diversos tipos (string, int, ..) e o TValue que é o valor para para a chave. Cada chave tem de ser único, naturalmente para que o registo possa ser referenciado correctamente. A chave não pode ser nulo, mas o valor pode. O Dictionary implementa ainda uma série de interfaces, nomeadamente o IDictionary, ICollection e IEnumerable, da qual podemos aproveitar as potencialidades.

Tive de utilizar esta class hoje, no desenvolvimento de uma class, e a verdade é que simplficou muito o trabalho que estava a fazer. De uma forma simplificada, estava a tentar extrair palavras de um texto, e que estavam entre um conjunto de palavras chave. Tratava-se de dados pessoais em currículos, e onde eu queria extrair, por exemplo, o nome, a data de nascimento, a nacionalidade, o sexo, etc… Então após a extracção do conjunto de palavras, armazenei-os num Dictionary – a chave era a string da palavra chave que precedia o texto que procurava, e o valor era o texto que procurava.

Depois de instanciar o Dictionary:

Dictionary<string, string> dictionary1 = new Dictionary<string, string>();
</pre>

podemos adicionar pares chave / valor:

<pre lang="csharp">
dictionary1.Add("chave1","valor da chave1");
dictionary1.Add("maçãs","a chave pode ser o nome de um item, e o valor a descrição, por exemplo");
dictionary1.Add("além","disso a chave pode conter acentos e outros tipos de carácteres");
</pre>

O Dictionary, como as listas genéricas permitem ordenação:

<pre lang="csharp">
dictionary1.Sort();
</pre>

onde podemos usar comparadores. Mas mais importante, podemos obter um valor através da chave como também usar métodos da interface IDictionary, como o "Contains" ou "TryGetValue"

<pre lang="csharp">
string valor1 = dictionary1["além"];

if(dictionary1.Contains("chave1")) 
	Console.WriteLine("chave1 existe no dicionário");

Dim value As String = ""
If openWith.TryGetValue("maçãs", out value) Then
        Console.WriteLine("For key = \"tif\", value = {0}.", value)

Com estas características, quando é necessário um par chave-valor, o Dictionary é uma óptima escolha, como também é exemplo da potencialidade do framework .NET.

Instalação de Ubuntu Server 8.10

Dando continuidade ao post “Construir um ubuntu ( ou uma distribuição própria, por assim dizer..)” que escrevi há dias, decidi escrever aqui um passo-a-passo de como efectuar uma possível configuração, mínima, e com ambiente gráfico.

Então para isso vou seguir com o Ubuntu-server, que me interessa (e instala alguns pacotes na qual tenho interesse, como o servidor LAMP), e vou adicionar um ambiente gráfico e um conjunto de aplicações que considero necessário para o meu uso. Vou efectuar esta instalação numa máquina virtual do VirtualBox, que prefiro a outras aplicações de virtualização como o VMWare.

Para começar, criei uma nova máquina virtual para Ubuntu com 756MB de RAM e um novo disco de 8GB, dinamicamente expansível. Antes de iniciar, é util efectuar uma operação que resulta das características do novo kernel. Porque o kernel 2.6 do linux tem algumas dependências do processador, no Virtualbox, é necessário activar o suporte à virtualização e o PAE (extensão de endereço físico). Para tal, depois de criar a maquina virtual,com o botão direito selecciona Definições -> Geral -> Avançado e seleccione “Activar VT-x / AMD-V” e “Activar PAE/NX”, como mostra a figura:

Se não o activar, ao reiniciar a máquina após a instalação, irá aparecer uma mensagem de panico do kernal:

this kernel requires the following features not present on this CPU
pae
Unable to boot. Please use a kernal apropriate for your CPU

Activando o PAE, esta situação desaparece, e naturalmente o hardware usado tem de suportar a função. Esta solução esta descrita no site Tombuntu.

A máquina está pronta para instalar o ubuntu-server, faltanso apenas carregar (montar) o ISO, para a instalação. Este pode ser efectuado novamente nas definições da máquina virtual, em CD/DVD ROM, escolhendo uma imagem ISO do server (ou então o alternate CD que tb tem imensas opções de instalação, sem instalar o sistema ubuntu completo com os programas).

A instalação é bastante “directa”, bastando seguir os passos descritos. E até é um processo bastante rápido. Basta seguir os passos (é quase sempre “next”).  Ao nível do disco e partições, escolhi “guiado – usar disco inteiro e … LVM”, mas podes utilizar o que é mais conveniente para o teu teste. Neste caso não tinha necessidade de qualquer outro tipo de alteração.

No diálogo de selecção de software, escolhi adicionar o servidor LAMP, Sevridor OpenSSH, e host de Maquinas virtuais. A esolha vem de algumas situações que quero testar. Ao fim de cerca de 10 minutos, o SO está instalado e pronto a utilizar (quase). Resta desmontar o ISO e reiniciar a VM.

Naturalmente, ao iniciar, não teremos nenhum ambiente gráfico. O Ubuntu Server é essencialmente “shell-based” e dependente da linha de comandos. Vamos então adicionar o ambiente gráfico para termos um ambiente mais “comun” e agradável.

No post “Construir um ubuntu ( ou uma distribuição própria, por assim dizer..)” mostrei como adicionar o XFCE, como gestor de janelas. Vou continuar a usar o XFCE para este exemplo. Já testei o GNOME, mas foram demasiados elementos a serem introduzidos para o meu gosto, e o XFCE é levezinho e rápido, o que é optimo.

Então no terminal deve ser exectutado o seguinte comando para actualizar a lista de repositórios da instalação:

sudo apt-get update

Agora segue a instalação de alguns pacotes necessários e uteis:

  • xorg – o sistema gráfico para o linux e que permite ter um ambiente gráfico. Inclui bibliotecas, fonts, suporte para imagens,  e afins do x-server; (Down: 32.1 MB / Espaço Ocupado: 93MB)
  • xfce4 – o gestor de janelas do XFCE (D: 44MB / EO: 177MB)
  • synaptic – gestor de pacotes e de instalação de aplicações (D: 13.5MB / EO: 81.5MB)
  • firefox – browser, quase obrigatório incluir, até para poder pesquisar qualquer situação. A instalação inclui o ubufoz que permite adicionar extensões através do synaptics. (D: 23MB / EO: 84,5MB)
  • ntfs-config – o ubunto tem suporte para o sistema de ficheiros NTFS integrado (através do ntfs-3g) mas para poder escrever correctamente para lá, esta aplicação permite activar a opção de escrita. (D: 45kB / EO: 442kB)
  • thunar-volman – thunar é o explorador de ficheiros do XFCE. O thunar-volman permite uma melhor gestão e integração de discos amovíveis, como pens e afins. Importante para a escrita em NTFS. (D: 73,1kB / EO: 471kB)
  • virt-manager – gestor gráfico de maquinas virtuais baseado no KVM, que foi instalado no server. (D: 1.5MB / EO: 7.3MB)

Para isto lanço o comando:

sudo apt-get install xorg xfce4 synaptic firefox ntfs-config thunar-volman virt-manager

ou instalar cada pacote individualmente, de pretender algum controlo. No mínimo é conveniente ter o xorg, xfce4 e o synaptic, permitindo instalar o resto através do synaptic.

Instalado, resta iniciar o ambiente grafico escrevendo o comando

startx.

Executando a aplicação gráfica de adicionar e remover programas (o menu surge clicando com o botão direito do rato no desktop, e a aplicação está no menu “sistema”). podemos adicionar mais algumas aplicações, nomeadamente:

  • disk analyser – aplicação gráfica com informação sobre o disco e espaço ocupado, com base no Baobab e algumas bibliotecas do Gnome
  • gedit – bloco de notas do GNOME, que estou habituado a usar.
  • monitor de sistemamonitor do sistema, CPU e memória, semelhante ao gestor de tarefas do Windows.
  • 7zip – pacote para ver e abrir ficheiros compactados, também existente para o Windows. (a alternativa gratuita ao WinZip e WinRar).

Uma analise efectuada executando o analisador de disco (Menu -> Accessorios -> Analisador de Utilização do disco), podemos ver o estado da instalação do disco:

São utilizados cerca de 1.4GB do disco, onde cerca de 450MB são programas novos instalados, e 188MB são ficheiros na cache do programa apt (/var/cache/apt), que podem ser removidos se desejados.

Num próximo post, irei referir a configuração do ambiente gráfico, do aspecto, menus e afins. O XFCE é efectivamente interessante e eficiente.