Skip to content

Instantly share code, notes, and snippets.

View esemeniuc's full-sized avatar

Eric Semeniuc esemeniuc

View GitHub Profile
@esemeniuc
esemeniuc / zstd-dict.rs
Last active June 23, 2024 22:57
Rust zstd-rs compression with dictionary
// dict
let mut dict_file =
std::fs::File::open("dictionaryFile").unwrap();
let mut dict = Vec::new();
dict_file.read_to_end(&mut dict).unwrap();
// compress
let mut enc_buf = [0; 1_000_000];
let encoder_dict = zstd::dict::EncoderDictionary::copy(&dict, 0);
let mut compressor =
@esemeniuc
esemeniuc / main.rs
Created June 14, 2024 20:22
traceparent header parser
/// See https://w3c.github.io/trace-context-binary/#de-serialization-of-traceparent
fn parse_traceparent(bytes: &[u8]) -> Result<SpanContext, &'static str> {
if bytes.len() != 29 {
return Err("Invalid traceparent length. Must be 29 bytes.");
}
if bytes[0] != 0 {
return Err("Unsupported traceparent version.");
}
if bytes[1] != 0 {
@esemeniuc
esemeniuc / demo.rs
Last active April 26, 2024 16:05
try_recv_many()
fn amain() {
use std::{
future::poll_fn,
pin::Pin,
task::{Context, Poll},
};
use tokio::sync::mpsc;
let (tx, mut rx) = mpsc::channel(100);
@esemeniuc
esemeniuc / gist:dca6bdbf4c758774d9d771b4540117eb
Last active January 6, 2024 04:18
Websocket example for Solana RPC
Subscribe to any acount changes to Pyth SOL/USDC account (H6AR...QJEG):
This requires websocat - `brew install websocat`
```bash
echo '{"id":1,"jsonrpc":"2.0","method":"accountSubscribe","params":["H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG",{"encoding": "jsonParsed"}]}' | websocat --no-close "wss://internal.ny.mainnet.rpc.jito.wtf/?access-token=XYZ"
```
Output
```
{"jsonrpc":"2.0","method":"accountNotification","params":{"result":{"context":{"slot":240142003},"value":{"lamports":23942400,"data":["1MOyoQIAAAADAAAA8AwAAAEAAAD4////GgAAABcAAAC0RlAOAAAAALNGUA4AAAAAGAudTAIAAAB/ZvSRAAAAAJ08zJMAAAAAFUKKAAAAAAAc++qFAAAAAJ08zJMAAAAAUNSYZQAAAAADAAAAAAAAAIqwPP8YRKuXXc3RaDAgwFmfxTkrby4S1d1hW8wsLm0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACzRlAOAAAAAHT4GUsCAAAA6daTAAAAAABP1JhlAAAAAHT4GUsCAAAA6C6NAAAAAAABAAAAAAAAALRGUA4AAAAAB/LLOf2wKdxReE0o7xeRHZfBppyFcjobYlWzQlNDrXUNzhRLAgAAAKBnWgMAAAAAAQAAAAAAAACeRlAOAAAAAA3OFEsCAAAAoGdaAwAAAAABAAAAAAAAAJ5GUA4AAAAAnz6le9QJugDEDZKuVxNBwn48L37frOHCSlGxoVwxsregsyJLAgAAAAJjkgMAAAAAAQAAA
@esemeniuc
esemeniuc / redis.lua
Created August 15, 2023 05:01
Redis Chunking (avoid unpack() stack issues)
local keys = redis.call('KEYS', ARGV[1]);
if next(keys) == nil then return keys end;
local chunk_size = 4096; -- must be under 8k, see https://github.com/nhibernate/NHibernate-Caches/issues/62
local n = #keys;
local out = {};
for i=1,n,chunk_size do
local unpack_start = i;
local unpack_end = math.min(n, i + chunk_size - 1);
local vals = redis.call('MGET', unpack(keys, unpack_start, unpack_end));
@esemeniuc
esemeniuc / rotate_cert_redis.md
Last active June 26, 2023 13:07
Rotate certificate in redis without restarting

Generate expiring certs

#!/bin/bash

# Generate some test certificates which are used by the regression test suite:
#
#   tests/tls/ca.{crt,key}          Self signed CA certificate.
#   tests/tls/redis.{crt,key}       A certificate with no key usage/policy restrictions.
#   tests/tls/client.{crt,key}      A certificate restricted for SSL client usage.
#   tests/tls/server.{crt,key}      A certificate restricted for SSL server usage.
@esemeniuc
esemeniuc / redis.rs
Created June 19, 2023 16:11
Redis Pub/Sub Async Reconnect Example
use std::thread::sleep;
use std::time::{Duration, Instant};
use redis::{AsyncCommands, ConnectionLike, RedisResult};
use tokio::time::timeout;
use futures::StreamExt;
use futures_util::Stream;
/* Cargo.toml
@esemeniuc
esemeniuc / demo.sh
Created June 3, 2023 04:05
CSV Import to Sqlite
cat file.csv | sqlite3 demo.db ".import --csv '|cat -' mytable"; sqlite3 demo.db
@esemeniuc
esemeniuc / Readme.md
Last active March 28, 2023 03:48
Grafana FluxQL demo
import "array"
 
array.from(rows: [
  {_time: 2021-01-01T00:00:00Z, _value: "foo"},
  {_time: 2020-01-02T00:00:00Z, _value: "bar"}
])

@esemeniuc
esemeniuc / example.rs
Created March 24, 2023 05:12
Rustls SSLKEYLOGFILE extraction
use rustls;
let roots = rustls::RootCertStore::empty();
let mut tls = rustls::ClientConfig::builder()
.with_safe_defaults()
.with_root_certificates(roots)
.with_no_client_auth();
tls.key_log = Arc::new(rustls::KeyLogFile::new());
let client = Arc::new(