10.09.2017


Кручу-верчу, конус на OpenGL получить хочу!

Скриншот программы

Репозиторий

Вертим конус на C#'е с использованием OpenGL. Программа со второго семестра первого курса (хотя большей частью написана ещё в первом), представляющая собой демонстрацию вращения конуса в трёхмерном пространстве. Конус можно изменять по форме, цвету и размеру.

Программа позволяет выбрать из трёх способов визуализации конуса:

  1. с помощью стандартной функции GLUT;
  2. с помощью полигонов-треугольников;
  3. с помощью множества отдельных окружностей.

Для работы требуется .NET Framework 4!


* Поскольку перед публикацией я немного рефакторю код (хотя точнее будет сказать «стилизую»), существует также пересобранная версия на основе этого нового кода. По идее она должна быть абсолютно идентична.

27.08.2017


Репозиторий


Относительно свежая программа на С# из начала 3-го курса или конца 2017 года. По сути представляет собой прототип очередного клиента для чтения (собственно, только для чтения) сообщений из ВК. Целью создания было знакомство с архитектурным паттерном Model-View-ViewModel (MVVM) и построением интерфейса на Windows Presentation Framework (WPF) с использованием разметки на XAML и локализацией на двух языках (русском и английском). Поэтому большей степенью может быть полезна только с целью изучения кода.

Для чтения сообщений нужно получить токен (для этого есть кнопочка Получить, которая перекинет на страницу авторизации и выдаст токен в адресной строке как access_token). В готовой сборке для авторизации используется ключ моего специально созданного приложения. В исходном же коде вместо него стоит 0 (константа VkAppId в VkMsgsReader/VkMsgsReader/MainWindowViewModel.cs), что отключает работоспособность данной кнопки.

16.08.2017


Скриншот

Репозиторий

Простая консольная программа на Python, написанная в начале третьего курса и вычисляющая корни квадратного уравнения по введённому выражению. Запускается с помощью файла main.py. А запустив test.py, можно прогнать автоматические тесты. Совместима с Python 3 и Python 2.7.

23.07.2017


Скриншот программы

Репозиторий

Button, make me a sandwich!

За окном ливень, в душе грусть, а в крови алкоголь, но время для публикации новой программы пришло и ничто не сможет этому воспрепятствовать! А сегодня мы зайдём ещё дальше по хронологии и вернёмся в конец первого семестра (конец 2014 — начало 2015). Это была моя первая программа не только для универа, но и вообще на языке C#, которая писалась вообще без знания особенностей языка с помощью Google, MSDN и StackOverflow. Учитывая вышеизложенное, не стоит там ждать хоть какой-либо архитектуры (не говоря уже о грамотной) или аккуратности кода. Там даже комментарии написаны по-русски, чтобы можно было показывать код преподавателю!

Собственно, всё, что делает эта программа, это заставляет указанное количество кнопок бегать по форме и сталкиваться друг с другом. Жестоко, бессмысленно и беспощадно... Совсем как жизнь, не так ли? Кроме того, каждый кадр записывается в специальный журнал, который можно сохранить в файл и впоследствии загрузить и покадрово воспроизвести. That's it, program lovers!

Для запуска требуется .NET Framework 4. Кроме того, существуют некоторые проблемы, описанные в репозитории, которые, вероятно, уже так и не будут пофикшены.

04.07.2017


Скриншот программы

Репозиторий

Закрыв практику и уйдя на каникулы, самое время вспомнить конец первого курса и процесс сдачи зачёта по дискретной математике. В то время мы как раз проходили методы обхода графов и нахождения кратчайшего пути. Собственно, решению этой проблемы и посвящена сегодняшняя программа. Я подумал, что было бы интересной задачей основательно разобраться в теме и реализовать демонстрацию работы обходов в ширину, в глубину и алгоритм Дейкстры «вживую».

