Новый год всё ближе, остались считанные дни. Пора подвести итоги. Всего за этот год мы опубликовали почти 200 постов (этот — 198-й) с суммарным рейтингом 6912, получили 6245 комментариев, 21835 добавлений в избранное и почти 3 миллиона просмотров! Мы сели и с умилением и ностальгией вспомнили лучшие посты в нашем блоге за 2016 год. Присоединяйтесь!
Опасное видео: как я нашёл уязвимость в видеохостингах и не умер через 7 дней от cdump
В этом посте программист бэкенда Облака Mail.Ru рассказал о том, как он нашёл и зарепортил одну интересную уязвимость, за что получил солидный гешефт.
Иван Григоров: «Для топовых багхантеров $25К в месяц — не проблема» от Penny_2_Lane
Как начать искать баги? Может ли это быть единственным источником дохода? В каких Bug Bounty участвовать? Сколько зарабатывают багхантеры? И почему поиском уязвимостей особенно выгодно заниматься в кризис? Ответы на эти и другие вопросы читайте в нашем интервью с одним из лучших багхантеров в рейтинге платформы HackerOne.
Медведь, расчленёнка и 14 февраля от puelle
К 14 февраля мы решили собрать роботизированного мишутку, который не просто смог бы общаться и дарить людям радостные объятия, но и анализировал бы действия человека. Ведь объятия, как вялые, так и интенсивные, способны выдать истинные чувства и выявить скрытые эмоции. Вдруг в компании есть два человека, которые обнимаются совершенно одинаково? Что, если PHP-программисты предпочитают продолжительные прикосновения, а перловики ограничиваются сухим лапопожатием? С помощью робомедведя нам удалось собрать самые необычные данные из жизни айтишников.
Как за 7 дней превратиться из server-side-программиста в client-side от nikiasi
Рассказ свежеиспечённого мобильного разработчика о том, как он круто поменял свою специализацию, уйдя с должности руководителя группы C/C++-разработки Почты Mail.Ru.
Немного размышлений и советов по оптимизации кода на С++ от nekipelov
Как подсказывает Кэп, в этом посте один из наших программистов делится советами по оптимизации кода на С++, чтобы скорость его работы не падала ниже плинтуса Python/Ruby.
Эксперименты с malloc от markhor
Все POSIX-реализации malloc так или иначе упираются в ряд конкретных функций. По сравнению с наивным выделением и освобождением страниц, округляя необходимый размер в большую сторону, malloc имеет много преимуществ. В этой статье было проведено три эксперимента с malloc на POSIX-совместимых операционках — Linux и OS X.
Сравнение Tarantool с конкурентами в Microsoft Azure от rvncerr
Мы решили проверить, насколько хорошо Tarantool работает в Microsoft Azure в сравнении с другими подобными предложениями — Azure Redis Cache, Bitnami Memcached, Aerospike и VoltDB. Под словом «хорошо» будем понимать «быстро», то есть сравнивать будем число обрабатываемых запросов в секунду (Throughput, RPS).
(Почему) Почта Mail.Ru включает строгий DMARC от z3apa3a
В этой статье мы пояснили некоторые технические детали включения строгой DMARC-политики на всех доменах, принадлежащих Почте Mail.Ru, и дали рекомендации владельцам сервисов, почтовых серверов и списков рассылки.
Лучшие практики Go, шесть лет в деле от FZambia
Масштабный материал о лучших практиках Go, прошедших проверку временем. Какие из них устарели или стали неэффективными? Что нового появилось за последний год?
Руководство по работе с Redux от Infected
В этом руководстве рассмотрено создание с нуля full-stack приложения с использованием Redux и Immutable-js. Применив подход TDD, вы пройдёте все этапы конструирования Node+Redux бэкенда и React+Redux фронтенда приложения. Помимо этого, рассмотрено применение таких инструментов, как ES6, Babel, Socket.io, Webpack и Mocha. Набор весьма любопытный, и вы мигом его освоите!
Как настроить расширяемую систему для регрессионного тестирования на телефонах: опыт мобильной Почты Mail.Ru от p_alexey
В статье рассказывается о том, как мы построили с нуля гибкую и расширяемую систему для выполнения автотестов на Android-смартфонах. Сейчас у нас используется около 60 устройств для регрессионного тестирования мобильного приложения Почты Mail.Ru. В среднем они тестируют около 20 сборок приложения ежедневно. Для каждой сборки выполняется около 600 UI-тестов и более 3500 unit-тестов.
Стилизация изображений с помощью нейронных сетей: никакой мистики, просто матан от mephistopheies
Наверняка вы заметили, что тема стилизации фотографий под различные художественные стили активно обсуждается в этих ваших интернетах. Читая все эти популярные статьи, вы можете подумать, что под капотом этих приложений творится магия, и нейронная сеть действительно фантазирует и перерисовывает изображение с нуля. Так уж получилось, что наша команда столкнулась с подобной задачей: в рамках внутрикорпоративного хакатона мы сделали стилизацию видео, т.к. приложение для фоточек уже было. В этой статье мы с вами разберемся, как это сеть «перерисовывает» изображения, и рассмотрим статьи, благодаря которым это стало возможно.
Особенности файловых систем, с которыми мы столкнулись при разработке механизма синхронизации Облака Mail.Ru от askogorev
Одна из основных функций десктопного клиента Облака Mail.Ru — синхронизация данных. Ее целью является приведение папки на ПК и ее представления в Облаке к одинаковому состоянию. При разработке этого механизма мы встретились с некоторыми, с первого взгляда, достаточно очевидными особенностями различных файловых и операционных систем. Однако если о них не знать, можно столкнуться с довольно неприятными последствиями (не получится загрузить или удалить файл). В этой статье мы собрали особенности, знание которых позволит вам правильно работать с данными на дисках и, возможно, убережет от необходимости срочного хотфикса.
Массивы в РНР 7: хэш-таблицы от AloneCoder
В статье подробно рассмотрено, как устроены хэш-таблицы в РНР 7, как с ними можно работать с точки зрения языка С и как ими управлять средствами РНР (используя структуры, называемые массивами). Не забывайте, что хэш-таблицы мы используем везде (обычно в роли словарей), следовательно, нужно проектировать их так, чтобы они быстро обрабатывались процессором и потребляли мало памяти. Эти структуры решающе влияют на общую производительность РНР, поскольку местные массивы не единственное место, где используются хэш-таблицы.
Ломаем сбор мусора и десериализацию в PHP от AloneCoder
Рассказ о двух use-after-free уязвимостях в алгоритме сбора мусора в PHP. Одна присутствует во всех версиях PHP 5 ≥ 5.3 (исправлена в PHP 5.6.23). Вторая — во всех версиях PHP ≥ 5.3, включая версии PHP 7 (исправлена в PHP 5.6.23 и PHP 7.0.8). Уязвимости могут удалённо применяться через PHP-функцию десериализации. Используя их, авторы статьи отыскали RCE на pornhub.com, за что получили премию в 20 000 долларов плюс по 1000 долларов за каждую из двух уязвимостей от комитета Internet Bug Bounty на Hackerone.
PHP: неправильный путь от AloneCoder
В мире PHP-программирования существует набор трендов. Некоторые люди активно продвигают их (в книгах и на сайтах) как «современный PHP», а другие подходы выставляют как устаревшие, глупые или просто неверные. Похоже, все эти люди без устали стараются заставить каждого программировать так, как они считают нужным. Эта статья написана, чтобы поделиться прагматичным взглядом на PHP-программирование. Взглядом, продиктованным опытом и практическими последствиями, а не популярными тенденциями, теориями или академическими догмами.
Frontend: Разработка и поддержка (+голосование) от RubaXa
Давайте представим, что вас перевели на новый проект. Или вы сменили работу и о проекте максимум только слышали. Вот вы садитесь за рабочее место, к вам приходит менеджер, жмёт руку и… прямо сходу открывает страницу проекта, тыкает пальцем в монитор и просит вставить «информер о предстоящем событии Х». На этом вы расстаётесь… Что делать? С чего начать? Как создать «информер»? Где найти нужный шаблон? И море других вопросов. Это рассказ о том, как мы стараемся организовать эти процессы, какие инструменты создаём для препарирования SPA. Кроме этого, мы поговорим о технических подробностях реализации Live Coding / Hot Reload и чуток о VirtualDom и React с Angular.
ExcelArt – изометрия «на халяву». Рисуем псевдообъемный телефон без 3D и Фотошопа от flash_b
Возможно ли получить псевдообъемное изображение без 3D-программ? «Конечно, — скажете вы, — берешь, напрягаешься и рисуешь с нуля». А если без «берешь, напрягаешься и рисуешь»? А если вообще без каких-то специальных знаний? Можно ли получить изометрические объекты, не тратя время на рендер? Существует ли вообще цифровая иллюстрация вне привычных графических программ? На эти и другие вопросы дан ответ в статье, посвященной новому методу создания цифровых иллюстраций — ExcelArt.
Сложный квест для хабравчан: 25 уровней от gag_fenix
В этом посте представлена головоломка, разработанная специально для пользователей Хабра. Испытайте себя, сможете ли вы её решить?
Обзор расширения OPCache для PHP от AloneCoder
PHP — это скриптовый язык, который по умолчанию компилирует те файлы, которые вам нужно запустить. Во время компилирования он извлекает опкоды, исполняет их, а затем немедленно уничтожает. PHP был так разработан: когда он переходит к выполнению запроса R, то «забывает» всё, что было выполнено в ходе запроса R-1. Очень маловероятно, что на production-серверах PHP-код изменится между выполнением нескольких запросов. Так что можно считать, что при компилированиях всегда считывается один и тот же исходный код, а значит и опкод будет точно таким же. И если извлекать его для каждого скрипта, то получается бесполезная трата времени и ресурсов.
Книга «Как пережить полный конец обеда, или безопасность в PHP». Часть 1 от sunsai
В интернете можно найти много статей и руководств по безопасности. Эта книга показалась нам достаточно подробной, при этом лаконичной и понятной. Надеемся, она поможет вам узнать что-то новое и сделать свои сайты надёжнее и безопаснее.
Трамплин вызова магических функций в PHP 7 от AloneCoder
В этой статье подробно рассмотрена оптимизация в виртуальной машинe в PHP 7 (виртуальной машине Zend). Сначала коснёмся теории трамплинов вызовов функций, а затем узнаем, как они работают в PHP 7. Если вы хотите полностью во всём разобраться, то лучше иметь хорошее представление о работе виртуальной машины Zend. Для начала можете почитать, как устроена ВМ в PHP 5, а здесь мы поговорим о ВМ PHP 7. Хотя она и была переработана, но действует практически так же, как и в PHP 7. Поэтому если вы разберётесь в ВМ PHP 5, то разобраться с ВМ PHP 7 не составит никакого труда.
Лекции Техносферы. 1 семестр. Введение в анализ данных (весна 2016) от Olga_ol
Новая подборка лекций Техносферы Mail.Ru, на этот раз представляем в открытом доступе весенний курс «Введение в анализ данных», на котором слушателей знакомят со сферой анализа данных, основными инструментами, задачами и методами, с которыми сталкивается любой исследователь данных в работе. Курс преподают Евгений Завьялов (аналитик проекта Поиск Mail.Ru, занимающийся извлечением полезных бизнесу знаний из данных, генерируемых поисковым движком и десктопными приложениями), Михаил Гришин (программист-исследователь из отдела анализа данных) и Сергей Рыбалкин (старший программист из студии Allods Team).
Подводные камни Bash от AloneCoder
В этой статье мы поговорим об ошибках, совершаемых программистами на Bash. Во всех приведённых примерах есть какие-то изъяны. Вам удастся избежать многих из нижеописанных ошибок, если вы всегда будете использовать кавычки и никогда не будете использовать разбиение на слова (wordsplitting)! Разбиение на слова — это ущербная легаси-практика, унаследованная из оболочки Bourne. Она применяется по умолчанию, если вы не заключаете подстановки (expansions) в кавычки. В общем, подавляющее большинство подводных камней так или иначе связаны с подстановкой без кавычек, что приводит к разбиению на слова и глоббингу (globbing) получившегося результата.
Обзор топологий глубоких сверточных нейронных сетей от mephistopheies
Статья с говорящим названием, не прибавить, не убавить. Материал для подготовленных читателей: подразумевается, что вы уже знакомы с алгоритмом обратного распространения ошибки и понимаете, как работают основные строительные блоки сверточных нейронных сетей: свертки и пулинг.
Ни единого разрыва: как мы создавали беспроводную сеть для 3000 устройств от znoom
Офис Mail.Ru Group — это 26-этажное здание, в котором работает шибко много людей. Это рассказ о том, как видоизменялась наша Wi-Fi-сеть за последние 11 лет, и что она собой представляет сегодня.
Истории старой мейлрушечки от yeah_boss
Горящие серверы, катастрофическое падение сервисов, героическое спасение портала с помощью жены, оставшейся у компьютера. Так мог начинаться фантастический технотриллер, но на самом деле так начиналась история российского интернета, частью которого мы стали. В честь 18-летия компании мы впервые рассказали о реальной истории Mail.Ru Group. Впервые за годы жизни поделимся тем, что раньше было на уровне мифов и легенд даже внутри самой компании. Мы разговорили людей, проработавших в компании много лет и непосредственно участвовавших во всех событиях.
Что случилось, когда мы устали смотреть на графики 5 000 серверов в мониторинге (и когда серверов стало более 10 000) от Sharapoff
Рассказ о том, как в Одноклассниках задолбались вручную отслеживать 5000 серверов и сделали новую систему мониторинга. Сейчас на работу с 10 тысячами серверов тратится по 1-2 часа в неделю на обработку алертов.
Парсинг JSON — это минное поле от AloneCoder
JSON — это стандарт де-факто, когда заходит речь о (де)сериализации, обмене данными в сети и мобильной разработке. Но насколько хорошо вы знакомы с JSON? Все мы читаем спецификации и пишем тесты, испытываем популярные JSON-библиотеки для своих нужд. В статье показано, что JSON — это идеализированный формат, а не идеальный, каким его многие считают. Нет даже двух библиотек, ведущих себя одинаково. Более того, крайние случаи и зловредная полезная нагрузка могут привести к багам, падениями и DoS, в основном потому, что JSON-библиотеки основаны на спецификациях, которые со временем развиваются, что оставляет многие вещи плохо или вообще не задокументированными.
Приглашаем на Russian AI Cup 2016 от sat2707
В этом посте подробно рассматривается задача, решить которую предлагалось участникам чемпионата Russian AI Cup 2016.
50 оттенков Go: ловушки, подводные камни и распространённые ошибки новичков от 3vilhamst3r
Go — простой и забавный язык. Но в нём, как и в любых других языках, есть свои подводные камни. И во многих из них сам Go не виноват. Одни — это естественное следствие прихода программистов из других языков, другие возникают из-за ложных представлений и нехватки подробностей. Если вы найдёте время и почитаете официальные спецификации, вики, почтовые рассылки, публикации в блогах и исходный код, то многие из подводных камней станут для вас очевидны. Но далеко не каждый так начинает, и это нормально. Если вы новичок в Go, статья поможет сэкономить немало часов, которые вы бы потратили на отладку кода. Мы будем рассматривать версии Go 1.5 и ниже.
ICQ: 20 лет — не предел от Dimitryopho
Ещё недавно мы вспоминали, как от релиза к релизу Аська подвергалась пластическим операциям и фейслифтингу. А в день юбилея — ICQ исполнилось 20 лет — мы решили посмотреть в ретроспективе, какие технологии применялись в ICQ на протяжении двух десятилетий.
Математика CSS-шлюзов от AloneCoder
CSS-шлюзом (CSS-lock) называется методика из адаптивного веб-дизайна, позволяющая не перепрыгивать от одного значения к другому, а переходить плавно, в зависимости от текущего размера области просмотра (viewport). Идею и одну из реализаций предложил Тим Браун в статье Flexible typography with CSS locks. В статье описана сама методика, её ограничения и лежащую в её основе математику. Не волнуйтесь: там в основном одни сложения и вычитания. К тому же всё разбито на этапы и украшено графиками.
Мониторинг и настройка сетевого стека Linux: получение данных от AloneCoder
В этой статье рассмотрено, как осуществляется приём пакетов на компьютерах под управлением ядра Linux, а также разобраны вопросы мониторинга и настройки каждого компонента сетевого стека по мере движения пакетов из сети в приложения пользовательского пространства. Здесь вы найдёте много исходного кода, потому что без глубокого понимания процессов вы не сможете настроить и отслеживать сетевой стек Linux.
Головоломки TCP от AloneCoder
Говорят, что нельзя полностью понять систему, пока не поймёшь её сбои. В этой статье ошибки TCP преподнесены как головоломки, в стиле Car Talk или старых головоломок Java. Как и любые другие хорошие головоломки, их очень просто воспроизвести, но решения обычно удивляют. И вместо того, чтобы фокусировать наше внимание на загадочных подробностях, эти головоломки помогают изучить некоторые глубинные принципы работы TCP.
Лекции Техносферы. Подготовительный курс «Алгоритмы и структуры данных» (весна 2016) от Olga_ol
Цель этого курса — познакомить слушателей с основными алгоритмами, применяемыми для разработки программного обеспечения. Вы научитесь выбирать подходящие структуры данных и алгоритмы для реализации возникающих задач, и узнаете, как использовать языки С/С++ для реализации алгоритмов.
Эффективное хранение: как мы из 50 Пб сделали 32 Пб от AndrewSumin
Изменения курса рубля два года назад заставили нас задуматься о способах снижения стоимости железа для Почты Mail.Ru. Нам понадобилось уменьшить количество закупаемого железа и цену за
О языке С и производительности от AloneCoder
Если программист хорошо знаком только с высокоуровневыми языками, например, PHP, то ему не так просто освоить некоторые идеи, свойственные низкоуровневым языкам и критичные для понимания возможностей информационно-вычислительных процессов. По большей части причина в том, что в низко- и высокоуровневых языках мы решаем разные проблемы. Но как можно считать себя профессионалом в каком-либо (высокоуровневом) языке, если даже не знаешь, как именно работает процессор, как он выполняет вычисления, эффективным ли способом? Сегодня автоматическое управление памятью становится главной проблемой в большинстве высокоуровневых языков, и многие программисты подходят к её решению без достаточной теоретической базы. Знание низкоуровневых процессов сильно помогает в разработке эффективных высокоуровневых программ.
Накануне дня рождения первой женщины-программиста: моя история от 6thSence
«Ты ж девочка, зачем тебе это?» или «У женщин
Отладка вашей ОС: урок по выделению памяти от AloneCoder
Рассказ о том, как, на первый взгляд, непримечательный отчёт о баге привёл к целому расследованию в системе выделения памяти в Linux.
Правда о традиционных JavaScript-бенчмарках от AloneCoder
Для многих из тех, кто изучал языки программирования, компиляторы и виртуальные машины, всё ещё удивителен тот факт, что при всей своей элегантности с точки зрения структуры языка JavaScript не слишком хорошо оптимизируем с точки зрения компилирования и не может похвастаться замечательной стандартной библиотекой. В зависимости от того, кто ваш собеседник, вы можете неделями перечислять недоработки в JavaScript и всё равно обнаружите какую-то странность, о которой ещё не слышали. Но несмотря на очевидные недостатки, сегодня JavaScript является ключевой технологией в вебе, идет к доминированию в серверной/облачной сфере (благодаря Node.js), а также проникает в интернет вещей.
Спасибо всем, кто читал нас, комментировал, ставил плюсы и минусы. Надеемся, что в грядущем году посты будут еще интереснее. С наступающим!
Автор: Mail.Ru Group