Про автоматизацию работы с сидбокс в OS X

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

И тут выхода два: либо держать Transmission постоянно включённым, портить свои жёсткие диски и тратить электричество, либо перенести эту задачу на другую машину, т. н. seedbox. Как вы наверное поняли, я перенёс раздачу файлов на seedbox.

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

В случае использования seedbox эта проблема решается. Вы скачиваете и раздаёте контент далеко, например во Франции, а забираете по зашифрованному каналу, через FTP.

Что получилось?

Я добился полной автоматизации. Т. е. в браузуре кликаю по ссылке скачать .torrent, и через некоторое время на моём жёстком диске появляется контент, с оповещением в Notification Center.

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

Только изредка приходится заходить в веб морду ruTorrent и удалять раздачи, которые мне не нужны, впрочем это тоже можно автоматизировать.

Веб интерфейс ruTorrent

Выбор seedbox провайдера

Что бы вы не думали, хостинг для "торрентокачалок" давно не роскошь, за 5 или 10 $ в месяц можно получить от 100 Гб до 700 Гб на жёстком диске, а если посчитать сколько вы тратите на электричество и железо, то жаба перестанет вас давить совсем.

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

Если вам предоставят гигабитный порт, то средний Blu-ray ремюкс вы будете скачивать за 8 минут, на пределе возможности жёстких дисков, примерно 60 МБ/c.

Я попробовал датацентры в Голландии (Wicked servers, они же tal0ne) и Великобритании (feralhosting).

Нидерланды мой фаворит, они дают примерно 8 МБ/с через HTTP или FTP в один поток, и порядка 20 МБ/с, если забирать многопоточно.

Wicked Servers (tal0ne)

Наиболее интересные тарифы в Голландии без ограничений по трафику:

RevivalBOX — 100 Гб + 1 гбит линк за 4,42 € в месяц.
SweetBOX — 740 Гб + 1 гбит загрузка + 100 мбит отдача за 9,70 € в месяц.

Feral Hosting

Хостинг в Великобритании:

Helium — 1 TB + 10 Гбит линк за 10 £ в месяц. Замечу, что диски HDD, всё равно не дадут и гигабита, какой бы линк не заявляли. Плюсы относительно Wicked Servers это включённые в слот SSH и OpenVPN.

Тут же предоставляются и машины с большими жёсткими дисками, до 6 ТБ, но ценники у них соответствующие. Эти решения не для домашнего использования.

Настройка

rTorrent и автоматическое подхватывание .torrent файлов

На сервере для скачивания торрентов я выбрал rTorrent, он хорошо конфигурируется, а к веб морде ruTorrent написано множество плагинов.

Одна из необходимых мне возможностей, это отслеживание .torrent файлов и автоматический запуск скачивания (триггер load_start), а вторая это сортировка по директориям (триггер move_complete).

Несколько строчек для .rtorrent.rc, следят за директориями music и movies:

schedule = watch_directory_music,5,5,"load_start=/disk3/fluder/rtorrent/torrents/music/*.torrent,d.set_custom1=/disk3/fluder/rtorrent/complete/music/"
schedule = watch_directory_movies,5,5,"load_start=/disk3/fluder/rtorrent/torrents/movies/*.torrent,d.set_custom1=/disk3/fluder/rtorrent/complete/movies"
system.method.set_key = event.download.finished,move_complete,"d.set_directory=$d.get_custom1= ;execute=mv,-u,$d.get_base_path=,$d.get_custom1="

Загрузка .torrent через FTP с помощью Hazel

Два правила в Hazel отслеживают источник загружаемых .torrent файлов, и загружают по FTP в соответствующие, отслеживаемые rtorrent, папки.

Наблюдаем за Downloads в Hazel и делаем "upload" по FTP

Можно сделать и проще, если вы пользуетесь Google Chrome, для которого есть плагин Remote Torrent Adder.

Проверка и автоматическое списывание новых, завершённых раздач, через FTP

Cамый крутой консольный FTP клиент это LFTP, можно использовать и более продвинутый BtSync, но он доступен не у всех хостеров.

Устанавливаем:

brew install lftp

Создаём скрипт, который коннектится к FTP с помощью LFTP, проверяет есть ли новые загрузки, и если так, начинает автоматически скачивать контент. По завершению отправляем оповещение в Notification Center.

Помимо данных для аутентификации нужно указать правильные пути, что и куда будет копироваться (lcd и cd под комментариями sync movies и sync music).

mirror --use-pget-n=3 --verbose --use-cache --only-missing --recursion='newer' — использую для копирования новых фильмов, которых нет локально, рекурсия вглубь папок отключена, скачивание одного файла происходит в три потока.

mirror --parallel=10 --verbose --use-cache --only-missing --newer-than='now-1day' --recursion='newer' — копирование музыки. Рекурсивный листинг вглубь отключен, копируются файлы, которым скачаны не более, чем один день назад, параллельная загрузка до десяти файлов одновременно.

vim ~/bin/seedboxsync
#!/bin/bash

HOST="ftp.seedbox.host.name"
PORT="21"
USER="username"
PASS="password"

LOCK="/tmp/lftp-sync.lock"
trap "rm -f $LOCK" SIGINT SIGTERM

if [ -e "$LOCK" ]
then
    echo "lftp sync is running already."
    exit
else
    touch "$LOCK"

    LFTP="$(
        /usr/local/bin/lftp -p $PORT -u "$USER","$PASS" ftp://"$HOST" <<EOF

        # init config
        set file:charset utf8
        set pget:save-status never
        set ftp:list-options -a
        set ftp:ssl-force true
        set ftp:ssl-protect-data true
        set ftp:ssl-protect-list true
        set ssl:verify-certificate false

        # sync movies
        lcd /Volumes/The\ Dump/Movies/
        cd /rtorrent/complete/movies/
        mirror --use-pget-n=3 --verbose --use-cache --only-missing --recursion='newer'

        # sync music
        lcd /Volumes/The\ Dump/Music/
        cd /rtorrent/complete/music/
        mirror --parallel=10 --verbose --use-cache --only-missing --newer-than='now-1day' --recursion='newer'
EOF)"

    if [[ $LFTP == *"Transferring"* ]]
    then
        /usr/bin/osascript -e 'display notification "LFTP sync completed" with title "Seedbox"'
    fi
    rm -f "$LOCK"
    trap - SIGINT SIGTERM
    exit
fi

Запускаем раз в минуту:

crontab -e:

* * * * * /bin/bash ~/bin/seedboxsync

Стриминг или скачивание?

С музыкой всё однозначно, FLAC мне в облаке не нужен, только скачивание.

А вот с видео я наверняка выбрал бы "streambox" и не занимался загрузкой, если бы: 1) цены были более гуманны; 2) у меня не было запросов "direct streaming" для ремюксов, повышающих требования к железу и линку.

Ни в одной приставке для клиента Plex я не нашёл возможности установить большой буфер, с возможностью "direct streaming" из mkv h264.

В Roku 4 этого нет, как и в Amazon Fire TV, про китайские свистки думать не хочется, там всё ещё хуже. В общем это вопрос на будущее, а сейчас буфером будет служить домашний компьютер, раздающий видео по DLNA.


AAC в сравнении с MP3 и FLAC

На своём "музыкальном оборудовании" я не могу отличить хороший AAC рип от lossless музыки. Однако если есть возможность, то предпочтение отдаю всё равно более громоздкому lossless, т. к. оборудование поменять легко, а собирать музыку по новой не очень.

То что AAC, как для lossy кодировщика, довольно неплох я знал давно. Вопрос только насколько, по сравнению с lossless "рипами", если рассматривать их спектр. MP3 тоже пока ещё достаточно популярен, поэтому и его пришлось включить в тестирование. Ниже небольшой отчёт, для тех кто не в теме.

Исходные данные:

Lossless мастер

Результат:

MP3 CBR 320 порезан выше 20 kHz

MP3 VBR 6 порезан под чистую выше 16 kHz

Максимальное качество MP3, VBR 0, выше 16 kHz спектр сохранился, но качество его сомнительно

Купленный в iTunes Music Store AAC очень близок к lossless

AAC 256 low, этот я сделал сам, аналогично, практические не отличается от исходника

Выводы:

AAC на спектрограмме показывает очень хорошие результаты даже c низким профилем сжатия, чего не скажешь про MP3. Рядом с FLAC место такой музыке у меня найдётся.

Впрочем глазами музыку мы не слушаем, поэтому одна спектрограмма не может выступать основным критерием оценки.


Всё про блокировку компьютера в OS X

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

Делать это можно разными способами.

Logout

Глобальные горячие клавиши, Command ⌘ + Shift ⇧ + Q — завершение сеанса пользователя. Этот способ плох тем, что все программы завершают работы, после входа нужно ждать пока окружение запустится.

Suspend

/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend

Если набрать эту команду в терминале, то компьютер будет заблокирован, но вместе с тем не будут доступны и некоторые фичи. Например MacID для разблокировки работать не будет.

