Como desactivar o suporte do protocolo ipv6?

No Debian fiz assim:

#1 – Editar o ficheiro aliases

$sudo gedit /etc/modprobe.d/aliases

#2 – Procurar a linha que contém …

alias net-pf-10 ipv6

… e substituir por …

alias net-pf-10 off
alias ipv6 off

#3 Reiniciar a máquina

E pronto … acabou-se aquela espera irritante causada pela tentativa de resolução de endereços ipv6 … pelo menos até este se tornar “obrigatório”  lá para 2010!

Feliz Natal !

feliznatal20081

Publicado em debian. Leave a Comment »

Como tornar um “user” num “sudoer”

Um sudoer é um utilizador ao qual foram atribuídos privilégios de administração equivalentes aos de root.

Este tipo de utilizador pode executar comandos como $sudo apt-get install gimp utilizando apenas a sua própria palavra-passe.

As vantagens da utilização do sudo em vez do su são essencialmente ao nível da segurança, questão que se pode tornar crítica para utilizadores pouco experientes.

Está tudo muito bem resumido aqui, mas vou apresentar os passos principais em Português.

#1 Instalar o sudo

$ su -c “apt-get install sudo”

#2 Conceder os privilégios de sudoer ao user torrao

a) Editar o ficheiro /etc/sudoers

$ su -c “visudo”

b) Adicionar o nosso utilizador ao ficheiro

Esta operação consiste em adicionar a linha de cor vermelha ao nosso ficheiro

# User privilege specification
root    ALL=(ALL) ALL
torrao    ALL=(ALL) ALL

c) Gravar as alterações

#3 Testar

Agora tentem abrir um ficheiro a que normalmente apenas o administrador (root) teria acesso

Por exemplo …

$ gedit /boot/grub/menu.lst

… e de seguida …

$ sudo gedit /boot/grub/menu.lst

Confesso que andava a abusar do su, mas agora vou aderir ao sudo :)

Nota: Os utilizadores do Ubuntu já nascem a utilizar o sudo, pela simples razão que o acesso com a  conta de root está desactivada por defeito.

Publicado em debian. Leave a Comment »

Lançar os dados – Abordagem em C++ segundo o paradigma ADT

dice1

Estava para aqui a tentar elaborar mais um exemplo simples de utilização do paradigma ADT quando de repente me lembrei de um objecto simpático.

Pois é, um simples dado!

Que operações se podem realizar com este objecto?

  • Lançar.
  • Ver o número que saiu.

Vou então definir uma classe muito simples que permita utilizar estes objectos e de seguida escrever um programa que a utilize.

A classe:

Dice.h

#include <cstdlib>
#ifndef DICE_H
#define DICE_H
class Dice{
public:
	Dice(){
		faceup = ThrowDice();
	}
	int getFace(){
		return faceup;
	}
	int ThrowDice(){
		faceup = rand()%6+1;
		return faceup;
	}
private:
	int faceup;
};
#endif

O programa (que simula o lançamento de dois dados, apresentando o valor obtido):

game.cpp

#include <iostream>
#include <cstdlib>
#include <ctime>
#include "Dice.h"
using namespace std;
int main(){
	// seed the Random Number Generator
	srand(time(0));

	// create two dices
	Dice A, B;

	// Throw the dices
	A.ThrowDice();
	B.ThrowDice();

	// Show the number in each dice
	cout << "The first dice shows a " << A.getFace() << endl;
	cout << "The second dice shows a " << B.getFace() << endl;
}

Observações

  • Escrevi este código em Inglês porque a mistura de línguas começa a atrapalhar :);
  • A classe Dice possui um contrutor que garante que, mal o dado é criado, este receba um valor aleatório inicial;
  • Este exemplo possui um clara limitação, que resulta do facto de a classe estar dependente da “seed of the RNG”, que se traduz por algo do tipo “iniciar o gerador de números aleatórios”;
  • A função rand() é utilizada para obter um número inteiro compreendido entre 1 e 6;

E pronto, aqui fica mais um exemplo muito simplista para quem andar a tentar ententer o paradigma ADT ou a preparar-se para a programação orientada a objectos.

Nota: Ainda vou arranjar maneira se libertar o programa principal das preocupações com o RNG. Aceitam-se sugestões :)