Learning to learn
В цей раз я проводив експерименти на тему learning to learn, тобто алгоритмів, які можуть вчитися, як краще вчитися.

Цілі експерименту:
1) Створити алгоритм оптимізації, який можна деяким стандартним способом пристосувати до будь-якої оптимізаційної задачі або безлічі завдань. Під словом «пристосувати» я маю на увазі зробити, щоб алгоритм дуже добре справлявся з цим завданням».
2) Налаштувати алгоритм під одну задачу і подивитися, як змінилася його ефективність на інших завданнях.

Читати далі →

Як змусити PostgreSQL вважати швидше


Джерело фотографії
Всі вміють рахувати, але не всі вміють рахувати швидко. У цій статті ми детально розглянемо методи оптимізації count PostgreSQL. Існують прийоми, які можуть дозволити прискорити підрахунок кількості рядків на порядки.
Якщо підходити до питання з усією серйозністю, необхідно виділити кілька варіантів count, у кожного з яких є власні методи. З чим потрібно буде визначитися:
  • чи потрібна точна кількість рядків або оцінного значення буде достатньо;
  • слід враховувати дублікати або цікавлять тільки унікальні значення;
  • потрібно порахувати всі рядки таблиці або необхідно вибрати тільки задовольняють певній умові.
Ми проаналізуємо рішення для кожної конкретної ситуації, а також порівняємо їх швидкість і споживання ресурсів. Розібравши ситуацію з централізованої БД, ми скористаємося Citus, щоб продемонструвати паралельне виконання count в розподіленій базі даних.
Читати далі →

Як розв'язувати прості задачі оптимізації на пітоні з допомогою cvxpy

Всім доброго часу доби! Простим пошуком я не зумів знайти згадування модуля cvxpy і тому вирішив написати навчальний матеріал за нього – просто приклади коду, за яким надалі новачкові буде простіше використовувати цей модуль для своїх завдань. cvxpy призначений для вирішення завдань оптимізації – знаходження мінімумів/максимумів функцій при певних обмеженнях. Якщо вам цікава ця тема – прошу під кат.

Читати далі →

Три принципу продуктивності JavaScript, роблять Bluebird швидким

Компанія Reaktor поділилася у своєму блозі принципами і прикладами оптимізації JavaScript-коду, застосованими в бібліотеці промисов Bluebird, створеної їх співробітником Petka Antonov (Петькою Антоновим).
Читати далі →

Про наш фінансовий відділ і власну CRM

Це перша стаття з серії про те, як ми впровадили безперервну інтеграцію в процес розробки CRM і полегшили життя фінансовому відділу.
Перш ніж описати технічні подробиці, розповім про передумови до розробки системи і про те, як фінансовий відділ працював раніше.
image
Раніше для автоматизації технічних процесів у фінансовому відділі ми використовували таку структуру.
Читати далі →

Як ми робили моніторинг запитів mongodb


Використання монги у production — досить спірна тема.
З одного боку все просто і зручно: поклали дані, налаштували реплікацію, розуміємо як шардировать базу при зростанні обсягу даних. З іншого боку, існує досить багато страшилок, Aphyr у своєму останньому jepsen тесті зробив не дуже позитивні висновки.
За фактом виявляється, що є досить багато проектів, де mongo є основним сховищем даних, і нас часто запитували про підтримку mongodb в окметр. Ми довго тягнули з цим завданням, тому що зробити "осмислений" моніторинг на порядок складніше, ніж просто зібрати якісь метрики і налаштувати які-небудь алерти. Потрібно спочатку розібратися в особливостях поведінки софта, щоб зрозуміти, які саме показники відстежувати.
Як раз про труднощі і проблеми, я і хочу розповісти на прикладі реалізації моніторингу запитів до mongodb.
Читати далі →

Як ми прискорили PHP-проекти в 40 разів за допомогою кешування



Питання SEO-оптимізації і поліпшення User eXperience, які в певний момент постали перед командою Wrike, вимагали значного збільшення швидкості роботи наших веб-проектів. На той момент їх було близько десяти (основний сайт, блог, довідковий центр тощо). Рішення щодо прискорення проектів було виконано на основі зв'язки Nginx + fastcgi cache + LUA + LSYNC.


Читати далі →

Unity3D Прискорити обробку 2D анімації в рази? Легко

стаття мені хотілося б розповісти про те, як була прискорена відтворення монстрів при створенні гри Alien Massacre. Дане рішення підійде для будь-яких проектів, які испольуют спрайтовую анімацію.

В результаті розробки мобільної гри виявилося, що досить вузьким місцем стало програвання великої кількості анімованих об'єктів на сцені. У результаті сформувалися наступні вимоги:

  • 1 Необхідно забезпечити обробку великої кількості анімованих об'єктів на сцені. Адже ми хочемо, щоб гравець відстрілювався від полчищ монстрів.
  • 2 Прогрес анімації повинен бути різний для кожного з об'єктів. Адже ми не хочемо, щоб моби ходили строєм.
Рішення «з коробки»
Безумовно, перше рішення було простим: все зробити за допомогою вбудованого в UnityEngine компонента Animator. Подивимося, що з цього виходить.

Читати далі →

Профілювання та оптимізація програм на Go

Введення
У цій статті я розповім, як профілювати та оптимізувати програми на мові Go з використанням вбудованих і загальних інструментів, доступних в ОС Linux.

Що таке профайлинг і оптимізація? Якщо ваша програма працює недостатньо швидко, використовує занадто багато пам'яті, неоптимально використовує процесор, ви хочете зрозуміти, в чому справа, і виправити — це і є профайлинг і оптимізація.

Я навів таке визначення, щоб відразу відсікти питання некоректної роботи програми. У цій статті ми не будемо говорити про проблеми мультитредового програмування, про дата-рейсах (англ. data race), про пошук помилок (англ. debugging). Для всього цього в Go є свої утиліти і підходи, але залишимо цю тему на майбутнє.




Читати далі →

Чистимо цибулю (але не плачемо): методики оптимізації

Ця стаття являє собою формалізований відповідь на публікацію на форумі IDZ. Проблема, яку описував автор початкової публікації, полягала в тому, що продуктивність роботи коду не збільшувалася достатньою мірою при використанні OpenMP на 8-ядерному процесорі E5-2650 V2 з 16 апаратними потоками. Знадобилося деякий час на форумі, щоб допомогти автору публікації і надати йому необхідні підказки, однак часу для оптимізації коду було недостатньо. У цій статті описуються подальші методики оптимізації на додаток до описаних на форумі IDZ.


Читати далі →