Рассказ про ошибки риба

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

JavaScript — это фантастический язык для серверного программирования, так как он поддерживает асинхронное выполнение кода. Но это ещё и усложняет его использование.

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

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

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

Эти соединения что-то захватывало.

Речь идёт о кодовой базе в миллионы строк кода, которой в течение нескольких лет занимались десятки программистов. Может — проблема заключается в неразрешённых промисах? Я решил исследовать этот вопрос.

Проблема останова поднимает голову

Поиск неразрешённых промисов — это пример попытки решения проблемы останова, а известно, что не существует общего алгоритма решения этой проблемы.

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

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

Типичное решение проблемы останова заключается в том, чтобы добавить в систему временные ограничения. Если функция не завершает работу в пределах N секунд — мы считаем, что она где-то застопорилась. Может, это и не так, но мы решаем, что это так, и «убиваем» программу.

Именно поэтому и существуют тайм-ауты соединений. Если сервер остановился — мы не собираемся ждать его вечно. Это важно при разработке распределённых систем.

Но «убийство» процесса сервера при каждом недоразумении — это решение не идеальное. И, кроме того, оснащение каждого промиса в кодовой базе тайм-аутом — это, в лучшем случае, очень сложно.

Но не так всё плохо! Проблему останова можно решить для подмножества распространённых паттернов.

Паттерны проблемных промисов

В прочитанной мной публикации «Нахождение проблемных промисов в асинхронных JavaScript-программах» Алимадади с соавторами выделили распространённые паттерны, которые приводят к появлению неразрешённых промисов, и представили программу PromiseKeeper. Эта программа находит потенциально неразрешаемые промисы с использованием графа промисов.

▍Краткий рассказ о JavaScript-промисах

Та публикация начинается с обзора JavaScript-промисов.

Промисы представляют асинхронные вычисления и могут пребывать в трёх состояниях: pending (ожидание), fulfilled (успешное разрешение) и rejected (отклонение). Вначале они оказываются в состоянии pending.

Код, реагирующий на результат работы промиса (обработчик определённого события), регистрируют с помощью метода .then().

// Немедленно разрешается со значением 17
const promise = Promise.resolve(17)
promise.then(
  function fulfilledReaction(value) {
    console.log({ value })
  },
  function rejectedReaction(error) {
    console.log({ error })
    throw error
  }
)

В коде, на практике, опускают второй параметр для того чтобы сосредоточиться на коде, который выполняется при успешном разрешении промиса (fulfilledReaction). Обычно так поступают при построении цепочек промисов:

// Немедленно разрешается со значением 17
const promise = Promise.resolve(17)
promise.then(value => value + 1)
       .then(value => value + 1)
       .then(function (value) => { console.log(value) })

Каждый вызов .then() приводит к созданию нового промиса, который разрешается возвращаемым значением кода, реагирующего на завершение работы предыдущего промиса. Обратите внимание на то, что последний вызов неявно разрешается со значением undefined. Дело в том, что в JavaScript функция, которая не возвращает что-либо, неявным образом возвращает undefined.

Важная деталь.

В цепочку промисов можно добавить механизм обработки ошибок с использованием .catch():

// Немедленно разрешается со значением 17
const promise = Promise.resolve(17)
promise.then( ... )
       .then( ... )
       .then( ... )
       .catch(err => ...)

Каждый промис, созданный .then(), неявно определяет код, реагирующий на отклонение промиса, аналогичный конструкции err => throw err. Это значит, что .catch() в конце цепочки промисов может отреагировать на ошибки, возникшие в любом из предыдущих промисов.

На практике редко полагаются на стандартный механизм обработки успешно разрешённых промисов, но следующий код корректен:

// Немедленно разрешается со значением 17
const promise = Promise.resolve(17)
promise
  .then(undefined) // используется стандартный механизм value => value
  .then((value) => console.log(value))

Полагаю, подобное чаще происходит случайно, чем намеренно.

Промисы можно связывать, используя один промис для разрешения другого промиса:

