Giter Club home page Giter Club logo

yappin's Introduction

yappin

ICS Fall 2023 Final. Name is based on "yapping", English word for talking annoyingly.

Python 3.12.0 required for new type usage. There is no backwards compatibility.

Running

Use python3 to launch start_client.py and start_server.py.

Ideas

  • Verified E2EE with emojis like Telegram calls
  • Server-based chatting system, not P2P
  • SQLite database, storing chat messages
  • Protobuf to send messages
  • Search chat feature
  • Send pictures and videos

Goals

  • Extensibility
  • Maintainability
  • Stateless

The goals for this project is to ensure that this code is as extensible and as maintainable as possible. That means in the future, someone can pick up this code base and continue to work on it easily. "Stateless" just means that we are going to try and avoid maintaining and changing object state as much as possible, to ensure easy code debugging and headache avoidance. It also makes the code easier to read. As far as I know, chat programs need stative components, so this is just to limit them as much as possible.

Required Dependencies

  • protobuf
  • cryptography
  • grpcio-tools
  • grpclib
  • betterproto

pip install protobuf cryptography betterproto

grpcio-tools and grpclib may be needed for protobuf.

Notes

  • Client.py serves as the entry point for the client program. Server.py serves as the entry point for the server program.
  • Please use type safety!
  • The Taskfile.yml is used to synchronize commands and build without having to resort to many command line command executions.
  • Use protobuf compiler with protoc -I . --python_betterproto_out=. example.proto
  • User commands are always preceded by a /
  • Chat histories are NOT stored on server. Only P2P.

Improvements

  • Can use separate API calls given different protobuf type

Style Convention

  • Good practice is to use type assertions rather than implicit types. This makes code more readable and lets the developer carry less mental load when debugging.
  • Private attributes are denoted by __, or the double underscore before its name.

yappin's People

Contributors

n30w avatar yamdn avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.