...

суббота, 13 октября 2018 г.

[Из песочницы] Краткий экскурс по основным моментам Zend Framework

Это просто фреймворк, или этот фреймворк олицетворяет собой гордость PHP-сообщества — его трудолюбивых разработчиков, так сказать, ключевой ингредиент? С россыпью конфигов… Предмет любви нашего ЯП, обладающий хорошим MVC, благодаря чему Zend Framework — самый лучший фреймворк на PHP.

Здесь вы не найдёте ответа на этот вопрос, зато узнаете про ServiceManager и ModuleManager.

Бегите, глупцы!


Предупреждение


  1. Данный материал основан на том, что я искал по Zend Framework 2, кое-где фигурируют даже упоминания по версии 1.*. Не думаю, что это станет проблемой при сопоставлении с другими версиями, так как рассматриваются фундаментальные моменты и вряд ли они глобально изменятся.
  2. В рассуждениях и переводах (а также в пункте 1) могут оказаться грубые ошибки, как мои, так и первоисточников. На всё будут даны ссылки, а собственное творчество будет с примечанием [моё].
  3. Ориентировано на тех, кто погуглил и, как я, запутался. Тут не будет разворачивания блогов, пояснений и интерактива. Но будет две картинки и кошечка.

Содержание


  • Термины
  • Устройство фреймворка
    • Общая структура и связи
    • Плагины
  • Визуализация
    • Связи
    • Схематичное представление
  • От автора
    • Полезные ссылки
  • Бонус

Термины

Источник, немного [моё].


  • Приложение — конечный продукт, сайт;
  • Модуль — функционально завершенный "блок" приложения, код которого может состоять из моделей, представлений, контроллеров. Модуль расширяет функциональные возможности веб-приложения и может функционировать лишь "внутри" него; Модули регистрируются в application.config.php в секции modules
  • ModuleManager — контейнер для манипуляций модулями;
  • Сервис — "механизм" в модуле, для манипуляций между моделями, контроллерами, видами, прочее; Сервисы регистрируются в module.config.php в секции service_manager.
  • ServiceManager — контейнер для манипуляций сервисами.
  • ControllerManager — работает с сервисами и фабриками для загрузки контроллеров (\Zend\ServiceManager\AbstractFactoryInterface или \Zend\ServiceManager\ServiceManager). дока
  • EventManager — компонент, который агрегирует обработчики событий (Listener) для одного и более именованных событий (Event), а также инициирует обработку этих событий.
  • Плагин — класс, который некоторым образом расширяет функциональность всех контроллеров.

Устройство фреймворка


Общая структура и связи

Источник

Когда создается Zend\Mvc\Application, объект Zend\ServiceManager\ServiceManager создается и настраивается через Zend\Mvc\Service\ServiceManagerConfig. ServiceManagerConfig получает конфигурацию из config/application.config.php(или какой-либо другой конфиг приложения, который передаётся в Application при его создании). Из всех сервисов и фабрик, представленных в пространстве имен Zend\Mvc\Service, ServiceManagerConfig является ответственным только за три: SharedEventManager, EventManager и ModuleManager.

После этого Application извлекает ModuleManager. В этот момент ModuleManager через ServiceManager конфигурирует сервисы и фабрики, предоставляемые в Zend\Mvc\Service\ServiceListenerFactory. Такой подход позволяет максимально упростить конфигурацию основного приложения и предоставить разработчику возможность конфигурировать различные части системы MVC из модулей, переопределяя любую конфигурацию по умолчанию в сервисах этих MVC.



ModuleManager, выражен в Zend\Mvc\Service\ModuleManagerFactory. Это, пожалуй, самая сложная фабрика в стеке MVC. ModuleManager ожидает, что сервис ApplicationConfig внедрён (Di) с ключами module_listener_options и modules.

Он создает экземпляр Zend\ModuleManager\Listener\DefaultListenerAggregate, используя извлеченные module_listener_options. Затем проверяет, существует ли сервис с именем ServiceListener, если нет, то использует фабрику с именем Zend\Mvc\Service\ServiceListenerFactory. В ServiceListener будет добавлено множество сервисов слушателей, таких, как слушатели методов getServiceConfig, getControllerConfig, getControllerPluginConfig, getViewHelperConfig модуля.

Затем ModuleManager извлекает сервис EventManager и присоединяет вышеупомянутых слушателей. Он создает экземпляр Zend\ModuleManager\ModuleEvent, установив параметр "ServiceManager" в объект менеджера сервисов. Наконец, он создает экземпляр Zend\ModuleManager\ModuleManager и внедряет EventManager и ModuleEvent.

[моё] Тот случай, когда кодом понятнее:

<?php

namespace Zend\Mvc\Service;

use Zend\ModuleManager\Listener\DefaultListenerAggregate;
use Zend\ModuleManager\Listener\ListenerOptions;
use Zend\ModuleManager\ModuleEvent;
use Zend\ModuleManager\ModuleManager;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;

class ModuleManagerFactory implements FactoryInterface
{
    public function createService(ServiceLocatorInterface $serviceLocator)
    {
        if (!$serviceLocator->has('ServiceListener')) {
            $serviceLocator->setFactory('ServiceListener', 'Zend\Mvc\Service\ServiceListenerFactory');
        }

        $configuration    = $serviceLocator->get('ApplicationConfig');
        $listenerOptions  = new ListenerOptions($configuration['module_listener_options']);
        $defaultListeners = new DefaultListenerAggregate($listenerOptions);
        $serviceListener  = $serviceLocator->get('ServiceListener');

        $serviceListener->addServiceManager(
            $serviceLocator,
            'service_manager',
            'Zend\ModuleManager\Feature\ServiceProviderInterface',
            'getServiceConfig'
        );  // то же самое для остальных методов модуля

        $events = $serviceLocator->get('EventManager');
        $events->attach($defaultListeners);
        $events->attach($serviceListener);

        $moduleEvent = new ModuleEvent;
        $moduleEvent->setParam('ServiceManager', $serviceLocator);

        $moduleManager = new ModuleManager($configuration['modules'], $events);
        $moduleManager->setEvent($moduleEvent);

        return $moduleManager;
    }
}

Плагины

Источник

Архитектура контроллеров включает в себя систему плагинов, которая позволяет добавлять свой код, который будет вызываться при определенных событиях в процессе жизни контроллера. Фронт-контроллер использует брокер плагинов (plugin broker) в качестве реестра пользовательских плагинов, брокер плагинов также обеспечивает вызов методов событий в каждом плагине, зарегистрированном через фронт-контроллер.

Методы событий определены в абстрактном классе Zend_Controller_Plugin_Abstract, от которого должны наследовать все пользовательские плагины


Визуализация

[моё]


  • Читается сверху вниз, если не задано иное стрелками.
  • Линии со стрелками указывают что во что входит.
  • Тонкие линии без стрелок указывают что с чем связано.
  • Толстые линии без стрелок указывают что чем управляет.

Связи

связи


Схема

схема


От автора

Внимательный читатель заметил, что статья начинается со ссылки на Тостер, где задан вопрос про различия ServiceManager и ModuleManager, и с них же начинается текст статьи. Совпадение? Не думаю. Дело в том, что Хабр стал первым местом, откуда я начал знакомство с основами фреймворка и путаницу внесла публикация, где воссоздавался блог из документации с комментариями автора статьи. Именно отсутствие описания ModuleManager толкнуло меня на неправильные рассуждения (что в ServiceManager регистрируются модули) и это привело к написанию данной статьи.


Полезные ссылки

Не хочу заниматься копипастой и выращивать 6 частей на одну тему, поэтому прикладываю список моих закладок по ZF с примечаниями:


Осторожно, спойлер!

Блог

