Pull to refresh
14
0

User

Send message

Сжатие фотографий без видимой потери качества: опыт Yelp

Reading time11 min
Views23K
На Yelp хранится более 100 миллионов пользовательских фотографий, от картинок ужинов и причёсок до одной из наших последних фич, #yelfies. Эти изображения составляют основную часть трафика для пользователей приложения и веб-сайта, а их хранение и передача обходятся недёшево. Стараясь предоставить людям наилучший сервис, мы усиленно работали над оптимизацией всех фотографий и добились среднего уменьшения размера на 30%. Это экономит людям время и трафик, а также сокращает наши расходы на обслуживание этих изображений. Ах да, и мы сделали это без ухудшения качества фотографий!

Исходные данные


Yelp хранит пользовательские фотографии уже 12 лет. Мы сохраняем lossless-форматы (PNG, GIF) как PNG, а все остальные форматы в JPEG. Для сохранения файлов используются Python и Pillow, а загрузки фотографий начинаются примерно с такого сниппета:

# do a typical thumbnail, preserving aspect ratio
new_photo = photo.copy()
new_photo.thumbnail(
    (width, height),
    resample=PIL.Image.ANTIALIAS,
)
thumbfile = cStringIO.StringIO()
save_args = {'format': format}
if format == 'JPEG':
    save_args['quality'] = 85
new_photo.save(thumbfile, **save_args)

Читать дальше →
Total votes 28: ↑28 and ↓0+28
Comments6

Как я сделал самый быстрый ресайз изображений. Часть 1, общие оптимизации

Reading time15 min
Views20K

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



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

Читать дальше →
Total votes 48: ↑47 and ↓1+46
Comments65

Pillow-SIMD

Reading time5 min
Views14K

Ускорение операций в 2.5 раза по сравнению с Pillow и в 10 по сравнению с ImageMagick



Pillow-SIMD — это «форк-последователь» библиотеки работы с изображениями Pillow (которая сама является форком библиотеки PIL, ныне покойной). «Последователь» означает, что проект не становится самостоятельным, а будет обновляться вместе с Pillow и иметь ту же нумерацию версий, только с суффиксом. Я надеюсь более-менее оперативно выпускать версии Pillow-SIMD сразу после выхода версий Pillow.


Почему SIMD


Есть несколько способов улучшения производительности обработки изображений (да и всех остальных вещей, наверное, тоже).


  1. Можно использовать более хорошие алгоритмы, которые дают такой же результат.
  2. Можно сделать более быструю реализацию существующего алгоритма.
  3. Можно подключить больше вычислительных ресурсов для решения той же задачи: дополнительные ядра CPU, GPU.
Читать дальше →
Total votes 23: ↑23 and ↓0+23
Comments5

Как мы Elasticsearch готовили, или О том, как обработать 36 тысяч логов в секунду

Reading time5 min
Views32K
В один прекрасный момент для одного из проектов появилась необходимость в хранении, обработке и визуализации большого количества логов. Необходимо было индексировать около 10-20 тысяч запросов в секунду с пиками до сотни тысяч, что, как оказалось, является нетривиальной задачей. Для решения этой проблемы мы решили использовать уже знакомый многим ELK- стек. Единственным вопросом было — «а потянет ли он». Как оказалось, потянет, но не сразу.
Читать дальше →
Total votes 29: ↑27 and ↓2+25
Comments24

50+ лучших дополнений к Bootstrap

Reading time5 min
Views202K


Благодаря популярности CSS фреймворка Bootstrap, для него разработали массу различных дополнений. Даже сейчас вы можете использовать Bootstrap практически для любой задачи при разработке и оформлении вебсайта.

Для статьи я подобрал наиболее полезные дополнения «на все случаи жизни».
Читать дальше →
Total votes 123: ↑111 and ↓12+99
Comments25

Атомный реактор в каждый сайт

