LINUX.ORG.RU

Избранные сообщения zx_gamer

Пишу фреймворк LDL, аналог SDL но на С++ и с поддержкой старых систем

Форум — Development

Приветствую!

Пишу фреймворк для разработки софта или игр. Идею взял из библиотеки SDL, но пишу на С++.

Главная идея это кроссплатформенность, производительность и поддержка старых и новых систем. Windows 95 - Windows 11, Linux-дистрибьютивы, начиная с 2000-ых годов.

Сам проект. Лицензия Boost Software.

Идея зародилась после написания статьи «В софте все всрато и становится еще всратее».

Как говорится, если критикуешь, предлагай, а предлагая делай. Запилил обзорную статью на Habr’е. На данный момент фреймворк активно портирую на Linux.

Что реализовано:

  1. Поддержка 2D графики
  2. Абстракции над примитивами ОС. Окна, события, каталоги и т.д
  3. Поддержка Soft, OpenGL 1.2 и OpenGL 3 рендера.
  4. Аудио подсистема в реализации, пилю поддержку потокового воспроизведения музыки.

Особенности проекта.

  1. Поддержка старых систем 25+ лет.
  2. Модульный дизайн.
  3. Динамическая загрузка рендера при запуске приложения.
  4. Весь код написан на С++ 98, для поддержки большего числа компиляторов и систем. Но разработчик, может использоать любой стандарт языка, хоть С++ 23. Ограничение есть лишь у меня как у разработчика фреймворка.
  5. Высокоуровневый ООП API. Есть возможнось заюзать свои кастомные аллокаторы.
  6. Поддержка старого железа 25+ лет.
  7. Производительность.
  8. Минимальная внешняя зависимость.

Первый релиз планирую выпустить в течении месяца. Осталось реализовать следующие пункты.

  1. Протестировать и исправить порт под Linux.
  2. Реализовать воспроизведение потокового звука.
  3. Создать минимальную документацию.
  4. Добавить больше примеров.

Недавно выступил с докладом на конференции С++ Russia 2023. Вперед в прошлое, или Разрабатываем фреймворк под Windows 95 в 2023 году

Презентация

Тема на Gamedev.ru

Тема на Old-Games.ru

Буду рад обсудить данный проект. Критика и предложения, очень приветствуется.

Перемещено hobbit из web-development

 ,

JordanCpp
()

Рабочее заркало для ClamAV

Форум — Admin

Народ, поделитесь ссылкой на рабочее зеркало для обновлений ClamAV из РФ.

 

static
()

Современно современный C++

Форум — Development

Под современным C++ обычно подразумевают C++11. Вышедшие после него C++14 и C++17 обычно называют минорными обновлениями стандарта. И вот, с появлением C++20, а недавно и C++23 появился современно современный C++. Тавтология по аналогии с long long.

Так вот, читаю сейчас совсем свежую книгу Beginning C++23 From Beginner to Pro, седьмое издание, авторы Ivor Horton и Peter Van Weert. Книга учит программированию на C++23 и довольно неклассическим образом. Вот самая первая программа из неё:

// Ex1_01.cpp - A complete C++ program
import std;          // This line makes the entire Standard Library available,
                     // including the std::println() functionality used below

int main()
{
  int answer {42};   // Defines the variable answer with value 42
  std::println("The answer to life, the universe, and everything is {}.", answer);
  return 0;
}

Классического Hello World нет, но его написание предлагается в качестве домашнего задания и тут же намекают каков должен быть код:

exercise 1-1. Create, compile, link, and execute a program that will display the text «Hello World» on your screen.

exercise 1-2. Create and execute a program that outputs your name on one line and your age on the next line. define a variable to hold your age first.

exercise 1-3. the following program produces several compiler errors. Find and correct these errors so the program compiles cleanly.

#import std
Int main
{
  std:printn("Holla Mundo!")
)

Так же в первых главах авторы написали:

As of C++23, the preferred mechanism for outputting text to the computer’s screen is through functions such as std::println() and std::print(). We will use these in nearly every example in this book.

