Программисты часто сталкиваются с проблемами чтения математических нотаций, когда пытаются разобраться с теоретическими основами какого-либо языка программирования. Также с ними толкнулся и я в своих теоретических изысканиях. К счастью, мне очень помогла замечательная статья Джереми Сиека (Jeremy Siek), чьим переводом я хочу с вами поделиться. Надеюсь она поможет многим программистам-«не математикам».
Кирилл
@kirikm
Пользователь
Разбор всех задач финального раунда Яндекс.Алгоритма 2015
17 min
71KСегодня завершился финал Яндекс.Алгоритма — ежегодного чемпионата по спортивному программированию, который организует Яндекс. В 2015 году состязание проходило полностью в онлайне — на платформе Яндекс.Контест. Заявки на участие подали программисты из 73 стран. Больше всего участников — из России, Украины, Беларуси, Казахстана, Индии, США, Японии и Китая, но вообще география чемпионата крайне обширна — Бразилия, Индонезия, Перу, Доминиканская Республика, Мозамбик, Сенегал, Каймановы острова. 8,9% зарегистрировавшихся — девушки. Примерно половина всех участников — студенты. Всего мы получили заявки от 3722 человек, из которых до финала дошли 28.
А победителем Яндекс.Алгоритма-2015 стал Геннадий Короткевич. Онпо привычке показал лучший результат, решив в финальном раунде пять из шести задач и получив при этом 80 минут штрафного времени. Геннадий занимал первое место в чемпионате Яндекса и в 2013, и в 2014 годах.

Второе место занял Пётр Митричев, а третье — Евгений Капун. Они решили по четыре задачи, при этом Пётр набрал 31 штрафную минуту, а Евгений — 79 минут. Результаты всех финалистов можно посмотреть на сайте Яндекс.Алгоритма.
Задачи для Яндекс.Алгоритма составляет международная команда, в которую входят как сотрудники Яндекса, так и приглашённые эксперты — в том числе победители и финалисты состязаний ACM ICPC и Topcoder Open. И мы по традиции подготовили для вас разборы всех заданий. Решить все из них никому не удалось. Больше всего участников справились с задачей B, а вот задания A и D решило всего по одному человеку.
А победителем Яндекс.Алгоритма-2015 стал Геннадий Короткевич. Он

Второе место занял Пётр Митричев, а третье — Евгений Капун. Они решили по четыре задачи, при этом Пётр набрал 31 штрафную минуту, а Евгений — 79 минут. Результаты всех финалистов можно посмотреть на сайте Яндекс.Алгоритма.
Задачи для Яндекс.Алгоритма составляет международная команда, в которую входят как сотрудники Яндекса, так и приглашённые эксперты — в том числе победители и финалисты состязаний ACM ICPC и Topcoder Open. И мы по традиции подготовили для вас разборы всех заданий. Решить все из них никому не удалось. Больше всего участников справились с задачей B, а вот задания A и D решило всего по одному человеку.
SpiderTest: автотесты своими руками
7 min
33K
Довольно часто среди начинающих (и даже не очень) тестировщиков приходится слышать: «вот если бы я умел писать автотесты, я бы…». Как правило этим «если бы» ребята и ограничиваются. На вопрос: «А почему не учишься писать?» чаще всего отвечают: «Программирование это не мое». Действительно, тем для кого программирование темный лес, погрузиться в мир автотестов довольно затруднительно, ведь скрипт сам себя не напишет. В этой статье я хотел бы поговорить о том, как из ручного тестировщика стать крутым автотестером.
14 новых ролей в Big Data
4 min
22KКоличество данных растет с каждым днем огромными рывками. Ежедневно в сеть заливается 2,3 триллиона гигабайт данных. К 2017 году ожидается, что количество данных вырастет на 800%. Чем больше данных, тем выше спрос на специалистов по их обработке.
Наука о данных настолько динамично развивается, что у каждого специалиста есть своя узкая зона ответственности. Мартин Джонс (Martin Jones), CEO и co-founder в Cambriano Energy предлагает выделить 14 основных ролей в работе с большими данными.

Наука о данных настолько динамично развивается, что у каждого специалиста есть своя узкая зона ответственности. Мартин Джонс (Martin Jones), CEO и co-founder в Cambriano Energy предлагает выделить 14 основных ролей в работе с большими данными.

Семь принципов создания современных веб-приложений
19 min
185K
Tutorial
Translation
Эта статья основана на моей презентации с конференции BrazilJS в августе 2014 года. Она базируется на идеях, о которых я писал в блоге недавно, в основном, в связи с UX и производительностью.
Я хочу представить 7 действенных принципов для веб-сайтов, которые хотят применить JavaScript для управления UI. Эти принципы являются результатом моей работы как веб-дизайнера, но также как давнего пользователя WWW.
JavaScript бесспорно стал незаменимым инструментом для разработчиков фронтенда. Сейчас сфера его применения расширяется на другие области, такие как серверы и микроконтроллеры. Этот язык программирования выбрали престижные университеты, чтобы обучать студентов основам информатики.
В то же время существует ряд вопросов относительно его роли и конкретного использования, на которые многие затрудняются ответить, в том числе авторы фреймворков и библиотек.
Я хочу представить 7 действенных принципов для веб-сайтов, которые хотят применить JavaScript для управления UI. Эти принципы являются результатом моей работы как веб-дизайнера, но также как давнего пользователя WWW.
JavaScript бесспорно стал незаменимым инструментом для разработчиков фронтенда. Сейчас сфера его применения расширяется на другие области, такие как серверы и микроконтроллеры. Этот язык программирования выбрали престижные университеты, чтобы обучать студентов основам информатики.
В то же время существует ряд вопросов относительно его роли и конкретного использования, на которые многие затрудняются ответить, в том числе авторы фреймворков и библиотек.
- Должен ли JavaScript использоваться как замена функциям браузера: история, навигация, рендеринг?
- Умирает ли бэкенд? Нужно ли вообще рендерить HTML?
- Правда ли, что будущее за приложениями на одной странице (Single Page Applications, SPA)?
- Должен ли JS генерировать страницы на веб-сайте и рендерить страницы в веб-приложениях?
- Нужно ли использовать техники вроде PJAX или TurboLinks?
- Каково точное отличие между веб-сайтом и веб-приложением? Должно ли остаться что-то одно?
За один проход
7 min
148KСреди задач по программированию часто попадаются такие: дана последовательность однотипных элементов (обычно это числа), требуется за один проход по ней найти какую-нибудь характеристику (среднее квадратическое отклонение, количество минимальных элементов, непрерывный участок с наибольшей суммой...) Дополнительное ограничение — последовательность может быть очень длинной, и в память не поместится. Других ограничений на элементы последовательности, обычно, не накладывается.
С этими задачами всё, более или менее, понятно: нужно найти то, что на мехмате МГУ называют «индуктивным расширением» искомой функции, и реализовать её вычисление. Если найти не удалось (требуемый объём памяти слишком велик), то задача не решается.
Но попадаются и другие задачи. В них есть дополнительные ограничения на элементы последовательности в совокупности, и эти ограничения приходится существенно использовать для решения (и проверять их не надо). Простейшая такая задача выглядит так:
Задача 1. В последовательности записаны целые числа от 1 до N в произвольном порядке, но одно из чисел пропущено (остальные встречаются ровно по одному разу). N заранее неизвестно. Определить пропущенное число
Решение очевидно: просматриваем числа, находим их количество K и сумму S. По условию, N=K+1, значит, сумма чисел от 1 до N будет равна (K+1)*(K+2)/2, и пропущенное число равно (K+1)*(K+2)/2-S. Если вы почему-то боитесь переполнений, то работайте с беззнаковыми числами (там переполнения не страшны — но будьте осторожны при вычислении (K+1)*(K+2)/2 :) ), или вместо суммы ищите XOR всех чисел.
С этими задачами всё, более или менее, понятно: нужно найти то, что на мехмате МГУ называют «индуктивным расширением» искомой функции, и реализовать её вычисление. Если найти не удалось (требуемый объём памяти слишком велик), то задача не решается.
Но попадаются и другие задачи. В них есть дополнительные ограничения на элементы последовательности в совокупности, и эти ограничения приходится существенно использовать для решения (и проверять их не надо). Простейшая такая задача выглядит так:
Задача 1. В последовательности записаны целые числа от 1 до N в произвольном порядке, но одно из чисел пропущено (остальные встречаются ровно по одному разу). N заранее неизвестно. Определить пропущенное число
Решение очевидно: просматриваем числа, находим их количество K и сумму S. По условию, N=K+1, значит, сумма чисел от 1 до N будет равна (K+1)*(K+2)/2, и пропущенное число равно (K+1)*(K+2)/2-S. Если вы почему-то боитесь переполнений, то работайте с беззнаковыми числами (там переполнения не страшны — но будьте осторожны при вычислении (K+1)*(K+2)/2 :) ), или вместо суммы ищите XOR всех чисел.
ObjectManager в API Яндекс.Карт. Как быстро отрисовать 10 000 меток на карте и не затормозить всё вокруг
10 min
107KПеред разработчикам, которые используют API Яндекс.Карт, довольно часто встаёт задача отобразить много объектов на карте. Действительно много — порядка 10 000. Причем эта задача актуальна и для нас самих — попробуйте поискать аптеки на Яндексе. На первый взгляд кажется: «А в чем собственно проблема? Бери да показывай». Но пока не начнешь этим заниматься, не поймешь, что проблем на самом деле целый вагон.

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

