British vs American

  • flat - appartment
  • congestion - traffic jam
  • take away - to go

TIL

Names that begin with either ‘is’ or ‘to’ followed by a lowercase letter reserved by POSIX.

Link to the manual

Issues with HTC Vive

  • headphone jack lose sometimes and one ear stop work
  • HDMI fall off
  • the base station broke; it always showed blue light
  • headphones stopped working
  • audio left and right ears sometimes swapped
  • one out of 3 trackers refuses to turn on sometimes
  • hard to find the side button on HDMI, but very easy to press it by assident

Common Chord progressions

I – iV – V7
I – V – vi – IV
I – vi – IV – V
I – V – vi – iii – IV – I – IV – V
I – IV – V – I
I – I – I – I – IV – IV – I – I – V – V – I – I
I – IV – V – IV

ii – IV – V
V – IV – I
vi – IV – I – V
vi – V – IV – III
vi – V – VI – V
ii – I – V6 – bVII

TIL

// clang-format on
// clang-format off

My dream job at 2007 (10 years ago)

In office:

  • salary $3 000 or more
  • big bright office
  • at winter warm and at summer cool
  • clean restroom
  • no cigarette smoke
  • hot water in the sink
  • mirror in the restroom
  • sofa
  • tea
  • trash-bin near by the desktop
  • free classes
  • ability to pick your own specification for the computer
  • licensed software
  • floating hours

WFH

  • salary $3,000 or more
  • big bright office
  • at winter warm and at summer cool
  • clean restroom
  • no cigarette smoke
  • hot water in the sink
  • mirror in the restroom
  • sofa
  • tea
  • trash-bin near by the desktop
  • free classes
  • ability to pick your own specification for the computer
  • licensed software
  • floating hours

My current dream job

  • work on my own ideas
  • be able to drop the project at any time
  • be able to start any project at any time
  • travel (carry with me in the luggage my PC setup with 2 big screens and VR setup), have high speed internet while I am traveling
  • work from home
  • big bright office
  • at winter warm and at summer cool
  • floating hours
  • no planning
  • make technical decisions
  • I want to have a team, and they will do exactly what I asked them to do without any questions and complaining
  • program in C++
  • working on making games
  • be able to stream on Twitch my work

Play video using VDPAU decoder

mplayer -vo vdpau and -vc ffh264vdpau,ffmpeg12vdpau,ffwmv3vdpau,ffvc1vdpau -ao alsa file.mp4

Ideal game engine

  • C++ (including scripting on C++)
  • Multiplatform (Linux, Mac, iOS, Android)
  • Licence (free and I can use the engine for publishing games on AppStore and Google Play)
  • Good tutorials

How to upload file using linux command tool ftp

$ ftp host
Connected to host (10.139.88.123).
220 (vsFTPd 3.0.2)
Name (host:user): user
331 Please specify the password.
Password: password
ftp> cd path
ftp> put localfile remotepath

How to make SSH tunnel


      local   ssh connection   remote1       remote2
             o--------------->o
              +------------->+
              ^              v
TCP port [L]o-+              +------------->o TCP port [R]

$ ssh -L L:remote2:R remote1

     local2   local1 ssh connection  remote
                    o------------->o
                     +------------+
                     v            ^
TCP port [L] o<------+            +<-o TCP port [R]
$ ssh -R R:local2:L remote

How to get absolute path

$ man realpath
    char *relativePath = "relativePath/file.txt"
    char *absolutePath = realpath(relativePath, NULL);
    if (!absolutePath)
    {
      stc::cerr << "Cannot access " << relativePath << ": No such file or directory";
      return -1;
    }
    // use it
    free(absolutePath);

How to make screenshot in MacOS X

http://www.imore.com/how-take-screenshot-mac-os-x

Command + Shift + 3 whole screen
Command + Shift + 4 area

How to find current executable’s path

#include <unistd.h>
#ifdef __APPLE__
#include <mach-o/dyld.h>
#endif

#ifndef __APPLE__
std::string getExecutableName()
{
    char buf[MAXPATHLEN];
    ssize_t len;
    if ((len = readlink("/proc/self/exe", buf, sizeof(buf) - 1)) != -1)
        buf[len] = '\0';
    return buf;
}
#else
std::string getExecutableName()
{
    char exe[MAXPATHLEN];
    uint32_t bufSize = sizeof(exe);
    _NSGetExecutablePath(exe, &bufSize);
    char buf[MAXPATHLEN];
    ssize_t len;
    if ((len = readlink(exe, buf, sizeof(buf) - 1)) != -1)
        buf[len] = '\0';
    return buf;
}
#endif

Remove duplicates from container without sorting the container

#include <algorithm>
#include <vector>
struct target_less
{
    template<class It>
    bool operator()(It const &a, It const &b) const { return *a < *b; }
};
struct target_equal
{
    template<class It>
    bool operator()(It const &a, It const &b) const { return *a == *b; }
};
template<class It> It uniquify(It begin, It const end)
{
    std::vector<It> v;
    v.reserve(static_cast<size_t>(std::distance(begin, end)));
    for (It i = begin; i != end; ++i)
    { v.push_back(i); }
    std::sort(v.begin(), v.end(), target_less());
    v.erase(std::unique(v.begin(), v.end(), target_equal()), v.end());
    std::sort(v.begin(), v.end());
    size_t j = 0;
    for (It i = begin; i != end && j != v.size(); ++i)
    {
        if (i == v[j])
        {
            using std::iter_swap; iter_swap(i, begin);
            ++j;
            ++begin;
        }
    }
    return begin;
}

Remove duplicates from container

sort( vec.begin(), vec.end() );
vec.erase( unique( vec.begin(), vec.end() ), vec.end() );

Load file into string

std::ifstream t("file.txt");
std::stringstream buffer;
buffer << t.rdbuf();

copy file

std::ifstream  src("from.ogv", std::ios::binary);
std::ofstream  dst("to.ogv",   std::ios::binary);
dst << src.rdbuf();

string low case

#include <algorithm>
#include <string> 

std::string data = "Abc"; 
std::transform(data.begin(), data.end(), data.begin(), ::tolower);

list of files in a directory

DIR *dir;
struct dirent *ent;
if ((dir = opendir ("c:\\src\\")) != NULL) {
  /* print all the files and directories within directory */
  while ((ent = readdir (dir)) != NULL) {
    printf ("%s\n", ent->d_name);
  }
  closedir (dir);
} else {
  /* could not open directory */
  perror ("");
  return EXIT_FAILURE;
}

http://stackoverflow.com/questions/612097/how-can-i-get-a-list-of-files-in-a-directory-using-c-or-c

C++ Erase vector element by value rather than by position?

vec.erase(std::remove(vec.begin(), vec.end(), 8), vec.end());

How to get my ip address in c Linux -…

getifaddrs(&addrs);
tmp = addrs;

while (tmp) 
{
    if (tmp->ifa_addr && tmp->ifa_addr->sa_family == AF_INET)
    {
        struct sockaddr_in *pAddr = (struct sockaddr_in *)tmp->ifa_addr;
        printf("%s: %s\n", tmp->ifa_name, inet_ntoa(pAddr->sin_addr));
    }

    tmp = tmp->ifa_next;
}

freeifaddrs(addrs);

How do I get the directory that a program is running from?

#include <stdio.h>  /* defines FILENAME_MAX */
#ifdef WINDOWS
    #include <direct.h>
    #define GetCurrentDir _getcwd
#else
    #include <unistd.h>
    #define GetCurrentDir getcwd
 #endif

 char cCurrentPath[FILENAME_MAX];

 if (!GetCurrentDir(cCurrentPath, sizeof(cCurrentPath)))
     {
     return errno;
     }

cCurrentPath[sizeof(cCurrentPath) - 1] = '\0'; /* not really required */

printf ("The current working directory is %s", cCurrentPath);

Windows:

int bytes = GetModuleFileName(NULL, pBuf, len);
if(bytes == 0)
	return -1;
else
	return bytes;

Linux:

char szTmp[32];
sprintf(szTmp, "/proc/%d/exe", getpid());
int bytes = MIN(readlink(szTmp, pBuf, len), len - 1);
if(bytes >= 0)
	pBuf[bytes] = '\0';
return bytes;

Converting YUV into BGR or RGB

for(int i = 0, j=0; i < 1280 * 720 * 3; i+=6, j+=4)
{
    m_RGB->imageData[i] = pData[j] + pData[j+3]*((1 - 0.299)/0.615);
    m_RGB->imageData[i+1] = pData[j] - pData[j+1]*((0.114*(1-0.114))/(0.436*0.587)) - pData[j+3]*((0.299*(1 - 0.299))/(0.615*0.587));
    m_RGB->imageData[i+2] = pData[j] + pData[j+1]*((1 - 0.114)/0.436);
    m_RGB->imageData[i+3] = pData[j+2] + pData[j+3]*((1 - 0.299)/0.615);
    m_RGB->imageData[i+4] = pData[j+2] - pData[j+1]*((0.114*(1-0.114))/(0.436*0.587)) - pData[j+3]*((0.299*(1 - 0.299))/(0.615*0.587));
    m_RGB->imageData[i+5] = pData[j+2] + pData[j+1]*((1 - 0.114)/0.436);
}

Convert time_t to string with format YYYY-MM-DD HH:MM:SS

char buff[20];
time_t now = time(NULL);
strftime(buff, 20, "%Y-%m-%d %H:%M:%S", localtime(&now));

How to convert a string variable containing time to time_t type in c++?

const char *time_details = "16:35:12";
struct tm tm;
strptime(time_details, "%H:%M:%S", &tm);
time_t t = mktime(&tm);  // t is now your desired time_t

Path to binary in C

#include <stdio.h>
#include <unistd.h>

int main()
{
  char buffer[BUFSIZ];
  readlink("/proc/self/exe", buffer, BUFSIZ);
  printf("%s\n", buffer);
}
WCHAR path[MAX_PATH];
GetModuleFileName(NULL, path, ARRAYSIZE(path));

Rotate screen

xrandr --output HDMI-0 --rotate left

Set wacom pen on one screeen

xsetwacom set "Wacom Bamboo 16FG 4x5 Pen stylus" MapToOutput HEAD-0

Run Minecraft

java -Xmx1024M -Xms512M -cp minecraft.jar net.minecraft.LauncherFrame

Set keyboard repeat rate

xset r rate 210 120

NATO phonetic alphabet

A .......... 	ALPHA		N .......... 	NOVEMBER
B .......... 	BRAVO 	  	O .......... 	OSCAR
C .......... 	CHARLIE 	P .......... 	PAPA
D .......... 	DELTA 		Q .......... 	QUEBEC
E .......... 	ECHO 		R .......... 	ROMEO
F .......... 	FOXTROT 	S .......... 	SIERRA
G .......... 	GOLF 		T .......... 	TANGO
H .......... 	HOTEL 		U .......... 	UNIFORM
I .......... 	INDIA 		V .......... 	VICTOR
J .......... 	JULIET 		W .......... 	WHISKY
K .......... 	KILO 		X .......... 	X-RAY
L .......... 	LIMA 		Y .......... 	YANKEE
M .......... 	MIKE 		Z .......... 	ZULU

Generate etags for emacs

find . -name "*.cpp" -print0 -or -name "*.c" -print0 -or -name "*.h" -print0 -or -name "*.c" -print0 | xargs -0 etags --append

valgrind

$ /usr/bin/valgrind --tool=memcheck --leak-check=yes --leak-check=full -v --show-reachable=yes [command line]

unixtime conversions

$ date -d @1193144433
Tue Oct 23 15:00:33 CEST 2007
$ date -d @1193144433 "+%Y-%m-%d %T"
2007-10-23 15:00:33

$date --date="Sun Oct 21 9:00:00 PDT 2012" +%s
1350835200

= generate news from lenta.ru

wget http://lenta.ru/rss/ -O- 2> /dev/null | grep http://.*news | sed 's/<link>//g' | sed 's/<.link>/_Printed.htm/g' | wget -i- -O- | grep -v -E '<.?html>' | grep -v -E '<.?title>' | grep -v -E '<!DOCTYPE' | htmldoc - -f "news`date +%Y-%m-%d`.pdf" -t pdf14 --webpage --right 1in --fontsize 10 

Run Minecraft

$ java -Xmx1024M -Xms512M -cp minecraft.jar net.minecraft.LauncherFrame

Gentoo related

emacs startup is slow

add line to /etc/hosts

127.0.0.1 cassiopeia

kernel select

eselect kernel list
eselect kernel set 3

grub updating

edit /boot/grub/grub.conf
mount /boot

kernel build

# cd /usr/src/linux
# make menuconfig
##copy .config file if needed from previus kernel
# cp ../linux.../.config .
# make && make modules_install
## if needed mount /boot partition
# mount /boot
# cp arch/x86_64/boot/bzImage /boot/kernel-2.6.36-gentoo-r5 
# module-rebuild rebuild

mount dvd

# mount -t iso9660 /dev/cdrom /dev/cdrom

play dvd

$ mplayer dvd://1

how to create tab.bz2

compress:

$ tar -jcvf archive_name.tar.bz2 directory_to_compress

extract:

$ tar -jxvf archive_name.tar.bz2 -C /tmp/extract_here/

update your system

# emerge --sync
# emerge --update --deep --ask world

update etc files

# etc-update
sleep 1; xset s activate

Удаление ненужных зависимостей

emerge --update --deep --newuse world && emerge --depclean && revdep-rebuild

Удаление пакета

sudo emerge -av --depclean transcode
ffmpeg -i c++_lessons38_speedup.ogv  -i audio.wav  -map 0:0 -map 1:0 -vcodec copy -av 320k c++_lessons38_audio.ogv 
mplayer dvd://1
sda5 boot
sda6 root

linux-2.6.36-gentoo-r5

GeForce GT420

rip dvd

mplayer dvd://1 -dumpstream -dumpfile rippeddvd.vob

Printing howto

http://www.gentoo.org/doc/en/printing-howto.xml

Add a existing user to existing group

usermod -a -G ftp tony

qfile codegen.py - найти файл

python-updater - обновить пакеты зависящие от питона

portageq owners / /usr/lib64/libeggdbus-1.so - найти пакет владельца файла

Синхронизировать время

sudo rdate -s ptbtime1.ptb.de

SSH login without password

Your aim

You want to use Linux and OpenSSH to automize your tasks. Therefore you need an automatic login from host A / user a to Host B / user b. You don’t want to enter any passwords, because you want to call ssh from a within a shell script.

How to do it

First log in on A as user a and generate a pair of authentication keys. Do not enter a passphrase:

a@A:~> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/a/.ssh/id_rsa): 
Created directory '/home/a/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/a/.ssh/id_rsa.
Your public key has been saved in /home/a/.ssh/id_rsa.pub.
The key fingerprint is:
3e:4f:05:79:3a:9f:96:7c:3b:ad:e9:58:37:bc:37:e4 a@A

Now use ssh to create a directory ~/.ssh as user b on B. (The directory may already exist, which is fine):

a@A:~> ssh b@B mkdir -p .ssh
b@B's password: 

Finally append a’s new public key to b@B:.ssh/authorized_keys and enter b’s password one last time:

a@A:~> cat .ssh/id_rsa.pub | ssh b@B 'cat >> .ssh/authorized_keys'
b@B's password: 

From now on you can log into B as b from A as a without password:

a@A:~> ssh b@B hostname

B A note from one of our readers: Depending on your version of SSH you might also have to do the following changes:

Put the public key in .ssh/authorized_keys2 Change the permissions of .ssh to 700 Change the permissions of .ssh/authorized_keys2 to 640

13:50 03.02.03
### Удаление писем из почтовой очереди sendmail

В каталоге /var/spool/mqueue/ удалить файлы этого письма. Для того чтобы узнать, 
что в почтовой области  надо воспользоваться коммандой mqilq.
Источник: http://penguin.photon.ru/doc/mail/index.html

17:24 04.02.03
### Разрешить отправку писем по IP

1) В файл /etc/mail/access включить строку:
 xxx.xxx.xxx.xxx RELAY
где xxx.xxx.xxx.xxx требуемый IP адрес.

2) Дать команду:
makemap hash /etc/mail/access.db < /etc/mail/access

Информацию по sendmail можно найти по адресу http://gyro.hotbox.ru/sendmail/index.html .

16:25 17.04.03
### Процедура добавление нового пользователя

- получить права root
- добавить пользователя
/usr/sbin/adduser -g ec -G ecsoft -d /home/public/upload/user user
- ввести пароль 
  passwd user
- запретить доступ к серверу через терминал, поправив файл /etc/passwd
- добавить пользователя в SMB
smbadduser user:user
- поменять права папки нового пользователя
chmod 750 /home/public/upload/user

13:48 29.04.03
### Перезапустить SMB сервер

1) получить права ROOT
2) /etc/rc.d/init.d/smb restart 

20:29 17.06.03
### Включить NAT

1) получить права root
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/16 --out-interface eth0 -j SNAT --to-source 194.67.66.38
/sbin/iptables-save > /etc/sysconfig/iptables
echo 1 > /proc/sys/net/ipv4/ip_forward 


вставить в файл /etc/rc.d/rc.local

### Sendmail задумывается

/etc/hosts прописали 
127.0.0.1 localhost
194.67.66.38 ecsoft ecsoft.mephi.ru
192.168.0.1 ecsoft

16:27 18.06.03
### Запустить ftp

ln --symbolic /etc/init.d/vsftpd S50vsftpd



В vsftpd.conf редактируем следующие строки:

anonymous_enable=NO - если не хотим разрешать доступ для анонимных пользователей.
local_enable=YES - чтобы разрешить доступ локальным пользователям системы.
write_enable=YES - чтобы разрешить им запись.
local_umask=022 - ставим более либеральную маску.
chroot_list_enable=YES
chroot_local_user=YES
chroot_list_file=/usr/local/etc/vsftpd.chroot_list

последние три строки означают изменить корневую директорию на домашнюю для всех пользователей, кроме перечисленных (в столбик) в файле vsftpd.chroot_list . Например, если в файле vsftpd.chroot_list будут перечислены пользователи john и boris, то им будет доступна вся корневая дирректория (насколько им позволяют права, конечно), а остальные пользователи не смогут выйти за рамки своих домашних каталогов.

Это лишь один из примеров настройки этого сервера. Конфигурационный файл хорошо документирован, поэтому легко понять что к чему.




### Добавили пользователя skib

#/usr/sbin/groupadd ec
#/usr/sbin/groupadd ecsoft
#/usr/sbin/adduser -g ec -d /home/skib skib
#passwd skib
#chmod 750 /home/skib

### Изменяем владельца группу у домашних папок

# chown :ec alex
# chown :ecsoft anton
# chown :ec borya
# chown :ecsoft dima
# chown :ec fva
# chown :ecsoft hunter
# chown :ec lgau
# chown :ec mav
# chown :ec plugged
# chown :ec rpt
# chown :ec sasa
# chown :ecsoft serge
# chown :ecsoft sna

# chmod 770 alex
# chmod 770 anton
# chmod 770 borya
# chmod 770 dima
# chmod 770 fva
# chmod 770 hunter
# chmod 770 lgau
# chmod 770 mav
# chmod 770 plugged
# chmod 770 rpt
# chmod 770 sasa
# chmod 770 skib
# chmod 770 sna

# /usr/sbin/usermod -g ec -G ecsoft anton
# /usr/sbin/usermod -g ec -G ecsoft dima
# /usr/sbin/usermod -g ec -G ecsoft hunter
# /usr/sbin/usermod -g ec -G ecsoft serge
# /usr/sbin/usermod -g ec -G ecsoft sna
# /usr/sbin/usermod -g ec alex
# /usr/sbin/usermod -g ec borya
# /usr/sbin/usermod -g ec fva
# /usr/sbin/usermod -g ec lgau
# /usr/sbin/usermod -g ec mav
# /usr/sbin/usermod -g ec plugged
# /usr/sbin/usermod -g ec rpt
# /usr/sbin/usermod -g ec sasa
# /usr/sbin/usermod -g ec skib

### Настройка Самбы


Файл /etc/samba/smb.conf

workgroup = ECSOFTNET

server string = Powered ASP Linux 9

hosts allow = 192.168.0.

domain master = yes

domain logon = yes

interfaces = 192.168.0.1/24

character set = 1251
client code page = 866

[homes]
   comment = Home Directories
   browseable = no
   writable = yes
   valid users = %S
   create mode = 0660
   directory mode = 0770
# If you want users samba doesn't recognize to be mapped to a guest user
; map to guest = bad user

[public]
   comment = Public Stuff
   path = /home/skib/
   public = yes
   writable = yes
   printable = no
   write list = @ec
   create mode = 0661
   directory mode = 2775

[lp0]
   security = server
   path = /var/spool/lpd/lp
   printer name = lj1200
   writable = yes
   public = yes
   printable = yes
   print command = lpr -r -h -P %p %s

Добавить в автозагрузку Самбу
ln --symbolic /etc/rc.d/init.d/smb /etc/rc.d/rc3.d/S35smb

21:00 18.06.03
Добавили папку SOFT
# /usr/sbin/usermod -G ec,softman anton
# /usr/sbin/usermod -G ec,softman hunter
# chown :softman SOFT
# chmod 775 SOFT


13:58 19.06.03
### Редирект на другой IP и на другой порт

# /sbin/iptables -t nat -A PREROUTING -p TCP -d 194.67.66.38 --dport 4665 -j DNAT --to-destination 192.168.0.9

15:26 20.06.03
### Настройка принтера через Samba

* Установить пакет redhat-config-printer и все зависимые от него пакеты.
* # printconf
* и дабавляется принтер с такими параметрами
    Имя: lj1200
    Доп. имена:
      Тип: Устройство локального принтера:
      Устройство принтера: /dev/lp0
      Драйвер: HP LaserJet 1200 using Postscript driver  

17:50 24.06.03
### Настройка dhcpd

* Создать файл /etc/dhcpd.conf

ddns-update-style interim;
subnet 192.168.0.0 netmask 255.255.255.0 {

# --- default gateway
        option routers                  192.168.0.1;
        option subnet-mask              255.255.255.0;

        option domain-name      "ecsoft.mephi.ru";
        option domain-name-servers      194.67.67.34, 194.67.67.130;

        range 192.168.0.2 192.168.0.100;
        default-lease-time 21600;
        max-lease-time 43200;

}

* Запустить демона
# /etc/rc.d/init.d/dhcpd start
* Записать в автозагрузку
ln --symbolic /etc/rc.d/init.d/dhcpd /etc/rc.d/rc3.d/S35dhcpd
15:44 30.06.03
### Добавили ползователя

# /usr/sbin/adduser -g ec -G ecsoft -d /home/alexakov alexakov
# passwd alexakov
; подправили группу
# /usr/sbin/usermod -g ec alexakov

16:36 09.07.03
### Добавить новый алиас

- Поправить файл /etc/aliases
- дать команду newaliases

15:05 19.04.04
### Поменять местами сетевухи

- исправить файлы
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1

18:21 19.04.04
### Прописать шлюз по умолчанию

в файле /etc/sysconfig/network-scripts/ifcfg-eth1 должно быть написано:
DEVICE=eth1
ONBOOT=yes
IPADDR=194.67.66.38
NETMASK=255.255.255.0
NETWORK=194.67.66.0
BROADCAST=194.67.66.255
GATEWAY=194.67.66.130
19:26 18.08.04
### Инициализация SWAP

/sbin/mkswap /dev/hda5
14:20 19.12.2005
### Кодировка в SAMBA

в файле /etc/samba/smb.conf в разделе [global] добавить две строчки

unix charset = windows-1251
dos charset = cp866

14:51 17.07.2006
### После перезагрузки сервера выполнить

#mount /dev/hda6 /home
 cd /home/hunter/Templates/
./firewall1.sh
/etc/init.d/vsftpd start
/etc/init.d/dovecot start
/etc/init.d/httpd start

Для emule
/sbin/iptables -t nat -A PREROUTING -p TCP -i eth0 -d 194.67.66.38 --dport 4665 -j DNAT --to-destination 192.168.0.9

wrUL30pq
18:23 02.11.2006
antivir -s -z --heur-macro --heur-level=4 -v /
18:19 08.12.2006
### очистка почтового ящика

* Запустить mail -u user
* набрать s * old_mail.txt
* q выход