const p0 = Promise.resolve(17) // Немедленно разрешается
const p1 = Promise.reject("foo") // Немедленно отклоняется
p0.then(function (v) {
  return p1
})

Здесь состояние промиса p0 связано с p1. То есть — неименованный промис, созданный в строке 3, отклоняется со значением foo.

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

▍Паттерн №1: необработанное отклонение промиса

Обычным источником ошибок при работе с промисами являются необработанные отклонения промисов.

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

promise.then(function (val) {
  if (val > 5) {
    console.log(val)
  } else {
    throw new Error("Small val")
  }
})

Так как код, реагирующий на успешное завершение промиса, выполняется в отдельном асинхронном контексте, JavaScript не передаёт эту ошибку в главный поток. Ошибка «проглатывается» и разработчик никогда не узнает о том, что она произошла.

Исправить это можно, использовав метод .catch():

promise
  .then(function (val) {
    if (val > 5) {
      console.log(val)
    } else {
      throw new Error("Small val")
    }
  })
  .catch((err) => console.log(err))

Теперь у нас появляется возможность обработать ошибку.

Но мы не перевыбросили эту ошибку! Если другой промис, связанный с этим, или объединённый с ним в цепочку, полагается на этот код, ошибка будет оставаться «проглоченной». Код продолжит выполняться.

Попробуйте следующее в консоли браузера:

const p = Promise.resolve(17)
p.then(function (val) {
  throw new Error("Oops")
  return val + 1
})
  .catch(function (err) {
    console.log(err)
  })
  .then(function (val) {
    console.log(val + 1) // prints NaN
  })

Можно ожидать, что в этом коде выполняются вычисления 17 + 1 = 18, но, из-за неожиданной ошибки, мы получаем NaN. Промис, неявно созданный .catch(), неявно разрешается (а не отклоняется) со значением undefined.

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

▍Паттерн №2: незавершённые промисы

Новые промисы пребывают в состоянии pending до тех пор, пока не будут успешно разрешены или отклонены (то есть — завершены). Но если промис не завершается, его можно назвать остановившимся промисом. Он навсегда останется в состоянии pending, не давая выполняться коду, полагающемуся на его завершение.

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

Авторы вышеупомянутой публикации показывают пример проблемы из node-promise-mysql, где connection.release() возвращает промис, который никогда не разрешается.

Этот пример сложно свести к нескольким строкам кода, поэтому вот — кое-что попроще:

const p0 = new Promise((resolve, reject) => null)
const p1 = Promise.resolve(17)
p0.then((result) => p1)
  .then((value) => value + 1)
  .then((value) => console.log(value)) // ожидается 18

Последний промис соединён цепочкой из .then() с промисом p0, который никогда не разрешается и не отклоняется. Этот код может выполняться вечно, но он никогда не выведет никакого значения.

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

▍Паттерн №3: неявные возвраты и код, реагирующий на результаты работы промиса

Цепочка из промисов прерывается без выдачи каких-либо ошибок в том случае, если разработчик забывает о включении в код выражения return.

Эта проблема похожа на ту, связанную с «проглатыванием» ошибок, о которой я уже рассказывал. Вот фрагмент кода из Google Assistant, который приводят Алимадади с соавторами:

handleRequest (handler) {
    if (typeof handler === 'function') {
        const promise = handler(this)
        if (promise instanceof Promise) {
            promise.then(result => {
                debug(result)
                return result
            }).catch(reason => {
                this.handleError('function failed')
                this.tell(!reason.message ? ERROR_MESSAGE : reason.message)
                return reason
            })
        }
    }
}

Метод handleRequest() использует объект Map с обработчиками, предоставленными разработчиком, для организации асинхронной работы с запросами Assistant. Объект handler (обработчик) может быть либо коллбэком, либо промисом.

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

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

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

Поиск антипаттернов с помощью графа промисов

Алимадади с соавторами создали программу PromiseKeeper, которая динамически анализирует кодовую базу на JavaScript и рисует графы промисов.

Граф промисов

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

▍Графы промисов

Асинхронный код можно представить в виде графа, вершины которого (промисы, функции, значения, механизмы синхронизации) соединены рёбрами (разрешение промиса, регистрация обработчиков, связь, return или throw).

  • Вершины-промисы (p) представляют собой случаи запуска промисов.
  • Вершины-значения (v) представляют значения, с которыми разрешаются или отклоняются промисы. Это могут быть функции.
  • Вершины-функции (f) — это функции, зарегистрированные для обработки разрешения или отклонения промиса.
  • Вершины-механизмы синхронизации (s) представляют собой все использованные в коде вызовы Promise.all() или Promise.race().
  • Рёбра разрешения или отклонения промиса (v)->(p) указывают на связи вершин-значений с вершинами-промисами. Они помечены как resolve или reject.
  • Рёбра регистрации обработчиков (p)->(f) указывают на связи между промисом и функцией. Они помечены как onResolve или onReject.
  • Рёбра связей (p1)->(p2) показывают взаимоотношения между связанными промисами.
  • Рёбра return или throw (f)->(v) показывают связи функций и значений. Они помечены как return или throw.
  • Рёбра механизмов синхронизации указывают на связи, идущие от множества промисов к одному механизму синхронизации промисов. Они помечаются как resolved, rejected или pending на основании того, как ведёт себя новый промис.

Вот аннотированная версия вышеприведённого графа.

beo3RPTAZulNEa80tRBZ7Z 3RyDdXs44oIJ6plwoJZlZEMxdgKRG3mJ s9lzrEtaZQ4bt92m3N6PdEHdQrEwYKJJ1EjWOR8PM33KAYySMFIN5lOQ ypmYbFsvUXF7YRFJBegvGky

Аннотированный граф промисов

▍Использование PromiseKeeper для поиска анти-паттернов

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

Вот на какие анти-паттерны обращает внимание программа:

  • Пропущенные обработчики отклонения промисов — это ведёт к «проглатыванию» ошибок.
  • Попытки многократного завершения работы промисов — это происходит, когда пытаются разрешить или отклонить промис, работа которого уже была завершена.
  • Незавершённые промисы, то есть такие, которые не разрешены, но и не отклонены в то время, когда PromiseKeeper строит граф.
  • Недостижимые обработчики — то есть код, зарегистрированный для обработки разрешения или отклонения промисов, который не выполняется во время динамического анализа кода, выполняемого PromiseKeeper.
  • Неявные возвраты и стандартные обработчики — это может привести к неожиданному поведению промисов, расположенных ниже в цепочке промисов.
  • Ненужные промисы — когда намеренно создают новый промис в функции, которая уже обёрнута в промис.

Так как PromiseKeeper полагается на динамическое выполнение кода — качество анализа напрямую зависит от того, насколько хорошо код покрыт тестами. В ходе этого анализа нельзя исследовать невыполненный код, что может вести к ложноположительным результатам.

Реализация PromiseKeeper основана на фреймворке для динамического анализа JavaScript-кода Jalangi. В нём имеются коллбэки, которые реагируют на события жизненного цикла промисов.

Мне не удалось заставить работать PromiseKeeper на моём компьютере, но Алимадади с соавторами сообщают о том, что не вполне благополучные промисы встречаются почти во всех кодовых базах, в которых используется JavaScript.

77c7fb53726b48d333344bdd386b9fcb

Отчёт по выявленным анти-паттернам

Интересно то, что 1012 экземпляров незавершённых промисов встречаются всего в 17 местах кода Node Fetch.

Авторы сообщили, что в ходе их эксперимента 43% промисов оказались неразрешёнными. Это, вероятнее всего, указывает на неполноту тестов, а не на то, что популярные программные продукты, которые они исследовали, безнадёжно «поломаны».

Что делать?

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

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

// Выводит полезное сообщение об ошибке когда
// отклонение промиса оказывается необработанным
process.on("unhandledRejection", (err, promise) => {
  const stack = err instanceof Error ? err.stack : ""
  const message = err instanceof Error ? err.message : err

  Logger.error("Unhandled promise rejection", {
    message,
    stack,
    promise,
  })
})

