На память о 2017-м: лучшие посты в нашем блоге за год

5dlouv4o5vgbzx-mybvhgwdx2ak.png
Pixel Jeff


Новогодние традиции — это святое. Оливье, шампанское, мандарины, ёлка и подведение итогов за год. В 2017-м мы опубликовали 212 постов (а еще 90 в нашем блоге на Гиктаймс), получили более 6000 комментариев, а количество просмотров — более 3,5 млн! Так что мы собрали для вас 30 лучших постов за этот год, если вы вдруг что-то пропустили, или если захотите что-то перечитать. И в конце будет бонус — несколько наших лучших постов с Гиктаймса.


Современный подход к сборке мусора (+69)


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


Малоизвестные Git-команды (+136)


У Git есть строгие обязательства по обратной совместимости: многие продвинутые возможности скрыты за разнообразными опциями, а не применяются как поведение по умолчанию. К счастью, Git также поддерживает и алиасы, так что вы можете создавать свои собственные команды, которые делают всю характерную для Git магию. В статье — подборка полезных (или как минимум забавных) алиасов.


Повышаем производительность кода: сначала думаем о данных (+125)


Эта статья — не исчерпывающее хардкорное руководство по железу. Это всего лишь введение, напоминание, свод базовых принципов написания эффективного кода для CPU. Здесь «показано, что низкоуровневое мышление сегодня всё ещё полезно», даже если речь пойдёт о процессорах, которые можно добавить. В статье рассматривается кеширование, векторное программирование, чтение и понимание ассемблерного кода, а также написание кода, удобного для компилятора.


Архитектура микросервисов (+69)


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


Использование Tarantool в .NET-проекте на Windows (+68)


Что делать, если вы разрабатываете проекта в Visual Studio на Windows и хотите попробовать Tarantool? Предполагается, что даже с переходом на микросервисную архитектуру большинство микросервисов будет написано на языке C#. А Tarantool… Стоит зайти на официальный сайт — и сразу понимаешь: Tarantool даже установить на Windows проблематично, так как на эту операционную систему он не портирован. В статье рассказывается о том, как можно побороть эти трудности и использовать Tarantool в своих .NET-проектах.


Я написал самую быструю хеш-таблицу (+116)


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


Что я изменил бы в Go (+69)


Это сборник размышлений и пожеланий по изменению Go. В качестве эталона взят Rust.


Шаблоны проектирования с человеческим лицом (+120)


Шаблоны проектирования — это способ решения периодически возникающих проблем. Точнее, это руководства по решению конкретных проблем. Это не классы, пакеты или библиотеки, которые вы можете вставить в своё приложение и ожидать волшебства. В статье приведены примеры на PHP 7, но пусть вас это не смущает, ведь заложенные в шаблонах принципы неизменны. Кроме того, внедряется поддержка других языков.


Сравнение производительности версий PHP (+74)


В этой статье рассматриваются результаты нескольких бенчмарков, начиная с PHP 5 и вплоть до экспериментальной JIT-ветки (сейчас в разработке). На момент написания не было известно, появится ли до PHP 8 ещё какая-то основная версия, например PHP 7.2. Но логично предположить, что возможности экспериментальной ветки как минимум будут включены в PHP 8.


Игры, в которых нужно писать код: Grid Garden, Elevator Saga и другие (+72)


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


Эксперименты с malloc и нейронными сетями (+72)


Во всех учебниках написано, что одна из основных проблем динамического распределения памяти — это ее непредсказуемость. Как говорится, знал бы прикуп — жил бы в Сочи. Если бы оракул заранее рассказал весь план по которому будет выделяться и освобождаться память, то можно было составить оптимальную стратегию, минимизирующую фрагментацию кучи, пиковое потребление памяти и т.д. Отсюда пошла возня с ручными аллокаторами. Автор реализовал инструменты журналирования malloc() и free() и рассказывает об использовании глубокого обучения для прогнозирования работы с кучей.


Потенциально опасные алгоритмы (+76)


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


Миллион WebSocket и Go (+111)


Это статья о том, как команда проекта Почта Mail.Ru разработала высоконагруженный WebSocket-сервер на Go.


Разработка персонажей для игры «Аллоды Онлайн» (+85)


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


Load Average в Linux: разгадка тайны (+123)


Средние значения нагрузки (Load averages) — это критически важная для индустрии метрика. Многие компании тратят миллионы долларов, автоматически масштабируя облачные инстансы на основании этой и ряда других метрик. Но на Linux она окутана некой тайной. Отслеживание средней нагрузки на Linux — это задача, работающая в непрерываемом состоянии сна (uninterruptible sleep state). Почему? В этой статье автор старается разгадать эту тайну, и создать референс по средним значениям нагрузки для всех, кто пытается их интерпретировать.


Новый чемпионат для backend-разработчиков: HighLoad Cup (+72)


Проведение конкурсов для IT-специалистов сейчас в моде: Kaggle с его задачами по Data Science, сплоченная тусовка олимпиадного программирования, набирающие популярность площадки для конкурсов по искусственному интеллекту, всевозможные хакатоны для мобильных разработчиков, олимпиады для админов, capture the flag для безопасников. Казалось бы, специалисту любой сферы несложно найти себе подходящую движуху, поучаствовать, прокачаться и что-нибудь выиграть.


