Pull to refresh
8
0
Евгений Набоков @enabokov

Прпограммист веб-сервисов

Send message

После прочтения применить. 25 книг для игрового разработчика

Reading time 8 min
Views 118K
Предлагаю подборку всегда актуальных книг по программированию, геймдизайну и концепт-арту для новичков и бывалых бойцов геймдева. Конечно, во главе профессионального развития стоит практика, но эти книги сэкономят ваше время и позволят не выдумывать велосипед заново.


Читать дальше →
Total votes 15: ↑14 and ↓1 +13
Comments 7

Что такое Forming, Storming, Norming, Performing и Adjourning. И почему это важно знать каждому PM

Reading time 5 min
Views 15K

Одним из часто задаваемых вопросах на собеседовании на позицию Project Manager, а также для сдачи экзамена на сертификат Project Management Professional (PMP)® Exam является вопрос о пяти стадиях формирования команды, таких как Forming, Storming, Norming, Performing, Adjourning, её также называют моделью Такмена в честь её автора Брюса Такмена. Предлагаю разобраться в том, что представляют из себя эти стадии и почему так важно понимать данную концепцию.

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

Практическое руководство по level-дизайну с видом от первого лица

Reading time 13 min
Views 5.8K

При создании игры нам всегда приходится проходить через level-дизайн, однако он является одним из наиболее недооцененных аспектов геймдева, особенно в небольших/независимых командах.

