Pull to refresh
1
0
Send message

Недельный геймдев: #65 — 10 апреля, 2022

Reading time4 min
Views3.4K

Из новостей: Unreal Engine 5 вышел из альфы, CryEngine 5.7, бесплатная версия Articy:Draft 3, вышла бета-версия Inkscape 1.2.

Из интересностей: начальная сцена «Короля Льва» воссоздана в Substance 3D Designer, Elden Bike, обсуждение в Твиттере консолидации игровых движков, какие инструменты использовались при работе над Satisfactory.

Читать далее

CSS-in-JS в Angular или все-таки CSS?

Reading time7 min
Views6.1K

Всем привет! Меня зовут Всеволод Золотов, я Senior Frontend в компании Bimeister.

CSS-in-JS очень быстро набрал популярность в React-комьюнити, но насколько актуален этот подход в Angular? В данной статье сравним удобство разработки и производительность двух визуально идентичных приложений (time-tracker), написанных с использованием SASS и @emotion/css.

Читать далее

Агрегаты

Reading time16 min
Views19K

Я считаю, что именно агрегаты из Domain-Driven Design лежат в основе поддерживаемых информационных систем. Однако эта концепция малоизвестна за пределами DDD-сообщества и довольно сложна для понимания, поэтому я решил написать очередной пост посвящённый агрегатам. В основном для чтобы структурировать собственное понимание агрегатов и создать "методичку" для своих команд, но и широкой общественности, я надеюсь, этот пост тоже может быть полезен.

Что такое агрегат?

Оптимизируем вычисления в Unity

Reading time15 min
Views5.4K

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

Читать далее

Графическая логическая игра Льюиса Кэрролла

Reading time6 min
Views15K

В одном из выпусков библиотеки журнала «Квант» я обнаружил перевод книги Льюиса Кэрролла «Логическая игра» (The Game of Logic). В ней автор рассказывает об оригинальном графическом способе визуализации логических суждений с помощью размеченного особым образом квадратного поля и фишек двух цветов. Этот способ помогает легко оперировать логическими множествами и на основе некоторых предпосылок формулировать новые утверждения. Давайте попробуем разобраться, как это работает.

Читать далее

Элегантный вопросительный знак

Reading time20 min
Views6.3K

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

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

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

Читать далее

Проверяем качество кода в проектах .NET Foundation: LINQ to DB

Reading time11 min
Views6.2K

.NET Foundation – независимая организация, основанная Microsoft с целью поддержки open source проектов на платформе DotNet. Под их крылом на данный момент собралось множество библиотек, некоторые из которых уже проходили проверку анализатором PVS-Studio. Следующим проектом для проверки анализатором будет LINQ to DB.

Читать далее

Ультра быстрый Cron с шагом в миллисекунду, или когда тестовые задания такими прикидываются

Reading time25 min
Views22K

Давным-давно наш коллега @novar разместил на Хабре статью с описанием вот такого незатейливого ТЗ, полученного им от потенциального работодателя:

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

Хочу предложить алгоритм, приближающийся к O(1) во всех возможных ситуациях, вместо оригинального O(n). Интересующихся прошу под кат.

Ах да. Если вы тот самый работодатель, вот готовый код под ваше ТЗ. Правда на Java, а не на C#. Но вы же не думали, что всё будет так просто?

Читать далее

Как Уилл Смит помог нам выйти на рынок США и запустить стартап в Америке

Reading time8 min
Views5.7K

История о том, как голливудские звезды помогли нам освоить западный рынок и выйти на него со своим стартапом.

Читать далее

Первый truly stateless оптимальный алгоритм модел-чекера и его проверка на Coq

Reading time12 min
Views3.7K

Надоели нестабильные баги в многопоточном коде? Попробуй воспользоваться модел-чекерами! Ведь больше не надо бояться неверифицированных модел-чекеров,  работающих либо за экспоненциальное время, либо неоптимально. Все это в прошлом: в Max Planck Institute for Software Systems разработали новый алгоритм под названием TruSt, который решает эти проблемы и, кроме того, верифицирован на Coq.

Меня зовут Владимир Гладштейн. Этим летом я проходил стажировку в MPI-SWS в группе, которая придумала алгоритм нового модел-чекера для поиска багов в многопоточных программах. Этот алгоритм является оптимальным и truly stateless (вследствие чего работает с линейными затратами по памяти). В этом посте я расскажу, как работают модел-чекеры, в каких случаях их можно использовать, и что за алгоритм придумали мои коллеги. А еще как я проверял доказательства его корректности на Coq.

Читать далее

8 способов вызвать утечки памяти в .NET

Reading time9 min
Views23K

Опытные .NET-разработчики знают, что даже несмотря на наличие в .NET сборщика мусора (Garbage Collector), утечки памяти все равно возникают с завидной регулярностью. Утечки возможны не из-за ошибок в сборщике мусора, а потому что даже в управляемом коде есть множество способов их появления.

В этой статье мы пройдемся по наиболее частым причинам возникновения утечек памяти в .NET-приложениях. Все примеры написаны на C#, но описанные проблемы и способы их решения справедливы и для других .NET-языков.

Читать далее

Слава баг-репортам, или как мы сократили время анализа проекта пользователя с 80 до 4 часов

Reading time9 min
Views3.9K

0885_SupportAndAnalyzerOptimizations_ru/image1.png
Работа в поддержке часто воспринимается как что-то негативное. Напрасно! Сегодня мы постараемся взглянуть на неё под иным углом. За основу возьмём реальное общение: больше 100 писем в переписке, исключения, анализ, который не завершается за трое суток...

Читать дальше →

Особенности создания клона Minecraft «DScraft» для маломощной консоли 2004 года, Nintendo DS

Reading time11 min
Views5.9K

DScraft - это адаптация убер-популярной компьютерной игры Minecraft для Nintendo DS. Хотя DScraft даже близко не так популярен, как оригинальная игра, ему всё равно удалось собрать большое комьюнити, которое существует и сегодня, а саму игру загрузили более 500.000 раз только с одного моего сервера. Мне нравится думать, что это хотя бы частично из-за тех вещей в игре, которые обычно не казались возможными на платформе. Вся разработка заняла примерно полтора месяца. В основном было две вещи, которые раньше заставляли людей думать, что Minecraft на DS почти невозможен: GPU консоли и нехватка памяти.

Читать далее

Из Unity в Godot. Первое впечатление

Reading time5 min
Views43K

Всем привет, последние года три мое основное хобби – создание игр. Не могу сказать, что я добилась чего-то сверхъестественного, но в Steam есть две мои игры (горжусь самим фактом доведенных до конца проектов, но сейчас многое в них уже поменяла бы). И обе эти игры сделаны на движке Unity.

Почему на нем?

Когда не знаешь ничего о создании игр и только начинаешь погружаться в тему, именно он всплывает первым как очевидный вариант для ознакомления. О нем много информации, куча курсов, уроков, в том числе и на русском, даже книги выпускают и переводят. Он бесплатный, в конце концов, а в сети можно найти множество примеров успешных проектов, сделанных на Unity. В общем выбор казался очевидным.  И в целом меня все устраивало, хоть и были недостатки. Однако свою третью игру я начала делать на движке Godot. Здесь я расскажу причины, а также поделюсь своими первыми наблюдениями о плюсах и минусах этого перехода.

Читать далее

Property-based тестирование с QuickCheck

Reading time10 min
Views5.3K

Автор статьи: klntsky



Что такое Property-Based Testing?


Property-based testing (PBT) — подход к тестированию ПО, подразумевающий автоматическую проверку свойств функций (предикатов), специфицируемых программистом-тестировщиком. Для проверки, т.е. поиска контрпримеров, используются автоматически сгенерированные входные данные. PBT позвляет разработчикам значительно увеличить тестовое покрытие и эффективно расходовать своё время, не придумывая входные данные для тестов самостоятельно. В общем случае данные, генерируемые во время property-based тестирования, ничем не ограничены, поэтому проверка может быть произведена на тех значениях, про которые разработчик мог забыть или для которых не счёл нужным написать юнит-тесты (действительно, не перебирать же все значения входных параметров вручную).


PBT-подход был популяризован библиотекой QuickCheck, написанной на Haskell, и в этой статье будет показано, как пользоваться этим инструментом эффективно.

Читать дальше →

Какие изменения нужны языку Rust, чтобы писать асинхронный код стало проще

Reading time13 min
Views14K

Асинхронное программирование — мощный инструмент. Но экосистема Rust продолжает активно развиваться, и пока язык далёк от идеала. В частности, по этой причине многие считают, что асинхронное программирование в Rust — это боль. Однако некоторые не только критикуют, но и предлагают. Среди таких людей автор данной статьи. 

Здесь я расскажу о некоторых ранее предложенных идеях и свяжу их с новыми предложениями. Я проведу некий мысленный эксперимент и постараюсь ответить на вопрос «Что мы могли бы сделать с асинхронным программированием в Rust, если бы нам дали полный карт-бланш?». 

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

Потоки vs Асинхронность


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

Например, этот echo server написан с использованием потоков. Он работает быстрее своей асинхронной версии — для случая, когда количество одновременных подключений не превышает 100.
Читать дальше →

Разместить FORTH в 512 байтах

Reading time25 min
Views6.4K

Оригинал текста Июнь 10, 2021 - 38 минут чтения

Программное обеспечение полно своих зависимостей, если смотреть достаточно глубоко. Компиляторы, написанные на языке, на котором они компилируются, - самый очевидный, но не единственный пример. Чтобы скомпилировать ядро, нам нужно работающее ядро. Линкеры, системы сборки, оболочки. Даже текстовые редакторы, если вы хотите писать код, а не просто загружать его. Как разорвать этот цикл?1 С тех пор как проблема начальной загрузки впервые привлекла мое внимание, я стал интересоваться этой уникальной областью программной инженерии. Не из страха, что кто-то попытается реализовать атаку на доверие, а просто как интересный вызов.

11 лет назад vanjos72 описал на Reddit то, что он называет мысленным экспериментом: что если бы вас заперли в комнате с IBM PC, на котором нет операционной системы? Какое минимальное количество программного обеспечения вам понадобилось бы для начала, чтобы вернуться к комфортной работе?

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

Самым минимальным вариантом может быть простая программа, которая принимает ввод с клавиатуры, а затем переходит на нее. Поскольку подпрограммы ввода с клавиатуры в BIOS реализуют escape-коды alt+numpad, вам даже не нужно писать код преобразования базы.2Более того, циклу даже не нужно условие завершения а просто пишите в буфер обратно, пока не столкнетесь с существующим кодом и не перезапишете точку перехода. Такой подход занимает всего 14 байт.

Путь в четвёртое.

Безуспешная попытка монетизации моего проекта в open source

Reading time5 min
Views18K


Время от времени я пишу ПО в open source. У меня есть довольно популярный сейчас проект под названием faker.js. Я работаю над Faker уже больше десятка лет. Он имеет лицензию MIT.

В этом посте я расскажу о своей попытке монетизации проекта Faker при помощи облачного сервиса. Постепенно мы дойдём до инженеров из стартапа ценой 75 миллионов долларов, основанному Sequoia Capital. Джон и Патрик Коллисоны зарегистрировались в моём облачном сервисе, протестировали его, скопировали концепцию, вставили ссылку на CDN моего бизнеса, а теперь CEO компании Дэвид Сюй не отвечает на мои письма. В целом это будет увлекательное и информативное чтиво.
Читать дальше →

4 года в Нидерландах

Reading time14 min
Views40K

Я пишу эту статью в основном для себя: чтобы высказаться и переосмыслить вещи, происходящие в моей жизни. А публикую потому, что не нашел, не прочитал или проигнорировал что-то такое, когда готовился к переезду.

А еще тут много про деньги.

Читать далее
1
23 ...

Information

Rating
Does not participate
Location
Херсон, Херсонская обл., Украина
Registered
Activity