Корпоративный мозг на 1С и Python

68 Comments

  1. bonv
    Мною был приведен пример того, что нейронные сети можно создавать не только с помощью специализированных языков, типа Python, но и с помощью такого инструмента как 1С. В статье показано, что решить вопрос отсутствия функционала для умножения матриц, можно путем использования встроенного типа данных «Структура».

    Язык Python это не специализированный язык для создания нейросетей. Это язык общего назначения.

    Операции с матрицами в numpy выполняются на 3 порядка быстрее вашей реализации в 1С.

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

    Reply
  2. pm74

    (0) для каких задач в 1с требуется machine learning , только планирование ?

    Reply
  3. grumagargler

    Хорошая статья.

    Подскажите пожалуйста, «digital-трансформация, digital-мир» это цифровая-трансформация / мир, или есть какой-то иной смысл непереводимости фраз на русский язык?

    Reply
  4. user995065

    (2) Спасибо за вопрос! В разделе «С чего начать» статьи перечисляются еще несколько задач, кроме планирования.

    Reply
  5. user995065

    (1) В момент редактирования документа в 1С, до его сохранения в базе данных, внешняя сеть на Python не увидит изменений в информации, которую вводит пользователь. Так что для многих задач в 1С ограничиться только внешней нейросетью будет сложнее.

    Reply
  6. user995065

    (3) Главный смысл, как бы, в сочетании Python со средствами 1C — для применения нейросетей в компаниях, где есть 1С.

    Reply
  7. bonv

    (5) Если исходить из

    2-й вариант: используем из 1С данные, расположенные в таблицах SQL-сервера, а саму нейросеть и обработку данных выполняем на Python.

    то да.

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

    Лучше и практичнее: выносим обученную модель в микросервис и уже из 1С обращаемся к этому сервису.

    Reply
  8. BlinOFF

    не насилуйте 1ску, ей итак не легко ))

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

    Reply
  9. nomadon

    Nvidia gpu в 1с не будет никогда, продолжения не будет, огромный мозговой потенциал работает над созданием библиотек и алгоритмов, реализовывать все снова и на лад 1сников это конечно весело

    Имхо, статья похожа на курсовую, возможно имел место «укус Белокаменцева»

    Reply
  10. webester

    (9)Да когда первые несколько страниц — вступление, очень похоже, что так оно и есть. Мадам действительно разобралась с нейросетями и даже (ну ничего себе) научила 1с складывать два плюс два. Действительно очень важно и нужно особенно если учесть, что и алгоритмы и практическое применение нейросетей уже было на ИС.

    Reply
  11. KroVladS

    (9)

    «укус Белокаменцева»

    О новый термин ввели..

    Reply
  12. Steelvan

    (3) Смысл в том, что автор думает, что используя англицизмы она будет казаться умнее.

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

    Reply
  13. acanta

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

    Тезис о том, что нельзя сделать систему управляемой, если она не наблюдаема весьма интересен.

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

    Reply
  14. comol

    Ох… Ну конечно не «нейросетей» а машинного обучения. Особенно для приведённых примеров задач… Логистическая регрессия и градиентный бустинг дали бы лучший результат. В 1С это можно делать посредством ВК или http сервисов. Даже если на python написали…. LLVM вам в помощь. А так очень много красивых букв конечно

    Reply
  15. user995065

    (13)Позвольте полюбопытствовать, разработчик информационной системы — это кто ? Не кодер на плюсах, часом ? Нейросети больше любят математиков, как бы. Да, и 1С-разработчик больше сориентирован на предметную область, чем кодер на «языке общего назначения». Поэтому сети для 1С-ников — это true 🙂 Они быстрее разберутся и будут применять.

    Reply
  16. user995065

    (14) «А так очень много красивых букв конечно» Это вы про LLVM ? 🙂 Кстати, я при использовании методов ML всегда обобщаю их до нейросетей. Так что всё таки нейросети. И только нейросети 🙂

    Reply
  17. user995065

    (10)Статья для управленцев, однако. Для выдающихся ученых в следующий раз напишу компактно: 2 страницы диффур и анализ DNC для Neural ODE 🙂

    Reply
  18. user995065

    (7)То, о чем вы говорите — это идеальный вариант. Но для компании, в которой есть только 1С, «На чём писать сеть ?» — это вопрос №3, т.к. вопрос №2 — это «Готов ли ваш ИТ-директор сразу брать специалистов по Python или он вначале посмотрит несколько простых примеров для простых задач на 1С?». Не все еще уверовали в ML 🙂 Вопрос же №1 — «Есть ли в компании кто-то, у кого всё в порядке с матано-функаном для корректной интерпретации результатов и построения моделей ?»

    Библиотеки для нейросетей в меньшем приоритете, чем модели и данные, железо. Это не ООП. Сеть любой архитектуры со всеми видами оптимизации вы и сами напишите за вполне приемлемое время. А группа разработчиков — подавно.

    О варианте «с микросервисом» будет следующая статья, с практическим примером. Будут только регистры и внешняя сеть.

    Reply
  19. acanta

    (15) встречный вопрос а 1с разработчик он кто?

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

    Но вообще 2 + 2 это проблема, тут думать надо, яблоки считать, кубики, баранов. Можно и пропустить что то и дважды посчитать.

    А таблицу умножения достаточно вызубрить.

    Reply
  20. bonv

    (18) у вас какое-то смещенное мнение. Все строится от нейросетей. Т.е. все остальные алгоритмы машинного обучения у вас уже априори в проигрыше. На данный момент не существует алгоритма, который работает одинаково хорошо во всех задачах.

    Чтобы получить какие-то результаты для понимания полезности внедрения ML, не нужен

    кто-то, у кого всё в порядке с матано-функаном для корректной интерпретации результатов и построения моделей

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

    И если речь идёт о найме, то нужно брать специалиста по машинному обучению, а не разработчика. Разработчики понадобятся уже после.

    Вот вы говорите, что модели, данные и железо первично, а потом уже библиотеки. Но при этом предлагаете с нуля писать нейросети в 1С. Как я уже писал, numpy работает на 3 порядка быстрее реализации на 1С. Переводя на понятный язык: обучение нейросети, которое занимает 10 мин, например, в библиотеке tensorflow, у вас на 1С займёт от 7 часов до 7 дней. Чтобы получить что-то полезное на выходе, нужно прогнать десятки, сотни или даже тысячи моделей. На 1С же это займёт вечность.

    И еще, почему вы в статье пишите «.. используя машинное обучение и искусственный интеллект..»?

    Это тоже самое что писать «… используя колеса и автомобиль…»

    Reply
  21. ildarovich

    Интересная статья даже если не соглашаться с выводами. Очень много примеров больших и маленьких открытий в современной математике. Чтобы искать каждый факт по отдельности, может быть, подскажете, откуда это все в основном взято. Может быть книга (чья?) или лекции (чьи?) или что-то еще. То есть где про все это почитать подробнее? Имеется ввиду не азбука, а вот типа этого «методы нейроматематики позволяют заглянуть в восемь раз дальше по сравнению с классическими методами прогнозирования»

    Reply
  22. acanta

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

    Reply
  23. user995065

    (20)Ну, чтобы в философию не уходить, давайте просто вы вывесите код сети в 1С и код на Python этой же сети для Tensorflow: опишем железо, параметры данных и замерим время вычислений, сравним результаты.

    А то просто словами можно кидаться бесконечно. Простые нейросети в 1С легко реализуемы и быстро обучаются. Это факт. А против фактов не попрешь 🙂 Поэтому нейросети могут быть взяты на вооружение любой компанией, где есть 1С. Пишите сети в 1С. Это легко и надежно. Ну, и конечно их архитектуры планируйте с учетом доступных ресурсов системы и нагрузки. От этой задачи никто не освобождал.

    Reply
  24. user995065

    (21) Это взято из моей презентации для компании, в которой я внедряла сеть на 1С 🙂

    А про результаты «в восемь раз дальше» , т.е. о Reservoir computing данные исследований приведены подробно здесь:

    https://aip.scitation.org/doi/abs/10.1063/1.5010300?journalCode=cha&

    https://link.springer.com/article/10.1007%2Fs12559-017-9461-9

    https://www.nature.com/articles/s41467-017-02337-y

    http://www.bmp.ds.mpg.de/tl_files/bmp/preprints/Zimmermann_Parlitz_preprint.pdf

    Возможно, через 2-3 месяца выложу сюда Reservoir computing, обобщенный до нейросети в 1С.

    Reply
  25. Nefilimus

    Так себе информация я Вам скажу. Не очень яркие примеры использования нейросетей в 1С. Для того, чтобы ИИ правильно анализировал и принимал решения по работе в системе, необходима приличная база с данными, а также систематизация. Допустим, кладовщик должен отгружать товары сразу, после того как он попал в систему, но кладовщик у нас лентяй и делает с опозданием на час. А иногда вообще нужно действовать по обстоятельствам. Что тогда? ИИ будет выдавать такие же отвратительные результаты. Думаю для 1С ИИ не очень подходит.

    Reply
  26. pm74

    (4) В реальности просто никто не придет и не скажет » сделай мне модель классификации того то по такому то набору признаков «, т.е. это либо в пределах самодеятельности и проф. любопытства ,либо какая то другая должность, не программист 1с (имо)

    Ну а в техническом плане наверное действительно проще не изобретать велосипед на 1с а взять готовые библиотеки на питоне.

    Reply
  27. lustin

    (0) Код конечно… Вообще не читабельный. Сонара на вас нет.

    Что касается тематики — я использую https://github.com/BVLC/caffe через NativeAPI и не заморачиваюсь этим вашим питоном

    А для любителей питона я уже год назад показывал — уже все готово https://blog.dataiku.com/deep-learning-with-dss

    Reply
  28. user995065

    (8)С точки зрения бизнеса, временные издержки по изменению ИТ-инфраструктуры воспринимаются компанией более болезненно, чем постоянные издержки, связанные с отставанием этой инфраструктуры от какого-то субъективного идеала, известного, к примеру, только вам. Это я про ошибочность распространенного в среде любителей компиляторов и ООП утверждения о том, что ML в 1С не может быть по определению.

    Знаете продакшн-пословицу «Нафиг индукцию, давай продукцию»? Она на пальцах поясняет причину, почему все работают в 1С, а не, к примеру, в Dynamics AX. Работали, работают и будут работать. И все довольны 🙂 Потому, что у 1С с MVP всё в порядке.

    По этой же причине все будут строить сети в 1С, пока кто-то в это время рассказывает о смысле жизни и высоких возможностях в параллельных мирах. Каждому своё 🙂 Зарабатывайте на внедрение нейросетей в 1С!

    Всё, что большими коллективами людей из сферы AI и ML придумано и написано, к примеру, для Tensorflow, может быть отобрано под конкретную задачу и легко переписано под 1С. Нейросеть — это простой «алгоритм». Никаких аналогий, к примеру, с гигантскими веб-фреймворками там нет. На нейросетях кодеры в таком объеме не нужны. А недостающие несколько обработок для вычисления функций матана написать для 1С или вывести перемножение матриц в ВК на GPU — это, вы считаете, проблема ?

    Reply
  29. user995065

    (20)Вас пугает только вычисление матриц 1С-нейросетью ? Или еще что-то является критичным ? Матрицы выносим в ВК. Что еще там пересчитывается также часто ? Вынесите матрицы через NativeAPI и сравните с numpy — разрыв значительно сократится.

    Reply
  30. nomadon

    (29) интересненько, а расскажите как n мерные массивы передавать в ВК что бы там умножать?!

    Reply
  31. nomadon

    (31) повторю вопрос: «интересненько, а расскажите как n мерные массивы передавать в ВК что бы там умножать?»

    Reply
  32. andreypahov

    Спасибо!

    Явно интересная статья, которая может пригодиться — в том числе, в той сфере, которой я занимаюсь.

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

    Reply
  33. Evgeniy_Bayd

    Спасибо за статью!

    Reply
  34. Darklight

    Помню, когда ещё был студентом — баловался нейросетями на страших курсах. Экспертную систему делал. И всё на 1С. Ну побаловался и забросил — не предназначена платформа для этого — хотя да, может, в силу своей некоторой, базовой универсальности, и лёгкой соединённости данных и алгоритмов. Но что, требуется от нейросети — скорости! А 1С Платформа её предоставить не сможет А так…. нейросеть можно и на СУБД построить, например на MS SQL Server через Transact SQL — и никакой посредник не нужен будет. Но скорости этого не особо прибавит. Тут нужен специальный движок, который сможет очень быстро и легко (для разработчика):

    1. Совершать параллельные вычисления

    2. Осуществлять гигантские выборки статистических данных

    3. Совершать короткие но массовые апдейты весовых-ресурсов

    4. Осуществлять быстрый массовый сетевой поиск (тут кстати, реляционные СУБД не шибко производительны)

    5. Иметь удобны средства по настройке и тестированию нейросети

    Reply
  35. taishy

    Обучение это хорошо. Научить бы ИИ придумывать что-то новое…

    Reply
  36. ildarovich
    Reply
  37. TODD22

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

    Например планируем закупки и сравниваем несколько подходов: пальцем в небо, от результата прошлого периода + 10%, нейросетью и тд. Что бы понимать какие задачи и на сколько эффективно можно решать с помощью нейросетей.

    Так же возникает вопрос а кто будет отвечать за неверный прогноз?

    Reply
  38. user995065

    (32) А что, вы не знаете, как работать с тензорами ? Выносите их данные в ВК и дальше делаете с ними всё, что захотите.

    ВК для матриц и GPU со всеми библиотеками выложу со следующей статьей.

    Reply
  39. user995065

    (33)Для хранения и передачи n-мерных матриц все элементы матрицы могут быть представлены в виде n+1-мерных векторов, которые будут содержать на 1-м месте значение соответствующего элемента матрицы, все остальные n-параметров (со 2-го по n+1-ый) — это его соответствующие n-индексов в матрице.

    Reply
  40. user995065

    (36) Чтобы не перегружать систему 1С и не блокировать работу пользователей, делается зеркальная копия базы (например, распределенная база данных и т.п.) с определенной периодичностью производим обмены.

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

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

    Reply
  41. nomadon

    (40)понятно, спасибо

    Жду в следующей статье упаковку массива в строку и обратный парсинг в numpy массив

    С удовольствием проголосую за номинацию «теоретик-хайповед», спасибо за то, что дали понять утопичность дальнейшего взаимодействия

    Reply
  42. nomadon

    (41) крутяк, можно мне к вам на работу?

    Reply
  43. user995065

    (26)Ну, да. Это задачи для датасайнтиста. Кому интересен ML, тот и будет его продвигать и внедрять.

    Проще сделать нейросеть на 1С, с разными костылями на ВК, чем приучить работать в Tensorflow всех начальников торговых и производственных подразделений, экономистов, главного бухгалтера и финансового директора компании, и еще нанять несколько Python-разработчиков.

    Reply
  44. user995065

    (38)Спасибо за дополнения и поддержку дискуссии! Планирую получить собственные экспериментальные результаты применения Reservoir computing на полноценной выборке в ближайшие месяцы. Результаты выложу здесь.

    Насчет термина «нейробум»… Судя по количеству реально работающих приложений ИИ, сложно назвать это данью моде.

    Reply
  45. user995065

    (43) Подобные фантазии со строкой слегка удручают 🙂 Вам надо, как бы это сказать, наверное знания немного подтянуть.

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

    В момент заполнения документов, система сама отслеживает прописанные события формы и обращается к существующей на этот момент нейронной сети в 1С.

    Нейронная сеть в 1С (n-мерная матрица) хранится в виде регистра сведений в sql-таблице базы данных. Эта таблица/регистр содержит n+1 реквизит, каждый элемент n-мерной матрицы (n+1-мерный вектор) — это запись в sql-таблице. Первый реквизит содержит значение соответствующего элемента матрицы, остальные n-реквизитов — соответствующие n-индексов в матрице.

    Для того чтобы нейросеть могла обучаться на реальных примерах, для пользователя создается обработка. На форме обработки задается шаблон создания и заполнения примеров для обучающей выборки. Вся эта информация так же фиксируется в sql-таблицах 1С (регистр сведений).

    После того, как обучающий пример в 1С зафиксирован, 1С вызывает внешнюю компоненту, которая запускает расчеты на Python. Python обращается к sql-таблицам 1С, в которых хранятся записи обучающей выборки. Python, произведя расчеты для нейронной сети, записывает полученный результат в sql-таблицу баз данных, в которой хранится нейронная сеть. В дальнейшем при работе пользователей on-line, 1С обращается к нейронной сети, которая является результатом, полученным в результате работы Python.

    Reply
  46. pm74

    (45) вк или python — дело вкуса (хотя вы сами упомянули последний в заголовке) .

    1с =>python можно сделать , например, через rpc

    на скриншоте 2х2 на питоне через 1с (без ml )) )

    несколько Python-разработчиков.

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

    приучить работать в Tensorflow всех начальников …экономистов, главного бухгалтера и финансового директора

    ну уж точно не надо)) Им нужен готовый продукт , красиво упакованый и перевязаный ленточкой. Полезные отчетики , кнопочки в 1с , экономистам можно картинки из Matplotlib

    Reply
  47. vvh74

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

    для любой задачи, которую может решить нейрокомпьютер, можно построить более стандартную специализированную ЭВМ, которая решит ее не хуже, а чаще всего – даже лучше

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

    Так что учите ML или вас ждут перспективы разработчиков на фоксбейз.

    Reply
  48. vvh74

    (39) «кто будет отвечать за неверный прогноз» — вообще никак не относится к применяемым алгоритмам.

    А про планирование я вам скажу. Если нет жесткого линейного алгоритма расчета, то нейросети — единственный вариант, который дает хоть какую-то надежду на результат, все остальное мало отличается от «пальцем в небо». Это по личным наблюдениям за полугодовым процессом попыток подобрать метод планирования продаж, причем в достаточно тепличных условиях.

    Reply
  49. Darklight

    (42)Всё это капля в море — а перенос в другую базу — никак не прибавит аппаратных мощностей!

    Reply
  50. Darklight

    (42)Всё это — капля в море. А перенос в другую базу — никак не прибавит аппаратных мощностей!

    А вот интеграция с проектом MS Azure Machine Learning — вполне была бы интересна — коли у компании 1С (ну или, например, Яндекса) пока нет ещё своего аналогичного проекта.

    Reply
  51. user995065

    (47) Я думаю, из приведенного выше описания понятно: нейросеть находится в 1С, обучается в режиме online, а все «тяжелые» вычисления производятся в Python, в первую очередь матрицы, в т.ч. и на GPU. Вялые контраргументы еще остались у кого-то ?

    Reply
  52. user995065

    (48) С rpc вариант стоит использовать. Сделаю, сравню с ВК. Спасибо!

    Я ниже, в ответе на комментарий, описываю архитектуру связки «1С-нейросеть + Python», с выносом основных вычислений в Python.

    Reply
  53. user995065

    (51) Аппаратные мощности прибавит использование GPU, после того как мы вынесем основные вычисления в Python. Но только вычисления, а не сеть. Сеть остается в 1С. Я ниже, в ответе на комментарий, описываю всю связку «1С-нейросеть + Python». И проблема с производительностью уменьшается до допустимой.

    Reply
  54. user995065

    (52)Главное интеграцию организовать так, чтобы нейросеть могла обрабатывать не сохраненные в базе данных данные о работе пользователя. Это важно для многих задач. Т.е. в момент редактирования документа в 1С, до его сохранения в базе данных, нейросеть должна видеть изменения.

    Reply
  55. pm74

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

    текст запроса для xmlrpc

    Скрытый текст
    Reply
  56. KapasMordorov

    Крикливые заголовки, а также цитирование себя в соседстве с Кантом и Винером (причем себя впереди них), утонули в бессодержательном бла-бла-бла.

    Это курсовая экономиста или маркетолога?

    Reply
  57. TODD22

    (58)

    а также цитирование себя в соседстве с Кантом и Винером (причем себя впереди них)

    «Так сказал я и сегодня, ну ещё Кант, но давно».

    Reply
  58. dmagin

    Мне нравится напор автора.

    Надо продолжать копать с такой же энергией в этом направлении.

    Воды можно поменьше, а конкретики побольше.

    Reply
  59. for_sale

    (58)

    Да, уж от скромности автор точно не простудится))

    Reply
  60. acanta

    Каждый ИТ директор должен защитить свою кандидатскую диссертацию!

    Reply
  61. nyam-nyam

    (62)И начать это делать на Инфостарте с виде статей и лирических отступлений от оных. И главное отвечать в комментах. 🙂

    Reply
  62. acanta

    (63) или с преподавания информатики в младших классах с репетиторством.

    Reply
  63. user1219528

    .

    Reply
  64. lmnlmn

    (64) Кхм, я параллельно преподаю детворе информатику и роботоехнику)) Я бы рекомендовал попреподавать ИТ или что-то близкое детворе возрастом от 5 до 14 лет — получите бесценные знания и опыт по понимаю и использованию социальных инстинктов людей для работы в команде что, несомненно, поможет в становлении ИТ-директора))

    Reply
  65. akimych

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

    Ответ, начинайте на тех серверах, что есть и своими силами — не устраивает.

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

    Это значит, репликация, отдельная БД, , отдельный сервер, отдельный саппорт всего этого.

    К примеру сколько будет стоить это история на данных размером хотя бы 1 ТБ?

    Reply
  66. Perfolenta

    (37) в том-то и проблема… ни какого ИИ не существует… и даже не известно с какой стороны к нему подойти…

    я еще в 80-е в СССР читал в журнале «Наука и жизнь» статьи про экспертные системы и системы искусственного интеллекта… с тех пор мало что поменялось, за исключением увеличения производительности и миниатюризации компьютеров…

    увеличение размера и сложности программ в совокупности с резким увеличением скорости их выполнения дают ложное ощущение, что машина думает, но она как и 40 лет назад просто считает….

    Reply
  67. mvxyz
    Вектор вашего бизнеса только тогда направлен в сторону совершенства, когда вы пользуетесь научными методами в управлении.

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

    Отдельный вопрос: Какие методы управления считать научными?

    Reply
  68. user1274438

    Сколько букв, и ничего по существу. Бизнес нуждается в диджи…, диги…, дижи… Нуждается, в общем, наш бизнес, значит. Спасибо, кэп.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *