пятница, 20 декабря 2019 г.

Qemu, crosstool-NG

Настроим отладку простейшей проги на си, подключившись через gdbserver к виртуальной машине qemu с архитектурой riscv, следуя следующему руководству на русском, опирающемся на английский оригинал (можно сразу по нему).

Ставим qemu на Fedora 31:

sudo dnf install @virtualization
sudo dnf install qemu-system-riscv-core-4.1.0-2.fc31.x86_64.rpm


Скачиваем Open On-Chip Debugger для Fedora отсюда и prebuilt RISC‑V GCC Toolchain and Emulator отсюда.

Я распаковал Open On-Chip Debugger в папку /usr/local/tools/riscv-openocd-x86_64, а RISC‑V GCC Toolchain в папку /usr/local/tools/riscv-gcc-x86_64.

В файл /home/<user>/.bashrc добавляем (перед export PATH):

PATH="$PATH:/usr/local/tools/riscv-openocd-x86_64/bin:/usr/local/tools/riscv-gcc-x86_64/bin"

Попытаемся удаленно отладить при помощи gdbserver прогу на эмулированной qemu-машине с архитектурой riscv. Прога hello.c от K&R:

mkdir ./helloWorld
cd ./helloWorld
nano ./hello.c

#include <stdio.h>

int main()
{
    printf("hello, world\n");
    return 0; 
}

Компилим её сразу следующим образом:

riscv64-unknown-elf-gcc hello.c -g -v

Запускаем аналог gdbserver в виртуальной машине qemu riscv:

qemu-system-riscv64 -machine virt -m 128M -gdb tcp::1234 -kernel a.out

Запускаем gdb и подключаемся к серверу:

riscv64-unknown-elf-gdb a.out(gdb) target remote :1234

Получаем неопределенный стэк:

Remote debugging using :1234
0x0000000000000000 in ?? ()
(gdb) 

Скидываем dtb-файл в текущую папку:

cd /usr/local/tools/riscv-openocd-x86_64
mkdir machines
qemu-system-riscv64 -machine virt -machine dumpdtb=riscv64-virt.dtb

Ставим dtc:

sudo dnf install dtc

Конвертируем :

dtc -I dtb -O dts -o riscv64-virt.dts riscv64-virt.dtb

Находим начало RAM'а и размер (подробнее в оригинальном руководстве):

[adil_nurimanov@localhost machines]$ grep memory riscv64-virt.dts -A 3
memory@80000000 {
device_type = "memory";
reg = <0x00 0x80000000 0x00 0x8000000>;
};

Отредактируем оригинальный riscv64-unknown-elf-ld  скрипт:

cd /usr/local/tools/riscv-gcc-x86_64/bin
riscv64-unknown-elf-ld --verbose > riscv64-virt.ld

Добавим два определения в  riscv64-virt.ld:


1) добавляем определение RAM - секция MEMORY:

OUTPUT_ARCH(riscv)
/* >>> Our addition. <<< */
MEMORY
{
   /* qemu-system-risc64 virt machine */
   RAM (rwx)  : ORIGIN = 0x80000000, LENGTH = 128M 
}
/* >>> End of our addition. <<< */
ENTRY(_start)

2) добавляем определение вершины стэка __stack_top - секция PROVIDE:

SECTIONS
{
  /* Read-only sections, merged into text segment: */
  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x10000));
  . = SEGMENT_START("text-segment", 0x10000) + SIZEOF_HEADERS;
  /* >>> Our addition. <<< */
  PROVIDE(__stack_top = ORIGIN(RAM) + LENGTH(RAM));
  /* >>> End of our addition. <<< */
  .interp         : { *(.interp) }
  .note.gnu.build-id  : { *(.note.gnu.build-id) }

Напишем свой crt0.s:

.section .init, "ax"
.global _start
_start:
    .cfi_startproc
    .cfi_undefined ra
    .option push
    .option norelax
    la gp, __global_pointer$
    .option pop
    la sp, __stack_top
    add s0, sp, zero
    jal zero, main
    .cfi_endproc
    .end
C code compile:
1) https://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_node/ld_3.html

Вики (qemu, risc-v):
1) https://github.com/riscv/riscv-qemu
2) https://wiki.qemu.org/Documentation/Platforms/RISCV
3) http://openocd.org/

RISC-V on qemu:
1) (!)https://habr.com/en/post/454208/ (riscv, qemu)
2) https://habr.com/ru/post/319736/ (установка debian 9 на qemu, для кросссборки используется gnueabihf)
3) https://habr.com/ru/post/278159/ (qemu, mips, arm, debian 8)

Отличие bare metal от linux:
1) https://en.wikipedia.org/wiki/Application_binary_interface (русская страница)
2) https://www.linux.org.ru/forum/development/10188780
3) https://jacobmossberg.se/assets/presentations/running-c-programs-bare-metal-arm-gnu-toolchain-foss-gbg-20180926.pdf

