Как стать автором
Обновить
1
0

Пользователь

Отправить сообщение

Геймдев на Lisp. Часть 2: подземелья и интерфейсы

Уровень сложностиСредний
Время на прочтение66 мин
Количество просмотров2.3K

В первой части мы познакомились с архитектурным паттерном Entity-Component-System, часто используемым в разработке игр, и металингвистической парадигмой программирования, заключающейся в построении и использовании собственных языков, наиболее полно и точно описывающих предметную область создаваемой программы. На сей раз мы используем эти приёмы для создания небольшой, но полноценной игры на Common Lisp в жанре dungeon crawler (рус. надмозг. "подземное ползание") с пользовательским интерфейсом и рассмотрим на её примере системный дизайн реального игрового приложения с использованием ECS.

TL;DR: готовую к запуску демонстрацию (бинарники под все распространённые ОС) и её исходный код можно найти на github.

Читать далее
Всего голосов 14: ↑14 и ↓0+22
Комментарии4

Геймдев на Lisp. Часть 1: ECS и металингвистическая абстракция

Уровень сложностиСредний
Время на прочтение30 мин
Количество просмотров6.5K

В данной серии практических руководств мы подробно рассмотрим создание несложных 2D-игр на Common Lisp. Результатом первой части станет настроенная среда разработки и простая симуляция, отображающая двумерную сцену с большим количеством физических объектов. Предполагается, что читатель владеет некоторым языком программирования высокого уровня, в общих чертах представляет, как на экране компьютера отображается графика, и заинтересован в расширении своего кругозора.

Common Lisp — язык программирования с богатой историей, предоставляющий эффективные инструменты для разработки комплексных интерактивных приложений, каковыми являются видеоигры. Данная серия руководств ставит перед собой задачу наглядно продемонстрировать ряд возможностей CL, отлично вписывающихся в контекст разработки игровых приложений. Общий обзор таковых возможностей и особенностей Common Lisp приводится в статье Юкари Хафнер "Использование высокодинамичного языка для разработки".

Многие возможности, впервые появившиеся в Lisp, такие, как условный оператор if/then/else, функции как объекты первого класса, сборка мусора и другие давно перекочевали в мейнстримные языки программирования, однако есть одна уникальная возможность, которую мы рассмотрим сегодня, и это — металингвистическая абстракция.

Читать далее
Всего голосов 17: ↑17 и ↓0+17
Комментарии19

Отладочная плата с жирной ПЛИС за 500р или что делать со старым антмайнером — как я делаю собственную платформу

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров15K

С незапамятных времён, когда ещё существовали браузеры под ДОС, я взял себе ник Astra.

Поэтому и назвал проект превращения запчасти от майнера с мусорки в годную "отладку", с которым вожусь несколько месяцев, --Аstra_S9_SoC(+FPGA)-- или "платформа Astra9" Собственно, сама плата уже давно запроектирована и наштампована конторой Битмаин невероятно большим тиражом- порядка нескольких сотен тысяч (а то и миллиона) экземпляров. Сотни тысяч этих плат УЖЕ находятся у нас в стране, их не надо тащить с Али. Плата предназначена чисто для управления майнингом на хешплатах и не имеет никакой либо документации. Однако, "сердцем" платы является SoC+FPGA микросхема американской корпорации Xilinx -- ZYNQ 7010 xc7z010-clg400, что позволяет использовать её как FPGA девборд и как одноплатник

Я взял на себя труд разработать рабочую документацию на эту плату. https://dzen.ru/a/ZtTuMNBQ3gFhmskj

В своих статьях рассмотрю основные варианты применения этого изделия. Как минимум, будут освещены такие вопросы:

0. Никакой возни, раздобыл плату, микро-СД-флешку - и через полчаса всё заработало https://dzen.ru/a/ZtumRpI4dV3u1R7v

1. Привет, народ или Как помигать светодиодом

2. Запустить Убунту

Читать далее
Всего голосов 47: ↑46 и ↓1+58
Комментарии86

Подборка игр с низкоуровневым программированием

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров34K

TL;DR

Игры от Zachtronics:

TIS-100, EXAPUNKS, SHENZHEN I/O

Про создание процессора от логических элементов и до написания кода на ассемблере: браузерная бесплатная nandgame.com, более продвинутая Turing complete.

Если Вам нравится какая-то игра из перечисленных - наверно, и остальные тоже подойдут. В каждую из них я наиграл по 30+ часов, получил кучу удовольствия и научился чему-то новому.

Подробности
Всего голосов 67: ↑66 и ↓1+79
Комментарии26

Как я постепенно избавляюсь от контроля Google

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров60K

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

Мне кажется, прежде, чем приступать, нужно дать важное предисловие. Во-первых, эти заметки сделаны по личному опыту, это не подробный обзор альтернатив сервисам Google, сравнения альтернативных решений можете поискать где-нибудь ещё. Во-вторых, для использования некоторых из упомянутых в статье альтернатив требуется настройка своего сервера, что для многих людей станет ограничивающим требованием.
Читать дальше →
Всего голосов 68: ↑58 и ↓10+69
Комментарии201

Как «оптимизация» зарплат вредит бизнесу, и что делать

Уровень сложностиСредний
Время на прочтение64 мин
Количество просмотров35K

Оптимизация фонда оплаты труда (далее - ФОТ) в долгосрочной перспективе вредит компаниям, ухудшает их положение и усиливает кризисы.

Этот вопрос мы рассмотрим на основе проблем в Boeing и Blizzard, разбора жёсткого поведения Amazon в отношении сотрудников, с примерами лучших практик Генри Форда и General Electric, а так же ссылками на исследования, с описанием психологических аспектов и ключевых трендов. И рекомендациями: что с этим делать.

Цель данной публикации - описать ключевые аспекты и нюансы проблемы, чтобы любой мог прийти к финансистам, кадровикам или генеральному директору с ней со словами “хватит вредить бизнесу оптимизацией ФОТ!"

Оптимизировать вред оптимизации ФОТ
Всего голосов 90: ↑87 и ↓3+100
Комментарии132

Я программист, и я тупой

Время на прочтение2 мин
Количество просмотров79K
Я пишу код за деньги уже пятнадцать лет. Пробовал себя и в других ролях – управление продуктом, аналитика, тестирование, – но как-то не пошло. И с течением лет пришел к осознанию, что я не очень умный. К сожалению.

Никаких особых медицинских диагнозов мне не ставили, но мои умственные способности крайне ограниченны. Даже те задачи на Leetcode, которые попроще, вызывают у меня затруднения. Когда я читаю о самом обычном алгоритме консенсуса, у меня кипит мозг. У меня плохо получается отслеживать сложные зависимости в кодовой базе. Я не способен освоить модные языки вроде Rust (пытался, но по правде сказать, для меня это чересчур). Я терпеть не могу микросервисы и современный фронтенд: там слишком много движущихся частей, и уследить за всеми я не в состоянии.

Как же я выхожу из положения?
Читать дальше →
Всего голосов 297: ↑283 и ↓14+324
Комментарии334

Программисты всё вымирают и вымирают

Уровень сложностиПростой
Время на прочтение18 мин
Количество просмотров133K

Да вымереть не могут.

Откуда это всё пошло? Чем так условные «программисты» не угодили? И почему именно программисты?

Читать далее
Всего голосов 335: ↑323 и ↓12+373
Комментарии583

Разворачиваем систему уравнений в граф

Время на прочтение6 мин
Количество просмотров7.4K

Как-то во время учебы на инженера-теплоэнергетика я наткнулся на одну книгу [Попырин Л.С. Математическое моделирование и оптимизация теплоэнергетических установок. М. Энергия 1978г.], в которой был описан алгоритм построения расчётных схем энергетических установок, разработанный в Сибирском энергетическом институте (ныне - ИСЭМ СО РАН). Этот алгоритм заложен в основу СМПП (система машинного построения программ) - кодогенератора, который используется в исследованиях в ИСЭМ и по сей день. Собственно алгоритм предназначен для решения систем нелинейных уравнений, и, условно говоря, обобщает метод подстановки, знакомый многим из школьной алгебры.

Зачем это нужно?

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

Читать далее
Всего голосов 10: ↑10 и ↓0+10
Комментарии6

Ирина — опенсорс русский голосовой помощник. Offline-ready

Время на прочтение9 мин
Количество просмотров54K

- Ирина, таймер...
- Ставлю таймер на пять минут.

Вполне себе обыденная история из моего быта. Я таки сделал собственного автономного голосового помощника.

TL;DR> Ирина вполне неплохо работает дома 24x7.

Потребуется установить Python 3.5+ и зависимости через pip (немного знаний Python).

Скиллы "из коробки": таймер, погода, контроль медиа (громче/тише/дальше), контроль плеера MPC-HC, запуск медиа из папки, расписание ближайших электричек, "подбрось кубик/монетку".

Плагинами добавляются: другие скиллы, Text-to-Speech и Speech-to-Text движки.

Интересно? Поехали >
Всего голосов 91: ↑89 и ↓2+106
Комментарии88

Невидимая проблема текстовых редакторов на смартфонах

Уровень сложностиПростой
Время на прочтение15 мин
Количество просмотров24K

