...

суббота, 21 августа 2021 г.

Пара подводных камней при разработке на Kotlin

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

1. Переопределение Java-методов в Kotlin-коде


На тему взаимодействия Kotlin с Java-кодом сломано немало копий, выскажусь и я.
Одной из главных фич языка является то, что nullability объектов внутри Kotlin-кода проверяется уже на этапе компиляции. То есть, если попробовать обратиться к полю/методу объекта (через оператор .), объявленного как nullable (или передать его как аргумент в функцию, принимающую на вход notnull-переменную) — то такой код даже не скомпилируется. Чтобы компиляция прошла, Вам придётся воспользоваться оператором безопасного вызова ?. — или же добавить для такого объекта явную проверку на null.

Такой подход действительно хорошо защищает нас от NPE. Однако, если вы обращаетесь к объекту, «пришедшему» из Java-кода — то этот подход не применяется:

Any reference in Java may be null, which makes Kotlin's requirements of strict null-safety impractical for objects coming from Java. Types of Java declarations are treated in Kotlin in a specific manner and called platform types. Null-checks are relaxed for such types, so that safety guarantees for them are the same as in Java.
Таким образом, в Kotlin-коде необходимо обрабатывать все объекты из Java-кода как nullable. Всегда и везде, иначе есть риск получить NPE. Даже если от этого код будет выглядеть менее красивым, зато он будет более надёжным.

Наверное, об этом знают уже все, кто пишет на Kotlin. Но наиболее ярко проблема проявляется при переопределении методов Java-класса в Kotlin-классе. Дело в том, что IDE при вводе слова override заботливо предлагает авто-дополнение со списком доступных методов родительского класса. И nullability аргументов каждого метода (равно как и его возвращаемого значения) IDE проставляет, исходя из наличия аннотации @Nullable: если она указана для аргумента, то используется nullable-тип (т.е. с «вопросительным знаком») — иначе, используется «обычный» тип.

То есть, если для объекта в Java-коде не проставлена ни одна из аннотаций @Nullable/@NotNull — то в Kotlin-коде по умолчанию для этого объекта будет использован тип без «вопросительного знака», и при обращении к его полям/методам мы сможем получить NPE. Но на самом деле, даже если в Java-коде использовалось @NotNull — то всё равно лучше не полагаться на IDE и самим добавить «вопросительный знак» к Kotlin-типу, и обрабатывать его как nullable. Почему так? Потому что, если в дальнейшем кто-то захочет расширить функционал Java-метода, добавив обработку null-значения, и уберёт аннотацию @NotNull (не проставив @Nullable) — то это никак не отразится на компиляции Kotlin-кода, и в нём опять возникнет риск получить NPE в рантайме…
Данная проблема может возникнуть, к примеру, при обновлении какого-то утилитарного Java-пакета — и её сложно заметить. Поэтому лучше не доверять IDE в вопросе nullability типов, и явно обрабатывать в Kotlin-коде типы всех объектов, пришедших из Java, как nullable.

2. Использование delay() внутри synchronized-методов


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

В Kotlin по-прежнему можно использовать synchronized-блоки из Java («первый» подход), а вот для «второго» подхода вместо ключевого слова synchronized нужно использовать одноимённую аннотацию @Synchronized. Однако при использовании Kotlin-корутин, вызывающих delay(), можно столкнуться с неожиданной разницей для вышеуказанных подходов. Это иллюстрирует следующий код:

val lockObject = Object()

suspend fun methodUsingSynchronizedBlock()
{
    synchronized(lockObject)
    {
        println("before methodUsingSynchronizedBlock")
        Thread.sleep(5)
        println("after methodUsingSynchronizedBlock")
    }
}

@Synchronized
suspend fun fullySynchronizedMethod()
{
    println("before fullySynchronizedMethod")
    Thread.sleep(5)
    println("after fullySynchronizedMethod")
}

fun main()
{    
    repeat(2) {
        GlobalScope.launch { methodUsingSynchronizedBlock() }
    }
}

После запуска данного кода, в консоль выведется:
Результат

before methodUsingSynchronizedBlock
after methodUsingSynchronizedBlock
before methodUsingSynchronizedBlock
after methodUsingSynchronizedBlock

, что вполне соответствует ожидаемому.
Что же будет, если внутри main() заменить methodUsingSynchronizedBlock() на fullySynchronizedMethod()?
Результат

before fullySynchronizedMethod
after fullySynchronizedMethod
before fullySynchronizedMethod
after fullySynchronizedMethod

Это тоже соответствует ожидаемому и вполне логично. Потоки работают по очереди, как мы и хотели, т.е. подходы ведут себя одинаково.

Пока всё хорошо. Но что будет, если мы решим воспользоваться всей мощью Kotlin и приостановить каждую корутину, не блокируя весь поток? Т.е. заменим в обоих методах вызовы Thread.sleep(5) на delay(5) и посмотрим, что будет:

Результат

Ошибка компиляции: The 'delay' suspension point is inside a critical section

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

Но ошибка, как говорит нам компилятор, касается лишь метода methodUsingSynchronizedBlock! А что будет, если мы удалим этот метод (и оставим внутри main() вызов fullySynchronizedMethod вместо methodUsingSynchronizedBlock)?

Исходный код
@Synchronized
suspend fun fullySynchronizedMethod()
{
    println("before fullySynchronizedMethod")
    delay(5)
    println("after fullySynchronizedMethod")
}

fun main()
{    
    repeat(2) {
        GlobalScope.launch { fullySynchronizedMethod() }
    }
}

Результат

before fullySynchronizedMethod
before fullySynchronizedMethod
after fullySynchronizedMethod
after fullySynchronizedMethod

Получается, что если весь метод объявлен с аннотацией @Synchronized — то использование delay() для него разрешается! И оно приводит к тому, что оба потока заходят внутрь критической секции — т.е. второй заходит в неё тогда, когда первый выполнил delay(), но ещё не успел выполнить завершающий println(). И получается весьма неожиданный результат…

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

3. Вызовы getter'ов из Java-кода, выглядящих как поля класса


Одна из фич Kotlin (являющаяся, как и большинство других, синтаксическим сахаром) — это "synthetic properties", то есть возможность обращения к уже существующим геттерам/сеттерам Java-класса так, как будто вы обращаетесь к полям этого класса. Иначе говоря, Kotlin (неявно) автоматически генерирует эти properties для всех подходящих Java-классов.
Простой пример использования synthetic properties
Возьмём стандартный Android-класс android.view.View, в котором уже имеется поле mTag и соответствующие ему геттер/сеттер:
public class View implements Drawable.Callback, KeyEvent.Callback
{
    protected Object mTag = null;
    ...
    public Object getTag()  { return mTag; }
    public void setTag(final Object tag)  { mTag = tag; }
}

Теперь, если при разработке на Kotlin мы захотим узнать значение mTag для какого-то объекта этого класса, то это можно будет сделать двумя способами:
val myView: android.view.View = /* какой-то инициализатор */
...
val myTag1 = myView.getTag()  // старый способ с использованием геттера
val myTag2 = myView.tag  // новый способ с использованием synthetic properties 

Таким образом, Kotlin даёт нам удобную возможность обращаться к mTag так, как будто мы обращаемся к полю с именем tag (это имя берётся из имён геттера/сеттера). Оба этих способа совершенно эквивалентны — но «старый» способ не нравится Android Studio, и она выдаст предупреждение при его использовании.

Казалось бы, простая и удобная фича — что же в ней может быть опасного? А то, что геттер может быть не тривиальный (т.е. не вида «return value»), а довольно сложный — то есть, выполняться продолжительное время. Что может привести к проблемам при использовании подобного кода (пример для класса FirebaseDatabase, входящего состав Firebase):
val dbTableNames = arrayOf("first", "second", "third", "fourth")
...

fun clearAllDbTables(db: FirebaseDatabase)
{
    for (currentName in dbTableNames)
        db.reference.child(currentName).setValue(null)
}

С первого взгляда, в этом коде не видно каких-либо проблем. Но на самом деле, поле reference объекта db — это не поле, а вызов геттера getReference() класса FirebaseDatabase, который не просто возвращает нам уже существующий объект класса DatabaseReference, а каждый раз создаёт его заново.
То есть, в цикле for поочерёдно будут созданы 4 одинаковых объекта, что плохо — хотя мы могли бы избежать этого, если бы просто вынесли получение reference за пределы цикла:
fun clearAllDbTables(db: FirebaseDatabase)
{
    val rootReference = db.reference
    
    for (currentName in dbTableNames)
        rootReference.child(currentName).setValue(null)
}

В общем, в первом варианте кода налицо проблема с производительностью из-за того, что геттер getReference() не тривиальный. Способ избежать проблемы очевиден — нужно проверять, является ли геттер тривиальным, и избегать его множественного вызова в противном случае.

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

Да, это так, но в случае с Java и Kotlin есть пара нюансов

4. Различные способы объявления функции


И сразу вопрос. Какой текст будет выведен при запуске данного кода?
fun example1() { System.out.println("example1") }
fun example2() = System.out.println("example2")
val example3   = { System.out.println("example3") }
fun example4() = { System.out.println("example4") }
val example5   = run{ System.out.println("example5") }

fun main()
{
    example1()
    example2()
    example3()
    example4()
    example5
}

Ответ

example5
example1
example2
example3


Как же так получилось?
Ну, в случае с example5 всё понятно — здесь используется так называемый non-extension run, который сразу же выполняет требуемый блок кода. Так что этот пункт — просто «ловушка» (строка с example5 внутри main() даже не обязательна, текст всё равно выведется при входе в main(), поскольку val example5 стоит на top level). И вообще, так писать не надо :)
example1 и example2 — это два эквивалентных способа объявления функции. Первый — классический Java-стиль, второй — это синтаксический сахар Kotlin. Результат для них, разумеется, тоже будет одинаков.

example3, в отличие двух предыдущих, является лямбдой. Её вызов также приводит к ожидаемому результату.
А вот почему вызов example4 ничего не вывел? Дело в том, что example4 — это функция, которая лишь возвращает лямбду, но не выполняет её. Чтобы было понятнее, её объявление эквивалентно следующей конструкции:

val lambdaForExample4 = { System.out.println("example4") }
fun example4(): () -> Unit
{
    return lambdaForExample4
}

Поэтому в main() строка example4() просто возвращает нам эту самую lambdaForExample4, т.е. до println исполнение не доходит.
Получается, что если мы действительно хотим увидеть строку «example4» в консоли, соответствующий вызов в main() нужно заменить на:
example4()()

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

Таким образом, опасность состоит в том, что при написании классов на Kotlin часто приходится смешивать классический «Java-стиль» объявления методов (если метод содержит несколько выражений) с новым «Kotlin-стилем» (для методов из одного выражения). И есть риск вместо правильного варианта «example2» поставить по-привычке фигурные скобки… и получить «example4» — вызов которого, фактически, ничего не сделает, но компилятор при этом ругаться не будет. Такую ошибку сложно заметить в рантайме. Особых рекомендаций по предотвращению этой ошибки нет — нужно просто быть внимательным при записи single-expression functions.

P.S. Данная статья не ставит цель создать негативное впечатление о Котлине. Наоборот, лично я считаю его весьма приятным языком — но, как и остальные языки, со своими особенностями.
А на какие «подводные камни» натыкались Вы в своей практике? Предлагаю поделиться примерами в комментариях.

Adblock test (Why?)