RISC-V (wiki, github):
1) RISC-V ISA wiki https://ru.wikipedia.org/wiki/RISC-V
2) RISC-V crosscompiler toolchain (newlib for baremetal) https://github.com/riscv/riscv-gnu-toolchain
3) (!)Недостатки riscv (по сравнению с arm) https://habr.com/ru/post/461785/
4) Перенос Alpine Linux на RISC-V https://habr.com/ru/post/434382/

crosstool-NG:
1) https://habr.com/ru/post/114230/ (только теория)
2) https://habr.com/ru/post/363349/ (сборка под ESP8266)
3) https://habr.com/ru/post/343690/ (без crosstool-Ng, но с asm на qemu)
4) https://habr.com/ru/post/310056/ (сборка под FPGA altera)
5) https://habr.com/ru/post/186124/ (сборка под OSX)
6) https://crosstool-ng.github.io/docs/
7) Cross-compiling tools package guidelines (arch)
8) https://www.linux.org.ru/forum/linux-install/11003225 (gentoo)
9) https://stackoverflow.com/questions/46258701/how-to-builld-os-abi-for-systemv-using-crosstool-ng

Вики (контейнеризация):
1) https://ru.wikipedia.org/wiki/Docker
2) https://ru.wikipedia.org/wiki/Kubernetes
3) https://ru.wikipedia.org/wiki/Chroot

Virtio:
1) https://wiki.libvirt.org/page/Virtio
2) http://rus-linux.net/nlib.php?name=/MyLDP/vm/jones/virtio.html
3) https://www.linux-kvm.org/page/Virtio
4) https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers
5) https://wiki.osdev.org/Virtio
6) https://developer.ibm.com/technologies/linux/articles/l-virtio/

Windows virtual machine with virtio, kvm:
1) https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/
2) QEMU/KVM и установка Windows https://habr.com/ru/post/313144/
3) Разворачиваем виртуалку с Windows с пробросом виртуальной видеокарты с помощью QEMU и Intel GVT-g https://habr.com/ru/post/437270/
4) Ускорение дисковой подсистемы Qemu KVM в Linux https://habr.com/ru/company/ruvds/blog/493696/
5) Запуск FreeBSD в Linux KVM https://habr.com/ru/post/167099/
6) Работа с виртуальными машинами KVM. Подготовка хост-машины https://habr.com/ru/post/120717/
7) Общие принципы работы QEMU-KVM https://habr.com/ru/post/466549/
8) Howto Qemu-kvm Debian 8 https://habr.com/ru/post/260791/
9) Автоматизация Для Самых Маленьких. Часть 1.1. Основы виртуализации https://habr.com/ru/post/467801/
10) Запуск Windows под Linux KVM https://habr.com/ru/post/176823/

Kubernetes server cluster on bare metal (мне это не нужно):
1) https://habr.com/ru/post/342232/
2) https://habr.com/ru/company/flant/blog/440504/
3) https://habr.com/ru/company/southbridge/blog/334846/
4) https://habr.com/ru/company/southbridge/blog/439562/

riscv memory manager:
1) https://github.com/riscv/riscv-tests/blob/master/debug/programs/tiny-malloc.c
2) https://www.sifive.com/blog/all-aboard-part-9-paging-and-mmu-in-risc-v-linux-kernel
3) https://inst.cs.berkeley.edu/~cs61c/fa17/disc/2/Disc2Sol.pdf
4) https://github.com/riscv/riscv-gnu-toolchain/issues/571

memory manager wiki:
1) https://en.wikipedia.org/wiki/Memory_management (русская)
2) https://en.wikipedia.org/wiki/Memory_management_unit (русская)

вторник, 3 декабря 2019 г.

Автоматизированное тестирование проги на qt

Функциональное тестирование (freeware):

Функциональное тестирование (proprietary):

Windows:

Linux:

Unit-тесты:

пятница, 22 ноября 2019 г.

Получение списка usb-устройств на Python

Получение в Qt списка usb-флешек через вызов bash-скриптов

1. bash-скрипт списка подключенных устройств, содержащих хотя бы один раздел:

#!/bin/sh
readlink `find /dev/disk/by-path/ -name '*usb*part1*'`

2. bash-скрипт монтирования указанного usb-устройства c файловой системой fat32;  идентификатор usb-устройства передается скрипту в виде первого параметра (например, /dev/sdb1):

#!/bin/sh
if ! [ -z $1 ]
then
  mkdir /media/usb
  mount $1 /media/usb

  SIZE_STRING=`df -h | grep $1 | awk '{print $2}' | sed 's/\n//'`
  LABEL_FS_STRING=`blkid | grep $1 | awk '{print $2 "#" $4}' | sed 's/LABEL=//' | sed 's/TYPE=//' | sed 's/"//g'`

  echo $LABEL_FS_STRING#$SIZE_STRING
fi

3. bash-скрипт отмонтирования устройства, примонтированного к папке /media/usb:

#!/bin/sh
MOUNTED_STRING=`mount | grep /media/usb | egrep -o '/dev/[a-z][a-z][a-z][0-9]+'`
if ! [ -z $MOUNTED_STRING ]
then
  umount /media/usb
  echo $MOUNTED_STRING
fi

Источники (bash):
1) Передача параметров в bash-скрипты https://habr.com/ru/company/ruvds/blog/326328/
2) Предопределенные переменные в bash https://habr.com/ru/post/47163/
3) $? https://www.opennet.ru/docs/RUS/bash_scripting_guide/c2105.html
4) https://ru.wikipedia.org/wiki/Bash

Источники (libusb):
1) https://github.com/libusb/libusb/blob/master/examples/listdevs.c
2) http://libusb.sourceforge.net/api-1.0/index.html
3) https://ru.stackoverflow.com/questions/835083/%D0%9A%D0%B0%D0%BA-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C-%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8E-%D0%BE-%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%BD%D0%BE%D0%BC-%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B5
4) https://forum.ubuntu.ru/index.php?topic=176467.0

четверг, 21 ноября 2019 г.

Общение платы на основе stm32 и qt-го клиентского приложения по usb

Разблокировка игровой консоли Wii (чтение игр с usb-флешки)

Игровая консоль на raspberrypi (orangepi)

вторник, 19 ноября 2019 г.

Восстановление grub

У меня на компе с двумя ОС (Ubuntu14.04/Windows7; Fedora31/Win10) перестала грузиться первая. Я решил создать загрузочную ОС на флешке (LiveUSB), загрузиться с нее, примонтироваться с исходной файловой системе и обновить порядок загрузки ОС в grub.

Скачиваем нужный исошник отсюда. Скачиваем прогу UNetbootin отсюда. Вставляем флешку (у меня 8GB, но 4GB вполне должно хватить). Запускаем UNetbootin, выбираем исошник, флешку, записываем. Перезагружаемся, проверяем, чтобы в BIOS'е в списке устройств для загрузки первым устройством стояла флешка. Загружаемся с флешки.

Ubuntu Links:
1) http://help.ubuntu.ru/wiki/%D0%B2%D0%BE%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_grub
2) http://help.ubuntu.ru/wiki/unetbootin
3) http://ubuntu.ru/get
4) http://help.ubuntu.ru/wiki/ubuntu_%D0%BD%D0%B0_usb
5) http://help.ubuntu.ru/wiki/liveusb

Fedora Links:
1) https://sys-adm.in/sections/os-nix/844-vosstanovlenie-grub-v-fedora.html
2) https://docs.fedoraproject.org/en-US/quick-docs/bootloading-with-grub2/
3) https://superuser.com/questions/596317/how-would-i-reinstall-the-grub-efi-bootloader-on-fedora-linux
4) https://fedoraproject.org/wiki/GRUB_2
5) https://zen.yandex.ru/media/id/5d75175fc7e50c00ade545d5/nastroika-fedora-31-posle-ustanovki-5dd803896c428f7920c2b85a

Ubuntu 16.04 + Windows 10: amd64, GPT, UEFI

Bash-скрипт для создания img-сборок образов microsd-карт для работы под BeagleBoneBlack

Работа bash-скрипта выливается в:
- создание заархивированных образов img-дампов образов microsd-карт
- создание файла словаря списка созданных дампов и аппаратных конфигураций обрудования, для которых предназначены эти дампы

Сборка состоит из:
- кросскомпилированного бинарника приложения на qt (параметры сборок передаются в виде дефайнов)
- конфигурационных файлов
- других bash-скриптов и python-скриптов (это не так важно)

Создание образа microsd-карты и его автоматическое расширение под BeagleBoneBlack частично описано тут.

Использованные материалы:

1. bash:
1) https://habr.com/ru/company/ruvds/blog/325522/

2. sfdisk:
1) Пример скрипта, заливающего на встроенную emmc-память платы BeagleBoneBlack содержимого microsd-карты с бинарниками uboot, ядра и rootfs 
https://raw.githubusercontent.com/RobertCNelson/boot-scripts/master/tools/eMMC/bbb-eMMC-flasher-eewiki-ext4.sh
2) https://www.thegeekstuff.com/2017/05/sfdisk-examples/
3) https://suntong.github.io/blogs/2015/12/25/use-sfdisk-to-partition-disks/
4) https://stackoverflow.com/questions/12150116/how-to-script-sfdisk-or-parted-for-multiple-partitions
5) http://download.vikis.lt/doc/util-linux-ng-2.17.2/sfdisk.examples
6) https://www.systutorials.com/docs/linux/man/8-sfdisk/

3. генерирование файла словаря созданных дампов из bash-скрипта:
1) https://habr.com/ru/company/ruvds/blog/326594/

4. формирование номера программы и билда:
1) https://habr.com/ru/post/118756/
2) Нумерация версий программного обеспечения 

пятница, 15 ноября 2019 г.

Создание кастомного редактора для двухуровневого xml-файла (структура ini-файла) в виде древовидной структуры наследника QTreeView, состоящих из элементов QTreeWidgetItem в qt4

