Яндекс выложил в открытый доступ нейросеть YaLM 100B, которая может псевдоразумно отвечать на вопросы и вести беседу. К сожалению, попробовать её лично я не могу, потому что для запуска нужно около 200+ гигабайт видеопамяти, это приличная такая майнинг-ферма. Но по скриншотам она действительно хорошо работает. Хотя про GPT-3 тоже так говорили, а на деле очень так себе.
А ещё неделю назад по сети ходила новость о том, что один из разработчиков в Google пообщался с их нейросетью и увидел в ней признаки разума. Вплоть до того, что нанял юриста защищать интересы нейросети! Его в итоге отправили в оплачиваемый принудительный отпуск, подлечиться, наверное.
Разработчики знают о мысленном эксперименте "Китайская комната", но обывателю он, на мой взгляд, сложен для понимания, поэтому я попробую привести другой пример. Представьте, что у вас есть кубики с буквами, и там набор граней, которые составляют фразу "Привет, человек". Вы эти грани намазали чем-то вкусным и научили вашу собаку переворачивать кубики вкусными гранями вверх в ответ на команду "Привет, собака". В итоге, если вы говорите "Привет, собака", она переворачивает кубики так, чтобы из них сложилось "Привет, человек".
Научилась ли собака при этом говорить на человеческом языке и осознанно отвечать на приветствие? Нет. Нейросеть гораздо глупее собаки (та хотя бы способна именно сознанием различать разные человеческие фразы). Это просто набор алгоритмов, которые складывают кубики, а мы уже на этих кубиках что-то читаем. Чтобы кубики складывались правильно, этих алгоритмов много, и параметров, которыми такая нейросеть оперирует, 100 миллиардов.
Даже очень хороший алгоритм по подбору кубиков не является разумным фактически ни в каком смысле этого слова. Впрочем, это не значит, что он не может решать нужные нам задачи. Такую сетку вполне нормально поставить в условной службе поддержки отбиваться от дурачков, задающих банальные или глупые вопросы.
Что еще посмотреть по теме:
«Теорема о бесконечном количестве обезъян»;
И очень крутой фантастический рассказ Хорхе Луиса Борхеса «Вавилонская библиотека». В Библиотеке точно будет книга, которая станет буквально с вами разговаривать: вы задаёте вопрос (любой), переворачиваете страницу и видите там ответ на него, будто бы от разумного существа.
#dev#fiction
Обновил ноут, так что для истории выложу крышку старого. По наклейке на каждый конкурс, хакатон и айти-конференцию, где я принял участие, выиграл, был жюри и так далее. Целые слои истории. Смотришь и вспоминаешь то бессонную ночь в Салехарде на хакатоне ЯНАО, то кофе с чак-чаком в Казани на финале Цифрового Прорыва, то огромный призовой фонд в SmartMarket и ещё бОльший в "Код Петербурга"...
Новый ноут побольше и на крышке у него места пока очень много, будем продолжать :)
Кто не знает, почти со всех интересных хакатонов и конкурсов я пишу рассказы, например:
• С первого раза взяли гран-при
• Cамый большой хакатон в мире
• Крупнейший европейский хак Junction
• Конкурс для разработчиков на 2.5 млн рублей
и другие
#dev
Два дня был экспертом на хакатоне по разработке для студентов. Участники, как правило, 4-5 курс, бакалавры и магистры. Многие ребята очень сильные, показали отличный результат, получше, чем у некоторых взрослых программистов с резюме и зарплатой.
Так вот, заметил интересный эффект. Студенты — даже очень компетентные — не могут побороть желание переусложнять систему и использовать чуть ли не все известные им фреймворки и технологии. Даже не знаю, какую аналогию привести — представьте что терапевт делает вам 20 различных видов осмотра на приёме и просит сдать 20 анализов на разные виды вирусов и других болезней, которые ему известны. Вроде и плохого ничего, но и не нужно. С архитектурой приложений аналогично: надо не только знать, что и когда применить, но и чувствовать, что и когда НЕ применять. Это, конечно, приходит с опытом.
Справедливости ради, многие энтерпрайз системы, которые делаются состоявшимися специалистами, тоже переусложнены: условному Твиттеру, конечно же, не нужна никакая тысяча микросервисов. Но там на разработку еще и бизнес влияет и избыток ресурсов, а здесь у студентов тяга к умножению сущностей проявилась особенно ярко и характерно. Например, команда крутых технарей из Бауманки сделала чат-бота на 40 контейнерах, девопс там конечно красавчик, но к дедлайну до конца соединить не успели (хотя всё равно заняли призовое место).
#dev
По теме мне особенно нравится вот эта картинка:
Меня иногда спрашивают, заменят ли нейросети программистов (или "когда заменят"). Мне на эту тему очень нравится картинка ниже.
Давайте подумаем, что делает ценным квалифицированного специалиста. Задача специалиста это принять на вход некоторые стартовые условия, а потом произвести над ними манипуляции, чтобы выдать требуемый результат. Хирург получает тело человека с каким-то заболеванием и должен в нужных местах совершить надрезы и наложить швы, чтобы в качестве результата человек остался живым и более здоровым, чем раньше. Адвокат получает материалы дела с каким-то конфликтом и должен произвести некоторую последовательность воздействий на суд так, чтобы именно его клиент вышел из конфликта победителем. Строитель-прораб получает чертежи здания, площадку и бюджет и должен сформировать цепочку управляющих команд для рабочих, чтобы в итоге получилось здание, которое не упадёт и пройдёт нужные проверки.
Если между набором стартовых условий и конечным результатом всегда одинаковая последовательность манипуляций, такой труд автоматизируется. Сложно как-то принципиально по-разному рассчитать клиента на кассе. Сложно выбрать несколько путей оформления одного и того же шаблонного документа. Нельзя десятью способами нарезать резьбу с заданным шагом на заданной заготовке. Так что для всего этого есть станки, аппараты, программы и роботы.
Квалификация подключается там, где путей много, и для выбора правильного недостаточно просто описать желаемый конечный результат. У специалиста есть знания, опыт и интуиция, которые позволяют ему именно в каждом конкретном случае принимать решения. Относится ли программирование к подобным областям? Безусловно. Одну и ту же программу можно написать сотней способов и между этими способами будут серьёзные отличия, которые повлияют впоследствии на использование и развитие этой программы.
Ну хорошо, но мы ведь загрузили в нейросеть весь опыт и знания программистов. Что мешает ей пройти тот же путь, что пройдёт программист, и точно так же принимать решения, исходя из ситуации? Два момента. Во-первых, у человека есть воля, а у нейросети нет. У человека есть способность как бы создавать новые решения внутри себя, а не в результате некоторой инструкции извне. И воля квалифицированного специалиста — важный аспект его работы. Грубо говоря, в части случаев мы хотим, чтобы специалист совершил творческий акт, принимая решения. Во-вторых, опыт практически в любой области, требующей квалификации, частично включает в себя понимание всего многообразия контекстов человечества в целом. То есть как бы знания того, что такое человек, в каких ситуациях он будет пользоваться результатом твоей работы и так далее.
Так что нет, нейросети не заменят программистов. Исключение, пожалуй, такое: программа, которая запускается один раз для выдачи конкретного результата, не требующего высокой надёжности. Если мне нужно один раз для личного удобства переименовать тысячу файлов, то в целом программа, которая это делает, может быть написана сколь угодно плохо, лишь бы работала. Но это совсем небольшой процент реальных сценариев.
#dev
В этом году я читаю небольшой курс лекций студентам Высшей Инжиниринговой Школы НИЯУ МИФИ, вот на прошлой неделе начал. Тема: архитектура приложений. Сначала SOLID, простые паттерны, а потом сложные паттерны и DDD.
Долго думал над тем, какие примеры приводить. Классические книжные не хотелось, типа вот у нас класс "Животное", у него наследник "Кошка". Это понятно для жизни, но далеко от реального программирования. И примеры со своей работы не хотелось, потому что без знания специфики не будет понятно, что такое "Цифровая ведомость объёмов работ", и почему в ней есть те или иные ограничения.
Так что придумал вот такой сценарий для студентов: примеры из видеоигр. Любая видеоигра это программа, написанная разработчиками на языке программирования. Это реальные люди, которые сталкивались с реальной необходимостью применить какие-либо паттерны и архитектурные подходы. Я, конечно, не знаю, как та или иная функция была реализована в игре на самом деле — вполне возможно, что из-за спешки, производственного ада, использования устаревших технологий или проблем планирования что-то написано очень плохо, коряво, без архитектуры и с огромным техническим долгом. Но я просто показывал ситуации, в которых какой-то конкретный структурный подход кажется уместным, и рассказывал, как можно такую ситуацию реализовать на практике.
Вроде получилось неплохо, студентам зашло. Обратная связь по лекции пришла положительная, так что будем продолжать :)
#dev
Офигенная история про бытовой кибертерроризм.
Я уже вам рассказывал пару раз о вредоносных закладках в OpenSource коде — описывал, например, борьбу одиночек с корпорациями таким способом, хотя последнее время больше внимания к антироссийским закладкам по политическим мотивам.
Обычно мы понимаем работу софта, как что-то в компьютере, а вот тут случай из мира Internet Of Things. Baza написала об этом без технических подробностей, поэтому мне пришлось порыться самому.
В интернете есть куча проектов "умной гирлянды" для украшения окон к новому году. Как правило, это прямоугольная матрица из адресных светодиодов: ей завешивается окно целиком, а микроконтроллер позволяет (путём изменения цвета каждого диода) выводить любой рисунок, надпись, анимацию. Как работает и выглядит можно посмотреть вот тут. В очередной такой версии один из участников форума AlexGyver'а (не сам Алекс) выложил форк прошивки для управления адресными диодами. Прошивка подключается по вайфай к роутеру, чтобы с телефона можно было через удобный UI настраивать эти самые тексты и анимации.
Так вот, оказалось, что автор изначальной версии — украинец. В свою версию кода три месяца назад он добавил закладку: устройство, пользуясь подключением к ВайФай, определяет по IP местоположение, откуда оно запущено. Если это Россия, то из постоянной памяти считывается последовательность кодов символов так, чтобы в полночь первого января устройство отключало все внешние кнопки и выводило на окно надпись, прославляющую Украину. Такая надпись в итоге появилась, по видимому, у нескольких людей, использовавших эту гирлянду. И как минимум одного из них заметили соседи и настучали, вроде как дело завели даже.
Морали лично для меня две:
— Компьютерное уже давно не только в компьютере, а вполне влияет на физический мир. Это очевидно, но не во всех случаях эту мысль просто принять.
— IoT должен быть только из источников, которым вы полностью доверяете, либо написан самостоятельно.
P.S. Кстати, забавно видеть, что комментарии к коду у этого разработчика до определённого времени все по-русски, а в новых правках исключительно по-украински. То есть вроде как от вражеского языка отказался, но отредактировать всё предыдущее лень.
#dev
В этом году не успел поучаствовать в VK Fresh Code, зато меня позвали оценить конкурсные проекты и посодействовать в награждении.
Кажется, из всех постоянных конкурсов, в которых я участвовал, Fresh Code это единственный, который не скатился в тупые метрики (привет, Яндекс Диалоги), а его до сих пор судит команда жюри, что приводит к появлению большого количества действительно разнообразных проектов.
В 17:00 будет стрим, можете посмотреть, и я там буду :) #dev
https://vk.com/video-166562603_456239155
На выходных посетил HolyJS — это такая конференция для Frontend-разработчиков. Обратил внимание на то, что уровень технической погруженности докладов был ниже, чем на Joker (конфа по Java), при этом дисперсия интересности более кучная — на HolyJS было существенно больше докладов, которые мне понравились на уровне "хорошо", а на Joker некоторые доклады прям совсем не зашли, и я оценил их на "так себе".
Кстати да, у JUG (организатора этих всех IT конференций) такая шкала оценки доклада: Ужасно, Плохо, Так себе, Нормально, Хорошо, Отлично, Супер. Я поставил одну "Так себе", одну "Нормально", одну "Супер" и кучу "Хорошо".
Считаю, что оценку "ужасно" можно ставить, если докладчик пришёл бухой и вместо рассказа кидался в зал огрызками яблок. Потому что все доклады проходят отбор, и там не бывает именно критически низкого качества. Бывает, что вам не зашла тема, либо докладчик рассказал не то, что вы ожидали — но это, как мне кажется, не заслуживает оценки "ужасно". Думаю, в большинстве случаев такая оценка это просто эмоции: личная неприязнь к докладчику, либо несогласие с какой-то его идеологической позицией. Я сам "ужасно" никогда не ставлю.
При этом на HolyJS было очень много разнообразных по темам и направлениям докладов, и это следствие того, что фронтенд можно исследовать в ширину сильнее, чем какую-нибудь Джаву, которую скорее копают в глубину (и поэтому на Joker доклады технически более сложные). Джава, хоть и запускается на миллионах устройств, делает это примерно одинаково везде. Во фронтенде же куча фреймворков и множество совершенно различных путей приложения: тут тебе и 3D, и процедурка, и сайты, и мобильные приложения, и какие-нибудь киоски, и геймдев, и умные телевизоры.
Так что, резюмируя, я бы посоветовал HolyJS как точку входа в конференции для разработчика, если он не строго прилип к какому-то одному стеку. Тем более, честно говоря, для современных программистов знать хотя бы по верхам фронтенд это полезно независимо от основного направления, в котором они работают.
#dev
Компания Volvo отключила россиянам свои онлайн-сервисы, в том числе мобильное приложение для взаимодействия с автомобилями, ПО для сервисных центров итд. Причём, ограничение работает даже в том случае, если вы смогли перевезти свой автомобиль в другую страну: достаточно того факта, что он изначально был поставлен в Россию.
Пару лет назад мы с командой выиграли IT-хакатон от компании Volvo. По окончании нас попросили подписать документы о полной передаче нашего кода в собственность компании и отказе от любых прав на него. Не исключено, что этот код был в итоге как-то использован, и крутится где-нибудь на серверах Volvo. Если не код, то хотя бы концепция наша им тогда очень понравилась.
Как говорится, можно вывезти Volvo из России, но...
#dev
Сходил для интереса на конфу для Java-разработчиков, хотя не пишу на Java уже давно (а на хорошем уровне не писал никогда).
Было много всего интересного, но особенно меня впечатлила лекция об истории развития этого языка. Java, на секундочку, вероятно самый распространённый язык программирования в мире с точки зрения количества разных устройств, на которых он присутствует. То есть буквально один из столпов современной цифровизации всего человечества.
Так вот, когда он только зарождался, компания Sun Microsystems наняла себе в помощь несколько сотен разработчиков из России, бОльшая часть которых сидела у нас в Питере — это были выходцы из матмеха СПбГУ. Более того — в какой-то момент именно питерская ячейка стала крупнейшей по числу инженеров, превзойдя даже ту, которая располагалась в Калифорнии. И люди периодически ездили в США, чтобы синхронизировать свою работу с тамошним офисом (пересылали diff репозитория архивами по почте!).
Потом Sun купила Oracle и постепенно ушла из России. Но вклад наши внесли, оказывается, очень существенный.
#dev
Перерисовал на эту тему картинку из XKCD
Роскосмос пару дней назад опубликовал отчёт о том, почему упала "Луна-25". Там конечно канцелярит, но можно примерно понять, что двигатель коррекции получил неверные данные от акселерометра:
из-за возможного попадания в один массив данных команд с различными приоритетами их исполнения прибором
Это очень похоже на программную ошибку, а это моя сфера, и я решил над ситуацией поразмыслить.
Хейтеры сразу стали строчить комментарии в стиле "Ололо, наняли каких-то идиотов, которые простейшие тесты не провели". Тут обычно справедливо вспоминают аварию с европейской ракетой Ариан-5 в 1996 году. Там буквально из-за пары строчек кода в результате неправильного приведения числовых типов ракета за 7 млрд баксов развалилась на куски в воздухе. Бывает.
Что касается Роскосмоса, при всей его сомнительной репутации, объяснение "Дураки не провели тесты" звучит лично для меня неправдоподобно. На мой личный взгляд возможны два варианта:
1. Если в описании ошибки слово "приоритет" обозначает какой-то признак внутри объекта команды, значит, на входе в приёмный модуль эти команды не были отфильтрованы. Выглядит как грубая ошибка, целый логический блок упущен. Вряд ли этот блок вообще не написан, скорее всего он не выполнился. Такое бывает, если в тестовой среде есть какое-то условие, которого нет в рабочей, и именно это условие отвечает за выполнение участка кода.
Сталкивался с таким миллион раз. Самое дикое из последнего: код парсит эксель-таблицу с числами. Разработчик написал, запустил проверил, прогнал тесты, всё ок. Отправляем в прод — все числа будто бы рандомно меняются на другие. Запускаем снова — у всех разработчиков функционирует нормально, а в проде на сервере нет. Таблица одна и та же. Можете подумать, почему так. Ответ: у разработчиков стоит русская локаль и десятичный разделитесь это запятая, а на проде в докере точка. При парсинге на проде запятая уже интерпретируется как разделитель тысячных разрядов.
2. Куда вероятнее, что слово "приоритет" в описании ошибки обозначает время, а, значит, список команд просто не был отсортирован, и в обработчик уже после актуальных значений попали какие-нибудь начальные нулевые данные, сбившие логику. По косвенному описанию проблемы очень похоже именно на это. Значит, на тестах всегда порядок возникновения команд соответствовал порядку их прихода, а в реальности перестал соответствовать. Вообще, работать с железом очень сложно. Какую-нибудь схемку заглючило от холода, она задержала ответ от датчика на миллисекунду, и всё. Никто не знал, что такая проблема возможна, пока она не возникла.
Мне рассказывали о таком случае: юзер логинится на сайт и иногда логин проходит, а иногда нет. Логин и пароль те же самые. Просто в случайные моменты времени ему возвращают токен авторизации, а в другие моменты времени ошибку 403. Никакой закономерности нет вообще. Нет зависимости от времени суток и даты. Сервер точно работает стабильно и не падает все 100% времени. Почему так может быть? Ответ: у сервиса авторизации два инстанса, перед которыми балансировщик нагрузки. В одном инстансе данные для авторизации есть, в другом нет. Балансировщик при примерно одинаковой нагрузке включает просто случайный выбор между ними.
В общем, программисты иногда допускают такие косяки, что какая-то мелочь может привести к серьёзной аварии. Это я вам говорю как программист, который пишет для атомных станций :)
#dev
Приехали фотки с DotNext. Как вы помните, неделю назад мы с коллегой выступили на этой конференции.
В прошлом году на мой личный взгляд DotNext выдался вялым (я был там как участник): мало людей, скучноватые доклады. Злые языки заявляли, что это, во-первых, из-за ухода западных компаний: дескать, Майкрософт может рассказать что-то интересное, а МТС или Тинькофф не может; во-вторых, из-за того, что все айтишники, разумеется, уехали из страны.
В этом году у конференции явно открылось второе дыхание (видимо, айтишники вернулись обратно, ага). Во-первых, людей было очень много. Так много, что организаторы, по-видимому, не рассчитывали на такой наплыв: площадка не справлялась. Это, пожалуй, единственное замечание — в залах то и дело не хватало мест, на обеде невозможно было найти себе стол, отстояв перед этим огромную очередь. С другой стороны, приятные впечатления от такой сильной востребованности конференции перевешивают любые проблемы.
Во-вторых, что тоже важно, доклады офигенные, один лучше другого. Было очень трудно выбрать, на какие идти (обычно параллельно шло по три доклада в трёх залах). Узнал несколько очень интересных для себя новых вещей, да и в целом всегда любопытно посмотреть на чужой опыт.
Наш доклад по DDD собрал полный зал — организаторы даже доносили стулья. Местами вышло хорошо, местами, конечно, есть куда развиваться. Получили в целом положительные отзывы. Среди критики есть обоснованная (например, мы не слишком внимательно проверяли код на слайдах), но есть и немного откровенного хейта. Его очень мало, буквально от пары человек (из нескольких сотен общей аудитории доклада), но, мне казалось, что в профессиональном сообществе народ старается вести себя, хм..., профессионально :) По слухам кое-кого не взяли выступать с примерно такой же темой, как у нас, так что источник хейта тоже понятен.
Ещё любопытный момент. У нас был доклад о практическом применении DDD: мы взяли настоящую архитектуру со своей работы, заменили там названия сущностей, упростили и рассказали в виде доклада. При этом получили несколько комментариев в духе: "Так не бывает, это всё теория, на практике не применимо". Вроде и критика, а вроде и гордость берёт за то, что мы сделали так, как другие считают невозможным.
В общем, очень круто. Спикерам дают проходку на все конференции сезона, так что я загляну как участник ещё на несколько. А в следующем году буду, наверное, снова подаваться докладчиком. Ещё есть, что рассказать.
#dev