Eclipse zenoh Python API

Overview

zenoh banner

CI Documentation Status Gitter License License

Eclipse zenoh Python API

Eclipse zenoh is an extremely efficient and fault-tolerant Named Data Networking (NDN) protocol that is able to scale down to extremely constrainded devices and networks.


How to install it

The Eclipse zenoh-python library is available on Pypi.org.
Install the latest available version using pip:

pip install eclipse-zenoh

⚠️ WARNING ⚠️ zenoh-python is developped in Rust. On Pypi.org we provide binary wheels for the most common platforms (MacOS, Linux x86). But also a source distribution package for other platforms.
However, for pip to be able to build this source distribution, there some prerequisites:

  • pip version 19.3.1 minimum (for full support of PEP 517).
    (if necessary upgrade it with command: 'sudo pip install --upgrade pip' )
  • Have a Rust toolchain installed (instructions at https://rustup.rs/)

Supported Python versions and platforms

zenoh-python has been tested with Python 3.6, 3.7, 3.8 and 3.9.

It relies on the zenoh Rust API which require the full std library. See the list Rust supported platforms here: https://doc.rust-lang.org/nightly/rustc/platform-support.html .


How to build it

Requirements:

Steps:

  • Install developments requirements:
    pip install -r requirements-dev.txt
  • Build zenoh-python
    python setup.py develop

This will automatically build the zenoh Rust API, as well as the zenoh-python API and install it in your Python environement.


Running the Examples

The simplest way to run some of the example is to get a Docker image of the zenoh network router (see https://github.com/eclipse-zenoh/zenoh#how-to-test-it) and then to run the examples on your machine.

Then, run the zenoh-python examples following the instructions in examples/zenoh/README.md

Comments
  • Binary wheels for armv6

    Binary wheels for armv6

    Describe the feature

    zenoh-python relies on pypa/cibuildwheel to build the binary wheels that are released on pypi.org. However it doesn't support armv6 and armv7 architectures. The reason being there is no manylinux image available for armv6 nor armv7.

    EDIT 2022-06-08: Thanks to #66 an armv7 wheel is now built. The build now relies on messense/maturin-action which doesn't provide a solution for armv6.

    help wanted new feature 
    opened by JEnoch 10
  • Zenoh-python build failed with

    Zenoh-python build failed with "error[E0164]: expected tuple struct or tuple variant..."

    Hi all , I am new to Rust and Zenoh, When I was building the python client library, I got the errors below:

    error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
      --> /home/eddie/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:87:13
       |
    87 |         Err(nix::Error::Sys(Errno::EEXIST)) => return Err(ShmemError::MappingIdExists),
       |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
       |
       = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
    
    
    error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
      --> /home/eddie/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:88:13
       |
    88 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::MapCreateFailed(e as u32)),
       |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
       |
       = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
    
    
        Buildingerror[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
       --> /home/eddie/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:103:13
        |
    103 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::UnknownOsError(e as u32)),
        |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
        |
        = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
    
    
    error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
       --> /home/eddie/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:119:13
        |
    119 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::MapCreateFailed(e as u32)),
        |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
        |
        = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
    
    
    error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
       --> /home/eddie/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:135:13
        |
    135 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::MapOpenFailed(e as u32)),
        |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
        |
        = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
    
    
       error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
       --> /home/eddie/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:150:13
        |
    150 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::MapOpenFailed(e as u32)),
        |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
        |
        = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
    
    
    error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
       --> /home/eddie/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:166:13
        |
    166 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::MapOpenFailed(e as u32)),
        |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
        |
        = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
    
    
     error: aborting due to 7 previous errors
    
     
    error: could not compile `shared_memory`
    
    To learn more, run the command again with --verbose.
    warning: build failed, waiting for other jobs to finish...
    error: build failed
    💥 maturin failed
      Caused by: Failed to build a native library through cargo
      Caused by: Failed to build a native library through cargo
      Caused by: Cargo build finished with "exit status: 101": `cargo rustc --message-format json --manifest-path Cargo.toml --release --lib --`
    
    opened by eddie9712 8
  • Failed building wheel for eclipse-zenoh

    Failed building wheel for eclipse-zenoh

    Describe the bug

    Standard python example running on Raspberry PI Code:

    from zenoh import Zenoh
    import random
    import time
    
    random.seed()
    
    def read_temp():
        return random.randint(15, 30)
    
    def run_sensor_loop(w):
        # read and produce a temperature every second
        while True:
            t = read_temp()
            w.put('/myfactory/machine1/temp',t)
            print (t)
            time.sleep(15)
    
    if __name__ == "__main__":
        z = Zenoh({'peer': 'tcp/127.0.0.1:7447'})
        w = z.workspace('/')
        run_sensor_loop(w)
    

    Error Message:

    Traceback (most recent call last):
      File "zenoh_producer.py", line 27, in <module>
        run_sensor_loop(w)
      File "zenoh_producer.py", line 20, in run_sensor_loop
        w.put('/myfactory/machine1/temp',t)
      File "/usr/local/lib/python3.7/dist-packages/zenoh/workspace.py", line 50, in put
        self.rt.write_data(
    AttributeError: 'dict' object has no attribute 'write_data'
    

    Any hints what led to this error message?

    To reproduce

    1. Start Zenoh Broker
    2. Execute provided code
    3. Works on Ubuntu 22.04 but led to the shown error on ARM / Raspberry Pi OS.

    System info

    No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 10 (buster) Release: 10 Codename: buster Operating System: Raspbian GNU/Linux 10 (buster) Kernel: Linux 5.10.103-v7l+ Architecture: arm

    • Rust: rustc 1.63.0 (4b91a6ea7 2022-08-08)
    • Python 3.7.3
    • The zenoh router v0.5.0-beta.8-326-g70d7b22
    bug 
    opened by lottz 6
  • zenoh python subscriber work with asyncio

    zenoh python subscriber work with asyncio

    I would like to integrate the zenoh python with the asyncio library. The statement like following: sub = session.declare_subscriber('/rt/hello_world', sub_info, hello_callback) will call the hello_callback function. The argument for the hello_callback can only be the sample: Sample. Inside the hello_callback I can only deserialize the received message.

    Is it possible, that I inside the hello_callback call a coroutine? Because I want to send the message to another broker(NATS broker) for further usage. But I need to call a coroutine to send the message to that broker. I have tried once to decorate the hello_callback function as a async function. But it failed.

    Or another alternative, that the recevied message can be stored in the Subscriber instance. The message can then be accessed.

    new feature 
    opened by Yingliangzhe 6
  • zenoh.net.open connected with not existing host, throws no errors

    zenoh.net.open connected with not existing host, throws no errors

    I would like to wrap the zenoh net into another class. As initialization step, a session has been opened and need to be connected to a zenoh bridge on a remote machine. But as I gives the config a not existing host, the session has also been built without throwing an error. It is a feature, that is not created? Or was I using it wrong?

    As I search for zenoh-python, there are actually two kinds of zenoh-python, one is eclipse-zenoh/zenoh-python from here, and another one is atolab/zenoh-python, which is read in c and wrapped in python. This makes a little bit confused. Is this repo not being used?

    opened by Yingliangzhe 4
  • Custom messages

    Custom messages

    Hello there! I tried out the examples and managed to get them working. I was wondering if there is a recommended way to generate custom messages to be used with zenoh-python, for example by ingesting an .idl file?

    So far, I have managed to use pickle to serialize python containers to be sent, and deserialize them when received.

    opened by aaronchongth 4
  • Use maturin for building zenoh-python. Propose to resolve #64.

    Use maturin for building zenoh-python. Propose to resolve #64.

    This PR aims to resolve issue #64. It comes with

    • Replace the building tool rustsetup-tool by the latest maturin, which is the most recommended tool for PyO3 now.
    • Use maturin-action in Github action for better building management. This PR consistently set the Python to 3.7 in the release workflow. (since the latest maturin only supports >= abi-py37)
    • Support the cross-compilation for armv7. And all the cross-compilation and building on macOS are changed to docker instead of handcrafted settings over QEMU.

    Although this PR only covers the platforms specified in the previous workflow using QEMU, maturin has the possibility of cross-compiling packages for musllinux and other platforms like IBM PC.

    A good example of leveraging PyO3 is the workflow used in graphlib2, of which the built wheels are here.

    opened by YuanYuYuan 3
  • pip install not working on aarch64

    pip install not working on aarch64

    Trying to install on nvidia jetson:

    (venv) [email protected]:$ uname -i
    aarch64
    (venv) [email protected]:$ lsb_release -a
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description:    Ubuntu 18.04.6 LTS
    Release:        18.04
    Codename:       bionic
    (venv) [email protected]:$ python --version
    Python 3.6.9
    

    But fails with:

    $ pip install eclipse-zenoh
    Collecting eclipse-zenoh
      Downloading eclipse_zenoh-0.5.0_b8.tar.gz (74 kB)
         |████████████████████████████████| 74 kB 846 kB/s            
      Installing build dependencies ... done
      Getting requirements to build wheel ... done
      Preparing wheel metadata (pyproject.toml) ... done
    Building wheels for collected packages: eclipse-zenoh
      Building wheel for eclipse-zenoh (pyproject.toml) ... error
      ERROR: Command errored out with exit status 1:
       command: /home/alf/proj/zenoh_play/venv/bin/python3 /home/alf/proj/zenoh_play/venv/lib/python3.6/site-packages/pip/_vendor/pep517/in_process/_in_process.py build_wheel /tmp/tmp0rv6g8c0
           cwd: /tmp/pip-install-zineoisv/eclipse-zenoh_8413ab83c85a404597df68fa8f7150a8
      Complete output (255 lines):
      Running `maturin pep517 build-wheel -i /home/alf/proj/zenoh_play/venv/bin/python3`
      ⚠️  Warning: Please use maturin in pyproject.toml with a version constraint, e.g. `requires = ["maturin>=0.11,<0.12"]`. This will become an error.
    TLDR;
      error: could not compile `shared_memory`
      
      To learn more, run the command again with --verbose.
      warning: build failed, waiting for other jobs to finish...
      error: build failed
      💥 maturin failed
        Caused by: Failed to build a native library through cargo
        Caused by: Cargo build finished with "exit status: 101": `cargo rustc --message-format json --manifest-path Cargo.toml --release --lib --`
      🔗 Found pyo3 bindings with abi3 support for Python ≥ 3.6
      🐍 Not using a specific python interpreter (With abi3, an interpreter is only required on windows)
      error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
        --> /home/alf/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:87:13
         |
      87 |         Err(nix::Error::Sys(Errno::EEXIST)) => return Err(ShmemError::MappingIdExists),
         |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
         |
         = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
      
      error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
        --> /home/alf/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:88:13
         |
      88 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::MapCreateFailed(e as u32)),
         |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
         |
         = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
      
      
      error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
         --> /home/alf/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:103:13
          |
      103 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::UnknownOsError(e as u32)),
          |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
          |
          = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
      
      
      error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
         --> /home/alf/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:119:13
          |
      119 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::MapCreateFailed(e as u32)),
          |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
          |
          = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
      
      
      error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
         --> /home/alf/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:135:13
          |
      135 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::MapOpenFailed(e as u32)),
          |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
          |
          = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
      
      
      error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
         --> /home/alf/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:150:13
          |
      150 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::MapOpenFailed(e as u32)),
          |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
          |
          = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
      
      
      error[E0164]: expected tuple struct or tuple variant, found associated function `nix::Error::Sys`
         --> /home/alf/.cargo/registry/src/github.com-1ecc6299db9ec823/shared_memory-0.11.4/src/unix.rs:166:13
          |
      166 |         Err(nix::Error::Sys(e)) => return Err(ShmemError::MapOpenFailed(e as u32)),
          |             ^^^^^^^^^^^^^^^^^^ `fn` calls are not allowed in patterns
          |
          = help: for more information, visit https://doc.rust-lang.org/book/ch18-00-patterns.html
      
      
      error: aborting due to 7 previous errors
      
      
      For more information about this error, try `rustc --explain E0164`.
      
      Error: command ['maturin', 'pep517', 'build-wheel', '-i', '/home/alf/proj/zenoh_play/venv/bin/python3'] returned non-zero exit status 1
      ----------------------------------------
      ERROR: Failed building wheel for eclipse-zenoh
    Failed to build eclipse-zenoh
    ERROR: Could not build wheels for eclipse-zenoh, which is required to install pyproject.toml-based projects
    
    opened by PinkJohnOfUs 3
  • In zenoh-python, example usage seems to be wrong

    In zenoh-python, example usage seems to be wrong

    Hello,

    In examples/zenoh/README.md , I am not able to use the examples as shown:

      python3 z_put
    

    As I get a "file not found" error. I am on Mac OS X 10.15.6 and python 3.8.2 , pip3 21.01 (but have seen this issue on Ubuntu 20.04 as well). Instead I have to go into that directory and do this:

    python3 z_put.py
    

    Is there something wrong with my python installation of this package, or is the example wrong?

    opened by vinnnyr 3
  • `unable to connect any locator of scouted peer` zenoh-plugin-dds

    `unable to connect any locator of scouted peer` zenoh-plugin-dds

    I am trying to use the Zenoh Python API with pycdr as in the demo to interface with cycloneDDS via zenoh-plugin-dds. The Python api was installed via pip: eclipse-zenoh-nightly I noticed that the python API examples don't seem to be compatible with the master or latest zenoh-plugin-dds docker image: Unable to connect any locator of scouted peer D6B17F40D8234F80AE42D205FCB23673 : [Locator { address: Tcp(SocketAddr(192.168.0.62:33681)), metadata: None }, Locator { address: Tcp(SocketAddr(172.17.0.1:33681)), metadata: None }] I have tried the master and apis-merge branches of the Python API but no luck. Should I build the Python API from source instead of using the PyPi binary?

    opened by akila-ganlath-tm 2
  • Problems with

    Problems with "hello world"

    Hey so I am trying to run

    python3 z_sub.py
    

    and I get the following error:

    Traceback (most recent call last):
      File "z_sub.py", line 20, in <module>
        from zenoh import Reliability, SubMode
    ImportError: cannot import name 'Reliability' from 'zenoh' (/home/andrzej/.local/lib/python3.8/site-packages/zenoh/__init__.py)
    
    

    What should I do? Do you think that maybe I have missed versions 0.6 and 0.5? Because even I can't change the zenoh.version for some reasons....

    opened by femust 2
  • Introducing Python context managers

    Introducing Python context managers

    Describe the feature

    I've tried out the zenoh-python api and I've noticed the manual opening and closing of sessions and subscriptions. I think it would be way more idiomatic Python to add context managers:

    with zenoh.open() as session:
        for key, value in session.info().items():
            print(f"{key}: {value}")
    

    This makes sure the session is automatically closed when exiting the "scope", even when an exception is raised. I have implemented the basic case for session here, but I have to admit that the async case was a bit beyond my current Rust abilities. Implementing these context managers exists of nothing more than implementing __enter__ and __exit__ as methods for the sync case and __aenter__ and __aexit__ for the async case. This would also allow you to make with zenoh.open() return a sync session and async with zenoh.open() return a async session, but that would require an intermediate object with the four methods implemented and would destroy the existing session = zenoh.open() style setup without some potentially ugly trickery.

    opened by thijsmie 1
  • Problems with sync examples

    Problems with sync examples

    opened by Jiarre 2
  • In case of Raw Value get_content() returns a list type instead of bytes

    In case of Raw Value get_content() returns a list type instead of bytes

    To reproduce:

    import zenoh
    v = zenoh.Value.Raw(0, b'\x48\x69\x21')
    print(type(v.get_content()))
    

    This displays <class 'list'>. But one would expect <class 'bytes'>

    bug 
    opened by JEnoch 0
  • Add API for shared memory transport

    Add API for shared memory transport

    zenoh in Rust implement a zero-copy shared memory transport. See examples of use:

    We need to make this transport also accessible from the zenoh Python API.

    new feature 
    opened by JEnoch 2