1. Tree Model with MVC (QTreeView):
2) Использование моделей в Qt https://habr.com/ru/post/171443/
3) Иерархические модели в Qt https://habr.com/ru/post/172187/
4) QT: программируем по шаблонам MVC http://blog.kislenko.net/show.php?id=1511
5) Трюки с моделями в Qt https://habr.com/ru/post/126995/

2. Tree Model without MVC (QTreeWidget):
1) QT: строим дерево строк на основе QTreeWidget http://blog.kislenko.net/show.php?id=1509
2) https://qt-way-notes.blogspot.com/search?q=Xmltree&m=1

3. Qt GUI:

пятница, 8 ноября 2019 г.

Расширение раздела ext2 и файловой системы в bash

В bash-скрипте я создаю 200M-образ, связываю его с loop-устройством, монтирую, создаю файловую систему ext2, делаю сборку из необходимых файлов и в конце собираю бинарник на qt при помощи кросс-компилятора:

# 200 метров должно хватить для любого диска с прогой, скриптов и настроек 
dd if=/dev/zero of=./dump.img bs=1M count=200

# освобождаем loop0-устройство
losetup -d /dev/loop0

# сопоставляем образ с loop-устройством
losetup /dev/loop0 ./dump.img

# формируем таблицу разделов на /dev/loop0
sfdisk /dev/loop0 <<-__EOF__
;
__EOF__

# перечитываем
partprobe /dev/loop0

# создаем файловую систему ext2
mkfs.ext2 -F -L "$FIRMWARE_VER1" /dev/loop0p1

# создаем папку, на всякий случай
mkdir ./imgmnt

# монтируем loop-устройство в папку

mount /dev/loop0p1 ./imgmnt

Записываем созданный распакованный образ на microsd-карту через usb-переходник (microsd-карта монтируется как /dev/sdc1):

sudo dd if=./myimage.img of=/dev/sdc bs=1M

На плате BBB делаем авторасширение ext2-раздела (microsd-карта монтируется как /dev/mmcblk0p1) в моем bash-скрипте, запускаемом при инициализации (/etc/init.d/mystart.sh).

Авторасширение делается в два этапа:
1) до монтирования microsd-карты делаем расширение раздела с предварительной проверкой на размер раздела:

# расширение раздела до монтирования
read MSIZE < /sys/class/block/mmcblk0/size
read NR START END TYPE < <( partx -gbro NR,START,END,TYPE /dev/mmcblk0 )
if [ "$END" -lt "$(($MSIZE - 1))" ] && [ "$TYPE" == "0x83" ]; then
  dd if=/usr/share/medteco/sdresize.rgb of=/dev/fb0
  parted /dev/mmcblk0 resizepart 1 100%
  e2fsck -f /dev/mmcblk0p1
fi

2) после монтирования microsd-карты делаем расширение файловой системы (этот этап можно было сделать до монтирования, но почему-то на нем в таком случае часто случались косяки):

# расширяем файловую систему после монтирования
resize2fs /dev/mmcblk0p1

Источники:

четверг, 7 ноября 2019 г.

Общение по spi плат raspberrypi3b и stm32f103 (bluepill)

Сборка libusb-1.0.22 для BBB на Fedora30/Ubuntu16.04

Скачиваем архив отсюда, распаковываем в локальную папку (у меня, /media/Data/Libraries/bbb/libusb-1.0.22). 

Переходим в папку, определяем уже установленный кросс-компилятор, запускаем autotools, configure, make, make install:

cd /media/Data/Libraries/bbb/libusb-1.0.22

./autogen.sh

export CC=/usr/local/tools/linaro-gnueabihf-4.9/bin/arm-linux-gnueabihf-gcc
export CXX=/usr/local/tools/linaro-gnueabihf-4.9/bin/arm-linux-gnueabihf-g++

./configure --with-pic --disable-udev --host=arm-linux
--prefix=/usr/local/tools/libusb-1.0.22

make
make install

вторник, 5 ноября 2019 г.

Отладка ядра BeagleBone через KGDB

Будем использовать это ядро. При пересборке ядра (./tools/rebuild.sh) включим следующие опции:
1) Kernel hacking -> Compile time checks and compiler options -> Compile the kernel with debug info [*]
2) Kernel hacking -> Kgdb: Kernel Debugger [*]
3) Kernel Features -> Compile kernel in thumb-2 mode [] (отключаем сборку в режиме thumb-2, чтобы побороть ошибку Internal error: Oops - undefined instruction: 0 [#1] THUMB2)

Отредактируем /boot/uEnv.txt, добавим:
optargs=kgdbwait kgdboc=ttyS0,115200

Запускаем BBB, вывод процесса загрузки по uart (sudo screen /dev/ttyUSB0 115200,cs8) остановился на:
[    3.125478] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 249)
[    3.125613] io scheduler noop registered
[    3.125627] io scheduler deadline registered
[    3.125660] io scheduler cfq registered (default)
[    3.126677] pinctrl-single 44e10800.pinmux: 142 pins at pa f9e10800 size 568
[    3.128057] Serial: 8250/16550 driver, 6 ports, IRQ sharing disabled
[    3.130208] 44e09000.serial: ttyS0 at MMIO 0x44e09000 (irq = 154, base_baud = 3000000) is a 8250
[    3.939841] console [ttyS0] enabled
[    3.944036] KGDB: Registered I/O driver kgdboc
[    3.948520] KGDB: Waiting for connection from remote gdb...
[    3.954150] Internal error: Oops - undefined instruction: 0 [#1] THUMB2

Entering kdb (current=0xdd8f3840, pid 1) due to Keyboard Entry
kdb> 

Будем отлаживать через тот же uart. Собранный незаархивирванный образ ядра (Image) лежит здесь: /mnt/Data/Projects/LinuxKernel/4.1.38/bb-kernel/KERNEL/arch/arm/boot.
Клиент gdb (arm-linux-gnueabihf-gdb) лежит здесь: /mnt/Data/Projects/LinuxKernel/4.1.38/bb-kernel/dl/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin. Скидываем их в одну локальную папку (например, /mnt/Data/Projects/LinuxKernel/Debug), переходим в папку, запускаем:

cd /mnt/Data/Projects/LinuxKernel/Debug
arm-linux-gnueabihf-gdb -ex 'file vmlinuz-4.1.38-bone24' -ex 'target remote /dev/ttyUSB0'

Получаем:

[adil@adil Debug]$ ./arm-linux-gnueabihf-gdb -ex 'file Image' -ex 'target remote /dev/ttyUSB0'
...
/dev/ttyUSB0: Device or resource busy.


Источники:
1) https://code-examples.net/en/q/4b6ff1

воскресенье, 27 октября 2019 г.

Портирование проекта c qt4 на qt5

В pro-файл легче всего добавить условную операцию, вводящую разные настройки в зависимости от версии Qt. Это можно сделать в pro-файле при помощи следующих операторов (test functions): equals , greaterThanlessThan. Дополнительно, устанавливаем препроцессорную переменную окружения, которую в исходном коде можно будет обрабатывать при помощи #ifdef HAVE_QT5  и #if defined(HAVE_QT5) (отсюда).Мне кажется, легче всего так:

equals(QT_MAJOR_VERSION, 5){
  DEFINES+=HAVE_QT5
  QT += widgets
}
equals(QT_MAJOR_VERSION, 4) {
  QT += gui
}


Источники:
1) https://wiki.qt.io/Transition_from_Qt_4.x_to_Qt5
2) https://doc.qt.io/qt-5/embedded-linux.html
3) https://www.linux.org.ru/forum/development/9500040
4) https://doc.qt.io/qt-5/qtquick-porting-qt5.html
5) https://habr.com/ru/post/164721/
6) http://jeniapalto.blogspot.com/2015/06/qt-4x-qt5.html
7) https://doc.qt.io/qt-5/qscriptengine.html
8) https://doc.qt.io/qt-5/qqmlengine.html
9) http://stackoverflow.com/questions/18663331/how-to-check-the-selected-version-of-qt-in-a-pro-file
10) http://doc.qt.io/qt-5/qmake-test-function-reference.html


четверг, 10 октября 2019 г.

Расшаривание на ноуте с виндой 10 wifi-инета по ethernet-соединению

Мы на телефоне сделали wifi точку доступа, хотим подключиться с ноута к ней и по ethernet-кабелю раздать инет подключенному устройству с линуксом. На ноуте стоит винда 10 с нативным американским языком.

1. На ноуте у имеющегося ethernet-соединения выставляем следующие параметры ip4:
1) статическое получение ip;
2) ip4 address - 192.168.1.1;
3) mask - 255.255.255.0;
4) отключаем расшаривание сети по этому адаптеру на вкладке sharing.

2. Настраиваем, если ещё не настроили, подключение по wifi ноута к телефону. Там будет стоять, скорее всего, ip4 подключение и динамическое получение адреса от dhcp-сервера, который работает на телефоне. На этом адаптере во вкладке sharing тоже отключаем расшаривание.

3. Выделяем во вкладке "Network connections" оба подключения мышкой, нажирмаем правую клавишу и выбираем "Bridge connection". Создается виртуальный "Network Bridge".

4. На линукс-устройстве вводим следующие параметры ip4:
1) статическое получение ip;
2) ip4 address - 192.168.1.2;
3) mask - 255.255.255.0;
4) gateway - 192.168.1.1;
5) dns - 192.168.1.1.

Источники:
1) https://answers.microsoft.com/en-us/windows/forum/windows_10-networking/internet-connection-sharing-in-windows-10/f6dcac4b-5203-4c98-8cf2-dcac86d98fb9
2) https://superuser.com/questions/563291/share-wi-fi-connection-over-ethernet

среда, 9 октября 2019 г.

Уроки по unreal engine для создания игр в стиле tps, quest

Manual:
1) Learn Unreal Engine for Blender Users - UE4 Beginner Tutorial https://www.youtube.com/watch?v=3jM_VLzRqlE&ab_channel=UnrealSensei

Level design:
1) Level Design Timelapse in Unreal Engine using Megascans | Myrkur Games https://www.youtube.com/watch?v=L430pv3pCac&ab_channel=MyrkurGames
2) Brushify Bootcamp - Landscape sculpting and level design in Unreal Engine https://www.youtube.com/watch?v=MYqvBvR5LBQ&ab_channel=JoeGarth
3) A Guided Tour of Gameplay Abilities | Inside Unreal https://www.youtube.com/watch?v=YvXvWa6vbAA&ab_channel=UnrealEngine

Официальные уроки: https://docs.unrealengine.com/en-US/Resources/index.html

ue4:
1) Общий туториал по движку от установки до игры (гипертекст): https://habr.com/ru/post/344394/
2) UE4 для Unity-разработчиков https://habr.com/ru/companies/vk/articles/327520/
3) Unreal против Unity: на чем лучше разрабатывать мобильные игры? https://habr.com/ru/companies/piter/articles/269415/
4) Итак, вы решили перейти с Unity на Unreal Engine https://habr.com/ru/articles/762076/
5) Создание Survival Horror в стиле RE2 на Unreal Engine и С++. Базовая настройка и импорт ассетов https://habr.com/ru/articles/675906/

Unreal Engine: QuickStart в Qt Creator под Arch Linux https://habr.com/ru/post/341756/

Уроки по созданию первой игры:
1) канал Devslopes (бесплатно доступна небольшая серия видеоуроков) https://www.youtube.com/watch?v=QJpfLkEsoek
2) канал Game Dev Academy (бесплатно доступна небольшая серия видеоуроков)
https://www.youtube.com/watch?v=a0qNO6_xPx0
3) канал Гоша Дударь (серия уроков) https://www.youtube.com/playlist?list=PL0lO_mIqDDFWoBtWz06nf9TAbI0LVOoQi
4) канал Unreal Engine Rus https://www.youtube.com/watch?v=qesvyI7_bgY
5) канал Virtus Learning Hub / Creative Tutorials  https://www.youtube.com/watch?v=1M3S3eiJK5I

Уроки по созданию tps:
1) Unreal Engine https://www.youtube.com/watch?v=hRO82u1phyw
2) EvilEyeGames (playlist) https://www.youtube.com/playlist?list=PL4wXBehVu_5-SlRrhdvpd7RlczgJkfftG
3) MoCap Online https://www.youtube.com/watch?v=4KNqElZ6Sm8
4) Sg Unreal Creation https://www.youtube.com/watch?v=QrqKTN-ORzI
5) Medel Design https://www.youtube.com/watch?v=iZnv1FL0ux8
6) https://forums.unrealengine.com/community/community-content-tools-and-tutorials/64093-building-a-third-person-shooter
7) http://shootertutorial.com/tutorials/

Уроки по системы диалогов на unreal engine:
1) https://youtu.be/RBq-RqzhAL4
2) https://youtu.be/k2zC9pg6Eno
3) Создание редактора квестов и диалогов для Unreal engine: Часть 1 описание плагина https://habr.com/ru/post/318366/


Stepik:
1) Создание игр и приложений на Unreal Engine https://stepik.org/course/87797/syllabus
2) Введение в С++. Начало работы с Unreal Engine 4 https://stepik.org/course/92428/syllabus

Метаобъекты в Qt

вторник, 8 октября 2019 г.

unity3d third person shooter

Elder scroll, Dark Souls like:

Протагонист с оружием и скриптинг антигероя (tps):

Climbing the wall, parkour system:
1) (!) How to make Parkour system(VAULTING)in Unity and Playmaker 
3) [Unity 5] Tutorial: How to make a climbing system like in Assassins Creed in Unity https://www.youtube.com/playlist?list=PL47vwJBRNh1xzEvcLvXoJvjLcr1h0j-1O