Короче C++23 начинает напоминать Java. Но эту тему я открыл не поэтому. Мне вот стало интересно, а как воспримут обучившегося по такой книге джуна или мидла матёрые си плюс плюснутые дядьки из реальных проектов? Вот придёт такой свежеобученный программист в реальный проект и начнёт проталкивать C++ модули везде и всюду. Что скажут старшие товарищи? Побьют или они уже и сами перешли на модули и пишут свой код так, как описано в этой книге?

Не поймите меня неправильно, в книге рассказывают и о классических стримах ввода/вывода, но даже там говорят, что std::print() и std::println() предпочтительнее:

Streams

Input and output in C++ are, as a rule, performed using streams. To output data, you write it to an output stream, and to input data, you read it from an input stream. A stream is an abstract representation of a source of data or a data sink. When your program executes, each stream is tied to a specific device that is the source of data in the case of an input stream and the destination for data in the case of an output stream. The advantage of having an abstract representation of a source or sink for data is that the programming is then the same regardless of the device the stream represents. You can read a disk file in essentially the same way as you read from the keyboard.

std::print() and std::println() are little more than thin layers on top of streams. In essence, the std::println() statement in the main() function of Ex1_01 is analogous to either one of these statements:

std::cout << std::format("The answer to life, the universe, and everything is {}.", answer) << std::endl;
std::cout << "The answer to life, the universe, and everything is " << answer << std::endl;

The standard output and input streams in C++ are called std::cout and std::cin, respectively, and by default, they correspond to your computer’s screen and keyboard. You’ll be reading input from std::cin in Chapter 2 and later chapters.

std::format() is similar to std::print(), except that instead of streaming directly to the standard output stream, std::format() returns the formatted character sequence encapsulated in a std::string object (see Chapter 7). This is why std::print() is effectively analogous to streaming the result of std::format() to std::cout, as we did in the first line of our example.

<<, finally, is the stream insertion operator that transfers data to a stream. In Chapter 2, you’ll meet the stream extraction operator, >>, which similarly reads data from a stream. Whatever appears to the right of each << is transferred to std::cout. You can insert as many strings or other values in one statement as you want (we’ll clarify how this works exactly in Chapter 13). Inserting std::endl to std::cout causes a new line to be written to the stream and the output buffer to be flushed. Flushing the output buffer ensures that the output appears immediately.

Compared to working directly with std::cout, working with std::print() and std::println() is generally both more elegant and efficient (see the next chapter for more convincing evidence). This is why we won’t use output streams that often anymore as of this edition of the book. But because output streams remain an important concept in C++ in general, we’ll briefly return to working with streams at the end of the next chapter to introduce the basic principles.

Разумеется, большинство настоящих проектов на C++ заняты вовсе не вводом/выводом в консоль. Но переход на модули наверняка меняет устоявшиеся привычки в программировании на C++ ещё во множестве других мест. Мне интересно, как это будет воспринято синьёрами помидорами? Помню как я сам начинал программировать на Java в 2006 году. Во время обучения я использовал Java 6, в которой был новый синтаксис цикла for. На собеседовании у меня был лайв кодинг и когда я начал писать такой цикл и написал двоеточие интервьюирующий меня груплид воскликнул: «это же не Pascal!» В тогдашнем проекте той конторы использовали Java 5, в которой for-each только появился.

 ,

zg
()

МЦСТ раскрыл исходные коды компонентов Linux, системных библиотек и ПО для платформы «Эльбрус»

Новости — Hardware and Drivers
Группа Hardware and Drivers

Компания МЦСТ открыла веб-портал dev.mcst.ru для разработчиков ПО на платформе Эльбрус, где публикует исходные тексты и патчи.

На данный момент опубликованы:

  • исходный текст ядра Linux для архитектуры Эльбрус;
  • исходный текст библиотеки glibc для архитектуры Эльбрус;
  • набор патчей для оригинальных исходных текстов прикладных пакетов дистрибутива Эльбрус Линукс.

