domingo, 6 de outubro de 2013

Capitulo 2

Applet HTML Page


2.1 - Parametric equations


2.2 - Graphical 2D primitives


2.3 - Shape classes


2.5 - General path


2.6 - Constructive area geometry


Computação Gráfica 2013/2014

terça-feira, 16 de abril de 2013

WiringPi, uma API para o GPIO



O GPIO serve para podermos programar a interação entre periféricos como luzes, servos, sonares. Mas para o programar precisamos de uma API.

A API que vamos utilizar é a 'wiringPi' por ter mais e melhor informação que a 'bcm2835'.

Vamos instalar a API e fazer um pequeno programa em C.

Pode instalar a API de muitas maneiras alem da que vamos mostrar. Para a instalação precisamos de ter o nosso repositório actualizado, de modo a não haver erros, e ter o 'git' com os seguintes comandos:
$sudo apt-get update
$sudo apt-get upgrade
$sudo apt-get git 

Agora com o git vamos buscar a API:
$sudo git clone git://git.dragon.net/wiringPi

E finalmente instalamos:
$cd /home/pi/wiringPi
$sudo ./build 

E já temos a API instalada. Convem ter em mente que os ficheiros de include vão estar em /usr/local/include e as bibliotecas em /usr/local/lib.

Vamos passar ao código e fazer um pequeno programa para ligar e desligar um Led. Para este exemplo utilizei uma resistência de 220 ohm.

Primeiro criamos o ficheiro.
$sudo nano raspberrying.c

----------------------------------------------------------------------------------------------------------------------
#include<stdio.h>
#include<wiringPi.h>                                                               //API wiringPi

int main(){

char comando;

if(wiringPiSetup == -1)                                                             //Verificação do GPIO
    return 1;

pinMode(7,Output);                                                                   //Modo do pino
while(1){
    printf("'l' para ligar e 'd' para desligar");
    scanf("%c",&comando);

    if(comando == 'd'){
        digitalWrite(7,LOW);                                                         //Escrita
    else if (comando =='l')
        digitalWrite(7,HIGH);

    }

return 0;
}

----------------------------------------------------------------------------------------------------------------------


As funções utilizadas são as seguintes:

  • int wiringPiSetup(void)
  • void pinMode(int pin, int mode)
  • void digitalWrite(int pin, int value)
Para  determinar o numero do pino a utilizar na API podemos ver no comando:
$Sudo gpio readall


Agora só falta compilar:
$sudo gcc -o NOME_FICHEIRO_FINAL NOME_FICHEIRO.c -l wiringPi
E correr:
$sudo ./NOME_FICHEIRO_FINAL

Berry boot

Como já vimos, o processo normal da instalação do S.O no cartão não é de grande dificuldade. No entanto, existe outro método ainda mais fácil e que permite fazer o boot de vários sistemas.

Esse método é através do software berry boot. Basta descarregar o ficheiro, extrair, e copia-lo para ao cartão SD formatado com sistema de ficheiros FAT.

Depois disso é só ligar o raspi e vai aparecer logo o menu de 'welcome' para escolher definições básicas como se estamos a ligar por wireless ou Ethernet, configurações do teclado entre outras.

A proxima janela, serve para formatar-mos no sistema de ficheiros reconhecido pelo linux a drive que vamos utilizar com os sistemas operativos que em principio será o cartão de memória.
Depois de configurado aparece logo um menu para adicionar um S.O ao cartão. O que ele vai fazer mal escolhamos o sistema é o download e instalação do mesmo. 


Depois do primeiro sistema instalado, podemos adicionar outro na nossa lista através do botão 'Add OS'


Da próxima vez que reiniciarmos o sistema  a primeira janela que vai aparecer é a perguntar qual o S.O que queremos iniciar. 


sábado, 13 de abril de 2013

Instalar servidor de torrents

Num artigo anterior falei de como montar um disco USB formatado em NTFS no rasp pi. Agora chegou a altura de interagir com ele.


Vamos montar um servidor de torrents. Este servidor vai-nos permitir aceder dentro da nossa rede local e posteriormente de qualquer outra rede a uma interface web para adicionar, remover e ver o estado dos nossos torrents.

Antes de tudo, e como já vamos sendo habituados temos de instalar o aplicativo que queremos.

$ sudo apt-get install transmission transmission-daemon transmission-cli
Depois de instalado, tudo o que temos de fazer é indicar ao ficheiro settings.json coisas simples como directorio de download, password, porto etc. 

Atenção que para editar as definiçoes do serviço temos de o parar com:

$ sudo service transmission-daemon stop
Agora abrimos o ficheiro de configurações 
$ sudo nano /etc/transmission-daemon/settings.json
Neste ponto vamos ter em atenção os seguintes parametros:


  •  download-dir - Aqui vamos especificar o caminho para a nossa pasta de downloads
  •  rpc-authentication-required - Neste exemplo eu meti este parametro a "false" mas quem quiser autenticar as ligações mete "true"
  • rpc-password - Quem tem a autenticação como "true" vai aqui definir uma palavra passe
  • rpc-port - Aqui definimos o porto da nossa ligação com o servidor de torrents
  • rpc-whitelist - Neste exemplo vou utilizar o servidor na rede local, portanto o valor que meto é "192.168.1.*", para quem quiser utilizar fora da rede, deverá ter de meter o valor "*.*.*.*", não testei este ultimo parametro, mas uma vez que o '*' quer dizer qualquer coisa, é o que faz mais sentido.



Agora saimos do editor e salvamos com Ctrl + X seguido de Y e Enter.


Neste ponto só nos falta dar privilegios para o nosso utilizador local da maquina aceder e poder escrever na pasta que definimos para download. No meu caso com o seguinte comando dei as permissões totais de escrita, leitura e outros.
$ chmod 777 /media/ftp
Neste ponto já estamos prontos. Vamos então iniciar o serviço com:
$ sudo service transmission-daemon start 

Agora vamos ao browser e metemos como URL o endereço:

  • Ip do servidor:porto de ligação. Exemplo : '192.168.1.69:9091'

E o resultado é:

Para quem quer autenticação no servidor, antes aparece uma janela a pedir as credencias, e é só meter as que configuramos no ficheiro settings.json.


 

quarta-feira, 10 de abril de 2013

Keyboard layout

Muito utilizadores têm tido complicações para meter o teclado a funcionar bem, apesar de bem configurado no 'raspi-config'.



Quando temos um teclado da microsoft, com uma referencia conhecida, em principio não haverá problema em escolher o layout apropriado. O problema vem quando temos como eu um teclado  (mitsai no meu caso) que nos obriga a escolher um layout genérico.

Após ter configurado o meu teclado, notei que na shell antes do LXDE arrancar, ele funciona bem. Mas em ambiente gráfico, quando vou escrever tem as teclas todas trocadas.

A solução é criar um script de arranque .xsession na directoria /home.  Introduza numa linha de comandos o seguinte comando:
$ nano /home/pi/.xsessionrc  // Nota, se não for tiver privilégios de root, utilize 'sudo nano...'

Dentro do editor de texto vamos introduzir o seguinte comando:
$ setxkbmap pt 
Faça 'CTRL + X', prima 'Y' e 'enter' para salvar no destino indicado.

Agora é só reiniciar o sistema e voilá. Temos o nosso teclado configurado em português.

domingo, 7 de abril de 2013

Montar drive usb em ntfs

O sistema raspberry torna a vida pouco mais complicada quando queremos montar um sistema de ficheiros NTFS. Poderíamos perfeitamente faze-lo com o antiguinho FAT, mas uma vez que vou configurar no raspberry um servidor FTP, podia dizer adeus aos ficheiros superiores a 4 gb.

Quando iniciamos o sistema, a drive é reconhecida, mas com permissões de leitura apenas. Isto porque o fsck utilizado para verificar a consistência do sistema de ficheiros não reconhece o sistema NTFS

O primeiro passo a fazer é dar a conhecer ao sistema o tipo de sistema de ficheiros através do comando.
$ apt-get install ntfsprogs

Vamos primeiro ver onde está a nossa drive localizada com o disco desligado. Depois de digitar o comando ligue o disco.
$ tail -f /var/log/messages



Para parar o comando faça Ctrl + Z. Podemos agora montar o disco. Para isso vamos criar uma pasta, onde vamos aceder aos ficheiros da drive e seguidamente monta-la.
$ mkdir /media/ftp
$ mount -t ntfs -o rw /dev/sda1 /media/ftp ( -t, tipo de ficheiros e -o as permissões)
Para termos a certeza que os comandos tiveram efeito podemos entrar no directório /ftp e ver o que tem lá dentro.
$ cd /media/ftp
$ ls  ftp/ 
Ver no ficheiro mtab se foi adicionada alguma entrada,
$ cat /etc/mtab


Ou ver com o fdisk os sistema montados.
$ fdisk -l








Aceder através de vnc



Neste tutorial vou mostrar os passos para aceder via VNC ao raspberry.
Para ser bem sucedido precisamos de actualizar a lista de repositórios através do comando:
$ sudo apt-get upgrade
$ sudo apt-get update
Seguidamente vamos instalar o servidor VNC no sistema

$ sudo apt-get install -y tightvncserver

Depois de alguns minutos é instalado o servidor VNC. Neste momento precisamos de definir qual o porto a utilizar para a ligação. Neste exemplo utilizo o porto 22.

$ vncserver :22

Nesta altura temos também de definir uma password para as ligações.

Em principio o porto ficará agora em escuta, mas podemos através do netstat ver o estado dos portos
$netstat -tlpn 

No caso de termos a instalação feita dentro de uma rede convencional de casa, podemos vir a ter problemas no sentido em que os routers que o ISP fornece vêm pré configurados com um servidor DHCP a correr. O problema que esta questão pode trazer, é que o IP pode mudar. Convém portanto atribuir um IP estático de LAN. Tipicamente esse IP estará na gama 192.168.XX.XX. 

Para ver o seu ip no sistema debian utilize o comando
$ sudo ifconfig 

A partir deste momento temos o servidor VNC configurado. Falta-nos configurar um cliente para acesso remoto  Para isso fazemos o download do VNC .

Depois de feito o download e de o termos instalado, abrimos o executável e inserimos no campo 'vnc server' o ip configurado no sistema raspberry e o porto do servidor VNC que configuramos, assim como a encriptação que queremos.

Agora vai pedir uma password que foi configurada no servidor. Assim que dermos a password ficamos ligados por VNC.

Para utilizadores que queiram aceder através de uma outra rede, têm de fazer port forwarding.