Search
Write a publication
Pull to refresh
52
0
Андрей Кравчук @prefrontalCortex

Software Engineer

Send message

Zip – как не нужно создавать формат файлов

Reading time13 min
Views42K

Zip появился 32 года назад. Можно подумать, что настолько зрелый формат должен быть отлично задокументирован. К сожалению, нет. Что же конкретно в нем не так, и каким образом его можно было бы оптимизировать? Подробно рассмотрим эти вопросы, опираясь на исходную документацию.

Почему твоя мама всё ещё не прогает?

Reading time11 min
Views126K

Случай с бомжом

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

Обычно вместо денег я даю попрошайкам-мужчинам телефон отдела кадров одной курьерской компании, которая постоянно нуждается в сотрудниках. Но у него не было ног… Тогда я подумал: «Чувак, у тебя полным полно времени. Работа за компом — лучшее, что может случиться в твоей жизни. Купон со скидкой на курс по PHP — вот, что должны были положить тебе на койку туда, где раньше были ноги, когда ты очнулся после ампутации».

Я решил предложить ему изучить программирование. В его положении он должен был быть чертовски мотивирован. Но получится ли у него?

Читать далее

Айтишный дауншифтинг, стремление к минимализму и простоте

Reading time9 min
Views37K
Astrobotany

Современные IT чрезвычайно сложные, если не сказать переусложнённые, по своему устройству. Особенно это касается web. Фреймворки, grpc, Python/Go/JS/TS/Web Assembly etc, HTML5, CSS, Docker, Kubernetes и далее в бесконечность. Плюс современные методологии разработки ПО, типа Agile и иже с ними, заставляют выкатывать продукты в прод как можно быстрее, да ещё и так чтобы продукт понравился пользователю (то есть это наличие всяческих bells & whistles, чтобы заманить пользователя и прочих «плюшек» которые красиво выглядят, но жрут ресурсы как не в себя). Большинство плюёт на оптимизацию и вполне нормальным считается когда веб страничка весит мегабайты. А браузеры, которые должны всё это отображать, являются самыми тяжёлыми приложениями в ОС.

Всё вышеописанное может быть не так заметно, точнее не так осознаваемо людьми далёкими от айти, но, как ни странно, это начало раздражать самих айтишников. Программистов, админов, девопсов, да и просто людей, для которых компьютеры, электроника это хобби. И в результате, особенно в последнее время, стали происходить странные, на первый взгляд, вещи. Айтишники начали уходить в «андеграунд». По крайней мере в своих личных проектах. Как?
Сейчас посмотрим...

Волк, предпочитающий самоубийство съедению овцы

Reading time5 min
Views31K
image

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

Младший участник команды начал преподавать. В марте 2021 года он рассказал в переписке одному своему студенту о результатах эксперимента. Студента так развеселила эта история, что он сделал скриншот текста и разослал его своим друзьям.

Эти скриншоты стали виральными в китайских соцсетях и породили небольшую сенсацию.

Лучше смерть от камня, чем поимка овцы


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

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

Если волк ловил овцу, то он получал 10 очков. Если он сталкивался с камнем, то вычиталось 1 очко. Чтобы волки имели стимул ловить овец как можно быстрее, за каждую прошедшую секунду у волков отнималось 0,1 очка.

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

Цель проекта заключалась в том, чтобы проверить, смогут ли ИИ-волки путём обучения и переобучения найти способ максимизировать количество получаемых очков.

Спустя 200 000 итераций исследователи обнаружили, что чаще всего волки просто ударялись о камни, чтобы совершить самоубийство.
Читать дальше →

Сикорский, человек и вертолет

Reading time11 min
Views17K
image

Игорь Иванович Сикорский во второй своей – «американской» – жизни полюбил альпинизм. Особенно полюбил он восхождения на вулканы.

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

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

Почему я всё ещё люблю C, но при этом терпеть не могу C++?

Reading time10 min
Views54K
Мне на удивление часто приходится говорить о том, почему мне всё ещё нравится язык C, и о том, почему я плохо отношусь к C++. Поэтому я решил, что мне стоит об этом написать, а не снова и снова повторять одно и то же.



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

Дай таблетку, программист. Как в прошлый раз

Reading time4 min
Views20K

Не судите строго, но я в выходные, совершенно случайно, посмотрел телевизор. Канал «Россия 1». Всего несколько минут. Наткнулся на доктора Мясникова, который поздравлял своих коллег с днём медицинского работника (кстати, присоединяюсь к поздравлениям!).

Доктор Мясников не просто поздравил, а напомнил один из ключевых принципов работы врача: уметь сказать пациенту «нет», когда тот что-то просит или предлагает. Очень просто сказать «да», когда человек просит МРТ, операцию или таблетку. Выглядеть при этом «клиентоориентированным», ещё и денег, возможно, больше заработать.

Но настоящий врач не может идти на поводу у пациента. А вот программист – вполне себе.

Читать далее

На пути к Матрице: как происходит исследования в области построения симуляций и искуственной жизни

Reading time10 min
Views4.4K

О проекте


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

Узнайте о целях проекта и о том, как начать.



Функции

  • Реалистичные физические расчеты кинематических и термодинамических процессов повреждаемых и склеиваемых твердых тел
  • Программируемый материал для моделирования цифровых организмов и эволюции
  • Встроенный графический редактор для проектирования собственных машин
  • Моделирование и рендеринг на GPU
  • Программное обеспечение с открытым исходным кодом и доступно под GNU General Public License, Version 3 (GPLv3).

Под катом два примера («Самопроверяющиеся репликаторы» и «Репликация на основе информации») применения данного программного комплекса.

Что читать на английском языке чтобы не умереть от скуки

Reading time9 min
Views51K

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

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

Читать далее

Гексагональные тайловые миры

Level of difficultyHard
Reading time32 min
Views39K

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

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

Читать далее

Эффективность — ваш враг

Reading time8 min
Views74K

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

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

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

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

SOHO UPS в маленьком корпусе и своими руками. Менее чем за 1500 руб

Reading time6 min
Views65K

Хотите обеспечить бесперебойное питание своим устройствам, но при этом не сильно потратиться? Именно такой своей разработкой я и хотел с вами поделиться.

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

А что если сделать такой источник бесперебойного питания, который можно поставить прямо рядом с защищаемым устройством – лёгкое, компактное, недорогое?
Читать дальше →

Прямоугольные тайловые миры

Level of difficultyMedium
Reading time17 min
Views28K

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

Огромное множество игр на самом деле содержат тайлы - так просто проще представлять игровой мир. Такая упорядоченность помогает геймдизайнерам строить игровые механики, упрощает жизнь художников и делает код программистов понятнее. Самих видов тайлов тоже огромное количество - сегодня поговорим о прямоугольных и изометрических.

Читать далее

Как прорешать SICP: Отчёт о создании решебника для самого известного в мире задачника по программированию. Ботаны есть?

Reading time45 min
Views18K

(Хабр-Статья представляет собой авторский перевод доклада, представленного автором на Scheme Workshop 2020, проводившегося в рамках Международной Конференции по Функциональному Программированию, 28 августа 2020 года)

Эта статья -- своего рода "отчёт" по самому большому проекту, который я сделал в своей жизни по собственной инициативе. Я сделал полное, исчерпывающее решение всех задач из одной из самых извесных книг по программированию в мире "Структура и Интерпретация Компьютерных Программ" (Structure and Interpretation of Computer Programs -- SICP), за авторством Абельсона, Сассмана и Сассман.

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

Читать далее

Программирование — это скучная магия

Reading time4 min
Views42K