Также на портале доступны для скачивания учебные материалы и руководства для программистов, собраны ссылки на ресурсы и сообщества, посвященные тематике платформы Эльбрус. Через форму запроса можно подать заявку на получение удаленного доступа к серверам Эльбрус.

>>> Подробности

 , ,

hobbit
()

На сишке тоже можно

Форум — Web-development

Почему то все смузихлёбы думают, что экспресс изобрели они а диды на сишке вручную сокеты колупают. Размажем им коричневую субстнацию по всей морде лица:

https://github.com/babelouest/ulfius

Натурально - подключаешь один заголовочный файл и начинаешь писать пути и их обработчики. Есть парсеры на всю требуху что включает в себя стандарт хттп. Чего вам ещё надо, собаки? (Ц)

 ,

DumLemming
()

Состоялся релиз OpenTTD 14.0

Новости — Игры
Группа Игры

Спустя 20 лет разработки состоялся релиз OpenTTD 14.0.

( читать дальше... )

>>> Подробности

 , ,

peregrine
()

Вышел KiCad 8.0.0

Новости — Open Source
Группа Open Source

23 февраля 2024 года проект KiCad выпустил новую версию 8.0.0. Добавлены новые возможности, внесено множество исправлений.

( читать дальше... )

>>> Подробности

 ,

Beewek
()

Протестировал easy-diffusion

Галерея — Скриншоты

Easy-diffusion — это локальная программа, которая генерирует изображения посредством нейросетей. Для запуска необходимо скачать репозитарий с гитхаба — https://github.com/easydiffusion/easydiffusion — и запустить ./start.sh в директории репозитария. Далее установщик позаботится обо всем остальном и скачает все зависимости. В требованиях для запуска необходима карта Nvidia или AMD. Поддерживаются CUDA и ROCM соотвественно. Также поддерживается рендер изображений и на процессоре.

Для генерации изображения необходимо указать следующие параметры:

  1. промпт — набор слов, указывающий что конкретно необходимо сгенерировать, обязательно;
  2. отрицательный промпт — набор слов, указывающий что *не надо* генерировать; опционально, но с ним получается контролировать более точно;
  3. seed — значение, отвечающее за уникальность изображений; можно ввести вручную или выбрать автоматическую генерацию;
  4. число изображений, по умолчанию 1;
  5. модель, отвечает за стиль изображения: реалистичный. мультяшный и так далее; обязательна; обычно у модели есть одно или несколько ключевых слов для указания в промпте;
  6. лора, содержит в себе набор для генерации одного или нескольких изображений. Необязательна, но с ней можно быстрее получить нужный результат;
  7. Sampler — способ обработки;
  8. Guidance Scale — параметр, который контролирует, насколько процесс генерации изображения следует текстовой подсказке;
  9. количество шагов, собственно, указывает, сколько шагов будет уходить на генерацию изображения; больше число шагов — изображение получается более качественным, меньше — менее качественным;
  10. VAE — в основном, используется для увеличения насыщенности и яркости изображения, но иногда меняет стиль изображения;
  11. размер изображения. Обычно модель заточена под определенный размер и если размер изображения будет слишком сильно отличаться, то то и результат будет отличаться. Если размер изображения будет сильно меньше, то результатом будет нечитабельная мазня. Если не слишком сильно, то может сгенерировать только часть изображения. В случае увеличением размера изображения слишком сильно, могут появиться различные различные артефакты при генерация, например дополнительные руки и ноги. Кроме того, вырастет потребление видеопамяти;
  12. Clip Skip. Не совсем понимаю, что значит этот параметр; обычно в описании лоры указывается, надо его использовать или нет.

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

Также у лоры есть свое значение. Обычно лора слишком сильная, поэтому её значение делается небольшим, чтобы её ослабить и получить более красивый результат.

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

У лоры могут быть ключевые слова или слово. Может не быть. Всё зависит от конкретной лоры.