Releases(0.7.0-rc)
Simple app that redirect fixed URL to changing URL, configurable via POST requests

This is a basic URL redirection service. It stores associations between apps and redirection URLs, for apps with changing URLs. You can then use GET r

Maxime Weyl 2 Jan 28, 2022
Linkedin Connection Automation

Why spend an hour+ a week, connecting with the correct people on LinkedIn when you can go for lunch and let your computer do the hard work?

1 Nov 29, 2021
IPE is a simple tool for analyzing IP addresses. With IPE you can find out the server region, city, country, longitude and latitude and much more in seconds.

IPE is a simple tool for analyzing IP addresses. With IPE you can find out the server region, city, country, longitude and latitude and much more in seconds.

Paul 0 Jun 11, 2022
Rufus is a Dos tool written in Python3.

🦎 Rufus 🦎 Rufus is a simple but powerful Denial of Service tool written in Python3. The type of the Dos attack is TCP Flood, the power of the attack

Billy 88 Dec 20, 2022
forward several ports into a single port

port forwarding Multi-Input-Single-Output forward several ports into a single one this tool forwards packets from several ports into one single port.

Erfan Kheyrollahi Qaroğlu 3 Sep 11, 2021
A TrueCharts automatic and bulk update utility

trueupdate A TrueCharts automatic and bulk update utility How to install run pip install trueupdate Please be aware you will need to reinstall after e

TrueCharts 125 Jan 04, 2023
Simple Python Script to Parse Apache Log, Get all Unique IPs and Urls visited by that IP

Parse_Apache_Log Simple Python Script to Parse Apache Log, Get all Unique IPs and Urls visited by that IP. It will create 3 different files. allIP.txt

Kathan Patel 2 Mar 29, 2022
InfraGenie is allows you to split out your infrastructure project into separate independent pieces, each with its own terraform state.

🧞 InfraGenie InfraGenie is allows you to split out your infrastructure project into separate independent pieces, each with its own terraform state. T

Digger 53 Nov 23, 2022
An automatic web reconnaissance tool written in python3.

WebRecon is an automatic web reconnaissance tool written in python3. Provides a command line interaction similar to msfconsole. The Exasmple.py file is provided, and you can write your own scripts yo

prophet 1 Feb 06, 2022
Cobalt Strike script for ScareCrow payloads

🎃 🌽 ScareCrow Cobalt Strike intergration CNA A Cobalt Strike script for ScareCrow payload generation. Works only with the binary and DLL Loader. 💣

UserX 401 Dec 11, 2022
Solismod - A script subscribes to MQTT topics and waits for a message

SolisMod This is a first attempt to modify Solis inverter settings As SolisMon3,

9 Nov 14, 2022
PoC code for stealing the WiFi password of a network with a Lovebox IOT device connected