Вопросы по большому количеству меток с завидной регулярностью поступают в наш клуб и техподдержку. Кто все эти люди? Кому может быть интересно показать на карте больше 10 меток? В этом посте я подробно рассмотрю весь вагон проблем и расскажу, как в API появились инструменты, помогающие разработчикам оптимально показать большое количество объектов на карте.
Медиаплеер для переводчиков — feci quod potui
7 min
2.4KДисклеймер
Описание надстройки, приведенное ниже, уже сделано мною на нашем сайте, но там статья написана для пользователей. Здесь же мне хотелось бы передать идею кому-нибудь из разработчиков взрослого ПО, который на наш сайт в жизни не зайдет. И цель, и аудитория совсем другие, поэтому ну никак — по моему, конечно же, скромному мнению — не тянет это на тупой перепост. Вот. Кто думает так же — добро пожаловать под кат.
Управление микроклиматом на Arduino
4 min
77KВ последнее время на Хабре появилась масса постов про построение мониторов качества воздуха. При этом ни одной попытки управления качеством воздуха не нашел, а ведь как только мы переходим от пассивного наблюдения к активному управлению — возникает масса интересных проблем и решений. Своими скромными наработками в этой области и хочу поделиться.
Итак, дано: Гараж неотапливаемый, не утепленный, кирпичный двухэтажный с огромной влажностью внутри, от которой гниет деревянное межэтажное перекрытие, на стенах зимой снежная шуба и прочая неприятная ржавчина.
Задача: «Осушить» гараж.
Решение. Не будем вдаваться в подробности капиллярного подсоса воды бетоном и прочих источников появления влаги в воздухе гаража — сосредоточимся на том, что мы можем сделать с уже появившейся влагой. Если не рассматривать слишком дорогую для гаража технику типа осушителей, то единственный способ, который я нашел, это вытеснять внутренний сырой воздух более сухим наружным при помощи простого вентилятора.
Arduino, два датчика DHT22 изнутри и снаружи, релейный модуль на вентилятор и начинаются действительно интересные проблемы.
Итак, дано: Гараж неотапливаемый, не утепленный, кирпичный двухэтажный с огромной влажностью внутри, от которой гниет деревянное межэтажное перекрытие, на стенах зимой снежная шуба и прочая неприятная ржавчина.
Задача: «Осушить» гараж.
Решение. Не будем вдаваться в подробности капиллярного подсоса воды бетоном и прочих источников появления влаги в воздухе гаража — сосредоточимся на том, что мы можем сделать с уже появившейся влагой. Если не рассматривать слишком дорогую для гаража технику типа осушителей, то единственный способ, который я нашел, это вытеснять внутренний сырой воздух более сухим наружным при помощи простого вентилятора.
Arduino, два датчика DHT22 изнутри и снаружи, релейный модуль на вентилятор и начинаются действительно интересные проблемы.
Собственная радиостанция Spreaker.com
2 min
2.2K
Наверняка вы хотя бы раз задумывались о том что бы вести свое шоу на радио, сидеть в мягком кресле в студии и комментировать события, ставить любимую музыку и принимать звонки благодарных слушателей. В свое время я даже думал о том что бы собрать что нибудь вроде радио точки, и вещать на ближайшую округу, однако как всегда интернет нас опередил.
Слушаем Pandora.com с использованием бесплатного VPN
2 min
4.5KНаверняка многие хабражители уже давно распробовали на вкус замечательный музыкальный сервис, под названием Pandora.com. Наверняка многие из них, проживающие за пределами США, ни раз видели сообщение о «неверном» IP, забыв вовремя заплатить за VPN. Сегодня я попытаюсь рассказать, как избежать таких ситуаций раз и навсегда.
Как сохранить здоровье, работая за компьютером?
8 min
103K
Вы заботитесь о своем здоровье?
Лично для меня возможность свободно организовывать рабочее время стала главным доводом «за», когда я решил оставить офис и присоединиться к фрилансерам. За годы, проведенные в компании, я добился многих целей, которые были мне интересны, заплатив за это своим зрением, осанкой и истраченным временем. Основным уроком, который я из этого вынес, стало то, что успех, достигнутый за счет подорванного здоровья, не стоит потраченных на него усилий. Перенеся большую часть своей работы домой, я поставил задачу организовать время, проводимое за компьютером, так, чтобы снизить его воздействие на здоровье до минимума.
Что оказалось непросто. В данной статье я расскажу о моем способе организации «правильного» рабочего дня, о том, что следует для этого делать, и где лежат грабли, на которые нельзя наступать. Тема «компьютер и здоровье» уже несколько раз поднималась на Хабре, поэтому я задумывал этот пост как статью, которую можно добавить в закладки и использовать в качестве «руководства к действию».
Путин объяснил позицию ФСБ по контролю Skype
1 min
4.7KКомментируя заявления ФСБ о возможности блокировки трафика Skype, а также о введении цензуры в интернете накануне президентских выборов, Владимир Путин ответил: «Знаете, как в шутку спрашивали и отвечали, чем ЦК отличается от ЧК: «ЦК — цыкает, а ЧК — чикает». Мы ничего чикать не собираемся, — пообещал Путин, но добавил, — Правда, основные ресурсы находятся не в наших руках, а за бугром, вернее, за океаном. Именно это вызывает озабоченность некоторых спецслужб, имею в виду возможность использования этих ресурсов в интересах, противоречащим интересам общества и государства. Что касается моего личного мнения, то я не считаю возможным что-либо ограничивать».
Пишем простой плеер под Windows Phone
7 min
13KДанная статья демонстрирует, как написать простейший музыкальный плеер под Windows Phone.
Основные возможности: плеер работает с плейлистом, можно управлять музыкой (переключать мелодии), плеер может играть в фоне.
Автор в первую очередь руководствовался статьей, в которой не были освещены некоторые элементарные, но не всегда очевидные, аспекты написания плеера. Они и разобраны в данной статье.
Основные возможности: плеер работает с плейлистом, можно управлять музыкой (переключать мелодии), плеер может играть в фоне.
Автор в первую очередь руководствовался статьей, в которой не были освещены некоторые элементарные, но не всегда очевидные, аспекты написания плеера. Они и разобраны в данной статье.
Пару слов о распознавании образов
13 min
304K
Tutorial
Давно хотел написать общую статью, содержащую в себе самые основы Image Recognition, некий гайд по базовым методам, рассказывающий, когда их применять, какие задачи они решают, что возможно сделать вечером на коленке, а о чём лучше и не думать, не имея команды человек в 20.

