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

Software Engineer

Send message

Ограничения в телеграм-бот (Bot API), о которых никто не расскажет

Level of difficultyEasy
Reading time2 min
Views40K

Привет! Меня зовут Оля, я программист учебного центра компании «Тензор».

В декабре 23-го мне поступила творческая задача разработать телеграм-бот для проведения новогоднего марафона-тренинга по личностному росту.

В этой статье расскажу о проблеме, с которой столкнулась при разработке телеграм-бота. Разберем ошибку 429 (Too Many Requests) и лимиты на доступ к API.

Читать далее

Рекомендации при работе с PostgreSQL

Level of difficultyMedium
Reading time10 min
Views30K

Доброго времени суток. Основываясь на своём опыте хочу представить некоторые рекомендации при разработке кодовой базы на SQL.

Данные рекомендации получены горьким опытом, так что надеюсь, они Вам помогут :)

Читать подробнее и больше не косячить

Абсолютный минимум об Unicode на 2023 год (всё ещё — никаких оправданий!)

Level of difficultyMedium
Reading time18 min
Views19K

Двадцать лет назад Джоэл Спольски написал: «Не существует такой штуки, как «обычный текст». Если имеется строка, но неизвестно, какую кодировку символов она использует — смысла в этой строке нет. Больше нельзя спрятать голову в песок и притвориться, что «обычный» текст имеет кодировку ASCII.»

Многое изменилось за 20 лет. В 2003 году главный вопрос звучал так: «Что это за кодировка?». В 2023 году такой вопрос больше не стоит: с вероятностью в 98% это — UTF-8. Наконец то! Можно снова спрятать голову в песок!

Читать далее

Гений 21 века. Чем сейчас занимается Фабрис Беллар

Level of difficultyEasy
Reading time9 min
Views59K
Некоторые программисты настолько хорошо известны, что не нуждаются в особом представлении. Наверное, Фабрис Беллар — самая яркая звезда современности. Автор мультимедийного комбайна FFmpeg, эмулятора QEMU и десятков других полезных программ — абсолютный гений и пример программиста 100х, который в одиночку принёс больше пользы миру, чем многие корпорации с сотнями разработчиков. В общем, все знают Фабриса — про него ещё была статья на Хабре двенадцать лет назад…

… Но по просьбам молодых читателей мы решили вернуться к этой теме. Оно и к лучшему, ведь Фабрис многое сделал за это десятилетие, особенно в области нейросетей.
Читать дальше →

Вы точно хотите пойти программистом в gamedev?

Level of difficultyEasy
Reading time17 min
Views80K

Хочу вас огорчить, программисты не делают игры - их делают дизайнеры и арт. Можно уволить программиста и на его место придет другой и через условные месяц-два-полгода начнет закрывать таски не хуже. Если увольняется дизайнер, его монстр, пушка или контент повисает без хозяина и без "видения". Если её не перехватил сосед (а у соседа свой монстр), то в большинстве случаев его работа просто уходит в стол и монстра пишут заново на тех же ассетах и принципах, но заново.

Если увольняется арт-директор, который несет "видение" проекта, то проекту становится очень плохо, в большинстве случаев визуально он изменится до неузнаваемости, хотя ассеты могут быть те же самые. Программисты делают всё, кроме самой игры: рендер, звук, физику, сеть, AI, инверсную кинематику, поиск пути и т.д. Можем подискутировать в комментариях.

O, тепленькая пошла!

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

Level of difficultyEasy
Reading time10 min
Views14K

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

Городу нужно больше рабочих...

Гипотеза континуума, современное состояние

Level of difficultyMedium
Reading time8 min
Views27K

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

Читать далее

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

Level of difficultyMedium
Reading time30 min
Views7.8K

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

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

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

Читать далее

LISP в космосе

Level of difficultyEasy
Reading time22 min
Views4.4K


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


Эта история о том, что произойдёт, если человек, страстно увлечённый LISP, попадёт в организацию, где на нём не принято писать софт.


Эта история о том, как LISP попал в космос.


На дворе 1988 год. СССР всё ещё существует. Рональд Рейган — президент США. А Рон Гаррет под началом своего научного руководителя работает над прототипом первого марсохода.

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

О точности вычислений: как не потерять данные в цифровом шуме

Reading time7 min
Views4K

Специалист отдела перспективных исследований компании «Криптонит» Игорь Нетай изучил процесс потери точности вычислений и написал библиотеку, доступную на GitHub, которая помогает разработчикам контролировать точность расчётов на каждом этапе вычислений. Данная библиотека особенно актуальна в сфере машинного обучения и анализа (больших) данных, где накопление ошибок может сильно искажать результат.

Читать далее

Сказка про собес наоборот

Level of difficultyEasy
Reading time11 min
Views35K

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

Но сначала сказка о том, как к нам попал Миша: однажды в славном городе Панкт-Сетербург погромист-джедай по имени Михаил отправился на собеседование в компанию "Кодозавры". Он был уверен, что знает все, и даже изучил новейшие фреймворки "NoScript" и "Unreal С--". Как он думал, ничто не может его остановить. Когда Миша пришел на собеседование, его встретил HR-менеджер по имени Анна. Она с улыбкой спросила: "Расскажите, как вы бы пояснили своей бабушке, что такое мьютекс?". Ага, прям с порога наш доблестный HR накинул Мишке затравочный вопрос. Ну а чё, это ж сказка, герои на белых самокатах и все такое...

Налево пойдешь, мидла потеряешь...

Полное руководство по сезонной депрессии (SAD). 7 видов светотерапии

Reading time26 min
Views70K


Я проделал большую работу по исследованию англоязычной литературы на тему «рекуррентное депрессивное расстройство (F33) с сезонным паттерном». В этой статье я системно изложу всю найденную информацию.

Почему эта статья важна:

  1. Лучшая книга по сезонной депрессии (Winter Blues) за все 27 лет её существования не была переведена на русский язык, а англоязычную версию не найти в открытом доступе. Я купил и прочитал книгу через Kindle, а также внедрил 70% описанных в ней методик в жизнь. Моя статья будет, по сути, пересказом книги и её адаптации под российские реалии
  2. Полное непонимание сезонной депрессии как обывателями, так и некоторыми профессиональными врачами в России, хотя эта страна находится в группе риска
  3. Низкое качество статей рунета в целом и статей по здоровью в частности. А статьи на Хабре, имеющие отношение к SAD, можно пересчитать по пальцам, и они не дают общей картины
  4. Производители ламп яркого света используют хитрые манипуляции, маркируя слабенькие лампы как дающие 10 000 люкс, но достигая этой яркости на расстоянии около 10 сантиметров от лампы до хрусталика глаза
Читать дальше →

Визуальное RPG с долговременной памятью, генерируемое из 3 нейросетей и LLamы

Level of difficultyEasy
Reading time17 min
Views18K

Языковые модели (NLP) сейчас активно развиваются и находят себе всё больше интересных применений. Начиналась же их эпоха с классики жанра — D&D. Это настольная игра, где несколько друзей или просто знакомых синхронно галлюцинируют, представляя себя командой героев в некоем вымышленном мире. Прав же во внутриигровых выборах тот, кто выкинул большее число на игральной кости. Судить сейчас об их мотивации у меня нет никакого желания, да и статья вообще-то не об этом.

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

Так и появился AIDungeon — уникальная для своего времени (2019 год) вещь, которая не сильно потеряла в популярности и по сей день. Однако, если вы любите смотреть глубже, то играть в него вам быстро надоест. Я же в своей серии из нескольких статей (посвящённых GPT) стараюсь показать простому обывателю механизм безболезненного использования нейросетевых моделей в простых проектах при помощи Python и Hugging Face Transformers.
Приступим

Графика древности: от текста к видеоиграм

Level of difficultyMedium
Reading time32 min
Views18K

Вот уже много лет в игровой индустрии вместе с самыми последними графическими технологиями успешно сосуществует пиксельная графика практически в том же самом виде, в каком она существовала в играх для домашних компьютеров и игровых приставок 80-х и 90-х годов. Её возвращение на игровые мониторы в конце 2000-х годов казалось кратковременной модой на ретро, но однажды вернувшись, пиксели остались с нами надолго.

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

Как (быстро) сделать русский локальный ChatGPT

Level of difficultyMedium
Reading time7 min
Views49K

Эта история началась в начале марта этого года. ChatGPT тогда был в самом расцвете. Мне в Telegram пришёл Саша Кукушкин, с которым мы знакомы довольно давно. Спросил, не занимаемся ли мы с Сашей Николичем языковыми моделями для русского языка, и как можно нам помочь.

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

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

Читать далее

S3-FIFO: новый эффективный алгоритм вытеснения из кэша на основе очередей FIFO

Level of difficultyMedium
Reading time18 min
Views9.3K
В этой статье я расскажу о простом и масштабируемом (Simple, Scalable) алгоритме вытеснения данных из кэша на основе трёх статических (Static) очередей FIFO (S3-FIFO). После проверки на 6594 трассировках кэшей 14 компаний мы показали, что S3-FIFO имеет меньшую частоту промахов, чем 12 лучших алгоритмов, разработанных в прошлые десятилетия. Более того, эффективность S3-FIFO устойчива — он имеет наименьший средний показатель промахов для 10 из 14 датасетов. Использование очередей FIFO позволяет S3-FIFO достичь хорошей масштабируемости с пропускной способностью в шесть раз больше по сравнению с оптимизированным LRU в cachelib на 16 потоках.

Мы пришли к выводу, что доступ к большинству объектов в смещённых нагрузках кэша выполняется только за короткий промежуток времени, поэтому критически важно быстро вытеснять их из кэша. А главная особенность S3-FIFO — это небольшая очередь FIFO, отфильтровывающая большинство объектов, не давая им попасть в основной кэш.

Иллюстрация работы S3-FIFO (с использованием порогового значения перехода из маленького в основной кэш, равного 1)
Читать дальше →

Вывод оптимального алгоритма с помощью формализма Бёрда-Меертенса

Level of difficultyMedium
Reading time9 min
Views3.2K

Некоторые оптимальные алгоритмы, оказывается, можно вывести из неоптимальных, пользуясь эквивалентными преобразованиями алгоритма. Бёрд и Меертенс разработали формализм, который устанавливает свойства функций высшего порядка map, fold, scan, позволяющие преобразовывать алгоритмы в эквивалентные. (См. также на Вики). Ниже представлен вольный перевод статьи Бёрда.


Рассмотрим задачу поиска максимальной суммы сегмента массива. Эту задачу можно переформулировать в виде математически точного ответа:


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

СУБД Redis и её автор antirez, программист и фантаст

Level of difficultyEasy
Reading time10 min
Views16K


Сальваторе Санфилиппо aka antirez — итальянский программист, проживающий в Катании (на острове Сицилия). Провинциальное местонахождение не мешает звезде IT-индустрии: он известен на весь мир как автор СУБД Redis. 46-летний antirez входит в число самых авторитетных и талантливых программистов-одиночек с хакерским бэкграундом.

В 2020 году он завязал было с программированием, чтобы целыми днями писать научную фантастику. Но закончив книгу, в конце 2022-го снова вернулся к коду. Оказалось, что между литературным творчеством и программированием сложных систем много общего.
Читать дальше →

Теневое правление Илона Маска

Level of difficultyEasy
Reading time29 min
Views24K

Перевод фрагмента статьи из newyorker.com, где собраны множество реплик коллег и знакомых Илона Маска о его детстве, карьерном пути и влиянии на современную политику.

Читать далее

Главный цикл в пошаговых играх

Level of difficultyMedium
Reading time12 min
Views14K

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

Читать далее

Information

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

Specialization

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