• Stars
    star
    28
  • Rank 852,502 (Top 18 %)
  • Language
    Ruby
  • License
    MIT License
  • Created over 6 years ago
  • Updated almost 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Arli is the command line tool, that's both β€” the Arduino Library manager that's decoupled from any IDE, as well a project generator based on "arduino-cmake". By coupling dependency management with CMake-based build system, Arli provides an easy way to package, share, and distribute complex Arduino projects.

Gem Version Build Status Maintainability Test Coverage FOSSA Status

Please visit Gitter to support and a discussion of this project.

Gitter

Arli

Arli is an Arduino library manager with the ability to search libraries, install a single library, or bundle any number of libraries with the project. Arli also is a new project generator based on the arduino-cmake build system.

Arli is a rather simple and easy to use command-line tool which offers several indispensable features that help with Arduino project development, in particular for much larger projects with many dependencies and external libraries.

What's more, is that projects generated by Arli's generate command are highly portable from one system to another. Anyone can download your project build/upload with very little work.

Capabilities

Arli can:

  • search for Arduino libraries in the official public database maintained by Arduino using any of the standard library attributes either by the exact match, or a case-insensitive regular expression, a substring, etc.

  • automatically find, download and install of any number of third-party Arduino library dependencies, while performing a non-trivial but required library folder name resolution

  • maintain a consistent set of libraries for a given project using a YAML-formatted Arlifile.

  • support libraries that depend on other libraries. Arli ensures the correct build/linking order.

  • generate a new project skeleton based on arli-cmake template, which in turn relies upon arduino-cmake as the build environment, which builds and uploads freshly generated projects to your firmware "out of the box".

To get a sense of its feature, we invite you to watch the following screen cast:

asciicast

How is Arli Different?

Arli is a fast, small, and pretty specialized command line tool (written in Ruby) that only does four or five things very well, and relies on other well-supported projects do their job β€” in particular, it relies on Arduino SDK, and arduino-cmake when it generates new projects.

For additional discussion, and comparison with Arduino IDE, or PlatformIO β€” please read the discussion section down below

Automatic Folder Name Correction

Arli understands that the folder where the library is installed must be named correctly: in other words, folder name must match the header file inside of the folder for the library to be found.

When Arli downloads libraries in ZIP format, they are unpacked into a folder that would not resolve as an Arduino library folder without having to be renamed. Arli provides an algorithm that searches the contents of the folder for the source and header files. The name of the directory is then compared to the files found, and in most cases Arli will automatically **rename the library folder to match the main header file **

For example, 'Adafruit GFX Library' is the proper name of a corresponding library, and it's ZIP archive will unpack into a folder named Adafruit_GFX_Library-1.4.3. Arli will then detect that the header file inside the folder is Adafruit_GFX.h. In this case Arli will rename the top-level folder to Adafruit_GFX, and make the library valid, and its folder easily found.

Installation

Arli is a ruby gem, so to install it run:

gem install arli

You may need to use sudo before the command, if you are using a system-wide ruby installation.

Once installed, run arli with no arguments to see it's help screen.

Usage

Arli offers several key commands, explained below:

  • arli search [ name | regex ] [ options ]
    searches for a library by name or any attribute in the default Arduino database.

  • arli install library-name [ options ]
    search, and install a single library if the search for the name results in one and only one match (if multiple versions of the same library exist, the latest one is installed).

  • arli bundle [ options ]
    reads a YAML-formatted Arlifile that defines a list of libraries, as well as (optionally) a board name and CPU, and installs all specified libraries, or as we say bundles the project. This process includes a search, download, folder name resolution, and finally installation to either a global location, or a custom location specified by a -l flag, or in the Arlifile itself.

    It also generates an output file in various formats, for example json format will generate Arflifile.json with full metadata about each library.

    In the CMake mode, Arli generates Arlifile.cmake, which can be included in the main CMakeLists.txt file of the project to automatically build and link with the libraries.

  • arli generate ProjectName [ options ]
    generates a clean brand new C/C++/CMake project folder ProjectName in the current directory (or whatever is provided by --workspace DIR). The generated folder is a complete and nearly empty project, but one that builds, includes a sample Arlifile, a starting sketch file, and all of the CMakeLists.txt tooling you need to build and upload your project.

Arlifile Specification

