All Projects → camilleg → clockkit

camilleg / clockkit

Licence: MIT license
Sub-msec accurate distributed timestamps.

Programming Languages

C++
36643 projects - #6 most used programming language
ruby
36898 projects - #4 most used programming language
shell
77523 projects
c
50402 projects - #5 most used programming language
Makefile
30231 projects
python
139335 projects - #7 most used programming language
tcl
693 projects

Projects that are alternatives of or similar to clockkit

Desktop
A comprehensive solution for convenient and efficient work with notes, snippets, clipboard, files, and other information that requires quick access via any device.
Stars: ✭ 123 (+161.7%)
Mutual labels:  linux-app, windows-app
Librefox
License: Mozilla Public License 2.0
Stars: ✭ 1,574 (+3248.94%)
Mutual labels:  linux-app, windows-app
openvr widgets
SteamVR overlay widgets
Stars: ✭ 20 (-57.45%)
Mutual labels:  linux-app, windows-app
erk
Ərk is an open source, cross-platform IRC client written in Python 3, Qt 5, and Twisted.
Stars: ✭ 21 (-55.32%)
Mutual labels:  linux-app, windows-app
ets2-job-logger
ETS2 Job Logger
Stars: ✭ 15 (-68.09%)
Mutual labels:  linux-app, windows-app
Steamtools
🛠「Steam++」是一个开源跨平台的多功能Steam工具箱。
Stars: ✭ 4,458 (+9385.11%)
Mutual labels:  linux-app, windows-app
Beekeeper Studio
Modern and easy to use SQL client for MySQL, Postgres, SQLite, SQL Server, and more. Linux, MacOS, and Windows.
Stars: ✭ 8,053 (+17034.04%)
Mutual labels:  linux-app, windows-app
lifer
Windows link file forensic examiner
Stars: ✭ 58 (+23.4%)
Mutual labels:  linux-app, windows-app
sage
💸 Download from your banks and credit cards straight to your computer
Stars: ✭ 51 (+8.51%)
Mutual labels:  linux-app, windows-app
Moonlight Qt
GameStream client for PCs (Windows, Mac, Linux, and Steam Link)
Stars: ✭ 2,796 (+5848.94%)
Mutual labels:  linux-app, windows-app
MaCoPiX
Mascot Constructive Pilot for X
Stars: ✭ 57 (+21.28%)
Mutual labels:  linux-app, windows-app
antares
A modern, fast and productivity driven SQL client with a focus in UX.
Stars: ✭ 836 (+1678.72%)
Mutual labels:  linux-app, windows-app
ign-sensors
Provides numerous sensor models designed to generate realistic data from simulation environments.
Stars: ✭ 30 (-36.17%)
Mutual labels:  sensors
format-date
📆 A small library (around 400 B when gziped & minified) to format JavaScript `Date` object using same tokens as moment.
Stars: ✭ 25 (-46.81%)
Mutual labels:  timestamp
owlos
DIY Open Source OS for building IoT ecosystems
Stars: ✭ 43 (-8.51%)
Mutual labels:  sensors
smartcitizen-web
The Smart Citizen Kit platform
Stars: ✭ 13 (-72.34%)
Mutual labels:  sensors
AndroidPersistentSensors
An example service which keeps getting sensor events even after the screen turns off.
Stars: ✭ 33 (-29.79%)
Mutual labels:  sensors
ESOLinuxAddonManager
[MIRROR] Elder Scrolls Online addon downloader, for Linux! Check the link below for the development repo which has the releases and issuetracker.
Stars: ✭ 25 (-46.81%)
Mutual labels:  linux-app
roc engine
Simple and light-weight 3D game engine
Stars: ✭ 49 (+4.26%)
Mutual labels:  windows-app
FM-JSON-Types
FileMaker Data Types in JSON
Stars: ✭ 14 (-70.21%)
Mutual labels:  timestamp

Clockkit provides timestamps to distributed networked PCs with guaranteed bounds on latency and jitter, typically under 10 microseconds, as described in the conference paper Synchronous data collection from diverse hardware.

It runs on Linux, Windows, and Raspi, and needs neither extra hardware nor elevated privileges.

