Как подключиться к docker по ssh

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

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

docker run --rm -ti -p 52022:22 ubuntu

rm – говорит о том что после выхода из контейнера контейнер будет удалён
t говорит о том что при создании докер контейнера будет создан псведо tty
i это ключик interactive говорит о том что процесс стандартного ввода линукс будет открытым даже когда не используется 

После ввода команды мы попадаем в ubuntu

Итак мы в терминале голой убунты, вводим команду на обновление репозиториев, склеиваем её с командой установки openssh сервера, и для последующего редактирования ssh конфига устанавливаем свой любимый консольный графический редактор, мне последнее время нравится micro вы ставьте что более удобно для вас nano vim или ещё какая-нибудь дичь.

apt update && apt install openssh-server && apt install micro

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

passwd

после чего правим конфиг вновь установленного ssh сервера командой 

micro /etc/ssh/sshd_config 

(Понятное дело, что вместо micro вводите ваш текстовый редактор)

Находим строку PermitRootLogin, раскомментируем и в ней прописываем yes.

Сохраняем и закрываем файл, запускаем ssh сервер

/etc/init.d/ssh start

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

ssh -p 52022 [email protected]

Вход по ssh, отключение доступа по паролю и отключение root аутентификации

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

Итак, стоит задача чуть-чуть засекурить вновь арендованный сервер, а именно создать нового пользователя, настроить ему логин по ssh ключу, отключить доступ по паролю и отключить аутентификацию от root пользователя.

  1. Да сотворю я пользователя нового и добавлю его в группу админску, дабы умел он пользоваться всеми благами sudo:
adduser manjarqo

вводим дважды пароль никому не ведаемый, дабы супостат не смог прознать тайны заветной(ясно-понятно вместо manjarqo имя своего юзера). Потом добавляем ему sudo привелегии:

usermod -aG sudo manjarqo

2. На локальной машине если ещё не создан ssh ключ то генерим:

ssh-keygen -t rsa

Если уже есть то сразу выполняем:

ssh-copy-id [email protected]

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

ssh [email protected]

Если залогинился то переходим к следующему пункту, если не залогинился, то разбирайтесь что пошло ни так и потом переходите к следующему пункту.

3. После входа на сервер по ключу от нового пользователя открываем для редактирования ssh конфиг и чуть-чуть его правим:

sudo nano /etc/ssh/sshd_config

В нём приводим строку к виду PasswordAuthentication no, предварительно раскомментировав если закоментирована и строку к виду PermitRootLogin no, так же раскомментировав, после чего перезапускаем службу ssh командой:

sudo service ssh restart

Если всё прошло хорошо, то под root пользователем больше не зайти, что сразу же обломит тех кто непрерывно брутфорсит наш сервак и вообще вход возможен только человеку у которого в папке ~/ssh лежит именно ваш ключик, так что берегите его.
Всем добра!

Чем в macOS перегнать dvd в mp4

Возникла необходимость перегнать dvd диск в нормальный формат, скопировал целиком файлы с диска на мак, стал искать и нашел кучу платных решений, оказалось что есть великолепный инструмент Handbrake. По ссылке на офсайте есть версия и для M1 Apple Silicon. Работает великолепно.

Запускаем android emulator на процессоре m1 от Apple

Собственно стал я на днях счастливым обладателем MacBook Air на новеньком процессоре M1 от всем известной фруктовой компании. Установил как обычно Android Studio и только было решил насладиться разработкой приложения во Flutter, как оказалось что эмулятор Андрюхин-то, не работает вовсе.

Решение оказалось крайне простым скачиваем отсюдава https://github.com/google/android-emulator-m1-preview
устанавливаем. При первом запуске макось ругнется: «Не гоже тебе, боярин, всяческое непотребство из неизвестных источников ставить!», заходим в настройки безопасности и жамкаем подтвердить вход и всё, вполне себе работоспособный эмулятор установлен в нашей чудо-пишущей машинке.

hackintosh ice lake i5-1035g1 EL[0] was invalidated

После установки хакинтоша на Lenovo v14-iil время от времени случалась паника ядра с такой ошибкой:

panic(cpu 0 caller 0xffffff7f8d5e4f42): "EL[0] was invalidated!!"@icl/sched5/IGHardwareCommandStreamer.cpp:64
Backtrace (CPU 0), Frame : Return Address
0xffffff81db0d5860 : 0xffffff800ab1a65d mach_kernel : _handle_debugger_trap + 0x49d
0xffffff81db0d58b0 : 0xffffff800ac54a75 mach_kernel : _kdp_i386_trap + 0x155
0xffffff81db0d58f0 : 0xffffff800ac465fe mach_kernel : _kernel_trap + 0x4ee
0xffffff81db0d5940 : 0xffffff7f8ea2d6f4 as.vit9696.VirtualSMC : __ZN18VirtualSMCProvider10kernelTrapI22x86_saved_state_1010_tEEvPT_Pm + 0x454
0xffffff81db0d59c0 : 0xffffff800aac0a40 mach_kernel : _return_from_trap + 0xe0
0xffffff81db0d59e0 : 0xffffff800ab19d27 mach_kernel : _DebuggerTrapWithState + 0x17
0xffffff81db0d5ae0 : 0xffffff800ab1a117 mach_kernel : _panic_trap_to_debugger + 0x227
0xffffff81db0d5b30 : 0xffffff800b2c1a6c mach_kernel : _panic + 0x54
0xffffff81db0d5ba0 : 0xffffff7f8d5e4f42 com.apple.driver.AppleIntelICLGraphics : __ZL27ContextStatusBufferValidateRK15IGHwCsExecList5PK28SGfxContextStatusBufferEntry.cold.2
0xffffff81db0d5bb0 : 0xffffff7f8d58fe7c com.apple.driver.AppleIntelICLGraphics : __ZL27ContextStatusBufferValidateRK15IGHwCsExecList5PK28SGfxContextStatusBufferEntry + 0x2a
0xffffff81db0d5bc0 : 0xffffff7f8d5902f1 com.apple.driver.AppleIntelICLGraphics : __ZN26IGHardwareCommandStreamer522csbProcessActiveToIdleEPK28SGfxContextStatusBufferEntry + 0x25
0xffffff81db0d5c00 : 0xffffff7f8d58edbe com.apple.driver.AppleIntelICLGraphics : __ZN26IGHardwareCommandStreamer526processContextStatusBufferEj + 0x166
0xffffff81db0d5c50 : 0xffffff7f8d58eb94 com.apple.driver.AppleIntelICLGraphics : __ZN26IGHardwareCommandStreamer513schedDispatchEj + 0x52
0xffffff81db0d5c70 : 0xffffff7f8d58d820 com.apple.driver.AppleIntelICLGraphics : __ZN26IGHardwareCommandStreamer536handleSoftwareContextSwitchInterruptEP22IOInterruptEventSourcei + 0xc8
0xffffff81db0d5cb0 : 0xffffff7f8d59f13e com.apple.driver.AppleIntelICLGraphics : __ZN17IGInterruptBridge17serviceInterruptsERK8IGBitSetILm41EE + 0x54
0xffffff81db0d5cf0 : 0xffffff7f8d59f1df com.apple.driver.AppleIntelICLGraphics : __ZN17IGInterruptBridge17processInterruptsEPy + 0x61
0xffffff81db0d5e10 : 0xffffff7f8d57dcfe com.apple.driver.AppleIntelICLGraphics : __ZN16IntelAccelerator36_ProcessNonDisplayInterruptsCallbackEP8OSObjectPy + 0x10
0xffffff81db0d5e20 : 0xffffff7f8ced8551 com.apple.driver.AppleIntelICLLPGraphicsFramebuffer : __ZN31AppleIntelFramebufferController36ProcessNonDisplayInterruptsCallbacksEv + 0x3b
0xffffff81db0d5e60 : 0xffffff7f8cef9ed2 com.apple.driver.AppleIntelICLLPGraphicsFramebuffer : __ZN31AppleIntelFramebufferController16ProcessInterruptEv + 0x12e
0xffffff81db0d5eb0 : 0xffffff7f8cefaf3d com.apple.driver.AppleIntelICLLPGraphicsFramebuffer : __ZN31AppleIntelFramebufferController18HWInterruptHandlerEP28IOFilterInterruptEventSource + 0x15
0xffffff81db0d5ed0 : 0xffffff800b230d36 mach_kernel : __ZN28IOFilterInterruptEventSource23normalInterruptOccurredEPvP9IOServicei + 0x76
0xffffff81db0d5f00 : 0xffffff7f8b8d407e com.apple.iokit.IOPCIFamily : __ZN32IOPCIMessagedInterruptController15handleInterruptEPvP9IOServicei + 0x126
0xffffff81db0d5f50 : 0xffffff7f8c57c88c com.apple.driver.AppleACPIPlatform : __ZN23AppleACPIPlatformExpert23dispatchGlobalInterruptEi + 0x2e
0xffffff81db0d5f60 : 0xffffff7f8c585547 com.apple.driver.AppleACPIPlatform : __ZN31AppleACPICPUInterruptController15handleInterruptEPvP9IOServicei + 0x6b
0xffffff81db0d5f80 : 0xffffff800ac45e4d mach_kernel : _interrupt + 0x17d
0xffffff81db0d5fd0 : 0xffffff800aac0bed mach_kernel : _hndl_allintrs + 0x11d
      Kernel Extensions in backtrace:
         com.apple.iokit.IOPCIFamily(2.9)[44472E6F-8DA0-3B46-ADEF-AFF76EC6C6DB]@0xffffff7f8b8b4000->0xffffff7f8b8ecfff
         com.apple.driver.AppleACPIPlatform(6.1)[0EF10B66-B44B-32BB-9CE3-5434F4D40FE1]@0xffffff7f8c575000->0xffffff7f8c60ffff
            dependency: com.apple.iokit.IOACPIFamily(1.4)[2956198D-24F2-3790-A9B2-1EAB9434B906]@0xffffff7f8b8a2000
            dependency: com.apple.iokit.IOPCIFamily(2.9)[44472E6F-8DA0-3B46-ADEF-AFF76EC6C6DB]@0xffffff7f8b8b4000
            dependency: com.apple.driver.AppleSMC(3.1.9)[D2F0B610-83F8-3B84-B0BD-D9D0CC95A697]@0xffffff7f8b8f3000
         as.vit9696.VirtualSMC(1.1.7)[82514289-1BE6-3D64-B088-1D4ADE840C66]@0xffffff7f8ea1d000->0xffffff7f8ea44fff
            dependency: as.vit9696.Lilu(1.4.6)[DF135818-86FD-3053-8FF2-974F99CCF2CD]@0xffffff7f8dabe000
            dependency: com.apple.iokit.IOACPIFamily(1.4)[2956198D-24F2-3790-A9B2-1EAB9434B906]@0xffffff7f8b8a2000
         com.apple.driver.AppleIntelICLLPGraphicsFramebuffer(14.0.7)[CB4E7B11-AD8B-3D5A-A395-B1B20A7E5B4F]@0xffffff7f8ce82000->0xffffff7f8d120fff
            dependency: com.apple.iokit.IOPCIFamily(2.9)[44472E6F-8DA0-3B46-ADEF-AFF76EC6C6DB]@0xffffff7f8b8b4000
            dependency: com.apple.iokit.IOACPIFamily(1.4)[2956198D-24F2-3790-A9B2-1EAB9434B906]@0xffffff7f8b8a2000
            dependency: com.apple.iokit.IOAcceleratorFamily2(438.7.3)[B263A05C-9992-3742-AD6C-295E68E22576]@0xffffff7f8cda9000
            dependency: com.apple.iokit.IOReportFamily(47)[72B53B80-5713-30C1-BAD8-9D55FD718DA2]@0xffffff7f8b49f000
            dependency: com.apple.AppleGraphicsDeviceControl(5.2.6)[E04CD680-EC03-39ED-99C6-902C8495543F]@0xffffff7f8beff000
            dependency: com.apple.iokit.IOGraphicsFamily(576.1)[1279CBF9-88F1-3EB4-9566-1085DBF6DF8B]@0xffffff7f8bbb7000
         com.apple.driver.AppleIntelICLGraphics(14.0.7)[EA758752-A14E-383E-8DF2-D0FA9C7BF06D]@0xffffff7f8d555000->0xffffff7f8d6d1fff
            dependency: com.apple.iokit.IOPCIFamily(2.9)[44472E6F-8DA0-3B46-ADEF-AFF76EC6C6DB]@0xffffff7f8b8b4000
            dependency: com.apple.iokit.IOSurface(269.11)[2A27F1EB-4418-37FF-82CC-9891C39C6943]@0xffffff7f8cc05000
            dependency: com.apple.iokit.IOGraphicsFamily(576.1)[1279CBF9-88F1-3EB4-9566-1085DBF6DF8B]@0xffffff7f8bbb7000
            dependency: com.apple.iokit.IOAcceleratorFamily2(438.7.3)[B263A05C-9992-3742-AD6C-295E68E22576]@0xffffff7f8cda9000

BSD process name corresponding to current thread: Google Chrome He
Boot args: -v -igfxcdc -igfxdvmt keepsyms=1 debug=0x100 darkwake=0 -noDC9 

Mac OS version:
19H2

Kernel version:
Darwin Kernel Version 19.6.0: Mon Aug 31 22:12:52 PDT 2020; root:xnu-6153.141.2~1/RELEASE_X86_64
Kernel UUID: 05D51A3D-3A87-3FF0-98C3-9CF3827A3EDD
Kernel slide:     0x000000000a800000
Kernel text base: 0xffffff800aa00000
__HIB  text base: 0xffffff800a900000
System model name: MacBookPro16,2 (Mac-5F9802EFE386AA28)
System shutdown begun: NO
Panic diags file available: YES (0x0)

System uptime in nanoseconds: 36038959442354

Решение оказалось крайне простым, нужно добавить в конфиг OpenCore вот такой bootarg igfxfw=2

Автодополнение в oh-my-zsh как в fish

Нравится мне значится оболочка zsh и как частный её случай выступает oh-my-zsh. Всё бы ничего, но угораздило меня как-то попробовать fish и я крайне полюбил как там реализованы автодополнения. Прогуглил и нашел как реализовать, пишу здесь это, как и всё прочее, себе на память.

  1. Если у васм ещё не установлен oh-my-zsh то устаналиваем командой:
sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"
  1. После чего клонируем необходимые для fish подобного автокомплита плагины.
git clone https://github.com/zsh-users/zsh-autosuggestions ~/.oh-my-zsh/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git  ~/.oh-my-zsh/plugins/zsh-syntax-highlighting
  1. Прописываем плагины в конфиг ~/.zshrc :
plugins = ( [plugins...] zsh-autosuggestions history-substring-search zsh-syntax-highlighting)

Внимание: убедитесь, что zsh-syntax-highlighting записан последним в списке плагинов.

  1. Если отображется не ахти как, то попробуйте в конфиг вписать такое изменение стилей ~/.zshrc.
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=white'
  1. Скармливаем zsh исправленный конфиг:
source ~/.zshrc

MacOS Big Sur и sshfs

Ранее я уже писал небольшой пост о том как подключаться из MacOS через SSH к удаленной файловой системе используя SSHFS и OSXFUSE. Но вот в последней версии десктопной яблочной системы, почему то из Homebrew исчез пакет sshfs, сказать что для меня это стало трагедией это ни сказать ничего.

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

scp -r /home/manjarqo/catalog [email protected]:/home/manjarqo/

Но я уже избалован GUI интерфейсами и мне крайне лениво каждый раз вводить этит замечательные комбинации команд.

Так вот нашел я для себя решение в виде готового приложения под названием Mountain Duck.

MacOS и внешний монитор через HDMI или VGA на ноутбуке Lenovo v14 iil

Итак, как можно понять из заголовка топика есть у меня Lenovo v14-iil, на нём традиционно установлен MacOS Big Sur. Эта моя замена MacBook Pro не сильно уступающая по производительности, но крайне уступающая в цене, так мой экземпляр на процессоре i5 1035G1, с мной докинутой то 20 гигабайт оперативкой, докинутым SSD диском обошелся мне в 45к рублей. И как рабочая лошадка, на которой можно разрабатывать под яблочные девайсы, монтировать видео в файнал кате и просто радоваться привычным юзерфрендлиевым приложениям макоси, он меня устраивает чуть больше чем полностью.

До сего дня был на нём один недостаток который не позволял мне радоваться жизнью так как я мог бы. Этот недостаток в том, что процессор 10-го поколения Intel, счастливым обладателем коего я являюсь на настоящиках встречается только в комплекте с usb type С, но никак не с hdmi, посему яблочные драйверописцы предусмотрительно не написали поддержку для HDMI, а по закону бутерброда у меня как раз таки HDMI и никаких тебе ЮСБ тайп си.

И вот сегодня пришла вот такая вот штукенция благодаря ей теперь работаю на внешнем мониторе в маке чего и вам желаю. Владельцам же настоящиков эта штука позволит выводить картинку на несколько дисплеев. Работает так же и в Windows. Явных задержек мною замечено не было, даже видео c youtube в 4k 60fps тянет без отставания звука от картинки. в общем рекомендую. Ссылка не реферальная, вставил ее только потому что сам покупал у этого магазина, это не реклама поэтому можете покупать в другом месте, хотя отправил продавец быстро и пришло за пару недель.

((tabController)) != nil или как мой .xcworkspace падал при открытии

Здравствуй мой юный друг, я расскажу тебе сказочку, о том как давным-давно в тридевятом царстве-тридесятом государстве… Короче пол дня просовокуплялся я с этой ошибкой из кода ниже. Собрался я билдить для яблокостора очередную версию своей flutter приложуньки, и при открытии .xcworkspace моего проекта xcode молчаливо(с его стороны, я же со своей стороны был нескромен в высказываниях и перечислениях всех моральных качеств, всей родни разработчиков всея apple developers до седьмого колена) падал.

Решение было крайне простым, я тупо открыл проект в vscode и в каталоге .xcworkspace удалил наглухо каталог xcuserdata со всем его сратым содержимым. Занавес…

Process:               Xcode [650]
Path:                  /Applications/Xcode.app/Contents/MacOS/Xcode
Identifier:            Xcode
Version:               12.3 (17715)
Build Info:            IDEFrameworks-17715000000000000~8 (12C33)
App Item ID:           497799835
App External ID:       839512638
Code Type:             X86-64 (Native)
Parent Process:        ??? [1]
Responsible:           Xcode [650]
User ID:               501

Date/Time:             2021-03-09 22:49:09.037 +0300
OS Version:            macOS 11.1 (20C69)
Report Version:        12
Anonymous UUID:        8C982321-3B9A-84D2-790A-2EA04A57AD85

Sleep/Wake UUID:       4F3724F4-187C-40B3-A7DB-CA517BF94559

Time Awake Since Boot: 100 seconds

System Integrity Protection: disabled

Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_CRASH (SIGABRT)
Exception Codes:       0x0000000000000000, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Application Specific Information:
ProductBuildVersion: 12C33
ASSERTION FAILURE in /Library/Caches/com.apple.xbs/Sources/IDEFrameworks/IDEFrameworks-17715/IDEKit/Workspace/IDEWorkspaceDocument.m:3270
Details:  (tabController) should not be nil.
Object:   <IDEWorkspaceDocument: 0x7fe3b9074a50>
Method:   -commitStateToDictionary:
Thread:   <NSThread: 0x7fe3b2c073c0>{number = 1, name = main}
Open FDs: 39/7168
Hints:   
 
Backtrace:
  0   -[IDEAssertionHandler handleFailureInMethod:object:fileName:lineNumber:assertionSignature:messageFormat:arguments:] (in IDEKit)
  1   _DVTAssertionHandler (in DVTFoundation)
  2   _DVTAssertionFailureHandler (in DVTFoundation)
  3   -[IDEWorkspaceDocument commitStateToDictionary:] (in IDEKit)
  4   -[DVTStateToken _copyStatefulObjectState] (in DVTFoundation)
  5   -[DVTStateToken pushStateToRepositoryAndReturnError:] (in DVTFoundation)
  6   -[DVTStateRepository _updateStateIfNeeded] (in DVTFoundation)
  7   -[DVTStateRepository collectStateFromRegisteredObjects] (in DVTFoundation)
  8   -[IDEWorkspaceDocument writeStateData] (in IDEKit)
  9   __28-[IDEWorkspaceDocument init]_block_invoke (in IDEKit)
 10   -[DVTDelayedInvocation runBlock:] (in DVTFoundation)
 11   __NSFireDelayedPerform (in Foundation)
 12   __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ (in CoreFoundation)
 13   __CFRunLoopDoTimer (in CoreFoundation)
 14   __CFRunLoopDoTimers (in CoreFoundation)
 15   __CFRunLoopRun (in CoreFoundation)
 16   CFRunLoopRunSpecific (in CoreFoundation)
 17   RunCurrentEventLoopInMode (in HIToolbox)
 18   ReceiveNextEventCommon (in HIToolbox)
 19   _BlockUntilNextEventMatchingListInModeWithFilter (in HIToolbox)
 20   _DPSNextEvent (in AppKit)
 21   -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] (in AppKit)
 22   -[DVTApplication nextEventMatchingMask:untilDate:inMode:dequeue:] (in DVTKit)
 23   -[NSApplication run] (in AppKit)
 24   NSApplicationMain (in AppKit)
 25   start (in libdyld.dylib)
 
abort() called

Application Specific Signatures:
((tabController)) != nil

Error installing BoringSSL-GRPC

Стал я значится flutter разработчиком с пол года как. И вот всё было довольно неплохо, напейсал цельных два приложения и успешно разместил в апсторах и плеймаркетах. Но после обновления на flutter 2.0.1 что то при билде под iOs пошло не так. Возникла ошибка которая представлена ниже при команде pod install

[email protected] ios % pod install    
Analyzing dependencies
cloud_firestore: Using Firebase SDK version '6.33.0' defined in 'firebase_core'
firebase_auth: Using Firebase SDK version '6.33.0' defined in 'firebase_core'
firebase_core: Using Firebase SDK version '6.33.0' defined in 'firebase_core'
firebase_messaging: Using Firebase SDK version '6.33.0' defined in 'firebase_core'
Downloading dependencies
Installing BoringSSL-GRPC (0.0.7)

[!] Error installing BoringSSL-GRPC
[!] /usr/bin/git clone https://github.com/google/boringssl.git /var/folders/fb/fxsnv_l944l5mg6p859jqxnh0000gn/T/d20210306-4220-ge6hhi --template=

Cloning into '/var/folders/fb/fxsnv_l944l5mg6p859jqxnh0000gn/T/d20210306-4220-ge6hhi'...
fatal: the remote end hung up unexpectedly

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

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