Как стать автором
Обновить
39
0
Александр Меренков @nosterx

Заинтересованный наблюдатель

Отправить сообщение

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

Время на прочтение23 мин
Количество просмотров227K

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

Одна из простых задач звучит так: «При переводе картинки из цветового пространства RGB в YUV мы выполняем прореживание, то есть выкидываем каждый четный столбец и каждую четную строку в компонентах U и V (все компоненты пикселя по 1 байту). Вопрос: во сколько раз меньше данных у нас стало?» Эта операция называется chroma subsampling и широко используется при сжатии видео, например.

Забавно, что когда-то давно, когда винчестеры были меньше, а дискеты больше, студенты реально отвечали на этот вопрос быстро. А в последние годы регулярно народ в ступор впадает. Приходится разбирать по частям: «Если выкинуть каждую четную строку и каждый четный столбец, во сколько раз меньше данных будет у компоненты?» Почти хором: «В четыре». Начинаю подкалывать: «Отлично! У нас было 3 яблока, первое осталось как есть, а от второго и третьего осталось по четвертинке. Во сколько раз меньше яблок у нас стало?» Народ ржет, но, наконец-то, дает правильный ответ (заметим, не все). 

Это было бы смешно, если бы от способности быстро в уме прикинуть результат не зависела способность быстрее создавать сложные алгоритмы. 

И хорошо видно, как эта способность в широких массах студентов заметно плавно падает. Причем не только в нашей стране. Придуман даже специальный термин: «цифровое слабоумие» ("digital dementia") — снижение когнитивных способностей, достаточно серьезное, чтобы повлиять на повседневную деятельность человека. 

Кому интересно как теряют мозг студенты масштабы бедствия и что с этим делать — добро пожаловать под кат!

Читать далее
Всего голосов 411: ↑395 и ↓16+379
Комментарии795

Полный разбор экзамена ШАД-2019

Время на прочтение6 мин
Количество просмотров37K
Привет! Меня зовут Азат, я студент 3 курса Факультета Компьютерных Наук ВШЭ. На днях ко мне обратился знакомый с Экономики ВШЭ и попросил помочь с решением задач вступительного экзамена в ШАД. Мы с однокурсником Даниилом посмотрели на задания, они показались нам довольно сложными, но очень интересными, захотелось поломать над ними голову. В итоге мы прорешали 1 из вариантов 2019 года и хотим показать наши решения миру.


Читать дальше →
Всего голосов 17: ↑16 и ↓1+15
Комментарии21

Большие данные мертвы. Это нужно принять

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров71K

Уже более десяти лет тот факт, что люди с трудом извлекают из своих данных полезную информацию, сбрасывают на чересчур большой размер этих данных. «Объем собираемой информации слишком велик для ваших хилых систем», — такой нам ставили диагноз. А лекарство, соответственно, заключалось в том, чтобы купить какую‑нибудь новую причудливую технологию, которая сможет работать в больших масштабах. Конечно, после того, как целевая группа по Big Data покупала новые инструменты и мигрировала с устаревших систем, компании снова обнаруживали, что у них по‑прежнему возникают проблемы с пониманием своих данных.

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

Мир в 2023 году выглядит иначе, чем когда зазвенели первые тревожные звоночки по поводу Big Data. Катаклизм обработки информации, который все предсказывали, не состоялся. Объемы данных, возможно, немного возросли, но возможности аппаратного обеспечения росли еще быстрее. Поставщики услуг все еще продвигают свои возможности масштабирования, но люди, которые сталкиваются с ними на практике, начинают задаваться вопросом, как они вообще связаны с их реальными проблемами.

А дальше будет и того интереснее.

Читать далее
Всего голосов 150: ↑145 и ↓5+140
Комментарии76

Краткий путеводитель по математике для иностранцев

Время на прочтение25 мин
Количество просмотров28K


О чем это


А как можно на четвёртом десятке и с аверсией к алгебре наверстать требуемый материал первых курсов университета?

Безумству храбрых поем мы песню!

Целевой аудиторией Путеводителя являются те, кто внезапно заинтересовался математикой или чувствует потребность повысить свою профессиональную эффективность, но по какой-либо причине не имеет возможности отдать несколько лет своей жизни академическому образованию. Если у вас возникла потребность разобраться, но фундаментальных знаний катастрофически не хватает, и вы чувствуете себя иностранцем в стране математики, где говорят на непонятном языке, попробуйте пройти этот путь в качестве туриста. Весь маршрут представляет собой обзорную экскурсию и рассчитан на несколько дней, максимум две недели. Для сравнения: полный академический курс составляет около пяти лет. Конечной целью предлагаемого маршрута является знакомство с принципами одного узкоспециального раздела — эллиптической криптографии. Однако до конца идти не обязательно, если этот раздел лежит вне сферы ваших интересов или вы столкнулись с серьезными трудностями или опасностями. Но, раз уж вы взяли в руки Путеводитель, всё же постарайтесь дойти хотя бы до конца раздела «Язык формул».


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


