Этот год был… необычный. Мы очень рады, что он наконец-то заканчивается, и надеемся, что следующий будет благополучнее для всех. И по нашей маленькой традиции подводим итоги блога с самыми жирными постами по плюсам. В довесок публикуем чемпионов по комментариям, добавлениям в избранное и просмотрам для невошедших в первый шорт-лист.
Чемпионы по рейтингу
Zip-файлы: история, объяснение и реализация (AloneCoder)
Мне давно было интересно, как сжимаются данные, в том числе в Zip-файлах. Однажды я решил удовлетворить своё любопытство: узнать, как работает сжатие, и написать собственную Zip-программу. Реализация превратилась в захватывающее упражнение в программировании. Получаешь огромное удовольствие от создания отлаженной машины, которая берёт данные, перекладывает их биты в более эффективное представление, а затем собирает обратно. Надеюсь, вам тоже будет интересно об этом читать.
Коты в коробочках, или Компактные структуры данных (Serine)
Как быть, если дерево поиска разрослось на всю оперативку и вот-вот подопрет корнями соседние стойки в серверной? Что делать с инвертированным индексом, жадным до ресурсов? Завязывать ли с разработкой под Android, если пользователю прилетает «Память телефона заполнена», а приложение едва на половине загрузки важного контейнера?
В целом, можно ли сжать структуру данных, чтобы она занимала заметно меньше места, но не теряла присущих ей достоинств? Чтобы доступ к хэш-таблице оставался быстрым, а сбалансированное дерево сохраняло свои свойства. Да, можно! Для этого и появилось направление информатики «Succinct data structures», исследующее компактное представление структур данных. Оно развивается с конца 80-х годов и прямо сейчас переживает расцвет в лучах славы big data и highload.
Чему меня, как разработчика, научили аварии в космосе (AloneCoder)
Андрей Ситник, автор PostCSS и Автопрефиксера, сделал подборку историй, связанных с освоением космоса Советским Союзом. Вы узнаете, какие уроки из них извлёк Андрей, чтобы вырасти как разработчик и участник опенсорс-движения. Неудачная стыковка, драматический вход в атмосферу и уникальный переход вдоль поручня между космическими кораблями — какое отношение всё это имеет к современной веб-разработке? Обо все этом читайте в посте!
Хабр Конвертер: чтобы версталось легко (AloneCoder)
Наверняка многие из вас хотя бы однажды пользовались хабраконвертером, который официально рекомендован администрацией Хабра — https://shirixae.github.io/habraconverter-v2/. Несколько лет назад его создал хабравчанин meta4, а потом доработал Shirixae. Принцип простой: открываете гуглодок с постом, Ctrl-A, Ctrl-C и вставляете в окно конвертера. Нажимаете кнопку «Конвертировать» и получаете готовый код вёрстки, который можно вставлять в редактор Хабра и публиковать. Только перед этим нужно пройтись и поправить кое-какие мелочи.
И всё бы хорошо, если верстать приходится не слишком часто. Или посты небольшие, несложные. Но если вы верстаете помногу, и в постах есть и картинки, и таблицы, и куски кода, то из раза в раз приходится делать рутину: вставлять нужные пустые строки и убирать лишние, заменять теги <sоurce> на <cоde>, и т.д. и т.п. Мы решили потратить день, чтобы потом долетать за час, и допилили конвертер.
SHISHUA: самый быстрый в мире генератор псевдослучайных чисел (AloneCoder)
Полгода назад мне захотелось создать лучший генератор псевдослучайных чисел (ГПСЧ) с какой-нибудь необычной архитектурой. Я думал, что начало будет лёгким, а по мере работы задача станет медленно усложняться. И думал, смогу ли я научиться всему достаточно быстро, чтобы справиться с самым сложным.
Как реализованы конвейеры в Unix (AloneCoder)
В этой статье описана реализация конвейеров в ядре Unix. Я был несколько разочарован, что недавняя статья под названием «Как работают конвейеры в Unix?» оказалась не про внутреннее устройство. Мне стало интересно, и я зарылся в старые источники, чтобы найти ответ.
Об одной уязвимости в… (z3apa3a)
21 марта 2019, в баг баунти программу Mail.ru на HackerOne пришел очень хороший багрепорт от maxarr. При внедрении нулевого байта (ASCII 0) в POST-параметр одного из API-запросов веб-почты, который возвращал HTTP-редирект, в данных редиректа виднелись куски неинициализированной памяти, в которых чаще всего раскрывались фрагменты из GET-параметров и заголовков других запросов к тому же серверу.
Это критическая уязвимость, т.к. запросы содержат в том числе сессионные куки. Через несколько часов был сделан временный фикс, который фильтровал нулевой байт (как потом выяснилось, этого было недостаточно, т.к. оставалась возможность инъекции CRLF /ASCII 13, 10, что позволяет манипулировать заголовками и данными HTTP-ответа, это менее критично, но все равно неприятно). Одновременно с этим проблема была передана аналитикам безопасности и разработчикам для поиска и устранения причин возникновения бага.
ZFS: архитектура, особенности и отличия от других файловых систем (gmelikov)
Я, Георгий Меликов, являюсь контрибьютором проектов OpenZFS и ZFS on Linux. Также я занимаюсь разработкой IaaS в команде облачной платформы Mail.ru Cloud Solutions. Хотя в продакшене нашего подразделения мы и не используем ZFS, но хозяева подкаста SDCast пригласили меня рассказать именно о нём. Из выпуска и родилась эта статья, а вот тут можно послушать аудиоверсию.
Итак, сегодня я рассказываю про ZFS. Как устроена файловая система ZFS, из каких компонентов она состоит и как работает, а также про новые фичи, которые появились или скоро появятся в последних релизах.
Почему мы выбрали MobX, а не Redux, и как его использовать эффективнее (ngOo)
Меня зовут Назим Гафаров, я разработчик интерфейсов в Mail.ru Cloud Solutions. На дворе 2020 год, а мы продолжаем обсуждать «нововведения» ES6-синтаксиса и преимущества MobX над Redux. Существует много причин использовать Redux в своем проекте, но так как я не знаю ни одной, расскажу о том, почему мы выбрали MobX.
Как генерируются UUID (AloneCoder)
Вы наверняка уже использовали в своих проектах UUID и полагали, что они уникальны. Давайте рассмотрим основные аспекты реализации и разберёмся, почему UUID практически уникальны, поскольку существует мизерная возможность возникновения одинаковых значений.
Современную реализацию UUID можно проследить до RFC 4122, в котором описано пять разных подходов к генерированию этих идентификаторов. Мы рассмотрим каждый из них и пройдёмся по реализации версии 1 и версии 4.
Чемпионы по комментариям
Математика восхождения по лестнице богатства (randall)
С точки зрения программиста среднемесячная зарплата в России составляет 44 тыс. руб. — ниже всяческих ожиданий богатства и успеха. Но откуда вообще берутся представления об успехе, финансовом достатке и о методах их достижения?
Как изменится ваша жизнь, если дать вам 10 тыс. руб.? А как насчет 1 млн руб.? Или 100 млн руб.? Ответ на этот вопрос не так прост, как кажется, и зависит от вашего возраста, семейного положения и текущих накоплений. Еще более важно, что изменения, которые произойдут с вашим поведением после того, как у вас появится такая сумма, могут многое рассказать о текущем финансовом положении.
Стюарт Баттерфилд, создатель Flickr и Slack, развил эту мысль до самобытной концепции «пирамиды богатства», которая помогает прийти к парадоксальному выводу: даже большие деньги не обязательно улучшат вашу жизнь каким-либо заметным образом.
Кибербуллинг: почему люди становятся наблюдателями (kseniaegorova)
Мы провели масштабное исследование и изучили поведение людей, которые при столкновении с агрессией, направленной на других, занимают наблюдательную позицию. Результаты исследования 2019 года показали, что таких в рунете 60%. А в этом году мы узнали, почему наблюдатели бездействуют, что заставляет их оказывать помощь жертвам агрессии и есть ли разница между их действиями в интернете и в реальной жизни.
Исследование проводилось в сентябре-октябре 2020 года совместно с Research.me, UX-лабораторией Mail.ru Group и UXSSR. Здесь вы можете скачать полные результаты исследования. Некоторые из них весьма печальны для нашего общества. Второй карантин, экономический кризис, преддверие зимы — всё это не помогает людям быть добрее и терпимее друг к другу. Это подтверждает опрос: половина респондентов считает, что уровень агрессии в обществе вырос в ходе пандемии. Причём эта агрессия в интернете чаще всего не обоснована. Любопытно, что люди считают грубость и оскорбления в интернете неприемлемыми — но готовы использовать их для самозащиты. Прямо напрашивается аналогия с физическим нападением.
Какой язык программирования учить, чтобы за вами охотились HR крупных компаний (DmtrKzmn)
Десять лет назад язык программирования PHP был в лидерах рейтингов, а сейчас проекты в веб все чаще написаны на JavaScript и Python. Обидно потратить на изучение языка год или два, а потом остаться без работы.
Мы в Mail.ru Cloud Solutions изучили аналитику, исследования, мнения разработчиков и крупных работодателей о том, какие языки программирования будут востребованы в ближайшие годы. И рассказываем, на что ориентироваться при выборе.
Чемпионы по добавлению в избранное
Как облегчить себе жизнь при использовании Git (а также подборка материалов для глубокого погружения) (pxeno)
Для тех, кто каждый день использует Git, но чувствует себя неуверенно, команда Mail.ru Cloud Solutions перевела статью фронтенд-разработчика Шейна Хадсона. Здесь вы найдете несколько трюков и советов, которые могут немного облегчить работу с Git, а также подборку статей и мануалов более продвинутого уровня.
Git появился почти 15 лет назад. За это время он прошел путь от андердога до непобедимого чемпиона. Сегодня новые проекты часто начинают с команды git init. Несомненно, это важный инструмент, который многие из нас используют ежедневно, но зачастую он напоминает магию — яркую, но опасную.
На Хабре опубликовано много статей, как начать работу с Git, как устроен Git под капотом, описания лучших стратегий ветвления. Здесь автор сфокусировался на том, как упростить работу с Git.
Саморазвитие: как я не усидел на двух стульях и нашел третий (EdT)
Я руковожу командой антиспама в Mail.ru Group, а также несколькими группами по машинному обучению. Тема этой статьи — саморазвитие для тимлидов/руководителей, но на самом деле многие техники и рецепты совершенно не зависят от роли. Для меня этот вопрос очень актуален, так как машинное обучение развивается крайне стремительно, и чтобы хотя бы быть в теме, надо потратить уйму времени. Поэтому вопрос, как и на что тратить время для развития, стоит достаточно остро.
Контент статьи, разумеется, не истина в последней инстанции, а всего лишь описание результатов моего продолжающегося квеста, в котором изложены сработавшие для меня подходы, основанные на книгах и тренингах, на пробах и ошибках. Буду рад подискутировать с вами в комментариях.
Полный список вопросов с собеседований по Python для дата-сайентистов и инженеров (pxeno)
Бывает, что компания ищет дата-сайентиста, а на самом деле ей нужен Python-разработчик. Поэтому при подготовке к собеседованию есть смысл освежить в памяти информацию по Python, а не только штудировать алгоритмы.
Команда Mail.ru Cloud Solutions перевела статью разработчика, который не раз попадал в такую ситуацию и на основе своего опыта составил список из 53 вопросов и ответов для подготовки к собеседованию. Большинство исследователей данных пишут много кода, поэтому такой список пригодится и дата-сайентистам, и инженерам. Он будет полезен и для соискателей, и для тех, кто проводит собеседования, и для тех, кто просто изучает Python.
Чемпионы по просмотрам
Созерцание великого фрактального подобия (randall)
Фракталы — не просто красивое природное явление. Согласно проведенным исследованиям, рассматривание фрактальных структур на 60 % повышает стрессоустойчивость, измеряемую на основе физиологических показателей. При созерцании фракталов в лобной коре головного мозга всего за одну минуту увеличивается активность альфа-волн — как во время медитации или при ощущении легкой сонливости.
Неудивительно, что фрактальный биодизайн оказывает на человека умиротворяющее воздействие. Нам нравится смотреть на облака, на языки пламени в камине, на листву в парке… Как это работает? Ученые предполагают, что естественный ход поисковых движений наших глаз — фрактальный. При совпадении размерности траектории движения глаз и фрактального объекта мы впадаем в состояние физиологического резонанса, за счет чего активизируется деятельность определенных участков мозга.
Но не все фракталы одинаково полезны. В данной статье расскажем о фрактальной размерности и о её влиянии на здоровье.
Определяем COVID-19 на рентгеновских снимках с помощью Keras, TensorFlow и глубокого обучения (AloneCoder)
С помощью этого руководства мы с помощью Keras, TensorFlow и глубокого обучения научимся на собранном вручную датасете из рентгеновских снимков автоматически определять COVID-19.
Мнемотехника: исследуем методы увеличения памяти мозга (randall)
Хорошая память нередко является врожденной особенностью некоторых людей. И потому нет смысла соревноваться с генетическими «мутантами», изматывать себя тренировками, включающими запоминание стихотворений и придумывание ассоциативных историй. Раз все записано в геноме, выше головы не прыгнешь.
Действительно, строить, как Шерлок, дворцы памяти и визуализировать любую последовательность информации не каждому дано. Если вы перепробовали основные приемы, перечисленные в статье по мнемонике в Википедии, и у вас ничего не получилось, то ничего страшного в этом нет — техники запоминания для перегруженного работой мозга становятся сверхзадачей.
Однако не все так плохо. Научные исследования показывают[1], что некоторые мнемотехники буквально физически могут поменять структуру мозга и повысить скилл управления памятью. Многие из самых успешных в мире мнемонистов, участвующих в профессиональных соревнованиях по запоминанию, начинали учиться уже в зрелом возрасте, и им удалось значительно усилить возможности мозга.
Спасибо всем дочитавшим. И с наступающим!