Об этом блоге

Пришла мне как то идея зарегистрировать личный именной домен для объедения разной личной информации, портфолио и так далее. Из свободных удалось зарегистрировать evstepanov.ru (так как Евгений Валерьевич я). Первым делом я принялся к созданию галереи под фотографии, которая пока находится в разработке. Там я буду выкладывать свои работы, которые не стыдно показать, качественная обработка и красивые кадры. Была взята готовая галерея, в которой пришлось править css, заменять шрифты и иконки навигации, изменять и добавлять некоторые элементы, да еще и добавляются туда фотографии путем правки index.html и ручным копированием файлов в директории. В будущем планирую сделать на php админку с загрузкой и вставкой фотографии.

Этот блог делался для того, чтобы не захламлять ЖЖ разными заметками на IT тему. Хорошо ведь, когда давно не делал что то, но есть где посмотреть. Например полгода назад приходилось настраивать OpenVPN сервер и клиент, конечно же через полгода уже все забудется, а вспоминать и гуглить как примерно должен выглядеть конфиг не всегда охота, а тут оп готовый и проверенный лично.

Заработала правда Эгея (движок этого блога) далеко не сразу.
Сначала не загружались картинки по средствам движка. Вместо отображения картинки были только надписи "picture.jpg".
После переустановки nginx из исходных файлов на самую последнюю версию, картинки заработали.

Конфигурировал перед сборкой так:

./configure --with-pcre=/home/deterrent/nginx/pcre-8.37 --with-http_ssl_module --conf-path=/etc/nginx/nginx.conf


Не сразу удалось сделать, чтобы заработал ЧПУ так как нужно.
Оказалось что конфигурация в документации к Эгее правильная (в конце полный конфиг). Но так же нужно в /user/config.php добавить строчку

$_config['url_composition'] = 'synthetic';


А потом почистить кэш, дописав в урл /?go=@sync/

А вот рабочий конфиг nginx

server {
listen 80;
server_name example.com*.example.com;
keepalive_timeout 70;

location ~* ^.+\\.(jpg|jpeg|gif|css|html|htm|png|js)$ {
root /var/www/html/example;
access_log off;
expires 30d;
}

error_page 404 /errors/404.html;

location / {
root /var/www/html/example;
index index.php index.html index.htm home.php;
log_not_found off;
rewrite ^(.*)$ /index.php?go=$1 last;
}
location ~ \\.php$ {
root /var/www/html/example;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /var/www/html/example/$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\\.ht {
deny all;
}
location ~ /\\.psa {
deny all;
}
}

Разрешение YouTube 16:9

-----
|**Обозначение**|**Ширина**|**Высота**|
|2160p (4К)|3840|2160|
|1440p (2К)|2560|1440|
|1080p|1920|1080|
|720p|1280|720|
|480p|854|480|
|360p|640|360|
|240p|426|240|
-----

Монтирование samba и windows шары в linux

Для автоматического монтирования расшаренной папки "storage" которая находится на "192.168.10.1" при загрузке системы сначала нужно установить **cifs-utils** и **samba**

apt-get install cifs-utils
apt-get install samba samba-client


Потом в **/etc/fstab** добавляем строчку

//192.168.10.1/storage /mnt/keenetic/ cifs user=smbrouter,password=Abc123

Если доступ к шаре без пароля, то параметры **user** и **password** можно не писать.

**Директория в mnt должна быть создана**, а назвать ее можно как угодно. У меня она названа **keenetic** так как **192.168.10.1** это роутер, в который воткнута флешка.

А чтоб систему не перезапускать чтоб шара примонтировалась, можно примонтировать вручную.

mount -t cifs //192.168.10.1/storage /mnt/keenetic -o user=smbrouter,password=Abc123


А на случай если нужно отмонтировать, то все просто.

umount /mnt/keenetic

Резервное копирование сайтов и баз с сервера на флешку в роутере

Как оказалось, при одновременном включении сервера и роутера, сервер стартует значительно быстрее чем роутер.
Когда пытается примонтироваться флешка из **fstab** (об этом я писал ((http://blog.evstepanov.ru/all/montirovanie-samba-i-windows-shary-v-linux/ тут)) ) ресурс просто недоступен.

Было решено убрать автоматическое монтирование **smb** ресурса из **fstab** и прописать монтирование в начале **bash** скрипта и размонтирование его в конце.
В итоге я закомментировал строчку в **fstab**.


Получился такой вот баш скрипт

#!/bin/bashmount -t cifs //192.168.10.1/storage /mnt/keenetic -o user=smbrouter,password=тутпароль
export WWWDIR="/home/deterrent/www/"
export BACKUPDIR="/mnt/keenetic/backup"
export DATA=`date +%Y-%m-%d`
rm -rf $BACKUPDIR/04
mv $BACKUPDIR/03 $BACKUPDIR/04
mv $BACKUPDIR/02 $BACKUPDIR/03
mv $BACKUPDIR/01 $BACKUPDIR/02
mkdir $BACKUPDIR/01
cd $WWWDIR

tar -czf $BACKUPDIR/01/siteone-$DATA.tar.gz siteone.ru/
tar -czf $BACKUPDIR/01/sitetwo-$DATA.tar.gz sitetwo.ru/
tar -czf $BACKUPDIR/01/sitethree-$DATA.tar.gz sitethree.ru/
tar -czf $BACKUPDIR/01/sitefour-$DATA.tar.gz sitefour.ru/

mysqldump --user=пользователь --password=пароль -R bdone >$BACKUPDIR/01/bdone-$DATA.sql
mysqldump --user=пользователь --password=пароль -R bdtwo >$BACKUPDIR/01/bdtwo-$DATA.sql
mysqldump --user=пользователь --password="пар;оль" -R bdthree >$BACKUPDIR/01/bdthree-$DATA.sql
mysqldump --user=пользователь --password=пароль -R bdfour >$BACKUPDIR/01/bdfour-$DATA.sql
umount /mnt/keenetic


Директории **"backup", "01", "02", "03" и "04"** должны быть созданы.
Скрипт удаляет 04 папку, а 03 переименовывает в 04.
Далее переименовывает 02 в 03, 01 в 02, а 01 создает заново и бэкапит в нее.
Поэтому получается, что есть всегда новый бэкап и 3 предыдущих.
В имя каждого файла подставляется дата создания.

Сначала можно запустить **backup.sh** вручную и посмотреть что получиться вообще.
И сразу стает понятно, что в пароле есть символ ; который **mysqldump** понимает как конец команды, как и сам **mysql**.
Поэтому убираем **"пар;оль" в кавычки**, тогда все работает нормально.

Ну и под конец

crontab -e

И добавляем строчку в конец

30 04 * * * /home/deterrent/backup/backup.sh

В данном случае скрипт будет запускаться **каждый день в 4:30 утра**. Получается бэкапы будут делаться ежедневно.
Если нужно поставить другое время запуска, не каждый день например. То можно почитать о кроне например ((http://www.codenet.ru/webmast/php/cron.php тут)) .

"Дизайнер Мирослав Витула представил свое видение анимации смены ориентации экрана в стиле Material Design"

Галерея моих фотографий

Доделал галерею для лучших своих фоторабот.

http://photo.evstepanov.ru/

За основу была взята бесплатная галерея на jquery. Но пришлось её "допиливать", заменил иконки навигации, уменьшил превьюшки, добавил блок с информацией и кнопку которая показывает этот блок и много еще по мелочи.

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

Открыть страницу на весь экран (JavaScript)

fs.jpg

Чтобы открыть браузер на весь экран (Почти как при нажатии F11) Можно сделать так:



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

Фуллскрин

При клике по надписи "Фуллскрин" вызывается функция:

function fscr() {
obj_div=document.getElementById("fullscreen");
if (obj_div.requestFullscreen) {
obj_div.requestFullscreen();
}
else if (obj_div.msRequestFullscreen) {
obj_div.msRequestFullscreen();
}
else if (obj_div.mozRequestFullScreen) {
obj_div.mozRequestFullScreen();
}
else if (obj_div.webkitRequestFullscreen) {
obj_div.webkitRequestFullscreen();
} else {
console.log("Fullscreen API is not supported");
}

}

Проверено на FireFox, Opera, Google Chrome, Yandex browser.
На этой страничке ((https://msdn.microsoft.com/ru-ru/library/dn265028%28v=vs.85%29.aspx Microsoft Developer Network)) можно почитать о фуллскрине и найти более продвинутые примеры.

Таблица сокращений разрешений экранов

------
|**Обозначение**|**Разрешение**|**Кол-во пикселей**|
|QVGA|320×240 (4:3)|76,8 кпикс|
|SIF(MPEG1 SIF)|352×240 (22:15)|84,48 кпикс|
|CIF(MPEG1 VideoCD)|352×288 (11:9)|101,37 кпикс|
|WQVGA|400×240 (5:3)|96 кпикс|
|[MPEG2 SV-CD]|480×576 (5:6 - 12:10)|276,48 кпикс|
|HVGA|640×240 (8:3) или 320×480 (2:3 - 15:10)|153,6 кпикс|
|nHD|640×360 (16:9)|230,4 кпикс|
|VGA|640×480 (4:3 - 12:9)|307,2 кпикс|
|WVGA|800×480 (5:3)|384 кпикс|
|SVGA|800×600 (4:3)|480 кпикс|
|FWVGA|854×480 (427:240)|409,92 кпикс|
|WSVGA|1024×600 (128:75 - 15:9)|614,4 кпикс|
|XGA|1024×768 (4:3)|786,432 кпикс|
|XGA+|1152×864 (4:3)|995,3 кпикс|
|WXVGA|1200×600 (2:1)|720 кпикс|
|WXGA|1280×768 (5:3)|983,04 кпикс|
|SXGA|1280×1024 (5:4)|1,31 Мпикс|
|WXGA+|1440×900 (8:5 - 16:10)|1,296 Мпикс|
|SXGA+|1400×1050 (4:3)|1,47 Мпикс|
|XJXGA|1536×960 (8:5 - 16:10)|1,475 Мпикс|
|WSXGA (x)|1536×1024 (3:2)|1,57 Мпикс|
|WXGA++|1600×900 (16:9)|1,44 Мпикс|
|WSXGA|1600×1024 (25:16)|1,64 Мпикс|
|UXGA|1600×1200 (4:3)|1,92 Мпикс|
|WSXGA+|1680×1050 (8:5)|1,76 Мпикс|
|Full HD|1920×1080 (16:9)|2,07 Мпикс|
|WUXGA|1920×1200 (8:5 - 16:10)|2,3 Мпикс|
|QWXGA|2048×1152 (16:9)|2,36 Мпикс|
|QXGA|2048×1536 (4:3)|3,15 Мпикс|
|WQXGA|2560×1440 (16:9)|3,68 Мпикс|
|WQXGA|2560×1600 (8:5 - 16:10)|4,09 Мпикс|
|QSXGA|2560×2048 (5:4)|5,24 Мпикс|
|WQSXGA|3200×2048 (25:16)|6,55 Мпикс|
|QUXGA|3200×2400 (4:3)|7,68 Мпикс|
|WQUXGA|3840×2400 (8:5 - 16:10)|9,2 Мпикс|
|4K (Quad HD)|4096×2160 (256:135)|8,8 Мпикс|
|HSXGA|5120×4096 (5:4)|20,97 Мпикс|
|WHSXGA|6400×4096 (25:16)|26,2 Мпикс|
|HUXGA|6400×4800 (4:3)|30,72 Мпикс|
|Super Hi-Vision|7680×4320 (16:9)|33,17 Мпикс|
|WHUXGA|7680×4800 (8:5, 16:10)|36,86 Мпикс|
------

Аналоговые разрешения

------
|**Обозначение**|**PAL**|**NTSC**|
|QCIF|176x144|176x120|
|CIF|352x288|352x240|
|2CIF (Half D1)|704х288|704х240|
|4CIF (D1)|704х576|704х480|
|960H (WD1)|960x576| |
------

ТВЛ и Пикселы

------
|**ТВЛ**|**Разрешение**|**Мегапикселы**|
|380|640х480|0,3|
|420|720х576|0,36|
|480|800х600|0,5|
|560|933х700|0,65|
|600|1024х756|0,75|
|800|1280х960|1,23|
|1000|1600х1200|1,92|
------

Разрешение IP-Камер (Мегапикселы)

------
|**Мегапикселы**|**Разрешение**|
|1 Мп|1280x720|
|1.3 Мп|1280x960|
|2 Мп|1920x1080|
|3 Мп|2048x1536|
|5 Мп|2592*1920|
------

Парсер курса доллара

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


$yapage=file_get_contents("https://news.yandex.ru/quotes/1.html");
$i=strpos($yapage, '');
$startdata=$i+24;
$startdollar=$i+94;
$data=substr($yapage, $startdata, 8);
$dollar=substr($yapage, $startdollar, 7);
echo "Курс USD на ".$data." составляет ".$dollar." руб.";
?>

Заметки по Photoshop

1) Лечащая кисть (Healing Brush) должна быть с жёсткими краями, иначе может потеряться текстура.

2) Для высветления можно рисовать не по прозрачному слою белой кистью, а по слою залитым 50% серого (Shift+F5), который переключен в Soft Light. На таком слое хорошо видно отрисовку, если включить только его отображение. (По пустому слою рисовать белой или черной кистью оказывается лучше.)

3) Выделение и осветление глаз можно сделать так: Выделяем глаза и Ctrl+J копируем на новый слой. Этот слой переводим в режим Screen. (Либо весь слой в скин, а рисуем глаза по маске).

IGIT Related Posts With Thumb. Could not find the internal image you specified.

Плагин для вордпреса "IGIT Related Posts With Thumb" перестал показывать картинки, а если зайти по урлу напрямую, то там "Could not find the internal image you specified." Хотя кэш плагина был доступен для записи.

Для выяснения причины сначала поставил в timthumb.php
define ('DEBUG_ON', true);
define ('DEBUG_LEVEL', 3);

И увидел в логах
/usr/local/nginx/html/wp-content/uploads/2012/12/SGS_II_GT-I9100_HK-220x350.jpg
Ну и так далее.

echo $_SERVER['DOCUMENT_ROOT'];
показывало /usr/local/nginx/html
Хотя сайт находится в /home/username/www/sitename.ru

Решение оказалось простое.
location ~ \\.php$ {
root /home/username/www/sitename.ru;


Ранее не был указан путь в этом разделе конфига.

Факторы ранжирования

Periodic_Table_of_SEO_Full.png

Nginx и rewrite правила для ЧПУ

Для того чтоб заходя по ссылке

http://evstepanov.ru/abc/defg/h


Открывалось то же самое что и по ссылке

http://evstepanov.ru/weather/1.php?cat=abc&name=defg&id=h


В конфиг сайта у nginx надо написать такое правило

if (!-e $request_filename){
rewrite ^/([^/]*)/([^/]*)/([^/]*)$ /weather/1.php?cat=$1&name=$2&id=$3 last;
}


Полезные ссылки:
Онлайн генератор правил для Apache Mod Rewrite
http://phpguru.com.ua/servis/revritegen/
http://www.generateit.net/mod-rewrite/index.php
htaccess-конвертер для nginx
http://winginx.com/ru/htaccess

Изменение и сохранение CSS на лету из браузера

В Google Chrome по кнопке F12 появляется панель разработчика, которая оказалась значительно удобнее чем Firebug в FireFox'e.

Но главная фишка, можно изменять свойства любого стиля прям в браузере (как и в Firebug), а изменения автоматически сохраняются в файле стиля.

Для этого нужно добавить директорию с файлами.
addfolder.png

А потом указать какие файлы используются.
maptoresource.png

Более подробная информация тут:
https://developer.chrome.com/devtools/docs/workspaces

Игрушка для отдыха ;)

Почти финиш...

Фото опубликовано @deterrent


Адаптивный дизайн

Без этой строчки не получиться сделать адаптивный дизайн для мобилок.





По умолчанию браузер мобилки сжимает страницу, эта строка говорит, что ширина окна браузера соответствует ширине экрана.

Яндекс.Склонятор

Склонение любых слов для дальнейшей работы с ними.

(UPDATE 22.03.2016)
Я.Склонятор умер. Юзаем http://api.morpher.ru/WebService.asmx/GetXml?s=Екатеринбург

https://export.yandex.ru/inflect.xml?name=Каменск-Уральский

Отдает такую XML



\ Каменск-Уральский
\ Каменск-Уральский
\ Каменска-Уральского
\ Каменску-Уральскому
\ Каменска-Уральского
\ Каменском-Уральским
\ Каменске-Уральском



Таким простым способом получаем падежи для слова.

Хоткеи Photoshop и Lightroom

ps-hkeys.jpg

http://evstepanov.ru/files/setupablogtoday-photoshop-cheat-sheet-fin.pdf
http://evstepanov.ru/files/lightroom-keyboard-shortcuts-cheat-sheet.pdf

Регулярное выражение

найти все строки, кроме тех, где встречается "слово"


^(?>(?!слово).)*$

API Яндекс переводчика

Получаем вот тут ключик
https://tech.yandex.ru/keys/get/?service=trnsl

Потом делаем так (первый вариант JSON второй Xml)

https://translate.yandex.net/api/v1.5/tr.json/translate?key=$key&text=$text&lang=ru
https://translate.yandex.net/api/v1.5/tr/translate?key=$key&text=$text&lang=ru


Более подробно тут:
https://tech.yandex.ru/translate/doc/dg/reference/translate-docpage/

Пример рекурсивного обхода массива



$data=array(
array("id"=>1,"name"=>"grandma", "mother"=>0),
array("id"=>2,"name"=>"myuncle", "mother"=>1),
array("id"=>3,"name"=>"mymom", "mother"=>1),
array("id"=>4,"name"=>"me", "mother"=>3),
array("id"=>5,"name"=>"mysister", "mother"=>3),
array("id"=>6,"name"=>"myson", "mother"=>4),
array("id"=>7,"name"=>"new_grandma_son","mother"=>1)
);

function tree($data, $mom, $level){
foreach($data as $row){
if($row['mother']==$mom){
echo str_repeat("- ",$level).$row['name']."
";
tree($data,$row['id'],$level+1);
}
}
}


tree($data, 0, 0);

echo "
";
echo "
";

print_r ($data);
echo "
";

Субдомены в nginx

Нужно например для городов, чтоб по урлу **city.site.ru** заходило на **site.ru** внутри скрипта возвращало **city**

Должна быть прописана * (звездочка) в записи А для домена.
В конфиге nginx тоже должна быть звездочка

server_name site.ru *.site.ru;


А внутри скрипта, значение субомена получаем так:

echo str_replace(".site.ru" ,"" , $_SERVER['HTTP_HOST']);

Samba - сетевой диск к серверу

Создаем шару на сервере и подключаем как сетевой диск в Windows

Ставим в **linux debian** самбу
apt-get install samba

Добавляем (уже существующего) юзера в самбу
smbpasswd -a deterrent

Добавляем в **smb.conf**

[www]
\ path = /home/deterrent/www
\ force group = deterrent
\ force user = deterrent
\ writeable = yes


потом
/etc/init.d/samba restart
Готово!

Twitter API загружаем картинки в твит

Решил написать эту заметку, так как довольно много времени потратил на реализацию создания записи в твиттере через API.

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

Как бы я не пытался, но **statuses/update_with_media** нивкакую не хотела работать.
Пробовал разные библиотеки для работы с API Twitter из PHP, такие как **tmhOAuth** и **TwitterOAuth**, но нет.
Хотя и там и там обычный текст, через **statuses/update** постился без проблем.

Как потом я понял, **statuses/update_with_media** устарело, хотя в русскоязычном интернете было описание только таким способом. Много было примеров, но ни один мне не помог. На помощь приходит english and google.com :)

# Как всё-таки это сделать?

1) Качаем библиотеку TwitterOAuth с ((https://github.com/abraham/twitteroauth/releases Гитхаба))
Я скачал версию 0.6.4, так как подключал библиотеку вручную. На сайте((https://twitteroauth.com/ TwitterOAuth)) в описании Manual install пишут - "Download the ((https://github.com/abraham/twitteroauth/releases latest release))". Просто лень было ставить через Composer ;)

2) Кидаем содержимое архива в корень проекта, в директорию **twitteroauth**
3) Подключаем

require "twitteroauth/autoload.php";
use Abraham\\TwitterOAuth\\TwitterOAuth;

3) Из созданного на ((https://apps.twitter.com apps.twitter.com)) приложения, копируем токены сюда:

define("CONSUMER_KEY", "xxxxx");
define("CONSUMER_SECRET", "xxxxx");
define("OAUTH_TOKEN", "xxxxx");
define("OAUTH_SECRET", "xxxxx");

4) Инициализируем

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN, OAUTH_SECRET);
$content = $connection->get("account/verify_credentials");

5) Переменные с путями к картинкам (очень важно чтоб путь был указан верно, в данном случае картинки в корне проекта)

$image_one = "one.jpg";
$image_two = "two.jpg";

6) Сначала загружаем картинки. В переменные $media1 и $media2 передается информация, среди которой есть id этих картинок после загрузки.

$media1 = $connection->upload('media/upload', ['media' => $image_one]);
$media2 = $connection->upload('media/upload', ['media' => $image_two]);

7) Задаем параметры, где 'status' - это текст сообщения, а в 'media_ids' передаются те самые id картинок.

$parameters = [
'status' => 'привет я текст',
'media_ids' => implode(',', [$media1->media_id_string, $media2->media_id_string])
];

8) Остается запостить твит вот так:

$result = $connection->post('statuses/update', $parameters);


P.S. если помогла моя заметка, оставьте пожалуйста комментарий ;)

Xiaomi Yi описание параметров скриптов

t ia2 -awb [gl_dgain]:.show the global_dgain value.. [gl_dgain][value]:.set the global_dgain value....
t ia2 -awb [skip]:.disable skip frames.. [skip][value]:.set the skip frames...
t ia2 -awb [prt][0~20]:.print tile AWB gain.....
t ia2 -awb [y]:.print tile Y value..
t ia2 -awb [luma]:.print tile luma info.....
t ia2 -awb [video]:.show video AWB info.....
t ia2 -awb [info]:.show AWB info....
t ia2 -awb [on|off]:.turn on/off AWB...
t ia2 -sc [video]:.show scene mode info..=Y–ê. t cal -sc [0|1|2|......]:.set the scene mode

t ia2 -adj tidx [ev_idx][nf_idx][shutter_idx] :.set video ev_idx, nf_idx and shutter idx, -1 is disable.....
t ia2 -adj twb [r_gain][b_gain] :.set WB table r gain and b gain, -1 is disable.....
t ia2 -adj piv [tsk_enable]:.piv capture param,tsk_enable : 0|1....


t ia2 -frc [frate]: frame rate change . frate: target frame rate .Usage:
t ia2 -frc dly [dly]: set dly time in ms . dly: delay time in ms ....
t ia2 -eis status: DIS/EIS get status.
t ia2 -eis get_motion: Get motion info.
t ia2 -eis on: DIS/EIS enable.
t ia2 -eis off: DIS/EIS disable.
t ia2 -eis dz_off: DIS/EIS restore full view.
t ia2 -eis set_range [min][max]: DIS/EIS set moving range..[min]: minima range..[max]: maxima range.
t ia2 -eis offset [mov_x][mov_y]: Change window offset..[mov_x]: pixels to shift(translational) in x direction..[mov_y]: pixels to shift(translational) in y direction.
ia2 -eis skew [skew_x][skew_y]: Change window skew..[skew_x]: pixels to shift(horizontal rolling shutter) in x direction..[skew_y]: pixels to shift(vertical rolling shutter) in y direction.
t ia2 -eis mc_ctrl [en]: EIS MC enable/disable..[en] = [0|1], 0:disable, 1:enable.
t ia2 -eis rsc_ctrl [en]: EIS RSC enable/disable..[en] = [0|1], 0:disable, 1:enable.....
t ia2 -eis log [file][sec][save_flag]: Log gyro data..[file]: filename(include filepath) to store..[sec]: seconds to log..[save_flag]: 0:save now, 1:save later.
t ia2 -eis save_file [file]: Save gyro data..[file]: filename(include filepath) to store....
t ia2 -ae exp[iso|agc][-shutter_idx][mode] :.set still exposure.....t

t ia2 -ae still :.show still AE info....
t ia2 -ae face :.show face info....—ò–∞Y–ê.–±Y–ê.
t ia2 -ae sensor :.show sensor info.....
t ia2 -ae zoom :.show zoom info.....
t ia2 -ae luma :.show luma_idx and ev_no info...
t ia2 -ae iris :.show iris info.....
t ia2 -ae vr :..show version number.....
t ia2 -ae info :.show AE exposure info..
t ia2 -ae still_iso :.set still_iso.....
t ia2 -ae still_shutter :.set still_shutter.....
t ia2 -ae still_iris :.set still_iris...
t ia2 -ae flash_psg :.set preflash_strength_gain, unit : 1024...
t ia2 -ae flash_fbc :.set flash_base_calibration, unit : 1024...
t ia2 -ae pm [mode] [strange] :.set P mode..
t ia2 -ae [on|off] :.turn on/off AE

t ia2 -adj ae :.disable ae target... ae [target]:.set ae target...
t ia2 -adj awb :.disable awb ratio.. awb [][][][][][]:.set awb ratio..
t ia2 -adj blc :.disable blc.... blc [][][][][][][][][][][][]:.set blc....
t ia2 -adj ev :.disable ev_color.... ev [][][][][][][]:.set ev_color..
t ia2 -adj dzoom :.show video Dzoom filter value.... dzoom [on|off] :.turn on/off Dzoom... dzoom [info] :.show video Dzoom info.....
t ia2 -adj [video|still] :.show ADJ info...,CY–êtCY–ê–∞CY–ê.
t ia2 -adj gamma [0~255] :.set gamma value..
t ia2 -adj l_expo [0~255] :.set l_expo value....
t ia2 -adj autoknee [0~255] :.set autoknee value....
t ia2 -adj vr :.show version number.....
t ia2 -adj reset :.reset ADJ....
t ia2 -adj binning :.show curre
still scene_mode : %d.... still curr_scene_mode : %d...
t ia2 -sc [video]:.show scene mode info..=Y–ê.
t cal -sc [0|1|2|......]:.set the scene mode.... 

DIGITAL_NO_EFFECT :
%3d, DIGITAL_ART
: %3d..... DIGITAL_SEPIA
: %3d, DIGITAL_NEGATIVE :
%3d..... DIGITAL_BW
: %3d, DIGITAL_VIVID
: %3d..... DIGITAL_70FILM
: %3d, DIGITAL_PUNK
: %3d..... DIGITAL_POPART
: %3d, DIGITAL_WEDDING
: %3d.... DIGITAL_PINHOLE
t cal -me [mode][agc][shutter][iris][dgain] : Set specified parameter..mode = [0|1], 0:VIDEO, 1:STILL...

t cal -blc [mode]: raw capture and calculate average pixel value
t cal -blc [mode][config]: calculate average pixel value for different config..mode = [0..3], 0:VIDEO, 1:FAST STILL 2:LOW-ISO STILL 3:HIGH-ISO STILL..config = [1..3]:.
t cal -blc [mode] 1 [frame_percent]: [0..100] calculate average for some part of frame avoid edges.
t cal -blc [mode] 2 [tile_width][tile_height]: calculate average for each tile with specific size.
t cal -blc [mode] 3 [tile_num_row][tile_num_col]: calculate average for each tile in a row and column..BLC: parameter [frame_percent] error, should be none or [0..100]....
t cal -raw [mode] [count] [compress]: raw caputre..mode = [0..8], 0:VIDEO.. 2:LOW-ISO STILL.. 3:HIGH-ISO STILL.. 4:MID-ISO STILL.. 5:LOW-ISO MULTI-CAP STILL.. 6:HIGH-ISO MULTI-CAP STILL.. 7:MID-ISO MULTI-CAP STILL.. 8:MULTI-FRAME HIGH-ISO CAPTURE (old pipe only).. 9:VIDEO HDR(dump Raw, idsp config only)..count = number of pictures to capture..compress = [0, 1] optional, capture and dump the compressed raw....
t cal -rawext [mode][frame][mainwin_w][mainwin_h]: raw caputre..mode = [0..3], 0:VIDEO, 1:FAST STILL 2:LOW-ISO STILL 3:HIGH-ISO STILL..frame = number of frame to capture..mainwin_w = main window width..mainwin_h = main window height....
t cal -rawenc [filepath] : raw encode flow..filepath = file path for configuration file.....
t cal -ituner load [filepath] : Load configuration file.
t cal -ituner save [filepath] : Save configuration file.
t cal -ituner debug [0|1] : turn on/off debug message.
t cal -ituner load [chan_id][filepath] : Load dual chan configuration file.
t cal -ituner save [chan_id][filepath] : Save dual chan configuration file.....
t cal -mgr cmd [cali_cmd]: calibration cmd i/f (arg num<15).t cal -mgr path : specify calibation script path....
t cal -fpn init : re-init FPN to normal condition.
t cal -fpn reload : (the same as t cal -fpn init).
t cal -fpn info : print FPN information.t cal -fpn debug [0/1] : toggle APP-level FPN debug information.
t cal -fpn set [buf_idx] [byte_value] : Set FPN map to value.
t cal -fpn rd [buf_idx] [file_name] : Read FPN map from file.
t cal -fpn rdbmp [buf_idx] [file_name] : Read FPN map from bmp file.
t cal -fpn save [buf_idx] [file_name] : Save FPN map to file.
t cal -fpn savebmp [buf_idx] [file_name] : Save FPN map to bmp file.
t cal -fpn predict [buf_idx]: Predict packed size of FPN map to NAND.
t cal -fpn sensor_cal [type] [mode] : capture raw image for FPN/Vignette.
t cal -fpn dump [buf_idx] [method] [filename]: Dump badpixel location(0:terminal 1:coordination 2:bit file 3:bmp file).
t cal -fpn rotation : FPN map rotation.
t cal -fpn enable [0/1]..
t cal -fpn sensor_cal [type] [mode] : capture raw image for FPN/Vignette....
t cal -vnc_spec: Generate Vignette calibration table.
t cal -vnc_spec [raw encode text flag] [filename spec] [raw_input filename ] [raw_output filename] ....[raw encode text flag] = 0 or 1.
t cal -vnc_spec [raw encode text flag] [filename spec] [raw_input filename ] [raw_output filename] .....Error : CENTER_X out of the range ((IMG_W*3/8) < CENTER_X < (IMG_W*5/8))....Error : CENTER_Y out of the range ((IMG_H*3/8) < CENTER_Y < (IMG_H*5/8))....[raw encode text flag] = .idea WARP ==> 0: raw encode disable , 1: raw encode enable, 99: generate the raw with distortion .keep view angle WARPP (keep x & y )==> 20 raw encode disable, 21: raw encode enable .
t cal -warp_spec [raw encode text flag] [filename spec] [raw_input filename ] [raw_output filename] .....
t cal -warp_spec: Generate WARP calibration table.t cal -warp_spec [raw encode text flag] [filename spec] [raw_input filename ] [raw_output filename] ..Command Error..
t cal -task vig blend [0|1]: disable|enable vignette blend task.
t cal -task vig luma [0|1]: disable|enable vignette postproc task.
t cal -task vig vig_luma_table: change vignette postproc task luma table.
t cal -task warp blend [0|1]: disable|enable warp blend task.
t cal -task ca blend [0|1]: disable|enable ca blend task.....[swin_info] start_x = %u, start_y = %u, width = %u, height = %u, downsample = %u....Addrees of gain tables (R, Ge, Go, B) = (0x%X, 0x%X, 0x%X, 0x%X)....
t cal -vnc status: Print Vignette site status.
t cal -vnc info: Print Vignette calibration info.
t cal -vnc vig_rotate mode enable sel_side [mode:0:flip_180,1:up_down mirror,2:L/R mirror,Enable:1,0:right 1:left]...
t cal -warp status: Print WARP site status.
t cal -warp select [enable] [id0] [id1] [wgt_0] [decay_ratio]: select warp table; wgt_0, decay_ratio must <= 0x10000.....
t cal -ca status: Print CA site status.
t cal -ca select [enable] [id0] [id1] [wgt_0] [decay_ratio]: select ca table; wgt_0, decay_ratio must <= 0x10000.....
t cal -gen_ca: Generate CA calibration table.
t cal -gen_ca [raw encode text flag] [filename spec] [raw_input filename ] [raw_output filename] ..[raw encode text flag] = 0 or 1 .
t cal -gen_ca [raw encode text flag] [filename spec] [raw_input filename ] [raw_output filename] ..Error : CA_CENTER_X out of the range ((CA_IMG_W*3/8) < CA_CENTER_X < (CA_IMG_W*5/8))....Error : CA_CENTER_Y out of the range ((CA_IMG_H*3/8) < CA_CENTER_Y < (CA_IMG_H*5/8))....Select Method #%d for generating table, Decay-ratio = %d, r-ratio = %d..Usage: t %s -jqlt: get the capture jpg quality. t %s -jqlt [jpg_quality] : set capture jpg quality....Usage: t %s -bmp: get dump bmp enable. t %s -bmp [enable] : set dump bmp enbale...Usage: t %s -msc [status]: notify app. that usb cable is removed /inserted..status = [0/1], 0:removed.. 1:inserted...t cal -merge_bin [ca/warp] [filename] [filename] [filename] .... : combine ca/warp binary for amba calibration.t cal -merge_bin [ca/warp] merge [filename] [num]: the file name is warp0.bin warp1.bin .... warp7.bin [filename]= driver:warp [num]= 8. ...Usage: t cal [OPTION] VALUE....Supported options:..-3a: AAA control..-3a_test: AAA stat regression test..-sc: Scene mode control..-de: Digital effect control..-ae: AE info..-me: Manual exposure..-raw: raw capture..-rawenc: raw encode with manual main window width/heigh..-ituner: ituner tool..-mgr: Calibration manager CLI tool..-fpn: FPN tool..-vnc: Vignette tool..-vnc_spec: for warp by spec..-task: WARP decay ratio en/disable..-warp: WARP tool..-warp_spec: for warp by spec..-ca: CA tool..-gen_ca: Gen CA tool..-jqlt: Set capture jpg quality..-bmp: Set dump bmp enalbe..-usb: Set remove/insert sdcard....calib_ituner_execute....

