selfjungle Just another WordPress weblog

27Mar/150

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)
{
  ++arg1;
  increment_iterator(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...);
    increment_iterator(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;
    operator()(args...);
  }
  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
26Mar/150

use cppreference.com’s documentation in kdevelop

# from http://en.cppreference.com/w/Cppreference:Archives, download the Qt format: qch
wget http://upload.cppreference.com/mwiki/images/d/d2/qch_book_20141118.zip
# unzip it and copy to the dir, returned by:
qmake -query QT_INSTALL_DOCS
Filed under: Uncategorized No Comments
24Mar/150

generic linux youcompleteme install

# install vundle[1]
mkdir -p ~/.vim/bundle
cd  ~/.vim/bundle
git clone https://github.com/gmarik/Vundle.vim.git ~/.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/.ycm_extra_conf.py [3]

[1] vundle: https://github.com/gmarik/Vundle.vim
[2] https://gist.github.com/cs0rbagomba/a06452fe7bd50cb39c8f
[3] https://gist.github.com/cs0rbagomba/49ded0d74042e95d74d1

Original YCM guide: https://github.com/Valloric/YouCompleteMe#full-installation-guide

Filed under: Uncategorized No Comments
20Mar/150

gdb command line history

edit ~/.gdbinit and add:

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

gcov

# usual gcov run:
rm -rf COVERAGE_DIR && mkdir COVERAGE_DIR
lcov --directory BUILD_DIR -z
RUN_EXECUTABLE
lcov --directory BUILD_DIR --capture -b SOURCE_DIR -o lcov.info
genhtml --frames --legend -o COVERAGE_DIR lcov.info


# gcc  & gcov version mismatch:
geninfo: ERROR: PATH/FILE.gcno: reached unexpected end of file

# executable and *.gcda files are created in the different build runs
# graph file has been compiled again after binaries built.
Processing FILE.gcda
PATH/FILE.gcda:stamp mismatch with graph file

$ hexdump -e '"%x\n"' -s8 -n4 myclass.gcda
7ef26ee7
$ hexdump -e '"%x\n"' -s8 -n4 myclass.gcno
7ef26ee7

Filed under: Uncategorized No Comments
13Mar/150

format drive

parted -a optimal DEV
  rm NUM
  mkpart primary 0 -1
  set 1 boot on
  quit

mkfs.ext3 DEV1
Filed under: Uncategorized No Comments
11Mar/150

nvidia libGL trouble

if
ldd $(which glxinfo)
libGL.so.1 => /usr/lib/libGL.so.1 (0x00007f3dd494f000)

instead of
ldd $(which glxinfo)
libGL.so.1 => /usr/lib64/opengl/nvidia/lib/libGL.so.1 (0x00007f2fbc62a000)

then
rm /usr/lib/libGL.so.1.2.0
ln -s /usr/lib64/opengl/nvidia/lib/libGL.so.1 /usr/lib/libGL.so.1.2.0

Filed under: Uncategorized No Comments
10Mar/150

sytem information/monitoring

# sys-apps/pciutils
lspci -k

# app-admin/sysstat
iostat -dm 2

# sys-process/htop
htop

# sys-apps/util-linux
lsblk

# sys-apps/usbutils
lsusb -v

# sys-process/iotop
iotop -o

#sys-power/acpi
acpi

# app-admin/mcelog

emerge -avq sys-apps/pciutils app-admin/sysstat sys-process/htop sys-apps/util-linux sys-apps/usbutils sys-process/iotop sys-power/acpi
Tagged as: No Comments
2Mar/150

intel 7265 wifi, iwlwifi and systemd

compile your kernel to support:
CONFIG_IWLWIFI=y
CONFIG_IWLMVM=y

# check which firmware version suits your kernel [1]
emerge -av iwl7265-ucode iw wpa_supplicant
# or maybe not. If your kernel want's another version, (see dmesg) (3.19 wanded the D: iwlfiwi-7265D.12.ucode) just download the correct version, unpack and move the ucode file to /usr/lib/firmware

# iwconfig is deprecated, use iw to check the wifi iface
iw dev
# ... interface wlp2p0

# manual:
wpa_supplicant -B -i wlp2p0 -c /etc/wpa_supplicant/wpa_supplicant.conf
dhcpcd wlp2p0

# or by systemd. Do not enable wpa_supplicant, it will be started by dhcpcd
#systemctl enable wpa_supplicant@wlp2p0
cat "env wpa_supplicant_driver=nl80211" >> /etc/dhcpcd.conf
systemctl enable dhcpcp@wlp2p0

# my wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
update_config=1
network={
ssid="MY ESSID"
psk="MY PASS"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
auth_alg=OPEN
}

[1] https://wireless.wiki.kernel.org/en/users/drivers/iwlwifi

Tagged as: No Comments
1Mar/150

update gentoo

emerge --update --newuse --deep --with-bdeps=y @world -av
emerge --depclean -av
emerge @preserved-rebuild -av
perl-cleaner --all
python-updater
revdep-rebuild -pv
rm -rf /usr/share/man/??
rm -rf /usr/share/man/??_*
eix-test-obsolete
glsa-check -t all

https://wiki.gentoo.org/wiki/Gentoo_Cheat_Sheet

Tagged as: No Comments