В трёх статьях c Хабра


  • https://habr.com/post/192522/
  • Вольный перевод документации по разработке простого блога на ZendSkeletonApplication. Рассказывается о конфигах, ServiceManager (или ModuleManager, я так и не понял) и подключении сторонних библиотек.

Оригинал документации на блог


EventManager

Первичный обзор


Подробный разбор



ServiceManager

Quick start


Подробный разбор



ModuleManager

Документация


Надеюсь, краткий экскурс не слишком затянулся и был полезен. Разумеется, принимаются правки, предложения, критика и другие дозволенные правилами Хабра и действующими законодательствами РФ действия с вашей стороны.



Бонус, который мы заслужили:


Кошечка

(=^・ω・^=)

Let's block ads! (Why?)

[Перевод] [ Психология дизайна ] — The Psychology of Design

Существует ряд дебатов о том, какие дополнительные навыки должны изучать дизайнеры. Должны ли дизайнеры кодироваться уметь писать код и понимать бизнес? Эти навыки невероятно ценны, но, возможно, не являются существенными. Тем не менее, я бы сказал, что каждый дизайнер должен изучить основы психологии. Как люди, у нас есть основной «план» того, как мы воспринимаем и обрабатываем окружающий мир, а изучение психологии помогает нам определить этот план. Как дизайнеры, мы можем использовать психологию для создания более интуитивных, ориентированных на человека продуктов и опыта. Вместо того, чтобы принуждать пользователей подстраиваться под дизайн продукта или опыта, мы можем использовать некоторые ключевые принципы из психологии в качестве руководства для проектирования дизайна по модели поведения людей.

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

Ключевые принципы


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

Закон ХИКА


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

Оказывается, существует фактическая формула для представления этого отношения: RT = a + b log2 (n). К счастью, нам не нужно понимать математику этой формулы, чтобы понять, что это значит. Концепция довольно проста: время, которое требуется пользователям для ответа, напрямую коррелирует с количеством и сложностью доступных опций. Это означает, что сложные интерфейсы приводят к увеличению времени обработки для пользователей, что важно, потому что оно связано с фундаментальной теорией в психологии, известной как познавательная нагрузка.

Когнитивная нагрузка


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

Примеры


Модифицированные телевизионные пульты, которые упрощают «интерфейс» для бабушек и дедушек

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

Apple TV remote, который упрощает управление самыми необходимыми функциями.

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

Скриншоты из прогрессивного опыта внедрения Slack

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

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

Основные моменты


  • Большое количество вариантов увеличивает когнитивную нагрузку для пользователей.
  • Разбивайте длинные или сложные процессы на экраны с меньшим количеством опций.
  • Используйте постепенное внедрение для минимизации познавательной нагрузки для новых пользователей.

Закон МИЛЛЕРА


Другим ключевым принципом является Закон Миллера, который предсказывает, что средний человек может хранить только 7 (± 2) элементов в своей оперативной памяти. Он проистекает из статьи, опубликованной в 1956 году когнитивным психологом Джорджем Миллером, который обсуждал пределы кратковременной памяти и объема памяти. К сожалению, за эти годы было много неправильного толкования в отношении этой эвристики, и это привело к тому, что «магическое число семь» использовалось для оправдания ненужных ограничений (например, ограничение меню интерфейса не более чем на семь элементов).

Фрагментация


Увлечение Миллера краткосрочной памятью и объемом памяти было сосредоточено не на числе 7, а на концепции «Фрагментация» и нашей способности запоминать информацию. При применении к дизайну, Фрагментация может быть невероятно ценным инструментом. Оно описывает действие визуальной группировки связанной информации в небольшие отдельные единицы информации. Когда мы собираем контент в дизайне, мы эффективно упрощаем обработку и понимание. Пользователи могут сканировать контент и быстро определять, что им интересно, что согласуется с нашим опытом потребления цифрового контента.

Примеры


Пример Фрагментации элементов, таких как номера телефонов.

Самый простой пример Фрагментации можно найти, когда мы форматируем номера телефонов. Без Фрагментации номер телефона будет длинной строкой символов, что увеличивает сложность обработки и запоминания. Альтернативно, телефонный номер, который был отформатирован (фрагментирован), становится намного проще интерпретировать и запоминать. Это похоже на то, как мы воспринимаем «стену текста» по сравнению с хорошо отформатированным контентом с соответствующими обработками заголовка, длиной строки и длиной содержимого.

Фрагментация может организовывать контент, чтобы пользователи могли легко обрабатывать, понимать и запоминать. Справа я рассказал, как Блумберг сгруппировал информацию.

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

Основные моменты


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

Закон ДЖЕЙКОБА

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

Модели мышления


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

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

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

Примеры


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

Сравнение элементов панели управления и типичных элементов формы.

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

Редизайн Snapchat, до и после.

Возьмем, к примеру, Snapchat, который выкатил крупный редизайн в начале 2018 года. Они запустили переформатированный макет, который, в свою очередь, смутил пользователей, затрудняя доступ к функциям, которыми они пользовались ежедневно. Эти несчастные пользователи сразу же массово выразили свое неодобрение в Твиттере. Еще хуже была последующая миграция пользователей на конкурента Snapchat, Instagram. Snapchat не смог согласовать модель мышления пользователей с измененной версией их приложения, и возникающее несоответствие вызвало серьезную реакцию.

Редизайн YouTube в 2017 году до и после сравнения.

Но крупные редизайны не всегда должны приводить к негативной реакции — как пример компания Google. Google имеет историю, позволяющую пользователям выбирать новые версии своих продуктов, таких как Календарь Google, YouTube и Gmail. Когда они запустили новую версию YouTube в 2017 году после нескольких лет, по сути, одного и того же дизайна, они позволили пользователям настольных компьютеров упростить работу с новым интерфейсом Material Design без необходимости оставаться на новой версии. Пользователи могли просмотреть новый дизайн, получить некоторую информацию, отправить отзывы и даже вернуться к старой версии, если они предпочтут ее. В результате неизбежное несоответствие модели мышления было устранено путем простого расширения возможностей пользователей переключаться, когда они были готовы.

Основные моменты


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

Подведем итоги:


Возможно, вы думаете: «Какие замечательные принципы, как я могу их использовать в своих проектах?» Хотя ничто и не заменит исследование пользовательского поведения и конкретные данные, относящиеся к нашим проектам, мы можем использовать эти психологические принципы, в качестве руководства для разработки дизайна более интуитивных, ориентированных на человека продуктов и опыта. Учет этих принципов помогает нам создавать такой дизайн, который учитывает поведение людей в противовес принуждению подстраиваться под технологии. Краткое повторение:
  • Закон Хика может помочь нам уменьшить когнитивную нагрузку для пользователей, минимизируя выбор и разбивая длинные или сложные процессы на экраны с меньшим количеством вариантов.
  • Закон Миллера учит нас использовать фрагментацию для организации контента в меньшие кластеры, чтобы помочь пользователям легко обрабатывать, понимать и запоминать.
  • Закон Джейкоба напоминает нам о том, что пользователи переносят ожидания сформировавшиеся вокруг одного знакомого продукта на другой похожий.

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

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

Этические моменты


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

ПРОБЛЕМА


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

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

РЕШЕНИЕ


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

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

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

Примеры


Google Digital Wellbeing инициативный веб-сайт

Было здорово видеть, что компании предпринимают правильные шаги, когда речь идет о цифровом благополучии пользователей. Возьмем, к примеру, Google, который только что объявил о инструментах и функциях в своем последнем событии I/O, который фокусируется на том, чтобы помочь людям лучше понять их использование в технологиях, сосредоточиться на самом главном, отключиться, когда это необходимо, и создать здоровые цифровые привычки. Такие функции, как панель приложений, которая предоставляет обзор использования, дополнительный контроль над предупреждениями и уведомлениями и Родительский контроль для настройки основных цифровых правил для маленьких, все это предназначено для защиты пользователей.

