Pull to refresh
3
0.7
Send message

Ну и для чего типичному программисту мышцы?

Reading time6 min
Views39K

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

Читать далее

Процесс моделирования данных при разработке приложений

Reading time10 min
Views10K

Привет!

Меня зовут Коля, и я системный аналитик.

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

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

Читать далее

Как происходит генерация мира Minecraft

Reading time21 min
Views69K
image

Задумывались ли вы когда-нибудь, сколько на нашей планете песчинок? По грубым оценкам, более 7 квинтиллионов! Это 7 с 18 нулями. И всё-таки это даже меньше половины количества уникальных миров в Minecraft. Как же Minecraft и другим похожим играм удаётся создавать такие сложные, красивые, однако полностью процедурные миры? В этой статье я расскажу, как игра генерирует свои миры, от самой высокой горы до самой глубокой пещеры.

Часть 1: процедурная генерация


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

Однако первой игрой с процедурно сгенерированным миром является «Elite», первая версия которой вышла для компьютера BBC Micro в 1984 году. Это прапрадед относительно новой «Elite: Dangerous», выпущенной в 2014 году.


Автоматическая генерация новых миров может казаться привлекательным способом ленивого создания бесконечного контента для игры. Однако на самом деле всё наоборот! Чтобы научить машину тому, как выглядит хороший уровень… нужно быть очень хорошим программистом и дизайнером уровней.

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

Коллоквиум по программированию микроконтроллеров

Level of difficultyHard
Reading time14 min
Views18K

Это список вопросов на которые должен уметь ответить тот кто хочет программировать микроконтроллеры и заниматься разработкой электроники. Вопросы в частности взяты из технических собеседований при устройстве на работу в разные компании. Постарался отобрать только самые приближенные к практике вопросы, которые можно выделить после 11 лет insider(ского) опыта.

Если вы знаете адекватные, сложные и интересные вопросы по теме разработки на MCU, то пишите их в комментариях.

Читать далее

Ложная философия Матрицы

Reading time7 min
Views61K

▍ Матрица и девяностые


90-е годы прошлого века, в культурном плане — стали подходящим завершением для всего столетия. Авторы говорили на темы технологического будущего более уверенно, превознося или ругая прогресс, идя нога в ногу с научным позитивизмом или же отрицая технологии, пускались в метафизические и эзотерические учения. Если присмотреться, то многие произведения той эпохи имеют мрачный, грязный тон. В музыке — Massive Attack и Nirvana пели о зависимостях и трудности жизни в бедности, в книгах Чак Паланник и Девид Фостер Уоллес — писали о потере личности в мире, состоящем из рекламы и развлечений. А в кинематографе доминировали мрачные боевики и фильмы ужасов, для которых тема технологий стала основной.
Читать дальше →

Динамическая генерация пользователей в Linux. Разбираемся с NSS

Reading time7 min
Views7.3K

Как известно, пользователи и группы в Linux определяются по целочисленному идентификатору, который используется при описании владельца и группы файла, а также для создания контекста текущего пользователя после авторизации. Но как это работает внутри? И можно ли создать свою реализацию для взаимного преобразования имен и идентификаторов и для аутентификации пользователей? В этой статье мы детально рассмотрим анатомию подсистем NSS (Name Service Switch) и создадим свою простую реализацию подсистем для использования с текстовым файлом со списком пользователей и паролей. Во второй части статьи мы поговорим о PAM и обсудим возможные способы ее реализации и применения.

Читать далее

Соглашения о вызовах

Reading time3 min
Views22K

Это стандартизированные методы реализации и вызова функций.

Соглашение о вызовах опредяют как функция вызывается, как функция управляет стеком и стековым кадром, как аргументы передаются в функцию, как функция возвращает значения.

Читать далее

Алгоритм ECDSA

Reading time5 min
Views19K

Алгоритм ECDSA (Elliptic Curve Digital Signature Algorithm) — это реализация схемы цифровой подписи, основанная на использовании эллиптических кривых и модульной арифметики.

