5 заметок с тегом

проект

grunt-favicons

27 августа 2013, 2:16

Добавил ли фавиконку? Есть ли версия иконки для айфона? Есть ли иконки нужного размера? Какой программой быстро сделать мультиразмерную фавиконку?

На все эти вопросы приходилось отвечать перед завершением каждого проекта. Чеклист чеклистом, но ситуация требовала автоматизации. Была изучена матчасть по иконкам, их форматам и размерам, которая позже переросла в баш-скрипт. А потом и в плагин для гранта.

Итак, grunt-favicons.

Устанавливается как обычно:

npm install grunt-favicons --save-dev

Чтобы всё работало, требуется установить imagemagick.

На маке:
brew install imagemagick
на линуксе:
apt-get install imagemagick

Фичи

Пример таска с опциями по-умолчанию:

favicons: {
    production: {
        options: {
            html: 'deploy/index.html',
            HTMLPrefix: "/img/favicon/",
            trueColor: false,
            precomposed: true,
            appleTouchBackgroundColor: "auto", // none, auto, #color
            windowsTile: true,
            tileBlackWhite: true,
            tileColor: "auto" // none, auto, #color
        },
        src: 'site/img/favicon.png',
        dest: 'deploy/img/favicon'
    }
}

Плагин берет картинку «src» и помещает в «dest» результаты своих трудов:

  • 265-цветный favicon.ico с разрешениями 16x16, 32x32, 48x48;
  • favicon.png 64x64;
  • apple-touch-icon-xxx.png всех возможных разрешений включая 120x120 для iOS7;
  • windows-tile-144x144.png для тайла в Windows 8.

Опции

По порядку:

html

HTML-файл, в который необходимо добавить теги со ссылками на зоопарк иконок.

HTMLPrefix

Путь, который приписывать в HTML перед адресами всех файлов. Очень нехватает подобной опции во многих плагинах.

trueColor

Булевая опция. Если включена, то favicon.ico будет содержать полноцветные картинки с альфа-каналом. В противном случает будет 256 цветов. Полноцветная иконка будет весить более 15Кб против 7Кб обычной.

precomposed

Булевая опция. В iOS6 и ниже при сохранении иконки накладывались различные эффекты. Опция включена, то все эффекты выключаются и иконка выглядит как изначально задумано.

appleTouchBackgroundColor

Иконки в iOS непрозрачные и им нужен задний фон. Мой плагин заботливо определит доминирующий цвет, подкрутит контраст и выставит его фоном.
Фон также можно указать вручную или вообще не указывать — тогда iOS сделает его черным.

windowsTile

Нужно ли делать плитку для Виндоус 8?

tileBlackWhite

Сделать иконку для плитки монохромной.

tileColor

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


Форкай
@
Пуллреквесть
https://github.com/gleero/grunt-favicons

Переосмысление Dotfiles

12 мая 2013, 22:58

Увидел как-то у Артёма Сапегина занятную вещь — Dotfiles. Это такой набор разных ништяков для любителей консоли. В OS X встроенный баш, по сравнению со многими линуксами, достаточно унылый. Вот и делают люди под себя удобное окружение с кучей алиасов, функций, приложений, автокомплитов и прочими радостями, которые потом публикуют в виде дотфайлсов.

Наиболее интересные собраны тут http://dotfiles.github.io.

У меня по долгу службы тоже накопился список разных удобств, состоявший из кучи баш-скриптов в /usr/local/bin и алиасов в ~/.bashrc. Решил всё собрать, аккуратно организовать, сделать установщик — в общем как у всех. Но не тут-то было.

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

Мне же хотелось сделать что-нибудь универсальное: нужно — установил. Так и родилась идея сделать пакетный менеджер для дотфайлсов.

Установка

Для установки нужна OS X, так как используется пакетный менеджер homebrew. Позже добавлю поддержку deb-подобных ОС, всё же на серверах такая штука не помешает.

curl -Ls dotfiles.gleero.com | bash

Во время установки вас попросят отметить модули, которые нужно установить. Дотфайлс по-умолчанию установится в вашу домашнюю папку: ~/dotfiles/

Обновление и удаление

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

dotfiles update

А для удаления —

dotfiles remove

Модули

Все свои полезности я сгруппировал по модулям. На текущий момент их 9 (по ссылкам описание, документация и исходники):

Сейчас в разработке модули PythonTools, WebdevTools и Zsh.

Как видно, пользователь сам может выбрать то, что он хочет установить. Bash или Zsh; нужны ему подсветки синтаксиса для Nano, или он пользуется Vim’ом; нужны ему генераторы font-face и woff-шрифтов из ttf, или же virtualenv для питона — всё можно выбрать под себя.

Ништяки

Их не так много, но они действительно полезные. Часть взяты на просторах интернета, часть написаны вручную. Остановлюсь подробнее на последних.

Программы json и jsonselect

json получает в поток STD любой сжатый неотформатированный JSON, а выдаёт красивый, разноцветный, и с отступами.

jsonselect основана на библиотеке JsonSelect, которая может фильтровать JSON с помощью CSS-селекторов. Также принимает в STD любой JSON и фильтрует.

Например, мы хотим узнать список исполнителей в плейлисте http://tracksflow.com/2.0/api/playlists/3b6cbc12-99d6-4f1f-914e-f25ce7eec232. Открыв ссылку в браузере, замечаем огромную кучу разного мусора, мешающего нам получить исполнителей.

Теперь пишем в терминале:

curl -s http://tracksflow.com/2.0/api/playlists/3b6cbc12-99d6-4f1f-914e-f25ce7eec232 | jsonselect ".artistName" | json

Получаем JSON, передаём его в jsonselect и просим отдать всё по селектору «artistName». Вывод отдаём в программу json, которая красиво показывает результат. Всё.

Программа Quicklook

Открывает в родном маковском квиклуке любые данные. Есть же qlmanage, умеющий показывать любой файл. Но он определяет тип данных по расширению файла и не умеет читать файл из std. Мой же quicklook на лету определяет тип данных и правильно их показывает.

curl -s http://cs315327.vk.me/v315327003/8755/VzYcbNgtofE.jpg | quicklook

Neblo terminal

Собственно цветовая схема для терминала.

И ещё куча разных полезностей. Подробно о всех программах и возможностях написано на гитхабе.

Приватные конфиги

Начал я заметку с того, что хорошо бы свои приватные данные держать при себе. Так вот в папке с дотфайлсами можно наблюдать выделенную цветом папочку private, в которой лежат две болванки: aliases.sh и bash_profile.sh. Но можно создавать и другие, так как при открытии нового терминала подключаются все шелл-скрипты из private.

А приложения можно класть в папку bin, которая добавлена в PATH.

Создание своего модуля

Создавать свои модули просто:

cd ~/dotfiles/modules
dfmod init test

Будет создан модуль с названием `test` и заготовкой. Подробная информация об устройстве модуля есть как в свежесозданном модуле (в виде комментариев), так и на гитхабе.

Модулем можно поделиться на гитхабе, установить его будет очень просто:

cd ~/dotfiles/modules/
git clone <ЛЮБОЙ_МОДУЛЬ>
dfmod install <МОДУЛЬ>

А можно пуллреквестить :-)

Заключение

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

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

Пользуйтесь. http://github.com/gleero/dotfiles

Случайная музыка каждый день

8 марта 2013, 22:11

Довожу до кондиции тут один связанный с музыкой проект.

Совершенно внезапным и приятным побочным эффектом стала возможность вытаскивать из айтюнс-стора случайный альбом. Прикрутил постинг на стенку паблика и повесил на крон.

Наслаждайтесь:

http://vk.com/pretunes

Доминирующие цвета

25 октября 2012, 14:24

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

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

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

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

Метод поиска цветов был очень простым. Сначала изображение сильно пропорционально уменьшалось, затем выделялись методом k-means доминирующие цвета, и напоследок понижалась яркость цветов, чтоб белый текст с тенью хорошо смотрелся на них.

Ну а дальше верстка, наложение полупрозрачных масок и результат.

Это всё к чему? Технолог — тоже дизайнер.

PySubler

19 сентября 2012, 1:52

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

Для OS X есть замечательная программа — Subler, которая позволяет проводить махинации с тегами в mp4 видео-файлах. Ну и внезапно её разработчики оказались людьми добрыми, поэтому выкатили консольную версию SublerCLI, которая умеет делать достаточно интересные вещи.

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

Допустим, у нас есть фильм mkv и нужно его подготовить для iTunes. Да нет проблем!

from pySubler import Subler

obj = Subler()
obj.Source("inception.mkv")
obj.Dest("inception.m4v")
obj.AddArtwork("~/Images/inception.jpg")
obj.Name = "Начало"
obj.Artist = "Кристофер Нолан"
obj.Save()

Проще некуда. Фильм перепакуется (без конвертации), сохранив все ништяки типа глав и субтитров, а также добавит пару тегов и обложку.

Список полей, которые можно поменять огромен: начиная от списка актёров, заканчивая телесетью, которая осуществляла вещание (если речь идёт об сериалах). Для удобства были добавлены классы-перечисления, чтобы выпадайки немного помогали.

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

def Complete(data):
    print "Я всё!"

s = Subler()
s.onFinish += Complete
s.Save(acync=True)

В данном случае конвертация запустится асинхронно, код продолжит выполняться после s.Save(acync=True). Как только конвертация закончится, сработает событие onFinish и в функцию Complete придут stdout и stderr сублера. Такие дела.

Устанавливается это чудо просто:

git clone git://github.com/gleero/Subler.git
cd Subler
python setup.py install

Ну и код, конечно же, на гитхабе: https://github.com/gleero/pySubler