Снимок экрана из видео в Facebook «Лента новостей FYI: сближение людей».

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

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

Ресурсы


Есть много полезных ресурсов, которые мы можем использовать для того, чтобы сделать наши проекты более интуитивными для пользователей. Вот несколько, на которые я ссылаюсь довольно часто:
  • Laws of UX: веб-сайт, который я создал для дизайнеров, чтобы узнать больше о психологических принципах, связанных с дизайном UX / UI.
  • Cognitive UXD: эта публикация, выбранная вручную, которую проводит Norbi Gaal, является отличным ресурсом для всех, кто интересуется пересечением психологии и UX.
  • Center for Humane Technology: команда бывших высокотехнологичных инсайдеров и руководителей мирового класса, которые продвигают продуманные решения для изменения культуры, бизнес-стимулов, методов проектирования и организационных структур, врассказывают о том, как технология захватывает наши мозги.
  • Дизайн повседневных вещей: пересмотренный и расширенный выпуск: абсолютная классика, которая исследует связь между объектом и пользователем через дизайн, как оптимизировать эту связь, и в конечном итоге, как психология играет определенную роль в проектировании для реальных потребностей людей.
  • Дизайн эмоций: посмотрите на важность эмоций, когда выражаете личность бренда и как дизайнеры могут выйти за рамки функциональности, надежности и удобства использования для людей, а не для машин.
  • Hooked: Как создавать привычные продукты: руководство, которое дает представление о поведенческих методах, используемых такими компаниями, как Twitter, Instagram и Pinterest.

Let's block ads! (Why?)

Какой велосипед выбрать для городских, загородных и экстремальных поездок — обзор моделей Airwheel и Twitter

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

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

Мы расскажем о таких велосипедах на примере линеек двух брендов — Airwheel и Twitter.


/ Flickr / Best Picko / CC

Компактный городской транспорт


Электровелосипеды стали гармоничным элементом городской экосистемы. Их мировая экспансия берет свое начало в Азии, где они приобрели популярность. Позже электровелосипеды «приехали» в Европу и США. Сегодня даже компания Uber, для которой в приоритете всегда были поездки на автомобилях, продвигает двухколесный электротранспорт.

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

Airwheel E3

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

Модель E3 имеет О-образную раму, в сложенном виде помещается в дорожную сумку высотой 50 см и весит всего 12,5 кг.

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

Хотя главное предназначение Airwheel E3 — маневрировать в городском потоке и быть супермобильным, есть энтузиасты, выполняющие на нем трюки. Впрочем, для любого транспорта найдется свой экстремал. Главное, что рама E3 выдерживает эти эксперименты.

Airwheel R3 и Airwheel R5

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

Начнем с внешнего вида — конструкция R3 и R5 ближе к «традиционному» велосипедному дизайну. У них обычная рама, которая, впрочем, выдерживает тот же вес, что и E3 с E6. Две модели R-семейства весят 17 и 17,5 кг соответственно, но в сложенном виде их по-прежнему легко перевозить в багажнике или общественном транспорте. У этих велосипедов шире шины, чем у E-моделей, а значит они выигрывают с точки зрения проходимости.

Из уникальных особенностей серии R можно выделить несколько режимов езды. У R3 и R5 их три — электротяга, «классический» режим и гибридный.

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

Велосипеды для размеренной езды


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

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

Распространенный сценарий использования этого велосипеда недавно описал один из резидентов Reddit. Он приобрел эту модель в качестве альтернативы машине в теплый сезон. На велосипеде он проходит 30 км в день по холмистым и ровным участкам дороги. Больше всего владелец ценит в этой модели легкость (вес R8 — 19,5 кг).


/ airwheels.ru

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

Как и предыдущие две модели, R8 предлагает три режима езды. Однако, этот велосипед в большей степени адаптирован под езду «по старинке», чем другие Airwheel, — он оборудован коробкой передач Shimano (кассета из семи звездочек). Это позволяет регулировать усилие даже при отключенном электроприводе.

Twitter VS7.0-ER100

Эта модель открывает разговор о велосипедах Twitter, укомплектованных оборудованием Shimano. Решения этого производителя устанавливают на горные и шоссейные велосипеды, в том числе на модели с электроприводом.

VS7.0-ER100 — самый доступный электровелосипед в линейке Twitter, который создан для размеренной езды в городе и за городом. Он оборудован переключателями и тормозами Shimano семейств Tourney и Altus. Хотя они и считаются базовыми комплектами, нужно учитывать, что почти все линейки оборудования Shimano получают регулярные обновления. Это гарантирует, что велосипеды, на которых оно установлено, соответствуют современным требованиям к системам торможения и переключения.

У велосипеда 21 скорость, и он так же, как Airwheel, предлагает три режима езды. Но в гибридном режиме моделью предусмотрены еще пять различных вариантов работы электродвигателя. Кстати, весит VS7.0-ER 100 немногим больше R8, зато развивает скорость до 35 км/ч и способен проехать на одном заряде в режиме скутера почти в полтора раза больше — 30 км.

Twitter VS7.0-ER

Помимо отсутствия цифры 100 в названии, эта модель имеет еще пару отличий от своего «брата»:
  • мощность двигателя с редуктором 350 Вт по сравнению с 250 Вт в ER 100;
  • емкость батареи 480 Вт*ч по сравнению с 360 Вт*ч;
  • максимальный пробег в режиме помощи — 120 км вместо 90 км на ER 100, а в режиме скутера — 40 км вместо 30 км.

Таким образом, этот велосипед мощнее и выносливее при езде на дальние расстояния.
Twitter VS7.0-EM

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

Еще на VS7.0-EM установлен кареточный мотор. С таким проще подниматься в гору, если привод отключен, в сравнении с моделями, у которых двигатели располагаются на заднем колесе. Плюс таким велосипедом проще управлять, так как мотор в середине позволяет лучше распределить вес. И в случае необходимости с таких велосипедов проще снимать колеса для замены.


/ twitter-bikes.ru

Twitter MANTIS-E0

Кроме VS7.0-EM у Twitter есть еще одна модель с переключателями Alivio — MANTIS-E0. У нее 27 скоростей, контроллер двигателя интегрирован в батарею. Конструктивно — это спортивная модель, которая «борется» за каждый лишний килограмм, стараясь стать легче и развить большую скорость. Его вес почти на килограмм меньше, чем у VS7.0-EM (18,2 кг против 19,1 кг).

Горные велосипеды


Настало время поговорить о велосипедах, готовых покорять крутые склоны, выдерживать серьезные падения и работать на пределе возможностей в суровых условиях.
Twitter MANTIS-E1

MANTIS-E1 — это первый велосипед в нашей подборке с элементами профессионального горного комплекта Shimano SLX. С тормозной системой BL-M7000 эта модель способна на большее, чем поездку по маршруту «дом — офис». Со своим двигателем E1 входит в число самых мощных электровелосипедов Twitter из этого списка.

О принадлежности MANTIS-E1 к профессиональному спортивному транспорту говорят мельчайшие конструктивные детали — например, наличие клипс для велосипедной обуви на педалях. У велосипеда информативная бортовая система. Все данные о заезде выводятся на яркий ЖК-экран — скорость (текущая, средняя, максимальная за сеанс), режим работы электродвигателя, заряд аккумулятора, пробег.

Ревнители езды без помощи электродвигателя могут снять аккумулятор. Тогда MANTIS-E1 становится просто хорошим горным велосипедом (с небольшим весом).

Twitter AM26-E1

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


/ twitter-bikes.ru

Twitter TW-E9L и Twitter TW-E9W

Завершим наш обзор двумя велосипедами с карбоновыми рамами. Этот материал выбирают профессиональные спортсмены, так как он снижает вес транспортного средства и за счет этого позволяет развить большую скорость. На TW-E9L и E9W установлены элементы премиального комплекта Shimano SLX, а батарея и/или мотор интегрированы в раму, потому не выдают в транспорте электровелосипеды.

Теперь осталось только разобраться в различиях двух родственных моделей. Здесь все просто — у E9W более емкая батарея (480 Вт*ч), потому в гибридном режиме он может проехать дольше, чем E9L. E9W при этом и весит чуть больше.

E9L и E9W самое место на бездорожье — именно здесь в полной мере проявляются достоинства этих электровелосипедов. Кстати, в нашем блоге есть обзор, в котором мы проверили этот велосипед в разных условиях и даже провели небольшой краш-тест.

Пара слов о брендах


«МакЦентр» является дистрибьютором транспортных средств Twitter и Airwheel. Twitter — это в первую очередь велосипеды, причем в ассортименте производителя есть и модели без электропривода. А Airwheel — это бесконечные эксперименты, проявляющиеся в самых разных устройствах — от моноколес до самокатов.

С 13 по 15 ноября можно приобрести (кстати, есть доставка в регионы) любой электровелосипед Airwheel и любой электровелосипед Twitter (имеющиеся в наличии) со скидкой 10%.

Для этого при оформлении заказа в офисе или на сайте скажите или введите в поле «Купон» («Скидочный код») кодовое слово Habr2018.

Let's block ads! (Why?)

В одном из цехов АВТОВАЗа нашли ферму для майнинга

Служба безопасности АВТОВАЗа, пишет корпоративная газета автозавода «Волжский автостроитель», столкнулась с интеллектуальной преступностью. Таинственный злоумышленник, два года майнил криптовалюту, спрятав и запитав ферму в электрических шкафах 19-го зала управления конвейерами. Майнил сотрудник весьма успешно.
Ссылка на новость.

«Специалисты безопасности установили, что для функционирования криптофермы нарушитель использовал коммуникационный канал в сеть Интернет при помощи USB 4G-модема, благодаря чему получал удаленный доступ к своему оборудованию. По данным журнала событий исследованного управляющего блока, криптоферма функционировала с ноября 2017 года.

Удалось также докопаться до электронного криптокошелька. В журналах операций оказались зафиксированы транзакции с августа 2016-го по май 2018 года на общую сумму в эквиваленте более 1,2 миллиона рублей.

Подсчитано, что при среднем расходе электроэнергии одним устройством около 1000 кВт в месяц общая сумма затрат АвтоВАЗа на похищенную электроэнергию с ноября 2017 года составила свыше 600 тысяч рублей. Если предположить, что криптоферма здесь существовала все же с 2016 года, то это число значительно увеличится…», — пишет «Волжский автостроитель».

По словам представителя АВТОВАЗа, личность этого сотрудника уже установлена и с ним в настоящее время работают правоохранительные органы.

***

Странно. что периоды работы фермы не бьются в сообщениях — 1 год или 2 года все работало у них там незаметно… Как вариант — начали менее года назад мониторить серьезнее энергозатраты и нашли нестыковки в показаниях счетчиков и расчетном потреблении рабочего оборудования.

Интересно, какую именно по конфигурации ферму ИБ там нашли и ведь ее тоже нужно было как то закамуфлировать и обслуживать.

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

В комментариях ниже попытался посчитать все же состав фермы:
Т.е. устройств несколько в составе фермы было, которые потребляли каждое 1000 кВт, а сколько именно устройств — нужно считать 600 000 рублей / 12 = 50000 рублей / 6 руб за 1 кВт = 8333 кВт. Т.е. примерно 8-9 нод в составе фермы было, как вариант.

Обычно с заводов «выносят» оборудование\детали, а тут сотрудник сам принес, развернул и долго ей пользовался. А один ли там вообще был сотрудник. Ведь простую даже ферму нужно еще купить и внести внутрь периметра предприятия, например такую:

А если этот сотрудник использовал существующее оборудование серверное и т.д. самого предприятия, то тут уже IT-персанал в деле…

Let's block ads! (Why?)

Так ли в Европе, как о ней пишут?

image
На Хабре очень много статей, связанных с жизнью в Европе и переездом, которые могут помочь людям найти ответ на вопрос «а стоит ли, собственно, в Европу переезжать?».
Досканально описываются процесс устройства на работу, получения визы и поиска жилья. Бывают статьи как положительные, так и о не самом удачном опыте.
Но буквально вчера вышла статья о Люксембурге и Европе, вызвавшая довольно большой резонанс и затронувшая много неоднозначных тем. И, скажем так, не подкреплённая никакими пруфами, кроме мнения автора.
Прочитав эту статью, мне захотелось написать о некоторых поднятых в ней вопросах не только с точки зрения личного восприятия автора, но и с точки зрения фактов и цифр.
Очень краткое введение:

1. Я, к сожалению, не работаю в IT, поэтому статья расположена в хабе Читальный зал. Статью в хабе IT-эмиграция я не заслужил.
2. Три года назад мы с женой переехали в Германию, до этого я непродолжительное время работал в Голландии. В России жил долгое время и в Москве, и не в Москве.
3. Моё личное мнение будет выражено в основном на опыте жизни в Германии.

Итак, приступим.

Сексуальные меньшинства в Европе. Статистика

По статистике Dalia на 2016 год, основанной на опросе 11.754 человек в Европе, в среднем 5,9% европейцев относятся к ЛГБТ сообществу. Во главе списка стоит Германия с результатом 7,4%.
Infographic: Europe's LGBT population mapped | Statista
Если смотреть с точки зрения законодательства, то по статистике Rainbow Europe самые благоприятные условия для ЛГБТ сообщества в Мальте, а самые неблагоприятые в Азербайджане.
image

В Европе проводятся «ЛГБТ парады», а именно Christopher street day. В разных регионах Европы это событие запланировано в разное время. Например, в 2019 году пройдут 28 мероприятий, первое из которых будет в мае в Испании, а последнее в августе в Германии.

Однополые браки признаны в 28 странах мира, 16 из которых расположены в Европе.

Сексуальные меньшинства в Европе. Моё мнение

В Германии, по моим ощущениям, к сексуальной ориентации относятся как к цвету волос. Ты можешь иметь любой цвет волос, можешь открыто показывать его, можешь прятать под шапкой. Это твоё право и твоё решение. Остальным по большому счёту до этого дела нет. Визуально в Германии больше гомосексуальных пар, чем в России. Но возможно, потому что меньше гомосексуальных пар в России показывают свои отношения на публике.
Вообще ЛГБТ тема в Европе не является чем-то особенным или на чём заостряют внимание. Пожалуй, кроме одного раза в году на Christopher street day.

Беженцы и мигранты. Статистика

Согласно статистике Eurostat Германия является лидером по приёму беженцев среди стран Европы.
При этом общее количество принятых беженцев в Европе достигло пика в 2015 году, а в 2017 году сократилось практически до уровня 2014 года.

Германия так же лидирует в количестве населения, не рождённого на территории страны.
image

Если брать нелегальных мигрантов Европы, то по статистике Frontex пик пришёлся так же на 2015 год.
image

Более детальную статистику по отдельным странам можно найти на специальном сайте.
Вот, например, из каких стран беженцы пытались попасть в Германию в 2017 году.
image

Беженцы и мигранты. Моё мнение

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

Религия. Статистика

По данным Eurostat на 2005-ый год 18 % населения ЕС не верят в Бога, 27 % допускают существование сверхъестественной «духовной жизненной силы», в то время как 52 % верят в конкретного (личного) Бога.
По статистике Eurobarometer от того же Eurostat на 2010-ый год Мальта самая верующая страна, а Чехия — самая неверующая.
image
Из более новых данных есть исследование, которое European Social Survey провела в 2014-2016 годах с целью узнать, какой процент населения в возрасте 16-29 лет не считает себя принадлежащим к какой-либо из религий.
image
На странице в Wikipedia можно узнать больше про определённую религию и её распространённость в Европе.

Религия. Моё мнение

Здесь судить могу только по Германии. По ощущениям Германия — довольно релегиозная страна. Очень много церквей/мечетей/синагог, много выходных на христианские праздники, по воскресениям закрыты магазины. Есть даже налог на церковь, который вычитается из твоей зарплаты. Но при этом, если вы атеист, от его уплаты можно отказаться.
Церкви, в основном, открыты для всех желающих туристов не зависимо от их религии.

Цены и зарплаты. Статистика

Вопрос цен, с одной стороны, довольно тяжело проанализировать, так как у всех разные стили жизни, а с другой — довольно легко, ведь многие компании имеют свои сайты в Европе. То есть, очень легко увидеть цены на их продукцию в других странах.
Однако для грубого сравнения можно использовать сайт expatistan.com, который использует интересную систему расчета cost living ratio. Можно сравнить город, в котором вы сейчас живёте с городом, в который собираетесь переехать. Или страну со страной.
Есть ещё сайт numbeo.com, на котором, кроме сравнения цен можно посмотреть на здравоохранение, уровень пробок и многое другое.
В добавок к этим двум сайтам есть статистика Eurostat по некоторым группам цен: продукты, коммунальные услуги, транспорт.

Цены и зарплаты. Моё мнение

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

Заключение

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

Let's block ads! (Why?)

Что нужно запомнить программисту переходящему на Python

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


  • Билл Любанович «Простой Python. Современный стиль программирования»
  • Дэн Бейдер «Чистый Python. Тонкости программирования для профи»
  • Бретт Слаткин «Секреты Python: 59 рекомендаций по написанию эффективного кода»

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

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

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

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

Так как я вовсе не гуру питона, то надеюсь меня поправят в комментариях если я вдруг сморозил какую-то глупость.


Типизация

Питон динамически типизированный язык т.е. он проверяет соответствие типов в процессе выполнения, например:

cat type.py

a=5
b='5'
print(a+b)

выполняем:

python3 type.py
... TypeError: unsupported operand type(s) for +: 'int' and 'str'

Однако, если ваш проект дозрел до необходимости статической типизации, то питон предоставляет и такую возможность путём использования статического анализатора mypy:

mypy type.py
type.py:3: error: Unsupported operand types for + ("int" and "str")

Правда так ловятся не все ошибки:

cat type2.py

def greeting(name):
    return 'Hello ' + name

greeting(5)

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

cat type3.py
def greeting(name: str) -> str:
    return 'Hello ' + name

greeting(5)

а теперь:

mypy type3.py
type3.py:4: error: Argument 1 to "greeting" has incompatible type "int"; expected "str"

Переменные и данные

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

x = 1
y = x
x = 2
print(y)

приводит к тому, что переменные x и y ссылаются на различные данные, а такой:

x = [1, 2, 3]
y = x
x[0] = 7
print(y)

нет, x и y остаются ссылками на один и тот же список, что кстати в питоне можно проверить оператором is (я уверен что создатель джавы навсегда лишился хорошего сна от стыда когда узнал про этот оператор в питоне).

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

>>> mystr = 'sss'
>>> str = mystr  # делаем ссылку на те же данные
>>> mystr[0] = 'a'
...
  TypeError: 'str' object does not support item assignment
>>> mystr = 'ssa'  # меняем исходную переменную
>>> str  # данные не изменились и доступны по второй ссылке
  'sss'

Кстати, о строках, из-за их иммутабельности конкатенация очень большого списка строк сложением или append'ом в цикле может быть не очень эффективной (зависит от рализации в конкретном компиляторе/версии), обычно для таких случаев рекомендуют использовать метод join, который ведёт себя немного неожиданно:

>>> str_list = ['ss', 'dd', 'gg']
>>> 'XXX'.join(str_list)
'ssXXXddXXXgg'
>>> str = 'hello'
>>> 'XXX'.join(str)
'hXXXeXXXlXXXlXXXo'

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

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


Область видимости

Область видимости переменных в питоне ограничена модулем/функцией в которых она определена и вложенными функциями, но есть тонкость — переменная по умолчанию доступна для чтения во вложенных пространствах имён, но модификация требует использования специальных ключевых слов nonlocal и global для модификации переменных на один уровень выше или глобальной видимости соответственно.
Например такой код:

x = 7
print(id(x))

def func():
    print(id(x))
    return x

print(func())

Работает с одной глобальной переменной, а такой:

x = 7
print(id(x))

def func():
    x = 1
    print(id(x))
    return x

print(func())
print(x)

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


Аргументы функций

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

def add_element(mylist):
    mylist.append(3)

mylist = [1,2]
add_element(mylist)
print(mylist)

выполняем:

python3 arg_modify.py
[1, 2, 3]

однако нельзя затереть исходную ссылку в функции:

def try_del(mylist):
    mylist = []
    return mylist

mylist = [1,2]
try_del(mylist)
print(mylist)

исходная ссылка жива и работает:

python3 arg_kill.py
[1, 2]

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

изменяемые данные:

cat arg_list.py

def func(arg = []):
    arg.append('x')
    return arg

print(func())
print(func())
print(func())

результат:

python3 arg_list.py
['x']
['x', 'x']
['x', 'x', 'x']

динамическое значение:

cat arg_now.py

from datetime import datetime

def func(arg = datetime.now()):
    return arg

print(func())
print(func())
print(func())

получаем:

python3 arg_now.py
2018-09-28 10:28:40.771879
2018-09-28 10:28:40.771879
2018-09-28 10:28:40.771879

ООП

ООП в питоне сделано весьма интересно (одни property чего стоят) и это большая тема, однако сапиенс знакомый с ООП вполне может нагуглить всё (или найти на хабре), что ему захочется, поэтому нет смысла повторяться, единственный минус стандартных классов — шаблонный код во всяких дандер методах, лично мне нравится библиотека attrs, она значительно более питоническая.
Стоит упомянуть, что так в питоне всё объекты, включая функции и классы, то классы можно создавать динамически (без использования eval) функцией type.
Также стоит почитать про метаклассы (на хабре) и дескрипторы (хабр).
Особенность, которую стоит запомнить — атрибуты класса и объекта это не одно и тоже, в случае неизменяемых атрибутов это не вызывает проблем так как атрибуты "затеняются" (shadowing) — создаются автоматически атрибуты объекта с таким же именем, а вот в случае изменяемых атрибутов можно получить не совсем то, что ожидалось:

cat class_attr.py
class MyClass:
    storage = [7,]
    def __init__(self, number):
        self.number = number

obj = MyClass(1)
obj2 = MyClass(2)

obj.number = 5
obj.storage.append(8)

print(obj2.storage, obj2.number)

получаем:

python3 class_attr.py
[7, 8] 2

как можно увидеть — изменяли obj, а storage изменился и в obj2 т.к. этот атрибут (в отличии от number) принадлежит не экземпляру, а классу.


Стандартная библиотека

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

Например, идущий в комплекте модуль для модульного тестирования unittest не имеет никакого отношения к питону и сильно воняет джавой, поэтому, как говорит автор питона: "Eveybody is using py.test ...".