Fighting system like in Assassin`s Creed:


Цилиндр (npc) следует за главным героем (Follow AI):
5) Использование NavMesh для навигации ИИ в Unity https://habr.com/ru/articles/646039/

Follow AI (youtube):
2) (!)Unity 3D Simple Enemy Follow AI Script for NavMeshAgent Getting Started for Enemy AI or Behaviour https://www.youtube.com/watch?v=omQ_o10WD_g&ab_channel=MayankSanghvi
3) Unity 3D Simple Enemy Follow AI Script Without NavMeshAgent https://www.youtube.com/watch?v=drTcfhULpLA&ab_channel=MayankSanghvi

Follow AI (forum):



Commandos, Diablo like:
2) Basic Diablo-like Light Radius in Unity3D https://www.youtube.com/watch?v=VlP9Aeo4xqU&ab_channel=Tudvari



Официальные уроки: https://unity3d.com/ru/learn/tutorials

Уроки по unity3d для начинающих (gui, prefab etc):
1) https://unity3d.com/ru/learn/tutorials/s/interactive-tutorials
2) https://unity3d.com/ru/learn/tutorials/s/unity-playground

Уроки по созданию трехмерных игр в Unity3D (платный asset):
1) https://unity3d.com/ru/learn/tutorials/s/3d-game-kit

habr:
1) Создание шутера с LeoECS. Часть 1 https://habr.com/ru/post/573028/
2) Создание шутера с LeoECS. Часть 2 https://habr.com/ru/post/578054/

Концепция:
1) погоня за мухой (гэг)
2) комната с арт-объектами из пустых по содержанию, но формально типичных совковых объявлений "в соответствии с законом росрегулирования искусства смотреть на белую стену строжайше запрещено, можно только с разрешения сторожа и т.д."
3) локация с открыпанием дома, который постепенно засыпает песок (Кобо Абэ "Женщина в песках")
4) вид fps, игрок-ёжик идёт в тумане, ищет грибы, может наткнуться на дерево или кого-то ещё;
5) вид tps, игрок должен добежать до финиша, сверху падают большие кубы, выростают горы;
6) сделать компилятор с языка sarte, собранный бинарник представляет из себя локацию из "Тошноты" или "Слов";
7) галерея, в которой при начальной подгрузке генерятся полотна абстрактной живописи;
8) бросание шарика в стакан (на телефоне)
9) механика из сделанной игры на английском: буква в изометрии пытается преодолеть препятствия, задействован микрофон - при назывании звука буква на экране трансформируется и может легче преодолеть нужное препятствие, надо сделать на русском
10) раскрыть метафору холивара и устроить rts, например, поклонников windows и linux
11) регулирование политики через законодательный последовательный беспредел (диктатуры Гитлера, Сталина, законы госдумы РФ 2011-2022 и т.д.)

Unity3d ide problems:

I need to start Unity with an environment variable(s) set, how can I do that? 

Brackeys:

понедельник, 7 октября 2019 г.

Внутреннее устройство stl-контейнеров и алгоритмическая сложность

Абстрактные типы данных (abstract data types):
1) Стек
2) Очередь
3) Очередь с приоритетом (priority queuehttps://acm.khpnets.info/)
4) Массив
5) Динамический массив
6) Связный список
7) Ассоциативный массив

Структуры данных (data structures):
1) Кольцевой буфер
2) Calendar queue
3) Двусторонняя очередь (deque)
4) Куча
5) B-tree
6) Двоичное дерево
8) Двоичная куча (английская полнее https://en.wikipedia.org/wiki/Binary_heap,
иитмо https://neerc.ifmo.ru/, визуализация https://www.cs.usfca.edu/~galles/visualization/Heap.html)
12) Сжатое префиксное дерево (cтатья на английском полнее https://en.wikipedia.org/wiki/Radix_tree)
13) Hash table
14) Фильтр Блума 

(!)Устройство бинарных деревьев поиска:
- вики:
1) Двоичное дерево поиска
- обзорные статьи:
1) https://tproger.ru/translations/binary-search-tree-for-beginners/
2) Бинарные деревья поиска и рекурсия – это просто https://habr.com/ru/post/267855/
3) Структуры данных: бинарные деревья. Часть 1 https://habr.com/ru/post/65617/
- реализация:
2) Основы B-деревьев (внутреннее устройство БД) 
3) Лекции 13-14: деревья поиска, почти сбалансированные деревья.
Красно-черные деревья и реализация множества на их основе http://mech.math.msu.su/~vvb/2course/Borisenko/lecTree.html

Префиксное дерево:
1) Префиксное дерево (cтатья на английском полнее https://en.wikipedia.org/wiki/Trie)
2) Сжатое префиксное дерево (cтатья на английском полнее https://en.wikipedia.org/wiki/Radix_tree)
3) Чем хороши префиксные деревья? https://otus.ru/nest/post/676/
4) Trie, или нагруженное дерево https://habr.com/ru/post/111874/
5) Сжатые префиксные деревья https://habr.com/ru/post/151421/
6) K-d дерево
7) Анатомия KD-Деревьев https://habr.com/ru/post/312882/
8) К-d деревья и перечисление точек в произвольном прямоугольнике (статика)
9) http://www.ray-tracing.ru/articles181.html
10) KD-деревья и R-деревья https://fat-crocodile.livejournal.com/156564.html

Реализация динамического массива на си c автоматическим расширением размера выделенной памяти в случае необходимости:
1) Аналог std::vector из C++11 на чистом C89 и как я его писал https://habr.com/ru/post/324210/
2) https://prog-cpp.ru/c-alloc/

Реализации односвязного списка на си:
1) https://prog-cpp.ru/data-ols/
2) http://acm.mipt.ru/twiki/bin/view/Cintro/SimpleList

Реализация очереди с приоритетами на базе двоичной кучи, реализованной через статический массив:
1) Двоичная куча (английская полнее https://en.wikipedia.org/wiki/Binary_heap,
иитмо https://neerc.ifmo.ru/)
2) https://ru.stackoverflow.com/
3) https://www.geeksforgeeks.org/building-heap-from-array/

Источники:
1) Qt Container Classes (wiki) https://doc.qt.io/qt-5/containers.html
2) Библиотека стандартных шаблонов (STL) (вики)
3) http://stepanovpapers.com/STL/DOC.PDF
4) Степанов, Ли - Руководство по стандартной библиотеке шаблонов (STL)
https://rsdn.org/article/cpp/stl.xml (немного косячный перевод)
5) http://www.martinbroadhurst.com/stl/

Реализация связного списка на C++ с шаблонами (аналога std::list):
1) Односвязный список на C++ http://itnotesblog.ru/note.php?id=178
2) STL для новичков. Реализация класса-контейнера https://habr.com/ru/post/187010/

Очередь с приоритетами на C++ с шаблонами:
1) адаптер std::priority_queue https://en.cppreference.com/w/cpp/container/priority_queue
2) https://www.bestprog.net/ru/2019/09/29/c-an-example-implementation-of-a-priority-queue-for-a-template-class-implementation-as-a-dynamic-array-ru/
3) https://ru.wikibooks.org

Алгоритмы сортировки:
1) Пузырьковая сортировка и все-все-все https://habr.com/ru/articles/204600/

Книги по STL:
1) Леен Аммерааль - STL для программистов на C++ https://vk.com/wall-18822808_8289
2) Скотт Мэйерс - Эффективный STL https://yadi.sk/i/miCReUNP3j7ECQ
3) Бьярн Страуструп - Язык программирования C++ https://yadi.sk/i/OaOuAQWWeEm9GQ
4) Джосьютис - Стандартная библиотека C++ https://yadi.sk/i/frVPf5aREhHqQA

Книги по алгоритмам:
1) Кормен, Лейзертон, Риверст, Штайн - Алгоритмы
2) Кнут Д. - Тома 1, 2, 3
3) Вирт Н. - Алгоритмы (pascal, modula-2)

Примеры реализаций алгоритмов на c, c++:
1) Язык Си в примерах (викиучебник)
2) Реализация алгоритмов (викиучебник)
3) http://acm.mipt.ru/twiki/bin/view/Algorithms/WebHome
4) http://algolist.manual.ru/
5) https://habr.com/ru/post/146793/

Вопросы:
1) типы указателей в c++11 (unique_ptr, shared_ptr, weak_ptr):
- Без new: Указатели будут удалены из C++ https://habr.com/ru/post/352570/
- Smart pointers для начинающих https://habr.com/ru/post/140222/
- weak_ptr:

2) какая алгоритмическая сложность у map, у unordered_map: 
- Потокобезопасный std::map с производительностью lock-free map https://habr.com/ru/post/328374/

3) чему равна высота сбалансированного дерева поиска в 1000000 элементов?

4) в чем проявляется сбалансированность дерева поиска?

5) какие структуры данных дают поиск за логарифмическое время? (map)

6) зачем нужен map, если unordered_map всегда выдает более быстрый результат?

7) какие структуры данных выдают результат за линейное время? (vector)

Вопросы с собеседований:
1) Популярные вопросы на собеседовании по C++ и ответы на них https://habr.com/ru/post/117996/
2) Дебри графики или как пройти собеседование на программиста компьютерной графики в GameDev https://habr.com/ru/post/561372/

Теория:

ШАД:
2) Решения вступительных испытаний в ШАД https://efiminem.github.io/supershad/
3) Полный разбор экзамена ШАД-2019 https://habr.com/ru/post/487680/
4) Поступление в ШАД глазами куратора и студента https://academy.yandex.ru/posts/postuplenie-v-shad-glazami-kuratora-i-studenta
7) Разбор задач для поступления в ШАД https://yandexdataschool.ru/stepbystep

yandex:
2) Как проходят алгоритмические секции на собеседованиях в Яндекс https://habr.com/ru/company/yandex/blog/449890/

спортивное программирование:
1) Спортивное программирование — социальный лифт в IT. Как его использовать школьнику, родителям школьника и разработчику? https://habr.com/ru/company/it_people/blog/583280/
2) Спортивное программирование https://astanahub.com/blog/sportivnoe-programmirovanie1617782868?locale=ru
3) Олимпиадное программирование https://tproger.ru/tag/competitive-programming/

6) Спортивное программирование https://stepik.org/course/53634/promo

10) ACM
17) A+B

Собеседование в it:
1) Как пройти собеседование в IT-компанию https://vc.ru/hr/263806-kak-proyti-sobesedovanie-v-it-kompaniyu
2) Подготовка к собеседованиям в IT-гиганты: как я преодолела проклятье алгоритмического собеседования https://habr.com/ru/post/499394/
3) Как я оклад 2х хотел https://habr.com/ru/post/657619/
4) Моя история прохождения интервью в IB IT (Java разработчик, investment bank) в Лондоне с примерами типичных заданий https://habr.com/ru/articles/430788/

leetcode:
2) Есть ли польза от решения алгоритмических задач на LeetCode? https://habr.com/ru/articles/709550/
3) Нужно читать академические статьи в Computer Science https://habr.com/ru/companies/skillfactory/articles/710822/

Реализация упорядоченного множества на c и c++:
3) Алгоритмы и структуры данных для начинающих: двоичное дерево поиска https://tproger.ru/translations/binary-search-tree-for-beginners/
4) Структуры данных: бинарные деревья https://habr.com/ru/articles/65617/