Heisenbridge a bouncer-style Matrix IRC bridge

Overview

Heisenbridge

a bouncer-style Matrix IRC bridge.

Heisenbridge brings IRC to Matrix by creating an environment where every user connects to each network individually like they would with a traditional IRC bouncer. Simplicity is achieved by exposing IRC in the most straightforward way as possible where it makes sense so it feels familiar for long time IRC users and prevents hiding protocol level events to help diagnose integration issues.

These compromises also mean that some IRC or Matrix features are managed with text commands rather than using the Matrix UI directly and some Matrix features that may seem to match IRC are not available anyway. Users on IRC should not know you are using Matrix unless you send media that is linked from your homeserver.

Please file an issue when you find something is missing or isn't working that you'd like to see fixed. Also bear in mind this project is still in very early stages of development so many things are missing or outright broken. Pull requests are more than welcome!

Support and development discussion in #heisenbridge:vi.fi

Use matrix-appservice-irc instead if you need to plumb rooms between Matrix and IRC seamlessly or need to connect large amounts of users.

Features

  • "zero configuration" - no databases or storage required
  • brings IRC to Matrix rather than Matrix to IRC - not annoying to folks on IRC
  • completely managed through admin room - just DM @Heisenbridge!
  • channel management through bridge bot - type Heisenbridge: help to get started!
  • online help within Matrix
  • access control for local and federated users
  • fully puppeted users from IRC, they come and go as they would on Matrix
  • tested with up to 1600 users in a single channel
  • IRCnet !channels are supported, you're welcome
  • any number of IRC networks and users technically possible
  • channel customization by setting the name and avatar
  • TLS support for networks that have it
  • customizable ident support
  • long message splitting directly to IRC
  • automatic identify/auth with server password or command on connect

Docker

The master branch is automatically published to Docker Hub:

docker pull hif1/heisenbridge
docker run --rm hif1/heisenbridge -h

Usage

usage: python -m heisenbridge [-h] [-v] -c CONFIG [-l LISTEN_ADDRESS]
                              [-p LISTEN_PORT] [-u UID] [-g GID] [-i]
                              [--generate] [--reset] [-o OWNER]
                              [homeserver]

a Matrix IRC bridge