Ещё можно попробовать Node.js-модуль async_hooks, который позволяет наблюдать за жизненным циклом промисов, и попытаться выявлять промисы, которые выполняются слишком долго. Можно, например, сравнивать время работы промиса с заданным тайм-аутом и выводить в консоль предупреждение.

У меня была интересная попытка использования async_hooks для выявления промисов, выполняющихся слишком долго, но особого толку из этого не вышло. Нельзя получить ссылку на контекст выполнения (только — C-указатель). То есть — можно увидеть, что что-то работает медленно, но о том, что это такое, узнать нельзя.

Меня привлекает идея превращения PromiseKeeper в нечто вроде плагина для Jest. Представьте себе, что после каждого запуска тестов формируется граф промисов, вроде того, который вы здесь видели.

Сталкивались ли вы с проблемами, вызванными неправильной работой промисов?

oug5kh6sjydt9llengsiebnp40w

Найти работу и грамотно выстроить личное общение может помочь правильная самопрезентация. Специалисты рассказали РБК Трендам, как создать о себе лучшее впечатление

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

Самопрезентация на собеседовании

Грамотно представлять себя при поиске новой работы — целое искусство. Красивая самопрезентация открывает многие двери. Чтобы выгодно себя подать, нужно продемонстрировать сильные стороны и нивелировать слабые. Тогда человек получит желаемую должность.

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

После приветствия обычно начинается рассказ о себе. Здесь Людмила Полянова рекомендует придерживаться правила «краткость — сестра таланта». Идеальная самопрезентация занимает не больше одной-полутора минут. Если человек говорит дольше, это вызывает отторжение. Эксперт напоминает о правиле Elevator pitch: пока лифт поднимается до этажа (это обычно не более 30-40 секунд) надо настолько заинтересовать собеседника, чтобы он захотел продолжить общение. На собеседовании эффективен этот же принцип.

Фото:Shutterstock

Важно также очень качественно себя оценить, уверен коуч и бизнес-тренер Николай Григорьев. Не лишним будет спросить у друзей, родственников, коллег о своих сильных и слабых сторонах. После этого коуч рекомендует заранее написать текст самопрезентации. На плюсах сделать акцент, а минусы — компенсировать. Например, не «ленивый», а «умеющий соблюдать баланс между трудом и отдыхом».

В начале послание может получиться слишком длинным и нескладным. Это нормально. После первых набросков текст нужно сокращать: Николай Григорьев рекомендует добиться того, чтобы в нем было не более 120-150 слов. Тогда его можно озвучивать на собеседовании.

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

Фото:РБК Тренды

Главное в разговоре — объяснить, какую пользу вы можете принести компании. Например, увеличить продажи или поток клиентов. Желательно привести пример успешного решения похожих задач на предыдущем месте работы. Важно не «перегнуть палку»: слишком расхваливать себя точно не стоит.

«Вести себя достойно и в меру скромно, не «бомбардировать» своими знаниями и качествами. Избегать фраз: «вы должны мне платить столько-то», «вы обязаны мне предоставить ДМС». Если специалист хороший и умеет себя подать, то и так очевидно, что за три копейки он себя не продаст», — отмечает Полянова.

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

  1. Проведите анализ своего опыта, профессиональных навыков и качеств.
  2. Подумайте о глобальных трендах и актуальных событиях в стране и мире, которые так или иначе повлияли на вашу сферу в последние годы. Интегрируйте их в будущий рассказ о себе или о своем проекте.
  3. Перед тем как презентовать себя, стоит изучить аудиторию, которой будет адресован ваш рассказ.
  4. По возможности уточните, кто именно будет проводить собеседование.
  5. Подготовьте общий план презентации.
  6. Продумайте свой внешний вид.
  7. Распланируйте свое время, не опаздывайте.

Но презентовать себя специалисту нужно не только на собеседовании, но и в Сети. Даже если человек — отличный профессионал, если он никак не проявляет себя в коммуникативных пространствах, никто об этом никогда не узнает. Николай Григорьев рекомендует работать над «личным брендом». Для этого подойдут социальные сети, профессиональные сообщества.

Фото:Из личного архива

«Интересный пост на форуме маркетологов может прочитать директор крупной компании и даже вступить в дискуссию. Его имя будет «на слуху», при поиске работы это пригодится», — отметил Николай Григорьев.

Любая карьера не «усыпана розами», продолжает специалист. В биографии любого человека есть спорные моменты — увольнения не по собственному желанию, частая смена работы, крупные штрафы. Скрывать и замалчивать это смысла нет. Григорьев советует идти по другому пути — признать свою ошибку и рассказать, какой вывод вы сделали из ситуации.

«Адекватный работодатель сумеет понять сотрудника и даст ему шанс проявить себя в компании», — резюмирует специалист.

Основные ошибки на собеседовании

  1. Надеть новый костюм или платье. Непривычная одежда может оказаться некомфортной — вызывать зуд, мяться, излишне обтягивать. Это отразится на поведении и самоощущении. На собеседование лучше надевать привычные, комфортные вещи.
  2. Рассказывать об увлечениях, которые не связаны с родом деятельности. «Заядлый охотник и рыболов» будет постоянно отпрашиваться с работы и выкраивать свободные часы для своего хобби — так думает большинство работодателей.
  3. Другая крайность — заявлять, что вы «живете работой», и самое главное для вас — сделать ее хорошо. Перфекционистов работодатели любят, но, как правило, повышают им зарплату в последнюю очередь. Зачем, ведь работа будет выполнена качественно в любом случае. Соискателю важно донести до будущего начальника, что он готов показывать результат при наличии перспектив карьерного роста.

Самопрезентация в личном общении

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

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

Юмор, искренность и адекватность — три кита, на которых держится личная самопрезентация, уверен клинический психолог и сексолог Валентин Денисов-Мельников.

Всех привлекают легкие в общении собеседники, с которыми не надо подбирать слова. В самом начале важно расположить к себе собеседника. Зачастую некоторые уже при первой первой встрече начинают хвастаться — высокими доходами, недвижимостью, положением в обществе, «набивают себе цену». Такая «самопрезентация» скорее отпугнет. По мнению психолога, лучше говорить о себе меньше и больше задавать вопросов собеседнику. Людям нравятся люди, которые интересуются их жизнью. В отличие от профессиональной самопрезентации, в личной скромность будет более уместной.

Фото:You X Ventures / Unsplash

Хвастовство и излишняя самоуверенность не красят ни мужчину, ни женщину. Когда в каждом слове чувствуется вызов и конкуренция, вряд ли с вами захотят продолжить диалог, уверен эксперт. Не стоит говорить фразы: «я столько в жизни прошел, вам и не снилось», «я всегда оказываюсь прав».

«Дружеские или любовные отношения с конкуренцией не могут быть эффективными. В близких люди ищут поддержку и опору, но никак не конфронтацию», — сообщает Денисов-Мельников.

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

Основные ошибки при знакомстве и общении

  1. Шаблонные, банальные фразы. Они вызывают лишь отторжение. Разговор можно начать нестандартно, чтобы сразу заинтересовать собеседника.
  2. Подходить к человеку сзади, прикасаться к нему, приближаться слишком близко. Психологи советуют держаться от незнакомого человека не ближе, чем на полметра.
  3. Знакомиться, когда рядом с объектом внимания присутствуют другие люди. В компании человек может себя проявить не так, как покажет в личном общении. К тому же у группы людей может идти разговор на определенную тему или иметься определенные планы на вечер. Прервав их, вы покажете свою нетактичность.

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

Тренер, автор курса в МИТРО, международный эксперт Ольга Мерц предлагает следовать пяти главным советам для развития самопрезентации:

  1. Научитесь слушать и видеть себя со стороны.
  2. Работайте со своим телом (осанка, жесты, осмысление своих действий).
  3. Следите за ходом беседы и отвечайте на реакцию слушателя.
  4. Во время разговора или другого взаимодействия в группе никого не оставляйте без зрительного внимания.
  5. Четко осознавайте место, ситуацию, аудиторию. Если утрировать, на встрече вегетарианцев лучше не рассказывать историю о том, как вы сходили на охоту.