It includes bindings for Python, Ruby, and TCL. It also has a Rust API.

It can measure a system's realtime behavior, by providing a common time reference for events recorded by different sensors (audio, video, gamepad, GPS, SMS, MIDI, biometrics), and for triggering outputs (audio, video, LEDs, servos, motion bases).
It did this originally for a full-motion driving simulator with eye tracking and a quickly churning set of other sensors and outputs, for over a decade.

Clockkit was published in 2004 on http://zx81.isl.uiuc.edu/camilleg/clockkit (defunct).
It was revised and moved to GitHub in 2020.

The source code is licensed under the MIT License.

To install:

Ubuntu 22

sudo apt install g++ libpython3.10-dev make pkgconf ruby ruby3.0-dev swig tcl8.6-dev
cd ClockKit && make

Ubuntu 20

sudo apt install g++ libpython3.8-dev make pkg-config psmisc ruby ruby2.7-dev swig tcl8.6-dev
cd ClockKit && make

Ubuntu 18
Raspberry Pi 3 and 4 (Debian/Raspbian)

sudo apt install g++ libpython3.8-dev make pkg-config psmisc ruby ruby2.5-dev swig tcl tcl8.6-dev
cd ClockKit && make

Windows 10

Install Windows Subsystem for Linux, using the Ubuntu 18 or Ubuntu 20 distro.
sudo apt install tcl
Proceed as with Ubuntu 18 or 20.
(Native builds for older versions of Windows may return, but no older than XP.)

To test on localhost:

cd ClockKit && make test

To sync host B to host A:

On host A, ckserver <address to bind to> <port>
On host B:

  • cp clockkit.conf my-clockkit.conf
  • Edit my-clockkit.conf. Set the server to host A, e.g., 192.168.1.1 or myhost.example.com. Set the port to 4567, or whatever port you told ckserver to use.
  • ./ckphaselock my-clockkit.conf
    (make test-remote automates this, using an ssh key.)

Of course, these steps for host B can be repeated on other hosts C, D, E,... to sync them all. Remember that "syncing" here means providing synchronized timestamps, not adjusting the hosts' own clocks.

To plot performance:

sudo apt install gnuplot
cd simulation && make

To cite:

Camille Goudeseune and Braden Kowitz. 2004. "Synchronous data collection from diverse hardware."
Driving Simulation Conference - Europe (Conférence Simulation de Conduite), pp. 245-252.

Contributing

The project is currently undergoing significant changes. Contributions of any form are welcome nonetheless.

  • To maintain the formatting style, sudo apt install clang-format, and use clang-format through the provided git hook:
    git config core.hooksPath .git_managed_hooks
  • New code should follow the C++ Core Guidelines.
  • For profiling and code coverage, sudo apt install gcovr. See also man gcovr.
    To collect and print statistics, make clean && make profile, run some tests (but not test-bindings), gcovr.
    To reset statistics before another profile, make purge.
    To cease profiling, make purge && make.

Roadmap

When this software launched in 2004, lab software was pretty much restricted to desktop OSes. But by now, labs and makerspaces use many more software development environments, especially for hardware I/O: Arduino, musl, Raspi, and smartphones to name a few. The choice of mature scripting languages has grown similarly.

Also, private wired 10baseT subnets have been pretty much replaced by WLAN, with much more bandwidth but less predictable performance.

Finally, since 2004, C++ standards have improved and software engineering in general has matured.

Therefore, these steps are proposed.

  • Keep modernizing the code.
  • Clean up the interface to other languages.
  • Implement integration testing.
  • Make reproducible performance tests for some use cases.
  • Extend multiplatform support beyond POSIX, for other microarchitectures.
  • For some use cases, reduce energy consumption, file size, bandwidth.
  • To better exploit the strengths and manage the weaknesses of WLAN, replace the generic network stack's lower OSI layers with specific ones for Wi-Fi, Bluetooth LE, Zigbee, 6LoWPAN, etc.
  • Throughout all these, insert optimization passes.
  • Explore more distant use cases that need clock sync, such as high performance computing, logfile evaluation, and security breach detection.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].