Какие-то статьи по Optical Recognition я пишу давненько, так что пару раз в месяц мне пишут различные люди с вопросами по этой тематике. Иногда создаётся ощущение, что живёшь с ними в разных мирах. С одной стороны понимаешь, что человек скорее всего профессионал в смежной теме, но в методах оптического распознавания знает очень мало. И самое обидное, что он пытается применить метод из близрасположенной области знаний, который логичен, но в Image Recognition полностью не работает, но не понимает этого и сильно обижается, если ему начать рассказывать что-нибудь с самых основ. А учитывая, что рассказывать с основ — много времени, которого часто нет, становится всё ещё печальнее.

Какие-то статьи по Optical Recognition я пишу давненько, так что пару раз в месяц мне пишут различные люди с вопросами по этой тематике. Иногда создаётся ощущение, что живёшь с ними в разных мирах. С одной стороны понимаешь, что человек скорее всего профессионал в смежной теме, но в методах оптического распознавания знает очень мало. И самое обидное, что он пытается применить метод из близрасположенной области знаний, который логичен, но в Image Recognition полностью не работает, но не понимает этого и сильно обижается, если ему начать рассказывать что-нибудь с самых основ. А учитывая, что рассказывать с основ — много времени, которого часто нет, становится всё ещё печальнее.
Изобретаем JPEG
28 min
167K
Tutorial