Arlifile is the cornerstone of this library, and so we discuss this in detail. It's a central configuration file that defines library dependencies, and also some additional metadata, such as the board and CPU, as well as the hardware libraries.

version: 2.0.0
libraries_path: "./libraries"
lock_format: cmake
device:
  board: uno
  cpu: atmega328
  libraries:
    hardware:
      - name: Wire
    arduino:
      - name: SD
dependencies:
- name: "Adafruit GFX Library"
- name: "Adafruit LED Backpack Library"
  depends: "Adafruit GFX Library"
- name: "Adafruit Unified Sensor"
- name: "DHT sensor library"
- name: "DS1307RTC"
- name: "OneButton"
- name: "SimpleTimer"
  url: https://github.com/jfturcot/SimpleTimer.git
- name: "Time"
- name: BackSeatDriver
  url: https://github.com/kigster/back-seat-driver
  folder: libraries/BackSeatDriver
- name: BackSeatDriver_DCMotorAdapter
  url: https://github.com/kigster/back-seat-driver
  folder: libraries/BackSeatDriver_DCMotorAdapter

Let's review the contents:

  • libraries_path defines an absolute or relative (to Arlifile) folder where libraries are to be installed.

  • lock_format specifies the format of the output Arlifile.<format> after a successful bundle command. If you are using Arli with CMake, you will always want to have that be specified in Arlifile to save you typing :)

  • Device section is optional, but can be used to specify the Board Name and the Board CPU, as well as the two types of libraries that come with Arduino SDK

    1. general arduino libraries, and
    2. hardware-specific libraries, found in a hardware-specific folder. For example, if your hardware is AVR β€” then they will be in the ${ARDUINO_SDK_PATH}/hardware/arduino/avr/libraries folder.
  • Finally, the dependencies key is an array of hashes, that list third-party libraries to be installed. Here you must specify libraries by one of the supported fields. Name is the most common, but it must match library name provided in the database, not the header file name.

    Note that you can specify depends: attribute, which is an array of other library names (that must also be present in the Arlifile). This setting only applies to CMake build.

NOTE: One of Arli's design goals is to make Arlifile a sort of a reusable "configuration" file for the project that helps make your project easily portable.

Adding Libraries to Arlifile

You can specify libraries by providing just the name: (and posibly version) β€” but the name must match exactly a library in the Arduino standard database! This is a critical part.

EXAMPLE: If you want to add Adafruit_GFX.h header, you need to find the appropriate name for this library in the database. If you know the header name, the easiest way to do that is to do the following search:

arli search 'archiveFileName: /adafruit_gfx/i'

You will see in the output that only two libraries match:

Adafruit GFX Library                            (1.2.2)
WEMOS Matrix Compatible With Adafruit GFX       (1.2.0)

You want to copy the name "Adafruit GFX Library" and place it in the Arlifile against the name: attribute.

You can provide the following fields in the Arilfile if you want the library to be found in the Arduino Library database automatically:

  • name should be the exact match as described above. Use double quotes if the name contains spaces.
  • version can be used together with the name to specify a particular version. When name is provided without version, the latest version is used.
  • checksum and archiveFileName can be also used as they both uniquely identify a library, however they are not very descriptive, and we suggest you simply search by these fields first, and add the library by name, which is a good convention.

Installing a Non-Standard Library

If a library you are using is not in the public database just provide its name and the url fields. The URL can either be a git URL, or a downloadable ZIP file.

Arli will use the url field if it's available without trying to search for the library elsewhere.

Installing a Sub-Folder of a Library

As of version 1.3.0, Arli supports folder key in the Arlifile against each library. If provided, it is meant to be a relative sub-folder within the checked-out library directory structure, and only that folder will be installed as the library, and the rest removed. In the provided example, BackSeatDriver is a collection of three libraries, and therefore to install one of them we must tell Arli a folder within that repository.j:wq

Commands

Command bundle

When you run arli bundle in the folder with an Arlifile, many things happen. Below is another screenshot of running bundle:

Let's break down what you see in the above screenshot:

  • Arli reads the list of dependencies, and for each library without the url field, it performs a search by the library name and optionally version, and then it prints the found library name in blue.

  • The version that either was specified in the Arlifile or is the latest for this particular library is printed next, in green.

  • Then Arli downloads the library sources either using the URL provided, or the URL attribute of the search result. Note, that Arli always downloads libraries into a temporary folder first..

  • Arli then scans the files inside each folder, and cleverly determines the canonical directory name for each library based on the most appropriate C/C++ header file found within it. This is the name printed to the right in green.

  • Next, the library is moved to the new canonical name within the temporary folder, and then the canonical folder is moved into the destination library path.

  • If the destination folder already exists, three possible actions can happen, and are controlled with the -e flag:

    • the default action is to simply overwrite the existing library folder.
    • by using -e [ abort | backup ] you can optionally either abort the installation, or create a backup of the existing folder.
  • Upon completion of the bundle command, a new file will be created next to Arlifile: Arlifile.<format> where format is one of: yaml, json, text or cmake. Format can be specified with --format <format> or -f for short. The file contains different contents depending on the format.

    With json or yaml formats, the file will contain a complete metadata about each installed library, obtained from the database search.

    With text format (which is the default), the result is a compact CSV file with just a couple of library attributes.

    With the cmake format, the resulting Arlifile.cmake is meant to be included in the CMakeLists.txt file of the project build with arduino-cmake library.

You can change the format of this file with -f/--format flag.

CMake Integration

The CMake format is now fully supported, in tandem with arduino-cmake project.

Below is the resulting Arlifile.cmake after running arli bundle on the above mentioned file.

set(ARLI_CUSTOM_LIBS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/libraries")
set(ARLI_CUSTOM_LIBS
      Adafruit_GFX
      Adafruit_LEDBackpack
      Adafruit_Sensor
      DHT
      DS1307RTC
      OneButton
      SimpleTimer
      Time)
set(ARLI_ARDUINO_HARDWARE_LIBS
      Wire)
set(ARLI_ARDUINO_LIBS )
set(Adafruit_LEDBackpack_DEPENDS_ON Adafruit_GFX)
set(Adafruit_Sensor_ONLY_HEADER yes)

include(Arli)

arli_detect_serial_device("/dev/null")
arli_detect_board("uno" "atmega328")

message(STATUS "device: [${BOARD_DEVICE}], board: [${BOARD_NAME}], cpu: [${BOARD_CPU}] <<<")

arli_build_all_libraries()

This file only works in tandem with arli-cmake project.

See the generate command, which creates a new project with CMake enabled.

Command generate

This command creates a new project using the template provided by the arli-cmake project.

$ arli generate MyClock --workspace ~/arduino/sketches

This command will create a brand new project under ~/arduino/sketches/MyClock, and you should be able to build it right away:

cd ~/arduino/sketches/MyClock
bin/setup 
rm -rf build && mkdir build && cd build
cmake ..
make
make upload

The above steps can also be done via bin/build src bash script.

There is an additional example folder that shows the complete example that uses external libraries, and builds and compiles using CMake and Arli.

IMPORTANT: Please do not forget to run bin/setup script. It downloads arduino-cmake dependency, without which the project will not build.

Command install

Use this command to install a single library by either a name or URL:

Eg:

❯ arli install 'Adafruit GFX Library' -l ./libs
❯ arli install 'https://github.com/jfturcot/SimpleTimer'

Command search

To search Arduino library database, you can use the search command.

You can search in two ways:

  1. simple substrin match of the library name
  2. complex arbitrary attribute match, that supports regular expressions and more.

arli search AudioZero does a simple search by name, and would match any library with 'AudioZero' in the name, such as AudioZeroUpdated. This search returns three results sorted by the version number:

❯ arli search AudioZero

--------------------------------------------------------------------------------
Arli (0.8.4), Command: search
Library Path: ~/Documents/Arduino/Libraries
--------------------------------------------------------------------------------

AudioZero                                       (1.1.1)    ( 3 total versions )

β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”
  Total Versions : 3
Unique Libraries : 1
β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”

The search argument can also be a ruby-syntaxed expression, that (if you know ruby) is actually eval-ed into the method parameters. Here are a few examples:

You can also use regular expressions, and set maximum number of results printed by the -m MAX flag.

search

Search Output Format

Finally, you can change the output format of the search, by passing -f <format>, where format can be short (the default), long, json, or yaml.

For example, here is a how long format looks like:

❯ arli search 'name: /adafruit/i'  -f long

Arli (0.8.4), Command: search
Library Path: ~/Documents/Arduino/Libraries
_______________________________________________________________
Name:        Adafruit ADS1X15
Versions:    1.0.0,
Author(s):   Adafruit
Website:     https://github.com/adafruit/Adafruit_ADS1X15
Sentence:    Driver for TI's ADS1015: 12-bit Differential or 
             Single-Ended ADC with PGA and Comparator
_______________________________________________________________
Name:        Adafruit ADXL345
Versions:    1.0.0,
Author(s):   Adafruit
Website:     https://github.com/adafruit/Adafruit_ADXL345
Sentence:    Unified driver for the ADXL345 Accelerometer
.....

With -m LIMIT flag you can limit number of results. But in our case above we printed all libraries that had the word "adafruit" (case insensitively) in their official name. We could have used version:, or author, or website, or even url and archiveFileName fields. For complete description of available library attributes, please see the official definition of the library.properties file.

A detailed description of the complete search functionality is documented in the library that provides it β€” arduino-library. Arli uses the arduino-library gem behind the scenes to search, and lookup libraries.

Discussion

Who is Arli For?

Arli is ideally suited for C/C++ programmers who have some basic knowledge of CMake, and who want to build larger-than-trivial projects on Arduino platform. Arli promotes use and reuse of libraries, which help take advantage of the Object Oriented Design Patterns, decoupling your code into reusable libraries.

Having said that, Arli is also helpful for projects that do NOT use CMake. It can be used purely as a library manager, or GitHub repo downloader.

Why not the Arduino IDE?

Arduino IDE is not meant for professional engineers β€” it's a fantastic educational tool for students. And while it lacks basic features of C/C++ development it succeeds in making Arduino programming accessible to young kids and students.

Why not Platform.IO?

PlatformIO is a great "eco-system" that includes not just Arduino, but many other boards, provides integrated library manager, and Atom as the primary IDE. It's a fantastic tool for beginner/intermediate developers, much better than Arduino IDE.

But it's not without its downsides: to some β€” PlatformIO feels too heavy. It comes with a gazillion additional features you'll never use and it tries to be too much all at once. Perhaps for some people β€” it can be a feature. But for the author and other members of the Arduino dev community, PlatformIO design goes against the fundamental principals of Unix Philosophy, which promotes a minimalist, modular software development delegated to specialized commands that can be all interconnected (think grep, awk, sort, uniq).

More Reasons Why Arli is Needed

Arli is both an Arduino Library Manager and a project generator. If you are using Arduino IDE you may be wondering why is this needed?

  • Well, for one, Arli can "bundle" libraries not just from the official Arduino database, but also from individual Github URLs. There are thousands of libraries of high quality, that for one reason or another did not make it into the official database.

  • Arduino still haven't come up with a way to automatically document project's dependencies on a set of libraries. I believe the best you've got is having to list libraries in comments, and then install each manually. With Arli you can automate this entire process.

  • Not everyone likes using Arduino IDE. So this tool is, perhaps, aimed more at the professional programmers, wanting to build applications that tend to be on a complex side, and rely on multiple third party libraries. Boards like Teensy have a lot more RAM than Arduino UNO and clones, and so it can support much larger projects with dozens of libraries linked in with the firmware.

  • One of Arli's design goals is to provide a bridge between the arduino-cmake project, which provides an alternative build system, and is compatible with numerous IDEs such as Atom, JetBrains CLion, Visual Studio Code, or even Eclipse.

Working with Complex Projects

Arli shines when you need to build a complicated and multi-dependency project using an Arduino compatible board such as Teensy, which has 16x more RAM than the Arduino UNO, and therefore allows you to take advantage of many more third-party Arduino libraries at once within a single project.

A few years ago the author built a complex project called Filx Capacitor, which relied on ten external libraries. Managing these dependencies was very time-consuming. Asking someone else to build this project on their system was near impossible. Not just that, but even for the author himself, after taking some time off and returning to the project β€”Β it was still difficult to figure out why it was suddenly refusing to build. So many things could have gone wrong.

This is the problem Arli (together with the very powerful arduino-cmake project) attempts to solve. Your project's dependencies can be cleanly defined in a YAML file called Arlifile, together with an optional board name and a CPU. Next, you add a bunch of C/C++ files to the folder, update CMakeLists.txt file and rebuild the project, upload the firmware, or connect to the serial port. See arli-cmake for more information.

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/kigster/arli.

License

The gem is available as open source under the terms of the MIT License.

FOSSA Status

More Repositories

1

cmake-project-template

This project is aimed at jump-starting a C/C++ project that can build libraries, binaries and have a working unit test suite. It uses CMake build system and is deliberately completely minimal.
C++
836
star
2

simple-feed

This gem implements a flexible time-ordered activity feeds commonly used within social networking applications. As events occur, they are pushed into the Feed and distributed to all users that need to see the event. Upon the user visiting their "feed page", a pre-populated ordered list of events is returned by the library.
Ruby
327
star
3

sym

Sym is a command line utility and a Ruby API that makes it trivial to encrypt and decrypt sensitive data. Unlike many other existing encryption tools, sym focuses on usability and streamlined interface (CLI), with the goal of making encryption easy and transparent. The result? There is no excuse for keeping your application secrets unencrypted :)
Ruby
136
star
4

bashmatic

Optimized for humans, 500+ BASH functions for all walks of life. Über Toâlkit for über geeks and UNIX command line power users.
Shell
122
star
5

laser-cutter

Similar to boxmaker, this ruby gem generates PDFs that can be used as a basis for cutting boxes on a typical laser cutter. The intention is to create an extensible, well tested, and modern ruby framework for generating PDF templates used in laser cutting.
Ruby
91
star
6

ventable

Event/Observable support for plain ruby with options for grouping observers and wrapping notifications in blocks of code, such as transaction handling.
Ruby
58
star
7

warp-dir

Warp Directory – a drop-in replacement (superset to be precise) of the nifty 'wd' ZSH module. This one is written in ruby, and works with any shell.
Ruby
38
star
8

puma-daemon

Puma (starting version 5) removed automatic demonization from the gem itself. This functionality was extracted to this gem, which supports Puma v5 and v6.
Ruby
34
star
9

pullulant

Kick start a fresh development environment on any Mac with OS-X El Capitan, with this opinionated, but modular and customizable installer. It's based on HomeBrew, SproutWrap cookbooks, and about 2K lines of Bash programming :)
Shell
12
star
10

dupervisor

This library converts config files between – YAML, JSON and Windows INI file format. For example, supervisord uses INI file format. Using the gem you can configure supervisord via a YAML file, and generate INI as needed. DuperVisor installs `dv` CLI converter. Run `dv -h` for help.
Ruby
10
star
11

librgb

C/C++ Library for RGB color manipulation and effects. The intention is to make it possible to use the library for Arduino-based projects. Current status: pre-Alpha.
C++
8
star
12

kigomoku-ios

Simple Gomoku (Five In A Row) game for iPhone
Objective-C
6
star
13

attr_memoized

Memoize attributes in a thread-safe way. This ruby gem adds a `#attr_memoized` class method, that provides a lazy-loading mechanism for initializing "heavy" attributes, but in a thread-safe way. Instances thus created can be shared among threads.
Ruby
6
star
14

delicious-library-3-cloud-sync

A simple shell script so that the data files used by Delicious Library 3β„’ software for Mac made by Delicious Monster Software can be shared across multiple computers in your possession.
Shell
6
star
15

joyent-cloud-pricing

A collection of tools to help figure out Joyent cloud costs for an infrastructure of any size. Supports commit pricing discounts.
Ruby
5
star
16

sidekiq-cluster

Sidekiq cluster is a simple CLI wrapper around Sidekiq that allows running multiple Sidekiq processes as a single pool of workers.
Ruby
5
star
17

RotaryEncoderWithButton

Easily read rotary encoder buttons that also incorporate a push button, like Adafruit Rotary Encoder.
C++
5
star
18

molder

Molder is a command line tool for generating and running (in parallel) a set of related but similar commands. A key use-case is auto-generation of the host provisioning commands for an arbitrary cloud environment. The gem is not constrained to any particular cloud tool or even a command, and can be used to generate a consistent set of commands based on several customizable dimensions.
Ruby
4
star
19

search-emlx-mailbox

Rails 5.2-based application that uses Sunspot/Solr to index and import large number of emails either as individual files in "*.elmx" format, or by using an exported "mbox" format. Once imported, the app provides a simple and convenient search interface for finding all emails matching a given search string. Useful in depositions, legal proceedings, or just personal projects.
Ruby
4
star
20

