My New Blog

http://angelosmb.blogspot.com.br/

 

See you there guys!

Posted in Uncategorized | Leave a comment

Samsung Galaxy S II (i9100)

Hi folks!

I’ve got a new phone, the Samsung Galaxy S II, i’ll be using it to develop GNU/linux and Aurora into it. Nice one phone, it has Android, but can be replaced by linux.

Posted in Uncategorized | Leave a comment

USB Reverse Engineering Article

Found this good article that has been an introduction for reverse engineering USB devices:

http://www.ladyada.net/learn/diykinect/#introduction

 

Good luck!

Posted in Uncategorized | Leave a comment

Contar caracteres pulando linhas

Hoje quis contar caracteres de uma linha,porem pulando os espaços,usando Qt. Como brasileiro vai pelo modo mais dificil, veja no que deu meu lindo código:

int caractere = 0;
while(!arquivo.atEnd())
 {
  linha = arquivo.readLine();
  c = linha.size();
  for(int a; a < c; a++)
   {
     if(!linha.at(a).isSpace()) caractere++;
   }
  contar = contar + caractere;
 }

Funcionar funciona,mas seria bem mais facil usando um QString::remove ( const QRegExp & rx ) com um QRegExp adequado.

Ou então mais simples ainda:

        contar = linha.remove(QChar(' '), Qt::CaseInsensitive)).size;

Enquanto não aprendi a usar ele(QRegExp) muito bem,vamos na ATCCB..

PS: ATCCB = Adaptação Técnica Com Caracteristicas Brasileiras ( Gambiarra )

Posted in ATCCB | Leave a comment

Contando quantas palavras um arquivo tem – Em Qt

Bom pessoal. Acho que vou começar uma série de tutoriais sobre Qt.

Para esquentar,vamos fazer um grep -c em Qt. Vamos contar em determinado
arquivo quantas palavras tem. Para isso, passo a passo:

1 – Criar o arquivo main.cpp:

#include <QDebug> // Para as mensagens do console ao estilo Qt ;)
#include <QFile> // Tratamento de arquivos

int main (int argc, char *argv[])
{
}

2 – Certificar-se de que o programa foi entrado com o numero
de argumentos desejados:

if(argc < 3)
 {
 qDebug() << "Uso: ./aplicativo ARQUIVO PALAVRA";
 return 1; // Retorna 1: Falha. Retorna 0: Sucesso
 }

3 – Criar uma instancia do QFile e um contador:
O QFile será iniciado com o  PRIMEIRO argumento da linha de comando,
já que o ZERO é o nome do programa:

QFile f(argv[1]); // Cria instancia do QFile
int contar = 0;  // Cria um contador

4 – Abrir o arquivo, se não conseguir, retornar um erro:

if(!f.open(QIODevice::ReadOnly | QIODevice::Text))
 {
 qDebug() << "Falha ao abrir o arquivo: " << f.fileName();
 return 1; // Retorna falha novamente
 }

5 – Criar um QTextStream, linkado ao QFile, que toma conta de converter o arquivo e cada            linha dele em um QString, que facilita todo o nosso futuro serviço. Também criar um QString, que será a qual conterá as linhas para verificação:

QTextStream arquivoTexto(&f);
QString linha;

6 – Agora a parte crucial: Ler linha por linha o TextStream, armazenar na QString, contar quantas incidencias do SEGUNDO parametro há na string e adicionar ao contador:

while(!arquivoTexto.atEnd())
 {
 linha = arquivoTexto.readLine();
 contar = contar + linha.count(QString(argv[2]));
 }

7 – Por ultimo, mostrar ao usuario o resultado:

qDebug() << "Lido: " << f.fileName() << ". Contado " << contar << argv[2] << "(s)";

Bom é isso, para quem quiser o código feito:

http://pastebin.com/hxq4LSD6

 

Abraços!

Posted in C++, Qt | Leave a comment

What a user want in a UI?

Aurora needs to be populated, from the viewpoint of a user, it isn’t usable. Why? Users want to do some simple tasks. Listen to Music, see photos, check emails… I took this weekend to note some applications i need to do. Why post here? If you are creating some kind of UI, it will be good to create some applications.

- MusicPlayer
- Web Browser
- Photos Viewer
- Videos Viewer
- Email Reader
- Calendar

Next week (or maybe these days/today…) i’ll try to start making some of them, i’ll be also posting here how to create them, in tutorials. See ya!

Posted in Uncategorized | Leave a comment

Linux e seu /dev/ [1]

Bom pessoal. Muita gente que começa a ver o terminal com outros olhos,desejam ter um controle total do hardware.suas funções e de sua administração. Algumas distribuições linux (Ubuntu,Kurumin) tratam por elas mesmas  todos os dispositivos plugados,tornando assim a vida do usuario final facil. Porem outras distribuições não o fazem(Slackware,ArchLinux). É crucial para ter controle do sistema,conhecer como trabalhar com ele. Para começarmos a aprender sobre isso,vamos iniciar com algo basico,montar um pendrive. Todo e qualquer dispositivo plugado ao computador,recebe um arquivo,chamado de device node,que fica no diretório /dev/. O primeiro passo é saber o que é o comando dmesg. O comando dmesg mostra todas as mensagems do kernel disponiveis dês de o momento do boot. Com ele podemos facilmente reconhecer quando um dispositivo é plugado. Como ele mostra muitas mensagens,e filtraremos em um curto espaço de tempo,podemos pegar as ultimas linhas do comando. Como fazer isso? O uso do comando tail,que pega da ultima,até x linhas de um texto,e o pipe,usado para redirecionar a saida de texto. Basicamente nosso comando vai ficar assim: dmesg|tail. O tail mostra 10 linhas por padrão,vamos aumentar para 20. dmesg|tail -n 20.

No tutorial,veja como está agora o meu dmesg.

[angelo@mlinux ~]$ dmesg|tail -n 20
[20839.283386] EXT4-fs (sda2): re-mounted. Opts: commit=0
[20839.287232] EXT4-fs (sda1): re-mounted. Opts: commit=0
[20839.672585] EXT4-fs (sda2): re-mounted. Opts: commit=0
[20839.705542] EXT4-fs (sda1): re-mounted. Opts: commit=0
[20839.751833] NMI watchdog enabled, takes one hw-pmu counter.
[20839.751979] NMI watchdog enabled, takes one hw-pmu counter.
[20839.752235] NMI watchdog enabled, takes one hw-pmu counter.
[20839.752318] NMI watchdog enabled, takes one hw-pmu counter.
[20839.891575] ehci_hcd 0000:00:1a.0: BAR 0: set to [mem 0x98405c00-0x98405fff] (PCI address [0x98405c00-0x98405fff])
[20839.891609] ehci_hcd 0000:00:1a.0: restoring config space at offset 0xf (was 0x100, writing 0x105)
[20839.891648] ehci_hcd 0000:00:1a.0: restoring config space at offset 0x1 (was 0x2900000, writing 0x2900002)
[20839.891740] ehci_hcd 0000:00:1a.0: PME# disabled
[20839.891752] ehci_hcd 0000:00:1a.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[20839.891759] ehci_hcd 0000:00:1a.0: setting latency timer to 64
[20840.044702] ehci_hcd 0000:00:1d.0: BAR 0: set to [mem 0x98405800-0x98405bff] (PCI address [0x98405800-0x98405bff])
[20840.044734] ehci_hcd 0000:00:1d.0: restoring config space at offset 0xf (was 0x100, writing 0x105)
[20840.044771] ehci_hcd 0000:00:1d.0: restoring config space at offset 0x1 (was 0x2900000, writing 0x2900002)
[20840.044869] ehci_hcd 0000:00:1d.0: PME# disabled
[20840.044881] ehci_hcd 0000:00:1d.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23
[20840.044888] ehci_hcd 0000:00:1d.0: setting latency timer to 64\
[angelo@mlinux ~]$

Vemos que as ultimas mensagems ANTES de plugar o dispositivo são sobre o module USB. Mensagems relativamente antigas. Agora ao plugar o dispositivo:

[angelo@mlinux ~]$ dmesg|tail -n 20
[20840.044771] ehci_hcd 0000:00:1d.0: restoring config space at offset 0x1 (was 0x2900000, writing 0x2900002)
[20840.044869] ehci_hcd 0000:00:1d.0: PME# disabled
[20840.044881] ehci_hcd 0000:00:1d.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23
[20840.044888] ehci_hcd 0000:00:1d.0: setting latency timer to 64
[21276.981574] usb 2-1.1: new high speed USB device number 4 using ehci_hcd
[21277.257160] usbcore: registered new interface driver uas
[21277.270673] Initializing USB Mass Storage driver...
[21277.270876] scsi5 : usb-storage 2-1.1:1.0
[21277.271231] usbcore: registered new interface driver usb-storage
[21277.271234] USB Mass Storage support registered.
[21278.300377] scsi 5:0:0:0: Direct-Access     Kingston DataTraveler 2.0 PMAP PQ: 0 ANSI: 0 CCS
[21278.300828] sd 5:0:0:0: Attached scsi generic sg2 type 0
[21280.465981] sd 5:0:0:0: [sdb] 3905536 512-byte logical blocks: (1.99 GB/1.86 GiB)
[21280.466553] sd 5:0:0:0: [sdb] Write Protect is off
[21280.466563] sd 5:0:0:0: [sdb] Mode Sense: 23 00 00 00
[21280.466569] sd 5:0:0:0: [sdb] Assuming drive cache: write through
[21280.470053] sd 5:0:0:0: [sdb] Assuming drive cache: write through
[21280.511544]  sdb: sdb1
[21280.513203] sd 5:0:0:0: [sdb] Assuming drive cache: write through
[21280.513211] sd 5:0:0:0: [sdb] Attached SCSI removable disk
[angelo@mlinux ~]$

Percebe-se varias novas informações sobre o dispositivo:

usb 2-1.1: new high speed USB device number 4 using ehci_hcd

Um novo dispositivo USB foi encontrado.

[21277.270876] scsi5 : usb-storage 2-1.1:1.0

Tipo armazenamento USB detectado

[21278.300377] scsi 5:0:0:0: Direct-Access     Kingston DataTraveler 2.0 PMAP PQ: 0 ANSI: 0 CCS

Marca e Modelo do produto detectados

[21280.465981] sd 5:0:0:0: [sdb] 3905536 512-byte logical blocks: (1.99 GB/1.86 GiB)

Aqui, dados cruciais. Detectado o tamanho do dispositivo e
seu device-node (sdb). Você já pode encontra-lo no diretório /dev/. Porem,esse é todo o dispositivo,você não pode acessalo diretamente,ele tem que ter uma partição,que é definida aqui:

[21280.511544]  sdb: sdb1

/dev/sdb1 é a partição. Para monta-lá em qualquer diretório (nesse caso, /mnt/):

mount /dev/sdb1 /mnt/

Já podemos ver os arquivos:

[angelo@mlinux ~]$ ls /mnt/
ABBA  Bee Gees  Mega Dance 1  Pink Floyd  Van Halen  Various Artists
[angelo@mlinux ~]$

Para desmontar:

umount /dev/sdb1

[angelo@mlinux ~]$ ls /mnt/
[angelo@mlinux ~]$

Posted in Portuguese | Leave a comment