• «А как всё хорошо начиналось...», или О пользе O-нотации не только для анализа алгоритмов

      Термин «О-большое», знакомый нам из курса матанализа, был введён Паулем Бахманом в конце XIX века для описания асимптотического поведения функций. В конце 1970-х Дональд Кнут придумал применять этот термин для оценки эффективности и ресурсоёмкости алгоритмов, благодаря чему с «О-большим» знакомо большинство программистов. Понимание асимптотики быстродействия и ресурсоёмкости даёт возможность выбрать наиболее подходящий метод решения задачи в зависимости от текущих потребностей. «Плохая» асимптотика позволяет сразу же отбросить неподходящий метод.



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

      Читать дальше →
      • +17
      • 14k
      • 7
    • PHP: фрактал плохого дизайна

      • Translation

      Предисловие


      Я капризный. Я жалуюсь о многих вещах. Многое в мире технологий мне не нравится и это предсказуемо: программирование — шумная молодая дисциплина, и никто из нас не имеет ни малейшего представления, что он делает. Учитывая закон Старджона, у нас достаточно вещей для постижения на всю жизнь.

      Тут другое дело. PHP не просто неудобен в использовании, плохо мне подходит, субоптимален или не соответствует моим религиозным убеждениям. Я могу рассказать вам много хороших вещей о языках, которых я стараюсь избегать, и много плохих вещей о языках, которые мне нравятся. Вперёд, спрашивайте! Получаются интересные обсуждения.

      PHP — единственное исключение. Фактически каждая деталь PHP в какой-то мере поломана. Язык, структура, экосистема: всё плохо. И даже нельзя указать на одну убийственную вещь, настолько дефект систематичный. Каждый раз, когда я пытаюсь систематизировать недостатки PHP, я теряюсь в поиске в глубину обнаруживая всё больше и больше ужасных мелочей(отсюда фрактал).

      PHP — препятствие, отрава моего ремесла. Я схожу с ума от того, насколько он сломан и насколько воспеваем каждым уполномоченным любителем нежелающим научиться чему-либо ещё. У него ничтожно мало оправдывающих положительных качеств и я бы хотел забыть, что он вообще существует.
      Читать дальше →
    • Профессор решал дифференциальные уравнения в самолёте. Рейс задержали на два часа из-за угрозы теракта


        Гвидо Менцио (Guido Menzio), профессор экономики университета Пенсильвании

        Вечером 5 мая самолёт местных авиалиний American Airlines (рейс 3950) готовился к заурядному 40-минутному перелёту из Филадельфии в Сиракузы (штат Нью-Йорк). Несколько десятков пассажиров заняли свои места. На борту не было ничего необычного, пока в салон не зашёл подозрительный мужчина около 40 лет, с курчавыми волосами, смуглой кожей и экзотическим иностранным акцентом. Погруженный в мысли, он сел, достал блокнот и начал что-то сосредоточенно записывать, пишет The Washington Post.

        Первой заподозрила неладное сидевшая рядом 30-летняя белокурая американка, во вьетнамках и с красной сумкой. Она разглядела в блокноте странные символы и вычисления. Женщина набралась храбрости и попыталась завести разговор с незнакомцем, но тот отвечал односложными фразами и явно не хотел идти на контакт. Это было крайне подозрительно.
        Читать дальше →
      • Профилировка работы с памятью с Intel® VTune™ Amplifier XE

          Неэффективный доступ к памяти, пожалуй, одна из наиболее частых проблем производительности программ. Скорость загрузки данных из памяти традиционно отстаёт от скорости их обработки процессором. Для уменьшения времени доступа к данным в современных процессорах реализуются специальные блоки и многоуровневые системы кэшей, позволяющие сократить время простоя процессора при загрузке данных, однако, в некоторых случаях, процессорная логика работает не эффективно. В этом посте поговорим о том, как можно исследовать работу с памятью вашего приложения с помощью нового профиля Memory Access в VTune Amplifier XE.


          Читать дальше →
        • Как ухудшить производительность вашего приложения — типичные ошибки разработчиков

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


          Читать дальше →
        • На что смотрит свёрточная нейросеть, когда видит наготу

          • Translation


          На прошлой неделе в компании Clarifai мы формально анонсировали нашу модель распознавания непристойного контента (NSFW, Not Safe for Work).

          Предупреждение и отказ от ответственности. Эта статья содержит изображения обнажённых тел в научных целях. Мы просим не читать дальше тех, кому не исполнилось 18 лет или кого оскорбляет нагота.



          Автоматическое выявление обнажённых фотографий было центральной проблемой компьютерного зрения на протяжении более двух десятилетий, и из-за своей богатой истории и чётко поставленной задачи она стала отличным примером того, как развивалась технология. Я использую проблему детектирования непристойности для пояснения, как обучение современных свёрточных сетей отличается от исследований, проводившихся в прошлом.
          Читать дальше →
        • Антихрупкость архитектуры хранилищ данных

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

            «Сказка ложь – да в ней намек…»


            imageПосадил дед… хранилище. И выросло хранилище большое-пребольшое. Вот только толком не знал, как оно устроено. И затеял дед ревью. Позвал дед бабку, внучку, кота и мышку на семейный совет. И молвит такую тему: «Выросло у нас хранилище. Данные со всех систем стекаются, таблиц видимо-невидимо. Пользователи отчеты свои стряпают. Вроде бы все хорошо – жить да жить. Да только одна печаль – никто не знает, как оно устроено. Дисков требует видимо-невидимо – не напасешься! А тут еще пользователи ко мне ходить повадились с жалобами разными: то отчет зависает, то данные устаревшие. А то и совсем беда – приходим мы с отчетами к царю-батюшке, а цифры-то между собой не сходятся. Не ровен час – разгневается царь – не сносить тогда головы – ни мне, ни вам. Вот решил я вас собрать и посоветоваться: что делать-то будем?».
            Читать дальше →
          • Краткий курс компьютерной графики: задание карт нормалей в касательном пространстве

            • Tutorial
            Дошли руки написать очередное дополнение к моему краткому курсу компьютерной графики. Итак, тема для очередного разговора — использование карт нормалей. В чём основное отличие использования карт нормалей от затенения Фонга? Основная разница в плотности задания информации. Для затенения Фонга мы использовали нормальные вектора, заданные к каждой вершине нашей полигональной сетки, интерполируя нормали внутри треугольников. Использование же карт нормалей позволяет задавать нормали для каждой точки нашей поверхности, а не лишь изредка, что просто драматическим образом влияет на детализацию изображений.

            В принципе, в лекции про шейдеры мы уже использовали карту нормалей, но только заданную в глобальной системе координат. Сейчас же разговор пойдёт про касательное пространство. Итак, вот две текстуры, левая задана в глобальном пространстве (RGB напрямую превращается в вектор XYZ), а правая — в касательном.

            Читать дальше →
          • От действий над матрицами к пониманию их сути…

            Очень уважаю людей, которые имеют смелость заявить, что они что-то не понимают. Сам такой. То, что не понимаю, — обязательно должен изучить, осмыслить, понять. Статья "Математика на пальцах", и особенно матричная запись формул, заставили меня поделиться своим небольшим, но, кажется, немаловажным опытом работы с матрицами.

            Лет эдак 20 назад довелось мне изучать высшую математику в вузе, и начинали мы с матриц (пожалуй, как и все студенты того времени). Почему-то считается, что матрицы — самая лёгкая тема в курсе высшей математики. Возможно — потому, что все действия с матрицами сводятся к знанию способов расчёта определителя и нескольких формул, построенных — опять же, на определителе. Казалось бы, всё просто. Но… Попробуйте ответить на элементарный вопрос — что такое определитель, что означает число, которое вы получаете при его расчёте? (подсказка: вариант типа «определитель — это число, которое находится по определённым правилам» не является правильным ответом, поскольку говорит о методе получения, а не о самой сути определителя). Сдаётесь? — тогда читаем дальше…
            Читать дальше →
          • Реверс-инжиниринг и замедление «Казаков»



            В известной игре «Казаки: Снова Война» присутствует баг, сводящий удовольствие от сетевой игры к нулю: Нечеловеческая скорость игрового процесса на современных компьютерах. При этом изменение скорости игры в настройках, прекрасно работающее в режиме одиночной игры, никак не влияет на происходящее в игре по сети. Этот вопрос обсуждается на множестве форумов, но самые популярные советы это:

            1. Искусственно загрузить ядро процессора, на котором запущена игра
            2. Запускать игру в виртуальной машине с ограниченными ресурсами
            3. Играть не по локальной сети, а по интернету — там задержки побольше
            4. Только дизассемблинг, только хардкор!
          • Экспорт истории сообщений из Skype 4.*

            Прочитав новость об уязвимости в Skype, позволяющей угнать любой аккаунт, в процессе чтения комментариев и постов по теме наткнулся на новую для себя информацию: оказывается, начиная с версии 4.* Skype хранит информацию о пользователе в базе sqlite. Это и навело меня на мысль о том, что информацию из базы можно легко и непринужденно получить.
            Читать дальше →
          • Мастер-класс Бориса Вольфсона. Основы Agile

            • Tutorial
            image

            Этот пост написан по мотивам мастер-класса Бориса Вольфсона (директора по развитию HeadHunter), посвященного (сюрприз!) основам Agile. Материал будет полезен всем, кто либо совсем не знаком с данной методологией разработки сложного ПО, либо имеет о ней смутное представление.
            Читать дальше →
          • Локализация игр должна учитывать самобытную культуру оригинала

            • Translation


            Интернет в очередной раз взорвала новая волна обсуждений (как это нередко бывает), касающихся недавнего решения Nintendo подвергнуть цензуре костюмы некоторых героев в Fatal Frame: Maiden of Black Water и Xenoblade Chronicles X. Несмотря на некоторые жалобы пуристов относительно новых изменений, большинство американских игроков соглашаются с тем, что крошечные бикини не подходят ни характеру игры в жанре horror, ни персонажу 13-летней девочки в ролевой игре. Неудивительно, что это вызвало обсуждение о локализации игр, особенно локализации продуктов из Японии для Соединенных Штатов.
            Читать дальше →
          • Разницу во времени пробуждения между буднями и выходными связали с нарушениями здоровья

              image

              Встаёте на работу в 6 утра, и оттого любите отоспаться по выходным до изнеможения? А зря. Психологи из Питтсбургского университета провели исследование, доказывающее, что большая разница во времени пробуждения между выходными и рабочими днями приводит к проблемам со здоровьем.

              Посменную работу, на которой людям приходится сильно нарушать нормальные циркадные ритмы, уже давно записали в разряд вредных факторов, провоцирующих кардиометаболический синдром и другие проблемы, связанные со здоровьем. А учёные из Питтсбурга под руководством Патрисии Вон [Patricia M. Wong] решили изучить, каким образом навязанный обществом рабочий ритм влияет на здоровье людей с разным хронотипом («жаворонки» и «совы»).

              Выяснилось, что любые нарушения сна, начиная от разницы в режимах между рабочими и выходными днями, и заканчивая раннее пробуждение для «сов», являются причинами возникновения проблем, связанных с метаболизмом. Лишний вес, инсулинорезистентность (плохая всасываемость глюкозы клетками), образование висцерального жира (жировые накопления вокруг внутренних органов) – все эти проблемы связаны с неправильным режимом сна.

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

              Для исследования учёные следили за группой из 447 человек среднего возраста в течение недели. Для точного отслеживания периодов сна и бодрствования все испытуемые носили браслеты с акселерометрами. График исследования составлялся так, чтобы обязательно включать в себя хотя бы одну ночь перед выходным – таким образом отслеживалось влияние разницы в длительности сна в будний и выходной день. Эту разницу исследователи назвали «социальным расстройством биоритмов» (social jet lag, по аналогии с jet lag – расстройством сна, связанным с перелётом через несколько часовых поясов).
              Читать дальше →
            • Анализ резюме с HeadHunter. Кто сколько зарабатывает и в каких отраслях работает

                Недавно, на хакатоне от Petamelon нам в руки попал датасет с ~6 000 000 резюме с НН. Там, естественно, не было никаких персональных данных и контактов, но было много других интересных вещей: ожидаемая зарплата, возраст, пол, примерный адрес, образование и индустрии, в которых человек ищет работу. Было решено попробовать использовать эти данные в нашем проекте про выбор школ. Идея заключалась в том, чтобы определить в каких индустриях работают выпускники школ и сколько примерно зарабатывают. Но я, конечно, не удержался и построил кучу других бесполезных, но прикольных таблиц и графиков.

                Распределение резюме по возрасту имеет интересную форму и как будто разделено на две части: до окончания института и после:


                В Москве с возрастом ожидаемая зарплата выходит на плато в ~50 000 рублей:

                Читать дальше →
              • Зачем менять лампочки на светодиодные

                  Тема светодиодных ламп заинтересовала меня уже давно. Первую светодиодную лампу у себя дома я установил в апреле 2013 года и она до сих пор работает. К февралю 2014 года у меня дома не осталось ни одной лампы накаливания — всё освещение стало светодиодным. 24 июня 2015 года мы запустили сайт с результатами тестирования светодиодных ламп lamptest.ru.



                  Многие спрашивают у меня, зачем менять лампочки на светодиодные и что это даёт.

                  Читать дальше →
                • Реверс-инжиниринг полёта Бэтмена



                    Этим летом вышла очередная игра из серии Batman Arkham, в ПК версии которой оказалось столько багов, что было принято беспрецедентное решение снять её с продаж. Я решил посмотреть, что же там такого ужасного.

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

                    На скриншоте изображён этот момент: вместо того, чтобы лететь вперёд, Бэтмен повернулся вниз головой, демонстрируя полнейшее пренебрежение к происходящему. Аналогичный баг был в предыдущей игре (Arkham Origins), и он до сих пор не исправлен. Видимо тот же самый кривой код был перенесён в новую игру. Попробуем найти, какие ошибки делают программисты в играх такого уровня, и исправить их.
                    Читать дальше →
                  • Тест для проверки цветового разрешения монитора или телевизора при подключении к компьютеру по цифровому видеоинтерфейсу

                      «Кто нам мешает, тот нам поможет»
                      к/ф «Кавказская пленница»


                      Телевизор в качестве монитора?


                      В последние годы все более популярным становится использование телевизора в качестве домашнего компьютерного монитора.
                      И действительно — если еще несколько лет назад типичным для компьютерных мониторов Full HD разрешением (1920x1080) могли похвастаться лишь телевизоры с диагональю 40" и более, слишком большие для настольного монитора, то сейчас нетрудно найти телевизор с Full HD разрешением и с вполне «мониторной» диагональю 32" и меньше. Соответственно и размер пикселя при этом получается близким к «типовому» для настольных мониторов 0,28 мм ± 10% (ну, может быть чуть больше). А если кому-то такой пиксель покажется великоват, то с появлением доступных по цене бытовых телевизоров с разрешением 4k Ultra HD (3840x2160) размер пикселя вполне может конкурировать и с Retina.
                      К тому же широко распространенные в бытовых телевизорах IPS матрицы по компьютерным меркам считаются весьма «продвинутыми», и ими обычно оснащаются весьма дорогие «профессиональные» мониторы.
                      Казалось бы вот оно, идеальное решение для экономного домашнего пользователя — купить на грош пятаков небольшой (по телевизионным меркам) относительно недорогой 26"-37" бытовой телевизор с Full HD или Ultra HD разрешением, и в результате получить «компьютерный монитор» с большим (по компьютерным меркам) «профессиональным» IPS дисплеем, который к тому же без дополнительных вложений может быть использован и по прямому «телевизионному» назначению (что для дома тоже немаловажно!).
                      Однако иной раз результатом такого приобретения становится полное разочарование: компьютерная картинка на экране телевизора оказывается намного хуже, чем на простеньком старом мониторе, вместо которого этот телевизор собственно и приобретался.
                      Причин этого может быть множество, начиная от несоответствия разрешения соединяющего компьютер с телевизором видеоинтерфейса разрешению телевизионной матрицы, способности телевизора выводить картинку «пиксель-в-пиксель», настроек видеокарты (в частности, Overscan), настроек самого телевизора (например, резкости), проблем с кабелем, и так далее.
                      В данной статье мы рассмотрим только одну из возможных причин, а именно способность видеоинтерфейса, которым подключен телевизор или монитор к компьютеру, передать полное цветовое разрешение 4:4:4.

                      Для начала собственно тест:



                      Если на экране Вам отчетливо видна появляющаяся надпись 4:4:4, и лишь слегка угадывается 4:2:2, то значит видеоинтерфейс компьютер-монитор передает полное цветовое разрешение, и на этом собственно можно закончить тест и чтение статьи.
                      Тем же, кому интересно, как действует этот тест, а также тем, кто видит 4:2:2 и не видит 4:4:4 (или видит примерно одинаково и 4:4:4, и 4:2:2), и при этом хочет попробовать исправить ситуацию добро пожаловать под кат
                      Читать дальше →
                    • Стив Джобс и политика в отношении оборота наркотиков

                      • Translation
                      Довольно интересно сопоставить всеобщее американское благоговение перед заслугами Стива Джобса и драконовскую политику США в отношении оборота наркотиков, поскольку это довольно противоречивые вещи, из некролога Джобса в NY Times:

                      [Джобс] сказал репортёру, что приём ЛСД1 был одной из двух или трёх самых важных вещей в его жизни. Он сказал, что некоторые свойства его личности другие люди, которые не пробовали психоделики — даже близкие люди, как его жена, — никогда не могли понять.

                      В отличие от многих других знаменитостей, которые говорили, что добились успеха вопреки наркотикам, Джобс заявил, что его успех был частично — в значительной степени — объяснялся приёмом нелегального препарата.

                      Стив Джобс также добавил, что Билл Гейтс «стал бы менее зашоренным, если бы однажды капнул кислоты»2.
                      Читать дальше →
                    • Нужна помощь в модернизации ПО с 7 млн строк кода на COBOL

                        Американская комиссия по пенсионному обеспечению работников на железных дорогах (United States Railroad Retirement Board, RBB) начала обновлять свою компьютерную инфраструктуру 50-летней давности. Она объявила поиск подрядчика, который способен помочь в модернизации компьютерных систем. Работа ожидается большая: программное обеспечение содержит 7 млн строк на языке программирования COBOL.

                        В наши дни COBOL не назовёшь очень модным языком программирования. Молодые разработчики нечасто выбирают его для изучения, а многие опытные специалисты уже на пенсии.
                        Читать дальше →