Как стать автором
Обновить
14
0

Пользователь

Отправить сообщение

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

Время на прочтение11 мин
Количество просмотров23K
На 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)

Читать дальше →
Всего голосов 28: ↑28 и ↓0+28
Комментарии6

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

Время на прочтение15 мин
Количество просмотров20K

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



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

Читать дальше →
Всего голосов 48: ↑47 и ↓1+46
Комментарии65

Pillow-SIMD

Время на прочтение5 мин
Количество просмотров14K

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



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


Почему SIMD


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


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

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

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

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

Время на прочтение5 мин
Количество просмотров202K


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

Для статьи я подобрал наиболее полезные дополнения «на все случаи жизни».
Читать дальше →
Всего голосов 123: ↑111 и ↓12+99
Комментарии25

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

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


Читать дальше →
Всего голосов 32: ↑23 и ↓9+14
Комментарии85

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

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

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

Время на прочтение10 мин
Количество просмотров104K
Если вы когда-нибудь сталкивались с задачей ресайза картинок в браузере, то вы наверное знаете, что это очень просто. В любом современном браузере есть такой элемент, как холст (<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
Читать дальше →
Всего голосов 156: ↑152 и ↓4+148
Комментарии90

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

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


Читать дальше →
Всего голосов 37: ↑35 и ↓2+33
Комментарии29

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

Время на прочтение12 мин
Количество просмотров20K

(пример работы протокола 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;
  • Разные мысли вслух и рассказы о «шишках».

Читать дальше →
Всего голосов 39: ↑38 и ↓1+37
Комментарии15

Анонсирован Xiaomi MI2

Время на прочтение1 мин
Количество просмотров104K
Компания Xiaomi анонсировала свой новый смартфон все так же работающий под прошивкой MIUI.

image

Краткие технические характеристики под катом

Читать дальше →
Всего голосов 66: ↑52 и ↓14+38
Комментарии109

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

Время на прочтение4 мин
Количество просмотров414K

Предисловие


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

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

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

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

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

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

Читать дальше →
Всего голосов 323: ↑313 и ↓10+303
Комментарии331

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

Время на прочтение3 мин
Количество просмотров23K
Привет, хабр!
image
Я и мои друзья давно пользуются программой Gyazo.

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

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

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

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

Введение в jQuery Mobile

Время на прочтение6 мин
Количество просмотров25K

Введение в jQuery Mobile


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

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

Время на прочтение2 мин
Количество просмотров21K

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

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

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

А чем же он удивителен, узнаем под катом
Всего голосов 73: ↑64 и ↓9+55
Комментарии172

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

Время на прочтение1 мин
Количество просмотров30K
USB Safely Remove — это удобная и надежная замена Безопасного Извлечения Устройств в операционной системе Windows.



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

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

Время на прочтение1 мин
Количество просмотров1K
В начале мая я с удовольствием упомянул о том, как Ставропольское УФАС принудило основного провайдера в Ставропольском крае многократно понизить цены, устранив разрыв между крупными городами и прочими населёнными пунктами. Тысячи русских людей смогли вздохнуть свободно.
Читать дальше →
Всего голосов 80: ↑66 и ↓14+52
Комментарии144

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

Время на прочтение2 мин
Количество просмотров34K
Начиная с сегодняшнего дня в рамках подписки 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.
Читать дальше →
Всего голосов 122: ↑87 и ↓35+52
Комментарии245

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

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

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


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

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

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

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

Читать дальше →
Всего голосов 17: ↑10 и ↓7+3
Комментарии12
1
23 ...

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность