среда, 30 мая 2018 г.

Оптимизация изображений для сайта – JPEGoptim и OptiPNG

Рассказ про то, как быстро оптимизировать вес изображений без потери качества используя только консоль.

JPEGoptim оптимизация JPG

sudo apt-get install jpegoptim
JPEGoptim можно использовать со следующими ключами:
  • –strip-all удаляет комментарии, Exif, IPTC, ICC, XMP
  • –all-progressive преобразует в прогрессивный jpeg
  • -p сохранит время создания такими же как у исходного файла
  • -t покажет итоговый результат оптимизации для нескольких изображений
  • -m85 устанавливает максимальное сжатие jpeg в 85. Этот параметр влияет на качество изображения!
JPG файлы будем оптимизировать и преобразовывать в прогрессивный вид при помощи JPEGoptim. Прогрессивный jpeg, это когда при загрузке сначала появляется размытый контур изображения и по мере загрузки обретается четкость. Jpg в прогрессивном режиме позволяет получить представление обо всём изображении уже после передачи незначительной части JPEG-файла. В обычном режиме jpeg загружается последовательно, с верху в низ.
В итоге для оптимизации jpeg файлов в текущей папке надо запустить
jpegoptim --strip-all --all-progressive -ptm85 *.jpg
Для рекурсивного (во всех вложенных подкаталогах) преобразования запускаем
find -type f -iname "*.jpg" -exec jpegoptim --strip-all --all-progressive -pm85 {} \;
Обратите внимание, на версии 1.3.0 которая идет в составе ubuntu 14.04 права на файлы будут изменены на чтение и запись только для владельца файла (-rw——-). Для решения этой проблемы добавим -exec chmod 644 {} \; что будет менять права на -rw-r–r–. В более новых версиях этой проблемы нет и добавлен новый ключ -P который сохраняет права такими же как у исходного файла.
Для запуска на сервере от имени www-data и сохранением прав доступа на версии 1.3.0 используем
sudo -u www-data find -type f -iname "*.jpg" 
-exec jpegoptim --strip-all 
--all-progressive -pm85 {} \; -exec chmod 644 {} \;

OptiPNG оптимизация PNG

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

Устанавливаем OptiPNG
sudo apt-get install optipng
OpiPNG будем использовать с ключами:
  • -strip all удалит всю “лишнюю” информацию из файла
  • -o4 указывает степень сжатия, от 1 до 7. По умолчанию 2.
Для рекурсивной оптимизации запускаем
find -type f -iname "*.png" -exec optipng -strip all -o4 {} \;
Итоговые комманды для рекурсивной оптимизации изображений на сервере от имени пользователя www-data
Для JPG
sudo -u www-data find -type f -iname "*.jpg" -exec jpegoptim 
--strip-all
 --all-progressive -pm85 {} \; -exec chmod 644 {} \;
Для PNG
sudo -u www-data find -type f -iname "*.png" -exec optipng
 -strip all -o4 {} \;

четверг, 14 декабря 2017 г.

Решение: General error: 1364 Field ‘MyField’ doesn’t have a default value

После обновления MySql до версии 5.5 начали вылетать непонятные ошибки. Например:
Error: SQLSTATE[HY000]: General error: 1364 Field ‘MyField’ doesn’t have a default value
Связано это с тем, что в новой версии базы включен по умолчанию режим STRICT_TRANS_TABLES.
Проверить это можно следующим запросом:
1
SELECT @@GLOBAL.sql_mode
В результате увидите что-то вроде:

STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

Вот он тот самый STRICT_TRANS_TABLES.
Данный режим выдает ошибки, когда вы пытаетесь добавить в базу записи, не указывая данные объявленные в таблице по умолчанию.
Для отключения нужно выполнить следующий запрос:

1
SET GLOBAL sql_mode='NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION'
Теперь проверим отключился ли режим:
1
SELECT @@GLOBAL.sql_mode
Увидим что отключен.
Но это не все, после перезагрузки MySql режим снова включится. Для того, что-бы избежать это необходимо удалить этот режим из конфигурационного файла my.ini.
Находим там строчку:
1
sql-mode='бла-бла-бла'

и удаляем из неё STRICT_TRANS_TABLES. Перезагружаем MySql.

понедельник, 6 ноября 2017 г.

Переключение версии PHP в Linux

CLI: Диалог выбора
sudo update-alternatives --config php
sudo add-apt-repository ppa:ondrej/php sudo apt-get update sudo apt-get install php7.0 php5.6 php5.6-mysql php-gettext php5.6-mbstring php-mbstring php7.0-mbstring php-xdebug libapache2-mod-php5.6 libapache2-mod-php7.0

и переключаемся с помощью следующих команд для Апача и для командной строки разные php5.6 -> php7.0 :
Apache:
sudo a2dismod php5.6 ; sudo a2enmod php7.0 ; sudo service apache2 restart
CLI:
sudo update-alternatives --set php /usr/bin/php7.0
php7.0 -> php5.6 :
Apache:
sudo a2dismod php7.0 ; sudo a2enmod php5.6 ; sudo service apache2 restart

CLI:
sudo update-alternatives --set php /usr/bin/php5.6

понедельник, 21 ноября 2016 г.

Git: как переключиться на нужный коммит

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

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

git checkout commit

Где commit - это хеш (обозначение, имя) коммита, причем можно указывать не весь хеш, а несколько начальных символов хеша.


Вопрос: А как вернуться в самое свежее состояние?

Ответ. Команда:

git checkout


без дополнительных параметров вернет вас в head ревизию.

четверг, 10 ноября 2016 г.

Проверить наличие jQuery и узнать её версию.

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

Или просто выполнить код в консоли браузера. Сниппет:
javascript:(function(){var msg;if (window.jQuery) {msg = 'You are running jQuery version: ' + jQuery.fn.jquery;} else {msg = 'jQuery is not installed';}alert(msg);})();;

Код, который нужно выполнить в консоли:
var msg;
if (window.jQuery) {
    msg = 'You are running jQuery version: ' + jQuery.fn.jquery;
} else {
    msg = 'jQuery is not installed';
}
alert(msg);

вторник, 18 октября 2016 г.

Symbolic link not allowed or link target not accessible

Иногда нет возможности развернуть сайт в директории /var/www и как одно из решений  поместить сайт на другом разделе, а в /var/www сделать симлинк на этот сайт.
И тогда вполне возможно вы увидите 403 ошибку в браузере,  а в логах
Symbolic link not allowed or link target not accessible

Для решения данной проблемы пишем в конфиге
Options +FollowSymLinks -SymLinksIfOwnerMatch
 и затем
sudo chmod o+x /home
sudo chmod o+x /home/somekittens
chmod o+x /home/somekittens/Dropbox
chmod o+x /home/somekittens/Dropbox/Project
chmod o+x /home/somekittens/Dropbox/Project/Site

вторник, 9 августа 2016 г.

GIT, не коммитить изменения прав на файлы

Вот этой командой можно указать git-у, что нужно не отслеживать изменения файлов

git config core.filemode false    

четверг, 21 января 2016 г.

Обзоры открытых CAD программ

http://forum.ubuntu.ru/index.php?topic=156576.0
http://habrahabr.ru/post/129533/
http://vk.com/topic-49716269_28148628
http://www.oslinux.ru/posts/1015.html
http://linsoft.info/soft/category/125
http://freeanalogs.ru/AutoCAD


https://habrahabr.ru/post/275595/

среда, 20 января 2016 г.

Обзоры светодиодных ламп и комплектующих

Ссылки на бозоры
http://geektimes.ru/company/lamptest/blog/269398/
https://geektimes.ru/company/lamptest/blog/267132/


Немного ускорим Mac OS

Пользуюсь этой *лядской системой и тут я буду публиковать команды, рецепты и т.д. как её ускорить.

1. Освобождение оперативной памяти. в терминал команду purge , тем самым вы очистите RAM  вашего Mac
2. Утилита CleanMyMac 3 диагностирует систему и отчищает от временных файлов, прочего ненужного мусора
3. Отчистить от хлама рабочий стол, чем меньше на рабочем столе херни, тем лучше

и я буду добавлять рецепты, по мере нахождения новой информации

понедельник, 18 января 2016 г.

Сокращенный тернарный оператор в PHP

Тернарный оператор — вещь известная и скучная:

$a = $expr1 ? $expr2 : $expr3;
Если $expr1 истинно, результатом $a станет $expr2, иначе $expr3.
А теперь об интересном! Начиная с версии PHP 5.3 можно опустить $expr2.

$a = $expr1 ?: $expr3;
Это равносильно записи:

$a = $expr1 ? $expr1 : $expr3;
Примеры:

$a = true ?: false; // true

$a = false ?: true; // true

$a = 1 ?: 2; // 1

$a = 0 ?: 2; // 2
В мануале об этом упоминается очень сухо и коротко. Ну а что еще добавить?

воскресенье, 17 января 2016 г.

yii2: интересности

http://nix-tips.ru/yii2-sortirovka-i-filtr-gridview-po-svyazannym-i-vychislyaemym-polyam.html
http://habrahabr.ru/post/239147/

http://www.infragistics.com/products/android/gauges/radial-gauge

 

понедельник, 14 декабря 2015 г.

Yii2, select фильтор поля

Для того чтобы сделать select  DropDownList в фильтре для поля можно использовать следующее.

Gridview добавляем:
1.
[
    'attribute' => 'attribute_name',
    'value' => 'attribute_value',
    'filter' => Html::activeDropDownList($searchModel,  
     'attribute_name', 
     ArrayHelper::map(ModelName::find()->asArray()->all(), 'ID', 'Name'),
     ['class'=>'form-control', 
     'prompt' => 'Select Category']),
],
 
2.
 
[
    'attribute'=>'attribute name',
    'filter'=>array("ID1"=>"Name1","ID2"=>"Name2"),
],
 
3.
 
[
    'attribute'=>'attribute name',
    'filter'=>ArrayHelper::map(Model::find()->asArray()->all(), 'ID', 'Name'),
],
 
 
каждый из этих методов хорошо работает и тут как удобнее тот и нужно выбирать.   
 

понедельник, 7 декабря 2015 г.

MYSQL, выгрузка результата рапроса в csv

SELECT `email`, `username`, `password`, `firstname`, `lastname` FROM  `mdl_user`
INTO OUTFILE '/tmp/users.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'

четверг, 3 декабря 2015 г.

Yii + Composer = Yiicomposer

Composer

Composer (getcomposer.org) — это пакетный менеджер для PHP. И так что же представляет собой пакетный менеджер! Пакетный менеджер это набор программного обеспечения, позволяющего управлять процессом установки, удаления, настройки и обновления различных компонентов программного обеспечения. В нашем случае настраивать приложение без дополнительных плагинов Composer не будет! Про плагины и возможное расширение функционала Composer-а описывать не будем,этому возможно будет посвящена отдельная статья.

Для начала посоветую ознакомиться со следующими статьями:
1. Composer — менеджер зависимостей для PHP (http://habrahabr.ru/post/145946/)
2. Простое использование composer в Yii (http://tvorzasp.com/...composer-v-yii/)

И так в двух словах, что же можно делать при помощи Composer?
1. Скачивать пакеты и их зависимости
2. Скачивать пакеты, не только с packagist.org(официальный репозиторий), но и из любого git, mercurial, svn или стороннего репозитория (Можно даже организовать свой личный репозиторий!!!)
3. Работать с версиями, вышеперечисленных репозиториев.
4. Хранить пакет не только в каком-то из репозиториев, но и в простом zip архиве, на жёстком диске или на вашем личном сервере.
5. Произвольно оформлять пакет, без занесения его в какой-либо репозиторий строгого описании и т.д. и т.п. ну, в общем, свобода действия - нужна ссылка на архив, правильно описываем его в файле инструкций и всё готово!
6. Загружать пакеты одной командой - update (при первом запуске нужно выполнить install)

Давайте от сухой теории перейдём к практике.

Начнём!

пятница, 16 октября 2015 г.

Java полезные материалы, часть первая

Паттерн MVC и SWING


  1. http://www.oracle.com/technetwork/articles/javase/index-142890.html
  2. https://www.link-intersystems.com/blog/2013/07/20/the-mvc-pattern-implemented-with-java-swing/
  3. A Visual Guide to Swing Components (Windows Look and Feel) http://spec-zone.ru/Java/Tutorials/ui/features/compWin.html

Коллекции

http://developer.alexanderklimov.ru/android/java/collections.php

http://habrahabr.ru/post/203688/

среда, 22 октября 2014 г.

Отчистка корзины в Mac OC

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

sudo rm -rf ~/.Trash/

понедельник, 4 августа 2014 г.

Закрыть ссылки от индексации

Для начала давайте разберемся, как использовать эти теги. Итак, чтобы закрыть ссылку от индексации:
  1. Для Google – добавьте атрибут rel=”nofollow”.
  2. Для Яндексе – заключите её в тег <noindex>/noindex>.
В итоге html-код ссылки закрытой от индексации в обеих поисковых системах будет выглядеть так:
<noindex><a href=”Ссылка” rel=”nofollow”>Анкор</a></noindex>

IT-записки

comments powered by Disqus