«Ростех» учредил «национального вендора» оборудования для сетей связи 4G, 5G и 6G

Базовая станция R45F от «ГлобалИнформСервис» (дочка госкорпорации «Ростех») поддерживает стандарт LTE и LTE-A и обеспечивает доступ абонентских терминалов к сети связи 4G.

По информации «Коммерсанта», «Ростех» учредил компанию «Спектр» в качестве «национального вендора» оборудования для мобильных сетей связи. Ее разработки и продукция должны обеспечить операторов связи российским оборудование для сотовых сетей четвертого поколения (LTE) и новых стандартов, включая 5G и следующих поколений.
Основной упор в новой компании будет сделан на разработку отечественных систем для мобильных сетей связи пятого поколения. В ближайших планах руководства «Спектра» находится создание вокруг компании технико-производственной кооперации российских производителей оборудования в соответствии с разрабатываемым системным проектом по производству решений для сетей связи LTE и 5G, чтобы создать более дешевые отечественные аналоги решений, представленных сейчас на рынке от ZTE, Nokia, Huawei и Ericsson.

В ноябре прошлого года «Ростех» разработал дорожную карту по развитию сетей 5G в России. Расходы на ее реализацию оцениваются в 208,15 млрд рублей, включая 28,8 млрд рублей из бюджета. Большая часть средств будет выделена «Ростехом» и «Ростелекомом» и их клиентами

Эксперты «Коммерсанта» считают, что создание «Спектра» приведет к монополизации рынка связи в РФ. Зарубежные решения, которые используют МТС, «Мегафон», «Билайн» и Tele2, пока что имеют свои преимущества, включая современную технологии и элементную базу. В настоящее время у российских предприятий нет достаточного опыта и технологий, а также своем элементной базы, чтобы полностью делать отечественные решения для мобильных сетей связи. Текущие отечественные разработки, например, компании «ТЕНЕТ», находятся или в тестовый версиях или еще только проектируются.

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

4 августа Госкомиссия по радиочастотам (ГКРЧ) продлила на 10 лет МТС, «МегаФону», «Билайну» и Tele2 разрешения на использование частот 700 МГц, 800 МГц и 2,5–2,7 ГГц для сотовых сетей четвертого поколения (LTE), но при условии, что операторы связи будут строить новые базовые станции только на базе оборудования, включенного в реестр российской электронной продукции, причем там должно быть установлено ПО из реестра российского программного обеспечения.

В конце прошлого года МТС запустила первую в России базовую станцию четвертого поколения RBS-100 со стандартом связи LTE 1800 под управлением российского софта. Станцию разработала казанская компания «Тенет». Для ее базы были использовали импортные комплектующие, такие как аналоговые части радиотракта, СВЧ-усилители, частотно-разделительные фильтры и плата приемопередатчика. В перспективе разработчики намерены внедрять в нее российские элементы.

Adblock test (Why?)

Пишущая машинка: вечное легаси

Пишущая машинка была у моего деда, он почти каждый день пользовался ей лет сорок, и только в конце жизни пересел на ноутбук, который я ему подарил. А для меня это был самый первый, и от того самый крутой гаджет: мне было лет пять, и я очень хотел печатать, а дед сомневался — вдруг испорчу вещь, а она единственная. Я же аргументировал тем, что в детском садике на машинке печатают все. Вообще все. Прошло много лет, деда не стало в прошлом году. Я совершенно этому не рад, но его пишущая машинка — теперь моя. Печатай сколько хочешь. В двадцать первом веке эти артефакты прошлого, придуманные вообще в веке девятнадцатом, вызывают у меня подлинное восхищение, и не только из-за детских воспоминаний. Это общий предок всех современных компьютеров. Это заточенная под единственную задачу вещь, которая позволяет набирать текст, создавать нетленку в любых условиях. Это неубиваемая техника, которая прослужит еще лет 150-200.

Это самое древнее ретро в моей коллекции. И самое непрактичное: первое, что компьютеры научились делать гораздо лучше, чем раньше — это набор букв. Сегодня я хочу рассказать об опыте механической машинописи. Оценить связь между современными устройствами и технологиями столетней (и более) давности. В общем, сделать то, что в англоязычном интернете описывают емкой фразой: press F to pay respects.
Дневник коллекционера старых железок я веду в Телеграмме.

Моя пишущая машинка — совсем не уникальная. Это UNIS tbm de luxe, выпускавшаяся с 1971 года до конца восьмидесятых в Югославии, заводом Udružena Metalna Industrija Sarajevo в общине Бугойно, на территории нынешней Боснии и Герцеговины. Завод металлоизделий до сих пор существует и выпускает довольно унылые скамейки для парков. Это точная, официально лицензированная копия машинки Olympia Traveler Deluxe, конструкция которой была запатентована в 1969 году компанией Olympia Werke в Западной Германии. Добыть такую не составляет труда, что оригинал, что копию, стоят они совсем недорого. Это в целом относится ко всем пишмашинкам: за примерно 150 лет промышленного производства их сделали огромное количество. Ломаются они редко, и чуть подороже могут обойтись какие-то модели в оригинальной расцветке (для интерьера), совсем уж древние артефакты девятнадцатого века или же экземпляры, принадлежавшие известным людям. Давайте попробуем что-нибудь напечатать, и делается это так.

Unis tbm — портативная пишмашинка, в смысле — ее можно взять с собой в дом отдыха и неспешно набирать мемуары на балконе с видом на природу. Она закрывается твердой крышкой (на фото слева) с ручкой для переноски, вместе с крышкой весит чуть больше пяти килограмм. Надо снять крышку, поднять держатель для бумаги, выдвинуть ручку для возврата каретки, и в целом все готово.

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

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

Отсутствует цифра 3, вместо нее предлагается использовать заглавную букву З.

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

Заодно стало понятно, что двухцветную ленту я вставил вверх ногами. В целом дальше можно печатать без проблем, как на обычной клавиатуре. За одним исключением — ближе к концу строки звенит звонок, после него можно набрать еще пять букв. Если плохо рассчитать, каретка просто останавливается и буквы начинают падать друг на друга (кнопкой, расположенной там, где на нормальных клавиатурах находится Tab, можно временно убрать механический огранчитель):

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

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

Лайфхаков машинопечати много. Чтобы расположить заголовок по центру листа, нужно заранее посчитать количество символов в нем, это число вычесть из 80 (примерно столько символов помещается в строке с полями), поделить на два. Затем от начала строки пробелом (тастером!) нащелкать нужный интервал. Обязательный аксессуар докомпьютерного производства — копирка, на ней дед печатал сразу три копии своих рукописей за один проход, для отправки нескольким адресатам. И вот с ней опечаток лучше вообще не допускать, даже лезвие не поможет. Еще одно открытие из инструкции — вот это отверстие в пластиковом прижиме для бумаги слева. В него предлагается вставить карандаш, и при помощи пробела рисовать горизонтальные линии, а вращением валика — вертикальные:

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

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

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

Caps Lock — это, соответственно, настоящий замок, фиксирующий механизм в положении верхнего регистра. Backspace — обратный пробел, тут и так все понятно. В некоторых машинках (не в этой) присутствовала кнопка табуляции, позволяющая быстро делать отступ нужного размера. Наконец клавиша Enter когда-то называлась Return, а в советских компьютерах — прямым текстом «ВК» или Возврат Каретки. В реалиях пишмашинки это именно что не ввод, а возврат всего механизма с валиком и закрепленной бумагой в начало строки.

Эта металлическая ручка за один проход выполняет два действия — перемещает каретку и подкручивает валик, перенося печать на следующую строку. Интервал регулируется рычажком, можно выставить одинарный, полуторный или двойной. Есть связи и посложнее. Раскладка QWERTY устоялась в семидесятых годах девятнадцатого века, а в девяностых была принята как стандарт рядом производителей. В современной Unix-консоли где-то в глубине спрятаны рудименты, оставшиеся от ранних компьютеров, выводивших данные на бумагу, и от пишмашинок отличавшихся не сильно. Форма и расположение клавиш — это такое суровое легаси, которое не получится упразднить, даже если очень захочется. Разве что повальный переход на голосовое управление и набор вынудит человечество разучиться печатать. И то не факт.

Еще одна очевидная вещь: в механической машинке нельзя сменить раскладку (и шрифт). Из-за этого в древних брошюрах по программированию мне попадались такие, где текст латиницей был написан от руки. Хочешь латинский шрифт? Купи еще одну машинку. Ну я и купил:

Это итальянская Olivetti Lettera 30, еще одна распространенная модель из семидесятых годов прошлого века, кажется локализованная для испанского языка. Тут тоже имеются свои особенности раскладки: отсутствует цифра 1 (вместо нее предлагается набирать букву I), зато знаки препинания расположены на привычном месте, в нижнем ряду справа. Чуть более широкие клавиши кажутся мягче, но в целом она мало чем отличается от UNIS. Разве что пластиковый корпус выглядит чуть менее элитно, чем полностью стальной у tbm. Хотя 50 лет назад возможно пластик воспринимался как более современный материал.

Эту машинку я приобрел несколько лет назад, чтобы прикрутить к нему подарок жены — набор для превращения пишмашинки в компьютерную клавиатуру USB Typewriter:

Работает это так: в недрах пишмашинки зачищаются до металла нижние части рычагов. Туда устанавливается панель с контактами, в удобное место механизма вешается заземление. Плата контроллера считывает замыкание контактов и передает сигнал нажатия определенной буквы. Отдельные магнитные датчики вешаются под клавишу сдвига регистра и пробел. Проект я довел до рабочего состояния, но не привел в финальный вид — нужно было где-то закрепить плату внутри машинки так, чтобы было удобно подключать кабель. Модификация никак не влияет на основную функциональность машинки, вы можете вставить бумагу и таким образом получить физическую копию вашей почтовой переписки или чатов (с опечатками). При всей теоретической привлекательности самой идеи, по факту получается не очень удобная и очень громоздкая клавиатура, на которой особенно смешно играть в какие-нибудь 3D-шутеры, и приходится отдельно реализовывать всякие Ctrl и Alt.

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

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

Adblock test (Why?)

Одна из клавиш MacBook может стать мышью

Компания Apple разрабатывает клавиатуру ноутбука MacBook со съёмной клавишей, которую можно будет использовать в качестве компьютерной мыши, сообщает Patently Apple. Соответствующая разработка была зарегистрирована в патентном ведомстве США (U.S. Patent and Trademark Office, USPTO).

В патентной заявке описывается стандартная ножничная клавиатура MacBook со скрытой съемной клавишей. Эта клавиша будет содержать датчик положения. Apple описывает разработку как «удобное, портативное и высокоточное устройство ввода для компьютерных систем».

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

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

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

Adblock test (Why?)

Учимся правильно спрашивать в опросах: советы и примеры

Опросы проводятся ежедневно по всему миру. Хорошо продуманные дают полезный фидбек от аудитории. Плохие — пустую трату времени как для клиентов, так и для менеджера.

Да, людям не нравится проходить скучные опросы. А кому это ок? И поэтому одинаково отвечают на каждый вопрос, чтобы поскорее закончить, а часто, и вовсе не доходят до конца.
Здесь я собрал 13 советов, которые помогут вам задавать правильные вопросы, улучшить вашу маркетинговую стратегию, бизнес-процессы и продукт. Итак, начнем!

1. Формулируйте вопросы простым языком



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

2. Оставляйте вариант “Не пробовал” или “Не интересуюсь”


Представьте, что один из вопросов звучит так: “Вам понравился продукт 3?”, но респондент никогда не использовал этот продукт. Допустим, этот вопрос с множественным выбором, и вы не дали возможность тем, кто никогда не пробовал продукт, ответить, что они его не использовали. Они будут искать вариант с надписью “Не пробовал” или “Никогда им не пользовался”. Но когда они тратят несколько секунд только для того, чтобы наконец понять, что ответить невозможно, как вы думаете, что они сделают дальше? Закроют опрос. Небольшого дискомфорта достаточно, чтобы респонденты отказались от опроса.

3. Задавайте нейтральные вопросы


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

Как именно компании влияют на своих клиентов, чтобы они отвечали так, как им нравится? Это зависит от того, как сформулированы вопросы. Вот два вопроса, которые требуют одного и того же ответа, но формулировка разная:

Мы предоставляем вам наилучшую из возможных услуг. Как бы вы оценили нас по шкале от 1 до 10?
Как вы оцениваете наш сервис по шкале от 1 до 10?

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

4. Предоставьте надежные варианты ответов


Только честные ответы. Если вы действительно хотите знать насколько клиенты удовлетворены вашими услугами или товаром, варианты ответов не должны быть похожи:
  1. Очень доволен
  2. Доволен
  3. Удовлетворен

Если клиент был недоволен вашими предложениями, нет никакого способа выразить это в приведенных выше вариантах ответов. Вот как вы могли бы решить эту головоломку:
  1. Очень доволен
  2. Удовлетворен
  3. Недоволен
  4. Крайне недоволен

Здесь у клиента есть возможность оценить в зависимости насколько реально он доволен. Ваша обязанность как бизнеса, который задает вопросы — быть как можно более нейтральным и объективным. Лучше признаться в своих ошибках, извиниться и исправить их, чем пытаться скрыть их.

5. Задавайте конкретные вопросы


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

6. Не спрашивайте лишние вопросы



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

Несколько критериев, над которыми следует подумать:

  1. Добавляет ли это ценность опросу?
  2. Нужен ли этот вопрос в этой кампании?
  3. Потеряет ли опрос эффективность, если исключить какой-либо вопрос?

7. Избегайте двойных вопросов


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

Пример двойного вопроса:

Насколько легко было перемещаться по нашему веб-сайту, чтобы найти продукт X и продукт Y?

Если у респондента была навигация по продукту X, но не по продукту Y, как вы ожидаете, что он ответит?

Лучше задайте два отдельных вопроса, как показано ниже:

Насколько легко было перейти на наш веб-сайт, чтобы найти продукт X?
Насколько легко было перейти на наш веб-сайт, чтобы найти товар Y?

8. Не делайте все вопросы обязательными


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

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

9. Не задавайте лишних вопросов



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

Что такого ужасного в этом вопросе, спросите вы? А то, что человек может вообще не быть поклонником футбола. Если вы включаете такой вопрос, то вам следует хотя бы предоставить им возможность ответить:
Я не смотрю футбол

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

10. Сосредоточьтесь на порядке вопросов


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

11. Длинные вопросы формулируйте аккуратно


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

12. Не используйте разные шкалы рейтинга


Некоторые из вопросов необходимо делать в виде шкал, особенно, если это большой опрос. Но обратите внимание на их вид. Если вы использовали шкалу от 1 до 10, убедитесь, что вы следуете ей везде. Сравнение вашей шкалы от 1 до 10 со шкалой от 1 до 6 приведет в замешательство даже опытных пользователей опроса.
Кроме того, использование шкалы в обратном направлении — от 10 до 1, также не рекомендуется. Придерживайтесь метода использования шкалы таким образом, чтобы вы всегда были последовательны, даже в новых опросах.

13. Демографические вопросы и их проклятие


Демографические вопросы — это те, которые обычно запрашивают имя клиента, адрес, электронную почту, номер телефона и другую подобную информацию. Почему это раздражает? Большинство будет в подсознании понимать, что у вас уже есть эта информация, и будут думать об этом как о пустой трате времени.
Найдите способ заполнить эти данные самим, автоматически. Например используя скрытые переменные в URL-адресе опроса, аля https://url.io/survey?email=*почта-клиента*

Вывод


Современные реалии позволяют создавать потрясающие опросы с визуальными эффектами, которые вызывают интерес у клиентов и поддерживают их вовлеченность. Есть куча сервисов по созданию опросов, например тот же Surveysparrow, Webask или Google формы.

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

Adblock test (Why?)

Киберпанк, стимпанк и прочие: самые популярные жанры ретрофутуризма

иллюстрация автора Fpeniche

В первые десятилетия XXI века популярность ретрофутуризма высока. Слова «киберпанк», «стимпанк», «дизель- и атомпанк» часто звучат при описании новых тайтлов в компьютерных играх, кино и аниме. Знатоки щеголяют терминами «нанопанк» и «биопанк», погружаясь в споры о жанровой границе стим- и дизельпанка.
Везде от вики и до лурка висят краткие пояснения о сути жанров ретрофутуризма и разнице между ними. Увы, они часто довольно-таки однообразны, и лично мне всегда хотелось почитать чуть более глубокий разбор с элементами СПГС. Ну а раз хотелось – почему бы не рискнуть написать свой вариант? Чем и попробую заняться.

▍ Киберпанк: отец-основатель


Про киберпанк, причины его зарождения в Америке рубежа 70-х и 80-х годов, и популярности именно в США и Японии у меня есть отдельная статья, посему слишком растекаться по древу не будем.
Если кратко – в то время в Штатах совпало несколько трендов. Нефтяной кризис с резким ростом цен на нефть наложился на глухое разочарование от того, что виделось поражением революции хиппи – и вполне реальное поражение во Вьетнаме. Экономика пребывала в кризисе, производства закрывались и уходили к дешёвой рабочей силе Азии.

Промзоны, бедные районы, пустоши становились всё более опасным местом из-за роста преступности, подстёгнутой безработицей. Социальное расслоение, несколько сглаженное экономическим ростом и обществом потребления 50-х и 60-х, вновь резко обострилась. Один за другим гремели скандалы вокруг сильных мира сего: политики, военачальники и корпоративные боссы раз за разом оказывались коррумпированными ворами, лицемерными лжецами и циничными убийцами. Атмосфера напоминала российские 90-е.
Изменились и субкультуры. На место отвергавших мир консервативных родителей, политиков и военных, но веривших в светлое будущее нового мира хиппи пришли разочаровавшиеся уже решительно во всём панки, зло плевавшие на общество и любые его ценности как таковые. В глазах обывателей уличные банды и устрашающе выглядевшие панки сливались в единый образ угрозы «нового агрессивного варвара» – и порой это соответствовало действительности.

В это же самое время происходила стремительная электронная и цифровая революция. Дешёвая и качественная японская электроника завалила Америку. Компьютеры из громоздких специализированных устройств для учёных и инженеров превращались в предмет массового использования, всё более причудливые гаджеты и промышленные роботы не сходили со страниц прессы и экранов ТВ.
Один из девизов панк-культуры гласит «будущего нет», и это тоже очень близко киберпанку. Точнее, в нём оно технически и есть, но там всё ещё хуже – и то, что при этом ещё и высокотехнологичнее, это «хуже» только усугубляет. Суть киберпанка часто описывают фразой «High tech – low life». В момент зарождения киберпанка как жанра это вполне точно описывало наблюдаемую вокруг реальность США начала 80-х, и казалось, что дальше будет только хуже. Именно из этого черпали вдохновение Уильям Гибсон, Брюс Стерлинг, авторы «Блейдраннера» и многие другие.

Слово «киберпанк» из одноимённого рассказа Брюса Бетке изначально имело совершенно буквальное значение: его персонажем был панк-хакер с ирокезом. Более точной характеристики жанра, соединившего кибернетичность с атмосферой «панка», антисоциального бунта среди общественного бардака, экономических бедствий и каких-то крайне сомнительных личностей во власти.
Да, в 1981 США возглавил Рейган, и через несколько лет его «рейганомика» выведет Америку на новый активный рост – но жанр уже успел родиться. И на фоне восстановления экономики он только крепче покорял сердца, как тремя десятилетиями ранее подчёркнуто мрачный и безысходный нуар прекрасно «заходил» стремительно богатеющим американцам 50-х.

Миры мрачных кибертрущоб на фоне сверкающих неоном небоскрёбов, конфликты отчаянных хакеров-бунтарей или честных детективов с жестоким миром корпоративного беспредела, где трудно понять, где кончаются советы директоров и начинается якудза, стали фактом мировой культуры.
А когда реальность победившей информационной революции – несмотря на вполне реальное high tech low life, в которой мы живём – оказалась совсем непохожей на то, что описывали классики жанра, киберпанк был осмыслен как один из жанров ретрофутуризма. То есть, того, как люди прошлого видели будущее из своего времени.

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

▍ Стимпанк – он же паропанкъ


Шестерёнки. Шестерёнки everywhere – именно так выглядит сферический в вакууме образ стимпанкового персонажа, устройства или пейзажа. Казалось бы – ничего общего с эстетикой киберпанка. Однако стимпанк как популярный и актуальный жанр родился из киберпанка самым непосредственным образом. Именно стимпанк имеет больше всего общего с киберпанком из всех прочих жанров «панк-ретрофутуризма» — и больше всего оснований называться «панком».
Эстетика и технологии стимпанка – это примерно то, как видели будущее люди с середины XIX по начало ХХ века, время бурного развития технологий и всё более вездесущих паровых машин. Поэтому главным классиком «стимпанка до стимпанка» со всем основанием можно назвать основателя жанра научной фантастики – Жюль Верна.

Именно потому лозунг high tech low life справедлив и для стимпанка. Это и в реальности был мир жёстких социальных контрастов и напряжённости, нищеты пролетариев и роскоши промышленных магнатов, а также стремительного, фантастического развития технологий на фоне глубокого экономического расслоения и общественной напряжённости. Всё это весьма напоминало Америку начала 80-х – только было гораздо более жёстким и жестоким.
Стимпанк действительно очень похож по духу на киберпанк. Только на место коррумпированных CEO глобальных корпораций в сияющих неоном меганебоскрёбах в стимпанке оказываются прожжённые дельцы-магнаты, развращённые аристократы и коррумпированные министры в роскошных дворцах с вышколенной прислугой. Им противостоят вместо хакеров учёные и инженеры, путешественники и детективы.

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

Ну а неким условным аналогом японского извода киберпанка, где вместо хакера-одиночки и бунтаря в центре сюжета стоят честные сотрудники спецслужб, частенько, впрочем, влетающие в конфликт с собственной системой, можно назвать детектива Эраста Фандорина. Кстати, Шерлок Холмс – тоже вполне «стимпанковский» персонаж, что нередко ныне и обыгрывается.
Произведения, которые можно было бы назвать стимпанком, в немалом количестве возникали и до формального зарождения жанра, немало их появилось уже в 60-е. Слово «стимпанк» стало прямой калькой со слова «киберпанк». Его в 1987 году придумал по прямой аналогии с киберпанком писатель Кевин Джетер, чтобы охарактеризовать тексты, описывающие альтернативно-исторические миры, похожие на викторианскую Британию XIX века с паровыми машинами и прочей ретро-эстетикой. Ранее он называл то, что писал сам, а также его коллеги Тим Пауэрс и Джеймс Блейлок, «фэнтези в гонзо-исторической манере», и краткий термин оказался удачным.