https://ria.ru/20211222/soldat-1764961626.html

Лукашенко оценил рассказ сбежавшего в Белоруссию польского солдата

Лукашенко оценил рассказ сбежавшего в Белоруссию польского солдата — РИА Новости, 22.12.2021

Лукашенко оценил рассказ сбежавшего в Белоруссию польского солдата

Президент Белоруссии Александр Лукашенко, комментируя рассказ сбежавшего в республику польского солдата Эмиля Чечко об убийстве польскими силовиками беженцев… РИА Новости, 22.12.2021

2021-12-22T17:54

2021-12-22T17:54

2021-12-22T21:05

в мире

белоруссия

польша

красный крест

александр лукашенко

мвд белоруссии

госпогранкомитет белоруссии

/html/head/meta[@name=’og:title’]/@content

/html/head/meta[@name=’og:description’]/@content

https://cdnn21.img.ria.ru/images/07e5/0c/11/1764229034_0:76:1280:796_1920x0_80_0_0_084da343febc44caf5280fa0a54b431a.jpg

МИНСК, 22 дек – РИА Новости. Президент Белоруссии Александр Лукашенко, комментируя рассказ сбежавшего в республику польского солдата Эмиля Чечко об убийстве польскими силовиками беженцев заявил, что рассказанное говорит об опасной тенденции.Госпогранкомитет Белоруссии ранее сообщил, что Чечко, военнослужащий вооруженных сил Польши 1996 года рождения, был задержан 16 декабря в пограничной полосе. Пограничники указывали, что задержанный попросил политического убежища в Белоруссии «в связи с несогласием с проводимой политикой Польши относительно миграционного кризиса и практикой негуманного обращения с беженцами». Чечко в интервью белорусскому телевидению обвинил польских силовиков в систематических убийствах мигрантов, а также двух волонтеров, сообщил, что ему также приходилось стрелять в мигрантов. Он считает, что ситуацию на приграничной с Белоруссией территории Польши должен расследовать Красный Крест. МВД Белоруссии сообщило, что приняло к рассмотрению ходатайство Чечко о предоставлении ему статуса беженца. В Польше Чечко обвинили по статье о дезертирстве, по которой ему может грозить наказание до 10 лет заключения.»Очень опасная тенденция. Людей готовят специально убивать. Убить человека, слушайте, это… Не знаю, из этого зала даже военный не каждый бы смог это сделать в такой обстановке», — приводит в среду слова Лукашенко Sputnik Беларусь в своем Telegram-канале.Он отметил, что «для того, чтобы уничтожить человека, который бежит от войны, не надо было демонстраций устраивать — стрелять в лоб, голову и так далее».»Согласитесь, что можно было это все сделать тихо, шито-крыто, никто бы не узнал. Нет, напоили — стреляй в лоб, стреляй в голову», — подчеркнул президент.»Вы заметили, он (Чечко — ред.) рассказывал о том, что они по пьяни убивали не только беглых этих бедолаг — мигрантов, но и своих поляков, которые помогали этим беженцам, — волонтеров? Они их (по словам Чечко, пограничники — солдат — ред.) спаивали. Потом заставляли специальные люди. Никакие это не пограничники, как он говорит», — заявил Лукашенко.Он считает, что к принуждению польских солдат к убийствам мигрантов могут быть причастны спецслужбы.»Просто они были одеты и представлялись, как польские пограничники. Это специальные подготовленные люди в системе спецслужб», — сказал белорусский президент.

https://ria.ru/20211219/soldat-1764477274.html

https://ria.ru/20211218/soldat-1764372185.html

белоруссия

польша

РИА Новости

internet-group@rian.ru

7 495 645-6601

ФГУП МИА «Россия сегодня»

https://xn--c1acbl2abdlkab1og.xn--p1ai/awards/

2021

РИА Новости

internet-group@rian.ru

7 495 645-6601

