selfjungle Just another WordPress weblog


c, c++ measure elapsed time

Elapsed time of function, for performance measurement

C style

#include <sys/time.h>

struct timeval begin_v, end_v;
gettimeofday(&begin_v, NULL);
// the function
gettimeofday(&end_v, NULL);

const double s = end_v.tv_sec + end_v.tv_usec / 1e6 - begin_v.tv_sec - begin_v.tv_usec / 1e6;
printf ("Elasped time: %f s\n", s );

C++ style

#include <chrono>

std::chrono::time_point<std::chrono::system_clock> start, end;
start = std::chrono::system_clock::now();
// the function
end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end-start;

std::cout << "Elapsed time: " << elapsed_seconds.count() << " s" << std::endl;
Tagged as: , No Comments

set mouse sensitivity – with xset

# get current stat:
xset q | grep -A 1 Pointer
# set new:
# xset m acceleration threshold
xset m 3/2 4

Filed under: Uncategorized No Comments

openwrt post-flash

# set root password

# install web UI
ssh root@
  opkg update
# if you'll get 404 errors, edit /etc/opkg.conf and change the package paths:
  opkg install luci-ssl
# if you have default_postinst: not found, script returned status 127 errors, check if the package version is ok: maybe?
# remove & try again:
opkg remove --force-remove luci-ssl px5g libustream-polarssl libpolarssl luci luci-proto-ppp luci-mod-admin-full luci-base luci-lib-nixio  uhttpd-mod-ubus  uhttpd lua luci-app-firewall  luci-theme-bootstrap libiwinfo-lua liblua libuci-lua rpcd luci-lib-ip libubus-lua

# start web server
/etc/init.d/uhttpd start
/etc/init.d/uhttpd enable

# enable wifi
uci set wireless.@wifi-device[0].disabled=0; uci commit wireless; wifi
uci show wireless | grep disabled

login to and do the rest...

Tagged as: No Comments

zfs and portage’s var directories

While /var is usually for non-crucial content, caches[3], pid files, etc, portage has a different idea [1]:

/var/db/pkg Portage stores the state of your system
/var/lib/portage The versions for the applications you have explicitly installed

These directories store the current tree state, there is no way recreating them if they are deleted.[2]

So if you plan to use ZFS with separate / and /var to take a snapshot of /, install some packages and then rollback the snapshot as you changed your mind, your / and /var will be out of sync!

/var/db/pkg and /var/lib/portage has to be on /.

mkdir /usr/var_db_pkg /usr/var_lib_portage
cp -r /var/lib/portage /usr/var_lib_portage
cp -r /var/db/pkg /usr/var_db_pkg
rm -rf /var/lib/portage /var/db/pkg
ln -s /usr/var_lib_portage /var/lib/portage
ln -s /usr/var_db_pkg /var/db/pkg

[2] Or at least it is painfull. To avoid the initial circular-dependency hell, issue:

emerge --nodeps dev-lang/perl dev-lang/python dev-libs/libxml2 dev-util/cmake dev-util/pkgconfig sys-apps/acl ys-apps/systemd sys-devel/automake sys-libs/glibc sys-libs/ncurses sys-libs/zlib virtual/libudev

[3] what you'd have to recreate: powertop's calibration measurements, gentoolkit's busybox and initramfs

Tagged as: , No Comments

zfs set ditto blocks after file system creation

"The copies property works for all new writes, so I recommend that you set that policy when you create the file system or immediately after you create a zpool." [1]

So how can you force a complete reread-rewrite?
With (non-incremental) backup and restore:

# settings properties won't work:
zfs set copies=2 POOL/FS
zfs snapshot SNAPSHOT
zfs send SNAPSHOT | xz --threads=12 --verbose > FILE.img.xz
zfs destoy POOL/FS
xz --threads=12 --decompress --verbose  FILE.img.xz -c | zfs receive POOL/FS

# so you have to create & override a new FS with copies=2
zfs snapshot SNAPSHOT
zfs send SNAPSHOT | xz --threads=12 --verbose > FILE.img.xz
zfs destoy POOL/FS
zfs create ... -o copies=2  POOL/FS
xz --threads=12 --decompress --verbose  FILE.img.xz -c | zfs receive POOL/FS -F


Tagged as: No Comments


add -dpi 276 to /etc/X11/xinit/xserverrc

at firefox about:config set layout.css.devPixelsPerPx to 2

to be continued...

Filed under: Uncategorized No Comments

c++ for_each on multiple ranges

‚Ä©template<typename InputIter1, typename InputIter2, typename BinaryFunction>
BinaryFunction for_each_on_two_ranges(InputIter1 first1, InputIter1 last1, InputIter2 first2, BinaryFunction f) {
  for (; first1 != last1; ++first1, ++first2) {
    f(*first1, *first2);
  return f;

or with variadic templates:

void increment_iterator() {}
template<typename Arg1, typename... Args>
void increment_iterator(Arg1& arg1, Args&... args)

template<typename InputIter1, typename Function, typename... InputIters>
Function for_each_N(InputIter1 first1, InputIter1 last1, Function f, InputIters... iters) {
  for (; first1 != last1; ++first1) {
    f(*first1, *iters...);
  return f;

the following functor can take any parameter:

template<typename T>
struct Add {
  Add() : value() {}

  void operator()() {}
  template<typename U=T, typename... Args>
  void operator()(const U& arg1, const Args&... args) {
    value+= arg1;
  T value;

std::vector<int> a = { 1, 2, 3, 4, 5 };
std::vector<int> b = { 1, 2, 3, 4, 5 };
std::vector<int> c = { 1, 2, 3, 4, 5 };
std::vector<int> d = { 1, 2, 3, 4, 5 };

Add<int> sum2 = for_each_N(a.begin(), a.end(), Add<int>(), b.begin());
Add<int> sum4 = for_each_N(a.begin(), a.end(), Add<int>(), b.begin(), c.begin(), d.begin());
Tagged as: No Comments

use’s documentation in kdevelop

# from, download the Qt format: qch
# unzip it and copy to the dir, returned by:
qmake -query QT_INSTALL_DOCS
Filed under: Uncategorized No Comments

generic linux youcompleteme install

# install vundle[1]
mkdir -p ~/.vim/bundle
cd  ~/.vim/bundle
git clone ~/.vim/bundle/Vundle.vim
# edit your ~/.vimrc [2]
# open vim, and enter :PluginInstall
# YCM will be pulled but not installed:
cd ~
mkdir ycm_build
cd ycm_build
cmake -G "Unix Makefiles" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp -DUSE_SYSTEM_BOOST=ON -DUSE_SYSTEM_LIBCLANG=ON
make ycm_support_libs

# edit your global ~/.vim/ [3]

[1] vundle:

Original YCM guide:

Filed under: Uncategorized No Comments

gdb command line history

edit ~/.gdbinit and add:

set history save
set history filename ~/.gdb_history
Filed under: Uncategorized No Comments