Skip to content

Instantly share code, notes, and snippets.

View sighingnow's full-sized avatar
💭
typing...

Tao He sighingnow

💭
typing...
View GitHub Profile
@sighingnow
sighingnow / .vimrc
Last active September 29, 2021 17:35
VIM config file.
if &compatible
set nocompatible " Be iMproved
endif
set number
set confirm
set autoread
set spell
set clipboard+=unnamed
set mouse+=a

Why COW was deemed ungood for std::string.

COW, short for copy on write, is a way to implement mutable strings so that creating strings and logically copying strings, is reduced to almost nothing; conceptually they become free operations like no-ops.

Basic idea: to share a data buffer among string instances, and only make a copy for a specific instance (the copy on write) when that instance's data is modified. The general cost of this is only an extra indirection for accessing the value of a string, so a COW implementation is highly desirable. And so the original C++ standard, C++98, and its correction C++03, had special support for COW implementations, and e.g. the g++ compiler's std::string implementations used COW.

So why was that support dropped in C++11?

In particular, would the same reason or reasons apply to a reference counted immutable string value class?

@sighingnow
sighingnow / rootless-container-from-scratch.rs
Last active August 30, 2021 01:59
Rust version of "Rootless Containers From Scratch" by Liz Rice, https://www.youtube.com/watch?v=jeTKgAEyhsA
use std;
use std::env;
use std::fs;
use std::io::Write;
use nix::mount;
use nix::sched;
use nix::sched::CloneFlags;
use nix::sys::signal::Signal;
use nix::sys::wait::waitpid;
@sighingnow
sighingnow / containers-from-scratch.rs
Created August 29, 2021 08:38
Rust version of "Containers From Scratch" by Liz Rice, https://www.youtube.com/watch?v=8fi7uSYlOdc
use std::env;
use nix::sched;
use nix::sched::CloneFlags;
use nix::sys::signal::Signal;
use nix::sys::wait::waitpid;
use nix::unistd;
use cgroups_rs as cgroup;
use cgroups_rs::{Cgroup};
use cgroups_rs::cgroup_builder::{CgroupBuilder};
@sighingnow
sighingnow / list_live_objects.py
Last active March 16, 2021 06:41
List live objects of certain type in current Python interpreter.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import gc
def list_live_objects(ty=None):
def go(results, elements, bitset):
for elem in elements:
identity = id(elem)
@sighingnow
sighingnow / ffmpeg.md
Created June 30, 2019 02:31 — forked from protrolium/ffmpeg.md
using ffmpeg to extract audio from video files

ffmpeg

Converting Audio into Different Formats / Sample Rates

Minimal example: transcode from MP3 to WMA:
ffmpeg -i input.mp3 output.wma

You can get the list of supported formats with:
ffmpeg -formats

Convert WAV to MP3, mix down to mono (use 1 audio channel), set bit rate to 64 kbps and sample rate to 22050 Hz:

@sighingnow
sighingnow / Docset for LLVM and Clang.md
Last active March 27, 2019 09:38
Build docset for LLVM/Clang

Build LLVM/Clang Docset

  1. Modify LLVM/Clang doxygen.config.in

    • GENERATE_DOCSET = YES
    • DISABLE_INDEX = YES
    • SEARCHENGINE = NO
    • GENERATE_TREEVIEW = NO
    • GENERATE_TAGFILE =
  • LLVM: @abs_top_builddir@/doxygen/llvm(clang).tag
@sighingnow
sighingnow / hemispheres.mma
Created October 19, 2016 11:32
Night Hemispheres in Mathematica.
(* set geography data server *)
server := "http://www.staremapy.cz/naturalearth/`1`/`2`/`3`.png"
(* plot *)
GeoGraphics[{GeoStyling[Opacity[0.5], GeoServer -> server],
NightHemisphere[]},
GeoBackground -> GeoStyling["ReliefMap", GeoServer -> server]]
(* more simple graph *)
GeoGraphics[{NightHemisphere[Now], Red, Point[$GeoLocation]}]
@sighingnow
sighingnow / cgroup-limit-memory.c
Last active July 27, 2018 04:17
Limit memory usage with libcgroup interface.
#include <assert.h>
#include <libcgroup.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#define _GNU_SOURCE
#include <unistd.h>