Обделенными в этом плане остались лишь web-разработчики. Мы в Mail.Ru Group решили исправить это досадное недоразумение и теперь с радостью представляем вам HighLoadCup — конкурсную площадку на стыке backend-разработки и администрирования web-сервисов.


Что за черт, Javascript (+74)


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


Управление памятью в Python (+69)


Одна из главных проблем при написании крупных (относительно) программ на Python — минимизация потребления памяти. Однако управлять памятью здесь легко — если вас вообще это волнует. Память в Python выделяется прозрачно, управление объектами происходит с помощью системы счётчиков ссылок (reference count), и память высвобождается, когда счётчик падает до нуля. В теории всё прекрасно. А на практике вам нужно знать несколько вещей об управлении памятью в Python, чтобы ваши программы эффективно её использовали. Первая вещь, надо хорошо в ней разбираться: размеры основных объектов в Python. И вторая вещь: как устроено управление «под капотом» языка.


Достижения в глубоком обучении за последний год (+97)


В статье рассказывается о том, что интересного произошло в мире машинного обучения за последний год (в основном в Deep Learning). А произошло очень многое, поэтому мы остановились на самых зрелищных и/или значимых достижениях. Технические аспекты улучшения архитектур сетей в статье не приводятся. Расширяем кругозор!


Топливо для ИИ: подборка открытых датасетов для машинного обучения (+65)


Если вы прямо сейчас не делаете свой ИИ, то другие будут делать его вместо вас для себя. Ничто более не мешает вам создать систему на основе машинного обучения. Есть открытая множество инструментов, облегчающих эту работу. Добавьте сюда доступность больших вычислительных мощностей, и вы поймете, что для полного счастья не хватает лишь одного ингредиента — данных. Огромное количество данных находится в открытом доступе, однако непросто понять, на какие из открытых датасетов стоит обратить внимание, какие из них годятся для проверки идей, а какие могут быть полезны в качестве средства проверки потенциальных продуктов или их свойств до того, как вы накопите собственные проприетарные данные. Мы разобрались в этом вопросе и собрали данные по датасетам, удовлетворяющим критериям открытости, востребованности, скорости работы и близости к реальным задачам.


Поиск и исправление багов в исходниках PHP (+66)


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


Russian AI Cup 2017 — всем поклонникам StarCraft и C&C посвящается (+91)


Уже несколько лет подряд мы проводим Russian AI Cup — нехилый такой конкурс для всех неравнодушных к программированию в целом, к построению ИИ, просто к написанию ботов для игр или автоматизации чего бы то ни было. Естественно, и этот год не будет исключением. Итак, Mail.Ru Group в сотрудничестве с Саратовским государственным университетом официально объявляют о дате старта Russian AI Cup 2017 и счастливы предложить задачу этого года. Жёсткие битвы, макбуки за первые места и минус полтора месяца из жизни разработчика — всё на месте, всё как вы любите.


Почему нужно перестать использовать Git rebase (+68)


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


Объясняем современный JavaScript динозавру (+168)


Цель статьи — рассказать о контексте, в котором инструменты в JavaScript развивались вплоть до 2017-го. Начнём с самого начала и будем делать сайт, как это делали бы динозавры — безо всяких инструментов, на чистом HTML и JavaScript. Постепенно станем вводить разные инструменты, поочерёдно рассматривая решаемые ими проблемы. Благодаря историческому контексту вы сможете адаптироваться к постоянно меняющемуся ландшафту JavaScript и понять его.


Tarantool: когда на сервис оповещения миллиона пользователей нужно 500 строк кода (+67)


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


Как ты реализуешь аутентификацию, приятель? (+75)


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


Мастер-класс «Почему Стив Джобс любил шрифты» (Алексей Каптерев) (+192)


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


Отладка злого бага в рантайме Go (+90)


В статье рассказывается о поиске и отладке одного очень хитрого бага в среде исполнения Go.


Руководство по написанию защищённых PHP-приложений в 2018-м (+69)


Приближается 2018 год, и технари — в частности веб-разработчики — должны отбросить многие старые методики и верования в сфере разработки защищённых PHP-приложений. Особенно это относится ко всем, кто не верит, что такие приложения вообще возможны. Это руководство — дополнение к электронной книге PHP: The Right Way с сильным уклоном в безопасность, а не общие вопросы программирования на PHP (вроде стиля кода).


Материалы открытого курса OpenDataScience и Mail.Ru Group по машинному обучению и новый запуск (+78)


Недавно OpenDataScience и Mail.Ru Group провели открытый курс машинного обучения. В прошлом анонсе много сказано о курсе. В этой статье мы поделимся материалами курса, а также объявим новый запуск.


И в завершение поста — лучшие наши посты на Гиктаймс за 2017-й:


  • Гигер и фантастические технологии мира Чужих (+84)
  • Последний великий проект советской науки: коллайдер в Протвино (+76)
  • Белое пятно на 15 мегабайт (+64)
  • Фрезерование печатных плат в домашних условиях (+64)
  • Космическая демосцена: Вселенная умещается в 64 килобайта (+60)
  • Большой финал: Кассини перед погружением в атмосферу Сатурна (+57)
  • Никогда не спят: старейшие действующие устройства (+56)


Всех с наступающим!

© Habrahabr.ru