• Proposal: try — встроенная функция проверки ошибок

    • Перевод

    Краткое содержание


    Предлагается новая конструкция try, созданная специально для устранения if-выражений, обычно связанных с обработкой ошибок в Go. Это единственное изменение языка. Авторы поддерживают использование defer и стандартных библиотечных функций для обогащения или оборачивания ошибок. Это маленькое расширение подходит для большинства сценариев, практически не усложняя язык.


    Конструкцию try просто объяснить, легко реализовать, этот функционал ортогонален другим языковым конструкциям и является полностью обратно-совместимым. Он также является расширяемым, если мы захотим этого в будущем.


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

    Читать дальше →
  • Безопасность обновления программного обеспечения

    • Перевод

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


    TheUpdateFramework


    Безопасность


    Мы можем считать систему обновления ПО "безопасной", если:


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

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

    Читать дальше →
  • Непрерывные переходы между общими элементами: из RecyclerView во ViewPager

    • Перевод

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


    Целью этой статьи является предоставление гайдлайнов и реализации для определенных непрерывных переходов между фрагментами ОС Android. Мы продемострируем, как реализовать переход из картинки в RecyclerView в картинку внутри ViewPager и обратно, используя "общие элементы" (shared elements) чтобы определить, как и какие элементы участвуют в переходе. Мы также обработаем сложный случай перехода обратно в сетку после листания на странице к элементу, который в сетке изначально был за пределами экрана.


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



    Если вы хотите пропустить объяснение и сразу приступить к изучению кода, вы найдете его здесь.


    От переводчика. Далее будет довольно много кода и гифок (по прикидкам, мегабайт на 20).

    Читать дальше →
  • Django ORM — медленный? Оптимизируем (хардкорно)

      Наступила осень, и, несмотря на хорошую погоду, наши зрители потянулись за новым видеоконтентом. Бекенд-серверы, обслуживающие эмбеды с видео, стали упираться в CPU. С криками "а-а-а" прибежали системные администраторы и начали отбирать у отдела разработки ноутбуки и десктопы, грозясь поставить их в датацентры "на усиление". Разработке это конечно всё не понравилось и все поувольнялись с этой хренью решили что-нибудь сделать.

      Читать дальше →
    • Android и архитектура

      • Перевод

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


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


      Читать дальше →
      • +8
      • 23,2k
      • 2
    • Философия Channels

      • Перевод

      Прошло много времени с моего последнего поста о Channels, и вместе с этим много чего случилось — API разработано и стабилизировано, добавился функционал вроде "контроля за переполнением" (backpressure), ситуация с бекендами выглядит гораздо лучше, особенно после того, как слой взаимодействия локальных и удаленных машин стал немного взрослее.


      С другой стороны, однако, появилось недопонимание и озабоченность относительно направления, в котором развивается Channels; направления, которое этот проект задает для Django и Python. При разработке Channels пришлось касаться и даже бороться с моими собственными переживаниями об это направлении, выбирать правильный набор компромиссов — иногда даже из двух одинаково правильных вариантов.


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

      Читать дальше →
      • +7
      • 11,4k
      • 4
    • Чем заменить ELK для просмотра логов?

        Что обычно делает python-программист, когда его отправляют воевать с ошибкой?
        Сначала он лезет в sentry. Здесь можно найти время, сервер, подробности сообщения об ошибке, traceback и, может быть, какой-нибудь полезный контекст. Затем, если этих данных недостаточно, программист идет c бутылкой к админам. Те залезают на сервер, ищут это сообщение в файловых логах, и, может быть, находят его и некоторые предшествующие ошибке записи, которые в редких случаях могут помочь в расследовании.
        А что делать, если в логах только loglevel=ERROR, а ошибка настолько крута, что ее локализация требует сопоставления логики поведения нескольких различных демонов, которые запущены на десятке серверов?


        Решение — централизованное хранилище логов. В самом простом случае — syslog (за 5 лет, что был развернут в rutube, не использовался ни разу), для более сложных целей — ELK. Скажу честно, "ластик" — крут, и позволяет быстро крутить разнообразную аналитику, но вы интерфейс Kibana видели? Этой штуке так же далеко до консольных less/grep, как винде до линукса. Поэтому мы решили сделать свой велосипед, без Java и Node.js, зато с sphinxsearch и Python.

        Читать дальше →
      • О поиске видео замолвите слово

          Сегодня в этот погожий весенний денек хочется написать не только о поиске видео, но и о технической
          реализации работы со Sphinxsearch в нагруженном Django-проекте.


          Поиск


          Начать стоит, наверно, с постановки бизнес-задачи:


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

          А еще нефункциональные требования:


          • Django-проект с дофига просмотрами и постоянными обновлениями описаний видео
          • Инкапсуляция работы с поисковым движком в библиотеке и совместимость с остальными библиотеками на сайте (в первую очередь, Django REST Framework)

          Про то, как в Rutube используется sphinxsearch и будет данный рассказ.

          Читать дальше →
        • Списки с разными типами элементов и разными провайдерами данных

            Предисловие


            Однажды понадобилось мне выводить в одном ListView карточки разных типов, да еще и полученные с сервера по разным API. Мол, пусть пользователь порадуется и в одной ленте новостей увидит:
            • карточки видео, с тамнейлами и описаниями;
            • карточки авторов или тегов, с большой кнопкой «подписаться».

            Очевидно, что мастерить один большой layout, в котором учитывать все мыслимые варианты карточек — плохо, да и расширяться это будет так себе.



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



            Ну и чтобы жизнь медом не казалась, серверное API менять нельзя.
            Читать дальше →
          • Аудиофокус — управление доступом к звуковой подсистеме

            Это перевод статьи Respecting Audio Focus Kristan Uccello, Google Developer Relations

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