Pull to refresh
4
0.8
Дмитрий Померанцев @pda0

User

Send message

Тест Lossless-оптимизаторов изображений (PNG и JPG)

Reading time3 min
Views21K
Для многих не секрет, что большинство изображений в форматах JPEG и PNG содержат избыточную информацию, которая может быть удалена без потери качества. Обычно это достигается за счет эвристических алгоритмов перебора различных параметров компрессии и выбора наименее затратного варианта. Применение оптимизаторов особенно важно на файлах, которые используются на посещаемых сайтах, для экономии дискового пространства, трафика и уменьшения времени загрузки страниц у пользователей. Программ такого типа довольно много и мы поставили себе цель найти какие же оптимизаторы сжимают лучше и работают быстро.

В тесте принимали участие следующие программы.

Для PNG:

1. Leanify 0.4.3 (x64)
2. pingo v0.79c
3. pinga v0.09
4. OptiPNG 0.7.6
5. pngout
6. PngOptimizer 2.5 (x64)
7. advpng aka AdvanceCOMP v1.23
8. ECT 0.6 (x64)
9. TruePNG 0.6.2.2
10. pngwolf-zopfli 1.1.1 (x64)

Для JPEG:

1. Leanify 0.4.3 (x64)
2. pingo v0.79c
3. ECT 0.6 (x64)
4. mozjpeg 3.2 (x64)
5. jhead 3.00
6. jpegoptim v1.4.4 (x64)
7. jpegtran
Читать дальше →

Выбор диаграммы для одномерных данных: геометрическая модель

Reading time4 min
Views10K

Визуализация данных — это всегда некоторое графическое построение, которое помогает исследовать имеющиеся данные. Мы строим геометрическую модель и изменяем её, чтобы представить разные аспекты данных. Также мы сталкиваемся с ограничением, которые накладывает визуальное восприятие, заключающемся в том, что размерность визуализации не может быть больше двух. Все доступные графические средства двумерны: лист бумаги или экран монитора.


На примере диаграмм для одномерных данных посмотрим, как строится геометрическая модель, как она модифицируется, и как проявляется размерность данных и визуализации.


Выбор диаграммы для одномерных данных: геометрическая модель


Читать дальше →

PWA, «Зловещая долина» и стабильная работа в офлайне

Reading time9 min
Views9.2K
В июле прошлого года на Altitude 2016 Алекс Рассел (Alex Russell) из Fastly рассказал, как он видит будущее мобильных приложений с учетом PWA и service worker, как обеспечить надежную работу приложения в офлайне и как обойти «зловещую долину» в мобильном интерфейсе.

Сейчас service worker — это программируемое прокси внутри браузера


«В команде мы знаем, что быстрее всегда лучше», отметил Алекс. «Это обстоятельство подтверждено десятками исследований как нашей команды, так и другими».

Такая закономерность проиллюстрирована на рисунке 1. Хорошо видно, что с увеличением времени загрузки веб-страницы:

1) сильно падает количество обращений к странице;
2) постоянно растет процент отказов.


