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());
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
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
gdb command line history
edit ~/.gdbinit
and add:
set history save set history filename ~/.gdb_history
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
format drive
parted -a optimal DEV rm NUM mkpart primary 0 -1 set 1 boot on quit mkfs.ext3 DEV1
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
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
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
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