Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Tópicos - BrunoPT

Páginas: [1] 2 3 4
1
Projetos da Comunidade / SimpleRSS (Leitor de RSS para o terminal)
« Online: 17 de Julho de 2015, 19:06 »
Estou actualmente a desenvolver um leitor de RSS para terminal.


O projecto ainda está no ínicio por isso é provavél que tenha vários bugs.
Nas proximas versões vão ser adicionadas mais funcionalidades como organização de Feeds em categorias, guardar feeds nos favoritos, etc.

Aqui está a página do projecto:
Código: [Selecionar]
https://github.com/strang3quark/simpleRSS
Para iniciar o programa basta executar:
Código: [Selecionar]
python3 main.py

2
Screenshots / i3
« Online: 13 de Janeiro de 2015, 23:27 »
Aqui vão uns screenshots da minha máquina.


             


Dotfiles
Código: [Selecionar]
https://github.com/Bruno93PT/dotfiles

3
Screenshots / Mate
« Online: 30 de Abril de 2014, 17:23 »
Já tinha saudades do Gnome 2, por isso instalei o MATE :)


4
Screenshots / XFCE Ambiance
« Online: 07 de Agosto de 2013, 22:04 »
Boas, aqui estão alguns screens do meu pc portátil.

Screens (clique para ampliar):
      

Sistema: Xubuntu 12.04
Ambiente Gráfico: Xfce 4.10
Tema Gestor de Janelas: ambiance xfce lxde
Tema GTK: ambiance crunchy orange

5
Café com Ubuntu / WikiTux (Wiki em Português de Linux)
« Online: 08 de Julho de 2013, 08:34 »
Boas pessoal, tou a criar uma Wiki, quem quiser contribuir.
Código: [Selecionar]
http://wikitux.tk/
O objectivo da wiki é fazer a maior enciclopédia de Linux em língua portuguesa. Toda a ajuda é bem vinda.
 :)

7
Críticas e Sugestões / "Visitante, você foi banido deste fórum!"
« Online: 03 de Abril de 2013, 12:39 »
Boas, sempre que tento aceder ao forum através do computador de casa recebo a mensagem:
"Visitante, você foi banido deste fórum!"

Se fizer login recebo a mensagem:
"BrunoPT, você foi banido deste fórum!"

Isto acontece tanto no Firefox como no Chromium, no entanto se aceder no trabalho (como agora) funciona tudo bem.
Alguem sabe como resolver? Já limpei cookies...

8
Screenshots / Kubuntu 12.10 (KDE 4.10)
« Online: 17 de Fevereiro de 2013, 22:13 »
Parece que ao contrario do Gnome o KDE está a evoluir cada vez mais :)

O meu kubuntu esta assim:
http://dl.dropbox.com/u/22461683/kb2.jpeg
http://dl.dropbox.com/u/22461683/kb3.jpeg
http://dl.dropbox.com/u/22461683/kb4.jpeg

9
Projetos da Comunidade / [DIY] Controlo multimedia com Arduino
« Online: 22 de Dezembro de 2012, 10:58 »
Boas, eu sou um iniciante em arduino e quero partilhar com o resto da comunidade, é um controlador multimedia.
Este controlador mostra o artista e a musica que está a ouvir e tem botoes para avançar para a musica seguinte, voltar á musica anterior, play/pausa, stop e ligar/desligar backlight.

O código foi feito á pressa e pode ser melhorado, mas funciona bem.

Resultado Final:
http://img7.imageshack.us/img7/5865/img20121222124215.jpg

Material necessário:
LCD Keypad Shield
Arduino (Usei o Duemilanove)
PC Linux com Rhythmbox

Código em Python (parte no pc):
Código: [Selecionar]
#! /usr/bin/env python

import os
import serial
from time import sleep

