wyhaines
Kirk Haines
43 repositories
Veteran, Wyoming Toposware; @toposware
Polyglot. Rust, Ruby, JS/TS, Crystal, C, Solidity, web 2 and web 3 technologies. @topos-protocol && @toposware

defined.cr

This shard provides facilities for checking whether a constant exists at compile time, and for a variety of different conditional compilation options. Code can be conditionally compiled based on the existence of a constant, version number constraints, or whether an environment variable is set truthy or not.

  • 17
  • 1
  • 0
  • 2
  • 1
  • 2 months ago
  • 16
  • 4
  • 5
  • 3
  • 6
  • 18 days ago

splay_tree_map.cr

This is a Crystal implementation of a Splay Tree; which is a type of binary search tree that is semi-balanced and that tends to self-optimize so that the most accessed items are the fastest to retrieve.

  • 15
  • 1
  • 0
  • 7
  • 1
  • 2 months ago

csuuid.cr

This is a small UUID library that implements a chronologically sortable UUID.

  • 15
  • 2
  • 0
  • 6
  • 3
  • 2 months ago

datapack.cr

You are building an application, be it web or something else. It has data -- images, CSS, JS, CSV files, whatever -- and you want to be able to easily bundle those into your compiled executable. This shard gives you a simple utility to add this data to your executable, access it, and manage it.

  • 15
  • 0
  • 0
  • 0
  • 2
  • over 1 year ago

Send.cr

This shard implements a usable dynamic dispatch function for Crystal code, modeled on the Ruby #send function of the same name.

  • 12
  • 1
  • 7
  • 1
  • 1
  • almost 3 years ago

opentelemetry-api.cr

The core of open telemetry instrumentation is the OpenTelemetry API/SDK. The initial aim of this shard is to implement the OpenTelemetry specification for metrics, traces, and logs.

  • 12
  • 1
  • 4
  • 2
  • 6
  • 2 months ago

tracer.cr

This library implements a method call tracing facility that can be used to generate either summary or detailed logs of method calls, or to inject arbitrary code execution into method calls.

  • 10
  • 0
  • 1
  • 1
  • 2
  • 2 months ago

opentelemetry-sdk.cr

This repository contains an implementation of an OpenTelemetry SDK for Crystal

  • 8
  • 1
  • 1
  • 5
  • 10
  • 2 months ago

base58.cr

This is a performance optimized implementation of base58 binary-to-text encoding algorithm.

  • 8
  • 0
  • 1
  • 0
  • 1
  • over 1 year ago

git-index.cr

This tool makes a local database of git repositories, indexed by initial commit hashes.

  • 5
  • 0
  • 0
  • 0
  • 3
  • over 3 years ago

bus.cr

It is sometimes useful to have a pubsub type message bus inside your software. This library implements a bus to send messages to interested subscribers. Those subscribers can reply to those messages, and are guaranteed that the reply will be routed back to the sender.

  • 5
  • 0
  • 0
  • 1
  • 3
  • over 2 years ago

nbchannel.cr

A NBChannel is a non-blocking channel. Normal Crystal channels block on send and on receive. The NBChannel will never block on send, and there are both blocking and nonblocking receive calls available. The channel should work both for single producer, single consumer scenarios, and for scenarios with multiple producers or multiple consumers.

  • 5
  • 0
  • 0
  • 3
  • 1
  • over 1 year ago

ParseDate.cr

This is a small library that attempts to parse a wide variety of date formats with a single call.

  • 4
  • 0
  • 1
  • 2
  • 1
  • about 1 year ago

timeout.cr

This implements a very simple timeout method for Crystal. Use it to wrap code in a timeout, so that execution of that code can not continue forever.

  • 4
  • 0
  • 1
  • 3
  • 1
  • 16 days ago
  • 3
  • 1
  • 1
  • 1
  • 1
  • over 2 years ago

for.cr

This tiny little shard implements a "for" loop for Crystal by leveraging macros.

  • 3
  • 0
  • 0
  • 0
  • 1
  • over 1 year ago

apm.cr

This is an open source APM agent for Crystal. Initial development is targeting the OpenTelemetry spec for data exchange, but it may also support the New Relic specific protocol. It should, however, be usable with any provider that permits OpenTelementry ingest.

  • 3
  • 0
  • 0
  • 0
  • 0
  • about 3 years ago

alias_method.cr

Crystal does not provide a ready-to-use mechanism for creating method aliases, and the general Crystal code style recommendation is that one should avoid having multiple names that invoke the same method. However, there are times where creating method aliases is useful. This shard creates an alias_method macro that can be used to easily create method aliases which are functionally identical to the original method.

  • 3
  • 0
  • 0
  • 0
  • 1
  • about 3 years ago

hpack.cr

This shard is a standalone implementation of HPack, the HTTP2 header compression algorithm.

  • 3
  • 0
  • 0
  • 1
  • 1
  • over 2 years ago

advent-of-code-2022

Here are my Advent of Code solutions for 2022.

  • 3
  • 0
  • 0
  • 0
  • 0
  • almost 2 years ago