Когда я рассказываю о своих исследованиях редактирования текста на мобильных в Google, то обычно сталкиваюсь с непониманием и немного враждебным «Разве на телефонах нельзя редактировать тексты? В чём проблема?»

Редактирование текста на мобильных поломано. На самом деле, оно гораздо хуже, чем вы думаете, это невидимая проблема, на которую никто не обращает внимания. Я написал этот пост, чтобы вы поняли, насколько это важно. Так как проблема имеет много нюансов, вам может наскучить чтение, поэтому я разбросал по тексту множество заголовков; если надоест, просто пропускайте раздел.

Читать далее
Всего голосов 75: ↑75 и ↓0+75
Комментарии110

Bleeding-edge обход блокировок с полной маскировкой: настраиваем сервер и клиент XRay с XTLS-Reality быстро и просто

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров497K

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

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

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

Читать далее
Всего голосов 37: ↑37 и ↓0+37
Комментарии310

Суперклей ABI, или Как применять C++ где угодно

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров11K

Привет, Хабр! Меня зовут Михаил, я backend-разработчик в SimbirSoft. Время от времени я сталкиваюсь с понятием «двоичный», он же «бинарный» интерфейс приложений, или просто ABI (application binary interface). Все найденные мной материалы на эту тему были либо очень скудны, либо вели к многостраничным эпопеям, которые напоминали сборную солянку из описания, например, архитектуры процессора x86, сдобренную стандартом С++.

Но потом я наткнулся на перевод публикации Тита Винтерса в рабочей группе 21 (WG21) — комитета по стандартизации языка C++. В ней он поднимает вопрос поддержки обратной бинарной совместимости. Значит, вопрос актуальный — это и стало мотивацией для написания этой статьи. В ней я сфокусируюсь на примерах и практике использования С++ в других языках программирования. Материал будет полезен middle+ и senior-разработчикам, а также всем, кто хочет сделать гибкий, долгоживущий, легко настраиваемый под заказчика продукт.

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

Читать далее
Всего голосов 9: ↑8 и ↓1+8
Комментарии26

6. Устойчивость систем автоматического управления. 6.6 Понятие об областях устойчивости

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров9.5K

Продолжаем публикацию лекций Олега Степановича Козлова по предмету "Управление в Технических Системах".

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

1. Введение в теорию автоматического управления.2. Математическое описание систем автоматического управления 2.1 — 2.32.3 — 2.82.9 — 2.13

3. ЧАСТОТНЫЕ ХАРАКТЕРИСТИКИ ЗВЕНЬЕВ И СИСТЕМ АВТОМАТИЧЕСКОГО УПРАВЛЕНИЯ РЕГУЛИРОВАНИЯ. 3.1. Амплитудно-фазовая частотная характеристика: годограф, АФЧХ, ЛАХ, ФЧХ3.2. Типовые звенья систем автоматического управления регулирования. Классификация типовых звеньев. Простейшие типовые звенья3.3. Апериодическое звено 1–го порядка инерционное звено. На примере входной камеры ядерного реактора3.4. Апериодическое звено 2-го порядка3.5. Колебательное звено3.6. Инерционно-дифференцирующее звено3.7. Форсирующее звено.  3.8. Инерционно-интегрирующее звено (интегрирующее звено с замедлением)3.9. Изодромное звено (изодром)3.10 Минимально-фазовые и не минимально-фазовые звенья3.11 Математическая модель кинетики нейтронов в «точечном» реакторе «нулевой» мощности

4. Структурные преобразования систем автоматического регулирования.

5. Передаточные функции и уравнения динамики замкнутых систем автоматического регулирования (САР).

6. Устойчивость систем автоматического регулирования. 6.1 Понятие об устойчивости САР. Теорема Ляпунова. 6.2 Необходимые условия устойчивости линейных и линеаризованных САР. 6.3 Алгебраический критерий устойчивости Гурвица. 6.4 Частотный критерий устойчивости Михайлова. 6.5 Критерий Найквиста.

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

Читать далее
Всего голосов 8: ↑7 и ↓1+8
Комментарии0

Стохастический язык программирования на основе алгоритмов Маркова

Время на прочтение13 мин
Количество просмотров27K

MarkovJunior — это вероятностный язык программирования, в котором программы являются сочетаниями правил перезаписи, а инференс выполняется при помощи распространения ограничений. MarkovJunior назван в честь математика Андрея Андреевича Маркова, придумавшего и исследовавшего то, что сейчас называется алгоритмами Маркова.
Читать дальше →
Всего голосов 139: ↑139 и ↓0+139
Комментарии24

Оптимизируем изображения в HTML

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров16K

Вместе со Стивом Сьюэллом, CEO Builder.io, разбираемся, почему с точки зрения оптимизации производительности изображения лучше загружать через HTML, а не через CSS. 

Читать далее
Всего голосов 14: ↑14 и ↓0+14
Комментарии10

Почему подчиненные делают не то, что нужно

Время на прочтение8 мин
Количество просмотров15K

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

Читать далее
Всего голосов 42: ↑38 и ↓4+52
Комментарии25

Всё про USB-C: паяльник Pinecil

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров28K

Как многие правильно заметили, в случае с USB-C важен не просто сам стандарт, а то, как он реализован. В конце концов, мы имеем дело с реализациями, и именно на этой почве обычно возникает большинство проблем. Отчасти, конечно, вина лежит и на стандарте, например, в плане отсутствия маркировки кабелей. Хотя, на мой взгляд, он продуман намного лучше, чем некоторым кажется.

Я хочу познакомить вас с несколькими реализациями USB-C в некоторых интересных опенсорсных продуктах. Все они в том или ином смысле не идеальны – иначе и быть не может, поскольку им приходится иметь дело с беспорядочным реальным миром, где совершенство является редкостью.

Сегодня мы поговорим о Pinecil – недорогом и качественном паяльнике от Pine64, выпущенном пару лет назад. Для питания в нём предусмотрен и круглый разъём, и порт USB-C. Это стало долгожданным отступлением от стратегии компании Miniware, которая не применяла такое решение ни в оснащённой исключительно круглым разъёмом модели TS100, ни в маломощных паяльниках TS80. Кроме того, поскольку Pinecil разработан под использование жал T12 от модели TS100, он заслуженно завоевал популярность в мире электронщиков-любителей.
Читать дальше →
Всего голосов 77: ↑77 и ↓0+77
Комментарии18

Что нам несет Python 3.12

Время на прочтение3 мин
Количество просмотров34K

Переписали виртуальную машину на новый DSL

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

В качестве примера, можно посмотреть на попытку добавления register-based интерпретатора. Другой пример, что часто два опкода идут вместе и выполняются последовательно большую часть времени. Например, LOAD_CONST и RETURN_VALUE. Для оптимизации, можно добавить новый опкод этой операции. Вместо двух действий он будет выполнять одно. На частых задачах получится неплохая прибавка к производительности. 

Еще один пример: опкод CALL_FUNCTION. Сам по себе довольно медленный. У него есть целая семья оптимизаций, например специализация CALL_FUNCTION_ISINSTANCE, когда мы выкидываем промежуточный слой и сразу вызываем C-реализацию isinstance. Минус в том, что Python богатый и динамически типизированный язык. В runtime может что-то поменяться и мы получим замедление — придется сваливаться обратно на общий путь опкода CALL_FUNCTION.

Читать далее
Всего голосов 44: ↑44 и ↓0+44
Комментарии10

Про Vim " Форматирование

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров3.6K

Что чаще всего нужно программисту от форматирования? Расстановка отступов? Или может быть разбиение списков параметров по вертикали? Следование каким-то конвенциям стиля? А вот и нет. Мне, как программисту, жутко не хватает программы, которая бы расставляла за меня запятые. Ну, или удаляла оттуда там где их быть не должно. На данный момент я так понимаю, можно воспользоваться каким-нибудь онлайн-сервисом или, в лучшем случае, как-то подцепиться к API. Есть на этот счет пара вариантов типа https://text.ru/api-check, https://sinoni.men/ или https://languagetool.org/ru/.

Однако, понятно, это всё ограничено и недешево. Да и это скорее эдакие линтеры, которые могут достаточно хорошо предположить и указать на явные ошибки. Про линтеры отдельный разговор. Вот бы было здорово сделать локальный LSP сервер для русского языка? Как вам идея для стартапа? Я провел достаточно много времени с экспериментами над грамматическим и морфологическим разбором предложений на русском языке. Была даже попытка прикоснуться к лингвистическим корпусам и нейронным сетям. Не могу сказать, что эксперименты закончились чем-то примечательным. Однако могу утверждать, что до определенной степени такую затею вполне можно воплотить даже в одного. Всё зависит лишь от желаемой точности и универсальности продукта. Если, положа руку на сердце, оценить, то как пишут даже вполне грамотные люди, то достичь уровня десятого класса средней школы уже было бы достижением. Если текст состоит не из помеси трех языков, топонимов, имен древнеегипетских богов и сложносочиненных оборотов, коих большинство, то каких-нибудь 90% точности при расстановке запятых и двоеточий хватило бы за глаза.

Читать далее
Всего голосов 6: ↑3 и ↓3+2
Комментарии2
1
23 ...

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность