Рубрика «оптимизация» - 44

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

При этом большинство ну хотя бы минимально сложных и функциональных систем (во всяком случае, из тех, что встречались лично мне за 8 лет работы в банковской сфере), как правило, гетерогенны — состоят из множества функциональных блоков, как пёстро сшитое лоскутное одеяло, где каждый лоскуток выполняется разным приложением, зачастую даже на различных аппаратных платформах. Почему? Да просто это рационально и удобно. Каждый продукт хорош в своей области. Например, экономисты любят использовать Ms Excel для анализа и визуализации данных. Но мало кому в голову придёт использовать эту программу для обучения серьёзных искусственных нейросетей или решения дифференциальных уравнений в реальном времени — для этого зачастую приобретаются (или уже приобретены компанией) мощные универсальные пакеты, предлагающие гибкий API, или под заказ пишутся отдельные модули. Вот и получается, что результат считать выгоднее в том же Matlab, хранить в таблицах СУБД Oracle (запущенной на кластере Linux), а отчёт показывать пользователям в приложении Excel, работающем как OLE server на Windows. Причём связаны все эти компоненты одним из универсальных языков программирования.

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

Сегодня, многие разработчики и большинство специалистов по продвижению мобильных приложений говорят об оптимизации ключевых слов для App Store. Хочу еще раз четко обозначить, что ASO в целом (длинную вводную статью про App Store Оptimization читать тут) и оптимизация ключевых слов в частности это не панацея. Но это обязательная вещь, которую вы можете освоить и выполнить самостоятельно, сэкономить кусочек маркетингового бюджета и радоваться примерно таким цифрам в статистике:

Оптимизация ключевых слов для приложений в App Store

Читать полностью »

По мотивам вчерашнего поста про оптимизацию условных переходов при расчете x=sign(a,b)*min(abs(a), abs(b)) якобы в 10 раз. Краткая сводка:

  • оптимизация налицо, но размер мнимый: не в 10 раз, а 2.5 раза;
  • бенчмарки надо делать правильно: не надо мерить CPU stalls, RAM bandwidth итп вместо целевой функции;
  • бенчмарки надо делать правильно: иначе могут дико дрожать;
  • выставлять только приоритет прикольно, но на коротких бенчмарках зря: +0.5% скорости, -15% дрожания;
  • нужно мерить целевую функцию, только так получаешь корректные данные;
  • нужно греть проц, нужно считать минимум из N прогонов/секунд, только так побеждаешь дрожание;
  • нужно пользовать SSE, с ним получилось 8.6 раз, причем код… читается.

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

Один из программистов компании Microsoft анонимно выступил на форуме Hacker News и выдал интересные подробности о процессе разработки ядра NT. Своим сообщением он хотел подтвердить тезис о том, что ядро неэффективно и во многом уступает по производительности другим ОС: см. оригинальное сообщение (автор удалил его, испугавшись резких формулировок) и копию.

Причина проблем, по словам сотрудника Microsoft, социальная. Дело в том, что разработчики не вносят в ядро таких оптимизаций, которые мы видим в мире Linux. В компании Microsoft никто не будет хвалить программиста, если он оптимизировал какой-то процесс на 5%, если это не входит в сферу его основных обязанностей. Такая оптимизация никому не интересна. Только в случае какого-то очень существенного прогресса работу программиста могут заметить в соседних командах разработки, что положительно отразиться на его карьере. Но это скорее исключение, чем правило. Нет никакого стимула принимать изменения из-за пределов своей команды разработки.
Читать полностью »

Today's software engineering word is «farpotshket.» This is a Yiddish word meaning, «broken, because someone tried to fix it.»
(с) Andr Zerozero

