• Что в Белизне тебе моей или Справочное пособие по гипохлориту натрия («хлорке»)

    • Tutorial
    Не передать, насколько мне приятно это писать. Данная статья полностью профинансирована подписчиками канала LAB66. Ни один производитель описанных в тексте средств -  своего участия не проявил, так что никакой скрытой рекламы, чиcтый альтруизм и потребительский интерес :)

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


    Даешь нормальную Белизну!
  • Коронавирус 2019-nCoV. FAQ по защите органов дыхания и дезинфекции

    • Tutorial
    Китайский коронавирус, он же «пневмония Уханя» на неделе стал одной из самых горячих тем. В классической «кто виноват и что делать» меня, традиционно, волнует только вторая часть. Сегодня под катом — статья про дезинфекцию, маски и обеззараживание помещений. Объединил в одной статье несколько заметок из своего телеграм-канала. Кладем в закладки и шлем друзьям!


    Стоп! 2019-nCoV
  • Коронавирус: филогения, курение, летальность и снижение рисков заболеть



      Есть ощущение, что про эпидемию COVID-19 сейчас вещают из каждого утюга. В этом плане Хабр радует хорошими постами с нормальными источниками и конструктивным обсуждением. Я тоже решила поделиться свежими препринтами на тему экспрессии ACE2 у укуренных мышей, особенностями генетики и эволюции вируса, а также рекомендациями о снижении рисков заболеть. И ещё поскольку мы занимаемся средствами для глаз в лаборатории, меня просто достали вопросами, что помогает. Если коротко — лучше всего помогает пакет на голову.
      Читать дальше →
    • 9 четких инструментов для изучения и прокачки английской лексики



        В Оксфордском словаре английского языка почти 450 000 слов! Но если вы учите язык как иностранный, их совсем не нужно запоминать все и сразу.

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

        В этой статье мы собрали 9 шикарных инструментов, которые помогут вам учить английские слова и сделают учебную рутину интереснее. Не будем долго рассусоливать, погнали!
        Читать дальше →
      • Помоги компилятору помочь тебе

          Предисловие


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


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


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

          Читать дальше →
        • Загрузка NumPy-массивов с диска: сравнение memmap() и Zarr/HDF5

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



          В такой ситуации можно прибегнуть к двум классам инструментов:

          • Метод NumPy memmap(), прозрачный механизм, который позволяет воспринимать файл, расположенный на диске, так, будто он весь находится в памяти. 
          • Похожие друг на друга форматы хранения данных Zarr и HDF5, которые позволяют, по необходимости, загружать с диска и сохранять на диск сжатые фрагменты массива.

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

          Материал, перевод которого мы сегодня публикуем, посвящён разбору особенностей этих методов работы с данными, и рассказу о том, в каких ситуациях они могут пригодиться. В частности, особое внимание будет уделено форматам данных, которые оптимизированы для выполнения вычислений и необязательно рассчитаны на передачу этих данных другим программистам.
          Читать дальше →
          • +32
          • 3,7k
          • 3
        • WireGuard — быстрый и безопасный VPN в ядре Linux


            Рис. 1. OpenVPN vs WireGuard, тест Ars Technica

            WireGuard — свободный и открытый протокол виртуальных частных сетей, призванный заменить IPsec и OpenVPN. В январе 2020 года после полутора лет доработки кода всё-таки состоялось долгожданное событие — Линус Торвальдс принял VPN WireGuard в основную ветку Linux 5.6.

            Очень скоро этот VPN станет частью ядра Linux — сердца операционной системы с открытым исходным кодом, на которой работает весь мир, от веб-серверов до телефонов Android и автомобилей. Это действительно важное событие, потому что WireGuard устроен на порядок проще и логичнее предыдущих VPN. В июне 2019 года получено автоматизированное криптографическое доказательство математики протокола.
            Читать дальше →
          • Сканирующее окно по массивам NumPy

              CoLab блокнот с примерами.


              Возможно сделать скользящее окно (rolling window, sliding window, moving window) по массивам NumPy на языке программирования Python без явных циклов. В данной статье рассматривается создание одно-, двух-, трех- и N-мерных скользящих окон по массивам NumPy. В результате скорость обработки данных увеличивается в несколько тысяч раз и сравнима по скорости с языком программирования С.


              Cкользящее окно применяется в: обработке изображений, искусственных нейронных сетях, интернет протоколе TCP, обработке геномных данных, прогнозировании временных рядов и т.д.


              Отказ от ответственности: в исходном коде могут быть ошибки! Если вы видите ошибку, пожалуйста, напишите мне.


              Читать дальше →
              • +18
              • 4,6k
              • 5
            • Задержать COVID-19. Все про фильтрацию воздуха на случай пандемии

              • Tutorial
              По материалам из телеграм-канала LAB66 и присоединенного к нему чата.

              Это время для фактов, а не для страха. Это время для науки, а не слухов. Это время солидарности, а не охоты на ведьм…
              директор ВОЗ Tedros Adhanom Ghebreyesus про эпидемию COVID-19
              Прошло немного времени с момента публикации моей статьи про респираторную защиту во время эпидемии. За это время, отчасти благодаря активному обсуждению в «приканальном» чате выработалась некоторая система, которой бы я хотел поделится и с читателями хабра. Вынудило меня написать эту статью то, что из-за коронавируса поднялся нездоровый хайп, на волне которого на поверхность начала всплывать совсем не та информация, которая всплывать должна была бы (равно как и внезапно подскочили до х40 раз цены на респираторы, притом все без разбора). Так что нужно расставить точки над i. Под катом читаем про подбор правильного респиратора, про сборку кастомных фильтров и стерилизацию зараженных средств защиты. Ответы на вопросы.

              Грантовая поддержка исследования
              Фактически, в роли «научного грантодателя» для этой статьи выступают мои «меценаты» с Patreon. Благодаря им все и пишется. Поэтому и ответ они могут получить раньше всех других, и черновики увидеть, и даже предложить свою тему статьи. Так что, если интересно то, о чем я пишу и/или есть что сказать — поспешите стать моим «патроном» (картинка кликабельна):



              Статью же настоятельно рекомендую «в закладки». Буду рад любому посильному распространению статьи. Краткий итоговый FAQ — в конце статьи.


              Собираем полумаску под себя!
            • Transformer в картинках

              • Перевод

              В прошлой статье мы рассматривали механизм внимания (attention) – чрезвычайно распространенный метод в современных моделях глубокого обучения, позволяющий улучшить показатели эффективности приложений нейронного машинного перевода. В данной статье мы рассмотрим Трансформер (Transformer) – модель, которая использует механизм внимания для повышения скорости обучения. Более того, для ряда задач Трансформеры превосходят модель нейронного машинного перевода от Google. Однако самое большое преимущество Трансформеров заключается в их высокой эффективности в условиях параллелизации (parallelization). Даже Google Cloud рекомендует использовать Трансформер в качестве модели при работе на Cloud TPU. Попробуем разобраться, из чего состоит модель и какие функции выполняет.


              Впервые модель Трансформера была предложена в статье Attention is All You Need. Реализация на TensorFlow доступна как часть пакета Tensor2Tensor, кроме того, группа NLP-исследователей из Гарварда создали гид-аннотацию статьи с реализацией на PyTorch. В данном же руководстве мы попробуем максимально просто и последовательно изложить основные идеи и понятия, что, надеемся, поможет людям, не обладающим глубоким знанием предметной области, понять данную модель.

              Читать дальше →
              • +16
              • 5,6k
              • 2
            • Обучение и оценка модели с Keras

              • Перевод
              • Tutorial


              Это руководство охватывает обучение, оценку и прогнозирование (выводы) моделей в TensorFlow 2.0 в двух общих ситуациях:

              • При использовании встроенных API для обучения и валидации (таких как model.fit(), model.evaluate(), model.predict()). Этому посвящен раздел «Использование встроенных циклов обучения и оценки»
              • При написании кастомных циклов с нуля с использованием eager execution и объекта GradientTape. Эти вопросы рассматриваются в разделе «Написание собственных циклов обучения и оценки с нуля».

              В целом, независимо от того, используете ли вы встроенные циклы или пишете свои собственные, обучение и оценка моделей работает строго одинаково для всех видов моделей Keras: Sequential моделей, созданных с помощью Functional API, и написанных с нуля с использованием субклассирования.
              Читать дальше →
              • +21
              • 8,5k
              • 3
            • Новостной дайджест событий из мира FPGA/ПЛИС — №001 (2020_01)

                Здравствуйте, друзья.

                Пришла в голову мысль опубликовать последние события за месяц (январь 2020) из мира FPGA/ПЛИС. Ниже списком приведены несколько ссылок на новости, анонсы, вебинары, воркшопы, туториалы, видео и тд. Если данный формат будет интересен, будем собирать новости по крупицам из интернета. Подобные новостные дайджесты есть, например, на хабе про php, почему бы и не сделать что-то подобное и для ПЛИС?


                Читать дальше →
              • Пережевывая логистическую регрессию

                • Tutorial


                В этой статье, мы будем разбирать теоретические выкладки преобразования функции линейной регрессии в функцию обратного логит-преобразования (иначе говорят, функцию логистического отклика). Затем, воспользовавшись арсеналом метода максимального правдоподобия, в соответствии с моделью логистической регрессии, выведем функцию потерь Logistic Loss, или другими словами, мы определим функцию, с помощью которой в модели логистической регрессии подбираются параметры вектора весов $\vec{w}$.

                План статьи:

                1. Повторим о прямолинейной зависимости между двумя переменными
                2. Выявим необходимость преобразования функции линейной регрессии $ f(w,x_i) = \vec{w}^T \vec{x_i}$ в функцию логистического отклика $\sigma(\vec{w}^T \vec{x_i}) = \frac{1}{1+e^{-\vec{w}^T \vec{x_i}}}$
                3. Проведем преобразования и выведем функцию логистического отклика
                4. Попытаемся понять, чем плох метод наименьших квадратов при подборе параметров $\vec{w}$ функции Logistic Loss
                5. Используем метод максимального правдоподобия для определения функции подбора параметров $\vec{w}$:

                  5.1. Случай 1: функция Logistic Loss для объектов с обозначением классов 0 и 1:

                  $L_{log}(X,\vec{y},\vec{w}) = \sum\limits_{i=1}^n(-y_i \mkern 2mu log_e \mkern 5mu \sigma(\vec{w}^T \vec{x_i}) - (1-y_i) \mkern 2mu log_e \mkern 5mu (1 - \sigma(\vec{w}^T \vec{x_i})) ) \rightarrow min$



                  5.2. Случай 2: функция Logistic Loss для объектов с обозначением классов -1 и +1:

                  $L_{log}(X,\vec{y},\vec{w}) = \sum\limits_{i=1}^n \mkern 2mu log_e \mkern 5mu (1+e^{-y_i\vec{w}^T\vec{x_i}}) \rightarrow min$

                Читать дальше →
              • Как преодолеть страх и начать использовать Azure Machine Learning

                  Я знаю многих Data Scientist-ов — да и пожалуй сам к ним отношусь — которые работают на машинах с GPU, локальных или виртуальных, расположенных в облаке, либо через Jupyter Notebook, либо через какую-то среду разработки Python. Работая в течение 2 лет экспертом-разработчиком по AI/ML я делал именно так, при этом подготавливал данные на обычном сервере или рабочей станции, а запускал обучение на виртуалке с GPU в Azure.


                  Конечно, мы все слышали про Azure Machine Learning — специальную облачную платформу для машинного обучения. Однако после первого же взгляда на вводные статьи, создаётся впечатление, что Azure ML создаст вам больше проблем, чем решит. Например, в упомянутом выше обучающем примере обучение на Azure ML запускается из Jupyter Notebook, при этом сам обучающий скрипт предлагается создавать и редактировать как текстовый файл в одной из ячеек — при этом не используя автодополнение, подсветку синтаксиса и другие преимущества нормальной среды разработки. По этой причине мы долгое время всерьез не использовали Azure ML в своей работе.


                  Однако недавно я обнаружил способ, как начать эффективно использовать Azure ML в своей работе! Интересны подробности?


                  Читайте дальше
                • Создание динамических параметров в Jenkins job, или как сделать вашу задачу user-friendly

                  Доброго времени суток, Хабр!


                  Сегодня я хотел бы поделиться одним из способов, как с помощью Active Choices Plugin сделать задачу в Jenkins наиболее унифицированной и понятной для пользователя.


                  Введение


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


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


                  В нашем случае мы будем использовать Jenkins.

                  Читать дальше →
                • Как я учу детей Питону

                  image

                  Моя основная работа связана с данными и программированием на R, но в этой статье я хочу рассказать про своё увлечение, которое даже приносит некий доход. Мне всегда было интересно рассказывать и объяснять что-то друзьям, одноклассникам и однокурсникам. Ещё мне всегда просто было находить общий язык с детьми, не знаю, почему. Вообще, я считаю, что воспитание и обучение детей это одно из важнейших занятий из всех, да и жена у меня педагог. В общем, примерно год назад я дал объявление в местной группе на фейсбуке, набрал группу и стал преподавать скратч и питон раз в неделю. Сейчас у меня пять групп, свой класс в доме и индивидуальные занятия. Как я дошёл до жизни такой и как именно я учу детей, я раскажу в этой статье.
                  Читать дальше →
                • SVM. Объяснение с нуля и реализация на python. Подробный разбор метода опорных векторов

                    Привет всем, кто выбрал путь ML-самурая!


                    Введение:


                    В данной статье рассмотрим метод опорных векторов (англ. SVM, Support Vector Machine) для задачи классификации. Будет представлена основная идея алгоритма, вывод настройки его весов и разобрана простая реализация своими руками. На примере датасета $Iris$ будет продемонстрирована работа написанного алгоритма с линейно разделимыми/неразделимыми данными в пространстве $R^2$ и визуализация обучения/прогноза. Дополнительно будут озвучены плюсы и минусы алгоритма, его модификации.


                    image
                    Рисунок 1. Фото цветка ириса из открытых источников

                    Читать дальше →
                    • +50
                    • 16,8k
                    • 4
                  • Пишем драйвер для ноутбука for fun and profit, или как закоммитить в ядро даже если ты дурак

                    С чего всё началось


                    Начнём с постановки проблемы. Дано: один ноутбук. Новый ноутбук, геймерский. С RGB-подсветкой. Вот такой примерно ноутбук:

                    image
                    Картинка взята с lenovo.com

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

                    Одна только проблема – программа под Windows, а хочется чтоб в любимом линуксе всё работало. И лампочки чтоб светились, и чтоб цвета красивые мелькали. Да вот только как это сделать, чтоб без реверс-инжиниринга и без написания своих драйверов? Простой ответ пришёл быстро – никак. Ну что ж, пошли писать драйвер.
                    Читать дальше →
                  • Основы deep learning на примере дебага автоэнкодера, часть №1

                    • Tutorial

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


                    Their main claim to fame comes from being featured in many introductory machine learning classes available online. As a result, a lot of newcomers to the field absolutely love autoencoders and can't get enough of them. This is the reason why this tutorial exists!


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


                    На просторах интернетов есть очень много туториалов по автоэнкодерам, нафига писать еще один? Ну, если честно, тому было несколько причин:


                    • Сложилось ощущение, что на самом деле туториалов примерно 3 или 4, все остальные их переписывали своими словами;
                    • Практически все — на многострадальном MNIST'е с картинками 28х28;
                    • На мой скромный взгляд — они не вырабатывают интуицию о том, как это все должно работать, а просто предлагают повторить;
                    • И самый главный фактор — лично у меня при замене MNIST'а на свой датасет — оно все тупо переставало работать.

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


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

                    Читать дальше →
                  • Deep Reinforcement Learning: как научить пауков ходить


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


                    Основой решения является алгоритм Advantage Actor Critic (A2C) с оценкой Advantage через Generalized Advantage Estimation (GAE).


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


                    Читать дальше →