ФГУП МИА «Россия сегодня»

https://xn--c1acbl2abdlkab1og.xn--p1ai/awards/

Новости

ru-RU

https://ria.ru/docs/about/copyright.html

https://xn--c1acbl2abdlkab1og.xn--p1ai/

РИА Новости

internet-group@rian.ru

7 495 645-6601

ФГУП МИА «Россия сегодня»

https://xn--c1acbl2abdlkab1og.xn--p1ai/awards/

Лукашенко прокомментировал заявление сбежавшего в Белоруссию польского солдата

«Напоили — стреляй в лоб, стреляй в голову. Очень опасная тенденция! Людей готовят специально убивать. Вы думаете, для того чтобы только в Польше убивать? Нет». Лукашенко — о заявлениях сбежавшего из Польши солдата о том, что польские пограничники убивали волонтёров

2021-12-22T17:54

true

PT1M50S

https://cdnn21.img.ria.ru/images/07e5/0c/11/1764229034_0:0:1280:960_1920x0_80_0_0_54c61bb9f21101f0eebd0323fcb972d7.jpg

РИА Новости

internet-group@rian.ru

7 495 645-6601

ФГУП МИА «Россия сегодня»

https://xn--c1acbl2abdlkab1og.xn--p1ai/awards/

в мире, белоруссия, польша, красный крест, александр лукашенко, мвд белоруссии, госпогранкомитет белоруссии

17:54 22.12.2021 (обновлено: 21:05 22.12.2021)

Лукашенко оценил рассказ сбежавшего в Белоруссию польского солдата

МИНСК, 22 дек – РИА Новости. Президент Белоруссии Александр Лукашенко, комментируя рассказ сбежавшего в республику польского солдата Эмиля Чечко об убийстве польскими силовиками беженцев заявил, что рассказанное говорит об опасной тенденции.

Госпогранкомитет Белоруссии ранее сообщил, что Чечко, военнослужащий вооруженных сил Польши 1996 года рождения, был задержан 16 декабря в пограничной полосе. Пограничники указывали, что задержанный попросил политического убежища в Белоруссии «в связи с несогласием с проводимой политикой Польши относительно миграционного кризиса и практикой негуманного обращения с беженцами». Чечко в интервью белорусскому телевидению обвинил польских силовиков в систематических убийствах мигрантов, а также двух волонтеров, сообщил, что ему также приходилось стрелять в мигрантов. Он считает, что ситуацию на приграничной с Белоруссией территории Польши должен расследовать Красный Крест. МВД Белоруссии сообщило, что приняло к рассмотрению ходатайство Чечко о предоставлении ему статуса беженца. В Польше Чечко обвинили по статье о дезертирстве, по которой ему может грозить наказание до 10 лет заключения.

«Очень опасная тенденция. Людей готовят специально убивать. Убить человека, слушайте, это… Не знаю, из этого зала даже военный не каждый бы смог это сделать в такой обстановке», — приводит в среду слова Лукашенко Sputnik Беларусь в своем Telegram-канале.

Он отметил, что «для того, чтобы уничтожить человека, который бежит от войны, не надо было демонстраций устраивать — стрелять в лоб, голову и так далее».

«Согласитесь, что можно было это все сделать тихо, шито-крыто, никто бы не узнал. Нет, напоили — стреляй в лоб, стреляй в голову», — подчеркнул президент.

«Вы заметили, он (Чечко — ред.) рассказывал о том, что они по пьяни убивали не только беглых этих бедолаг — мигрантов, но и своих поляков, которые помогали этим беженцам, — волонтеров? Они их (по словам Чечко, пограничники — солдат — ред.) спаивали. Потом заставляли специальные люди. Никакие это не пограничники, как он говорит», — заявил Лукашенко.

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

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

Все новости Белоруссии читайте на сайте Sputnik Беларусь >>

  • Рассказ про павлика морозова читать
  • Рассказ про осень на крымскотатарском языке
  • Рассказ про озеро тургояк
  • Рассказ про одногруппника на английском
  • Рассказ про обезьяну на корабле