Reading time9 min
Views23K
Все слышали о том, что PHP создан, чтобы умирать. Так вот, это не совсем правда. Если захотеть — PHP может не умирать, работать асинхронно, и даже поддерживает честную многопоточность. Но не всё сразу, в этот раз поговорим о том, как сделать чтобы он жил долго, и поможет нам в этом атомный реактор!


Читать дальше →
Total votes 32: ↑23 and ↓9+14
Comments85

15 советов и хитростей инструментов разработчика Chrome, которые вы обязаны знать

Reading time5 min
Views204K
Сегодня Google Chrome является самым популярным браузером среди веб разработчиков. С быстрым, шести недельным, циклом релизов и мощным набором постоянно расширяющихся инструментов разработчика, превратившим браузер в инструмент, который вы обязаны иметь. Большинство из вас, вероятно, знакомы со многими его функциями, такими как «живое» редактирование CSS, используя консоль и отладчик. В этой статье мы с вами рассмотрим 15 захватывающих советов и хитростей, которые позволят улучшить вашу производительность еще больше.
Читать дальше →
Total votes 88: ↑85 and ↓3+82
Comments23

Ресайз картинок в браузере. Все очень плохо

Reading time10 min
Views104K
Если вы когда-нибудь сталкивались с задачей ресайза картинок в браузере, то вы наверное знаете, что это очень просто. В любом современном браузере есть такой элемент, как холст (<canvas>). На него можно нанести изображение нужных размеров. Пять строчек кода и картинка готова:

function resize(img, w, h) {
  var canvas = document.createElement('canvas');
  canvas.width = w;
  canvas.height = h;
  canvas.getContext('2d').drawImage(img, 0, 0, w, h);
  return canvas;
}

Из холста картинку можно сохранить в JPEG и, например, отправить на сервер. Можно было на этом закончить статью, но сперва давайте взглянем на результат. Если вы поставите рядом такой холст и обычный элемент <img>, в который загружена та же картинка (исходник, 4 Мб), то вы увидите разницу.

img
Читать дальше →
Total votes 156: ↑152 and ↓4+148
Comments90

Lego WeDo — робототехника для самых маленьких

Reading time2 min
Views98K
То, что робототехника в будущем будет все больше проникать в повседневную жизнь обычного человека, уже понятно многим, если не всем. И с какими возможностями и трудностями столкнется человечество — тоже дискуссия открыта.
Но как подготовить подрастающее поколение к этим изменениям, выработать у них правильное отношение к проблеме, ознакомить с принципами и правилами функционирования роботов?


Читать дальше →
Total votes 37: ↑35 and ↓2+33
Comments29

Не стоит бояться использовать HandlerSocket

Reading time12 min
Views20K

(пример работы протокола HandlerSocket на картинке)

Вступление


В предыдущем проекте возникла потребность в разгрузке базы данных, тогда жизнь и столкнула меня с HandlerSocket`ом.

HandlerSocket — это протокол, реализованный в одноимённом плагине для РСУБД MySQL, позволяющий использовать NoSQL методику для доступа к данным, хранящимся в InnoDB таблицах. Основная причина, по которой используют NoSQL решения — это очень быстрый поиск по первичному ключу.

Еще про HandlerSocket
HandlerSocket работает как демон внутри процесса mysql, принимая TCP соединения и выполняя запросы клиентов. Он не поддерживает SQL запросы, вместо этого он предоставляет простой язык запросов для CRUD операций с таблицами. Именно поэтому он гораздо быстрее mysqld/libmysql в некоторых случаях:

HandlerSocket оперирует данными без парсинга SQL запроса, что приводит к уменьшению загрузки процессора.
Он поддерживает пакетное выполнение запросов. Можно отправить несколько запросов сразу и получить результат за один раз, что опять же снижает нагрузку на процессор и на сеть.
Протокол HandlerSocket более компактный, чем у mysql/libmysql, что приводит к сокращению нагрузки на сеть.

Подробнее можно почитать здесь:



Под катом вас ожидает:
  • Новая библиотека для работы с HS, написанная на PHP;
  • Сравнение производительности существующих решений + нового;
  • Symfony2 bundle для работы с HS;
  • Плагины к Munin для мониторинга активности HS;
  • Разные мысли вслух и рассказы о «шишках».

Читать дальше →
Total votes 39: ↑38 and ↓1+37
Comments15

Очень быстрый и эффективный способ расслабления глаз

Reading time4 min
Views412K

Предисловие


imageНе знаю, все ли программисты всесторонне любознательные люди, но я всегда пытаюсь получить фундаментальные знания во всех областях, которые могут быть практически полезны. В то время, когда мне в голову пришла эта идея я изучал анатомию и физиологию по журналам «Тело человека. Снаружи и внутри», ну а по работе я занимался стерео-варио фотографиями (для тех кто не знает — были такие советские календарики с ребристой поверхностью, где картинка либо казалась объемной, либо менялась). Так вот, в один из вечеров мне пришла в голову замечательная идея, которую я на протяжении уже 4х лет использую для поддержания своего зрения.
Обещаю, что эффект почувствуете сразу!
Читать дальше →
Total votes 246: ↑238 and ↓8+230
Comments207

Механические клавиатуры

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

А раз уж сталкиваешься с вещью регулярно, постепенно возникает вопрос — можно ли найти для работы какие-то более удобные варианты обычных клавиатур?

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

Механические клавиатуры. Путеводитель.

Читать дальше →
Total votes 323: ↑313 and ↓10+303
Comments331

Gyazo на собственном сервере

Reading time3 min
Views23K
Привет, хабр!
image
Я и мои друзья давно пользуются программой Gyazo.

Вкратце: маленькая программка, при запуске которой можно сразу выделять область на экране, а как только отпускаешь мышку, область закачивается на сервер gyazo, а в буфер обмена сразу копируется ссылка на него.
Попробовать можно здесь: http://gyazo.com

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

Сначала, в буфер копировалась не прямая ссылка на картинку, а ссылка на страничку с рекламой. Затем и вовсе прямой файл стал недоступен.

Поскольку gyazo является Open Source проектом, я решил сделать версию «для себя» и без рекламы.
Читать дальше →
Total votes 65: ↑57 and ↓8+49
Comments88

Введение в jQuery Mobile

Reading time6 min
Views24K

Введение в jQuery Mobile


Мобильная стратегия jQuery может быть легко объяснена — это внедрение пользовательского JavaScript в наиболее часто используемые браузеры на мобильных платформах.
Основной ценностью нашего подхода является широкий спектр платформ, поддерживаемых jQuery Mobile. Мы прилагаем все усилия, что бы jQuery поддерживал все мобильные браузеры, по крайней мере занимающие номинальную долю рынка.
Что бы обеспечить широкую поддержку, все страницы в jQuery Mobile построены на чистом HTML, это обеспечивает совместимость с довольно многими web-ориентированными устройствами. В устройствах, которые интерпретируют CSS и JavaScript, jQuery Mobile применяет прогрессивные методы, что бы ненавязчиво преобразовать семантические страницы используя богатый интерактивный опыт и мощь Query и CSS. Стандарты доступности активных интернет-приложений, таких как WAI-ARIA тесно интегрированы во всей структуре для оказания поддержки для чтения с экрана.
Читать дальше →
Total votes 30: ↑18 and ↓12+6
Comments21

Mi-one новый смартфон Xiaomi

Reading time2 min
Views21K

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

Не буду слишком углубляться в историю и скажу лишь, что MIUI начиналась, как обычная кастомная прошивка для Android с не совсем обычным интерфейсом. Разрабатывают её ребята из Китая. При этом измененный интерфейс Андроида в этой прошивке, мягко говоря, напоминает интерфейс небезызвестного телефона на «i».

Так вот, эти самые ребята решили, что прошивка прошивкой, но телефон лучше и, назвавшись Xiaomi, выпустили телефон. Аппарат называется MI-One и имеет весьма неплохие характеристики, позволяющие отнести его к флагманам рынка Android смартфонов.

А чем же он удивителен, узнаем под катом
Total votes 73: ↑64 and ↓9+55
Comments172

Бесплатная пожизненая лицензия для USB Safely Remove

Reading time1 min
Views30K
USB Safely Remove — это удобная и надежная замена Безопасного Извлечения Устройств в операционной системе Windows.



Она облегчает жизнь и экономит время тем, у кого есть несколько hotplug (USB, SATA, Firewire) устройств, и тем, кто пользуется ими активно.
Читать дальше →
Total votes 117: ↑82 and ↓35+47
Comments157

Федеральная антимонопольная служба продолжает искоренять чрезмерное провайдерское рвачество

Reading time1 min
Views995
В начале мая я с удовольствием упомянул о том, как Ставропольское УФАС принудило основного провайдера в Ставропольском крае многократно понизить цены, устранив разрыв между крупными городами и прочими населёнными пунктами. Тысячи русских людей смогли вздохнуть свободно.
Читать дальше →
Total votes 80: ↑66 and ↓14+52
Comments144

Windows 7 бесплатно для студентов, аспирантов и преподавателей

Reading time2 min
Views33K
Начиная с сегодняшнего дня в рамках подписки MSDN Academic Alliance стала доступной для скачивания и установки Windows 7.

Update. В системе ELMS операционная система теперь также доступна. Если вы ее не видите, попросите администратора поставить галочку напротив образа.

image

Это означает, что теперь любой студент, аспирант, преподаватель факультета, на котором оформлена подписка, может бесплатно получить свою копию Windows 7.

В настоящий момент доступна английская версия. 14 августа в подписке должна появиться Windows Server 2008 R2. 21 августа должны появиться русские версии продуктов.

upd 25.08 C 21 августа началась загрузка третьей волны установочных образов, включая русский. Финальная дата окончания 3 волны — 1 октября (см. также здесь). Мы сообщим отдельно, как только образы станут доступны в рамках MSDNAA.

upd 26.08. Чтобы следить за появлением новых продуктов в подписках можно также подписаться на RSS-ленты: msdn.microsoft.com/en-us/subscriptions/subscription-downloads.rss (En) и msdn.microsoft.com/ru-ru/subscriptions/subscription-downloads.rss (Ru).

Также Windows 7 появилась в подписках MSDN и TechNet.
Читать дальше →
Total votes 122: ↑87 and ↓35+52
Comments245

Правильный выбор CMS интернет-магазина для новичков

Reading time7 min
Views5.9K
Я нашел пару статей на эту тему на хабре, но статью я написал придерживаясь определенной философии для начинающих торговцев: «простота=успех». Поэтому и советы по выбору давал исходя из этого тезиса.
Прошу судить строго, но карму не минусовать)

Пятая статья цикла “Интернет-магазин с нуля. Помощь начинающему предпринимателю”


Выбор движка. Движок или исполнитель? Критерии отбора движка. Как не ошибиться с выбором. Аренда движка. Хостинг и домен. Список русских CMS-решений.

Хочу сразу сказать: в этой статье не будет рекомендации выбрать какой-то определенный движок.

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

На этапе, когда надо выбрать, как создавать функционал ИМ, я бы посоветовал обратиться за консультацией к профессионалу или на форум Oborot. Существует множество факторов, которые влияют на решение вопроса, к примеру: регион, товар, бюджет. Потраченное время или даже платная консультация помогут пойти путем наименьшей потери сил, времени и денег. Консультация может обойтись в 20 у.е. тогда как решение создать ИМ в регионе в 300 у.е. и оказаться лишь амбицией бизнесмена без серьезных аргументов.

Читать дальше →
Total votes 17: ↑10 and ↓7+3
Comments12
1
23 ...

Information

Rating
Does not participate
Registered
Activity