Pull to refresh
6
0
Кирилл Текорд @tekord

Software Engineering

Send message

Как рисуется карта в Фараоне

Level of difficulty Easy
Reading time 10 min
Views 13K

В свободное время я восстанавливаю старенькую, но довольно известную игру Pharaoh. Это ситибилдер, выпущенный в прошлом веке и разработанный Impressions Games. Технология рендеринга в этой игре была значительным достижением для своего времени и способствовала созданию впечатляющей атмосферы Древнего Египта, которая погружает игрока в проработанное окружение, удивляет вниманием к мелким деталям и передает богатство и разнообразие древнеегипетских пейзажей. В этой статье я опишу алгоритм отрисовки города, зданий, объектов, анимации и формат карты оригинальной игры.

Городу нужно больше рабочих...
Total votes 83: ↑83 and ↓0 +83
Comments 56

Я до последнего буду защищать сильную статическую типизацию

Level of difficulty Medium
Reading time 8 min
Views 24K

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

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

Читать далее
Total votes 77: ↑71 and ↓6 +65
Comments 135

Анатомия Интернета: что в имени тебе моём? (DNS)

Level of difficulty Medium
Reading time 33 min
Views 16K

Всем нам нравится писать в строке бровсера https://habr.com/. Никому не
захотелось бы писать там https://178.248.237.68/. К тому же, IP-адрес может
измениться, если Хабр решит перейти на другой хостинг.

Служба Интернета, которая превращает удобные всем имена в IP-адреса,
называется DNS, Domain Name System, "система доменных имен".

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

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

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

Читать далее
Total votes 32: ↑31 and ↓1 +30
Comments 25

Модели дженериков и метапрограммирования: Go, Rust, Swift, D и другие

Reading time 16 min
Views 28K

В некоторых сферах программирования нормально хотеть написать такую структуру данных или алгоритм, которые могут работать с элементами разных типов. Например, список дженериков или алгоритм сортировки, которому нужна только функция сравнения. В разных языках предложены всевозможные способы решения этой задачи: от простого указания программистам на подходящие общие функции (С, Go) до таких мощных систем дженериков, что они стали полными по Тьюрингу (Rust, C++). В этой статье я расскажу о системах дженериков из разных языков и их реализации. Начну с решения задачи в языках без подобной системы (вроде С), а затем покажу, как постепенное добавление расширений приводит к системам из других языков.
Читать дальше →
Total votes 112: ↑110 and ↓2 +108
Comments 14

Обратный websocket/http туннель данных на .NET + SignalR

Reading time 3 min
Views 4.5K

 

Возникла необходимость организовать трафик к внешнему сервису из сегмента с ограничением на исходящие соединения. Этот внешний сервис использовал одновременно множество tcp/udp сокетов. При беглом обзоре существующих утилит не обнаружил готовое решение инкапсуляции множества сокетов с поддержкой «обратного» соединения.

Читать далее
Total votes 5: ↑5 and ↓0 +5
Comments 6

Всё что нужно знать про ECS

Reading time 30 min
Views 69K

Привет, Хабр! В этой статье я расскажу всё, что знаю про Entity-Component-System и попытаюсь развеять различные предубеждения об этом подходе. Здесь вы найдете много слов о преимуществах и недостатках ECS, об особенностях этого подхода, о том как с ним подружиться, о потенциальных граблях, о полезных практиках, а также в отдельном разделе коротко посмотрим на ECS фреймворки для Unity/C#.

Окунуться в мир ECS
Total votes 38: ↑37 and ↓1 +36
Comments 24

Создание игр для NES на ассемблере 6502: оборудование NES и знакомство с ассемблером

Reading time 14 min
Views 8.1K
image


4. Оборудование NES


Содержание:

  • Консоль
  • Картриджи
  • Как это связано с нашим тестовым проектом?
  • Цвета и палитры
  • Возвращаемся к тестовому проекту

Прежде чем приступать к разбору ассемблера, начнём с обзора самой NES.
Читать дальше →
Total votes 10: ↑10 and ↓0 +10
Comments 3

Антибиткоин: какой должна быть криптовалюта, чтобы на самом деле заменить фиат?

Reading time 13 min
Views 11K


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

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

Эта ситуация уже не устраивает ни государства, всё активнее пытающиеся регулировать криптовалюты, ни самих криптоэнтузиастов, которые хотели с помощью блокчейна изменить мир к лучшему, а не наблюдать, как старый мир кооптирует криптовалюты, обращая их на пользу существующему статусу-кво: делая уже богатых ещё богаче, а банки и другие финансовые институты — ещё влиятельнее.
Читать дальше →
Total votes 34: ↑31 and ↓3 +28
Comments 94

Скандал вокруг Хитмана и будущее DRM-free

Reading time 15 min
Views 43K

На фоне проблем с доступностью социальной сети Facebook и взлома стриминговой платформы Twitch, новость о том, что из сервиса цифровой дистрибуции GOG была удалена Hitman — Game of the Year Edition, прошла незамеченной. А между тем это событие является одной из важнейших побед сообщества геймеров, хотя его значимость оценит далеко не каждый. Ведь, как бы громко это ни прозвучало, именно произошедшее 8 октября 2021 года определило то, как именно мы с вами будем играть в видеоигры на ПК в ближайшие годы.

Что же произошло?
Total votes 117: ↑112 and ↓5 +107
Comments 308

Паттерны дизайна уровней для 2D-игр

Reading time 23 min
Views 35K

Введение


Дизайнеры многих игр при разработке геймплея полагаются на вариативность контента. Повторяющиеся препятствия приводят к тому, что игроку становится скучно, поэтому дизайнеры обычно стремятся создавать постоянно увлекающий игровой процесс. Чаще всего игры состоят из частей: уровней, механик, графики, звуков и т.д. Одной из наиболее важной является дизайн уровней. Он не привносит в игру новое измерение, а занимается выстраиванием существующих элементов. Из-за большой потребности игр в контенте основной задачей гейм-дизайна становится дизайн уровней. Их роль фундаментально важна, в крупномасштабных проектах ими даже занимается отдельный коллектив, не участвующий в создании дизайна игры и механик.
Читать дальше →
Total votes 37: ↑36 and ↓1 +35
Comments 3

Объектно ориентированное программирование на Си без плюсов. Часть 1. Введение

Reading time 5 min
Views 24K

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

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

Статья рассчитана на тех кто уже знаком с Си, а все примеры ориентированы на ОС Linux. Мои познания Windows закончились на «WinXP», после которой в Windows стало уже очень много политики ("безопасности") и коммерческой составляющей, но я сейчас не об этом и надеюсь, что здесь вы найдёте для себя полезные моменты, а если я в чём-то не прав или заблуждаюсь, то поправите.

Итак, я решил попробовать писать в стиле объектно ориентированного программирования (далее ООП) на Си без плюсов. Многие скажут, что писать в стиле объектно ориентированного программирования (далее ООП) не для Си, и разные приёмы написания это - «псевдо-ООП». Но лично я считаю ООП всего лишь абстрактной парадигмой, определяющей стиль написания ПО и не более чем. А Си очень мощный и самодостаточный язык программирования.

Так сложилось, что изучать традиции ООП я начал с Delphi и Java, являющихся, как считается, на 100% объектно ориентированными языками программирования, а потому аналогия решений у меня ассоциируется именно с ними. И далее в тексте я иногда буду на них ссылаться, что надеюсь не испортит суть полного понимания.

Читать далее
Total votes 16: ↑15 and ↓1 +14
Comments 41

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

Reading time 9 min
Views 33K

Представим ситуацию, что ваш вечер начался с фразы:

— Есть закурить?

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

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

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

Читать далее
Total votes 102: ↑99 and ↓3 +96
Comments 42

Камера против эвакуаторов, угонщиков, дачных «гостей»

Reading time 6 min
Views 21K


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

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

Итак, что будет делать камера, которую предлагается собрать бюджетно и не сильно погружаясь в технические аспекты вопроса.

Алгоритм работы следующий. Камера после включения «поднимает соединение» через usb 3G модем, соединяется с VPN, мониторит картинку и, при появлении движения на ней, делает фото и, заодно, отправляет фото в телеграм-канал владельца. Из опций — возможность записывать timelapse, видео и… возможность «покрутить головой» удаленно, то есть поуправлять камерой и посмотреть «что к чему». Нейросетей здесь нет, все достаточно просто.
Читать дальше →
Total votes 19: ↑17 and ↓2 +15
Comments 57

Как Unix-way убивает десктопный Linux

Reading time 28 min
Views 91K

Нет, конечно же, не убивает.
То, что мертво, умереть не может: доля линукса на десктопах колеблется около 2% уже много лет, и не имеет тенденций ни к росту, ни к падению, изменяясь на уровне статистической погрешности.

Как выглядит захват рынка конкурентоспособным продуктом, можно видеть на примере, например, Chrome: за 10 лет рост на 70%. Или Android: за 5 лет рост на 75%. А вот у Linux рост пол-процента в год, несмотря на то, что он, например, лучший из существующих вариантов для использования в качестве национальных/государственных ОС.

Так в чем же дело? Почему несмотря на все старания, Linux, который стал стандартом де-факто на встраиваемых устройствах, работает на подавляющем большинстве серверов, целиком захватил рынок суперкомпьютеров, Linux, над которым работают сотни компаний и десятки тысяч людей... практически не используется на обычных компьютерах и ноутбуках?

Причины этой ситуации, как ни странно, те же, что сыграли роль в популярности Linux на серверах: unix-way, "Философия Unix": "Пишите программы, которые делают что-то одно, и делают это хорошо, и имеют возможность получать и принимать данные через текстовый интерфейс (потому что он универсален)".

Там огромный лонгрид, я предупредил
Total votes 297: ↑253 and ↓44 +209
Comments 1859

Сила композиции

Reading time 20 min
Views 18K


Функциональное программирование может отпугивать сложностью и непрактичностью: «Я далек от всех этих монад, пишу на обычном C#, в докладе про функциональщину ничего не пойму. А если даже напрягусь и пойму, где мне потом это применять?»


Но когда объясняет Скотт Влашин, все совершенно не так: его доклад о композиции с конференции DotNext 2019 Moscow — пример того, как можно доносить функциональные идеи простыми словами. Он за час перешел от бананов к монадам так, что второе кажется немногим сложнее первого. А в конце объяснил, почему осмыслить композицию полезно даже тем, кто не собирается покидать мир ООП. Примеры кода в докладе как на F#, так и на C#.


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

Читать дальше →
Total votes 29: ↑29 and ↓0 +29
Comments 4

Домашний DPI, или как бороться с провайдером его же методами

Reading time 16 min
Views 238K

Долгое время я терпел ограничения РосКомНадзора и соответствующие действия провайдеров по различным ограничениям доступа к сайтам - но с определённого момента устал, и начал думать как бы сделать так, чтобы было и удобно, и быстро, и при этом с минимумом заморочек после настройки... Хочу оговориться, что цель анонимизации не ставилась.

Вообще, эта проблема имеет несколько решений... Но я решил бороться с провайдером их же методом.

...При помощи NGINX!
Total votes 246: ↑245 and ↓1 +244
Comments 187

Модели памяти C++ и CLR

Reading time 16 min
Views 36K

Это расшифровка-перевод доклада Саши Гольдштейна, признанного лучшим на конференции DotNext 2016 Piter. С годами этот доклад стал лишь актуальнее прежнего: появление Mac на ARM-процессорах — еще один пример, почему разработчикам сегодня нужно думать не только о x86-архитектуре.



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


То, что подходит процессорам Intel на архитектурах x86 и x86-64, может не подойти другой архитектуре. Как только вы перенесете свой код на другой процессор, например, на ARM для iPhone и Android, есть вероятность, что он перестанет работать как надо. Проблемы могут быть как очевидными (воспроизводиться с первого-второго раза), так и не очень (возникать только раз в миллион итераций). Вполне вероятно, что такие баги могут добраться до продакшна. Сегодня .NET и, конечно, C++ можно использовать не только на Windows и Intel, но и на других платформах, так что доклад будет полезен многим разработчикам.


Дисклеймер: статья предназначена для продвинутых читателей. Смотрите на свой страх и риск. За частое упоминание барьеров памяти и изменения порядка исполнения инструкций она получила возрастное ограничение 18+.
Читать дальше →
Total votes 72: ↑71 and ↓1 +70
Comments 4

Symfony и Гексагональная архитектура

Reading time 8 min
Views 14K

В данной статье мы коротко пройдемся по теории и на практике разберемся как перевести любое Legacy приложение на гексагональную архитектуру. Повествование будет в контексте фреймворка Symfony и PHP 7.4, но синтаксис приведенных примеров настолько прост что вы без труда поймете как сделать так же на вашем языке программирования (если он поддерживает ООП).


За свою карьеру я работал над многими проектами Symfony, и одна из самых частых проблем, с которыми клиенты звонят в нашу компанию, заключается в том, что их программное обеспечение «заблокировано» старой версией фреймворка или оно стало необслуживаемым, потому что поиск и исправление ошибок обходится слишком дорого.

Читать дальше →
Total votes 6: ↑6 and ↓0 +6
Comments 3

Information

Rating
Does not participate
Registered
Activity