dnsmadeeasy

A full-featured API client for managing DNS records hosted by DnsMadeEasy.com via their REST SDK v2. A powerful CLI command "dme" is installed for those script-centric. Ruby SDK is provided for those needing the integrate at deeper level.
Ruby
4
star
21

auto-dimming-clock

Digital wall clock, or a bed-side clock, or whatever type of clock you like, equipped with a rotary encoder knob, a photo resistor able to aid in adjusting brightness as it changes throughout the day. The clock can be equipped with an optional strip of neo pixels – for some extra color. Works with Arduino Uno, Nano, Mini Pro, as well as Teensy.
C++
4
star
22

cookbook-set-hostname

Why is not part of Chef? I have no idea. But here is how you can set your hostname correctly, and with FQDN. The hostname is set based on the specified domain name. Supports SmartOS, Ubuntu and CentOS.
Ruby
3
star
23

pause

Fast, flexible, and easy to use rate limiter or throttler for multi-process ruby applications backed by Redis.
Ruby
3
star
24

helpful-tools

Personal collection of scripts, snippets, and more, typically written in ruby.
Ruby
3
star
25

makeabox

MakeABox – use this app with a laser cutter to create a box with notches that connect all sides together.
HTML
3
star
26

githuh

Github API command line client for fetching repos, looking up users, etc.
Ruby
3
star
27

kigame-cpp

A set of generic C++ interfaces and classes to aid with modeling basic 2-player board games.
C++
3
star
28

turnstile-rb

Turnstile is a ruby gem for tracking in near-real time concurrent live users on the site without introducing additional latency into the request.
Ruby
3
star
29

kigaboom

Teensy + Audio Shield + TFT+ Infrared / Rotary Knobs = fully customizable audio digital signal processing station, with spectrum analyzer, peak meter, EQ and many more functions available via simple controls.
C++
3
star
30

arduino-library

This gem encapsulates many concepts related to how Arduino Libraries are indexed, how their metadata is validated, or .properties file generated. It supports searching the Arduino library database for any terms. This gem is used by Arli β€” Arduino Installer CLI toolkit.
Ruby
3
star
31

beatify

A wrapper project around "beet" open source music organizer, suitable for DJs with large music folders.
Shell
3
star
32

game-simon-says

C/C++ core of this simple pattern repeating game.
C++
2
star
33

register

Registry pattern for wrapping application globals in a module-level auto-generated accessors
Ruby
2
star
34

cookbook-pgbouncer-service

Installs pgBouncer from either sources or packages, configures the connections, and sets up a service.
Ruby
2
star
35

saves-cli

Saves Service CLI Client for a proprietary horizontally sharded storage of product saves.
Ruby
2
star
36

obstacle-avoiding-robot

Arduino-based project that drives on 4 DC motors and avoids things in front.
CMake
2
star
37

mms-mime

Ruby parser for MM7-wrapped MMS/MIME messages
Ruby
2
star
38

cookbook-logrotate-s3

Rotate logs to S3 using logrotate and s3cmd
Ruby
2
star
39

host_status

Generic facade that aggregates metrics for a given host running a particular application using pluggable methods including third-party APIs.
Ruby
2
star
40

flix-capacitor

A little flux/flix capacitor box based on Teensy 3.1 for showing pictures, clock, playing DJ sets, and starting a small rave in a recovery room.
Arduino
2
star
41

performance-compare

A simple gem that can be used to compare algorithm implementations in Ruby using a single thread, a thread pool, or a process pool.
Ruby
2
star
42

weather-pod

4-line LCD Screen shows temperature, humidity, barometric pressure and time. Project build using arduino-cmake, dependencies maintained by Arli.
CMake
2
star
43

cookbook-auto-updater

This Cookbook performs several operations on a newly provisioned Ubuntu machines to prepare them for server-side operation. It includes setting the timezone, and performing smart unattended update of all system packages and kernels, possibly requiring reboot.
Ruby
2
star
44

back-seat-driver

Autonomous Arduino Robot control library in C++. Easily drive various kinds of robots without blocking or sleeping. Supports servo-based bots and DC motor based using Adafruit Motor Shield.
C++
2
star
45