Есть один карточный трюк, который запомнился мне навсегда. Вот его краткое описание: доброволец выбирает карту и запечатывает её в конверт. Затем фокусник предлагает добровольцу выбрать чай. У него есть десятки коробок чая, и все они упакованы в пластик. Доброволец выбирает одну из коробок, срывает обёртку и выбирает один из упакованных пакетиков с чаем. Потом он вскрывает упаковку, и… внутри оказывается его карта.

Если вы не хотите знать, в чём хитрость этого трюка, то дальше не читайте.

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

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

«Фокусом» это является именно потому, что такая подготовка выглядит настолько скучной, настолько невозможно монотонной, что когда мы видим трюк, то не можем представить, что кто-то проделал бы столь скучную работу, чтобы добиться такого простого эффекта.
Читать дальше →

Бесплатные сервисы для разработчиков — огромный список

Reading time8 min
Views60K

Бесплатное хранилище артефактов PackageCloud

Удивительно, но в интернете сотни сервисов, которыми разработчик может пользоваться совершенно бесплатно. «Бесконечное» время (пока компания не обанкротится или не изменит условия), без рекламы, пробного периода и других подводных камней.

Недавно мы обсуждали эту тему в статье «Боль разработчика: “Никогда не давайте пользователям бесплатный тариф”». Речь шла о том, что на самом деле бесплатный план вовсе не бесплатен — приходится тратить массу времени и усилий на поддержку этих тарифов.

Но для некоторых бесплатный тариф — единственный способ завлечь новых клиентов. Это просто замечательно с точки зрения самих пользователей. Ведь перед нами десятки бесплатных хостингов, API, CMS, CDN, сервисов обработки данных, поисковых движков, репозиториев, инструментов проверки кода и других. Бесплатный тариф идеален для опенсорс-разработчиков, любительских и некоммерческих проектов, маленьких стартапов. Ни за что не надо платить.
Читать дальше →

Как построить свою систему поиска похожих изображений

Reading time10 min
Views31K

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

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

Читать далее

Изнанка войны. Средневековые (и не только) ранения

Reading time12 min
Views129K

Автор: Azirsan

Мы обычно смотрим на древние сражения сверху – правый фланг атакует левый, в центре король возглавляет строй… Красивые прямоугольники на картинке, где стрелочками показано, кто и где на кого напал. Но что творилось непосредственно в месте столкновения солдат? В рамках этой популярной статьи хочу рассказать про ранения и те способы, которыми они наносились. Тема эта мало популярная в отечественной историографии, как, в общем-то, и другие вопросы, рассматривающие «лицо войны».

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

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

Читать далее

Использование быстрых клавиш в командной строке Linux (BASH)

Reading time14 min
Views105K

Эта статья посвящена наиболее часто используемым комбинациям клавиш при работе в командной строке Linux (в основном в командном интерпретаторе bash).

Она точно будет полезна начинающим своё знакомство с Linux и, уверен, пригодится тем, кто уже имеет опыт (не всегда годы практики учат работать быстрее).

Никогда не развивал навыка быстрой печати, но знание не одного десятка hotkey'ев, перечисленных в этом материале, позволяет набирать команды со скоростью мысли.

Я попытался продемонстрировать многие примеры при помощи анимированных gif'ок – иногда несколько кадров больше скажут, чем несколько абзацев текста.

Читать далее

Как всего одна игровая механика навсегда изменила Diablo

Reading time8 min
Views39K

«Игра всегда называлась именно так», — вспоминает Дэвид Бревик, ведущий программист оригинальной Diablo 1997 года. — «Diablo — это название горы в районе залива Сан-Франциско, у подножия которой я тогда жил. Когда я об этом узнал, помнится, я сказал: «Да, когда-нибудь это станет отличным названием для видеоигры».

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

Но одна из знаковых для игры механик все-таки не была заложена в нее изначально.

Читать далее

Information

Rating
10,239-th
Location
Подгорица, Подгорица, Черногория
Works in
Date of birth
Registered
Activity

Specialization

Software Developer, Fullstack Developer
Senior
From 5,000 €
Lisp
Clojure
Unix
Linux
Docker