LoveBoxer PoC code for stealing the WiFi password of a network with a Lovebox IOT device connected. This PoC was is what I used in this blogpost Usage

Graham Helton 10 May 24, 2022
A simple python script to send cute messages to my boyfriend.

Morning Messages A simple python script to send cute messages to my boyfriend. It gives him the weather and news currently. Installation git clone htt

Sabrina Medwinter 3 Oct 12, 2022
Medusa is a cross-platform agent compatible with both Python 3.8 and Python 2.7.

Medusa Medusa is a cross-platform agent compatible with both Python 3.8 and Python 2.7. Installation To install Medusa, you'll need Mythic installed o

Mythic Agents 123 Nov 09, 2022
A network address manipulation library for Python

netaddr A system-independent network address manipulation library for Python 2.7 and 3.5+. (Python 2.7 and 3.5 support is deprecated). Provides suppor

711 Jan 05, 2023
订阅转换,添加免流host

普通订阅转免流订阅 原理 将原来的订阅解析后添加免流host 使用方法 服务器域名/&&订阅链接&&免流host&&转换后服务器前缀 我这里已经在服务器上搭建好了

163 Apr 01, 2022
stellar-add-guest is a small tool to generate a new guest for Stellar Wireless (Enterprise mode) in OmniVista 2500 hosted on OmniSwitch with AOS Release 8

stellar-add-guest is a small tool to generate a new guest for Stellar Wireless (Enterprise mode) in OmniVista 2500 hosted on OmniSwitch with AOS Release 8.

BennyE 3 Jan 24, 2022
Converts from PC formatted MAC addresses (hardware addresses) to Cisco format or vice-versa

MAC-Converter Converts from PC formatted MAC addresses (hardware addresses) to Cisco format or vice-versa Stores the results to a file in the same dir

Stew Alexander 0 Dec 24, 2022
syncio: asyncio, without await

syncio: asyncio, without await asyncio can look very intimidating to newcomers, because of the async/await syntax. Even experienced programmers can ge

David Brochart 10 Nov 21, 2022
OpenNeoMC:an Open-source Tool for Particle Transport Optimization that Combining OpenMC with NEORL

OpenNeoMC:an Open-source Tool for Particle Transport Optimization that Combining OpenMC with NEORL OpenMC is a community-developed Monte Carlo neutron

7 Aug 17, 2022