Time-series database

Overview

README Build Status Coverity Scan Build Status

Akumuli is a time-series database for modern hardware. It can be used to capture, store and process time-series data in real-time. The word "akumuli" can be translated from Esperanto as "accumulate".

Features

  • Column-oriented storage.
  • Based on novel LSM and B+tree hybrid datastructure with multiversion concurrency control (no concurrency bugs, parallel writes, optimized for SSD and NVMe).
  • Supports both metrics and events.
  • Fast and effecient compression algorithm that outperforms 'Gorilla' time-series compression.
  • Crash safety and recovery.
  • Fast aggregation without pre-configured rollups or materialized views.
  • Many queries can be executed without decompressing the data.
  • Compressed in-memory storage for recent data.
  • Can be used as a server application or embedded library.
  • Simple API based on JSON and HTTP.
  • Fast range scans and joins, read speed doesn't depend on database cardinality.
  • Fast data ingestion:
    • 5.4M writes/sec on DigitalOcean droplet with 8-cores 32GB of RAM (using only 6 cores)
    • 4.6M writes/sec on DigitalOcean droplet with 8-cores 32GB of RAM (6 cores with enabled WAL)
    • 16.1M writes/sec on 32-core Intel Xeon E5-2680 v2 (c3.8xlarge EC2 instance).
  • Queries are executed lazily. Query results are produced as long as client reads them.
  • Compression algorithm and input parsers are fuzz-tested on every code change.
  • Grafana datasource plugin.
  • Fast and compact inverted index for time-series lookup.

Roadmap

Storage engine features Current version Future versions
Inserts In order Out of order
Updates - +
Deletes - +
MVCC + +
Compression + +
Tags + +
High-throughput ingestion + +
High cardinality + +
Crash recovery + +
Incremental backup - +
Clustering - +
Replication - +
ARM support + +
Windows support - +
Query language features Current version Future versions
Range scans + +
Merge series + +
Aggregate series + +
Merge & aggregate + +
Group-aggregate + +
Group-aggregate & merge + +
Join + +
Join & merge - +
Join & group-aggregate - +
Join & group-aggregate & merge - +
Filter by value + +
Filter & group-aggregate + +
Filter & join + +

Gettings Started

Supported Platforms

Akumuli supports 64 and 32-bit Intel processors. It also works on 64 and 32-bit ARM processors but these architectures are not covered by continous integration.

Pre-built Debian/RPM packages for the following platforms are available via packagecloud:

  • AMD 64 Ubuntu 14.04
  • AMD 64 Ubuntu 16.04
  • AMD 64 Ubuntu 18.04
  • AMD 64 Debian Jessie
  • AMD 64 Debian Stretch
  • AMD 64 CentOS 7
  • ARM 64 Ubuntu 16.04
  • ARM 64 Ubuntu 18.04
  • ARM 64 CentOS 7

Docker image is availabe through Docker Hub.

Tools for monitoring

Akumuli supports OpenTSDB telnet-style API for writing. This means that many collectors works with it without any trouble, for instance netdata, collectd, and tcollector. Grafana datasource plugin is availabe as well. Akumuli can be used as a long-term storage for Prometheus using akumuli-prometheus-adapter.

Google group