У меня алгоритм для генерации изображения обычно такой:

  1. беру модель;
  2. беру лору;
  3. беру промпт;
  4. беру отрицательный промпт;
  5. беру seed. Обычно из примера лоры, если в примере нет, то беру из какого-то другого рандомного примера;
  6. прогоняю это все для генерации через несколько моделей по одному изображению;
  7. выбираю изображение с той модели, которая мне больше всего понравилась;
  8. генерирую 100 изображений с этой моделью, лорой, промптом, сидом и отрицательным промптом;
  9. из этих 100 изображений выбираю одно подходящее.

Конкретно здесь у меня изображение со следующими настройками:

Seed: 2851093873
Dimensions: 512x768
Sampler: euler_a
Inference Steps: 30
Guidance Scale: 7
Model: bs_1500
Clip Skip: yes
Prompt: sketch, black souls, bs, masterpiece, high quality, blpioneer, 1boy, cowboy shot, covered eyes, shadow on eyes, brown hair, long blue winter coat, white scarf, outdoors, park, evening, walking, winter, hands in pockets, side view,
Lora Model: blpioneer, add_detail
Lora Strength: 0.8,0.5

>>> Просмотр (1920x1080, 841 Kb)

 , ,

vbcnthfkmnth123
()

Вышел GNU ed 1.20.1

Новости — GNU's Not Unix
Группа GNU's Not Unix

Проект GNU выпустил новую версию классического текстового редактора ed, который стал первым стандартным текстовым редактором ОС UNIX. Новая версия получила номер 1.20.1.

( читать дальше... )

>>> Скачать

 , , ,

saahriktu
()

Финальный релиз HexChat 2.16.2

Новости — Open Source
Группа Open Source

9 февраля вышел последний релиз IRC-клиента HexChat. HexChat является форком некогда популярного XChat и до недавнего времени развивался одним-единственным разработчиком. В версию 2.16.2 вошли незначительные изменения, накопившиеся за прошедшие два года.

Среди причин прекращения поддержки заявлены отсутствие активности со стороны сообщества, устаревший код, проблемы с миграцией с GTK2 на более новые версии и в целом упадочное состояние IRC как средства обмена сообщениями. Вместе с тем, разработчик заявил о надежде, что кто-то создаст форк и продолжит развитие проекта.

>>> Подробности

 , ,

hateyoufeel
()

Эмулятор ZX-Spectrum Glukalka версии 3

Новости — Open Source
Эмулятор ZX-Spectrum Glukalka версии 3
Группа Open Source

Доступна для загрузки новая версия эмулятора Glukalka.

Glukalka — единственный эмулятор ZX-Spectrum с открытым кодом для PC Linux/Windows, Mac и Android, порты которого не являются продуктом сторонних разработчиков с различным функционалом и слабой синхронизацией с основным проектом. Эмулируемые модели: ZX-Spectrum 48, 128, Pentagon + Beta Disk Interface, ZS-Scorpion.

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

Появившаяся поддержка секторов, отличных от 256 байт и формата FDI, а также некоторые исправления в эмуляции, позволили запускать операционные системы iS-DOS и CP/M. Появилась возможность генерации NMI («Magic Button», «Shadow Service Monitor»). Появилась возможность сбросить дамп звука музыкального сопроцессора в файл для дальнейшего редактирования или прослушивания. Стало больше настроек и функций, ускорена запись на диск. Эмулятор стал независим от каких бы то ни было файлов, все необходимые ресурсы он теперь носит с собой в запускаемом файле.

Эмулятору более 22 лет, развивается он «рывками», не очень активно. Но востребованность и своя ниша у него имеется.

Предыдущая новость на ЛОРе

>>> Страница проекта, загрузить

 , , ,

lenin386
()

fheroes2 1.0.12: размещение всех видов объектов в редакторе карт, новые возможности ИИ

Новости — Игры
fheroes2 1.0.12: размещение всех видов объектов в редакторе карт, новые возможности ИИ
Группа Игры

Здравствуйте, дорогие любители Героев Меча и Магии!

Рады представить Вам версию 1.0.12 открытого игрового движка fheroes2!

Ниже Вы можете ознакомиться с подробностями первого обновления нашего проекта в 2024 году.

Самое главное, над чем трудились наши участники — это редактор. На данный момент редактор позволяет создавать и сохранять карты в новом формате (.fh2m), которые могут включать в себя все доступные игровые объекты: героев, замки, реки и дороги, скалы и леса, шахты и различные интерактивные объекты. Таким образом, создание ландшафта и наполнения карт можно считать реализованным. Мы продолжаем работать над интерфейсом и редактированием свойств всех объектов, но можно сказать, что теперь редактор достиг одного из ключевых этапов разработки и позволяет создавать полноценные карты.
(Редактор ещё находится в разработке и пока не доступен игрокам.)

( читать дальше... )

>>> Подробности на нашей странице

 , , , ,

sirDranik
()

fheroes2 1.0.11: замки и объекты в редакторе, сохранение карт, новые возможности режима «Битва», улучшения ИИ в бою

Новости — Игры
fheroes2 1.0.11: замки и объекты в редакторе, сохранение карт, новые возможности режима «Битва», улучшения ИИ в бою
Группа Игры

Здравствуйте, преданные любители Героев Меча и Магии!

Открытый игровой движок fheroes2 сегодня обновился до версии 1.0.11 и мы хотели бы рассказать Вам о том, какие изменения произошли с прошлого обновления.

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

( читать дальше... )

>>> Подробности на нашей странице.

 , , , ,

sirDranik
()

Apache OpenOffice 4.1.15

Новости — Open Source
Группа Open Source

22 декабря 2023 тихо и незаметно вышла новая версия офисного пакета с открытым исходным кодом Apache OpenOffice, который доступен для Linux, macOS и Windows на 41 языке.

Некоторые новшества этой версии:

  • Basic: исправлена ошибка в справке по функции len;
  • Writer: для китайского языка автоматически устанавливается отступ первой строки, равный 2 символам;
  • Calc: исправлена ошибка сохранения в формате ODS для нелатинских алфавитов;
  • ряд других исправлений, см. Release Notes.

Для пользователей, желающих перейти на AOO 4.1.15 с версии 4.1.13 рекомендуется перед установкой сделать резервные копии пользовательских профилей; особенно это важно для тех, кто использует Master Password и может впоследствии захотеть вернуться к старым версиям.

>>> Примечания к выпуску

 

anonymous
()

KeeperFX 1.0.0

Новости — Open Source
Группа Open Source

Dungeon Keeper («Хранитель подземелья»), DK — компьютерная игра в жанре симулятора бога, разработанная компанией Bullfrog Productions и изданная компанией Electronic Arts в 1997 году.

KeeperFX(расшифровывается как Dungeon Keeper Fan eXpansion) - это открытая релизация Dungeon Keeper для Windows под лицензией GPLv2. KeeperFX написан на С и С++. Изначально это был проект декомпиляции оригинального Dungeon Keeper. К версии 1.0.0 весь код переработан и переписан. Нативной версии для онтопика нет, но отлично работает под вайном.

Список изменений версии 1.0.0:

  • Все оставшиеся функциональные возможности исполняемого файла Dungeon Keeper были перенесены в KeeperFX. Это означает, что мы больше не ограничены оригинальной игрой в том, что мы можем изменить.
  • На карте теперь может одновременно находиться более 2048 объектов.
  • Карты больше не ограничены размером 85x85, они могут быть больше или меньше.
  • Добавлены новые юниты: Time Mage и Druid (не используются в старых кампаниях, будут на новых картах).
  • Поддерживается более высокая частота кадров.
  • Исправлены сбои при игре в разрешении 4к.
  • Улучшено строительство мостов и копание для вражеских компьютеров. Это не дает лучшим компьютерным игрокам мгновенно обрушить на вас всю свою армию.
  • Удалены объединенные кампании с самым низким рейтингом, чтобы произвести у новых пользователей положительное первое впечатление.
  • В комплексных кампаниях стали более качественными речевые выступления.
  • Добавлено больше переводов для включенных карт и кампаний.
  • Объекты могут иметь направление (например, лицом на восток).
  • Больше возможностей настройки для картографов и моддеров:
    • Можно добавлять новые существа.
    • Сценарии уровней могут быть больше, что приводит к более сложным сценариям.
    • Можно добавлять новые кадры.
    • Новые команды скрипта.
    • Пользовательская музыка и звуки.
    • Есть полностью настраиваемые ловушки.
    • Новые декоративные предметы.
    • Новые текстуры карты.
  • У орков появилась анимация поедания, а у Аватара — анимация пыток.
  • На картах могут быть большие группы героев.
  • Улучшена стабильность многопользовательской игры.
  • Номера многопользовательских карт могут превышать 255.
  • Драгоценные камни теперь окрашены в фиолетовый цвет на мини-карте, чтобы отличить их от золота.
  • Юниты, видимые на мини-карте, больше не прыгают.

>>> Подробности

 ,

vbcnthfkmnth123
()

Выпуск Bluetuith v0.1.8

Новости — Open Source
Группа Open Source

Bluetuith – это менеджер Bluetooth на базе TUI для Linux, который призван стать альтернативой большинству менеджеров Bluetooth.

( читать дальше... )

>>> Подробности

 , bluetuith,

NickNotNick
()

fheroes2 1.0.9: новые элементы интерфейса и управления, улучшение ИИ, первые объекты в редакторе

Новости — Игры
fheroes2 1.0.9: новые элементы интерфейса и управления, улучшение ИИ, первые объекты в редакторе
Группа Игры

Здравствуйте, игроки и поклонники Героев Меча и Магии 2!

Представляем очередное обновление игрового движка fheroes2. Наша команда хотела бы рассказать, что нового вас ожидает в новой версии 1.0.9.

( читать дальше... )

>>> Подробности на нашей странице

 , , , ,

sirDranik
()

Критическая уязвимость сразу во всех распространённых браузерах

Новости — Безопасность
Группа Безопасность

Компания Google опубликовала информацию и уже закрыла уязвимость в библиотеке libwebp, которая могла приводить к удалённому выполнению кода, когда пользовать просто открывает сайт. Библиотека libwebp используется во всех браузерах на движке Chromium, а также в приложениях на базе electron, в браузере Mozilla Firefox, Gimp, Inkscape, LibreOffice, Telegram, Thunderbird, ffmpeg и другом программном обеспечении. Затронуты также и другие операционные системы.

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

Всем пользователям рекомендуется обновиться как можно скорее.

>>> Подробности

 , ,

Aceler
()

Morroblivion_TWMP: тестирование

Галерея — Скриншоты

Мне удалось наконец-то заставить работать TWMP Morroblivion более-менее стабильно.

Morroblivion --- это Morrowind на движке Oblivion. TWMP Morroblivion переносит Morrowind в мировое пространство Тамриэля. Соответственно без кучи телодвижений это сильно влияет на стабильность. Основную роль в стабильности сыграли, наверное, багфиксы OBL Mod Limit Fix , Purger And Automatic Save 4.5.2, EngineBugFixes , BA_Engine Fixes и следующее исправление в конфиге dxvk для PortProton(8.3)

dxgi.maxFrameRate =50
d3d9.maxFrameRate = 50
dxgi.maxFrameLatency = 2
d3d9.maxFrameLatency = 2
d3d9.evictManagedOnUnlock = True
...А также отключение вертикальной синхронизации и удаленного ландшафта.

Пока прошел майнквест Morroblivion, теперь на очереди квесты Трибунала. Придется вкачиваться наверно, пока на моем 15 уровне пройти дальше квест по очищению святилища не получается. Для тестов брал TWMP Morroblivion 0.3 и стабильную версию Morrroblivion v066. Вообще проделали большую работу по допиливанию v066, я помню, на выходе она была совершенно сырая. Но это все правится только патчами, которые нужно скачивать отдельно.

>>> Просмотр (1920x1080, 3184 Kb)

 ,

vbcnthfkmnth123
()

box86(64) или есть ли жизнь на ARM-e?

Статьи — Desktop
box86(64) или есть ли жизнь на ARM-e?

Запуск программ, собранных для архитектуры x86, на Linux-системах с ARM-процессорами

( читать дальше... )

 , , ,

Unixson
()