Pull to refresh
249
0
Денис Ольшин @deNULL

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

Send message

Воссоздаем Minecraft-подобную генерацию мира на Python

Reading time11 min
Views27K

Minecraft, самая продаваемая игра в мире, наиболее известная своими пикселизированными блоками и бесконечными мирами, содержит потрясающий процедурный генератор ландшафта — с пещерами, водоёмами, и даже различными биомами.

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

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

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

Прим. переводчика. Осторожно, в статье много иллюстраций (в том числе анимированных)

Читать далее
Total votes 57: ↑57 and ↓0+57
Comments13

Что же не так с любыми электронными голосованиями?

Reading time7 min
Views45K

Данная публикация написана по мотивам поста «Что же не так с ДЭГ в Москве?». Его автор описывает, как можно выгрузить и расшифровать данные по электронному голосованию, а также приводит целый список замечаний к его текущей системе.

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

UPD: Добавил также графики по партийным спискам + отметил некоторые странности в соотношении выданных/полученных транзакций в самом начале (возможно, это объяснимо техническими проблемами).

Читать далее
Total votes 155: ↑148 and ↓7+183
Comments422

Botsman: новая платформа для разработки Telegram-ботов

Reading time10 min
Views17K

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

Для тех же, кому уже захотелось ознакомиться с Botsman (но не очень хочется много читать) — вот ссылка, милости прошу: https://bots.mn/. Главное, о чём стоит помнить — платформа только-только запустилась, и (пока что) не стоит переносить на неё что-то серьёзное и масштабное.

Читать далее
Total votes 35: ↑35 and ↓0+35
Comments13

Ещё один велосипед: храним юникодные строки на 30-60% компактнее, чем UTF-8

Reading time15 min
Views14K


Если вы разработчик и перед вами стоит задача выбора кодировки, то почти всегда правильным решением будет Юникод. Конкретный способ представления зависит от контекста, но чаще всего тут тоже есть универсальный ответ — UTF-8. Он хорош тем, что позволяет использовать все символы Юникода, не тратя слишком много байт в большинстве случаев. Правда, для языков, использующих не только латиницу, «не слишком много» — это как минимум два байта на символ. Можно ли лучше, не возвращаясь к доисторическим кодировкам, ограничивающим нас всего 256 доступными символами?

Ниже предлагаю ознакомиться с моей попыткой дать ответ на этот вопрос и реализацию относительно простого алгоритма, позволяющего хранить строчки на большинстве языков мира, не добавляя той избыточности, которая есть в UTF-8.
Читать дальше →
Total votes 69: ↑67 and ↓2+88
Comments85

Тестовый клиент TON (Telegram Open Network) и новый язык Fift для смарт-контрактов

Reading time12 min
Views60K

Больше года назад стало известно о планах мессенджера Telegram выпустить собственную децентрализованную сеть Telegram Open Network. Тогда стал доступен объемный технический документ, который, предположительно, был написан Николаем Дуровым и описывал структуру будущей сети. Для тех, кто пропустил — рекомендую ознакомиться с моим пересказом этого документа (часть 1, часть 2; третья часть, увы, всё ещё пылится в черновиках).


С тех пор никаких значимых новостей о статусе разработки TON не было, пока пару дней назад (в одном из неофициальных каналов) не появилась ссылка на страницу https://test.ton.org/download.html, где размещены:


ton-test-liteclient-full.tar.xz — исходники лёгкого клиента для тестовой сети TON;
ton-lite-client-test1.config.json — конфигурационный файл для подключения к тестовой сети;
README — информация о сборке и запуске клиента;
HOWTO — пошаговая инструкция о создании смарт-контракта с помощью клиента;
ton.pdf — обновлённый документ (от 2 марта 2019 г.) с техническим обзором сети TON;
tvm.pdf — техническое описание TVM (TON Virtual Machine, виртуальной машины TON);
tblkch.pdf — техническое описание блокчейна TON;
fiftbase.pdf — описание нового языка Fift, предназначенного для создания смарт-контрактов в TON.


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

Разберёмся, как это сделать
Total votes 100: ↑94 and ↓6+88
Comments100

TON: Telegram Open Network. Часть 2: Блокчейны, шардирование

Reading time7 min
Views33K

TON


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


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


Сегодня посмотрим на основной компонент TON — блокчейн.

Читать дальше →
Total votes 46: ↑43 and ↓3+40
Comments14

TON: Telegram Open Network. Часть 1: Вступление, сетевой уровень, ADNL, DHT, оверлейные сети

Reading time9 min
Views106K

TON: Telegram Open Network


Уже две недели Рунет шумит про Telegram и ситуацию с его бессмысленной и беспощадной блокировкой Роскомнадзором. Рикошетом задело многих, но всё это — темы для постов на Geektimes. Меня же удивило другое — я до сих пор не видел на Хабре ни одного разбора запланированной к выходу на базе Telegram сети TON — Telegram Open Network. Мне захотелось восполнить этот недостаток, ибо поизучать там есть что — даже несмотря на отсутствие официальных заявлений о нём.


