Skip to content

Instantly share code, notes, and snippets.

@karlseguin
karlseguin / test_runner.zig
Last active April 19, 2024 00:44
Custom Zig Test Runner
// in your build.zig, you can specify a custom test runner:
// const tests = b.addTest(.{
// .target = target,
// .optimize = optimize,
// .test_runner = "test_runner.zig", // add this line
// .root_source_file = .{ .path = "src/main.zig" },
// });
const std = @import("std");
const builtin = @import("builtin");
@karlseguin
karlseguin / db.ex
Created February 5, 2022 03:39
Elixir without Ecto, A thin Postgrex wrapper
# see https://www.openmymind.net/Elixir-Without-Ecto/
defmodule A.DB do
defmacro __using__(_) do
quote location: :keep do
@name __MODULE__
def child_spec(opts) do
%{
id: __MODULE__,
@karlseguin
karlseguin / bench.zig
Created November 13, 2023 01:27
streamUntilDelimiter Buffered vs Not
const std = @import("std");
const LOOPS = 1000;
pub fn main() !void {
var in: [10000]u8 = undefined;
try std.os.getrandom(&in);
var fbs = std.io.fixedBufferStream(&in);
var out: [10000]u8 = undefined;
@karlseguin
karlseguin / bench.zig
Last active October 8, 2023 15:04
zig std.indexOf benchmark
const std = @import("std");
const ITERATIONS = 1_000_000;
pub fn main() !void {
benchmark("needle.len == 1, haystack.len == 11 ", "hello world", "w", 6);
benchmark("needle.len == 1, haystack.len == 3091", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sit amet erat elit. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Mauris cursus quis eros quis vestibulum. Vestibulum in convallis nulla. Nulla mauris velit, tempus id varius sit amet, sodales et magna. Aenean vel augue vitae erat luctus maximus. Nam dignissim diam felis, id fermentum neque dapibus quis. Quisque volutpat ac nibh a blandit. Aenean id felis aliquam, aliquet lorem vel, lobortis ligula. Morbi lacinia risus ac dictum accumsan. Maecenas dapibus elit in magna porta tempus. Proin luctus neque sed erat sagittis gravida. Praesent at lacinia libero.Curabitur sagittis risus ut suscipit cursus. Maecenas at gravida turpis, id malesuada felis. Praesent velit dui, pulvinar eget vehicula sed, semper
@karlseguin
karlseguin / utf8_validate.zig
Last active September 30, 2023 06:00
Zig's utf8ValidateSlice vs Go's implementation
const std = @import("std");
const mem = std.mem;
const ITERATIONS = 20_000;
pub fn main() !void {
try benchmark("empty", "", true);
try benchmark("short.ascii", "it's over 9000!!", true);
try benchmark("long.ascii", "Lorem ipsum dolor sit amet, pri legere suscipit repudiare at, cu vix aliquip pertinacia quaerendum, in eam dicat cetero eripuit. Duo odio nonumy viderer at, et sea vidit dolor animal, has persius conceptam id. Vide idque copiosae ut qui, ut lorem atomorum mei, in eos suscipit eleifend. Illud principes no eos, pri dolorem singulis ne, ex pri malorum argumentum scribentur. Et altera regione per. Disputando contentiones no mei, et vel discere meliore constituam. Te quo legere nostrum deleniti, ad eros putent tritani per.Repudiandae mediocritatem ut est, ex sea dicit evertitur. Per tritani detraxit an. Pro no fastidii tractatos, per purto affert accusata no, affert consequat mel ea. Cum ex postulant gubergren, has quot vidit argumentum no.Eu est esse feugait, mea no augue debet constituam. Sea s
const std = @import("std");
const net = std.net;
const Queue = std.atomic.Queue;
const ArenaAllocator = std.heap.ArenaAllocator;
// THIS _MUST_ be placed in your main.zig file
pub const io_mode = .evented;
pub fn main() anyerror!void {
@karlseguin
karlseguin / waf.conf
Created October 22, 2021 13:02
basic nginx waf
# WAFs are a waste of time. False positives negatively impact actual users.
# And for what? Protection against vulnerabilities that, if you still have
# in this day in age, you're in more trouble than you think.
# Still, to keep my logs clean, I like to run something like the follwoing:
location ~ \.php$ { access_log off; return 444; }
location ~ \.asp$ { access_log off; return 444; }
location ~ \.aspx$ { access_log off; return 444; }
location ~ /Admincenter/ { access_log off; return 444; }
location /console/ { access_log off; return 444; }
@karlseguin
karlseguin / gist:1876859
Created February 21, 2012 14:37
sublime text 2 script to save to remove server
#variation of http://urbangiraffe.com/2011/08/13/remote-editing-with-sublime-text-2/ that adds creating new folders remotely.
import sublime_plugin, os
class RemoteEdit(sublime_plugin.EventListener):
def on_post_save(self, view):
remote = { "/Users/leto/work/project": ["/usr/bin/scp", None, "user@server", "root_remote_path_like ~/project/", None] }
for dirname, target in remote.iteritems():
if view.file_name().startswith( dirname ):
@karlseguin
karlseguin / util.go
Created August 13, 2020 02:05
Dummy modules in go
var Util util
type util struct{}
func (_ util) PadLeft(s string, n int) string {
//...
}
// ...
@karlseguin
karlseguin / no_return.md
Created February 25, 2020 03:36
elixir needs a return statement

This works most of the time

def handle(data) do
	with {:ok, product} <- Jason.decode!(data),
	     {:ok, category} <- Category.load(data.category_id)
	do
		# todo
	end
end