Схлеснулись мы тут на днях на работе по вопросу «А хорошо бы закешировать регулярку», в совершенно банальной функции

  uncached = function(data_in) {
    return /_(d)+(?:#(d)+)?$/.exec(data_in);
  };

сделав как-то так

  cached = (function() {
    var pattern = /_(d)+(?:#(d)+)?$/;
    return function(data_in) {
      return pattern.exec(data_in);
    };
  })();

Идея популярная, но многие ли задумывались о реальном профите и накладных расходах?
Читать полностью »

На днях к нам в офис привезли удивительный принтер MIMAKI UJF-3042. Дело в том, что UJF-3042 действительно очень отличается от других печатающих устройств, представленных на рынке, и мы расскажем, чем именно.

Принтер, который печатал на всем

Технологии

Мы уже неоднократно писали о светодиодной печати, которая имеет ряд преимуществ перед лазерной. Однако данный принтер использует не просто светодиодную, а УФ-светодиодную печать. Переход к более высоким световым частотам позволяет добиться сразу нескольких важных эффектов: продлевается срок службы ламп (до 5 раз), экономится электроэнергия, повышается производительность за счет практически сухой печати, появляется возможность печатать на термочувствительных материалах. Кстати, пьезоэлектрическая головка, используемая в принтере, так же обеспечивает нанесение красителя «холодным» методом.

Следующая особенность – это жесткие УФ-отверждаемые чернила (LH-100). Они отличаются высокой устойчивостью к механическим и химическим воздействиям. Для данного принтера доступны не только стандартные CMYK, но и картриджи с белым цветом и лаком.

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

Принтер может печатать на формате A3, причем бумага также входит в его «арсенал». А это значит, что пользователь может создавать также любые плакаты и постеры. Но и, наконец, технология последовательного нанесения красителей позволяет добиться 3D-эффектов, которые делают сувенирную продукцию еще привлекательнее.

На чем изволите печатать?

Печатать этот принтер позволяет практически на чем угодно, если толщина этого «чего угодно» не превышает 5 см. То есть любые ручки, открывашки, небольшие коробки и даже зубные щетки – вполне подойдут! Мы уже не говорим о пропусках, карточках из толстого картона, DVD, акриловых пластинах, дибонде, форексе, стекле и пленках. Нужно только надежно закрепить запечатываемые объекты на подложке или специальном зажимном приспособлении и правильно выставить параметры печати. Кстати, драйвер принтера позволяет также наносить изображение на трехмерные предметы, например, на круглые ручки.
Зажимное приспособление для ручек Принтер, который печатал на всем
Зажимное приспособление для карточек Принтер, который печатал на всем
Читать полностью »

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

Это первая статья из серии материалов, которые я планирую посвятить продвижению мобильных приложений с помощью ASO и локализации. Поэтому, в первую очередь, хотелось бы объяснить, что же такое это ASO, из каких компонентов оно состоит, с чем оно неотъемлемо связано и почему так необходимо. В дальнейшем, я, на основе своего опыта (и, соответственно, опыта компании, в которой я работаю), с удовольствием расскажу, как пользоваться этими инструментами наиболее эффективно, каких результатов ждать в долгосрочной и краткосрочной перспективе, приведу алгоритм асо действий и поделюсь полезными ресурсами, которые помогают сократить время на ASO деятельность.
Но начнем с основ. Каждый разработчик мобильных приложений хочет, чтобы его продукт был успешным. Успешность можно измерять по-разному (количество скачиваний и активных пользователей, оценки и отзывы пользователей, и т.д.), но мы же с вами понимаем, что одним из важнейших показателей успешности является окупаемость, а затем и прибыльность всего дела. Итак, что говорят нам цифры: в 2012 году мировой рынок мобильных приложений составил приблизительно 7,83 млрд долл. Российский же сегмент рынка мобильных приложений по разным оценкам в 2012 году достиг 120-160 млн долларов, и продолжил рост в первом квартале 2013 на 11%. Есть в этих замечательных цифрах как хорошая новость, так и плохая. Хорошо, что русскоязычный рынок растет. Это значит, что нам с вами есть, где развернуться, есть активная аудитория, готовая скачивать приложения и пользоваться ими. Благодаря этой аудитории мы можем совершенствовать свои продукты и делать их максимально прекрасными. А вторая новость заключается в том, что нам с вами, чтобы быть действительно успешными и много зарабатывать, нужно выходить из зоны русскоязычного комфорта и осваивать интернациональные рынки. И это совсем не плохо. Это интересно, это, как говорят наши англоязычные друзья, challenging.
Читать полностью »

Компания Apple осталась единственной крупной компанией, которая занимается разработкой Open Source движка WebKit. После ухода Google разработчики из Apple объявили о «весенней зачистке» и удалении из проекта ставшего ненужным кода, в том числе чужого JavaScript-движка V8.

В течение ближайших недель будут зачищены:

  • Нарушения иерархических представлений (layering violations) в WebCore/platform, где Page* или Frame* можно было передать функции
  • Supplementable и Supplement
  • #if USE(GOOGLEURL)
  • #if USE(V8)
  • #if !USE(JSC)
  • #if PLATFORM(CHROMIUM)
  • Skia
  • DOMFileSystem
  • WebLayer и его реализацию скроллинга
  • Функции #defines, которые не пользуются популярностью

Читать полностью »

Недавно вышла вторая версия питоновской библиотеки для работы с изображениями Pillow. Как многие знают, это форк хорошо известной библиотеки PIL, которая, несмотря на свой солидный возраст, до недавнего времени оставалась самым вменяемым способом работы с изображениями в Питоне. Авторы Pillow наконец-то решили не только поддерживать старый код, но и добавлять новые возможности. И одной из этих возможностей стала функция alpha_composite().

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

С тех пор я уже смог написать для своих нужд более оптимальную реализацию, чем приведена в конце той статьи. И оказалось, что эта реализация быстрее alpha_composite() из новой версии Pillow, написанной на Си. Конечно, мне это польстило, но я все-таки решил попытаться улучшить реализацию из Pillow.Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js