Напомню — ходят слухи о том, что Telegram запустил очень масштабное закрытое ICO, уже собрав в нём невероятные суммы. Предполагается, что уже в этом году будет запущена собственная криптовалюта Gram — и у каждого пользователя Телеграма автоматически появится кошелёк, что само по себе создает немалое преимущество перед остальными криптовалютами.


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


Что же говорится в этом документе? Я попробую пересказать его своими словами, близко к тексту, но по-русски и чуть более человечно (да простит меня Николай со своей склонностью уходить в формальную математику). Имейте в виду, что даже в случае его подлинности, это черновое описание системы и оно, весьма вероятно, изменится к моменту публичного запуска.

Итак, приступим
Total votes 84: ↑83 and ↓1+82
Comments129

Az.js: JavaScript-библиотека для обработки текстов на русском языке

Reading time8 min
Views28K
Как чуден и глубок русский курлык
Генератор постов

Обработка естественного языка (natural language processing, NLP) — тема, на мой взгляд, очень интересная. Во-первых, задачи тут чисто алгоритмические: на вход принимаем совершенно примитивный объект, строчку, а извлечь пытаемся вложенный в него смысл (ну или хотя бы частичку смысла). Во-вторых, необязательно быть профессиональным лингвистом, чтобы решать эти задачи: достаточно знать родной язык на более-менее приличном уровне и любить его.

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

Бессвязность текстов в нынешней версии «Генератора» вызвана тем, что на самом деле никакого анализа он производить не умеет. Просто в одних случаях «предсказывает» продолжение предложения по собранным биграммам, а в других — заменяет в готовом предложении некоторые слова на другие, которые заканчиваются похоже. Вот и вся начинка.

Конечно, хочется сделать что-нибудь поинтереснее. Беда в том, что модные сейчас нейросети не очень-то применимы здесь: им нужно много ресурсов, большую обучающую выборку, а в браузере у пользователя соцсети всего этого нет. Поэтому я решил изучить вопрос работы с текстами с помощью алгоритмов. К сожалению, готовых инструментов для работы с русским языком на JavaScript найти не удалось, и я решил сделать свой маленький велосипед.
Читать дальше →
Total votes 54: ↑54 and ↓0+54
Comments30

Создание канала с автопостингом в Телеграме без единой строчки кода

Reading time4 min
Views166K

Вступление


Предупреждаю сразу: технического в статье очень мало. Это практически пошаговая инструкция для не очень сведующих в техническом плане пользователей. Для людей сведущих (и тех, кому лень читать много текста), приведу две ссылки: Telegram Bots API + IFTTT Maker Channel.

Теперь подробнее. Думаю, все слышали про мессенджер Telegram. Вероятно, многие даже знают про нехитрый API для создания ботов в этом мессенджере. Кроме того, не так давно в T появилась возможность создавать так называемые «каналы» (channels), упрощающие мгновенную рассылку сообщений практически любому количеству подписавшихся на канал лиц. Наконец, самая свежая новость: ботов стало можно добавлять в качестве администраторов в каналы, то есть такие рассылки стало можно делать автоматизированно.

Думаю, не надо объяснять, что это открывает довольно широкие возможности для различных сервисов. Например, у меня довольно быстро получилось сделать следующее:
  • три канала (@RedditTop, @r_pics, @gone_wild — осторожно, последний с «взрослым» контентом), которые ежечасно импортируют топовые посты с Реддита (и двух его сабреддитов);
  • ещё канал, делающий то же с постами с 9GAG;
  • и, наконец, завел хитрого бота @JamesBot, который анонимно пересылает все сообщения, написанные ему, в общий канал (@secret_ru, @secret_en, @secret_es, @secret_ar или @secret_fa — в зависимости от языка). Получился анонимный чат средней степени трэшовости.

Уже после создания всех этих ботов и каналов мне пришло в голову, что простейший автоимпорт постов откуда-то «снаружи» можно наладить вообще без всякого кода и хостинга — буквально минут за 5. На помощь нам придет прекрасный сервис IFTTT — If This Then That, имеющий множество интеграций с социальными сетями и прочими сервисами. Правда, к сожалению, прямой интеграции с Телеграмом у него (пока?) нет — зато есть т.н. IFTTT Maker Channel, позволяющий делать простые HTTP(S)-запросы при срабатывании триггера. К сожалению, мы не сможем принимать сообщения, отправленные боту (входящие запросы IFTTT Maker принимать может, но, увы, только в строго определенном формате) — интерактива не выйдет. Зато сможем по срабатывании любого события (например, новый твит или пост в FB):
  • публиковать сообщение в канале,
  • отправлять сообщение в заранее выбранный чат (куда добавлен наш бот),
  • отправлять сообщение заранее указанному пользователю (который добавил себе бота).
Читать дальше →
Total votes 29: ↑25 and ↓4+21
Comments16

О тонкостях приватности в Telegram Bots API: «это не баг, это фича»

Reading time2 min
Views51K
imageНеделю назад в мессенджере Telegram был запущен Bots API — платформа для создания ботов. Платформа пусть немного сыроватая, слегка костыльная, но тем не менее интересная — как для пользователей, так и для разработчиков, которые тут же ринулись писать (и портировать) разнообразных ботов. Но, как оказалось, в API есть как минимум одна особенность, которая может показаться довольно неожиданной (и даже неприятной) для конечных пользователей.

Сразу оговорюсь: данная заметка не является очередным нападком на защищенность Телеграма. Более того, учитывая дружеские отношения с некоторыми из разработчиков мессенджера, писать статью не особенно хотелось. Но предостеречь тех, кто планирует создавать и, главное, пользоваться ботами в Telegram, мне показалось важным. «Платон мне друг, но истина дороже».

Сначала вкратце для рядовых пользователей. Если вы отправляете какому-то боту в Телеграме фотографию (рассчитывая, что бот потом эту фотографию отправит другому человеку), — помните, что конечный получатель фото (при желании) легко сможет узнать ваше имя/фото/юзернейм (и сможет связаться с вами напрямую). Даже если бот предполагает приватность и анонимность. Этот интересный аспект крайне неочевиден даже для самих создателей ботов. И они (пока что!) ничего не могут с этим сделать. Строго говоря, это касается не только фотографий (а почти всех видов прикреплений), но увидеть ваш профиль в других случаях несколько сложнее.

В том числе этому подвержен приведенный в качестве примера в описании новой платформы @HotOrBot. В этом «аналоге Тиндера» можно легко подсматривать аккаунты тех, чьи фото вам предлагают оценить (и, собственно, писать им — даже если они ещё не ответили вам взаимностью).
Читать дальше →
Total votes 23: ↑20 and ↓3+17
Comments4

Язык Вольфрам и пакет Mathematica доступны бесплатно для Raspberry Pi

Reading time2 min
Views29K
Прошло всего три дня с анонса масштабного проекта от Стивена Вольфрама, о котором уже писали на хабре, как стало известно о том, что новый язык Wolfram (Wolfram Language) можно опробовать на практике: он доступен для платформы Raspberry Pi вместе с математическим пакетом Mathematica уже сегодня — причем совершенно бесплатно. Подписавшиеся на получение новостей о языке Wolfram получили рассылку с новостью об этом. Ниже приведен её перевод (статья написана от имени разработчиков Raspberry Pi).


Рисование трехмерных графиков в пакете Mathematica на Raspberry Pi

Читать дальше →
Total votes 57: ↑57 and ↓0+57
Comments37

Тетрис для DCPU-16

Reading time7 min
Views6.6K
Как уже писали на Хабре, разработчик широко известного в узких кругах MinecraftМаркус «Notch» Перссон в данный момент занят разработкой новой игры, действие которой будет происходить в космосе в 281 474 976 712 644 году.

Как и Майнкрафт, игра будет нестандартной: главная «фишка» — полностью эмулируемый процессор, под управлением которого космические корабли и будут бороздить просторы Большого… э, Вселенной. Поскольку персонажи игры в год 0x10C (игра, собственно, так и называется) попали прямиком из 1980 года, то и процессор DCPU-16 по своим характеристикам примерно соответствует той эпохе: 128 килобайт оперативной памяти, 100 килогерц, нехитрый набор команд.

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

(и сразу дисклеймер: музыка в ролике наложена отдельно для художественной, так сказать, выразительности; DCPU пока выводить звук, увы, не позволяет)

Читать дальше →
Total votes 69: ↑59 and ↓10+49
Comments43

И снова Diamond Dash

Reading time5 min
Views8.6K
16 миллионовКак только я прочитал в недавней статье о написании бота для игры Diamond Dash в Google+, чуть-чуть не дотянувшего до 2 миллионов очков, у меня сразу зачесались руки написать аналогичного бота, который достиг бы этой цели — и, после нескольких дней экспериментов, этот результат действительно был достигнут.

Впрочем, теперь этого было уже мало — с применением другого подхода, на тот момент мой подвиг уже был опережен и даже переплюнут (финальный результат, судя по статье, приближается к 4 миллионам очков). Поэтому я решил сделать ещё один очевидный шаг — попробовать просто подменить запрос к серверу с результатом игры. Как можно видеть по скриншоту, попытка завершилась более чем удачно.
Читать дальше →
Total votes 106: ↑94 and ↓12+82
Comments47

Алгоритм «diamond-square» для построения фрактальных ландшафтов

Reading time12 min
Views118K
Карта игры Minecraft, созданная с помощью приложения CartographДумаю, многие знакомы с весьма необычной игрой Minecraft (справа — пример сгенерированной в ней карты), в которой игрок находится на (практически) бесконечной поверхности Земли и может исследовать окружающий мир с минимальными ограничениями.

Как же автору игры, Notch'у, удалось добиться подобного сходства его случайных «миров» с земными просторами? В этом топике я как раз и рассмотрю один из способов построить искусственный ландшафт такого рода (и вскользь упомяну пару других способов), а также расскажу о моем небольшом усовершенствовании этого алгоритма, позволяющем значительно увеличивать размеры ландшафта без заметных потерь в производительности.

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

Читать дальше →
Total votes 148: ↑147 and ↓1+146
Comments58

Information

Rating
Does not participate
Location
Саратов, Саратовская обл., Россия
Registered
Activity