Vadim Kudryavtsev home page

Проекты

В этом разделе помещаются проекты сделанные мной в домашних условиях - в основном в качестве тренировки чему-то новому.

Профессиональные проекты смотрите в моем резюме внизу главной страницы.


Compiling Tensorflow from sources
Однажды мне пришлось компилировать Tensorflow из исходников, чтобы обеспечить возможность работы с GPU имеющими computing compatibilities 3.0 и 3.5 (по умолчанию Tensorflow не поддерживает работу с относительно старыми GPU). Несмотря на то, что я следовал инструкциям на официальной странице я встретил ряд специфических проблем. Ниже я дклюсь своим опытом решения этих проблем - следуйте по ссылкам :

Compiling Tensorflow 1.14

Compiling Tensorflow 2.01


PcmDump   (Приложение для андроид) 

PcmDump Screenshot

Разрабатывая приложения для андроид, в которых используется нативный С код, разработчики сталкиваются с необходимостью верификации скомпиллированных*.so библиотек. Обычно я использую простоой исполняемый файл, который читает входной "in.pcm" файл, вызывает библиотеку для его обработки и записывает результат в выходной файл "out.pcm" (в случае аудиообработки). Но что делать, если у вас под рукой нет телефона, работающего под рутом?

Этот проект использует идею запуска библиотеки в "песочнице" андроидовского приложения. Запись и чтение выходных и выходных файлов осуществляется в специальный директорий "PcmDump_files", созданный приложением в корне sdcard. Их легко загрузить и считать оттуда командой "adb".

Разумеется вы можете использоваеть эту идею и в случае верификации библиотек для обработки изображений, видео и тд.

Жмите сюда для перехода на страницу проекта


SlidePyramid (Скользящая пирамида, версия для андроид)

SlidePyramide_Feature

ver. 1.00 (2015.12.12)

Поигравшись со SlideCube  и найдя способ его решения для произвольного размера  (головоломка оказалась проще, по сравнению с кубиком Рубика), я задался вопросом - а как обстоят дела на телах другой формы?

Ради интереса решил сделать такую же головоломку для пирамидальной формы. В результате получилась SlidePyramid. Способ управления такой же как и в SlideCube - сначала касаетесь выбранного треугольника, затем того места, куда Вы хотите его передвинуть. Также можно вращать всю пирамиду, анализируя текущую ситуацию в целом.

Вот здесь первый секрет всех и поджидает. Интуитивно кажется (особенно после опыта с пирамидой Рубика), что скольжение треугольников будет проходить по тому же принципу - параллельно граням. А вот и нет! При завороте полоски треугольников на другую грань обнаруживается, что заворот  происходит в несколько другом направлении.

При написании игры не поленился - склеил пирамидку из бумаги (благо на компьютере можно нарисовать развертку, потом распечатать ее на принтере - 5-минутное дело), взял бумажную полоску, попытался обернуть вокруг пирамиды и обнаружил, что оборачивается она параллельно одному из ребер! Вот это открытие! Абсолютно непохоже на пирамиду Рубика! Стало интересно побыстрее завершить, чтоб самому попробовать, какой же алгоритм сборки применим в этом случае? Начав играть, обнаружил, что поначалу в голове не укладывается способ передвижения треугольников, отличный от привычного. Что заинтересовало еще больше!

На данный момент я нашел алгоритм сборки для пирамиды с ребром 2. Так что пока общий алгоритм неизвестен.

Цель игры такая же - собрать квадратики одного цвета на каждой грани. Начать игру можно выбрав пункт меню "Новая игра". Вы можете изменить сложность при помощи пункта меню "Размер куба". Скорость меняется в пункте меню "Настройки".

Я добавил в пункт "Настройки" стиль скольжения. "Классический" стиль плавно заворачивает треугольники на другую грань. "Трансформер" поворачивает целый треугольник на другую грань, что делает движение более впечатляющим (напоминает "Трансформеров") :-).

Скачать SlidePyramid можно    здесь.

Для тех, кто не хочет думать - подсказки по сборке нет (потому как сам еще не знаю общего алгоритма).



SlideCube (Скользящий кубик, версия для андроид)

SlideCube_Feature

ver. 1.02 (2015.11.29)
        
Эта игра похожа на кубик Рубика, однако вместа механического вращения цветные квадратики скользят по поверхности куба. Сомнительно, что это можно реализовать чисто механически. :-)
Вы можете задать слой и направление скольжения двумя касаниями - сначала касаетесь выбранного квадратика, затем того места, куда Вы хотите его передвинуть. Также можно вращать весь куб, анализируя текущую ситуацию в целом.
Цель игры такая же - собрать квадратики одного цвета на каждой грани. Начать игру можно выбрав пункт меню "Новая игра". Вы можете изменить сложность при помощи пункта меню "Размер куба". Скорость меняется в пункте меню "Скорость скольжения".
Оригинальная идея принадлежит Марии Макаровой, чья программа для IBM PC была популярна ранее под именем RussianBox. К сожалению, я не нашел аналога головоломки под Андроид, поэтому решил написать сам.

Скачать SlideCube можно    здесь.

Для тех, кто не хочет думать - подсказка по сборке здесь.



PikFam(версия для андроид)
PikFam_features

ver. 1.00 (2015.02.22)

В этой игре Вы будете отгадывать число, загаданное компьютером. Каждый Ваш ход сопровождается подсказкой - количеством пик и количеством фам.
Пика : цифра существует, но не на своем месте.
Фама :
цифра существует и стоит на своем месте.
В меню Вы можете выбрать сложность игры - 2, 3, 4 или 5-значное число. Если Вам улыбнулась удача, Вы узнаете за сколько ходов вам удалось угадать число, так что Вы можете устроить соревнования с друзьями, кто из вас более смышленый и удачливый.
Игра сделана по мотивам программы на Бейсике "ПикФам" для компьютера "Радио-86РК".

        Скачать PikFam можно    здесь.


Генератор телевизионного сигнала

Этот проект был написан в качестве упражнения в программировании ПЛИС. К тому же простой, дешевый и компактный генератор был кстати на моей тогдашней работе.
Генератор собран на ПЛИС EPM3064ALC44 фирмы Altera и выдает черно-белый полный телевизионный сигнал (ПТС). Все его временные параметры (длительности строк, полукадров, синхро- и гасящих импульсов) соответствуют стандарту, действующему на территории бывшего Советского Союза. (Если точно помню, стандарт системы B,G).
В набор генерируемых сигналов входят: градации яркости, сетка, шахматное поле. Режимы переключаются кнопкой "Mode". Изображение может инвертироваться при помощи кнопки "Inv".
В архиве Вы найдете схему телевизионного генератора и программу на верилоге. Имейте в виду, что данная схема является эскизом. На ней не указаны блокирующие емкости по питанию. Нумерация выводов ПЛИС может не совпадать с той, какая получится у Вас после компилляции проекта. Вам также придется подобрать резисторы для суммирования сигналов B, G, R и Sync. К сожалению, я не помню их точных номиналов, а макета под рукой нет.
Тактовый генератор можете выбрать любой на 16МГц. Стабилизатор для ПЛИС - тоже любой на 3.3В.

Документация к проекту (Схема, код на Верилоге, временные параметры)


Макет


Режим "Полосы"


Режим "Инверсные полосы"


Режим "Шахматное поле"


Режим "Сетка"


Режим "Инверсная сетка"

Генератор цветного сигнала по системе PAL

Этот проект является логическим продолжением предыдущего. Здесь я предпринял попытку сделать генератор полного цветного телевизионного сигнала (ПЦТС) в таком же корпусе ПЛИС. Для этого пришлось отдельно собрать еще и генератор на 8.86МГц удвоенной частоты цветовой поднесущей.
К сожалению, здесь не все соответствует стандарту PAL из-за ограниченности ресурсов. Нет привязки фазы цветовой поднесущей к началу строки (из-за этого на проффессиональных мониторах заметно, как изображение "бежит" по вертикали). Цветовой сигнал дискретизирован всего на 16 уровней.
Идея формирования цветового сигнала почерпнута из журнала Радио [1].
Опять же схема является только эскизом. Вам придется подобрать резисторы для суммирования сигналов B, G, R и Sync, а также резисторы ЦАП для получения цветового сигнала и отрегулировать его размах. К сожалению, я не помню их точных номиналов, а макета под рукой нет.
Тактовый генератор можете выбрать любой на 16МГц. Стабилизатор для ПЛИС - тоже любой на 3.3В.
Файл "tvcolorbars.v" содержит исходный проект. В файле "tvcolorbars_colorfields.v" я сделал попытку добавить к цветным полосам режимы цветовых полей. Переключение между режимами происходит по кнопке "Mode".

Документация к проекту (Схема, код на Верилоге)


Режим "Цветные полосы" (странно, старый фотоаппарат сделал зеленую полосу салатовой :-( )


Так выглядит ТВ сигнал в режиме "Цветные полосы"

 

Литература
[1]. Яблонский О. Кодер ПАЛ. Радио, 1992, N8, с.37-39


Links to Similar Projects: