Skip to content

Instantly share code, notes, and snippets.

@elazarl
elazarl / BlockReadWriter.go
Created May 30, 2011 13:57
golang - A blocking reader
package main
import (
"fmt"
"bytes"
"os"
"log"
"time"
"io"
"http"
@elazarl
elazarl / sprint_int.c
Last active May 9, 2023 08:20
Small standalone stupid function to convert integer value to string, for code with zero library support
#include <stdint.h>
#include <stdio.h>
char *sprint_int_(char *out, uint64_t a, uint64_t base) {
char itoc[] = "0123456789abcdef";
char *orig_out = out;
uint64_t a_ = a;
int i = 0;
while (a_ >= base) {
a_ /= base;
i++;
@elazarl
elazarl / frag.go
Created February 13, 2017 15:32
Creating fragmentation on purpose to crash golang's GC
// This tiny program show how to cause fragmentation in golang, killing it
// even though no real memory is actually used.
// Compile:
// $ go build frag.go
// Run:
// $ time (setrlimit $[100*1000];./frag)
// .....(until it crashes)
package main
import "fmt"
@elazarl
elazarl / SparkEventSource.java
Last active June 17, 2021 08:12
Suuport SSE/Server-Sent-Events/EventSource for java spark sparkjava.com
package com.spark;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.servlet.*;
import org.eclipse.jetty.servlets.EventSource;
import org.eclipse.jetty.servlets.EventSourceServlet;
import spark.Service;
import spark.Spark;
import spark.embeddedserver.jetty.EmbeddedJettyServer;
@elazarl
elazarl / cp.go
Last active June 27, 2020 14:42
Unfortunately, searching for "golang copy file" gives subtly wrong code snippets (e.g. https://groups.google.com/d/msg/golang-nuts/JNyQxQLyf5o/kbGnTUK32TkJ that don't check close error code). This is an attempt to copy file content from `src` to `dst`
package cp
import (
"io"
"os"
)
func cp(dst, src string) error {
s, err := os.Open(src)
if err != nil {
@elazarl
elazarl / stack_size.c
Last active April 12, 2020 13:27
This is a demonstration showing how to print stack size of a certain function
// We demonstrate how to get the stack usage of a function
// using the __builtin_frame_address function of GCC and clang.
//
// This function returns:
// The frame is the area on the stack that holds local variables and saved registers.
// The frame address is normally the address of the first word pushed on to
// the stack by the function.
//
// by saving its value and comparing it to a callee, we get the stack usage of this
// function.
@elazarl
elazarl / simple_transform_before_zstd.c
Created January 30, 2020 15:35
Check if a simple transform before applying zstd reduce file size
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <unistd.h>
char buf[1024*1024];
@elazarl
elazarl / bench_comp_decomp.py
Last active January 29, 2020 14:57
Measures compression and decompression speed and size ratio on many files
#!/usr/bin/python3
import argparse
from collections import namedtuple
import csv
import os
import shutil
import subprocess
import statistics
import re
@elazarl
elazarl / test_vec_to_c.py
Last active January 26, 2020 21:59
NIST test vector to C format
# This converts test vectors from
# https://csrc.nist.gov/Projects/cryptographic-algorithm-validation-program/CAVP-TESTING-BLOCK-CIPHER-MODES
# to a C-struct format.
# For example to initialize
# struct test_case {
# int count;
# int data_unit_len;
# std::string key;
# std::string index;
# std::string plaintext;
@elazarl
elazarl / uuid4sym.py
Last active May 16, 2019 05:12
replace UUID with distinguishable emojis
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""uuid4sym - replace UUID version 4 to an easily distinguishable symbol
When looking at a long log file with some UUID4 uuids, you'll have a hard time
distinguishing between two UUIDs.
Both 26cb1b84-7748-11e9-9437-2bf0efaa1b2e and 2725e8de-7748-11e9-a9c8-f3e5d10ab3d6
looks similar to the human eye.