Мы оставим подробный разбор всех тонкостей этого алгоритма и соответствующей математической теории для будущих статей. Здесь же просто покажем основные идеи, за счет которых в ECDSA реализуются алгоритмы KeyGen, Sig и Ver.

Модульную арифметику пока полностью оставим в стороне. Эта тема несложная, но требует подробного рассмотрения. Поговорим сейчас только об эллиптических кривых — для начала нам этого будет достаточно.

Эллиптическая кривая в ECDSA — это линия на плоскости, задаваемая уравнением y²=x³+a∙x+b, где a и b — такие числа, что 4∙a³+27∙b²≠0. Например, Bitcoin и Ethereum используют кривую y²=x³+7 (рис. 1).

Читать далее

Аудит входа в Linux через Slack. Разбираемся с PAM

Reading time11 min
Views7K

Библиотеки PAM (Pluggable Authentication Module) используются для добавления сложного сценария проверки учетных данных и выполнения дополнительных действий при аутентификации пользователя и доступе к службам. В этой статье мы разберемся с внутренней архитектурой PAM, особенностями конфигурации и сделаем простой модуль для отправки уведомлений в Slack при входе пользователя в систему.

Читать далее

Межмодульный анализ C и C++ проектов в деталях. Часть 1

Reading time12 min
Views4K

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

Читать далее

Ультра скорость для C# кода, запуск .NET на FPGA процессоре с HASTLAYER

Reading time15 min
Views6.5K
Hastlayer .NET for FPGA

У многих FPGA или ПЛИС, ассоциируется с низкоуровневым программированием на языках VHDL, Verilog, или OpenCL. Платформа .NET уже давно захватила нишу микроконтроллеров, проект nanoFramework. Последние новости развития nanoFramework только доказывают твердость намерений платформы .NET освоить работу и на «железе». Казалось бы, пал последний бастион, где не было платформы .NET. Но это был далеко не последний рубеж. Как вам возможность писать код на C#, вместо хардкорного VHDL или Verilog, с последующей загрузки .NET сборок на FPGA процессоры Xilinx для непосредственного исполнения? Открытый проект Hastlayer преобразует сборки .NET в низкоуровневый код для FPGA процессоров, обеспечивая максимальный параллелизм и низкое энергопотребление.
Читать дальше →

Проблема с N+1 запросами в JPA и Hibernate

Reading time7 min
Views139K

В этой статье я расскажу, в чем состоит проблема N + 1 запросов при использовании JPA и Hibernate, и как ее лучше всего исправить. 

Проблема N + 1 не специфична для JPA и Hibernate, с ней вы можете столкнуться и при использовании других технологий доступа к данным.

Читать далее

Простым языком о языковых моделях и цепи Маркова (Markov Chain)

Reading time3 min
Views16K

N-граммы 

N-граммы – это статистические модели, которые предсказывают следующее слово после N-1 слов на основе вероятности их сочетания. Например, сочетание I want to в английском языке имеет высокую вероятностью, а want I to – низкую. Говоря простым языком, N-грамма – это последовательность n слов. Например, биграммы – это последовательности из двух слов (I want, want to, to, go, go to, to the…), триграммы – последовательности из трех слов (I want to, want to go, to go to…) и так далее.

Такие распределения вероятностей имеют широкое применение в машинном переводе, автоматической проверке орфографии, распознавании речи и умном вводе. Например, при распознавании речи, по сравнению с фразой eyes awe of an, последовательность I saw a van будет иметь большую вероятность. Во всех этих случаях мы подсчитываем вероятность следующего слова или последовательности слов. Такие подсчеты  называются языковыми моделями.

Как же рассчитать P(w)? Например, вероятность предложения P(I, found, two, pounds, in, the, library). Для этого нам понадобится цепное правило, которое определяется так:

Читать далее

Снижение тепловыделения ноутбука в 2022 году

Reading time10 min
Views63K