Ну а вслед за рождением термина и ростом популярности жанра отцы-основатели киберпанка Уильям Гибсон и Брюс Стерлинг опубликовали в 1990-м году свой классический роман в стиле стимпанка «Разностная машина». Он заслужил большую популярность — и понеслось.
Дальше были «Лига выдающихся джентльменов», «Дикий, дикий Запад», третий «Назад в будущее», «Хроники хищных городов», «Ходячий замок» Миядзаки, «Syberia», «BioShock Infinite»,«Dishonored» и множество других произведений.
Есть у стимпанка и свои поджанры. Например, «царьпанк» – паропанк с русской экзотикой, доходящей до развесистой клюквенности про казаков и медведей с самоварами водки, примером которого можно назвать роман и сериал «Тень и кость».

Часто говорят, что если в кадре есть устройства с двигателями внутреннего сгорания – то перед нами уже дизельпанк. Это не совсем так. В «позднем» стимпанке порой хватает явно не паровых технических устройств, взять хотя бы «Лигу выдающихся джентльменов».
Да и один из первых и до сих пор ярчайших выражений эстетики того, что позже назовут стимпанком, фильм 1965 года «Большие гонки» — уже имеет многие характерные черты жанра, но выстроен вокруг трансконтинентальной гонки на отнюдь не паровых автомобилях.
Из всех жанров ретрофутуризма стимпанк, пожалуй, имеет самое большое количество активных приверженцев. Стимпанк-фесты или мероприятия с активным участием любителей стимпанка существуют по всей планете, порой в самых неожиданных местах. И пусть порой количество шестерёнок доходит до абсурда, а загадочные агрегаты «под бронзу» с «паровыми котелками» и «манометрами» не имеют и тени функциональности – фэндом стимпанка огромен, многообразен и живее всех живых.

Грань между стимпанком и дизельпанком тоньше, многограннее и неопределённее просто потому, что соответствующие эпохи – в отличие от стим- и киберпанка – непосредственно соседствовали и вытекали одна из другой. Исторической «точкой перехода» во многом можно назвать Первую мировую войну: в которую мир вошёл под звон шпор, блеск кирас и эполет, с аристократами, дредноутами и цеппелинами – а выехал из туч отравляющих газов на танках под рёв многомоторных дальних бомбардировщиков и революционных демонстраций.
В этом плане верхней временной границей стимпанка можно назвать мир польского художника Якуба Ружальского (из-за частой записи его фамилии Różalski упрощённым под англоязычную аудиторию шрифтом чаще известный как Розальский), чьи арты про альтернативный паропанковый 1920-й год легли в основу игр «Skythe» и «Iron Harvest». Уже никаких викторианских аристократов, шестерней и цилиндров, по полям Полании и Руссвета бродят замысловатые боевые шагающие машины, поддерживаемые лавами конницы и небесными крейсерами. По виду они явно выглядят работающими на дизельном топливе – но часто просто утыканы подчёркнуто паровыми трубами.

И всё же значительная часть эстетики мира «Серпа» Ружальского уже относится к следующему жанру: дизельпанку.

▍ Дизельпанк: романтика небес


Дизельпанк – жанр «панка», занимающий почётное третье место после кибер- и стимпанка. Он уже заметно отличается по духу и сути от двух «старших братьев», и несколько менее популярен в смысле активной фан-базы. Стимпанк-фесты, по крайней мере, встречаются несравнимо чаще, чем дизельпанк-фесты. Зато, в отличие от стимпанка, дизельпанк пользуется «читом»: почти автоматическим интересом огромного количества любителей истории мировых войн ХХ века.
Сам термин появился только в 2001 году по аналогии со стимпанком как маркетинговый ход – но оказался удачным, востребованным и зажил своей жизнью.

Дизельпанк — это альтернативные миры, похожие на период интербеллума: 20-е и 30-е годы ХХ века между двумя мировыми войнами, а также часто и сами эти войны. Это уже время не перехода от сословного общества к промышленному капитализму на фоне декаданса и революционной напряжённости, а эпоха грандиозных социальных, индустриальных и архитектурных экспериментов конструктивизма, арт-деко и неоампира. Паровые машины стремительно вытеснились двигателями внутреннего сгорания, бензиновыми и дизельными – откуда и название жанра. Это мир построения утопий и тоталитарных режимов, торжества демократий, коммунизма и фашизма на обломках империй, колоссальных мировых войн. На место аристократов и дельцов приходят харизматичные вожди, генералы и бюрократы, а разведывательные игры ведут уже не шпионы с кинжалами, а могущественные спецслужбы.

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

Авиаторы, пилотирующие причудливые самолёты 20-х и 30-х годов, оказываются либо главными героями, либо его сюжетно важными соратниками. Часто они – ветераны мировой войны, не сумевшие найти себя на «гражданке», то самое «потерянное поколение» из книг Хэмингуэя и Ремарка. Здесь же нередки воздушные пираты на гидропланах и летающих авианосцах.
Безумные учёные никуда не делись, и в дизельпанке их амбиции могут достигать ещё большего размаха – особенно на службе у воинственных государств. Помимо самолётов в наличии радио и первые телеэксперименты, радиация и лучи смерти, супертанки и суперлинкоры, вундерваффе и шушпанцеры. На смену бронзе и латуни стимпанка приходит до блеска отполированная сталь, на смену цилиндрам и очкам-гогглам – лётные шлемы. Миры дизельпанка колеблются на грани не революции, а очередного блицкриг-вторжения или мировой войны.

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

Вообще таинственность, загадочность, секретность хоть седой древности, хоть современных на момент событий произведения спецслужб, политических заговоров и секретных проектов – очень характерная черта дизельпанка.
Наверное, первым примером жанра, ещё несущим немало черт «стимпанка-до-стимпанка», можно назвать «Метрополис» Фрица Ланга. Сюда же, в категорию отцов-основателей эстетики будущего жанра относятся фантастика Герберта Уэллса и Александра Беляева, фантастические фильмы 20-х и 30-х годов под тревожное завывание терменвокса.

К образцам дизельпанка относятся не только «Небесный капитан: мир будущего» и «Ракетчик», обычно приводимые в примеры жанра. В той или иной степени дизельпанком можно обозвать почти любое произведение по заданной эпохе, имеющее характерные черты жанра, не существовавшие в реальности, образцы техники и явную неисторичность происходящего. К ним вполне можно отнести и классическую трилогию про Индиану Джонса, и «Мумии», и российский сериал «Шпион», чьё действие разворачивается в мире грандиозной Москвы, где полностью реализованны конструктивизм и сталинский ампир.
Советским дизельпанком можно назвать «Аэлиту» и «Роковые яйца», «Тайну двух океанов» 1956 года – как и одноимённый роман 1938 года, а также многочисленные и ныне забытые романы и повести фантастики СССР эпохи интербеллума . Ну и «Хорошо забытое старое», мультипликационная квинтэссенция советской НФ того времени.

В какой-то степени даже «Порко Россо» Миядзаки, «Корто Мальтезе» и диснеевский мультсериал «Чудеса на виражах» — тоже яркие примеры дизельпанка. И даже Лавкрафт, особенно его поздние интерпретации вроде компьютерных игр – по современным меркам в изрядной степени дизельпанк.

▍ Атомпанк


Последний из жанров «панка», получивший широкое распространение. Если условной гранью стим- и дизельпанка была Первая мировая война, то границей дизель- и атомпанка становится уже конец Второй мировой с её финальным аккордом, ядерными ударами по Хиросиме и Нагасаки.
Романтика разгоревшейся к концу 40-х годов холодной войны, космической и ядерной гонки сверхдержав, их шпионских игр и интриг – это атомпанк. Это эстетика 50-х и 60-х. Америка 50-х с её яростным уютом, становлением общества потребления и шпиономанией маккартизма, плавно переходящая в психоделико-сексуальную революцию 60-х с хиппи, космосом и рок-н-ролом на фоне Карибского кризиса и прочих опасных военно-шпионских авантюр.

Если классические фильмы про Индиану Джонса были типичным примером дизельпанка, то «Королевство хрустального черепа» с тщательно собранными приметами 50-х — это уже скорее атомпанк.
Самолёты ещё больше сверкают полированной сталью – но становятся реактивными. На место вундерваффе приходят ядерные бомбы, ракеты и спутники, космические полёты. Атомпанк гораздо ярче любых своих коллег по ретрофутуризму: это время ярчайших красок металла и пластика, стремительных и дерзких форм.

В мире атомпанка царят атмосфера секретности, шпиономания и ещё более могущественные спецслужбы, чем в дизельпанке. Если символический герой дизельпанка – это авиатор, то героем атомпанка чаще оказывается суперагент. Здесь тоже часты экзотические места и страны, но в них чаще разворачиваются не авантюры путешественников, а шпионские игры или спецоперации Холодной войны. Само собой, почти везде оказываются суперсекретные базы. Возможно, со сбитыми летающими тарелками и даже инопланетянами: тема внеземных пришельцев и вообще космоса тут достигает своего пика.

Впрочем, часто злодеем в атомпанке оказывается не «вражеская» сверхдержава и даже не сошедшие с ума «свои» генералы и политики с ядерной кнопкой, а разного рода суперзлодеи с секретными базами и гипертехнологиями, против которых готовы объединяться даже ЦРУ и КГБ.
Да-да, постфактум ранние «Джеймсы Бонды» с Коннери, а также французские комедии про Фантомаса смотрятся как представители жанра атомпанка. Сюда же можно отнести чёрную комедию Кубрика «Доктор Стрейнджлав, или как я перестал бояться и полюбил ядерную бомбу» о холодной войне, переходящей в ядерную. Ну и «Остин Пауэрс» с «Агентами АНКЛ», конечно, вместе с «Фоллаутом».

Атомпанк, продолжая неразрывную последовательность альтернативно-исторических жанров с раннего стимпанка середины XIX века, упирается в конец 60-х или начало 70-х годов. В какой-то степени упоротой постироничности можно назвать символическим финалом эстетики атомпанка «Страх и ненависть в Лас Вегасе».
А что же дальше?
Дальше змея ретрофутуризма кусает себя за хвост. Потому что уже вот-вот упрётся в то самое время, когда родился киберпанк. Но уже не совсем в киберпанк.

Устоявшегося названия для жанра всё ещё нет, хотя с середины 2010-х он обрёл изрядную популярность на волне всеобщего увлечения синтвейвом и ретровейвом. Иногда его называют кассет-панком и формикапанком, но эти названия «не на слуху». Этот жанр описывает время зарождения киберпанка, с 70-х до ранних 90-е годов – но уже не «изнутри», а в ностальгической перспективе взгляда из 2010-х и 2020-х.
Снова много неона, японских надписей, трущоб и технологий, но тот мир, который для современников был пугающим и неопределённым, теперь выглядит ностальгически уютным.
Примеров жанра в кино или литературе не так уж много, этот жанр гораздо популярнее в треках и видеоклипах, ибо родился уже в эпоху YouTube и стриминговых сервисов. В качестве примеров можно вспомнить «Кунг Фьюри», «Атомная блондинка» и, пожалуй, «Внутри Лапенко». Это, в общем-то, не киберпанк, даже невзирая на Хакермэна – но, как и прочие «панки», доводят дух и эстетику эпохи его зарождения до особо концентрированного градуса.

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

А ещё интересно: как будет называться «панк-жанр», описывающий наше время?

Adblock test (Why?)