Skip to content

Projeto final de curso da disciplina de Estrutura de dados 1 — Área de transferência dinâmica e multi-plataforma

Notifications You must be signed in to change notification settings

ryan-ribeiro/Dinamic-Clipboard

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Gerenciador Multiplataforma de Histórico de Clipboard

Autores:

  • Enzo Daniel Marinho
  • Ryan Ribeiro Rodrigues
  • Ian Azevedo de Carvalho

Resumo: Este projeto propõe a criação de um gerenciador multiplataforma de histórico de clipboard. Ele captura automaticamente o conteúdo copiado pelo usuário e o organiza em um histórico acessível e gerenciável. Utiliza sockets para comunicação cliente-servidor e implementa algoritmos otimizados para busca e armazenamento dinâmico dos itens.

Palavras-chave: Clipboard, sockets, sistemas operacionais, armazenamento dinâmico, Python, C


Seção I. Introdução

Problema

Usuários frequentemente enfrentam dificuldades para gerenciar o histórico de itens copiados. O problema é mais evidente em tarefas que demandam múltiplas referências ao clipboard, como pesquisas, edição de documentos e programação. Esse projeto busca solucionar essa limitação, fornecendo um sistema que captura, organiza e facilita o acesso ao histórico de textos copiados.

Literatura

  1. Vídeo: Sockets and Pipes Look Like Files (Unix/fdopen)

    • Explica como sockets e pipes podem ser manipulados como arquivos em sistemas Unix, destacando o uso de fdopen.
  2. Vídeo: Unix Domain Socket in 100 seconds

    • Uma introdução rápida e prática ao uso de Unix Domain Sockets.
  3. Vídeo: [Linguagem C] Sockets no Windows e no Linux

    • Demonstra como implementar sockets em C, abordando tanto sistemas Windows quanto Linux.
  4. Documentação: socket

    • Documentação oficial do módulo socket em Python, cobrindo o uso de SOCK_STREAM para comunicação TCP.
  5. How-to Guide: Programação de Soquetes

    • Guia introdutório à programação de sockets, com exemplos em Python.
  6. Discussão: Can anyone explain to me how init == 'main' is used properly?

    • Discussão em fórum sobre o uso correto da estrutura if __name__ == '__main__' em Python, relevante para a execução do cliente.
  7. Artigo: Introdução a Sockets em Python

    • Um artigo introdutório sobre programação com sockets em Python, incluindo exemplos práticos.
  8. Artigo: Manipulação de arquivos em C — como abrir e fechar arquivos e escrever algo neles

    • Um artigo que trata de abrir, escrever, ler e fechar arquivos .txt em C
  9. Artigo: How much memory does a call to ‘malloc’ allocate?

    • Artigo que discute o funcionamento da função malloc com mais detalhes
  10. Artigo: Como armazenar uma string com tamanho qualquer (desconhecido antecipadamente) em C?

  • Uma solução de como ler uma string de tamanho desconhecido, porém ainda possui a limitação de não suportar o caractere de quebra de linha
  1. Artigo: Como faço para guardar uma string com tamanho indefinido sem utilizar memória extra
  • Artigo que trata da leitura de string de tamanho desconhecido, dando ênfase ao uso adequado de buffers e a função strlen(), ideal para o entendimento do código, que implementa na função realloc().
  1. Artigo: How does the EOF macro work with getchar?
  • Artigo que trata da macro nativa EOF, uma macro que é a solução implementada para a leitura indefinida de caracteres, teoricamente, além de uma segunda solução implementada no código.

Dataset

Neste projeto, o "dataset" é composto pelos itens copiados pelo usuário em tempo real, armazenados inicialmente em uma lista ligada e, futuramente, em arquivos persistentes.

Métodos

Os métodos principais incluem:

  1. Captura automática de eventos de CTRL+C.
  2. Comunicação cliente-servidor via sockets.
  3. Armazenamento dinâmico em listas ligadas com nó descritor.
  4. Planejamento para integração de árvores de busca para otimização.

Avaliação

Os resultados serão medidos por:

  • Latência das operações (COPY, DELETE, SELECT, SHOW_LIST).
  • Consumo de memória durante a execução.
  • Eficiência da busca no histórico (quando implementada a árvore de busca).

Seção II. Fundamentos Teóricos

Sockets Cliente-Servidor

A comunicação cliente-servidor é realizada por meio de sockets UNIX (Linux) e TCP/IP (Windows). Essa abordagem permite troca de dados rápida e confiável entre os componentes do sistema, independentemente do sistema operacional.

Estruturas de Dados

  • Lista Ligada: Utilizada para armazenamento temporário dos itens copiados. Sua implementação permite inserções e remoções dinâmicas.
  • Árvore de Busca Binária (Planejada): Visa melhorar a eficiência na busca de itens ao longo do histórico.

Integração Python e C

O projeto combina a versatilidade do Python com a performance do C. Enquanto o cliente utiliza Python para lidar com eventos de sistema e interação com o usuário, o servidor em C é responsável por processar e armazenar os dados de forma eficiente.


Seção III. Metodologia

  1. Arquitetura Inicial:

    • Configuração de um socket servidor em C e cliente em Python.
    • Desenvolvimento da função handle_signal para capturar CTRL+C e enviar mensagens ao servidor.
  2. Estruturação do Histórico:

    • Implementação de uma lista ligada para gerenciamento dinâmico do histórico.
    • Definição dos comandos básicos:
      • COPY <texto>: Armazena o texto copiado.
      • DELETE <id>: Remove um item específico.
      • SELECT <id>: Recupera um item.
      • SHOW_LIST: Exibe todos os itens armazenados.
  3. Otimização e Planejamento:

    • Planejamento para integração de uma árvore de busca para consultas mais rápidas.
    • Proposta de armazenamento permanente para persistência dos dados.

Seção IV. Resultados e Conclusões

Resultados

  • Funcionalidades Implementadas:

    • Comunicação cliente-servidor bem-sucedida.
  • Desempenho:
    TODO

Conclusões

  • Lições Aprendidas:
    TODO

  • Perspectivas Futuras:

    • Implementar armazenamento permanente para histórico.
    • Otimizar buscas com árvores de busca.
    • Expandir a funcionalidade para múltiplos formatos de dados (imagens, arquivos, etc.).

Referências

  1. Sockets and Pipes Look Like Files (Unix/fdopen)
  2. Unix Domain Socket in 100 seconds
  3. [Linguagem C] Sockets no Windows e no Linux
  4. socket
  5. Programação de Soquetes
  6. Can anyone explain to me how init == ‘main’ is used properly? I’ve watched multiple videos but it just hard for me to understand.
  7. Introdução a Sockets em Python
  8. Manipulação de arquivos em C — como abrir e fechar arquivos e escrever algo neles
  9. How much memory does a call to ‘malloc’ allocate?
  10. Como armazenar uma string com tamanho qualquer (desconhecido antecipadamente) em C?
  11. Como faço para guardar uma string com tamanho indefinido sem utilizar memória extra
  12. How does the EOF macro work with getchar?

About

Projeto final de curso da disciplina de Estrutura de dados 1 — Área de transferência dinâmica e multi-plataforma

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 77.7%
  • Python 22.3%