Рис. 1. Быстрее всегда лучше
В виде столбиковой диаграммы показана зависимость количества обращений к веб-странице за секунду от времени загрузки (этой страницы также в секундах.
В виде красного графика показана зависимость показателя отказов в процентах от того же времени загрузки в секундах веб-страницы

Читать дальше →

Графическое описание владения и заимствования в Rust

Reading time2 min
Views14K

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



Чтобы избежать путаницы, я попытался свести текст к минимуму. Данная заметка не является заменой различных учебных руководств, и лишь сделана для тех, кто считает, что визуально информация воспринимается легче. Если вы только начали изучать Rust и считаете данные графики полезными, то я бы порекомендовал вам отмечать свой код похожими схемами для лучшего закрепления понятий.


Читать дальше →

Как проверить причинную связь без эксперимента?

Reading time9 min
Views16K


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

Действительно ли пациентам, тестирующим новое лекарство, становится лучше из-за лекарства, или они все все равно бы выздоровели? Ваши продавцы действительно эффективны или же они говорят с теми клиентами, которые и так готовы совершить покупку? Действительно ли Сойлент (или рекламная кампания, которая обойдётся фирме в миллион долларов) стоит вашего времени?
Читать дальше →

Введение в futures-rs: асинхронщина на Rust [перевод]

Reading time18 min
Views15K


Этот документ поможет вам изучить контейнер для языка программирования Rust — futures, который обеспечивает реализацию futures и потоков с нулевой стоимостью. Futures доступны во многих других языках программирования, таких как C++, Java, и Scala, и контейнер futures черпает вдохновение из библиотек этих языков. Однако он отличается эргономичностью, а также придерживается философии абстракций с нулевой стоимостью, присущей Rust, а именно: для создания и композиции futures не требуется выделений памяти, а для Task, управляющего ими, нужна только одна аллокация. Futures должны стать основой асинхронного компонуемого высокопроизводительного ввода/вывода в Rust, и ранние замеры производительности показывают, что простой HTTP сервер, построенный на futures, действительно быстр.


Читать дальше →

Разработка игр на Rust. Обзор экосистемы

Reading time6 min
Views48K

Здравствуйте! Я занимаюсь разработкой игры на Rust и хочу рассказать об этом.


Моя первая статья будет полезна тем, кто хочет начать делать игру на Rust, но не уверен, какие из пакетов (крейтов) стоит использовать и что вообще происходит в экосистеме Rust для игрового разработчика.

Читать дальше →

Декодирование GIF

Reading time4 min
Views18K
В прошлый раз мы разобрались как устроен JPEG (Декодирование JPEG для чайников). Вполне логично, что следующим форматом стал GIF. Кстати, он гораздо проще. Его, в отличии от JPEG, можно декодировать имея только ручку с бумажкой. Сначала, продолжая традицию, я захотел закодировать в GIF favicon Гугла, но потом решил, что лучше расписать процесс декодирования всего файла на маленьком изображении. Без всяких «а дальше по аналогии...». Пришлось долго экспериментировать, и картинка получилась неказистой, зато вполне наглядной для изучения.

Итак, мы будем ковырять вот эту картинку . Видите? :) Тогда она же, увеличенная в 10 раз:


Внутренности в hex-редакторе:

Читать дальше →

GIF изнутри

Reading time7 min
Views58K

Вам когда-нибудь было интересно, как устроены gif-ки? В данной статье попробуем разобраться с внутренним строением GIF-формата и методом сжатия LZW.

Структура GIF


Файл в формате GIF состоит из фиксированной области в начале файла, за которой располагается переменное число блоков, и заканчивается файл завершителем изображения.


Читать дальше →

PNG — not GIF!

Reading time4 min
Views88K
Доброго времени суток!
Вам когда-нибудь хотелось узнать как устроены файлы PNG? Нет? А я все равно расскажу.
Формат PNG(Portable Network Graphics) был изобретен в 1995 году, чтобы стать заменой GIF, а уже в 1996, с выходом версии 1.0, он был рекомендован W3C, в качестве полноправного сетевого формата. На сегодняшний день PNG является одним из основных форматов веб-графики.

Под катом вы найдете общее описание строения PNG-файла, некоторое количество картинок-схем, препарирование в hex-редакторе, и, конечно, ссылку на спецификацию.
Читать дальше →

Декодирование JPEG для чайников

Reading time9 min
Views282K

[FF D8]


Вам когда-нибудь хотелось узнать как устроен jpg-файл? Сейчас разберемся! Прогревайте ваш любимый компилятор и hex-редактор, будем декодировать это:


Jpeg file in hex editor


Специально взял рисунок поменьше. Это знакомый, но сильно пережатый favicon Гугла: Google favicon


Последующее описание упрощено, и приведенная информация не полная, но зато потом будет легко понять спецификацию.


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


[FF D8] — маркер начала. Он всегда находится в начале всех jpg-файлов.


Следом идут байты [FF FE]. Это маркер, означающий начало секции с комментарием. Следующие 2 байта [00 04] — длина секции (включая эти 2 байта). Значит в следующих двух [3A 29] — сам комментарий. Это коды символов ":" и ")", т.е. обычного смайлика. Вы можете увидеть его в первой строке правой части hex-редактора.

Читать дальше →

5 советов по созданию впечатляющей моушн-графики

Reading time4 min
Views20K
Светлана Шаповалова, редактор «Нетологии», перевела статью Кары Эберле о том, как создавать эффектную и качественную анимационную графику и что для этого нужно.

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


Инструкция по публикации iOS-приложения в App Store

Reading time6 min
Views129K
Однажды менеджеры Лайв Тайпинг подумали: «Как хорошо было бы иметь инструкцию-чеклист, чтобы ничего не забыть перед публикацией приложения в стор. С ней можно перестать носить всё в голове и не объяснять вновь пришедшим менеджерам, что к чему, а просто скинуть гуглдок». Подумали и написали — для себя. Но потом поняли, что нехорошо скрывать полезную информацию от общественности. Поэтому мы надеемся, что инструкция поможет менеджерам всех остальных студий так же, как помогает нам.

Тема этой заметки — публикация приложения в App Store. Чуть позже мы опишем порядок действий для публикации в Google Play.

Что же нужно сделать PM`y в ходе публикации:

  1. создать аккаунт в App Store для заказчика, если у заказчика его нет, или предложить
  2. опубликовать приложение с нашего аккаунта;
  3. подготовить маркетинговые материалы (иконка, скриншоты, текст, видео для предпросмотра приложения);
  4. приложить к сборке сертификат цифровой подписи;
  5. настроить оплату за пользование приложения;
  6. Отправить сборку в App Store.

Идём под кат и разбираем по порядку.


Читать дальше →

Гид по верстке адаптивных писем

Reading time13 min
Views68K

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


image


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

Читать дальше →

Маленькие трюки DirectX и HLSL

Reading time9 min
Views22K
Привет, Хабр! Решил написать статью-заметку о небольших трюках, которые использую в своем скромном движке. Это скорее заметка самому-себе, и матёрые программисты лишь усмехнутся, но, думаю, новичкам она может пригодится.
Читать дальше →

UX при локализации приложений: пособие разработчика

Reading time12 min
Views6.2K


Покопаемся в разных определениях UX, проанализируем все возможные проблемы с UX при локализации и узнаем о том, как одна мелочь может пустить под откос весь опыт взаимодействия пользователей с вашим приложением.

Переведено в Alconost

Если вам еще не встречался термин «опыт взаимодействия» или «пользовательский опыт» (user experience, UX), самое время о нем узнать, особенно учитывая его огромное влияние на успех локализации приложения.

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

В какой мере опыт пользования приложением зависит от вас? Пожалуй, в намного большей, чем вы думаете, а когда дело доходит до локализации приложения — даже еще большей.
Читать дальше →

Особенности локализации игр на иностранные рынки

Reading time14 min
Views30K
Под катом вы найдете лонгрид на тему локализации игр, подготовленный на базе открытой лекции Алексея Медова — ведущего редактора Inlingo Game Localization Studio. Лекция проходила в рамках нашей образовательной программы «Менеджмент игровых интернет-проектов» в ВШБИ. О чем же мы поговорим в статье?

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



Читать дальше →

Разработка для Sailfish OS: Модульное тестирование Qt/C++ под Sailfish OS

Reading time5 min
Views4.8K
Здравствуйте! Эта статья является продолжением цикла статей о тестировании Sailfish-приложений (предыдущая статья), и на этот раз мы рассмотрим модульное тестирование С++ в рамках проектов для Sailfish OS.
Читать дальше →

Прекрасные конечные автоматы на Rust

Reading time16 min
Views13K

Перевод статьи Andrew Hobden "Pretty State Machine Patterns in Rust". Ссылка на оригинал в конце.


Последнее время я много размышлял о шаблонах проектирования и приемах, которые мы используем в программировании. Это и в самом деле прекрасно — начать исследовать проект и видеть знакомые шаблоны и стили, которые ты уже не раз встречал. Это облегчает понимание проекта и дает возможность ускорить работу.


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


Один интересный шаблон, часто применяемый к таким проблемам — "Конечный автомат". Предлагаю потратить немного времени, чтобы понять, что именно имеется ввиду под этим словосочетанием, и почему же это так интересно.

Читать дальше →

Как создать музыку для видеоигры

Reading time5 min
Views56K
[Публикую собственный перевод статьи за авторством TitanSlayer, автора музыки для видео игр, фильмов и ТВ]

Мне всегда нравились видеоигры. С самого детства я был очарован, загипнотизирован такими играми как Quake, Hexen, Heroes of Might & Magic.

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

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

Information

Rating
2,629-th
Location
Химки, Москва и Московская обл., Россия
Date of birth
Registered
Activity