Routing NAT

route.jpg

Имеем сервер (Windows Server 2012 R2) с 2 интерфейсами (в локальную сеть с интернетом и в защищенную корпоративную сеть), а также удаленный ip адрес (пусть будет **23.23.23.100**), на котором расположен web портал для работы.

Сам сервер не раздает интернет и в свою очередь подключен к роутеру **192.168.0.1**
На сервере в локальную сеть и интернет прописано:

192.168.0.5
255.255.255.0
192.168.0.1
8.8.8.8
8.8.4.4


На втором интерфейсе прописан ip адрес корпоративной сети:

10.10.10.5
255.255.255.0


Теперь нужно добраться до адреса внутри корпоративной сети **23.23.23.100**, а так как интерфейс в локальную сеть имеет шлюз, то по умолчанию все неизвестные адреса отправляются туда. Нужно указать, что **23.23.23.100** должен пойти через **10.10.10.1** (это шлюз внутри корпоративной сети).

route add -p 23.23.23.100 mask 255.255.255.0 10.10.10.1

Теперь пинг до 23.23.23.100 идет!

# Как заставить клиента в сети ходить через сервер на этот адрес **23.23.23.100**?
Первым делом, на клиенте, говорим, что **23.23.23.100** должен пойти через сервер:

route add -p 23.23.23.100 mask 255.255.255.0 192.168.0.5

Теперь клиент **192.168.0.23** знает, что достучаться до **23.23.23.100** надо через сервер, да и сервер знает, что надо этот запрос отправлять на шлюз корпоративной сети, но вот только сам **23.23.23.100** не знает, что ответ должен прийти клиенту, а прописать обратный маршрут на **23.23.23.100** нет возможности. Поэтому будем использовать NAT.

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

Добавляем роль на сервере. Выбираем там "Удаленный доступ" в которой выбираем "Маршрутизация".
После установки роли, в панели управления - администрирование, запускаем оболочку "Маршрутизация и удаленный доступ".
Там щелкаем правой кнопкой по серверу и выбираем "Настроить и включить маршрутизацию и удаленный доступ".
Там выбираем "Особая конфигурация" - ставим галочки на "Преобразование сетевых адресов NAT" и "Маршрутизация локальной сети".

После этого почему-то перестает пинговаться **23.23.23.100** судя по всему, ранее созданный маршрут через **route add** перестает работать после установки роли маршрутизации на сервере.

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

route add -p 23.23.23.100 mask 255.255.255.0 10.10.10.1

Пинг до **23.23.23.100** снова появился.

Теперь чтобы заработало на клиенте (ведь маршрут на клиенте уже прописан через сервер), достаточно добавить в "Преобразование сетевых адресов NAT" интерфейс корпоративной сети, выбрать "Общий интерфейс подключен к интернету" и поставить галочку "Включить NAT на данном интерфейсе".

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

route add -p 23.23.23.100 mask 255.255.255.0 192.168.0.5

*.BAT для бэкапа баз 1С

**Вариант 1**


chcp 1251
@echo off
"C:\\Programs\\System\\7-Zip\\7z.exe" a -t7z "H:\\БэкапТест\\C-1С_Тест-backup-%date%.7z" -mx3 "C:\\1С_Тест\\ИПСтепановЕВ82" -ssw


**Вариант 2**


chcp 1251
@echo off
setlocal
set bindir=C:\\Program Files (x86)\\1cv82\\8.2.19.106\\bin
set basedir=C:\\1С_Тест\\ИПСтепановЕВ82
set backupdir=H:\\БэкапТест
mkdir %backupdir%\\%date%-82
"%bindir%\\1cv8.exe" CONFIG /F "%basedir%" /DisableStartupMessages /DumpIB "%backupdir%\\%date%-82\\1c82_%date%.dt" /OUT "%backupdir%\\%date%-82\\backup.log" -NoTruncate
endlocal

Крым (часть 1)

Крым (часть 2)

Восстановление блога (Или Битрикс + Эгея)

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

Долго копал, выяснилось, что настраивал сервер под битрикс и в php.ini задал параметр

mbstring.func_overload = 2

Этого требует битрикс. Из за этого и стали такие глюки в Эгее.

По умолчанию в php.ini эта строка имеет такой вид

;mbstring.func_overload = 0

Т.е. она закомментированная. И если ее привести к такому виду, то Эгея работает, а битрикс начинает ругаться в проверке.

Чтоб заставить работать параметр для каждого сайта отдельно, нужно в конфиге nginix (для сайта на битриксе, в /etc/nginx/sites-available) прописать

fastcgi_param PHP_VALUE "mbstring.func_overload=2";


Тогда сайт на битриксе начинает работать как нужно и не выводить ошибок.
Но происходит интересное с Эгеей. Если сделать /etc/init.d/php-fpm restart то Эгея работает нормально, пока нет активности на сайте с битриксом. Как только открыл страничку на битриксе, применяется параметр прописанный в конфиге для сайта битрикса и распространяется на сайт Эгеи. Видимо это связано с тем, что по умолчанию в php.ini этот параметр вообще закомментирован.

Исправляется это прописыванием

fastcgi_param PHP_VALUE "mbstring.func_overload=0";

В конфиге для Эгеи

Полностью этот кусок выглядит так:

location ~ \\.php$ {
root\ \ /home/deterrent/www/blog.evstepanov.ru;
fastcgi_pass\ unix:/var/run/php5-fpm.sock;
fastcgi_param\ PHP_VALUE\ "mbstring.func_overload=0";
fastcgi_param\ SCRIPT_FILENAME\ /home/deterrent/www/blog.evstepanov.ru/$fastcgi_script_name;
include >\ fastcgi_params;
}


После любых правок в конфигах nginx естественно нужно рестартить его /etc/init.d/nginx restart

Так как я файлики восстанавливал из бэкапа, пришлось задавать права доступа.

egeya.png

Так выглядит рекомендация установки прав доступа на директории во время установки Эгеи.


Настройте права на сервере
Пожалуйста, дайте права на запись здесь:
/user/
/user/caches/
/user/backup/
/pictures/
/pictures/thumbs/
/audio/


Но у меня не установка, а восстановление из бэкапа.
Права задал как на скрине, в блоге вроде все работает как нужно, но при логине в блог, он ругался на то, что не может сохранить данные авторизации. Вылечилось установкой chmod 777 -R user т.е. на дирикторию user и все что есть внутри.

Update
Когда начил править эту запись, вылезла еще и эта ошибка:
error-egeya.png

Сделал chmod 777 -R pictures и эта ошибка пропала.

SEO Табличка за 2013 год

searchengineland-periodic-table-of-seo-2013.jpg

SEO Табличка за 2015 год

SearchEngineLand-Periodic-Table-of-SEO-2015-large.png

Убрать значек Яндекс Диск и Фото iCloud из моего компьютера

В реестре тут:

HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MyComputer\\NameSpace

удаляему дирикторию, в которой есть запись "яндекс диск"

а тут Фото iCloud аналогично удаляем

Компьютер\\HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MyComputer\\NameSpace\\{F0D63F85-37EC-4097-B30D-61B4A8917118}

Значки вновь появляются при обновлении программ.

Настройка PHP для Windows

**Редакция php.ini:**

Найдите строку:
post_max_size = 8M
- Увеличьте до 16 Мбайт максимальный размер данных принимаемых методом POST, изменив ее на:
post_max_size = 16M

Найдите строку:
;include_path = ".;c:\\php\\includes"
- Раскомментируйте ее, убрав перед строкой символ точки с запятой.
- (Внимание исключение! Обратные косые черты при указании пути):
include_path = ".;c:\\php\\includes"
- Создайте пустой каталог "C:\\php\\includes", для хранения подключаемых классов.

Найдите строку:
extension_dir = "./"
- Установите значением данной директивы путь к папке с расширениями:
extension_dir = "C:/php/ext"
Найдите строку:
;upload_tmp_dir =
- Раскомментируйте ее и укажите в значении следующий путь:
upload_tmp_dir = "C:/php/upload"
- Создайте пустую папку "C:\\php\\upload", для хранения временных файлов загружаемых через HTTP.

Найдите строку:
upload_max_filesize = 2M
- Увеличьте максимально допустимый размер загружаемых файлов до 16 Мбайт:
upload_max_filesize = 16M

Подключите, расскомментировав, данные библиотеки расширений:
extension=php_bz2.dll
extension=php_curl.dll
extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_mysql.dll
extension=php_mysqli.dll


Найдите строку:
;date.timezone =
- Раскомментируйте и установите значением часовой пояс вашего местоположения (список часовых поясов можно найти в документации):
date.timezone = "Europe/Moscow"

Найдите строку:
;session.save_path = "/tmp"
- Раскомментируйте и установите значением данной директивы такой путь:
session.save_path = "C:/php/tmp"
- Создайте пустую папку "C:\\php\\tmp" для хранения временных файлов сессий.

**Сохраните изменения и закройте файл php.ini.**

Далее необходимо добавить каталог с установленным PHP интерпретатором в PATH операционной системы. Для чего пройдите по пути "Start" ("Пуск") -> "Control Panel" ("Панель управления") -> "System" ("Система"), откройте вкладку "Advanced" ("Дополнительно"), нажмите кнопку "Environment Variables" ("Переменные среды"), в разделе "System Variables" ("Системные переменные") сделайте двойной щелчок на строке "Path", добавьте в поле "Variable Value" ("Значение переменной"), к тому что там уже существует, путь к каталогу с установленным PHP, например, "C:\\php" (без кавычек). Обратите внимание на то что символ точки с запятой разделяет пути. Чтобы внесенные изменения вступили в силу, перезагрузите операционную систему.

Пример строки Path:
//%SystemRoot%\\system32;%SystemRoot%;%SystemRoot%\\System32\\Wbem;C:\\php;C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin//

Установка и настройка PHP интерпретатора – завершена.

((http://php-myadmin.ru/learning/instrument-php.html/ взято тут))

WordPress Загрузка не удалась. cURL error 23: Failed writing body (639 != 807)

И опять все портит битрикс на сервере.
Как и ((http://blog.evstepanov.ru/all/vosstanovlenie-bloga-ili-bitriks-i-egeya/ в случае с установкой Эгеи)), в конфиге сайта должно быть прописано


fastcgi_param PHP_VALUE "mbstring.func_overload=0";


В качестве веб сервера используется Nginx.

После данных манипуляций, ошибка **cURL error 23: Failed writing body (639 != 807)**, при обновлении плагинов и движка, пропадает.

«No input file specified» вместо 404 ошибки в Nginx

Если при обращении к несуществующему filename.php выдается ошибка **No input file specified**

Значит FastCGI отдает ошибки напрямую в браузер. Для включения обработки ошибки сервером с возвратом директивы **error_page**, в конфиге сайта (в **location ~ \\.php$ {}**) нужно добавить:


location ~ \\.php$ {
error_page 404 /404.php;
fastcgi_intercept_errors on;

Добавление пользователя ProFTPd на Debian

В конец **/etc/proftpd/proftpd.conf** добавляем

RequireValidShell off
AuthUserFile /etc/proftpd/ftpd.passwd
#AuthGroupFile /etc/proftpd/ftpd.group

Если файла не будет, то не рестартнется proftpd, поэтому строку файла с группами я просто закоментил.

Добавляем юзера

ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=ftpwww --home=/home/kuat/www/kuat.rf --shell=/bin/false --uid=33

Можно не указывать параметр **file**, но тогда файл **ftpd.passwd** создается в той директории, в которой выполняете комманду. Так же я не указал **gid**, так как он автоматом будет такой же как **uid**, а **33** это юзер и группа **www-data**. Почему такие указал? Потому что сайт на битриксе, распаковывается из скрипта восстановления и все файлы сайта имеют юзера и группу **www-data**.

Получается, что юзер-пароль только для фтп, но **uid** и **gid** могут указывать на реального пользователя и группу, а любые изменения по фтп, будут от того пользователя, которому принадлежит этот **uid**.

Рестартим
**/etc/init.d/proftpd restart**