Вы правильно поняли из названия, что это не совсем обычное описание алгоритма JPEG (формат файла я подробно описывал в статье «Декодирование JPEG для чайников»). В первую очередь, выбранный способ подачи материала предполагает, что мы ничего не знаем не только о JPEG, но и о преобразовании Фурье, и кодировании Хаффмана. И вообще, мало что помним из лекций. Просто взяли картинку и стали думать как же ее можно сжать. Поэтому я попытался доступно выразить только суть, но при которой у читателя будет выработано достаточно глубокое и, главное, интуитивное понимание алгоритма. Формулы и математические выкладки — по самому минимуму, только те, которые важны для понимания происходящего.
Знание алгоритма JPEG очень полезно не только для сжатия изображений. В нем используется теория из цифровой обработки сигналов, математического анализа, линейной алгебры, теории информации, в частности, преобразование Фурье, кодирование без потерь и др. Поэтому полученные знания могут пригодиться где угодно.
Если есть желание, то предлагаю пройти те же этапы самостоятельно параллельно со статьей. Проверить, насколько приведенные рассуждения подходят для разных изображений, попытаться внести свои модификации в алгоритм. Это очень интересно. В качестве инструмента могу порекомендовать замечательную связку Python + NumPy + Matplotlib + PIL(Pillow). Почти вся моя работа (в т. ч. графики и анимация), была произведена с помощью них.
Внимание, трафик! Много иллюстраций, графиков и анимаций (~ 10Мб). По иронии судьбы, в статье про JPEG всего 2 изображения с этим форматом из полусотни.
Аренда телефона с безлимитным интернетом в Гонконге и Сингапуре
3 min
17K
В путешествиях, особенно бизнес-поездках, важно быть на связи. Но есть один важный недостаток — грабительский роуминг отечественных операторов. Именно поэтому в поездках многие выбирают место для обеда по наклейкам «Wi-Fi here», периодически забегают в отель что бы проверить, не пришло ли важное письмо. И если в тарифах для некоторых стран Европы еще можно встретить более-менее здравые расценки. То например в Азии или Америке уже далеко не все так прекрасно.
Планируя в октябре прошлого года очередную поездку в Гонконг, я случайно наткнулся на компанию сдающую телефоны с безлимитным интернетом в аренду.
MSP430, учимся программировать и отлаживать железо
6 min
112K
Сегодня, уважаемый хабрапользователь, я постараюсь заполнить некоторый пробел, образовавшийся в статьях об MSP430, а именно азы и подход к программированию устройств на данном микроконтроллере.
Эта статья прежде всего направлена на новичков, поскольку я буду рассматривать ряд достаточно простых задач, таких как работа с SPI, мигание лампочкой и отладка в proteus.
C# для начинающих. Лекция 1 — Введение
1 min
85KТопик опубликован по просьбе itdevelop, так что он будет отвечать на все ваши вопросы, а также плюсы кидать на его аккаунт. Спасибо за понимание.
Это первая лекция большого видео-курса для тех, кто хочет научиться программировать на языке С#. Поскольку это — вводная лекция, то хочу сразу предупредить, что сам процесс программирования начнется только со второй лекции. Здесь же я хочу вас познакомить с .NET Framework, чем удобна эта платформа, и как происходит перевод написанного вами кода на C# в код, понятный операционной системе.
Это первая лекция большого видео-курса для тех, кто хочет научиться программировать на языке С#. Поскольку это — вводная лекция, то хочу сразу предупредить, что сам процесс программирования начнется только со второй лекции. Здесь же я хочу вас познакомить с .NET Framework, чем удобна эта платформа, и как происходит перевод написанного вами кода на C# в код, понятный операционной системе.
Information
- Rating
- Does not participate
- Location
- Москва, Москва и Московская обл., Россия
- Works in
- Registered
- Activity