Skip to content

Instantly share code, notes, and snippets.

// Passing container explicitely to all its functions, and using typed cursors (i.e. indices)
// rather than all-knowing iterators (i.e. pointers) allows to use the same return type for
// iteration, look-up etc.. regardless of what's going to happen next.
//
// Downsides:
// A cursor requires an indirection when looking at the data in the debugger.
// I.e. a `char*` member shows you directly what you should be looking at,
// whereas if you have the pos, you need the container and to use debugger expressions
// to see the content.
//
@uucidl
uucidl / ZZ_Draft.org
Last active September 1, 2017 12:49
Maintaining APIs: Resist adding that boolean parameter!

Resist adding that boolean parameter!

Also known as: “The Boolean Trap” “Boolean parameters are wrong”

Consider a trivial software interface with one entry point proc:

// Transforms a value (type T0) into another value (type T1) with effect E0
T1 proc(T0);
@uucidl
uucidl / adl_barrier_idiom.cpp
Last active April 9, 2023 03:10
ADL Barrier Idiom
// What you do when you want to prevent ADL from kicking in, and force your
// users to use fully qualified names.
namespace module
{
struct Foo { int a, b; }; // struct defined in one namespace
namespace functions
{
void Flaggerbify(Foo* foo); // function defined in another
@uucidl
uucidl / repro.c
Last active August 20, 2017 17:56
Reproduction of an optimizer bug with Visual Studio 2017
/* Repro optimizer issue with Visual Studio 2017 */
/* @language: c99 */
/*
# Visual Studio 2015 (working)
--
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\cl.exe
cl.exe -Fe:repro.exe repro.c -nologo -FC -EHsc -Z7 -Oi -GR- -Gm- -O2 -Z7 -W4 -WX -DEBUG
@uucidl
uucidl / 00-Rhetorics.org
Last active January 25, 2018 10:32
Rhetorics

Techniques of persuasion.

Has had a bad rap throughout ages. Appears necessary in democratic societies. Preserved under authoritarian systems for justice and theology, and for elite groups. In western republic democracies, mainly practiced by professional politicians (elective nobility) and lawyers. Porosity between the two groups.

More and more essential in the companies that want to emphasize group problem solving and collaboration. Practiced without knowing it, in a dry style, by engineers via their communications and documentations.

Skill

  • Magic/Mysterium. In classical times it was clear that it takes time to develop know-how. Practice. Initiation. Hence roles of schools as safe space for learning and practice.
  • Eloquence
@uucidl
uucidl / atan_approx.c
Last active January 4, 2018 00:12
Approximations
// Atan approximation
// https://www.dsprelated.com/showarticle/1052.php#tabs1-comments
#include <math.h>
#include <stdio.h>
double atan_approx(double z)
{
double m = z<0? -1.0:1.0;
z *= m;
@uucidl
uucidl / canoscan_build.sh
Created January 22, 2018 22:04
little program to use if you're canoscan lide30 scanner says "device not configured"
#!/usr/bin/env bash
export C_INCLUDE_PATH=/usr/local/include/libusb-1.0
export LIBRARY_PATH=/usr/local/lib
(O=canoscan ; cc canoscan_unit.c -o "${O}" -lusb-1.0 && printf "PROGRAM\t%s\n" "${O}")
@uucidl
uucidl / ZZ_CodeResources.md
Last active October 5, 2018 12:33
Task_api
@uucidl
uucidl / 00ctztree.md
Last active December 22, 2020 08:31
Octave Tree

CTZTree

A tree can be produced by counting the number of trailing zeros from an input integer index.

This count ('c') of trailing zeros (or position of the lowest bit) comes back every 2^c sample, i.e. corresponds to a frequency of 2^-c

Furthermore every sample corresponds with one and only one octave.

@uucidl
uucidl / README.md
Last active October 29, 2018 09:01
Rokusa (Pure)

Some useful code written in ion