А теперь, зная, что царских дорог здесь нет, попробуем проложить хотя бы туристическую тропинку.

Читать дальше →
Всего голосов 83: ↑78 и ↓5+73
Комментарии35

Быстрая, экономная, устойчивая…

Время на прочтение10 мин
Количество просмотров60K

Если вам понадобится алгоритм сортировки массива, который:
  • Работал бы гарантированно за O(N*log(N)) операций (обменов и сравнений);
  • Требовал бы O(1) дополнительной памяти;
  • Был бы устойчивым (то есть, не менял порядок элементов с одинаковыми ключами)

то вам, скорее всего, предложат ограничиться любыми двумя из этих трёх пунктов. И, в зависимости от вашего выбора, вы получите, например, либо сортировку слиянием (требует O(N) дополнительной памяти), либо пирамидальную сортировку (неустойчив), либо сортировку пузырьком (работает за O(N2)). Если вы ослабите требование на память до O(log(N)) («на рекурсию»), то для вас найдётся алгоритм со сложностью O(N*(log(N)2) — довольно малоизвестный, хотя именно его версия используется в реализации метода std::stable_sort().

На вопрос, можно ли добиться выполнения одновременно всех трёх условий, большинство скажет «вряд ли». Википедия о таких алгоритмах не знает. Среди программистов ходят слухи, что вроде бы, что-то такое существует. Некоторые говорят, что есть «устойчивая быстрая сортировка» — но у той реализации, которую я видел, сложность была всё те же O(N*(log(N)2) (по таймеру). И только в одном обсуждении на StackOverflow дали ссылку на статью B-C. Huang и M. A. Langston, Fast Stable Merging and Sorting in Constant Extra Space (1989-1992), в которой описан алгоритм со всеми тремя свойствами.

Так что же это за алгоритм?
Всего голосов 155: ↑150 и ↓5+145
Комментарии29

Ваш компьютер на самом деле не ваш

Время на прочтение15 мин
Количество просмотров68K

Вот он. Наступил. Получите и распишитесь.

Речь, конечно, идет о мире, предсказанном Ричардом Столлманом в 1997 году. О мире, о котором нас предупреждал Кори Доктороу.

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

Оказывается, текущая версия macOS отправляет в Apple хэш (уникальный идентификатор) при запуске каждой программы. Многие люди не были в курсе этого, так как хэш передается незаметно и только при наличии выхода в интернет. А сегодня серверы работали очень медленно и не успевали проверять хэши. Как результат, все приложения не открывались, если имелся выход в интернет.

P. S. Перевел статью целиком только из-за того, что текущий перевод вообще не соответствует уровню статей Хабра.

Расшифровать хэши за Apple
Всего голосов 86: ↑79 и ↓7+72
Комментарии102

Разбираемся с SOLID: Инверсия зависимостей

Время на прочтение6 мин
Количество просмотров155K

Давайте глянем на определение принципа инверсии зависимостей из википедии:


Принцип инверсии зависимостей (англ. dependency inversion principle, DIP) — важный принцип объектно-ориентированного программирования, используемый для уменьшения связанности в компьютерных программах. Входит в пятёрку принципов SOLID.

Формулировка:

A. Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций.
B. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

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

Читать дальше →
Всего голосов 37: ↑33 и ↓4+29
Комментарии21

Specification By Example – BDD для прагматиков

Время на прочтение11 мин
Количество просмотров96K

На Хабре довольно много упоминаний о BDD. К сожалению, статьи, которые я читал, так и не дали мне ответа на вопрос «а зачем мне все это нужно?» Ответ пришел с неожиданной стороны. Когда я всерьез занялся вопросом автоматизации приемочного тестирования, мне под руку попалась книга Gojko Adzic (не уверен в транскрипции, поэтому не стал переводить имя автора) Specification By Example.
Читая ее, я не уставал удивляться: каждая новая глава описывала шишки, которые я набивал на своем личном опыте, и предлагала решения аналогичные или лучшие, чем те, к которым я приходил сам методом проб и ошибок.

Эта статья – первая в цикле «BDD для прагматиков». В ней описаны ключевые элементы наиболее эффективного, на мой взгляд, процесса разработки коммерческого ПО в современных условиях. Два продолжения будут посвящены работе со SpecFlow и автоматизации приемочного тестирования.
Часть первая - живая документация
Всего голосов 34: ↑31 и ↓3+28
Комментарии32

Топ-65 вопросов по SQL с собеседований, к которым вы должны подготовиться в 2019 году. Часть I

Время на прочтение9 мин
Количество просмотров399K


Перевод статьи подготовлен для студентов курса «MS SQL Server разработчик»




Реляционные базы данных являются одними из наиболее часто используемых баз данных по сей день, и поэтому навыки работы с SQL для большинства должностей являются обязательными. В этой статье с вопросами по SQL с собеседований я познакомлю вас с наиболее часто задаваемыми вопросами по SQL (Structured Query Language — язык структурированных запросов). Эта статья является идеальным руководством для изучения всех концепций, связанных с SQL, Oracle, MS SQL Server и базой данных MySQL.

Читать дальше →
Всего голосов 62: ↑33 и ↓29+4
Комментарии88

Различия между Docker, containerd, CRI-O и runc

Время на прочтение5 мин
Количество просмотров69K

Появление Docker привело к взрывному росту популярности контейнеров, но с тех пор появились и другие инструменты. К сожалению, разобраться в них может быть совсем непросто. Но мы попробуем! И если вы считаете себя единственным, кто всего этого пока не понимает, не волнуйтесь... Это не так!

Читать далее
Всего голосов 47: ↑47 и ↓0+47
Комментарии4

Играющий тренер в ИТ: запретить нельзя допустить

Время на прочтение9 мин
Количество просмотров8.7K

«Играющий тренер» – термин, пришедший в IT из мира спорта. Он подразумевает, что руководитель одновременно занимается как управленческими задачами (планирование, контроль), так и решает вполне рядовые (пишет код, настраивает сервера и т.д.). Считается, что совмещать эти роли нельзя, но в жизни, как и в палитре, есть куча оттенков между «можно» и «нельзя». Под катом будет мой жизненный опыт в роли этого самого играющего тренера, я расскажу о плюсах и минусах, а также попробую подвести некий итог своего опыта в этой роли.

Читать далее
Всего голосов 18: ↑16 и ↓2+14
Комментарии23

Типичные ошибки архитектора, или Как перестать бояться и полюбить RFC

Время на прочтение8 мин
Количество просмотров25K

Всем привет! С вами Женя, разработчик Dodo Engineering и один из ведущих подкаста «Читаем вместе». Он посвящен IT-книгам. В каждом сезоне мы планируем читать и разбирать одну книгу. Уже подходит к концу первый сезон, который мы посвятили книге Fundamentals of Software Architecture. Она написана архитекторами для архитекторов, но разработчикам, особенно тем, которые интересуются, как создавать работающие системы, тоже может быть очень интересна и полезна.

Глава про архитектурные решения сильно нас зацепила, потому что в своей работе мы напрямую столкнулись с описанными в ней проблемами. 

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

Знакомо? Нам тоже. Но мы смогли победить эти проблемы.

Под катом выжимка из главы и нашего выпуска, а также практический опыт Dodo Engineering, как правильно оформлять и хранить архитектурные решения.

Читать далее
Всего голосов 38: ↑37 и ↓1+36
Комментарии5

Немного внутренностей словарей в CPython (и PyPy)

Время на прочтение9 мин
Количество просмотров52K
Внутреннее устройство словарей в Python не ограничивается одними лишь бакетами и закрытым хешированием. Это удивительный мир разделяемых ключей, кеширования хешей, DKIX_DUMMY и быстрого сравнения, которое можно сделать ещё быстрее (ценой бага с примерной вероятностью в 2^-64).

Если вы не знаете количество элементов в только что созданном словаре, сколько памяти расходуется на каждый элемент, почему теперь (CPython 3.6 и далее) словарь реализован двумя массивами и как это связано с сохранением порядка вставки, или просто не смотрели презентацию Raymond Hettinger «Modern Python Dictionaries A confluence of a dozen great ideas». Тогда добро пожаловать.


Впрочем, люди знакомые с лекцией, тоже могут найти немного подробностей и свежей информации, и для совсем новичков, не знакомых с бакетами и закрытым хешированием, статья тоже будет интересна.
Всего голосов 24: ↑24 и ↓0+24
Комментарии7

Всё, о чём должен знать разработчик Телеграм-ботов

Время на прочтение15 мин
Количество просмотров598K

Вы вряд ли найдете в интернете что-то про разработку ботов, кроме документаций к библиотекам, историй "как я создал такого-то бота" и туториалов вроде "как создать бота, который будет говорить hello world". При этом многие неочевидные моменты просто нигде не описаны.

Как вообще устроены боты? Как они взаимодействуют с пользователями? Что с их помощью можно реализовать, а что нельзя?

Подробный гайд о том, как работать с ботами — под катом.

Читать далее
Всего голосов 127: ↑127 и ↓0+127
Комментарии73

Clean Architecture глазами Python-разработчика

Время на прочтение10 мин
Количество просмотров29K
Привет! Меня зовут Евгений, я Python-разработчик. Последние полтора года наша команда стала активно применять принципы Clean Architecture, уходя от классической модели MVC. И сегодня я расскажу о том, как мы к этому пришли, что нам это дает, и почему прямой перенос подходов из других ЯП не всегда является хорошим решением.


Читать дальше →
Всего голосов 13: ↑13 и ↓0+13
Комментарии26

Коллеги, вы меня огорчаете

Время на прочтение12 мин
Количество просмотров170K
В июле и августе 2020 года я, с подачи Григория Петрова, проводил для компании Evrone технические интервью на позицию Senior Golang Backend developer. И, видимо, буду вынужден продолжать проводить, о чём ниже.

Задача формулировалась как «найти человека, который сможет задать и поддерживать высокий уровень профессионализма в применении языка Go». То есть, сформулирована она была по-человечески, перевод на канцелярит — мой. Под эту задачу я сформировал новый опросник вместо того, которым пользовался несколько лет — старый был с жестким закосом под DevOps. Методику, которой я пользуюсь для создания опросников и количественной оценки соответствия кандидатов, я излагал в своем докладе «Техническое интервью как инженерная задача» на конференции Saint TeamLead 2019.

И вот что я хочу сказать вам, коллеги: вы меня огорчаете.


Читать дальше →
Всего голосов 181: ↑137 и ↓44+93
Комментарии1152

Стажёр Вася и его истории об идемпотентности API

Время на прочтение11 мин
Количество просмотров222K

Идемпотентность — звучит сложно, говорят о ней редко, но это касается всех приложений, использующих API в своей работе.


Меня зовут Денис Исаев, и я руковожу одной из бэкенд групп в Яндекс.Такси. Сегодня я поделюсь с читателями Хабра описанием проблем, которые могут возникнуть, если не учитывать идемпотентность распределенных систем в своем проекте. Для этого я выбрал формат вымышленных историй о стажёре Васе, который только-только учится работать с API. Так будет нагляднее и полезнее. Поехали.


image

Читать дальше →
Всего голосов 219: ↑216 и ↓3+213
Комментарии163

Макросы для питониста. Доклад Яндекса

Время на прочтение8 мин
Количество просмотров15K
Как можно расширить синтаксис Python и добавить в него необходимые возможности? Прошлым летом на PyCon я постарался разобрать эту тему. Из доклада можно узнать, как устроены библиотеки pytest, macropy, patterns и как они добиваются таких интересных результатов. В конце есть пример кодогенерации с помощью макросов в HyLang — Lisp-образного языка, бегущего поверх Python.


— Привет, ребята. Хочу в первую очередь поблагодарить организаторов PyCon. Я разработчик в Яндексе. Доклад будет совсем не про работу, а про экспериментальные вещи. Возможно, кого-то из вас они наведут на мысль, что в Python можно делать клевые штуки, о которых вы раньше даже не догадывались, не мыслили в эту сторону.
Читать дальше →
Всего голосов 24: ↑22 и ↓2+20
Комментарии8

10 отличных Github репозиториев, которые должен знать каждый веб-разработчик

Время на прочтение3 мин
Количество просмотров97K

Кроме огромных репозиториев с источниками для подготовки к интервью, здесь много чего интересного


Я собрал список из десяти отличных репозиториев на Github, которые помогут вам существенно расширить свои знания.


image


А я его перевел, т.к. показалось, что пост многим будет интересен. Перевод очень вольный: я опустил нерелевантные промо-ссылки и гипер эмоциональные похвалы автора оригинала, чтобы оставить только суть. Еще, обновил цифры, чтобы информация была более актуальной к моменту публикации этого перевода. Итак, перейдем к списку.
Читать дальше →
Всего голосов 76: ↑69 и ↓7+62
Комментарии8

Jaeger Opentracing и Microservices в реальном проекте на PHP и Golang

Время на прочтение6 мин
Количество просмотров29K
Всем привет, меня зовут Юрий Буйлов, я руковожу разработкой в CarPrice. Коротко расскажу как и почему мы пришли к микросервисам на PHP и Golang. Что используем, как инструментируем и мониторим наши приложения в production. Далее расскажу о распределенном трейсинге, который обеспечивает нам прозрачность работы сервисов.


Читать дальше →
Всего голосов 21: ↑20 и ↓1+19
Комментарии10
1

Информация

В рейтинге
Не участвует
Откуда
Челябинск, Челябинская обл., Россия
Зарегистрирован
Активность