positional arguments:
  homeserver            URL of Matrix homeserver (default:
                        http://localhost:8008)

optional arguments:
  -h, --help            show this help message and exit
  -v, --verbose         logging verbosity level: once is info, twice is debug
                        (default: 0)
  -c CONFIG, --config CONFIG
                        registration YAML file path, must be writable if
                        generating (default: None)
  -l LISTEN_ADDRESS, --listen-address LISTEN_ADDRESS
                        bridge listen address (default: 127.0.0.1)
  -p LISTEN_PORT, --listen-port LISTEN_PORT
                        bridge listen port (default: 9898)
  -u UID, --uid UID     user id to run as (default: None)
  -g GID, --gid GID     group id to run as (default: None)
  -i, --identd          enable identd on TCP port 113, requires root (default:
                        False)
  --generate            generate registration YAML for Matrix homeserver
  --reset               reset ALL bridge configuration from homeserver and
                        exit
  -o OWNER, --owner OWNER
                        set owner MXID (eg: @user:homeserver) or first talking
                        local user will claim the bridge (default: None)

Install

  1. Install Python 3.6 or newer

  2. Install dependencies in virtualenv

    virtualenv venv
    source venv/bin/activate
    pip install git+https://github.com/hifi/heisenbridge
  3. Generate registration YAML

    python -m heisenbridge -c /path/to/synapse/config/heisenbridge.yaml --generate
  4. Add heisenbridge.yaml to Synapse appservice list

  5. (Re)start Synapse

  6. Start Heisenbridge

    python -m heisenbridge -c /path/to/synapse/config/heisenbridge.yaml
  7. Start a DM with @heisenbridge:your.homeserver to get online usage help

To update your installation, run pip install --upgrade git+https://github.com/hifi/heisenbridge

Develop

  1. Install Python 3.6 or newer

  2. Install dependencies

    virtualenv venv
    source venv/bin/activate
    pip install -e .[dev,test]
  3. (Optional) Set up pre-commit hooks

    pre-commit install

The pre-commit hooks are run by the CI as well.

Comments
  • Media URLs are incorrect

    Media URLs are incorrect

    Hi,

    This is similar to this issue https://github.com/matrix-org/matrix-appservice-irc/issues/154

    I'm running Heisenbridge in a container, and the address of the homeserver I pass to it is an internal URL http://synapse:8008/. When I upload media to IRC, the resulting URL starts with http://synapse:8008/.

    I'd like to have a way to specify an arbitrary domain instead, as is done with the upstream IRC appservice (media_url option).

    Thanks!

    opened by lenormf 11
  • @heisenbridge user not available on Conduit.rs

    @heisenbridge user not available on Conduit.rs

    Hello

    am trying to get this to work with the Conduit.rs homeserver.

    On the conduit side everything seems to be working and I added the content of the heisenbridge.yaml as described in the Conduit docu: https://gitlab.com/famedly/conduit/-/blob/master/APPSERVICES.md

    But when I start heisenbridge (connecting to http://localhost:6167 which is where Conduit runs) I just get the message about the version and the domain of my homeserver, but I can't start a DM with the @heisenbridge:myhomeserverdomain user.

    It just says that the user is invited to the room...

    As I am pretty new to this Matrix thing, I might be overlooking something, but it seems this might be a bug either in Heisenbridge or Conduit?

    opened by poVoq 10
  • Any way to set this up to connect to multiple servers?

    Any way to set this up to connect to multiple servers?

    I find the description to be very confusing. I currently use an IRC client connected to multiple servers through three separate ZNC instances. One network I am connected as X on ZNC X, another network I am connected as Y on ZNC Y, but both ZNC instances could also be connected to the same network, in some cases even joining the same channels. I would like to attach all these to the same Matrix user, so that I can access them all from within Element. The experience I am looking for would be to have a group per connection, so one group called X-server1, one group called X-server2, one group called Y-server1 etc, giving me that same separation between channels and PMs on various IRC networks as I have now.

    Is this possible? I would think that the bouncer mode would be correct for this, but can this map the same Matrix user to multiple different IRC users, or would this remove the separation I have going on?

    opened by IeuanK 7
  • Re-send edited messages

    Re-send edited messages

    Hi,

    I got the following message after editing a message:

    Editing messages is not supported on IRC, edited text was NOT sent.
    

    I think the right behaviour would be to simply re-send the edited message, if that's possible?

    Thanks!

    opened by lenormf 6
  • More mypy

    More mypy

    The init methods got removed and replaced by proper constructors, where possible. I don't really know if the code actually works, so handle with care ^^.

    opened by piegamesde 6
  • Strange blank notices from bot in control room

    Strange blank notices from bot in control room

    I'm getting a decent amount of strange, empty m.notice messages in one of my IRC network control rooms. I'm not sure what info might be useful here, primarily because I'm not exactly sure what is happening to try to reproduce it and only one of my networks is doing it. The network in question seems to be running UnrealIRCd-5.2.2-git.

    Here is a screenshot of the messages. They're blank so I guess not that interesting:

    Screen Shot 2022-03-29 at 16 46 50

    And here is the "view source" of one of the messages. I redacted the room_id and sender. I don't know if they're actually anything to worry about sharing, though.

    {
      "content": {
        "body": "",
        "msgtype": "m.notice"
      },
      "origin_server_ts": 1648585303893,
      "sender": "@heisenbridge:<redacted>",
      "type": "m.room.message",
      "unsigned": {
        "age": 80
      },
      "event_id": "$Kx6XKEfX4-rTZohjw7p_PPVKqOJ-GpzlJoX5wr1h6J0",
      "room_id": "<redacted>"
    }
    
    opened by ahanselka 5
  • Strips @ from URLs making it impossible to share many Mastodon URLs

    Strips @ from URLs making it impossible to share many Mastodon URLs

    We found this strange issue that the bridge (in plumb mode) seems to strip @ signs from URLs, which is a problem when sharing links to Mastodon posts.

    opened by poVoq 4
  • Don't touch my URLs!

    Don't touch my URLs!

    Heisenbridge should not do any processing with any tokens that might parse as URI. Currently, try sending an URL containing an @mention, and the '@' will disappear from the posted URL, rendering the link invalid.

    opened by piegamesde 4
  • Hide invites in a hidden room

    Hide invites in a hidden room

    Makes use of version 9 rooms ability to be restricted to allow users who are members of another rooms. Joins all puppeted users into the hidden room first, if one is set for the channel. Avoids invite spam in the actual rooms.

    Migration of existing rooms is possible via room level command, if they are first migrated to version 9 via external means (most Clients can do that with a simple command).

    opened by BtbN 4
  • RELAYMSG sending support

    RELAYMSG sending support

    We are now draft/relaymsg aware enough to send them and filter out our own relayed messages.

    The tag after relayed name defaults to "m" and is configurable with RELAYTAG plumbed room command.

    opened by hifi 4
  • Invalid JSON (Synapse)

    Invalid JSON (Synapse)

    Hi,

    Recently my bridge has stopped working - I think this coincides with the update to synapse 1.47.0, which manifests like this:

    Traceback (most recent call last):
      File "/root/heisenbridge/lib/python3.9/site-packages/heisenbridge/__main__.py", line 171, in _on_mx_event
        await room.on_mx_event(event)
      File "/root/heisenbridge/lib/python3.9/site-packages/heisenbridge/room.py", line 106, in on_mx_event
        await handler(event)
      File "/root/heisenbridge/lib/python3.9/site-packages/heisenbridge/private_room.py", line 628, in on_mx_message
        await self.serv.api.post_room_receipt(event["room_id"], event["event_id"])
      File "/root/heisenbridge/lib/python3.9/site-packages/heisenbridge/matrix.py", line 254, in post_room_receipt
        return await self.call("POST", f"/_matrix/client/r0/rooms/{room_id}/receipt/{receipt_type}/{event_id}")
      File "/root/heisenbridge/lib/python3.9/site-packages/heisenbridge/matrix.py", line 92, in call
        raise self._matrix_error(ret)
    heisenbridge.matrix.MatrixError: M_NOT_JSON
    

    and on synapse:

    2021-11-22 16:36:09,025 - synapse.http.servlet - 620 - WARNING - POST-69100 - Unable to parse JSON: Expecting value: line 1 column 1 (char 0) (b'')
    

    I'm not sure if I can dump the json easily, unless there is a heisenbridge flag I can pass to have it spew out debug?

    While control rooms work fine, any attempt to send (or receive) messages in joined irc channels/PMs cause the above

    opened by jwh 4
  • Allow quoting full messages when replying

    Allow quoting full messages when replying

    This adds a configuration option quote_messages which allows quoting full messages when replying to a message in Matrix.

    Disabled (default, and current behavior):

    <alice> hello
    <bob> alice: hi
    

    Enabled:

    <alice> hello
    <bob> > alice: hello
    <bob> hi
    

    I find that when there are a lot of people talking on a channel, or when answering an old message, quoting it fully makes more sense than just mentioning the author.

    Since I didn't want to change the behavior too much, I kept the current behavior as the default, but I suggest we change the default to the new behavior (or even remove the config option and make it the only behavior...?).

    opened by blastrock 5
  • Disable Heisenbridge reactions on relaybotted rooms (or add config key)

    Disable Heisenbridge reactions on relaybotted rooms (or add config key)

    When a room has hundreds of users and only fraction of them come from IRC, the reactions (scissors, chain, ...) just confuse users.

    image

    IRC bridge should remain silent when it's in relaybot mode or alternatively it should be a configuration option per channel.

    opened by zouppen 0
  • error with

    error with "status" command

    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]: ERROR:root:Ignoring exception from room handler. This should be fixed.
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]: Traceback (most recent call last):
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:   File "/opt/heisenbridge/heisenbridge/__main__.py", line 202, in _on_mx_event
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:     await room.on_mx_event(event)
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:   File "/opt/heisenbridge/heisenbridge/room.py", line 100, in on_mx_event
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:     await handler(event)
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:   File "/opt/heisenbridge/heisenbridge/control_room.py", line 240, in on_mx_message
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:     await self.commands.trigger(command, tail)
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:   File "/opt/heisenbridge/heisenbridge/command_parse.py", line 95, in trigger
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:     await self.trigger_args(args, tail, allowed, forward)
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:   File "/opt/heisenbridge/heisenbridge/command_parse.py", line 79, in trigger_args
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:     await func(cmd_args)
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:   File "/opt/heisenbridge/heisenbridge/control_room.py", line 412, in cmd_status
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:     users.sort()
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]: TypeError: '<' not supported between instances of 'str' and 'NoneType'
    
    opened by roughnecks 0
  • Bot not working

    Bot not working

    Since a while now, the bridge bot is not working anymore, I'm not sure, but maybe since the last synapse update? Also tried installing it on a new instance of synapse but isn't working either. These are the verbose logs I got when starting the bridge and joining a room with it:

    (mautrix-irc) [email protected]:/opt/mautrix-irc# python -m heisenbridge -c /opt/mautrix-irc/registration.yaml --verbose
    Heisenbridge v1.13.1
    INFO:root:We are @heisenbridge:flowerhouse.at
    INFO:root:We (@heisenbridge:flowerhouse.at) are not a server admin, inviting puppets is required.
    INFO:aiohttp.access:127.0.0.1 [19/Aug/2022:17:57:48 +0000] "PUT /transactions/127?access_token=********* HTTP/1.1" 200 158 "-" "Synapse/1.65.0"
    INFO:root:Got an invite from @fabian:flowerhouse.at
    INFO:root:Whitelisted user @fabian:flowerhouse.at invited us, going to accept.
    ERROR:root:Failed to create control room.
    Traceback (most recent call last):
      File "/opt/mautrix-irc/lib/python3.9/site-packages/heisenbridge/__main__.py", line 268, in _on_mx_event
        await room.save()
      File "/opt/mautrix-irc/lib/python3.9/site-packages/heisenbridge/room.py", line 88, in save
        await self.az.intent.set_account_data("irc", config, self.id)
    AttributeError: 'ControlRoom' object has no attribute 'az'
    

    Version: {"server_version":"1.65.0","python_version":"3.9.2"} Heisenbridge version: 1.13.1

    opened by Tropaion 4
  • Can't join channels with non-ascii characters

    Can't join channels with non-ascii characters

    ...or at the very least channels with Japanese characters in them. For example, if I try to join #日本語 on euirc, I get the following:

    screenshot

    Is that an actual problem or am I just doing something dumb?

    bug 
    opened by Rouji 3
Releases(v1.14.0)
  • v1.13.0(May 18, 2022)

    • Read default port and listen address from config url (@BtbN)
    • Improvements to pillifying IRC nicks, again
    • Fixes for AUTOQUERY not always working correctly
    • Allow anyone to use STATUS command to get their own status
    • Filter control characters only for plumbs so people can send garbage to IRC if they wish from Matrix
    • Support for converting IRC color codes to Matrix (@tjaderxyz)
    • Fixed compose docker Synapse configuration for registration
    • Improved Python 3.10 compatibliy (@BtbN)
    • Hidden room to hide joins using restricted rooms join rule (@BtbN)

    Enabling hidden room functionality additionally requires either re-joining channels or having them already at v9 and using the UPGRADE command.

    Source code(tar.gz)
    Source code(zip)
    heisenbridge-1.13.0.tar.gz(66.58 KB)
  • v1.12.0(Apr 22, 2022)

    • Make MAXLINES and PASTEBIN option available to every room & global defaults (thanks @BtbN)
    • Fix 'NoneType' is not iterable error (thanks @BtbN)
    • Upgrade to Mautrix 0.16

    Not much to see here. A small contribution release which is always a nice thing when people come around and help 🤗.

    Source code(tar.gz)
    Source code(zip)
    heisenbridge-1.12.0.tar.gz(62.61 KB)
  • v1.11.0(Apr 3, 2022)

    • Fixed retry behavior on startup to wait for HS startup
    • Ignore TAGMSG messages from IRC server
    • Fixed HTML messages not working as commands
    • Fixed room aliases in messages dropping the message completely
    • Upgrade to Mautrix 0.15

    This release also breaks support for homeservers not supporting the "v3" API path so if you run Synapse 1.47 or older the bridge will not start.

    Source code(tar.gz)
    Source code(zip)
    heisenbridge-1.11.0.tar.gz(62.23 KB)
  • v1.10.0(Jan 14, 2022)

    • RELAYMSG sending support 🚀
    • Allow forwarding all IRC noise to network room
    • Support ZNC self-message caps ✅
    • Support CHGHOST caps (prevents leave+join on host change) ✅
    • Fix owner auto-registration (regression) 🐛
    • Upgrade to Mautrix 0.14 ⬆️

    Not a breaking change but the caps support will cause connections to networks that ignore CAP requests take a few seconds longer unless you remove all the default caps for said network and it will never try requesting them again.

    Mautrix 0.14 upgrade bumps the minimum version as well so packages beware.

    Source code(tar.gz)
    Source code(zip)
    heisenbridge-1.10.0.tar.gz(61.87 KB)
  • v1.9.0(Dec 29, 2021)

    • Spaces support 🌃
    • Proper SASL external with CertFP with mechanism override option (see notes)
    • Disconnect and cleanup from networks that have no rooms open ♻️
    • Reply (and reject) DM requests to ghosts with QUERY command ↪️
    • Try to keep IRC users in the room at all costs if they are on the IRC channel
    • Prevent accidental namespace changes to cause mayhem
    • Conduit support was broken in 1.8.x but fixed again in 1.9.0, sorry

    Upgrade warning: CertFP SASL has been updated to do SASL external flow by default. If you are upgrading and have used CertFP with OFTC you need to run SASL --mechanism=none for it to connect again.

    Source code(tar.gz)
    Source code(zip)
    heisenbridge-1.9.0.tar.gz(60.58 KB)
  • v1.8.1(Dec 24, 2021)

  • v1.8.0(Dec 20, 2021)

  • v1.7.1(Nov 22, 2021)

  • v1.7.0(Nov 18, 2021)

    • Implement "best effort" basic IRC moderation in plumbed rooms if bot has ops on IRC
    • Allow configuring topic sync for plumbs (IRC<->Matrix or one way)
    • Allow using forward slash (/) as MXID separator for IRC ghosts
    • Bump max mautrix version to <0.12

    The separator for IRC ghosts can now be changed to forward slash (/) from the default underscore (_). This happens by modifying the regex in the registration file. Only do this for new installations and it will cause all IRC users to duplicate in rooms who you can't remove and probably other bad side effects as well. The default may be changed in the future.

    Source code(tar.gz)
    Source code(zip)
    heisenbridge-1.7.0.tar.gz(59.23 KB)
  • v1.6.0(Nov 12, 2021)

  • v1.5.0(Nov 5, 2021)

    • Allow opening multiple simultaneous connections to the same network
    • New STOP/STAHP ROOM command to end a long paste flood
    • Clear channel send queue if the user gets kicked to prevent continuing flood on rejoin
    • New KB ROOM command to do a proper kick & ban (contributed by GitHub user @blastrock, thanks!)

    Upgrading from previous version to v1.5.0 will cause a small migration for every channel/pm that is open so it might take a little longer for the first startup to complete. If no multiple network connections are opened it is safe to downgrade but if someone uses the feature it will cause shenanigans for the duplicate networks in the older version.

    Source code(tar.gz)
    Source code(zip)
    heisenbridge-1.5.0.tar.gz(57.53 KB)
  • v1.4.1(Oct 30, 2021)

  • v1.4.0(Oct 28, 2021)

    • Free form AUTOCMD after joining a channel, per channel
    • Automatic rejoin on invite or kick (invite enabled by default)
    • AVATAR network room command to set avatars for IRC users (admin only)
    • WHOIS room command for PMs, PART for channels
    • Add ROOM command in network room to run channel room commands safely
    • Move PLUMBCFG stuff under ROOM command

    QoL stuff, remember to use ROOM command instead of PLUMBCFG now.

    Source code(tar.gz)
    Source code(zip)
    heisenbridge-1.4.0.tar.gz(56.53 KB)
  • v1.3.0(Oct 21, 2021)

  • v1.2.1(Sep 30, 2021)

  • v1.2.0(Sep 23, 2021)

    • Message formatting (from HTML to text) has been drastically improved
    • CTCP replies are now shown correctly but still ignored
    • Mentions/pills always honor room nick
    • Plumb notices don't loop around anymore
    • Self replies don't prefix with own nick
    • Single line truncation works when max lines is 1
    • Multiple fixes to displaynames or messages containing control characters leaking to IRC
    • New dependency: mautrix-python
    • Minimum Python version requirement has been bumped to 3.7

    PyPI: https://pypi.org/project/heisenbridge/1.2.0/

    Source code(tar.gz)
    Source code(zip)
    heisenbridge-1.2.0.tar.gz(50.39 KB)
  • v1.1.2(Sep 21, 2021)

  • v1.1.1(Sep 17, 2021)

  • v1.1.0(Sep 14, 2021)

    • Message edits are now supported and use stupid context aware "compact enough" edit format (+ - *)
    • Media will be quarantined if you redact them and the bridge is an admin on the HS
    • Public media URL can now be overridden in control room if auto-detection fails
    • New plumbs respect the default member sync setting
    • ; is included in pill separators
    Source code(tar.gz)
    Source code(zip)
    heisenbridge-v1.1.0.tar.gz(46.73 KB)
  • v1.0.1(Sep 3, 2021)

    Show part reason, fix emotes after refactoring just before 1.0.0, fix CTCP leaking on plumbs, show real errors when debugging connectivity issues in verbose mode.

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Aug 17, 2021)

Owner
Toni Spets
🤔🤔🤔🤦
Toni Spets
APC Power Usage is an application which shows power consuption overtime for UPS units manufactured by APC.

APC Power Usage Introduction APC Power Usage is an application which shows power consuption overtime for UPS units manufactured by APC. Screenshoots G

Stefan Kondinski 3 Oct 08, 2021
A program that takes Python classes and turns them into CSS classes.

PyCSS What is it? PyCSS is a micro-framework to speed up the process of writing bulk CSS classes. How does it do it? With Python!!! First download the

T.R Batt 0 Aug 03, 2021
More routines for operating on iterables, beyond itertools

More Itertools Python's itertools library is a gem - you can compose elegant solutions for a variety of problems with the functions it provides. In mo

2.8k Jan 02, 2023
Bible-App : Simple Tool To Show Bible Books

Bible App Simple Tool To Show Bible Books Socials: Language:

ميخائيل 5 Jan 18, 2022
Pydesy package description (EN)

Pydesy package description (EN) Last version: 0.0.2 Geodetic library, which includes the following tasks: 1. Calculation of theodolite traverse (tachy

1 Feb 03, 2022
Программа для практической работы №12 по дисциплине

Информатика: программа для практической работы №12 Код и блок-схема программы для практической работы №12 по дисциплине "Информатика" (I семестр). Сут

Vladislav 1 Dec 07, 2021
WordPress-style shortcodes for Python

Python Shortcodes WordPress-style shortcodes for Python Create and use WordPress-style shortcodes in your Python based app. Example # static output de

Bob 1 Dec 22, 2021
Binjago - Set of tools aiding in analysis of stripped Golang binaries with Binary Ninja

Binjago 🥷 Set of tools aiding in analysis of stripped Golang binaries with Bina

W3ndige 2 Jul 23, 2022
Group P-11's submission for the University of Waterloo's 2021 Engineering Competition (Programming section).

P-11-WEC2021 Group P-11's submission for the University of Waterloo's 2021 Engineering Competition (Programming section). Part I Compute typing time f

TRISTAN PARRY 1 May 14, 2022
Agora-token-helper - Some help tools for AgoraToken

Agora Token Helper Support AgoraToken version 001 - 006. But for security reason

A PowSyBl and Python integration based on GraalVM native image

PyPowSyBl The PyPowSyBl project gives access PowSyBl Java framework to Python developers. This Python integration relies on GraalVM to compile Java co

powsybl 23 Dec 14, 2022
Library to generate random strings from regular expressions.

Xeger Library to generate random strings from regular expressions. To install, type: pip install xeger To use, type: from xeger import Xeger

Colm O'Connor 101 Nov 15, 2022
A basic ticketing software.

Ticketer A basic ticketing software. Screenshots Program Launched Issuing Ticket Show your Ticket Entry Done Program Exited Code Features to implement

Samyak Jain 2 Feb 10, 2022
Stock Monitoring

Stock Monitoring Description It is a stock monitoring script. This repository is still under developing. Getting Started Prerequisites & Installing pi

Sission 1 Feb 03, 2022
A Tool to validate domestic New Zealand vaccine passes

Vaccine Validator Tool to validate domestic New Zealand vaccine passes Create a new virtual environment: python3 -m venv ./venv Activate virtual envi

8 May 01, 2022
Craxk is a SINGLE AND NON-REPLICABLE Hash that uses data from the hardware where it is executed to form a hash that can only be reproduced by a single machine.

What is Craxk ? Craxk is a UNIQUE AND NON-REPLICABLE Hash that uses data from the hardware where it is executed to form a hash that can only be reprod

5 Jun 19, 2021
Similarity checking of sign languages

Similarity checking of sign languages This repository checks for similarity betw

Tonni Das Jui 1 May 13, 2022
Perform oocyst segmentation in mercurochrome stained mosquito midgut

Midgut_oocyst_segmentation Perform oocyst segmentation in mercurochrome stained mosquito midguts This oocyst segmentation model also powers the webtoo

Duo Peng 3 Oct 27, 2021
Ikaros is a free financial library built in pure python that can be used to get information for single stocks, generate signals and build prortfolios

Ikaros is a free financial library built in pure python that can be used to get information for single stocks, generate signals and build prortfolios

Salma Saidane 64 Sep 28, 2022