После получения зачёта кодовая база этого проекта, получается, уже «джва» года лежала мёртвым грузом в приватном репозитории Microsoft Team Foundation Server. Но лучше поздно, чем никогда! Немного поправив оформление кода по советам моего нынче любимого ReSharper'а (да, программа написана на C#) и докинув туда всякой "макулатуры", я выкладываю его на всеобщее обозрение в публичном git-репозитории!

Для запуска требуется .NET Framework 4.5!

Язык описания графа

Вообще, граф рисуется случайным образом (поэтому его можно всегда перестроить, нажав на «Сбросить/обновить», если он построился криво), но его структура и номинальные расстояния между вершинами явно задаются с помощью специального и очень простого описательного языка, состоящего всего из четырёх конструкций:

  1. AddVertex(<расстояние>); — добавляет к текущей вершине новую через указанное расстояние и переходит на неё.
  2. Back(); — возвращает указатель текущей вершины на предыдущую.
  3. JoinVertex(номер вершины, <расстояние>); — соединяет текущую вершину с указанной через переданное расстояние.
  4. Close(<расстояние>); — соединяет текущую вершину с самой первой через указанное расстояние и переходит на неё.
18.06.2017


Скриншот

Просто небольшая игра, написанная на Python с использованием модуля pygame. Она совместима как с Python 3, так и с Python 2, но требует модуль pygame.

Чтобы установить его, попробуйте использовать pip:

pip install -r requirements.txt

Для Ubuntu/Debian можно использовать стандартный менеджер пакетов:

sudo apt-get install python-pygame

Когда зависимости будут разрешены, просто запустите файл launcher.pyw.

17.04.2017


Распаковщик в боевых условиях бесконечного лета

Встала тут передо мной задача стянуть картинки из «Бесконечного лета». Собственно, распространяются они по Creative Commons, всё легально и скрипт для распаковки архивов выложен в свободный доступ одним из разработчиков игры. Но надо помнить, что спрайты в этой игре многослойные: на голое "обезличенное" тело накладывается различная одежда и эмоции. Конечно, можно всё это собрать вручную, но зачем, если можно вытащить уже собранные спрайты из самой игры?

«Бесконечное лето» построено на движке Ren'Py, основанного на библиотеке pygame языка Python. Движок "опенсорсный" и его код можно спокойно скачать и посмотреть, что нехило помогает в понимании внутреннего устройства игр, сделанных на нём. Благодаря этому и исследованию некоторых частей кода самой игры мне-таки удалось написать скрипт, который выполняет поставленную задачу!

Репозиторий

Ren'Py, как движок, интересен тем, что он компилирует и выполняет любые файлы с кодом, которые находит в папке с игрой. На этом основано как создание модификаций для игр на нём, так и вышеуказанные скрипты Лолбота для распаковки ресурсов и декомпиляции кода игр. Так что Вам следует извлечь *.rpy-скрипт из архива в папку game внутри директории с игрой. Дальнейшие действия зависят от конкретной игры. Из коробки поддерживается, собственно, только БЛ:

  1. Запустите игру и зайдите в меню выбора модов.
  2. Выберите мод с названием Image Puller
  3. Дальше, следуя инструкциям, выберите персонажей, для которых хотите извлечь спрайты.
  4. Ждите.
  5. Когда игра перестанет тормозить, а в папке Pulled images больше не будут появляться новые файлы, можно выйти из мода через меню.

С другими играми немного сложнее. Потребуется редактировать код. Впрочем сразу обнадёжу, что если повезёт, то всё обойдётся малой кровью! Класс koz_ImagePuller, содержащий в себе всю основную логику скрипта по извлечению файлов, более-менее универсален, так что на Ваши плечи ложится лишь ответственность за его запуск в нужном месте.

Итак, сперва попробуйте просто пролистать код скрипта до конца блока инициализации, где кончается описание класса, перед описаниями меток (label). Среди комментариев будет такая строка:

# $ koz_ImagePuller().pull_async(delay=10)

Раскомментируйте её, убрав знак решётки и пробел после него ("# "). Попробуйте запустить игру и подождать 10 секунд (можете попробовать уменьшить или увеличить это значение). Если игра не вылетит и начнётся распаковка, то Вам повезло! Ждите окончания тормозов и появления файлов в вышеназванной папке.

Если же ресурсы инициализируются как-то более хитро, то Вам может понадобиться декомпилировать код игры или ещё каким-либо методом запускать распаковку в другой момент выполнения кода, как я это делаю для БЛ. Это уже более сложная операция, так что я не буду её расписывать здесь: желающие могут ознакомиться с хорошо откомментированным содержимым скрипта и моим примером с «Бесконечным летом».


Обновление от 19.05.2017 (v1.1.0)

Добавлено:

  • прогресс-бар;
  • обрезание прозрачного фона у спрайтов;
  • сортировка изображений по папкам;
  • больше возможностей для фильтрации извлекаемых изображений;
  • логирование и игнорирование различных ошибок (возникающие, например, при попытке извлечь несуществующее изображение);
  • возможность штатно прервать извлечение.

Также менюшки выбора параметров теперь не сохраняют выборы между запусками. Ну и, само собой, были исправлены некоторые ошибки (впрочем, некоторые ещё остались — см. здесь).

Распаковщик с прогресс-баром

Скачать старую версию: v1.0.0.

С Днём пионерии!

19.02.2017


Рабочий стол моего ноутбука с Debian 8
Да, я специально запустил ноутбук, чтобы сделать скриншот :)

Снова, в очередной раз воодушевившись примером какого-то случайного и совершенно незнакомого «крестового разработчика-линуксойда», я ставлю эксперимент и пытаюсь пересесть на Linux в качестве основной рабочей системы для начала хотя бы на ноутбуке, раз уж там давно напрашивалась переустановка систем. У Линукса — а в моём случае это Debian 8, который я пробую теперь вместо Ubuntu в погоне за большей стабильностью, прочитав, что для дистрибутивов последней берут пакеты из тестовых веток Дебиана — есть ряд преимуществ, особенно на слабом железе вроде моего нищебродского ноутбука, в виде хотя бы гораздо более быстрой загрузке системы и возможности выбрать максимально лёгкую графическую оболочку. Минусов, правда, тоже хватает, но судя по последним сборкам Windows, через несколько лет по стабильности обе системы могут вполне приблизиться друг к другу очень тесно.
Вообще, сейчас с Microsoft происходят неоднозначные изменения: они взяли частичный курс на open source, пытаются приучить пользователей пользоваться репозиториями, добавили в Десятку UNIX-like shell. И вроде бы это должно быть хорошо, но почему-то всё выходит настолько же криво, как и весь open source. Видимо, в этом его суть. Хотя при этом, по утверждению некоторых пользователей Интернета, Wine уже вполне неплохо запускает даже последние новинки из мира игр. Очень интересное утверждение, которое требует тщательной проверки.

Впрочем, я отвлёкся от дела. Обстоятельным сравнением Linux и Windows займёмся как-нибудь в следующий раз, подводя итоги начатого эксперимента. Сейчас же остановимся на главном: установка любой операционной системы с полным её конфигурированием, установкой привычного и чуть ли не жизненно необходимого ПО — долгий и утомительный процесс. Особенно, если тебе надо поставить систему на ноутбук, на компьютер, на виртуальную машину для безопасных экспериментов, а ещё и друг не прочь попробовать новый дистрибутив. И при этом устанавливать везде приходится практически одно и то же: раз за разом приходится вспоминать названия пакетов и команд для установки и настройки той или иной программы. А ведь по иронии судьбы даже за многолетнюю историю в репозиториях есть, дай бог(-иня) [Чокола], половина софта. И в итоге всё так же, как и на Windows, приходится рыскать по сайтам, скачивать в лучшем случае *.deb-пакеты, а то и вообще простые *.tar.gz-архивы.

И тут в игру вступает герой сегодняшнего дня — KozConfigurator! Что это такое? Это скрипт для первоначальной настройки свежеустановленной Debian-системы. Подробнее можно почитать в репозитории. С ним настройка и установка программ превращается пусть и во всё ещё довольно долгую, но уже гораздо менее болезненную операцию!
Программы в скрипте поделены по отдельным наборам, которые можно выбирать для установки. Это позволяет конфигурировать различные наборы программ на разных компьютерах и для разных людей. Разумеется, поскольку я собирал максимально типовые use case'ы для себя, то половина наборов там для разработчиков и программистов на различных языках, но я вполне уверен, что надутся люди, которые смогут чуть-чуть подправить набор под свои нужды и использовать мой скрипт для всеобщего блага.

С версии 0.2.0 (собственно, с неё и начинается репозиторий, так как предыдущие разрабатывались по дебильной системе на виртуалке через Яндекс.Диск), скрипт допускает выбор устанавливаемых наборов в интерактивном режиме, что позволяет дать вам для использования в терминале следующую однострочную команду, не вникая во всякие премудрости с использованием аргументов-ключей:

wget http://nekochan.ru/linux/KozConfigurator && chmod +x KozConfigurator && su -c './KozConfigurator'

Версии 0.2.* содержали внутри себя большие куски двух Python- и одного Bash-скрипта, что делало возможным распространять скрипт одним файлом. Версия 0.3.0, ссылка на которую приведена в команде выше (ссылка от 4.03.2017), ничем не отличается от версии 0.2.2, которую можно скачать по этой ссылке, кроме вырезанных скриптов, которые теперь размещены отдельно на сайте и скачиваются скриптом при необходимости (если выбраны наборы, где они используются). Впрочем, эти скрипты могут вполне использоваться и отдельно, так что вот ссылки на них:

  • ksharman (Kozalo's SHARing MANager) — скрипт для редактирования списка «расшаренных» папок у сервера Samba.
  • kremount (Kozalo's REmote MOUNTer) — скрипт для монтирования сетевых папок на файловую систему.
  • jdk-install — скрипт, который немного помогает установить проприетарный JDK от Oracle.

Ну и напоследок замечу, что мажорная версия до сих пор нулевая не случайно. Хоть сообщество Debian и весьма консервативно, я не могу гарантировать на долгое время, что все ссылки, используемые в скрипте будут живы, и что ничего нигде не поменяется. Всё-таки этот скрипт практически целиком зависит от третьих лиц, так что я не могу дать никаких гарантий работоспособности! Но по багрепортам, если таковые будет кто отправлять, буду править ошибки и недочёты. Всё в рамках той же нулевой мажорной версии оставляю за собой право со временем менять список устанавливаемого ПО.

Хорошего всем дня и успешных установок!

Спойлер
Небольшой спойлер одного из следующих постов ;)


Обновление от 4 марта 2017

Основной файл обновлён до версии 0.3.1. Для старого файла добавлена отдельная ссылка.
В новой версии добавлен ряд новых пакетов:

  • xcompmgr (композитный менеджер окон, позволяющий программам создавать прозрачные окна и делать красивые (и не очень) эффекты) [описание бага];
  • ntp (демон для синхронизации системных часов с Интернетом);
  • gnome-web-photo (включает в shutter возможность делать скриншоты веб-сайтов).

Также устанавливается инициализация shutter и запуск Telegram и вышеупомянутого композитного менеджера при загрузке компьютера.


Обновление от 15 марта 2017

Основной файл обновлён до версии 0.3.2. Версию 0.3.1 можно скачать по этой ссылке.
В новой версии добавлен ряд новых пакетов в набор основного программного обеспечения (предложение):

  • VLC (широко известный видеопроигрыватель);
  • Kazam (программа для захвата видео с экрана; устанавливается только при включённом экспериментальном режиме).

Также добавлена автозагрузка Dropbox при старте системы и, пожалуй, самое важное: исправлена ошибка со сбросом настроек Telegram, заставляющая логиниться, скачивать обновления и настраивать программу после каждого запуска.


Обновление от 18 марта 2017

Основной файл обновлён до версии 0.3.3. Версию 0.3.2 можно скачать по этой ссылке.
В новой версии исправлена критическая ошибка, приводящая к невозможности установки Composer'а.


Обновление от 28 марта 2018

Основной файл обновлён до версии 0.4.4. Версия 0.3.3 доступна по ссылке, придерживающейся уже привычной схемы. Дополнительные скрипты также были обновлены:

Кроме этого, добавлен новый файл: kjbupdater — он предназначен для установки, обновления и удаления IDE от JetBrains. В соответствии с #1 процесс установки данного вида ПО был вынесен в отдельный скрипт.

В основной скрипт были добавлены новые наборы: для электронщиков, работающих с AVR-микроконтроллерами, и для любителей тайловых (фреймовых) оконных менеджеров (устанавливает i3 с обвязкой из различных программ). Значительно был расширен набор основных утилит.

Не менее важным моментом является исправление нескольких кривых мест прошлой версии скрипта:

  • Директория /opt/KozConfigurator/ и всё её содержимое теперь принадлежат пользователю, что позволяет правильно работать системе самообновления IDE.
  • Пользователь теперь не прописывается в файл /etc/sudoers, а добавляется в группу sudo.
  • Дополнительные репозитории прописываются в /etc/apt/sources.list.d/, а не напрямую в файл /etc/apt/sources.list.

Кроме того, в репозиториях Debian 9 появились некоторые пакеты, которые до этого ставились со сторонних репозиториев или даже самописными костылями прямо с сайтов. Кроме того, поскольку даже для обновления системы с восьмой версии официальная документация советует использовать apt-get, а не aptitude, то последняя была вычищена из скрипта полностью.

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

07.01.2017


Сегодня у меня есть небольшой рождественский презент (а поздравление было в группе). Хотя скорее это подарок лишь нескольким из моих одногруппников.
Итак, вот вам программа для Windows, которая выводит список установленных сервисов в виде красивой таблицы на HTML-странице!

Для чего это нужно? Ну вот нам давали задание на лабораторную работу: переписать в таблицу 30 сервисов, включая их названия, описания, исполняемый файл и статус работы. Для тех же, кто прогуливал пару, задание решили "усложнить": им нужно переписать все сервисы, кроме этих 30-ти. И это вполне себе вызов, если делать методом "копипасты" и перепечатывания, как они делали на паре. Ну а что же я? Взял и написал за пару на Python 3 скрипт, который любой может запустить на своей машине и получить готовую таблицу, которую затем можно вставить в Word!
Теперь же я наконец-то её оформил в красивом виде и готов выложить на радость нуждающейся публике.

>> СКАЧАТЬ <<
исполняемый файл

Скачать исходный код

Вы можете ужаснуться, что архив с исполняемым файлом весит целых 7,5 Мб. Где же это видано! Согласен, много. Дело в том, что PyInstaller собирает в EXEшник полноценный интерпретатор языка Python и включает туда все необходимые модули.
Те, у кого уже есть Python 3 и установленный пакет модулей PyWin32, могут установить WMI через pip (py -3 -m pip install wmi) и просто скачать архив с исходным кодом, который весит всего 2,5 Кб.

Как пользоваться скриптом?

Сразу скажу самую главную вещь: не пытайтесь запустить программу просто так! Вы лишь получите ошибку перекодировки в кодировку CMD. И это не баг, а так и было задумано изначально. Зачем Вам HTML-страница в консоли? Обязательно перенаправляйте вывод скрипта в файл! Я не стал делать для этого отдельных опций, ибо есть стандартный способ. Давайте сразу рассмотрим несколько примеров запуска программы, когда рабочий каталог предварительно уже установлен в папку с ней:

python service_list_generator.py > services.html # вызываем скрипт из исходного кода, создавая файл services.html
py -3 service_list_generator.py > services.html # если команда "python" забита на вторую версию языка, то используем Python Launcher
service_list_generator > services.html # исполняемый файл вызвать проще всего; ".exe" можно опустить
service_list_generator limit:30 > services.html # теперь в таблице не будет больше 30 строк
service_list_generator filter:exclude.html > services.html # используем специальный файл, где перечислены сервисы, которые мы не желаем видеть в результирующей таблице (об этом ниже)
service_list_generator l:30 f:exclude.html > services.html # комбинация двух предыдущих вызовов в сокращённой форме

Как видно из примеров выше, скрипт поддерживает два параметра: filter и limit, значения которым задаются через двоеточия без пробелов. Также вместо полных слов можно писать лишь первую букву. Второй принимает положительное число, которое обозначает максимальное количество сервисов в выдаче, а первый позволяет исключать некоторые из них.
Файл, который принимается для фильтрации, должен содержать названия исключаемых сервисов. Ну или хотя бы несколько слов из названий. Не сокращайте названия слишком сильно, потому что вычёркиваться из выдачи будут все сервисы, чьё название начинается аналогично указанному в списке.
Каждое название должно быть на отдельной строке.
Кодировка файла должна быть строго Windows-1251! Скрипт работает только с ней и выдаёт HTML-страницу в ней же.

Ну вот вроде бы и всё, что я хотел рассказать об этой маленькой программке. С Рождеством! Рекомендую посмотреть познавательное видео "Адам портит Рождество" и зайти на Congrats.Cf. Удачи!

07.01.2012


Уважаемые читатели, представляю вам вторую версию моей программы для забывчивых и неорганизованных людей - KozReminder v2.0. Программа предназначена для периодического напоминания о чём-либо. Также она может периодически показывать какие-либо изображения. Для чего можно её использовать? Я могу легко привести несколько примеров, так как писал её, честно говоря, для себя.

Во-первых, в наше время почти у всех есть искривление осанки. Как Вы сейчас сидите, читая эти строки? А ну-ка выпрямите спину! Вот для таких напоминаний и можно использовать KozReminder. Заставьте его каждые пять минут напоминать Вам, что сидеть нужно правильно, ведь правильная осанка - это здоровье и красота (подробнее).

Во-вторых, как Вы ставите чайник? Включаете на плиту и уходите к компьютеру, благополучно забывая о нём? Если да, то Вы, наверное, уже догадались, для чего ещё можно использовать KozReminder? Разумеется, нужно задать программе отобразить один раз минут через 10 напоминание о том, что пора выключить чайник. Что может быть проще!

В-третьих, мужчины могут продлить свою жизнь, смотря, пардон, на женскую грудь. Это показывали в новостях, поэтому причин не верить нет (вот ещё статья). Для этого можно использовать вторую функцию KozReminder’а - периодический вывод изображений. Скачайте несколько фотографий, добавьте их в программу, и она будет продлевать Вам жизнь (если, конечно, Вы мужчина)!

Я уверен, что есть ещё очень много вариантов использования программы. Так что скачайте и используйте её совершенно бесплатно!

Со второй версии в программе появился небольшой планировщик задач. Он, действительно, очень простой. Можно лишь задать список задач и программа будет периодически напоминать о невыполненных задачах.

Скачать KozReminder v2.0

Исходный код

История версий:

  • v1.0 - первая версия.
  • v1.1 (код) - добавлена функция автозагрузки.
  • v2.0 - тотальное обновление программы, которая практически была переписана заново; появился планировщик задач, возможность задавать множество напоминаний одновременно, сделано приличное окно оповещения.

UPD (10.09.2017): добавлены архивы с исходным кодом. В исходном виде без каких-либо стилистических правок. Простите ;(

<<   / 3   >>