Эта же команда встроена и в Alfred, как алиас "lock", впрочем им не является.

Триггер блокировки при переходе в спящий режим

Этот метод блокирует уже правильно:

1) Запускаем System Preferences.app, переходим в "Security & Privacy -> General -> Require password after sleep or screen saver begins -> Immediately", отмечаем чекбокс. Теперь по возвращению из режима сна или скрин сейвера, пароль будет запрашиватсья автоматически.

2) В "Mission Control -> Hot Corners -> Put Display to Sleep" выбираем угол, после перевода курсора в который, будет запущен спящий режим.

System Preferences.app

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

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

Комбинированный — блокировка экрана с помощью горячих клавиш, без завершения сеанса

Этот метод решает предыдущую проблему, скринсейвер не блокирует компьютер, блокировкой занимается пользователь.

Можно вывести замочек из настроек Keychain в Menu Bar и блокировать экран с помощью трекпада или мыши.

Keychain Access.app Preferences

Но этот вариант не годится для гика приросшего к клавиатуре, хочется то же поведение, но из консоли и Alfred.

Создаём "правильный" lockscreen.m:

#import <objc/runtime.h>
#import <Foundation/Foundation.h>

int main () {
    NSBundle *bundle = [NSBundle bundleWithPath:@"/Applications/Utilities/Keychain Access.app/Contents/Resources/Keychain.menu"];

    Class principalClass = [bundle principalClass];

    id instance = [[principalClass alloc] init];

    [instance performSelector:@selector(_lockScreenMenuHit:) withObject:nil];

    return 0;
}

Компилируем:

clang -framework Foundation -o lockscreen lockscreen.m

Или забираем для El Capitan бинарник, который выполняет только одну задачу — блокировка экрана из терминала, без завершения сеанса (Switch User). Я скопировал бинарник в /usr/local/bin и сделал rehash.

Готовый воркфлоу для Alfred, с уже встроенном бинарником можно забрать у меня на GitHub. Блокировка экрана по умолчанию настроена через Control ⌃ + Option ⌥ + Command ⌘ + Q.

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

Ловушка на случай угона MacBook

Я написал маленький параноидальный скрипт, который занимается тем, что отслеживает когда крышка макбука переходит из состояния "закрыта -> открыта". Если я где-то забуду макбук, то вероятнее всего его крышку закроют, чтобы например перенести в более удобное место для изучения. После, чего сработает автоматическая блокировка.

Скрипт отслеживающий состояние крышки макбука:

Создаём файл /usr/local/bin/autolock:

!#/bin/bash

doLock=false

while [ true ]
do
    status="$(ioreg -r -k AppleClamshellState -d 4 | grep AppleClamshellState | grep Yes)"

    length=${#status}

    if [ $length -gt 0 ]
    then
        doLock=true
    elif [ $length -eq 0 ] && [ $doLock = true ]
    then
        doLock=false

        /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend
    fi

    sleep 5
done

chmod +x /usr/local/bin/autolock

Добавляем в автозагрузку ~/Library/LaunchAgents/co.fluder.autolock.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" 
    "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>co.fluder.autolock</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/autolock</string>
        <string>start</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
</dict>
</plist>

Запускаем:

launchctl load ~/Library/LaunchAgents/co.fluder.autolock.plist

Всё то же самое в репозитории на GitHub.

Я бы рад запилить это всё в brew, да руки не доходят, потому делюсь как есть.


→ Пока, XMPP!

Shutting down our XMPP chat service November 16, 2015 — Rob N Quick summary: We’ll be closing down our XMPP chat server on 31 January 2016. For users with a FastMail domain account (e.g. @fastmail.com, @eml.cc, etc), XMPP messaging with your account will be unavailable after this date. If you have your own domain for your account, you’ll have to find an alternative XMPP server and change your SRV DNS records as appropriate if you wish to continue using XMPP with your domain.

31 января 2016 года FastMail прекращает предоставлять XMPP хостинг, а следовательно и поддерживать мой JID (contact@fluder.co), переносить который я больше не буду.

Свободную нишу займёт телеграм, писать на fluder_co.


Transmission и низкая скорость записи на HDD

Подключил домой гигабитный интернет, и столкнулся с проблемой использования. Если на SSD торренты по Wi-Fi 802.11ac загружаются со скоростью до 40 МБ/сек, то на внешнем жёстком диске скорость загрузки едва достигает 10 МБ/сек.

Скорость используемого USB харда не велика, но всё же больше, чем получаемый результат. Blackmagic Disk Speed Test это подтвердил, выдав на запись до 35 МБ/сек.

Проблема в том, что Transmission работает с маленькими "чанками", размером по 4 МБ. Одновременная загрузка приводит к созданию десятков кусочков, которые непрерывно и хаотически записываются.

Жёсткий диск не справляется, механика страдает, скорость записи получается меньше скорости соединения. Изменить размер кеша в настройках нельзя, в конфиге тоже. Однако open source решает:

1. Забираем исходные коды из SVN1.

svn co svn://svn.transmissionbt.com/Transmission/trunk Transmission  

2. Открываем файл libtorrent/session.c, строка 68:

DEFAULT_CACHE_SIZE_MB = 4,

Меняем на:

DEFAULT_CACHE_SIZE_MB = 512,

3. Собираем в Xcode.

В результате эксперимента скорость записи торрента поднялась до приемлимых 25-30 МБ/сек, правда и использование памяти во время загрузки тоже возросло до ~800 МБ. Впрочем по завершению загрузки память высвобождается до привычных 20 МБ, и проблем в дальнейшем не создаёт.


  1. Запакованные исходники в tar, с главной страницы, не подойдут, в OS X они не собираются. 


Программы для OS X 2015

OS X El Capitan

Прошёл ещё один год, а значит пора написать новый пост, об интересных программах для OS 10.11 El Capitan. 

Учитывая пожелания убрал из рубрики: стандартный для OS X софт, а так же приложения, которыми перестал пользоваться.

Прошлые выпуски: 2012, 2013, 2014.


Удаление сообщений в Skype

В Skype есть такая бесполезная фича, как "Удаление cообщений". На самом деле это обман. В базе после таких удалений сообщение остаётся на месте, и его совсем не сложно восстановить.

Правильно это действие называть "Скрыть сообщение", и не вводить пользователей в заблуждение.

Проверяется просто:

1) Вам пишут уникальное сообщение "uniqueText".
2) Сообщение удаляется.
3) grep -rl "uniqueText" ~/Library/Application\ Support/Skype/

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


Переезд на OS X 10.11

Сознательно откладывал переезд на El Capitan, из-за нескольких причин: 

  • Не было никакого желания быть бета тестером. 

  • Ждал пока разработчики приведут в рабочий вид программы.

  • Было жаль бросать стабильность Yosemite, которую с таким трудом Apple, в течении пяти обновлений, достигали, и ловить ошибки по новой.

  • А тут ещё и релиз iOS неприятно удивил качеством, после чего пришлось откатываться в срочном порядке, пока 8.4.1 подписывали. 

В душе дожидался 10.11.1 или 10.11.2, но почитав обзоры, помониторив reddit, и выслушав отзывы товарищей из apple-russian, я накатил обновление.

Привычкa "переставлять винду с нуля" на каждый чих, давно в прошлом. Проблемы OS X легко решаются руками, поэтому начиная с предустановленного Mavericks на MacBook, и ранее Snow Leopard в iMac, предпочитаю только обновление.

Конечно, и на этот раз гладко оно не прошло.

Сторонние  приложения

Перестали работать: 

  • Skype, SSH в Sequel Pro, Bartneder, Little Snitch.

  • Плагины для Mail.app: QuoteFix и GPGMail.

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

brew

После обновления brew doctor сообщил, что /usr/local потерял права доступа, потом "Error: Failed to update tap:".

sudo chown -R $(whoami):admin /usr/local    
brew update

brew untap caskroom/versions  
brew untap caskroom/cask   

brew tap caskroom/versions  
brew tap caskroom/cask  

Проблемы с brew на этом заканчиваются, а с установленными программами продолжаются. У меня слетели права и исчезли соответствующие директории из /var/log/*. В результате brew services start отрабатывался нормально, а на деле ничего не запускалось, потому что писать логи было некуда.

SIP

System Integrity Protection, она же Rootless. Новинка в El Capitan, ограничивающая доступ суперпользователей к системным библиотекам. Когда приходится работать с программами под рутом, технология гарантирует, что нужные полномочия не пойдут в деструктивном направлении:

Теперь /System, /bin, /sbin и /usr не доступны руту:

fluder@mb:/System$ sudo rm .localized   
Password:   
override rw-r--r--  root/wheel restricted for .localized? y   
rm: .localized: Operation not permitted   

Посмотреть статус можно:

fluder@mb:~$ csrutil status    
System Integrity Protection status: enabled.

Я решил не влезать в системные файлы, и ничего не отключать, это полезная функция. Но сделать локализацию директорий в Finder, описанным ранее методом не получится, поэтому сделал так:

mv src src.localized  
mkdir -p src.localized/.localized  
echo '"src" = "Source Code";'  > src.localized/.localized/en.strings
ln -s src.localized src  
chflags -h hidden src

Решение с лишней сущностью, но что не сделаешь ради ~/src и нормального названия в Finder.

Документация Apple по теме.

Впечатления

Из Split View нельзя выйти с помощью шоткатов. Esc не работает, это правильно, но какую нибудь комбинацию можно было бы сделать. В текущем виде удобство сомнительно.

В Safari сломали горячие клавиши к избранным закладкам. Переучивание происходит быстро.

Отрисовка графики на моём MBP Late 2013 стала быстрее, как и обещали. Ниже машины, на которых будет заметен эффект от Metal:

MacBook (Early 2015)  
MacBook Pro (Mid 2012 or newer)  
MacBook Air (Mid 2012 or newer)  
Mac mini (Late 2012 or newer)  
iMac (Late 2012 or newer)  
Mac Pro (Late 2013 and newer)  

Новый шрифт улучшает читаемость.

El Capitan получился довольно приличным, почти ничего не испортили, ну и на том спасибо.


Месседжинг в IRC

Таким же любителям олдскула, как и я, для популяризации и сохранения IRC движения.

В августе этого года IRC исполнилось 27 лет. Кто не помнит, в 00-x у нас, и в 90-x у них, почти во всех локальных сетях именно Internet Relay Chat был основным местом, где можно было початиться. Если по хронологии, то появился протокол чуть позже, чем BBS, и значительно раньше, чем Jabber, в 1988 году. Да, он стар, но в данном случае возраст только красит "ирку".

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

Конечно, сети EFNet и RusNet уже не те, что были раньше, да и UaNet умер полностью. Но freenode переживает свои лучшие годы, сеть очень даже жива, и населена разработчиками, сисадминами и прочими айтишниками. Freenode — самый большой, и пожалуй самый полезный хаб из всех ныне существующих. Именно здесь хостятся самые большие каналы: #linux, #python, #freebsd, и многие другие, готовые помочь в трудную минуту.

Русскоязычных пользователей можно найти на каналах #russian.it и #debian-russian, они вполне годятся для обсуждения айтишных ништяков, рекомендую.

Времена Windows позади, и любимый mIRC навсегда останется в памяти, тем не менее неплохие клиенты для современных платформ есть.

В OS X бесплатный Colloquy, платный Textual и хардкорно-консольный irssi из brew.

В iOS хорошо работает Palavar, только историю не хранит (для этого есть баунсеры). Умеет push, если вам это надо (мне — нет).

Чтобы не пропускать сообщения на любом подручном линаксе можно поднять баунсер, самый популярный ZNC. Ставится без проблем из докера, тут можно взять мой Dockerfile.

Docker в DigitalOcean работает, но нужно обновить ядро до 3.16, я попутно наконец обновил свой Debian, с Wheezy до Jessie.


Выбор кабеля зарядки и синхронизации для iPhone, iPad и iPod

Каждый день мне приходится пользоваться как 30-pin, так и более современными, 8-pin (lighting), шнурками. Но не все они одинаково хорошо работают, часть устройств вообще отказывается заряжаться, часть заряжается через раз, подставляя в самый неподходящий момент.

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

Красивые заголовки на eBay — genuine, original и т. д. как правило не отражают действительность. Отличить подделку от оригинала очень просто1, контакты внутри оригинального USB в фейковых коннекторах не золотого цвета, а серебряного.

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

Самый правильные "шнурки", по моему скромному мнению, это оригинальные в случае 30-pin, а для 8-pin усиленные (nylon braided) от Anker. В случае со сторонними производителями нужно обязательно проверять наличие логотипа MFi.

30-pin:

Original Apple iPhone 4/4S/3 iPad 1 2 USB Charger Data Sync Cable In Retail Box

Хорошо запечатанная коробка
Одноразовый неоторванный стикер
Оригинальный кабель и инструкция

Цена: 13 $ на eBay

--
8-pin lighting:

Anker 3ft / 0.9m Nylon Braided Lightning to USB Cable [Apple MFi Certified]

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

Отличительная бирка MFi — Made for iPod, iPad, iPhone
Правильный EAN код, проверяем в Scanbot

Цена: 18 $ на eBay


  1. Официальное руководство по идентификации подделок здесь