Comments
  • Support InfluxDb line protocol (HTTP and UDP) for data ingestion

    Support InfluxDb line protocol (HTTP and UDP) for data ingestion

    It would be good to support this in addition to Collector. I think InfluxDb popularity is higher because of its simplicity to ingest data. This would also allow migration from InfluxDB when needed much easier. Another option is support Prometheus format, so at least recognized TSDB protocol can be used.

    opened by dmitrios 36
  • Query timeout when using csv format

    Query timeout when using csv format

    Consider the following query { "group-aggregate": { "metric": "processor_time", "step": "1m", "func": ["max","min"] }, "range": { "from": "20180330T165816.8479803","to": "20180330T165916.8479803"}, "output": { "format": "csv","timestamp": "raw" }, "limit" : "100", "order-by":"series", "apply":[] } Steps to repro: docker run --name aku -d -p 8181:8181 -p 8282:8282 -p 8383:8383/udp -p 4242:4242 \ -v /Akumuli -e nvolumes='1' \ -e volume_size='1GB' akumuli/akumuli:skylake Expected result: non-empty dataset. Actual result: timeout

    Same environment, using older version of Akumuli: docker run --name aku -d -p 8181:8181 -p 8282:8282 -p 8383:8383/udp -p 4242:4242 \ -v /Akumuli -e nvolumes='1' \ -e volume_size='1GB' akumuli/test:fix_signal_prop Expected result: non-empty dataset. Actual result: non-empty dataset.

    Is it correct to expect that new versions of Akumuli are backward compatible? Also, the current versioning for docker images violates best practices and does not allow rollback to last stable version. Consider something like: akumuli/akumuli:0.2.4-skylake akumuli/akumuli:0.2.3-skylake

    With current versioning everyone who uses Akumuli on Kubernetes in this scenario would have broken environment.

    bug enhancement 
    opened by dmitrios 25
  • Doubt  regarding size of the volumes

    Doubt regarding size of the volumes

    As per our configuration( ~/.akumulid), nvolumes=4. This allocates 4 volumes of 4GB size each for db storage.

    This get filled around 42000 data samples and Akumuli service get crashed when trying for further writing.. What is the recommended approach to solve this issue... Should be increase the number of volume and is there any way to increase the datasize of a volume

    opened by ssathasivan 21
  • Nanosecond resolution and compile options

    Nanosecond resolution and compile options

    Hello, I'm new to Akumuli, I've built it from source, and doing some tests I got some "-DB late write" replies. After some investigation, I found that boost::posix_time::time_duration() in datetime.cpp in "from_iso_string()" returned incoherent values when giving nanosecond timestamps. For example when sending: b'+test sensor=dummy\r\n+20190222T110923.602227\r\n+1234\r\n' it returned: 00:00:40.765227000 : hours and minutes were gone... I found that BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG was defined, and according to the documentation (https://www.boost.org/doc/libs/1_31_0/libs/date_time/doc/BuildInfo.html): " This alternative implementation may provide better performance and more compact memory usage for many applications that do not require nano-second resolutions. " But I require at least milliseconds, so this portion of the code is required in my case. I'm not sure the problem is BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG, I've not tested a compiled version where it is undefined yet. But in any case (even If this is my error not defining the correct compile options) I think it would make sense to add a test to display this specific error in the logs, for example: if (p != pend) { #ifdef BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG Logger::msg(AKU_LOG_ERROR, "nanosecond resolution cannot be used when BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG is defined as a compiler option"); #endif because the response "-DB late write" alone, without any further errors in the logs, got me confused when debugging this.

    opened by JoelStienlet 17
  • Unable to start docker version

    Unable to start docker version

    After following instructions from https://hub.docker.com/r/akumuli/akumuli/ (with minor replacement of akumuli/akumuli to akumuli/akumuli:master in second command), container fails with following

    WARNING: DB is not exist. creating
    /root/akumuli.sh: line 32:    12 Illegal instruction     (core dumped) ${AKUMULID} --create
    

    I have been so far unable to extract coredump (and after some googling, it may seem that there is chance that no has been created). Is this known bug?

    Version: 8fc6fbabf304e1dd9db69414e5fbdffac946c743 (current master) OS: Archlinux (Linux 4.14.12-1-ARCH) on VPS x86_64

    opened by Tezar 10
  • Unable to install Akumuli on ubuntu 16.04

    Unable to install Akumuli on ubuntu 16.04

    I am trying to install Akumuli on Ubuntu 16.04 ... Got the latest version of code and followed instructions in https://github.com/akumuli/Akumuli/wiki/Getting-started

    The command sudo apt-get install log4cxx is failing telling that log4cxx could not be found...

    Hence i am not able to build akumuli...

    Can any one please help

    opened by ssathasivan 10
  • broken pipe error

    broken pipe error

    We are testing akumuli for a use cases of ours . We are collecting analog and digital signals from tools and are planning to use the data for health monitoring. A tool generates 8000 records per second . Each record contains 50 analog and 50 digital signals . We are using GoLang program that collects data for 1 second and send it to AKumuli . A single data sample looks like this

    +50a0|50a1|50a2|50a3|50a4|50a5|50a6|50a7|50a8|50a9|50a10|50a11|50a12|50a13|50a14|50a15|50a16|50a17|50a18|50a19|50a20|50a21|50a22|50a23|50a24|50a25|50a26|50a27|50a28|50a29|50a30|50a31|50a32|50a33|50a34|50a35|50a36|50a37|50a38|50a39|50a40|50a41|50a42|50a43|50a44|50a45|50a46|50a47|50a48|50a49|50d0|50d1|50d2|50d3|50d4|50d5|50d6|50d7|50d8|50d9|50d10|50d11|50d12|50d13|50d14|50d15|50d16|50d17|50d18|50d19|50d20|50d21|50d22|50d23|50d24|50d25|50d26|50d27|50d28|50d29|50d30|50d31|50d32|50d33|50d34|50d35|50d36|50d37|50d38|50d39|50d40|50d41|50d42|50d43|50d44|50d45|50d46|50d47|50d48|50d49 tag=42253\r\n+20170909T120643.99126436\r\n*100\r\n:8829\r\n:5805\r\n:6424\r\n:5077\r\n:1173\r\n:447\r\n:1803\r\n:5797\r\n:4104\r\n:1039\r\n:5715\r\n:7780\r\n:5184\r\n:5005\r\n:1472\r\n:6054\r\n:1288\r\n:4721\r\n:5392\r\n:6169\r\n:1882\r\n:9619\r\n:8404\r\n:3820\r\n:9941\r\n:1471\r\n:8069\r\n:7170\r\n:6585\r\n:4713\r\n:4925\r\n:7408\r\n:3805\r\n:5710\r\n:1480\r\n:8777\r\n:1684\r\n:8057\r\n:194\r\n:627\r\n:195\r\n:132\r\n:8717\r\n:5699\r\n:9315\r\n:4834\r\n:7766\r\n:496\r\n:6676\r\n:5737\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n:0\r\n:1\r\n

    We are sending such 8000 message at end of one second... However after sometime insertion fails with error - broken pipe

    Any help is appreciated

    opened by ssathasivan 9
  • Building Akumuli on Raspberry Pi 3

    Building Akumuli on Raspberry Pi 3

    Hi Folks,

    I try to build Akumuli on Raspberry Pi 3 of which the OS is raspbian/jessie, and have got this error:

    /usr/include/c++/4.9/atomic:685:7: error: ‘constexpr’ does not name a type constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } ^ /usr/include/c++/4.9/atomic:685:7: note: C++11 ‘constexpr’ only available with -std=c++11 or -std=gnu++11 /usr/include/c++/4.9/atomic:698:14: error: expected ‘;’ at end of member declaration atomic() noexcept = default; ^ /usr/include/c++/4.9/atomic:698:16: error: ‘noexcept’ does not name a type atomic() noexcept = default;

    Is there any way to fix it? Thanks.

    opened by wjj7yj 8
  • Add option that allows to pre-allocate disk space during DB creation process

    Add option that allows to pre-allocate disk space during DB creation process

    This can be done using fallocate linux syscall or posix_fallocate. There is a function Storage::new_database in storage2.cpp that is used to create volumes. Extra parameter to aku_create_database_ex that controls this behavior should be introduced.

    low-difficulty 
    opened by Lazin 8
  • Performance comparison with Prometheus

    Performance comparison with Prometheus

    Prometheus 2.0 has brought lot of improvements to its storage layer. https://coreos.com/blog/prometheus-2.0-storage-layer-optimization . Have you done any performance comparison to Prometheus?

    opened by jh0ni 7
  • Segfault on creating a volume?

    Segfault on creating a volume?

    I am trying to use libakumuli to store binary data with high throughput on my machine (think real-time monitoring of a hardware system). I noticed that the tutorial for libakumuli is slightly out of date but I created this example:

    int main()
    {
      auto volsize = 10*1024*1024;
    
      apr_status_t result = aku_create_database_ex("db", "/tmp", "/tmp", 4, volsize);
      std::cout << result << std::endl;
      aku_FineTuneParams params = {
        0,
        nullptr,
        0,
        4,
        1000,
        0x1000000,
        1000000
      };
    
      aku_Database* db = aku_open_database("/tmp/test.akumuli", params);
      aku_Session* session = aku_create_session(db);
      aku_destroy_session(session);
      aku_close_database(db);
      return 0;
    }
    

    Which segfaults on create_database_ex... Where have I gone wrong? As all the tests are passing, I suspect that I am doing something bad with this call.

    Note: I am on stock Ubuntu 14.04. Full backtrace:

    Program received signal SIGSEGV, Segmentation fault.
    0x00007ffff6f75fcd in apr_pool_create_ex () from /usr/lib/x86_64-linux-gnu/libapr-1.so.0
    (gdb) bt
    #0  0x00007ffff6f75fcd in apr_pool_create_ex () from /usr/lib/x86_64-linux-gnu/libapr-1.so.0
    #1  0x00007ffff7a415eb in Akumuli::StorageEngine::_make_apr_pool() () from libakumuli.so
    #2  0x00007ffff7a41832 in Akumuli::StorageEngine::_create_file(char const*, unsigned long) ()
       from libakumuli.so
    #3  0x00007ffff7a422f3 in Akumuli::StorageEngine::Volume::create_new(char const*, unsigned long) ()
       from libakumuli.so
    #4  0x00007ffff7a357a8 in Akumuli::StorageEngine::FixedSizeFileStorage::create(std::string, std::vector<std::tuple<unsigned int, std::string>, std::allocator<std::tuple<unsigned int, std::string> > >) ()
       from libakumuli.so
    #5  0x00007ffff7a13555 in Akumuli::Storage::new_database(char const*, char const*, char const*, int, unsigned long) () from libakumuli.so
    #6  0x00007ffff79c981b in aku_create_database_ex () from libakumuli.so
    #7  0x0000000000400c72 in main () at main_akumuli.cpp:12
    
    opened by haudren 7
  • Fix compatibility with the current libmicrohttpd version

    Fix compatibility with the current libmicrohttpd version

    // https://github.com/macports/macports-ports/pull/8941/files
    // Beginning with v0.9.71, libmicrohttpd changed the return type
    // of most functions from int to enum MHD_Result
    // https://git.gnunet.org/gnunet.git/tree/src/include/gnunet_mhd_compat.h
    // proposes to define a constant for the return type so it works well
    // with all versions of libmicrohttpd
    

    The PR fixes compatibility with the current version of libmicrohttpd.

    opened by barracuda156 1
  • Add ppc and ppc64 to CMakeLists

    Add ppc and ppc64 to CMakeLists

    PR adds missing PPC archs to CMakeLists.txt. Embedded assembly has to be disabled for PPC, otherwise the build fails on:

    /opt/local/var/macports/build/_opt_PPCRosettaPorts_databases_Akumuli/Akumuli/work/Akumuli-0.8.80/libakumuli/crc32c.cpp:323:5: error: unknown register name '%edx' in 'asm'
      323 |     __asm__("cpuid"
          |     ^~~~~~~
    /opt/local/var/macports/build/_opt_PPCRosettaPorts_databases_Akumuli/Akumuli/work/Akumuli-0.8.80/libakumuli/crc32c.cpp:323:5: error: unknown register name '%ebx' in 'asm'
    {standard input}:465:Invalid mnemonic 'crc32b'
    {standard input}:479:Invalid mnemonic 'crc32q'
    {standard input}:480:Invalid mnemonic 'crc32q'
    {standard input}:481:Invalid mnemonic 'crc32q'
    {standard input}:504:Invalid mnemonic 'crc32q'
    {standard input}:505:Invalid mnemonic 'crc32q'
    {standard input}:506:Invalid mnemonic 'crc32q'
    {standard input}:522:Invalid mnemonic 'crc32q'
    {standard input}:528:Invalid mnemonic 'crc32b'
    make[2]: *** [unittests/CMakeFiles/test_util.dir/__/libakumuli/crc32c.cpp.o] Error 1
    
    opened by barracuda156 0
  • Add missing includes to storage2.cpp and eval.cpp

    Add missing includes to storage2.cpp and eval.cpp

    This PR adds #include <array> to eval.cpp and #include <stack> to storage2.cpp for MacOS build.

    See: https://github.com/akumuli/Akumuli/issues/382

    opened by barracuda156 0
  • CMakeLists use C++11, but std::shared_lock and std::shared_mutex are only available in C++14 and C++17, respectively

    CMakeLists use C++11, but std::shared_lock and std::shared_mutex are only available in C++14 and C++17, respectively

    Apparently C++17 should be used to build Akumuli. Look at these errors:

    In file included from /opt/local/include/log4cxx/log4cxx.h:60,
                     from /opt/local/include/log4cxx/logstring.h:28,
                     from /opt/local/include/log4cxx/spi/appenderattachable.h:26,
                     from /opt/local/include/log4cxx/helpers/appenderattachableimpl.h:27,
                     from /opt/local/include/log4cxx/logger.h:30,
                     from /opt/local/var/macports/build/_opt_PPCRosettaPorts_databases_Akumuli/Akumuli/work/Akumuli-0.8.80/unittests/../akumulid/logger.h:21,
                     from /opt/local/var/macports/build/_opt_PPCRosettaPorts_databases_Akumuli/Akumuli/work/Akumuli-0.8.80/unittests/../akumulid/storage_api.h:26,
                     from /opt/local/var/macports/build/_opt_PPCRosettaPorts_databases_Akumuli/Akumuli/work/Akumuli-0.8.80/unittests/test_protocolparser.cpp:9:
    /opt/local/include/log4cxx/boost-std-configuration.h:10:18: error: 'shared_mutex' in namespace 'std' does not name a type
       10 |     typedef std::shared_mutex shared_mutex;
          |                  ^~~~~~~~~~~~
    /opt/local/include/log4cxx/boost-std-configuration.h:10:13: note: 'std::shared_mutex' is only available from C++17 onwards
       10 |     typedef std::shared_mutex shared_mutex;
          |             ^~~
    /opt/local/include/log4cxx/boost-std-configuration.h:12:30: error: 'shared_lock' in namespace 'std' does not name a template type
       12 |     using shared_lock = std::shared_lock<T>;
          |                              ^~~~~~~~~~~
    /opt/local/include/log4cxx/boost-std-configuration.h:12:25: note: 'std::shared_lock' is only available from C++14 onwards
       12 |     using shared_lock = std::shared_lock<T>;
          |                         ^~~
    /opt/local/include/log4cxx/logger.h:1729:25: error: 'shared_mutex' does not name a type
     1729 |                 mutable shared_mutex mutex;
          |                         ^~~~~~~~~~~~
    In file included from /opt/local/include/log4cxx/log4cxx.h:60,
                     from /opt/local/include/log4cxx/logstring.h:28,
                     from /opt/local/include/log4cxx/spi/appenderattachable.h:26,
                     from /opt/local/include/log4cxx/helpers/appenderattachableimpl.h:27,
                     from /opt/local/include/log4cxx/logger.h:30,
                     from /opt/local/var/macports/build/_opt_PPCRosettaPorts_databases_Akumuli/Akumuli/work/Akumuli-0.8.80/akumulid/logger.h:21,
                     from /opt/local/var/macports/build/_opt_PPCRosettaPorts_databases_Akumuli/Akumuli/work/Akumuli-0.8.80/akumulid/protocolparser.h:26,
                     from /opt/local/var/macports/build/_opt_PPCRosettaPorts_databases_Akumuli/Akumuli/work/Akumuli-0.8.80/akumulid/protocolparser.cpp:1:
    /opt/local/include/log4cxx/boost-std-configuration.h:10:18: error: 'shared_mutex' in namespace 'std' does not name a type
       10 |     typedef std::shared_mutex shared_mutex;
          |                  ^~~~~~~~~~~~
    /opt/local/include/log4cxx/boost-std-configuration.h:10:13: note: 'std::shared_mutex' is only available from C++17 onwards
       10 |     typedef std::shared_mutex shared_mutex;
          |             ^~~
    /opt/local/include/log4cxx/boost-std-configuration.h:12:30: error: 'shared_lock' in namespace 'std' does not name a template type
       12 |     using shared_lock = std::shared_lock<T>;
          |                              ^~~~~~~~~~~
    /opt/local/include/log4cxx/boost-std-configuration.h:12:25: note: 'std::shared_lock' is only available from C++14 onwards
       12 |     using shared_lock = std::shared_lock<T>;
          |                         ^~~
    /opt/local/include/log4cxx/logger.h:1729:25: error: 'shared_mutex' does not name a type
     1729 |                 mutable shared_mutex mutex;
          |                         ^~~~~~~~~~~~
    In file included from /opt/local/include/log4cxx/log4cxx.h:60,
                     from /opt/local/include/log4cxx/logstring.h:28,
                     from /opt/local/include/log4cxx/spi/appenderattachable.h:26,
                     from /opt/local/include/log4cxx/helpers/appenderattachableimpl.h:27,
                     from /opt/local/include/log4cxx/logger.h:30,
                     from /opt/local/var/macports/build/_opt_PPCRosettaPorts_databases_Akumuli/Akumuli/work/Akumuli-0.8.80/unittests/../akumulid/logger.h:21,
                     from /opt/local/var/macports/build/_opt_PPCRosettaPorts_databases_Akumuli/Akumuli/work/Akumuli-0.8.80/unittests/../akumulid/httpserver.h:26,
                     from /opt/local/var/macports/build/_opt_PPCRosettaPorts_databases_Akumuli/Akumuli/work/Akumuli-0.8.80/unittests/../akumulid/query_results_pooler.h:2,
                     from /opt/local/var/macports/build/_opt_PPCRosettaPorts_databases_Akumuli/Akumuli/work/Akumuli-0.8.80/unittests/test_querycursor.cpp:11:
    /opt/local/include/log4cxx/boost-std-configuration.h:10:18: error: 'shared_mutex' in namespace 'std' does not name a type
       10 |     typedef std::shared_mutex shared_mutex;
          |                  ^~~~~~~~~~~~
    /opt/local/include/log4cxx/boost-std-configuration.h:10:13: note: 'std::shared_mutex' is only available from C++17 onwards
       10 |     typedef std::shared_mutex shared_mutex;
          |             ^~~
    /opt/local/include/log4cxx/boost-std-configuration.h:12:30: error: 'shared_lock' in namespace 'std' does not name a template type
       12 |     using shared_lock = std::shared_lock<T>;
          |                              ^~~~~~~~~~~
    /opt/local/include/log4cxx/boost-std-configuration.h:12:25: note: 'std::shared_lock' is only available from C++14 onwards
       12 |     using shared_lock = std::shared_lock<T>;
          |                         ^~~
    /opt/local/include/log4cxx/logger.h:1729:25: error: 'shared_mutex' does not name a type
     1729 |                 mutable shared_mutex mutex;
          |                         ^~~~~~~~~~~~
    
    opened by barracuda156 0
  • Missing headers in eval.cpp and storage2.cpp

    Missing headers in eval.cpp and storage2.cpp

    Trying to build Akumuli 0.8.80 on 10.6.8 Rosetta (gcc12, cmake-devel @20220728-3.24.0-rc5), after setting -DDISABLE_EMBEDDED_ASM to bypass a failure on Intel-specific instructions, the build failed on the following:

    /opt/local/var/macports/build/_opt_PPCRosettaPorts_databases_Akumuli/Akumuli/work/Akumuli-0.8.80/libakumuli/query_processing/eval.cpp:42:33: error: field 'indexes_' has incomplete type 'std::array<unsigned int, 58>'
       42 |     std::array<u32, MAX_VALUES> indexes_;
          |                                 ^~~~~~~~
    
    /opt/local/var/macports/build/_opt_PPCRosettaPorts_databases_Akumuli/Akumuli/work/Akumuli-0.8.80/libakumuli/query_processing/eval.cpp:43:36: error: field 'values_' has incomplete type 'std::array<double, 58>'
       43 |     std::array<double, MAX_VALUES> values_;
    
    opened by barracuda156 1
Releases(v0.8.80)
Owner
Akumuli.org
Akumuli.org
LSH/Hypercube kNN and KMeans++ Clustering on polygonic curves and time series

kNN-and-Clustering-on-Time-Series-and-Curves LSH/Hypercube kNN and KMeans++ Clustering on polygonic curves and time series In this project we will exp

Aristi_Papastavrou 15 Nov 1, 2022
Updates the Wii's current system time with the real world time.

Fix Wii System Time This is a homebrew tool I made for the Wii a while ago. It updates the current system time with the real world time via worldtimea

Puzzle 2 Nov 9, 2022
Linux USB driver for the MOTU AVB series interfaces

motu-avb Linux USB driver for the MOTU AVB series interfaces Kernel parameters: samplerate: set the samplerate (its currently fixed at module load) de

null 47 Dec 23, 2022
Use fx-9860 series calculator as a keyboard for computer.

fxKeyboard Use fx-9860 series calculator as a keyboard for computer. WARNING: THIS TOOL MAY DAMAGE YOUR CALCULATOR OR COMPUTER. ALWAYS FOLLOW THE DOC

Myth 10 Mar 1, 2022
This software brings you the possibility to Read and Write the internal Flash of the Nordic nRF52 series with an ESP32

ESP32 nRF52 SWD flasher This software brings you the possibility to Read and Write the internal Flash of the Nordic nRF52 series with an ESP32 using t

null 140 Dec 31, 2022
LM75A temperature sensor library that you can use with STM32F10x series microcontrollers.

STM32F10x-LM75A-Library LM75A temperature sensor library that you can use with STM32F10x series microcontrollers. Launching the LM75A sensor in your a

null 12 Nov 25, 2022
A package to provide plug-in for Livox Series LiDAR.

Livox Laser Simulation A package to provide plug-in for Livox Series LiDAR. Requirements ROS(=Melodic) Gazebo (= 9.x, http://gazebosim.org/) Ubuntu(=1

livox 83 Dec 13, 2022
ThatOS64 is for the youtube series on 64-Bit Kernel Development pre-loaded by the EFI

Step by Step Tutorials on how to code a 64-Bit loader and kernel for OS Development NOTES Starting with CODE5, the resolution from the EFI file sets t

ThatOSDev 2 Dec 25, 2022
This repository is to share the EdgeAI Lab with Microcontrollers Series material to the entire community

This repository is to share the EdgeAI Lab with Microcontrollers Series material to the entire community. We will share documents, presentations and source code of two demo applications.

Machine Learning Tokyo 15 Oct 23, 2021
X-CUBE-AZRTOS-F4 (Azure RTOS Software Expansion for STM32Cube) provides a full integration of Microsoft Azure RTOS in the STM32Cube environment for the STM32F4 series of microcontrollers.

X-CUBE-AZRTOS-F4 Azure RTOS Software Expansion for STM32Cube With Azure RTOS complementing the extensive STM32Cube ecosystem providing free developmen

STMicroelectronics 28 Dec 7, 2022
Arduino library for the SHT2x series temperature and humidity sensors including SHT20, 21, 25.

SHT2x Arduino library for the SHT2x and HTU2x temperature and humidity sensors. Description The SHT2x family of sensors should work up to 400 KHz I2C.

Rob Tillaart 10 Dec 7, 2022
Drive your RL series Robomow lawnmower with a PPM remote

Robomow RL series remote What? Quick and dirty Arduino code to being able to control your Robomow RL series mower* with a PPM remote. Tested with Robo

Miklós Márton 2 Aug 20, 2022
Companion repository to the Fuzzing101 with LibAFL series of blog posts.

fuzzing-101-solutions Companion repository to the Fuzzing101 with LibAFL series of blog posts. Tags are sync'd with blog post releases and can be used

epi 89 Dec 26, 2022
This repository contains the source-code for the Robothon 24h series of workshops and competition within ENSTA Borj Cedria.

Robothon: The 24h long zero to hero robotics bootcamp What is Robothon? Robothon by Electronix ENSTABC is a 24h long event held within the walls of EN

Radhi SGHAIER 5 Mar 23, 2022
Load bitstream to AG1K series FPGA using CH552

ch552-ag1k-msd Load bitstream to AG1K series FPGA using CH552 AG1K does not have a built-in data flash; This design only simulate a USB mass storage d

libc0607 6 Dec 14, 2022
A WMI driver for Lenovo Legion series of laptops

Problem The Legion line of laptops from Lenovo come with the ability to switch power modes between "quiet", "balanced" and "performance." On Windows t

null 11 Aug 20, 2022
NetHunter Kernel for the OnePlus 7 Series based on DragonHeart Kernel

Linux kernel ============ This file was moved to Documentation/admin-guide/README.rst Please notice that there are several guides for kernel develop

cyberknight777 9 Mar 13, 2022
Programming tutorial series for creating LV2 plugins using C/C++ and turtle.

Programming LV2 Plugins From Scratch Programming tutorial series for creating LV2 plugins using C/C++ and turtle. Content Programming LV2 Plugins From

null 34 Dec 24, 2022
X-CUBE-AZRTOS-F7 (Azure RTOS Software Expansion for STM32Cube) provides a full integration of Microsoft Azure RTOS in the STM32Cube environment for the STM32F7 series of microcontrollers.

X-CUBE-AZRTOS-F7 Azure RTOS Software Expansion for STM32Cube With Azure RTOS complementing the extensive STM32Cube ecosystem providing free developmen

STMicroelectronics 7 Nov 17, 2022