пілотної частини я розповів про завдання як можна докладніше. Розповідь вийшов довгим і безпредметним — в ньому не було ні одного рядка коду. Але без розуміння завдання дуже складно займатися оптимізацією. Звичайно, деякі техніки можна застосовувати, маючи на руках тільки код. Наприклад, кешувати обчислення, скорочувати розгалуження. Але мені здається, що деякі речі без розуміння завдання просто ніколи не зробити. Це і відрізняє людину від оптимізуючого компілятора. Тому ручна оптимізація все ще відіграє величезну роль: у компілятора є тільки код, а у людини є розуміння завдання. Компілятор не може прийняти рішення, що значення "4" досить випадково, а людина може.

Нагадаю, що мова піде про оптимізацію операції ресайза зображення методом згорток у реально існуючій бібліотеці Pillow. Я буду розповідати про тих змінах, що я робив кілька років тому. Але це не буде повторення слово-в-слово: оптимізації будуть описані в порядку, зручному для оповідання. Для цих статей я зробив в репозиторії окрему гілку від версії 2.6.2 — саме з цього моменту і буде йти розповідь.
Читати далі →

Як я зробив найшвидший ресайз зображень. Частина 0

Привіт, мене звати Саша, я написав найшвидший ресайз зображень для сучасних процесорів х86. Я так стверджую, оскільки всі інші бібліотеки, які я зумів знайти і протестувати, виявилися повільніше. Я зайнявся цим завданням, коли працював над оптимізацією ресайза картинок на льоту Uploadcare. Ми вирішили відкрити код і в результаті з'явився проект Pillow-SIMD. Будь-хто з легкістю може використовувати його в додатку на мові Python.
Будь-код виконується на конкретному залозі і гарну оптимізацію можна домогтися, лише розуміючи його архітектуру. Всього я планую випустити 4 або 5 статей, в яких розповім як застосовувати знання архітектури заліза для оптимізації реальної задачі. Своїм прикладом я хочу спонукати вас оптимізувати інші прикладні задачі. Перші дві статті вийдуть протягом тижня, решта — по мірі готовності.
Читати далі →

Pillow-SIMD

Прискорення операцій у 2.5 рази порівняно з Pillow і в 10 порівняно з ImageMagick

Pillow-SIMD — це «форк-послідовник» бібліотеки роботи з зображеннями Pillow (яка сама є форком бібліотеки PIL, нині покійної). «Послідовник» означає, що проект не стає самостійною, а буде оновлюватися разом з Pillow і мати ту ж нумерацію версій, тільки з суфіксом. Я сподіваюся більш-менш оперативно випускати версії Pillow-SIMD відразу після виходу версій Pillow.
Чому SIMD
Є кілька способів поліпшення продуктивності обробки зображень (та і всіх інших речей, напевно, теж).
  1. Можна використовувати більш кращі алгоритми, які дають такий же результат.
  2. Можна зробити більш швидку реалізацію існуючого алгоритму.
  3. Можна підключити більше обчислювальних ресурсів для рішення тієї ж задачі: додаткові ядра CPU, GPU.

Читати далі →

Pillow 2.7 - Істотні поліпшення якості і продуктивності

Першого січня 2015 року, за розкладом, вийшла нова версія бібліотеки для роботи із зображеннями Pillow 2.7. І так як багато зміни в ній були зроблені командою Uploadcare, ми раді представити вам розширену версію нотаток про релізі цієї версії.

Для початку згадаємо, з чого все почалося. Pillow — дружній форк (як називають його автори) популярної бібліотеки PIL, Python Imaging Library. Остання версія PIL 1.1.7 вийшла в 2009 році і в основному містила виправлення помилок. Спочатку Pillow замислювався як проект тільки з приведення в порядок складання ПІЛЬ, і розробники рекомендував відправляти всі баги, не пов'язані зі складанням, оригінальний PIL. Але час минав, PIL стрімко застарівала, багів не зменшувалася, тут ще Python 3 маячила на горизонті. Тому з версією Pillow 2.0 все змінилося. «Pillow 2.0.0 додає підтримку Python 3 і включає багато багфіксів зі всього інтернету» свідчить опис проекту на PyPI. І з тих пір понеслося. Кожні три місяці виходили версії з величезних кількістю багфіксів та іншими поліпшеннями від різних розробників. Найбільш значне нововведення за цей час було, мабуть, підтримка форматів WebP і JPEG2000. Тепер прийшов час наступного великого кроку.
Читати далі →

Лікнеп: методи ресайза зображень

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

Взагалі, це було вступом до іншої статті, але воно затягнулося і вилилося в окремий матеріал.


Ця людина сидить серед ромашок, щоб привернути вашу увагу до статті.
Читати далі →

Ще один скрипт генерації іконок для Android

Привіт, Хабр!

Невеликий вступ

Досить давно я працюю тестувальником мобільних додатків. Переважно, android-додатків (хоча були і WinCE, і iOS). Переважно, руками (хоча пробував і автоматизувати з monkeyrunner і uiautomator). Останнім часом все більше часу доводиться приділяти проектуванню інтерфейсів, питань менеджменту, релізами та інших справах. Одним словом, завдання доводиться вирішувати хоч зазвичай і нескладні, але досить різноманітні. Про одну з них мені б хотілося розповісти.

У чому, власне, справа

Нещодавно ми з колегою в команді Rumsunrise експериментували з підтримкою android 5 і material design в наших програмах. В процесі підготовки проекту зіткнулися з несподіваною дрібною проблемою області дизайну.

Читати далі →