rules_ruby_lambda

Bazel rules for packaging and uploading AWS Lambdas
1
star
46

treename

Rename all files in multi-level folder tree based on custom logic, with optional custom callbacks. Use it to process batches of files to convert them eg. from WAV to MP3 or vice versa, while renaming them along the way.
Ruby
1
star
47

cookbook-dnsmadeeasy

DNS record management cookbook for automatically registering nodes with DnsMadeEasy provider.
Ruby
1
star
48

sprout-pyenv

Sprout-wrap compatible cookbook to install pyenv using Brew, and then any version of Python using soloist.
Ruby
1
star
49

uri-io

Provides IO semantics for various URI schemes
Ruby
1
star
50

ruby-interview-problems

Ruby implementations of various job interview questions
Ruby
1
star
51

arli-cmake

Some additional helpers for arduino-cmake project, as well as the helpers to connect Arli library Manager.
CMake
1
star
52

playgine

Gaming backend engine written in Rails 6, TypeScript, PostgreSQL
1
star
53

arduino-workspace

Shell
1
star
54

cmake-ccspec-template

CMake C++ project template that uses ccspec for unit testing, instead of Google Test library.
C++
1
star
55

AsciiDuino

Library that makes displaying shapes/frames on RainbowDuino LED Matrix easy using ASCII pictures as source input
C++
1
star
56

wallclock-arduino

CMake-based project for a fancy digital Wall Clock with Neo Pixels, temperature, and other goodies.
CMake
1
star
57

makeabox.app

Work in progress β€” evolution of the original MakeABox application, this one will use Angular and Rails 6
Ruby
1
star
58

bazel-in-pictures

Various UML-like diagrams explaining Bazel API for those creating new rules
1
star
59

vscode-insider-settings

A set of simple makefile commands to export/import/swap settings for VSCode and VSCode Insiders
Makefile
1
star
60

boxbot

[WIP] Boxbot is a from the ground-up rewrite of the laser-cutter gem with some additional features planned. It generates templates meant to be used by a laser cutter to cut out a 3D box with matching tabs that allow the box to be "snapped into place" without screws, although screws can also be added.
Ruby
1
star
61

cloud-kitchens-dispatch

Simulation of Order fulfillment in a Restaurant Kitchen
Ruby
1
star
62

readonly

This gem offers a proxy class that can be used to create a read-only wrappers around any other class, by declaring which methods can be delegated to the wrapped class.
Ruby
1
star
63

kiguino

Collection of Arduino libraries and wrappers, written and used in various live projects. Most of the libraries hide some complexity and encapsulate a consistent approach to the *thing*, be that measuring a sensor, working with a rotary knob, etc.
C++
1
star
64

drb-cache

DRb::Cache is a ruby gem that offers a shared multi-process cache by transparently managing a DRb server process on the background.
Ruby
1
star
65

timed-messages

Schedule defined as starting times and durations, good for integrating into embedded LED systems that are supposed to show a given artist at a given time. Arduino-free library with automated tests based on ccspec (C++17 required)
C++
1
star
66

solr-sunspot-cookbook

Fully automated installation, configuration and service definition for Solr Search engine with support for single master many replicas, and specifically configured to work with Sunspot Ruby Gem.
HTML
1
star
67

sparkfun7SD

Set of libraries for using Sparkfun seven-segment displays (4 digit), while using different means of communications, implemented as sub-libraries. Based on tutorials @ https://learn.sparkfun.com/tutorials/using-the-serial-7-segment-display
C++
1
star
68

require_dir

Easily and non-intrusively require files from sub-folders in ruby. Unlike require_all, this gem is meant to be included and does not break or affect load path.
Ruby
1
star
69

ventable-statsd

Integrate your Ventable events with Statsd in order to track some or all of the events that occur using a fast light-weight UDP protocol.
Ruby
1
star
70

sym-crypt

This library provides a simple interface allowing access to the symmetric encryption functionality provided by the OpenSSL library. It supports private key generation, encryption/decryption with the key, as well as encryption/decryption with an arbitrary user-defined password.
Ruby
1
star
71

super_uri

Extension to the OpenURI module that understands many additional types of URI resources, and is able to open and read them. Included are: file://, env://, osxkeychain://, redis://, memcached:// schemes.
Ruby
1
star