Однажды я купил ноутбук Dell, да не простой, а XPS, о котором мечтал давным-давно, и хотя это была не компактная 13”-14” модель, а 15”, это не помешало ему стать моей верной рабочей лошадкой. Спустя некоторое время ноутбук начал греться и шуметь вентиляторами, в том числе во время простоя. В какой-то момент он просто начал жарить мои штаны.

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

Штаны Well Done

Разделяй и властвуй. Изоляция процессов в Linux

Reading time13 min
Views16K

Последнее десятилетие проходило под знаком контейнеризации, появлялись десятки и сотни инструментов для управления контейнерами, создания виртуальных сетей для взаимодействия контейнеров на разных узлах кластера, появлялись системы маршрутизации трафика, мониторинга доступности и иные DevOps-инструменты, которые во многом трансформировали деятельность системных администраторов вплоть до того, что начали появляться сомнения в потребности организаций в администраторах Linux (особенно с учетом появления облачных провайдеров, предоставляющих как среды для запуска контейнеров в Kubernetes, так и полностью настроенные и управляемые сервисы баз данных, очередей, систем для накопления и анализа логов и т.п.). Но нередко возникают ситуации, когда нужно осуществить некоторый уровень изоляции или ограничения уже запущенных процессов и для этого можно использовать возможности control groups ядра Linux, которые также лежат в основе технологий контейнеризации Docker и LXC. В этой статье мы последовательно разберем возможности cgroups, обсудим отличия новой cgroups v2 и затронем тему контейнеризации на основе Linux Containers. Да пребудет с вами безопасное окружение выполнения.

Читать далее

C++ разведка кросс-компиляции Linux->Windows

Reading time19 min
Views6K

Эта история началась когда удобный для меня инструмент VSCode из за одного плагина на борту стал не совсем удобен. А именно, «natizyskunk.sftp» плагин, который позволяет подключится по протоколу (S)FTP к серверу, и вносить изменения на сервер, просто сохранив файл. Всё нечего, если бы настройки подключения к серверам не хранились в корне отдельно взятого проекта. Когда у тебя с десяток проектов, ещё можно потерпеть, но более 70 проектов и они все на разных серверах, то перенос и добавление в каждый из проектов актуальной настройки, например пароль, который периодически меняется, заставляет как минимум раздражённо искать подходящую настройку и с комбинацией клавиш Ctrl+C, Ctrl+V, менять устаревшие настройки или добавлять новые. В дальнейшем оказалось, что коллеги пользуются другими идентичными плагинами с названиями «liximomo.sftp», «doujinya.sftp-revived».

Читать далее

Так все же, насколько быстры каналы в Linux?

Reading time26 min
Views23K

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

Читать далее

Что такое майнинг и стейкинг простыми словами. Какую математическую задачу решают майнеры?

Reading time8 min
Views66K

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

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

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

Читать далее

Как незаметно запускать виртуальный Linux на QEMU

Reading time10 min
Views19K

О том, как замаскировать QEMU с Linux под приложение на Windows.

В некоторых задачах Linux просто необходим. И самым ярким тому примером на сегодня является наличие системы WSL. Однако не везде ею можно пользоваться. Некоторые предприятия принципиально застревают на Win7. И их можно понять. Эта система не столь требовательна к железу (особенно к видео-подсистеме), не ломится чуть-что в интернет, да и в Ultimate варианте вообще не требует подключения к глобальной сети.

В большей части случаев можно обойтись родными для системы средствами разработки и сторонними инструментами. Но представьте себе, что для работы Вашего комплекса нужно собрать вместе более десятка не маленьких opensource проектов с перекрёстными зависимостями. Причём часть из них написана под python (и тут никаких проблем нет - виртуальная среда и всё ок), а часть собирается в бинарные исполняшки, от которых зависят другие модули. И тут может быть как минимум три решения.

Читать далее

Интерактивный учебник для подготовки к алгоритмической секции собеседования

Reading time2 min
Views7.7K

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

Итак, вот сама задача

Information

Rating
2,904-th
Registered
Activity