PORTA_SERIE = "/dev/ttyUSB3" #PORTA SERIE
MUSIC_PROG = "rhythmbox-client" #NOME DO PROGRAMA
PROXIMA = "next" #COMANDO PARA PROXIMA
ANTERIOR = "previous" #COMANDO PARA ANTERIOR
REPRODUZIRPAUSA = "play-pause" #COMANDO PLAY/PAUSE
class mainprogram():
    def __init__(self):
        
        try:
            ser = serial.Serial(PORTA_SERIE, 9600, timeout=1)
        except Exception as e:
            print e
        
        ser.write("1Bem Vindo"+chr(10)+chr(13))
        ser.write("2LCD = OK "+chr(10)+chr(13))
        lastsong = ""
        lastartist = ""
        #Procurar por comandos
        try:
            while True:
                comando = ser.readline()
                while comando[-1:] == chr(13) or comando[-1:] == chr(10):
                    comando = comando[:-1]
                #MUSICA
                if comando == "0": #STOP
                    self.execute(MUSIC_PROG, REPRODUZIRPAUSA)
                    self.execute(MUSIC_PROG, ANTERIOR)
                    ser.write("ACK" + chr(13) + chr(10))
                elif comando == "1": #REPRODUZIR / PAUSA
                    self.execute(MUSIC_PROG, REPRODUZIRPAUSA)
                    ser.write("ACK" + chr(13) + chr(10))
                elif comando == "2": #ANTERIOR
                    self.execute(MUSIC_PROG, ANTERIOR)
                    ser.write("ACK" + chr(13) + chr(10))
                elif comando == "3": #SEGINTE
                    self.execute(MUSIC_PROG, PROXIMA)
                    ser.write("ACK" + chr(13) + chr(10))
                else:
                    if not comando == "":
                        comando = ""
                    
                    aberto = self.esta_aberto("rhythmbox")
                    if aberto == True:
                        musica = self.nome_musica()
                        ser.write("2"+musica.replace(chr(10), "")+chr(10) + chr(13))
                            
                        artista = self.nome_artista()
                        
                        if artista.replace(chr(10), "") == "":
                            artista = "Prima REPRODUZIR";
                            
                        ser.write("1"+artista.replace(chr(10), "")+chr(10) + chr(13))
                            
                        
                    else:
                        ser.write("1Rep. Musica"+chr(10) + chr(13))
                        ser.write("2Nao iniciado"+chr(10)+chr(13))
                        
                sleep(0.1)
        except Exception as e:
            print e
            print "DISCONECTADO"
            pass

    def esta_aberto(self, prog):
        stdout_handle = os.popen("ps aux", "r")
        text = stdout_handle.read()
        if text.find(prog) > 0:
            return True
        else:
            return False

    def execute(self, program, action = ""):
        try:
            if not action == "":
                stdout_handle = os.popen(program + " --" +action, "r")
            else:
                stdout_handle = os.popen(program, "r")
        except Exception as e:
            print e
            pass
        
    def nome_musica(self):
        stdout_handle = os.popen(MUSIC_PROG + " --print-playing-format=%tt", "r")
        text = stdout_handle.read()
        return text
    
    def nome_artista(self):
        stdout_handle = os.popen(MUSIC_PROG + " --print-playing-format=%ta", "r")
        text = stdout_handle.read()
        return text
    
    def getcurrentsongtime(self):
        stdout_handle = os.popen(MUSIC_PROG + " --print-playing-format=%te/%td", "r")
        text = stdout_handle.read()
        return text
        

    

if __name__ == '__main__':
    mainprogram()

Código para o arduino:
Código: [Selecionar]
#include <LiquidCrystal.h>   // incluir livraria LCD

#define BUTTON_ADC_PIN           A0  // A0 e o ADC dos botoes
#define LCD_BACKLIGHT_PIN        10  // Pin digital de backlight do lcd
#define RIGHT_10BIT_ADC           0  // direita
#define UP_10BIT_ADC            145  // cima
#define DOWN_10BIT_ADC          329  // baixo
#define LEFT_10BIT_ADC          505  // esquerda
#define SELECT_10BIT_ADC        741  // direirta

LiquidCrystal lcd( 8, 9, 4, 5, 6, 7 );   //Pinos para o meu shield 16x2 LCD shield. LCD: ( RS, E, LCD-D4, LCD-D5, LCD-D6, LCD-D7 )

int comando;
int bkstate;


void setup()
{
  Serial.begin(9600);
  pinMode( BUTTON_ADC_PIN, INPUT );         //tornar ADC em input
  digitalWrite( BUTTON_ADC_PIN, LOW );      //desligar pullup no A0
  digitalWrite( LCD_BACKLIGHT_PIN, HIGH );  //ligar backlight
  pinMode( LCD_BACKLIGHT_PIN, OUTPUT );     //backlight e output
  lcd.begin( 16, 2 );                       //O LCD e 16x2
  lcd.setCursor( 0, 0 );
  lcd.print( "A espera de" );
  lcd.setCursor( 0, 1 );
  lcd.print( "conexao" );
  bkstate = 1;
}

void loop()
{
  buttonHandler();
  serialReader();
}

void buttonHandler() //VERIFICADOR DE BOTOES
{
  unsigned int buttonVoltage;
  buttonVoltage = analogRead( BUTTON_ADC_PIN );
  if( buttonVoltage < ( RIGHT_10BIT_ADC + 10 ) )
  {
    //BT DIREITA
    Serial.println(3);
    while ( buttonVoltage < ( RIGHT_10BIT_ADC + 10 ) )
    {
      buttonVoltage = analogRead( BUTTON_ADC_PIN );
      delay(100);
    }
    return;
    return;
  }
  else if(   buttonVoltage >= ( UP_10BIT_ADC - 10 )
    && buttonVoltage <= ( UP_10BIT_ADC + 10 ) )
  {
    //BT CIMA
    Serial.println(1);
    while (buttonVoltage >= ( UP_10BIT_ADC - 10 )
    && buttonVoltage <= ( UP_10BIT_ADC + 10 ) )
    {
      buttonVoltage = analogRead( BUTTON_ADC_PIN );
      delay(100);
    }
    return;
  }
  else if(   buttonVoltage >= ( DOWN_10BIT_ADC - 10 )
    && buttonVoltage <= ( DOWN_10BIT_ADC + 10 ) )
  {
    //BT BAIXO
   Serial.println(0);
   while (buttonVoltage >= ( DOWN_10BIT_ADC - 10 )
    && buttonVoltage <= ( DOWN_10BIT_ADC + 10 ) )
    {
      buttonVoltage = analogRead( BUTTON_ADC_PIN );
      delay(100);
    }
   return;
  }
  else if(   buttonVoltage >= ( LEFT_10BIT_ADC - 10 )
    && buttonVoltage <= ( LEFT_10BIT_ADC + 10 ) )
  {
    //BT ESQUERDA
    Serial.println(2);
    while (buttonVoltage >= ( LEFT_10BIT_ADC - 10 )
    && buttonVoltage <= ( LEFT_10BIT_ADC + 10 ) )
    {
      buttonVoltage = analogRead( BUTTON_ADC_PIN );
      delay(100);
    }
    return;
  }
  else if(   buttonVoltage >= ( SELECT_10BIT_ADC - 10 )
    && buttonVoltage <= ( SELECT_10BIT_ADC + 10 ) )
  {
    //BOTAO DE BACKLIGHT 1 - ESQUERDA
    if (bkstate == 1)
    {
      digitalWrite( LCD_BACKLIGHT_PIN, LOW );
      bkstate=0;
    }
    else
    {
      digitalWrite( LCD_BACKLIGHT_PIN, HIGH );
      bkstate=1;
    }

    while (buttonVoltage >= ( SELECT_10BIT_ADC - 10 )
      && buttonVoltage <= ( SELECT_10BIT_ADC + 10 ) )
    {
      buttonVoltage = analogRead( BUTTON_ADC_PIN );
      delay(100);
    }
  }
}
void serialReader()
{
  boolean end = false;
  int makeSerialStringPosition;
  int inByte;
  char serialReadString[50] = "";
  char received[45] = "";
  const int terminatingChar = 13; //Terminar com CR

  inByte = Serial.read();
  makeSerialStringPosition=0;

  if (inByte > 0 && inByte != terminatingChar)
  { //Se o inByte nao estiver vazio (inByte > 0) e se nao for CR
    delay(100); //Dar tempo

    while (inByte != terminatingChar && Serial.available() > 0)
    { // Ler ate ao fim
      serialReadString[makeSerialStringPosition] = inByte; // guardar o byte no array
      makeSerialStringPosition++; //passar para o proximo valor no array
      //if (inByte > 0) Serial.println(inByte); // Debug
      inByte = Serial.read(); // Ler o proximo byte
    }
    if (inByte == terminatingChar) //SE ACABOU BEM
    {
      if (strncmp(serialReadString, "1", 1) == 0)
      {
        lcd.setCursor(0,0);
        lcd.print("                ");
        lcd.setCursor(0,0);
        for (int i = 1; i < makeSerialStringPosition - 1; i++)
        {
          received[i - 1] = serialReadString[i];
        }

        lcd.print(received);
      }

      if (strncmp(serialReadString, "2", 1) == 0)
      {
        lcd.setCursor(0,1);
        lcd.print("                ");
        lcd.setCursor(0,1);
        for (int i = 1; i < makeSerialStringPosition - 1; i++)
        {
          received[i - 1] = serialReadString[i];
        }

        lcd.print(received);
      }


    }

    serialReadString[makeSerialStringPosition] = 0; //REMOVER CARACTER DE TERMINACAO
  }
}



Nota: Com este codigo podem fazer o que quiserem com o arduino, basta alterarem o codigo do programa em Python.

Podem utilizar o codigo á vontade :)


10
Dicas e Truques / Tutorial - Emular botão do meio em ratos/trackballs
« Online: 04 de Dezembro de 2012, 20:23 »
Boas, recentemente adquiri uma trackball Kensington Orbit c/ Scroll Ring, estava muito satisfeito com ela mas tinha um problema: Não tinha botão do meio. E a solução é... Emular o MiddleClick.

Como fazer:

Primeiro temos que identificar o id do dispositivo apontador:
Código: [Selecionar]
$ xinput list
Deve ter uma resposta semelhante a esta:
Código: [Selecionar]
⎡ Virtual core pointer                    id=2 [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              id=4 [slave  pointer  (2)]
⎜   ↳ Primax Kensington Eagle Trackball        id=8 [slave  pointer  (2)]
⎣ Virtual core keyboard                    id=3 [master keyboard (2)]

No meu caso o que interessa é:
Código: [Selecionar]
Primax Kensington Eagle Trackball        id=8
Depois vejam as propriedades com o comando:
Código: [Selecionar]
$ xinput list-props "Primax Kensington Eagle Trackball"(Ajustem o nome de acordo com o nome do vosso dispositivo)

No output do comando procurem por:
Código: [Selecionar]
Evdev Middle Button Emulation (266): 0
Agora basta fazer o seguinte script e colocar no arranque da sessão:
Código: [Selecionar]
#!/bin/bash
xinput set-prop --type=int --format=8  "Primax Kensington Eagle Trackball" "Evdev Middle Button Emulation" 1
(Ajustem o nome de acordo com o nome do vosso dispositivo)







11
Screenshots / Xubuntu 12.10
« Online: 03 de Dezembro de 2012, 18:01 »
Boas, ja faz um tempo que não posto o meu desktop...

Estou a usar o Xubuntu e estou impressionado com o XFCE, bem melhor que gnome-shell e unity.



O que acham?

Tema: Bluebird
Icones: Elementary XFCE Dark
Dock: Docky



12
Críticas e Sugestões / Tapatalk
« Online: 17 de Julho de 2012, 20:36 »
Boas, eu tenho um telemóvel android e utilizo muito a aplicação Tapatalk para navegar por vários fóruns.
A minha sugestão é que tornem este fórum no Tapatalk para facilitar a navegação a quem tem android

13
Café com Ubuntu / O que falta no Gnu/Linux?
« Online: 09 de Junho de 2012, 14:17 »
Boas pessoal, gostava de saber o que vocês acham que falta no linux! Participem, pode ser programas, funcionalidades... O que quiserem.
Acho que vai dar um dialogo interessante, participem  ;D

14
Programação e Scripts / Connectar QT C++ a MySQL
« Online: 12 de Fevereiro de 2012, 21:19 »
Boas, eu criei um programa em C#.Net que conecta remotamente a uma base de dados MySql e mostra todos os registos na base de dados.
Eu estou a portar o programa para linux e estou a utilizar o QTCreator e a linguagem C++.

Alguem sabe como conectar e ler todos os registos de uma Base de Dados MySQL em QT C++?

15
Screenshots / Gnome-Shell Personalizado
« Online: 26 de Dezembro de 2011, 11:39 »

Linux Mint 12
Tema da Janela: Mac4Lin_GTK_Aqua_V1.0
Cursor: Mac-Lion-Cursors
Icones: Mac-Lion-Icons
Tema GTK: Adwaita Cupertino SL Borderless
Tema Gnome-Shell: Faience (modificado)
Tema Docky: Smoke (padrão)

Páginas: [1] 2 3 4