APRS Track Direct is a collection of tools that can be used to run an APRS website

Overview

APRS Track Direct

APRS Track Direct is a collection of tools that can be used to run an APRS website. You can use data from APRS-IS, CWOP-IS, OGN, HUBHAB, CBAPRS or any other source that uses the APRS specification.

Tools included are an APRS data collector, a websocket server, a javascript library (websocket client and more), a heatmap generator and a website example (which can of course be used as is).

Please note that it is almost 10 years since I wrote the majority of the code, and when the code was written, it was never intended to be published ...

What is APRS?

APRS (Automatic Packet Reporting System) is a digital communications system that uses packet radio to send real time tactical information. The APRS network is used by ham radio operators all over the world.

Information shared over the APRS network is for example coordinates, altitude, speed, heading, text messages, alerts, announcements, bulletins and weather data.

Getting Started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes (but they are of course also valid for you who want to set up a public website).

Prerequisites

What things you need to install and how to install them. These instructions are for Ubuntu 20.04

Install some ubuntu packages

sudo apt-get install libpq-dev postgresql-12 postgresql-client-common postgresql-client libevent-dev apache2 php libapache2-mod-php php-pgsql libmagickwand-dev imagemagick php-imagick inkscape

Install python

Unfortunately, the majority of this code was written when python 2 was still common and used, this means that the installation process needs to be adapted a bit. You might see some deprication warnings when starting the collector and websocket server.

Install python 2

sudo add-apt-repository universe
sudo apt update
sudo apt install python2 python2-dev

Install pip2 (pip for python 2)

curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
sudo python2 get-pip.py

Install needed python libs

pip2 install psycopg2-binary
pip2 install wheel
pip2 install setuptools
pip2 install autobahn[twisted]
pip2 install twisted
pip2 install pympler
pip2 install image_slicer
pip2 install jsmin
pip2 install psutil

Install the python aprs lib (aprs-python)

git clone https://github.com/rossengeorgiev/aprs-python
cd aprs-python/
pip2 install .

Install python library used for generating heatmap

wget http://jjguy.com/heatmap/heatmap-2.2.1.tar.gz
tar xzf heatmap-2.2.1.tar.gz
cd heatmap-2.2.1
sudo python2 setup.py install

Installing

Start by cloning the repository

git clone https://github.com/qvarforth/trackdirect

Set up database

Set up the database (connect to database using: "sudo -u postgres psql")

CREATE DATABASE trackdirect;

CREATE USER {my_linux_username} WITH PASSWORD 'foobar';
ALTER ROLE {my_linux_username} WITH SUPERUSER;
GRANT ALL PRIVILEGES ON DATABASE "trackdirect" to {my_linux_username};

Remember to add password to password-file:

vi ~/.pgpass
Increase performance

It might be a good idea to play around with some Postgresql settings to improve performance (for this application, speed is more important than minimizing the risk of data loss).

Some settings in /etc/postgresql/12/main/postgresql.conf that might improve performance:

shared_buffers = 2048MB              # I recommend 25% of total RAM
synchronous_commit=off               # Avoid writing to disk for every commit
commit_delay=100000                  # Will result in a 0.1s delay

Restart postgresql

sudo /etc/init.d/postgresql restart
Set up database tables
~/trackdirect/server/scripts/db_setup.sh trackdirect 5432 ~/trackdirect/misc/database/tables/

Set up OGN device data

If you are using data from OGN (Open Glider Network) it is IMPORTANT to keep the OGN data updated (the database table ogn_devices). This is important since otherwise you might show airplanes that you are not allowed to show. I recommend that you run this script at least once every hour (or more often).

~/trackdirect/server/scripts/ogn_devices_install.sh trackdirect 5432

Set up aprsc

You should not to connect to a public APRS server (APRS-IS, CWOP-IS or OGN server). The collector will use a full feed connection and each websocket client will use a filtered feed connection. To not cause extra load on public servers it is better to run your own aprsc server and let your collector and all websocket connections connect to that instead (will result in only one full feed connection to a public APRS server).

Note that it seems like aprsc needs to run on a server with a public ip, otherwise uplink won't work.

Download and install
wget http://he.fi/aprsc/down/aprsc-latest.tar.gz
tar xvfz aprsc-latest.tar.gz
cd aprsc-*/src
./configure
make
sudo make install
Create user

Create user to avoid running aprsc as root

sudo useradd -r -s /bin/false aprsc
sudo chown -R aprsc /opt/aprsc
sudo chgrp -R aprsc /opt/aprsc
Config file

You can find an example aprsc configuration file in the misc directory. Note that you need to modify the configuration file to make it work.

sudo cp ~/trackdirect/misc/aprsc.conf /opt/aprsc/etc/
Start aprsc server

Start the aprsc server using the configuration file that you selected. Note that if you run multiple aprsc instances you need to select different data och log directories (and of course different tcp ports in configuration file).

sudo /opt/aprsc/sbin/aprsc -u aprsc -t /opt/aprsc -c /etc/aprsc_aprs.conf -r /logs -o file -f

Start the collectors

Before starting the collector you need to update the trackdirect configuration file (trackdirect/config/trackdirect.ini).

Start the collector using the provided shell-script. Note that if you have configured multiple collectors (fetching from multiple aprs servers, for example both APRS-IS and CWOP-IS) you need to call the shell-script multiple times.

~/trackdirect/server/scripts/collector.sh trackdirect.ini 0

Start the websocket server

~/trackdirect/server/scripts/wsserver.sh trackdirect.ini

Start generating heatmaps

I recommend generating new heatmaps once every hour in production (I suggest that you schedule it using cron).

~/trackdirect/server/scripts/heatmapcreator.sh trackdirect.ini ~/trackdirect/htdocs/public/heatmaps

Generating heatmaps might take a while, look in log file to see the current status:

tail -f ~/trackdirect/server/log/heatmap.log

Javascript library (jslib)

If you do changes in the js library (jslib directory) you need to execute build.sh to deploy the changes to the htdocs directory.

~/trackdirect/jslib/build.sh

Adapt the website (htdocs)

For setting up a copy on your local machine for development and testing purposes you do not need to do anything, but for any other pupose I really recommend you to adapt the UI.

First thing to do is probably to add your map api keys, look for the string " " in the file "index.php". Note that the map providers used in the demo website may not be suitable if you plan to have a public website (read their terms of use).

If you make no changes, at least add contact information to yourself, I do not want to receive questions regarding your website.

Set up webserver

Webserver should already be up and running (if you installed all specified ubuntu packages).

Let's redirect the html-directory to our htdocs/public directory (requires "Options FollowSymLinks" to be enabled).

cd /var/www
sudo mv html html_old
sudo ln -s /home/xyz/trackdirect/htdocs html

To enable the use of the .htaccess files you need to edit the file /etc/apache2/sites-enabled/000-default.conf (or whatever it is called in your system), and add "AllowOverride All".


   
    
    ...
    DocumentRoot /home/xyz/trackdirect/htdocs/public
    AllowOverride All
    ...

   

Enable rewrite by running this command

sudo a2enmod rewrite

Restart apache

sudo systemctl restart apache2

For the symbols cache to work we need to make sure the webserver has write access to our htdocs/public/symbols directory (the following permission may be a little bit too generous...)

chmod 777 ~/trackdirect/htdocs/public/symbols

Deployment

If you want to set up a public website you should install a firewall and setup SSL certificates. For an easy solution I would use ufw to handle iptables, Nginx as a reverse proxy and use let’s encrypt for SSL certificates.

Stuff to start on boot

  • apache2
  • aprsc (see topic "Start aprsc server")
  • collector (see topic "Start the collectors")
  • wsserver (see topic "Start the websocket server")

Note that the collector and wsserver shell scripts can be scheduled to start once every minute (nothing will happen if it is already running). I even recommend doing this as the collector and websocket server are built to shut down if something serious goes wrong (eg lost connection to database).

Schedule things using crontab

We recommend that your schedule the heatmapcreator shell script to be executed once every hour. If you do not have infinite storage we recommend that you delete old packets, schedule the remover.sh script to be executed at least once every day.

Use cron!

10 * * * * ~/trackdirect/server/scripts/heatmapcreator.sh trackdirect.ini ~/trackdirect/htdocs/public/heatmaps
40 1 * * * ~/trackdirect/server/scripts/remover.sh trackdirect.ini

And again, if you are using OGN as data source you need to run the ogn_devices_install.sh script at least once every hour

0 * * * * ~/trackdirect/server/scripts/ogn_devices_install.sh trackdirect 5432

Server Requirements

How powerful server you need depends on what type of data source you are going to use. If you, for example, receive data from the APRS-IS network, you will probably need at least a server with 4 CPUs and 8 GB of RAM, but I recommend using a server with 8 CPUs and 16 GB of RAM.

TODO

  • Rewrite backend to use Python 3 instead of Python 2.
  • Create a REST-API and replace the current website example with a new frontend written in Angular.

Contribution

Contributions are welcome. Create a fork and make a pull request. Thank you!

Disclaimer

This software is provided "as is" and "with all it's faults". We do not make any commitments or guarantees of any kind regarding security, suitability, errors or other harmful components of this software. You are solely responsible for ensuring that data collected and published using this software complies with all data protection regulations. You are also solely responsible for the protection of your equipment and the backup of your data, and we will not be liable for any damages that you may suffer in connection with the use, modification or distribution of this software.

Comments
  • Update TrackDirect

    Update TrackDirect

    Hello, Per,

    I have installed the initial version of your TrackDirect program. It works great!

    Now I want to update his but I didn't find instructions on how to do it.

    Could you provide us a Bash-script to update TrackDirect?

    PS. Without installing docker, I don't need it.

    opened by T-Shilov 16
  • Severe memory leak detected

    Severe memory leak detected

    Hi Per,

    Unfortunately, in the process of using TrackDirect, a serious memory leak was discovered. RAM or swap partition for 6-7 days overflows every time and the system collapses. I've tried different combinations of swap partition volume and swappiness ratio 0 to 60, but it doesn't help. So far, I have temporarily switched to a daily reboot of the system, but this is not the best solution.

    Per, I very hope you will solve this annoying problem.

    memory-leak

    opened by T-Shilov 15
  • Show own symbol for paragliders

    Show own symbol for paragliders

    Show own symbol for paragliders In OGN database there are 9% paragliders and 0.6% hanggliders registered. They both are still sharing the same symbol (hangglider). The number of registered paragliders will increase. It is time to give paragliders an own symbol.

    image

    Paraglider

    opened by FlyingBird22 7
  • Python3 port

    Python3 port

    Things done (non exhaustive list):

    • move python requirements to requirements.txt (including aprs-python)
    • update docs for py3
    • fix some print()
    • references to python2 changed for python
    • singleton class calls fixes
    • removed some unused imports

    The map works, history seems too, I used the aprs-is network in a collector to get some datas for debugging and so far after one hour things seems ok for me.

    I have waiting for next PRs: working systemd unit files, nginx & php-fpm config & dockerfile

    opened by rhaamo 5
  • Character Encoding Error in Collector PacketBatchInserter.py

    Character Encoding Error in Collector PacketBatchInserter.py

    I have this setup and largely working well in a Ubuntu 20.04 container. Having one issue where it seems the collector is unable to process the UTF-8 characters coming from the aprsc server.

    The error is as follows:

    root@aprs:~# ~/trackdirect/server/scripts/collector.sh trackdirect.ini 0
    /usr/local/lib/python2.7/dist-packages/autobahn/wamp/auth.py:43: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
      from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
    2022-08-16 14:43:19,682 - trackdirect - WARNING - Starting (Collecting from 192.168.9.90:10152 using N2RWE-S and 10887)
    2022-08-16 14:43:19,686 - aprslib.IS - INFO - Attempting connection to 192.168.9.90:10152
    2022-08-16 14:43:19,686 - aprslib.IS - INFO - Connected to ('192.168.9.90', 10152)
    2022-08-16 14:43:19,711 - aprslib.IS - INFO - Sending login information
    2022-08-16 14:43:19,711 - aprslib.IS - INFO - Login successful
    2022-08-16 14:43:20,536 - trackdirect.collector.PacketBatchInserter - ERROR - 'ascii' codec can't encode character u'\xe9' in position 85: ordinal not in range(128)
    Traceback (most recent call last):
      File "/root/trackdirect/server/trackdirect/collector/PacketBatchInserter.py", line 184, in _insertIntoPacketTable
        "(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)", x) for x in datePacketTuples)
      File "/root/trackdirect/server/trackdirect/collector/PacketBatchInserter.py", line 184, in <genexpr>
        "(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)", x) for x in datePacketTuples)
    UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 85: ordinal not in range(128)
    

    Locales appear to be set properly for UTF8.

    root@aprs:~# locale
    LANG=en_US.UTF-8
    LANGUAGE=C.UTF-8
    LC_CTYPE="C.UTF-8"
    LC_NUMERIC="C.UTF-8"
    LC_TIME="C.UTF-8"
    LC_COLLATE="C.UTF-8"
    LC_MONETARY="C.UTF-8"
    LC_MESSAGES="C.UTF-8"
    LC_PAPER="C.UTF-8"
    LC_NAME="C.UTF-8"
    LC_ADDRESS="C.UTF-8"
    LC_TELEPHONE="C.UTF-8"
    LC_MEASUREMENT="C.UTF-8"
    LC_IDENTIFICATION="C.UTF-8"
    LC_ALL=C.UTF-8
    
    

    It doesn't matter if I use my own aprsc server or one of the T2 servers. I get the same error so I can safely rule out the server as being the issue.

    Unfortunately I am not a Python expert. Could it be that something is be missing in the Python2 setup instructions related to character set?

    opened by shackrat 4
  • Symbols of aprs objects on the map

    Symbols of aprs objects on the map

    I don’t understand what else needs to be done so that the symbols of aprs objects appear on the map? ( Any ideas? Any help. Thanks http://aprs.radiocult.su:8083/index.php

    opened by s-s-s 4
  • Address resolving failure of cwop.aprs.net

    Address resolving failure of cwop.aprs.net

    When I run docker-compose up I always get address resolving failures, it does not matter if I use APRS or CWOP. cwop.aprs.net does resolve just fine with dig ran from the command line.

    INFO: Uplink Core rotate: address resolving failure of 'cwop.aprs.net' '10152': No address associated with hostname aprsc_1 INFO: status: setting error flag no_uplink ttl 3600

    opened by chjohn22 3
  • "Use imperial units" is negated

    The "Use imperial units" checkbox is the other way around. When checked the numbers are not in imperial (m, km, km/h, ...), when not checked the numbers are in imperial (miles, ...).

    opened by peterus 2
  • Installation Process Works Nicely - Until Setup OGN Device Data

    Installation Process Works Nicely - Until Setup OGN Device Data

    I've tried to work through the installation routine up through the section on setting up the OGN data.

    It's very difficult to tell which user the script is supposed to be run as. There are Postgres authentication errors if you try to run the script as the regular user account you're logged into Ubuntu with. I've also tried creating a user account for "trackdirect", then using su to login as that user and run the ogn data script and get a similar error - the username specified is the same as the original account I was logged in as.

    Then, when I move on to trying to start the collector, I get the following error:

    /home/trackdirect/.local/lib/python2.7/site-packages/autobahn/wamp/auth.py:43: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
      from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
    2022-02-12 14:58:18,991 - trackdirect - WARNING - Starting (Collecting from 127.0.0.1:10152 using CALLSIGN and PASSCODE)
    2022-02-12 14:58:18,993 - trackdirect - ERROR - FATAL:  password authentication failed for user "USER"
    Traceback (most recent call last):
      File "./bin/collector.py", line 59, in <module>
        saveOgnStationsWithMissingIdentity)
      File "/home/trackdirect/trackdirect/server/trackdirect/TrackDirectDataCollector.py", line 52, in __init__
        self.db = dbConnection.getConnection(True)
      File "/home/trackdirect/trackdirect/server/trackdirect/database/DatabaseConnection.py", line 44, in getConnection
        DatabaseConnection.db = self._createNewConnection()
      File "/home/trackdirect/trackdirect/server/trackdirect/database/DatabaseConnection.py", line 66, in _createNewConnection
        cursor_factory=psycopg2.extras.DictCursor)
      File "/home/trackdirect/.local/lib/python2.7/site-packages/psycopg2/__init__.py", line 127, in connect
        conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
    OperationalError: FATAL:  password authentication failed for user "USER"```
    
    Did anyone actually go through the set up routine and follow these instructions step-by-step? I've repeated the steps several times, each time rolling back the Ubuntu Server 20.04 VM I'm trying to the installation on back to a freshly installed image. I consistently run into the same issues.
    opened by W4JEW 2
  • Docker Config Is Not Valid for Ubuntu 20.04

    Docker Config Is Not Valid for Ubuntu 20.04

    I keep running into dead-ends with each iteration of trying to install the code in this repository.

    The documentation starts by saying that it's for Ubuntu 20.04 and that's exactly what I am running.

    I've tried with both the version of Docker (docker.io) included in the Ubuntu repository as well as installing Docker from the official Docker repository (docker-ce), along with containerd, and docker-compose. Neither of them work with the docker-compose.yml file that is included.

    Any time I run docker-compose, I get the following error:

    ERROR: Version in "./docker-compose-rel.yml" is unsupported. You might be seeing this error because you're using the wrong Compose file version. Either specify a supported version (e.g "2.2" or "3.3") and place your service definitions under the `services` key, or omit the `version` key and place your service definitions at the root of the file to use version 1. For more on the Compose file format versions, see https://docs.docker.com/compose/compose-file/

    opened by W4JEW 2
  • Add docker support

    Add docker support

    What is the change:

    • rename db file to add numbers to front for simpler table population in docker container
    • move aprsc config file to config directory
    • add heatmap folder to docker-/git-ignore
    • add dockerfiles and docker-compose files
    • add docker-compose file for pre-compiled images
    • update readme
    opened by peterus 2
  • Image missing on dockerhub?

    Image missing on dockerhub?

    Pulling websocket (peterus/trackdirect-python:latest)... ERROR: pull access denied for peterus/trackdirect-python, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

    Maybe @peterus is working on the Python3 update?

    I tried to install with docker-compose two weeks ago, failed due to something, probably old docker-compose (only accepting Ver 3.3). Went back to continue the fight, but now it fails to find the peterus/trackdirect-python image on dockerhub. (https://hub.docker.com/u/peterus)

    opened by sm3sgp 1
  • filter station on gliderradar

    filter station on gliderradar

    Hi,

    on gliderradar, by filtering on an object, the trace ( graph history ) disappears. if i reset the filtering, the trace reappears with the others glider. ( i can't filter on one glider )

    Thanks

    opened by michael067 0
  • Wind speed/direction parsing broken with aprs-python 0.7.2

    Wind speed/direction parsing broken with aprs-python 0.7.2

    The aprs-python devs made a tweak to weather parsing in 0.7.2 released in July that appears to be specifically targeted to CWOP stations using the underscore (_) symbol. In aprs-python 0.7.2 parsing returns a packet with packet.weather.windSpeed and packet.weather.windDirection set as null, instead wind speed is parsed to packet.speed and wind direction to packet.course.

    This behavior appears to only impact CWOP stations.

    Reverting to aprs-python 0.7.1 fixes the issue and wind speed/direction are parsed correctly.

    opened by shackrat 0
  • Idea: see climb rate and also height AGL in popup menu

    Idea: see climb rate and also height AGL in popup menu

    Not an issue but a nice to have would be to see climb rate and also height AGL in popup menu, This is an example from another webclient: https://glidertracker.de/: Christoph14 - glidertracker Compared to what we have right now: Christoph14 - gliderradar

    What do you think about that? May be I could give this a try at your code?

    opened by FlyingBird22 1
Owner
Per Qvarforth
Per Qvarforth
x-tools is a collection of tools developed in Python

x-tools X-tools is a collection of tools developed in Python Commands\

null 5 Jan 24, 2022
run-js Goal: The Easiest Way to Run JavaScript in Python

run-js Goal: The Easiest Way to Run JavaScript in Python features Stateless Async JS Functions No Intermediary Files Functional Programming CommonJS a

Daniel J. Dufour 9 Aug 16, 2022
A collection of UIKit components that can be used as a Wagtail StreamField block.

Wagtail UIKit Blocks A collection of UIKit components that can be used as a Wagtail StreamField block. Available UIKit components Container Grid Headi

Krishna Prasad K 13 Dec 15, 2022
This repo will have a small amount of Chrome tools that can be used for DFIR, Hacking, Deception, whatever your heart desires.

Chrome-Tools Overview Welcome to the repo. This repo will have a small amount of Chrome tools that can be used for DFIR, Hacking, Deception, whatever

null 5 Jun 8, 2022
You can easily send campaigns, e-marketing have actually account using cash will thank you for using our tools, and you can support our Vodafone Cash +201090788026

*** Welcome User Sorry I Mean Hello Brother ✓ Devolper and Design : Mokhtar Abdelkreem ========================================== You Can Follow Us O

Mo Code 1 Nov 3, 2021
Tools for dos (denial-of-service) website / web server

DoS Attack Tools Tools for dos (denial-of-service) website / web server di buat olah NurvySec How to install on debian / ubuntu $ apt update $ apt ins

nurvy 1 Feb 10, 2022
This is a multi-app executor that it used when we have some different task in a our applications and want to run them at the same time

This is a multi-app executor that it used when we have some different task in a our applications and want to run them at the same time. It uses SQLAlchemy for ORM and Alembic for database migrations.

Majid Iranpour 5 Apr 16, 2022
Chess bot can play automatically as white or black on lichess.com, chess.com and any website using drag and drop to move pieces

Chessbot "Why create another chessbot ?" The explanation is simple : I did not find a free bot I liked online : all the bots I saw on internet are par

Dhimas Bagus Prayoga 2 Nov 11, 2021
Script to use SysWhispers2 direct system calls from Cobalt Strike BOFs

SysWhispers2BOF Script to use SysWhispers2 direct system calls from Cobalt Strike BOFs. Introduction This script was initially created to fix specific

FalconForce 101 Dec 20, 2022
Direct Multi-view Multi-person 3D Human Pose Estimation

Implementation of NeurIPS-2021 paper: Direct Multi-view Multi-person 3D Human Pose Estimation [paper] [video-YouTube, video-Bilibili] [slides] This is

Sea AI Lab 253 Jan 5, 2023
Tool for working with Direct System Calls in Cobalt Strike's Beacon Object Files (BOF) via Syswhispers2

Tool for working with Direct System Calls in Cobalt Strike's Beacon Object Files (BOF) via Syswhispers2

null 150 Dec 31, 2022
ChainJacking is a tool to find which of your Go lang direct GitHub dependencies is susceptible to ChainJacking attack.

ChainJacking is a tool to find which of your Go lang direct GitHub dependencies is susceptible to ChainJacking attack.

Checkmarx 36 Nov 2, 2022
Bootstraparse is a personal project started with a specific goal in mind: creating static html pages for direct display from a markdown-like file

Bootstraparse is a personal project started with a specific goal in mind: creating static html pages for direct display from a markdown-like file

null 1 Jun 15, 2022
MiniJVM is simple java virtual machine written by python language, it can load class file from file system and run it.

MiniJVM MiniJVM是一款使用python编写的简易JVM,能够从本地加载class文件并且执行绝大多数指令。 支持的功能 1.从本地磁盘加载class并解析 2.支持绝大多数指令集的执行 3.支持虚拟机内存分区以及对象的创建 4.支持方法的调用和参数传递 5.支持静态代码块的初始化 不支

keguoyu 60 Apr 1, 2022
This is the Quiz that I made using Python Programming Language. This can only run in the Terminal

This is the Quiz that I made using Python Programming Language. This can only run in the Terminal

YOSHITHA RATHNAYAKE 1 Apr 8, 2022
Blender addons - A collection of Blender tools I've written for myself over the years.

gret A collection of Blender tools I've written for myself over the years. I use these daily so they should be bug-free, mostly. Feel free to take and

null 217 Jan 8, 2023
Astroquery is an astropy affiliated package that contains a collection of tools to access online Astronomical data.

Astroquery is an astropy affiliated package that contains a collection of tools to access online Astronomical data.

The Astropy Project 631 Jan 5, 2023
A collection of simple tools that proved to be needed for hadling large periodic calculations with the VASP software package.

VESTA-tools A collection of simple tools that proved to be needed for handling large periodic calculations with the VASP software package. distTotCalc

Ilia Kichev 2 Dec 14, 2021
Collection of tools to be more productive in your work environment and to avoid certain repetitive tasks. 💛💙💚

Collection of tools to be more productive in your work environment and to avoid certain repetitive tasks. ??????

Raja Rakotonirina 2 Jan 10, 2022