В этом материале я постараюсь дать несколько советов о том, как создать хороший level-дизайн, используя примеры из собственного опыта. В основном я буду делать отсылки к одним и тем же играм (Bad Company 2 и Mirror's Edge), потому что в них я много играл, и чувствую себя комфортно, говоря о них, а также потому, что у них довольно разные игровые механики.

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

СТРАННЫЕ Люди. Как западная цивилизация вырвалась вперед?

Reading time 19 min
Views 90K

По нашей планете распространяется необычная и СТРАННАЯ человеческая психика - Western, Educated, Industrialized, Rich and Democratic (WEIRD) - западный, образованный, индустриальный, богатый и демократичный.

Читать далее
Total votes 204: ↑193 and ↓11 +182
Comments 611

Лучшие книги по Apache Kafka

Reading time 15 min
Views 26K

«Effective Kafka: A Hands-on Guide to Building Robust and Scalable Event-Driven Applications», «Kafka: The Definitive Guide» и другие издания.

В этой статье я расскажу, как изучал Apache Kafka и с какими трудностями столкнулся. Я очень надеюсь, что мои наблюдения помогут тем, кто ещё только приступает к знакомству с платформой. Здесь мы обсудим полезные ресурсы, в основном, книги, которые я прочитал, и мой опыт с платформой#nbsp;— до чтения книг и после.

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

Как мы отказались от JPEG, JSON, TCP и ускорили ВКонтакте в два раза

Reading time 24 min
Views 166K

На протяжении всей жизни мне приходится экономить вычислительные и сетевые ресурсы: сначала были компьютеры с 300 кГц (кило — не гига!) и 32 Кбайт RAM, интернет по dial-up. Потом я решал олимпиадные задачки. Теперь имею дело с терабайтами трафика и 50 млрд событий в сутки. И хотя современные телефоны в 1 000 раз мощнее любого оборудования двадцатилетней давности, я до сих пор оптимизирую. Думал даже, что это со мной что-то не так. Но потом понял, что все постоянно что-нибудь оптимизируют. 

Эта статья в меньшей степени о том, почему нужно бороться за производительность, и в большей о том, на что сейчас стоит заменить устаревший стек из JPEG, JSON, gzip и TCP — и как это сделать. 

Спойлер: у нас есть решение и мы его не только показываем — ссылки на open source в конце статьи.

Читать далее
Total votes 435: ↑423 and ↓12 +411
Comments 300

У нас проблемы с промисами

Reading time 16 min
Views 234K
Разрешите представить вам перевод статьи Нолана Лоусона «У нас проблемы с промисами», одной из лучших по теме из тех, что мне доводилось читать.

У нас проблемы с промисами


Дорогие JavaScript разработчики, настал момент признать это — у нас проблемы с промисами.

Нет, не с самими промисами. Их реализация по спецификации A+ превосходна. Основная проблема, которая сама предстала передо мной за годы наблюдений за тем, как многие программисты борются с богатыми на промисы API, заключается в следующем:

— Многие из нас используют промисы без действительного их понимания.

Если вы мне не верите, решите такую задачку:

Вопрос: В чем разница между этими четырьмя вариантами использования промисов?

doSomething().then(function () {
  return doSomethingElse();
});

doSomething().then(function () {
  doSomethingElse();
});

doSomething().then(doSomethingElse());

doSomething().then(doSomethingElse);

Узнайте решение задачи
Total votes 139: ↑136 and ↓3 +133
Comments 121

Первичный ключ – GUID или автоинкремент?

Reading time 7 min
Views 107K
Зачастую, когда разработчики сталкиваются с созданием модели данных, тип первичного ключа выбирается «по привычке», и чаще всего это автоинкрементное целочисленное поле. Но в реальности это не всегда является оптимальным решением, так как для некоторых ситуаций более предпочтительным может оказаться GUID. На практике возможны и другие, более редкие, типы ключа, но в данной статье мы их рассматривать не будем.
Читать дальше →
Total votes 27: ↑24 and ↓3 +21
Comments 72

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

Reading time 3 min
Views 9K

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

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

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

Что нужно знать об SSD каждому программисту

Reading time 6 min
Views 44K

На фото SSD Samsung PM1733

Твердотельные накопители (Solid-State Drives, SSD) на основе флэш-памяти уже заменили многие магнитные диски в качестве стандартных накопителей. С точки зрения программиста SSD и диски очень похожи: и те, и другие являются устройствами постоянного хранения, обеспечивающими страничный доступ через файловые системы и системные вызовы, и имеющими большой объём.

Однако у них есть и важные различия, которые становятся существенными, если нужно достичь оптимальной производительности SSD. Как мы увидим, SSD устроены сложнее и если воспринимать их просто как быстрые диски, то их производительность может вести себя довольно загадочным образом. Цель этого поста — показать, почему SSD так себя ведут, что поможет вам создавать ПО, способное использовать их особенности. (Стоит заметить, что я буду говорить о NAND-памяти, а не о памяти Intel Optane, имеющей другие характеристики.)
Читать дальше →
Total votes 54: ↑33 and ↓21 +12
Comments 54

Юмористичный обзор Rust с перспективы JavaScript

Reading time 7 min
Views 21K

В этой статье я в несколько забавном ключе документирую кое-какие размышления о своем знакомстве с Rust с позиции прожженного энтузиаста JavaScript. Здесь вас ждет импровизированная прогулка по феодам Вестероса, встреча с Ланнистерами и даже замаскированный под остров корабль — занятные аналогии, которые можно провести с работой в этом языке.
Читать дальше →
Total votes 82: ↑74 and ↓8 +66
Comments 16

Как придумали кодировку UTF-8: выдержки из переписки создателей

Reading time 15 min
Views 14K

Всем известна кодировка UTF-8, что давно доминирует в интернет пространстве, и которой пользуются много лет. Казалось бы, о ней все известно, и ничего интересного на эту тему не рассказать. Если почитать популярные ресурсы типа Википедии, то действительно там нет ничего необычного, разве что в английской версии кратко упоминается странная история о том, как ее «набросали на салфетке в закусочной». 

На самом деле изобретение этой кодировки не может быть настолько банальным хотя бы потому, что к ее созданию приложил руку Кен Томпсон — легендарная личность. Он работал вместе с Деннисом Ритчи, был одним из создателей UNIX, внес вклад в разработку C (изобрел его предшественника — B), а позднее, во время работы в Google, принял участие в создании языка Go. 

Перед вами — перевод нескольких писем, в которых разработчики вспоминают историю создания кодировки. 
Читать дальше →
Total votes 53: ↑50 and ↓3 +47
Comments 12

Улучшение качества изображения с помощью нейронной сети

Reading time 2 min
Views 63K
Сегодня, хочу рассказать об интересном подходе по улучшению качества изображения. Официальное название подхода Super Resolution. Улучшение качества изображения программными методами известно с начала появления цифровых снимков, но в последние 3 года произошёл качественный скачок, вызванный использованием нейронных сетей.


Пример улучшения качества изображения с использованием технологии Super Resolution.
Читать дальше →
Total votes 34: ↑31 and ↓3 +28
Comments 27

Об open-source реализациях хэш-функции ГОСТ Р 34.11-2012 и их влиянии на электронную подпись ГОСТ Р 34.10-2012

Reading time 6 min
Views 23K
В свое время реализация отечественных криптографических алгоритмов в библиотеке libgcrypt очень меня вдохновила. Стало возможным задействовать эти алгоритмы и в Kleopatra и в Kmail и в GnuPg в целом, рассматривать библиотеку libgcrypt как альтернативу openssl с ГОСТ-ым engine. И все было замечательно до прошлой пятницы.
Читать дальше →
Total votes 22: ↑17 and ↓5 +12
Comments 19

Очередные странности в алгоритмах ГОСТ Кузнечик и Стрибог

Reading time 3 min
Views 76K
Привет, %username%!

Криптографические алгоритмы в России не проходят через открытые конкурсы, их просто спускают нам свыше. И рано или поздно это сильно нам аукнется. Эта статья об очередном исследовании наших ГОСТов.

Читать дальше →
Total votes 165: ↑156 and ↓9 +147
Comments 287

Как без усталости кодить по восемь с лишним часов

Reading time 6 min
Views 86K


Всю свою жизнь я писал код неправильно.

Я думал, что достаточно просто сесть за стол, открыть ноутбук, выбрать задачу из моего списка to-do и кодить, пока не устану.

Но на самом деле такой стиль работы убивал мой уровень продуктивности спустя 2–4 часа написания кода. Я ощущал себя таким уставшим, что мне не хотелось ничего, кроме как других задач, требующих низких затрат энергии (например, code review).

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

Что же изменилось?

Мой подход к работе.

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

В статье я расскажу, как этого достиг.
Читать дальше →
Total votes 107: ↑79 and ↓28 +51
Comments 150

Решение Fizzbuzz при помощи теоремы Эйлера

Reading time 4 min
Views 13K
image

FizzBuzz — это известная задачка на программирование, которую обычно дают в технической части собеседований. Она формулируется примерно так:

Напишите функцию, выводящую список целых чисел от 1 до 100, но вместо каждого числа, кратного 3, она должна выводить «Fizz», а вместо каждого числа, кратного 5, выводить «Buzz». Вместо чисел, кратных и 3, 5, программа должна выводить «FizzBuzz»; все остальные числа должны выводиться без изменений.

Можно написать функцию, вообще не использующую условную логику и вместо этого разделяющую целые числа на 4 возможные категории (обычное решение оставим в качестве упражнения заинтересованному читателю):

  1. Имеющие делитель 3, но не 5
  2. Имеющие делитель 5, но не 3
  3. Имеющие делитель и 3, и 5
  4. Не имеющие делитель 3 и 5

Нам нужна функция, которая будет возвращать:

  • «Fizz», если $n \equiv 0 \pmod 3$ и $n$ является взаимно простым с 5
  • «Buzz», если $n \equiv 0 \pmod 5$ и $n$ является взаимно простым с 3
  • «FizzBuzz», если $n \equiv 0 \pmod 3$ и $n \equiv 0 \pmod 5$
  • $n$ во всех остальных случаях.

Рассмотрим реализацию такой функции на Python:

[(lambda n: { 1: n, 6: "Fizz", 10: "Buzz", 0: "FizzBuzz" }[n**4%15])(n+1) for n in range(100)]

Та же функция на Ruby:

(1..100).map{|n| {1 => n, 6 => "Fizz", 10 => "Buzz", 0 => "FizzBuzz"}[n**4%15] }

Как мы и ожидали, каждая из этих функций возвращает список целых чисел от 1 до 100 с подставленными в нужные места «Fizz», «Buzz» и «FizzBuzz».

Но почему? Откуда взялись постоянные значения 0, 6, 10 и 1? Почему $n^4 \mod 15$ возвращает 6 для чисел, кратных 3, но не 5, 10 для чисел, кратных 5, но не 3, 0 для чисел, кратных 5 и 3 и 1 во всех остальных случаях? И самое важное — справедливо ли это для любого $n$, которое мы выберем?
Читать дальше →
Total votes 28: ↑28 and ↓0 +28
Comments 13

Ржавеем дальше. Как появился Rust и можно ли на нём WEB?

Reading time 20 min
Views 18K

Моя предыдущая статья про rust вызвала положительную реакцию и большое количество обсуждений о том что да как с rust. Мне исключительно приятно видеть что вам понравился этот материал.

В комментариях я встретил много вопросов типа «А можно ли использовать rust для WEB?» Лаконичный ответ таков: «Можно». Можно и brainfuck использовать, если хочется. Нужно ли? Скажем так, brainfuck для WEB использовать категорически не стоит. А вот rust – тут надо понимать что именно делает rust и каковы его цели. Для того чтобы это понять мы должны погрузиться в компилятор и разобраться в устройстве процессоров. Под катом вы найдёте глубокий заныр в историю того как появился rust и поймёте что это такое и когда его нужно использовать а когда можно и на «ноде запилить».

Ржавеем дальше и глубже...
Total votes 39: ↑34 and ↓5 +29
Comments 88

Данные всех стран, не объединяйтесь

Reading time 4 min
Views 21K
Радует, когда на диаграмме кроме новых созвездий находится нечто похожее на зависимость. В таком случае мы строим модель, которая хорошо объясняет связь между двумя переменными. Но исследователь должен понимать не только, как работать с данными, но и какая история из реального мира за ними лежит. В противном случае легко сделать ошибку. Расскажу о парадоксе Симпсона — одном из самых опасных примеров обманчивых данных, который может перевернуть связь с ног на голову.
Читать дальше →
Total votes 109: ↑109 and ↓0 +109
Comments 10

Машинное обучение на C#: введение в ML.NET

Reading time 22 min
Views 35K


ML.NET претендует на звание самой мощной библиотеки для машинного обучения на платформе .NET. Так ли это на самом деле? На вопрос отвечает Джефф Просайз.

Джефф Просайз — один из создателей компании Wintellect, коллега по цеху знаменитого Джеффри Рихтера, автор более девяти книг и множества статей по разработке приложений, сейчас работает с Azure и разрабатывает различные AI-решения.

Под катом перевод и видео доклада Джеффа с конференции DotNext 2019 Moscow в оригинале.
Total votes 25: ↑25 and ↓0 +25
Comments 10

Information

Rating
5,071-st
Location
British Columbia, Канада
Date of birth
Registered
Activity

Specialization

Software Developer, Frontend Developer
Senior
C#
TypeScript
Rust