На замену стандартному модулю сериализации pickle делают dill, тут кстати стоит запомнить, что эти модули не подходят для обмена данными в внешними системами т.к. восстанавливать произвольные объекты полученные из неконтролируемого источника небезопасно, для таких случаев ест json (для REST) и gRPC (для RPC).

Вот другой пример — человек сделал свой модуль in-place, чтобы пофиксить кривизну и неполноту API стандартного модуля fileinput в части in place редактирования файлов.

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


Параллелизм и конкурентность

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

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

А если в ваших задачах много ожидания IO, то питон предоставляет массу вариантов на выбор, от тредов и gevent, до asyncio.
Все эти варианты выглядят вполне пригодными для использования (хотя треды значительно больше ресурсов требуют), но есть ощущение, что asyncio потихоньку выдавливает остальных, в том числе благодаря всяким плюшками типа uvloop.

Если кто не заметил — в питоне треды это не про параллельность, я недостаточно компетентен, чтобы хорошо рассказать про GIL, но по это теме достаточно материалов, поэтому и нет такой необходимости, главное, что нужно запомнить это то, что треды в питоне (точнее в CPython) ведут себя не так как это принято в других языках программирования — они исполняются только на одном ядре, а значит не подходят для случаев когда вам нужна настоящая параллельность, однако, выполнение тредов приостанавливается при ожидании ввода-вывода, поэтому их можно использовать для конкурентности.


Странности, которые не странности

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

Также я не мог понять почему -22//10=-3, а потом, другой добрый человек, указал, что это неизбежно следует из самого математического определения, по которому, остаток не может быть отрицательным, что и приводит к такому необычному поведению для отрицательных чисел.

Let's block ads! (Why?)

Основатели Amazon, Google, Microsoft и Facebook потеряли более $30 млрд в ходе обвала на биржах

Изображение: thierry ehrmann | CC BY 2.0

Текущая неделя выдалась тяжелой для фондовых бирж во всем мире. Американский индекс Dow Jones в среду обвалился примерно на 832 пункта – третий по своим масштабам его обвал за всю историю. Индекс S&P500 также потерял около 3,3%.

Особенно тяжелая ситуация сложилась для технологических компаний. Издание Fortune подсчитало потери основателей публичных компаний. Выяснилось что, американские миллиардеры, среди которых Джефф Безос, Билл Гейтс, Сергей Брин, Марк Цукерберг и другие потеряли более $30 млрд своих состояний всего на пару дней. Вот, кто пострадал сильнее всех.

Джефф Безос (-$21 млрд)


Основатель Amazon и самый богатый человек в мире и потерял больше других. Оценка его состояния к четвергу снизилась со $161 млрд до $140 млрд. Такие потери не подвинули его с вершины, однако по оценкам аналитиков Fortune, фокус Amazon на потребительских товарах может привести к дальнейшим проблемам – этот рынок больше других страдает от разворачиваемых властями США торговых войн с другими странами.

Билл Гейтс (-$3,9 млрд)


Сооснователь Microsoft, который уже довольно давно отошел от бизнеса, став филантропом и меценатом, занимает вторую строчку в списке мировых богачей. При этом Гейтс потерял значительный процент состояния – всего за неделю оно уменьшилось с $98,7 млрд до $94,8.

Ларри Пейдж (-$3,8 млрд)


Один из основателей Google, в отличие от Гейтса, все еще принимает участие в жизни компании, сохраняя роль «серого кардинала». СМИ активно пишут о том, как Пейдж руководит различными проектами, публично оставаясь в тени. В любом случае, прошедшая неделя падений не обошла стороной и владеющую Google корпорацию Alphabet – в итоге состояние Пейджа уменьшилось $57,10 до $53,30.

Сергей Брин (-$3,6 млрд)


Другой основатель Google обладает сравнимым состоянием и потерял за неделю биржевой турбилентности похожую сумму. Размер состояния Брина с $55,6 млрд упал до $52 млрд.

Стив Баллмер (-$2,4 млрд)


Соратник Билла Гейтса, уже несколько лет не работает в Microsoft. Его состояние также сократилось – неделю назад он был счастливым обладателем $42,50 и команды НБА Л.А. Клипперс, теперь остались команда и $40,1 млрд.

Марк Цукерберг (-$2,1 млрд)


Несмотря на проблемы Facebook в публичном поле – от расследований властей до взломов и утечек данных, Марк Цукерберг потерял меньше своих коллег-миллиардеров из технологической сферы. Состояние основателя Facebook сократилось с $62,9 млрд до $60,8 млрд.

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

Другие материалы по теме финансов и фондового рынка от ITI Capital:


Let's block ads! (Why?)

Как «воевали» и эволюционировали аудиоформаты и аудиотехнологии: большой исторический дайджест

Сегодня мы представляем вашему вниманию избранные исторические материалы из нашего «Мира Hi-Fi». Они будут интересны всем, кто любит почитать статьи о необычных музыкальных инструментах, аудиобрендах и их создателях, а также носителях и форматах.


Фото Ed Uthman / CC



Звукозапись




  • «Звук длиною в 8 секунд»: история меллотрона. Меллотрон был создан в Англии в середине прошлого века как инструмент для домашнего музицирования. Однако популярным он стал среди рок-музыкантов. Muse, Pearl Jam, Porcupine Tree, Radiohead и другие использовали его в своих песнях. Разберёмся в устройстве инструмента и причинах его популярности.

  • «Как экран стал говорящим»: история шоринофона. Рассказ о советском предшественнике магнитофона — шоринофоне. Поговорим о том, как он работал и о сотрудничестве его создателя с режиссёрами Совкино и Ленфильма. Также расскажем, где и сейчас можно посмотреть на это необычное устройство.

  • «Между винилом и кассетой»: история тефифона. В магазинах послевоенной Германии продавался необычный аудиогаджет — тефифон. Здесь речь пойдет о его истории. Из статьи вы узнаете, что общего у тефифона и виниловой пластинки, почему записи известных музыкантов не выходили на этом формате и что привело к его скоропостижной смерти.

  • Сказки в СССР: история «детского» винила. Вспоминаем советские аудиопостановки на виниловых и гибких пластинках. «Алиса в Стране чудес», «Хоттабыч!», «Бременские музыканты» — эти и многие другие «виниловые сказки» были выпущены на фабрике «Мелодия». Они воспитали целое поколение школьников. Мы поговорим об истории возникновения «детского винила» в СССР, известных актёрах и музыкантах, участвовавших в его озвучке, и цензуре, которой он подвергался.



Аудиогаджеты и инструменты




  • Магнитолы из СССР: краткая история аудиосистем в советских автомобилях. Первое автомобильное радио появилось в самом начале прошлого века. На Всемирной выставке 1904 года его представил американский изобретатель Ли де Форест. В СССР изготовление приёмников для авто началось позже, с развитием в стране радиовещания. Мы рассказываем про первый приёмник для лимузина, приводим примеры раритетных моделей, а также говорим про аудиосистему в машине Леонида Брежнева.

  • «Это хит»: история и рекорды музыкальных чартов. 79 недель — столько времени песни Элвиса Пресли возглавляли Billboard Hot 100. Говорим об истории возникновения музыкальных чартов. Из статьи вы узнаете, как назывался первый хит-парад в СССР и почему чарты постепенно устаревают.

  • Самые необычные музыкальные инструменты: орган Хаммонда, Vako Orchestron и Synclavier. Лоуренс Хаммонд придумал электрический орган в 1935 году как недорогую альтернативу духовым органам в церквях. Однако оригинальное звучание инструмента оценили джазовые и рок-музыканты. В материале говорим про особенности и историю развития Хаммонда и двух других интересных клавишных инструментов. Какое предложение сделал Генри Форд Лоуренсу Хаммонду, за сколько был продан самый дорогой Synclavier и почему Orchestron проигрывал меллотрону по звучанию — ответы ищите в статье.

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



История брендов




  • Советская легенда: история завода «Радиотехника». Делимся историей бренда «Радиотехника» с 1927 года по сегодняшний день. За 90 лет компания прошла долгий и интересный путь — от закупки немецких радиоприёмников до производства акустики под брендами Arslab, Old School, Penaudio и ICE. О работе радиогиганта, самых интересных его продуктах и судьбе его основателей — наш материал.

  • Arslab: точный расчет как искусство. Фоторепортаж с завода «Аудиомании» в Риге, где создают колонки Arslab. Предлагаем заглянуть на производство и познакомиться с компанией подробнее. Экскурсия посвящена этапам изготовления и сборки акустических систем. Вы узнаете, какие материалы используются для колонок и увидите весь цикл производства.

  • «Из Австрии с любовью»: знакомство с AKG. В первые годы существования компания AKG занималась исключительно производством микрофонов. Расскажем о том, как эти австрийцы проделали путь от неизвестности до контракта с организаторами Олимпийских игр.

  • История бренда Sennheiser: свобода и визионерство. «Лаборатория в Веннебостеле» (Laboratorium Wennebostel) — таким было первое название Sennheiser. Поговорим об основных вехах в истории компании, её опередивших время продуктах, и разработках в сфере стереозвука.

  • «Инновационный консерватизм»: История Bang & Olufsen. Рассказ об одной из старейших компаний по производству аудиотехники класса Hi-End. Подход датчан Bang & Olufsen к производству аудиотехники всегда заключался в сочетании традиций и инноваций. В материале мы рассказываем об этом подробнее, а также делимся подкастом компании о «шумовом космосе».

  • История бренда Ortofon: от звукового кино к головкам звукоснимателей.
    Обзор ещё одного датского бренда. Известность пришла к Ortofon в конце 1940-х годов, с изобретением винилового звукоснимателя с подвижной катушкой. А начинала компания с разработки техники для озвучки кино. В материале разбираемся в принципах создания картриджей и задачах, которые стояли перед инженерами того времени. Интересующиеся компанией могут посмотреть небольшое видео о её 95-летней истории.

  • История компании Penaudio. Рассказ о воплощении в реальность мечты Сами Пенттилы о качественном звуке. Он основал бренд Penaudio, известный своим «правдоподобным и комфортным звучанием». После прочтения вы узнаете о первых экспериментах основателя с громкоговорителями, рождении концепции Penaudio и северных традициях отделки древесины для колонок.



Возвращение технологий





Фото Maria Eklind / CC
  • Возвращение эпохи винила. Портленд известен как хипстерская Мекка. Не удивительно, что именно там меломан Марк Рейни запустил производство виниловых пластинок. В этой статье он и представители музыкального ритейла обсуждают возрождение индустрии винила. Вы узнаете почему заводы, выпускающие пластинки, отстают от плана и как взаимосвязаны рост спроса на винил и его качество.



Наш канал в Telegram — о гаджетах, звуке и музыке в микроформате:

Почему нас пугают звуки
Классика выходит в массы
Как сейчас зарабатывает поп-индустрия
Как звучит растительный мир
Краткая история рока

Let's block ads! (Why?)

Code of Conduct: почему разработчики ядра Linux угрожали удалить свой код — разбираемся в конфликте

В сентябре совет директоров Linux Foundation принял новый кодекс поведения для разработчиков ядра Linux — Code of Conduct (CoC). По задумке авторов, он должен был решить проблемы, связанные с дискриминацией, и улучшить эмоциональную обстановку среди разработчиков.

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


/ фото Liam Quinn CC

Предыстория


В середине прошлого месяца Линус Торвальдс объявил, что возьмет перерыв в управлении разработкой Linux. По словам Торвальдса, ему нужно время, чтобы обдумать свою манеру общения с людьми (создатель Linux известен резкими высказываниями в адрес коллег). В рассылке LKML он извинился перед всеми, кто покинул сообщество из-за его критики.

На время «отдыха» Линуса руководство на себя принял Грег Кроа-Хартман (Greg Kroah-Hartman), который занимается поддержкой стабильной версии ядра. Он и предложил принять новый кодекс поведения — Code of Conduct. Документ решили внедрить, чтобы изменить культуру общения в сообществе.

Code of Conduct основан на стандарте Contributor Covenant, который также используют разработчики Ruby on Rails, Swift, Golang и JRuby. Документ описывает правила поведения с другими программистами и делает упор на запрет любой дискриминации.

Разработчики против правил поведения


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

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

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

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

Существует ли угроза ядру Linux


«Легенда open source сообщества» Эрик Рэймонд (Eric Raymond) предположил, что недовольные разработчики действительно способны запретить использовать свой код в ядре Linux.

Операционная система выпускается под универсальной общественной лицензией GNUv2. Противники Code of Conduct cсылаются на то, что в ней нет пункта о запрете расторжения соглашения между автором кода и открытым проектом (в GNUv3 такой пункт есть). Поэтому они убеждены, что имеют право обязать совет Linux Foundation изъять код из ядра.


/ фото Matt Madd CC

И подобные прецеденты в open source сообществе уже были. Два года назад программист Азер Кочулу (Azer Koçulu) получил от юристов мессенджера Kik письмо, в котором они требовали переименовать модуль с таким же названием (kik), опубликованный в менеджере пакетов npm. Азер ответил отказом, и тогда представители Kik написали уже администрации npm. Те поддержали требование и сменили владельца kik без разрешения автора.

В ответ Кочулу отозвал все написанные им модули npm и залил на GitHub. Но среди них оказался один из популярных модулей left-pad, который состоял из одиннадцати строчек кода. Он нужен для работы Node.js, Babel и большого числа других систем.

Вот так выглядит код «модуля раздора»:

module.exports = leftpad;

function leftpad (str, len, ch) {
  str = String(str);

  var i = -1;

  if (!ch && ch !== 0) ch = ' ';

  len = len - str.length;

  while (++i < len) {
    str = ch + str;
  }

  return str;
}


Отзыв этого небольшого кода привел к ошибкам в работе мировых сервисов.

Тем не менее программист и создатель лицензии GNU Ричард Столлман (Richard Stallman) говорит, что с ядром Linux будет другая история. Якобы этот код нельзя так просто взять и отозвать. В тексте GNU сказано, что разработчик программы позволяет другим копировать, модифицировать или распространять её код. И это право нельзя отнять.

Слова Столлмана уточнили юристы из некоммерческой организации Software Freedom Conservancy, которая создала руководство по лицензии GNU. Они опубликовали пояснение, в котором проанализировали текст соглашения. По их словам, создатель приложения или утилиты не может вынудить пользователей удалить её. Однако может запретить распространять свой код в будущем.

Также юристы написали, что отменить согласие на использование кода нельзя из-за принципа эстоппеля, или promissory estoppel. Этот международный принцип запрещает расторгать устное соглашение, если это нанесет ущерб другой стороне. Запрет на использование кода определённо выльется в большие проблемы для множества компаний. Поэтому в Software Freedom Conservancy считают, что исход с отзывом кода маловероятен.

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



P.S. Про IaaS и технологии виртуализации — в нашем Telegram-канале:

Let's block ads! (Why?)

Символьное решение линейных дифференциальных уравнений и систем методом преобразований Лапласа c применением SymPy

[Из песочницы] Как Vim украл моё сердце

Думаю, видно из названия, что сегодня мы будем рассуждать о Vim! Что это такое? Зачем это нужно? Как этим пользоваться?

Многие, читавшие мою прошлую стать могли воскликнуть:

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

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

Начнём с того, что, нет, Vim не старый — ему всего 27 лет. Он является наследником классического редактора Vi. Он лучше адаптирован под современные системы и обладает более широким спектром возможностей. Иными словами, своё название (Vi Improved) полностью оправдывает. Хочу также отметить, что есть ещё более новая реализация тех же идей — neovim.

В чём же разница?

Если глянуть на Youtube разные видео на эту тему, то там в основном говорят о метафизической составляющей вопроса. То есть о о разнице в идеологиях, путях развития проектов и тому подобное. Для конечного пользователя принципиальных различий нет. Однако два момента можно уточнить: некоторые плагины проще установить в neovim, в довесок к отделению пользовательского интерфейса от самого ядра программы. Про второе сейчас подробнее поясню.

Думаю, среди вас найдутся такие люди (и кошки), которые на предложение перейти на другой редактор всегда отвечают примерно так:

Что же, neovim спешит на помощь! Благодаря ему сейчас во многих современных IDE и «программистских блокнотах» есть эмулятор функциональности Vim. Таким образом вы можете продолжать пользоваться своим любимым Sublime Text или CLion со всеми вашими плагинами, заодно заметно увеличив свою производительность в плане написания кода, и начав получать от этого больше удовольствия (об этом позднее). Также это хорошее средство для повышения ЧСВ, ведь «настоящие хакеры пользуются либо Vim, либо Emacs».

«Хорошо, я решил попробовать изучить какой-нибудь винтажный редактор, но почему именно Vim, а не хотя бы тот же Emacs?» Ну, это вопрос неоднозначный. Emacs является более мощным решением, которое может всё (в нём можно даже в змейку играть). Однако, эта его сильная сторона также является его слабостью. Он слишком обширный и комплексный, что выливается в более высокую сложность освоения и требовательность к железу. Последний аргумент может сейчас прозвучать глупо, ибо он тоже является консольным редактором, но в ряде задач (как то удалённое подключение по SSH) этот момент может оказаться критичным.


(Пользователи Emacs после этих строк)

Хорошо, мы разобрались в том, что такое Vim, но осталось понять зачем и как им пользоваться.

«Почему Vim так всем понравился, что его добавляют куда только можно и даже куда нельзя?» (Кстати, в Emacs он тоже есть. Мне всё больше кажется, что проще перечислить вещи, которых там нет, но это уже не по теме.) Ответ и на этот вопрос является несложным — его философия.

Нельзя в VIM просто взять и начать печатать текст. Для этого есть отдельный режим — «Insert mode». Вы же при запуске программы попадаете в обычный режим, в котором вам предоставляется возможность набирать команды для редактирования текста и переключаться между разными режимами работы этого редактора. «Но ведь это неудобно! Я хочу просто печатать текст!» Чисто технически, для этой задачи подойдёт и печатная машинка, но я всё же отвечу без сарказма. Если большинство редакторов делает акцент на написании кода, то Vim его смещает на редактирование текста и делает это по-своему.


(На самом деле, у этой картинки есть глубокий подтекст. Если найдётся минутка, то почитайте про серию японских РПГ Persona.)

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

Давайте рассмотрим пару примеров, но сначала держите ещё картинку (на этот раз с чем-то полезным):

1). d2w
==> Delete two words.

2). AMew<Esc>
==> Append to the end of the line «Mew» and return to the normal mode.

3). f(ci(Pakahontas<Esc>
==> Find a pair of brackets and change their inner content to «Pakahontas» and return to normal mode.

Видите? Абсолютно ничего сложного! Безусловно, такой подход требует привыкания и постоянной практики, так как просто выучить все комбинации нельзя — их надо прочувствовать. Я пишу код в Vim не потому, что он в нём быстрее набирается (я и так печатаю медленно, как вы могли заметить, и вслепую не умею), а потому что он более естественный. Вместо кучи ctrl, shift или alt (команды с ними есть, но их мало) очень понятный и, самое главное, человечный язык редактирования.


(Неожиданно, не так ли?)

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

I. Несмотря на то, что в Vim можно пользоваться стрелочками и мышкой (второе настраивается в файле "~/.vimrc"), это строго не рекомендуется. В нём есть море более интересных команд для перемещения курсора по тексту (и экрану), только они уже не такие интуитивные, как команды для редактирования и их придётся зубрить.


(It's hacking time!)

II. В Vim, как и во многих других редакторах, есть командный режим, который вызывается при нажатии на клавишу ':'. Символ '!' имеет в нём двойственное значение:

а) Если он стоит сразу после ':', то после него может следовать полноценная команда для терминала. Хотя некоторые из них дублируются в качестве команд самого редактора, это может быть полезно, например, для вызова компилятора.

б) Если он стоит после команды Vim, то он её выполнит, не сохраняя изменения в файле. С этим, кстати, связан один баг (или, если хотите, особенность) — если вы что-либо делали с текстом, то, даже если вы вернёте его в первоначальное состояние, редактор не закроется, если вы в нём не сохранитесь или не укажете '!'.


(Вы уже прочувствовали как Vim заботится о ваших данных?)

III. Разные настройки редактора и плагинов можно изменять в вышеупомянутом "~/.vimrc". Там настроек на любой вкус и цвет, только их в самом файле нет. По умолчанию там пусто. Для того, чтобы найти нужные вам параметры, воспользуйтесь командой ":help". Можете после неё добавить имя конкретного компонента или плагина, чтобы сразу перейти к интересующей вас информации. Но, конечно, интернет в этом плане поудобнее будет.

IV. Есть несколько команд в Vim (например 'q'), которые рассчитаны на определение (в "~/.vimrc") пользователем. Однако, если попробовать задать им значение напрямую, то срабатывать они будут с задержкой, так как они ожидают вторую команду после себя (именно их и стоит определять). Если вам нужна именно однокнопочная команда, я вам рекомендую использовать 's', т.к. её функционал практически от 'c' не отличается. «Substitute» можно заменить, так сказать.

V. Команда '.' обладает в это редакторе невероятной мощью. Она умеет повторять предыдущую команду (или целое предложение из них). В принципе, если вы не хотите записывать макрос, то она является прекрасным средством для заполнения кода «чебуреками»:

VI. Мне Vim чем-то напоминает старые 48-и килобайтные компьютеры ZX Spectrum. В них тоже были однокнопочные команды, но они были именно для языка программирования Basic. Таким образом разработчики попытались сократить необходимое для работы программы количество оперативной памяти.

В качестве обучающего материала, рекомендую программу vimtutor. Чисто технически, она просто открывает в Vim файлик с кратким туториалом, но такой подход позволяет практиковаться параллельно с изучением теоретической части. А дальше практика, практика и, ещё раз, практика!

Ну вот, собственно, всё, что мне хотелось о Vim сказать. Честно говоря, я нахожусь в полном восторге от этого редактора. Его философия очень заразительна и похожа на систему Unix в целом (всё просто, понятно и логично, но требует привыкания и запоминания). Поэтому если вы ищете себе хороший текстовый редактор или желаете получить редактирования текста новый опыт, то лучше места вы не найдёте.

Счастья вам, здоровья, и чтобы KDE не падали!

Источники
1) По теме:
а) Собственно, vimtutor
б) Картинка с клавиатурой была взята с сайта viemu
в) Также мною был прочитан викиучебник на эту тему
2) Не по теме:
а) Про серию Persona на Youtube есть множество видео с их подробным анализом. Наверное, наибольшую ценность представляют ролики с какала Filinov's Place, но автор пока остановился на второй второй части (это не описка).
б) Про Spectrum недавно записал хорошее видео Дмитрий Моисеев
в) Автор рисунка с моей аватарки — Fluff-Kevlar

Let's block ads! (Why?)