lockfile.cr

This shard implements a portable lockfile, for use with the Crystal Language.

  • 2
  • 0
  • 0
  • 0
  • 0
  • over 4 years ago

liquidcrystal

This is a port of the Liquid gem from Shopify, for the Crystal language. It aims to be as compatible as possible with the upstream source of truth that is the Shopify Ruby implementation of Liquid.

  • 2
  • 0
  • 0
  • 0
  • 2
  • almost 4 years ago

evita

A spike to play with some ideas surrounding a chat bot implementation.

  • 2
  • 0
  • 0
  • 0
  • 11
  • over 3 years ago

NewRelic.cr

This is a binding to the New Relic C SDK, so that Crystal programs can add observability features with New Relic.

  • 2
  • 0
  • 0
  • 0
  • 0
  • over 3 years ago

simple_irc.cr

This is a simple IRC protocol implementation. No bundled bot capabilities or anything fancy. Just the basics, made easy to use.

  • 2
  • 0
  • 0
  • 2
  • 2
  • over 3 years ago

hash_serializable.cr

The module provides a Hash::Serializeable module which, like JSON::Serializeable and YAML::Serializeable, can be mixed into a class to allow the class's ivars to be serialized out to a hash, and to allow a hash to be instantiated as an instance of a class.

  • 2
  • 0
  • 0
  • 0
  • 1
  • over 1 year ago

time-ext.cr

This is a very small extension of the Time class for Crystal. It has been extracted from another project as it provides a small number of logical and useful extensions to Time.

  • 2
  • 0
  • 0
  • 3
  • 1
  • 2 months ago

learning-crystal-via-conways-game-of-life

This repository is to be used as a lesson or guided workshop to introduce Crystal to someone who already knows how to program, by building a Crystal implementation of Conway's game of life. It includes a codespace to facilitate this lesson.

  • 2
  • 1
  • 0
  • 0
  • 0
  • over 1 year ago

analogger.cr

This is a port of https://github.com/wyhaines/analogger using Crystal.

  • 1
  • 0
  • 0
  • 0
  • 1
  • over 4 years ago

serf-handler.cr

This implements a port of the Ruby Serf Handler gem -- https://github.com/wyhaines/serf-handler -- as a library that can be used to easily build compiled, distributable handler binaries using the Crystal language.

  • 1
  • 0
  • 0
  • 0
  • 1
  • almost 4 years ago

TwitchEventSub.cr

This shard encapsulates logic and handling for interacting with the Twitch EventSub API.

  • 1
  • 0
  • 0
  • 1
  • 1
  • over 3 years ago

apm-therelicans

This code is the code that was used for an article on how to build an APM system, written for therelicans.com.

  • 1
  • 0
  • 0
  • 0
  • 1
  • over 3 years ago

openai-crystal

OpenAI API client library to access GPT-3 in Crystal

  • 1
  • 1
  • 0
  • 1
  • 2
  • over 3 years ago

selector.cr

This is a very simple utility, intended for command line use, that accepts via command line or STDIN a set of data items, and then displays them, one per line, with checkboxes next to them, and the ability to move through them, selecting or deselecting them with the keyboard. When enter is pressed, the selected set it returned to STDOUT.

  • 1
  • 0
  • 0
  • 0
  • 2
  • about 1 month ago

analogger-client.cr

This is the Crystal version of the client library for Analogger.

  • 0
  • 0
  • 0
  • 0
  • 3
  • over 4 years ago

minion-agent-client.cr

This is the Crystal implementation of the Minion Agent Client.

  • 0
  • 0
  • 0
  • 0
  • 3
  • over 4 years ago

http2.cr

This is a standalone implementation of the HTTP/2 protocol that is intended to provide a ready building block for both HTTP/2 clients and servers.

  • 0
  • 0
  • 1
  • 0
  • 2
  • over 2 years ago

crystal-readline

Crystal bindings to GNU Readline Library

  • 0
  • 0
  • 0
  • 1
  • 0
  • over 3 years ago

topos-playground.cr

This is a re-implementation of the canonical topos-playground in Crystal, both to simplify the implementation, and to create a tool that can be simply distributed as a compiled executable.

  • 0
  • 0
  • 0
  • 0
  • 6
  • 10 months ago

config.cr

This is a simple container intended to be a general purpose configuration container.

  • 0
  • 0
  • 2
  • 1
  • 1
  • about 1 year ago

string-wrap.cr

This is a simple extension to the String class to add a method which cleanly, flexibly, and naturally breaks long strings for display on a terminal of a given width.

  • 0
  • 0
  • 0
  • 0
  • 1
  • 6 months ago

io_delimited_ios_hotpatch.cr

There is a problem with IO::Delimited in recent versions of Crystal (the boundaries are not clear yet, but sometime after 1.6.2, and definitely in 1.12.2) that causes file upload failures with iOS. This patch works around the problem while it is being isolated and fixed upstream.

  • 0
  • 0
  • 0
  • 0
  • 0
  • 5 months ago