• «Не влезай, убьет!» или вся правда о безопасности АСУ ТП

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

      Мы решили собрать наш опыт защиты АСУ ТП и рассказать о самых частых проблемах и популярных мифах о безопасности в данной области.

      Читать дальше →
    • Как устроена Алиса. Лекция Яндекса

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


        — Я расскажу, что внутри у Алисы. Алиса большая, в ней много компонент, поэтому я немного поверхностно пробегусь.
        Читать дальше →
      • Концепция 3D принтера печатающего металлом с большим разрешением и огромной скоростью

          В очередной раз, рад приветствовать, уважаемое сообщество!

          Пару лет назад я начал поиски простой технологии производства прецизионных изделий из металла. Так в «фоновом режиме» я изучал разные технологии обработки металлов, разные методы создания металлических изделий, от литья до фотолитографии, от токарного станка до установки ЭХО.

          Не найдя технологии удовлетворяющую всем моим требованиям (в основном из-за цены), я решил подумать над собственной, которую и представляю на ваш суд, под катом. Обращаю внимание, что это пока всего лишь концепция, а не готовый продукт.
          Так же приглашаю всех желающих поучаствовать в проекте по реализации этой концепции в жизнь, подробности в конце статьи.
          Читать дальше →
          • +21
          • 7,1k
          • 9
        • Миром всё ещё управляет язык С

          • Перевод
          Многие из проектов на языке С, существующих сегодня, начинали разрабатываться ещё десятилетия назад. Операционная система UNIX стартовала 1969 году (и писалась на ассемблере), но уже в 1972 была переписана на С. Точнее, это язык С был создан для того, чтобы появилось что-то, на что было бы удобно переписать с ассемблера ядро UNIX и получить чуть более высокоуровневый код, менее зависимый от архитектуры и позволяющий выполнять больше полезной работы на каждую строчку написанного кода.

          Разработка базы данных Oracle началась в 1977 году (тоже на ассемблере) и тоже была переписана на С в 1983 году. К тому времени это был уже один из самых популярных языков в мире.

          В 1985 году вышла Windows 1.0. Хотя код операционной системы Windows не является открытым, общеизвестно, что ядро в основном написано на С с небольшими вставками ассемблера. Разработка Linux началась в 1991 году и началась сразу на С. В следующем году она была опубликована под лицензией GPL и использована как часть GNU Operating System, которая и сама начиналась как проект на С и Lisp, так что многие компоненты были написаны на С.

          Но проекты на С — это не только то, что стартовало десятилетия назад, когда выбор языков, скажем прямо, был достаточно ограничен. Много С-кода пишется и сейчас, на нём начинаются и новые проекты. Для этого есть причины.

          Как именно язык С управляет миром?

          Читать дальше →
        • В 20 раз дешевле, в 2,5 раза точнее и вдвое удобнее

            Приветствую, уважаемое сообщество!

            Сегодня ровно год, как я написал первый пост на Хабре. Второй и до этого момента крайний пост, я написал примерно через неделю и…

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

            Так вот, в честь юбилея моего присутствия на Хабре, я решил написать серию статей, в которой расскажу о некоторых проектах и разработках, сделанных в ходе работы над этими проектами. Конечно, я буду рассказывать только о разработках, которые по тем или иным причинам не принял заказчик (соответственно все права на интеллектуальную собственность принадлежат мне) или которые я делал вне проектов, для себя. И естественно, все проекты будут технической направленности, это около 40% всех проектов (остальные относятся к области маркетинга, HR, экономики).

            Долго думать с какого проекта начать, не пришлось, логично начать с самого первого проекта. Тем более решение, которое я опишу, получилось действительно эффективное и простое (у Трабл-шутеров часто решения на столько простые, что заказчик хватается за голову: «Как же я сам не догадался?»). В теме поста нет никакого обмана, действительно разработанное оборудование получилось минимум в 20 раз дешевле аналогов (для некоторых брендов конкурентов, этот показатель достигает и 40х), в 2,5 раза точнее и значительно удобнее.

            И так, как вы уже поняли разрабатывали мы в этом проекте не ПО, не процессы, а оборудование (железку). Под катом вы узнаете все подробности о проекте.
            Читать дальше →
          • Применение моделей CatBoost внутри ClickHouse. Лекция Яндекса

              В каких ситуациях удобно применять предобученные модели машинного обучения внутри ClickHouse? Почему для такой задачи лучше всего подходит метод CatBoost? Не так давно мы провели встречу, посвящённую одновременному использованию этих двух опенсорс-технологий. На встрече выступил разработчик Николай Кочетов — его лекцией мы и решили с вами поделиться. Николай разбирает описанную задачу на примере алгоритма предсказания вероятности покупки.


              — Сначала о том, как устроен ClickHouse. ClickHouse — это аналитическая распределенная СУБД. Она столбцовая и с открытым исходным кодом. Самое интересное слово здесь — «столбцовая». Что оно значит?
              Читать дальше →
              • +24
              • 5,4k
              • 3
            • Ммм, длинные выходные!
              Самое время просмотреть заказы на Фрилансим.
              Мне повезёт!
              Реклама
            • Лучшая архитектура на базе Docker и Kubernetes — миф или реальность?

                Как изменился мир разработки ПО в эпоху Docker и Kubernetes? Можно ли построить архитектуру один раз и навсегда на базе этих технологий? Возможно ли унифицировать процессы разработки и интеграции, когда все "упаковано" в контейнеры? Какие требования предъявляются таким решениям? Какие ограничения несут они с собой? Упростят ли они жизнь простым разработчикам или сделают её тяжелее?



                Пришло время ответить на все эти и не только эти вопросы! (В тексте и оригинальных иллюстрациях)

                Читать дальше →
              • Как и почему мы переосмыслили поисковое поле ввода Яндекса

                  Мы уже дважды рассказывали про наши поисковые подсказки: первый пост вышел аж в 2012 году, второй же случился совсем недавно.



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


                  1. «Расширяющееся» поле ввода


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


                  Удивительно, что поисковые системы полностью проигнорировали этот тренд. А ведь длинные запросы составляют значительную часть потока. Скажем, запросы, содержащие более семи слов, составляют до 10% всего потока запросов к Яндексу!

                  Читать дальше →
                • «Оч.умелые ручки»: делаем Tableau/Qlik из R и «синей изоленты»

                    Является продолжением предыдущих публикаций.


                    Естественно, что название является потешным, но, как хорошо известно, в каждой шутке есть доля правды. Сама тема возникла, когда в очередной сотый раз пришлось слышать настойчивое пожелание о том, что необходим «гибкий конструктор отчетов/графиков». После определенного момента проще взять и сделать, чем в очередной раз объяснять, что tidyverse покрывает все необходимые потребности.



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


                    • интерфейс с большим-большим количеством менюшек и кнопочек, с множественными закулисными IF для управления взаимными состояниями этих элементов;
                    • «гибкий плоттер» с большим количеством вложенных IF для отрисовки графиков в соотвествии со скормленным данными и положением кнопочек-ползунков, выставленных в UI.

                    С одной стороны делать «Yet Another Tableau» совершенно неинтересно. С другой стороны, постановка в стиле «сделать так, чтобы все было, но ничего не надо делать» — типичная задача для ТРИЗ.


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



                    Две ключевых идеи по упрощению задачи следующие (ничего нового, все уже придумано до нас):


                    1. вместо статически заданного UI переходим к динамически генерируемому;
                    2. используем интерпретатор R не только для исходного кода, но и внутри самого кода.

                    Идея 1. Динамический web-интерфейс


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


                    Сделаем по-другому. Вместо UI элементов со сложным поведением раскидываем с помощью uiOutput placeholder-ы, в которые динамически рассчитываем и генерируем с помощью shiny::renderUI представление этого элемента. Все внешние параметры, требуемые для генерации элемента, трактуем как реактивные элементы (reactive). При этом все такие интерактивные элементы выступают в качестве «автономных агентов», которые смотрят на окружение и подстраиваются под него. Пользователь изменил состояние одного элемента — все зависимые стали пересчитывать по очереди свое состояние (мы явно не обрабатываем события, а используем реактивный подход shiny). При изменении их состояния могут возникнуть новые индуцированные изменения. И так, пока все не стабилизируется.


                    В результате, в коде остается только один обработчик (кнопка «Go»)
                      observeEvent(input$gen_plot, { # код демонстрирует принцип
                    
                        escname <- function(x){
                          # имена колонок надо закавычить
                          # .....
                        }
                    
                        point_code <- ""
                        if(input$shape_type!="__NO_MAPPING__") {
                          aes <- c("shape"=escname(input$aes_shape_col), "color"=escname(input$aes_color_col))
                          point_code <- buildPointCode(fixed=c("shape"=input$shape_type, "color"=glue("'{input$plot_color}'")), aes=aes)
                        }
                    
                        line_code <- ""
                        if(input$line_type!="__NO_MAPPING__") {
                          aes <- c("linetype"=escname(input$aes_linetype_col), "color"=escname(input$aes_color_col))
                          line_code <- buildLineCode(fixed=c("linetype"=input$line_type, "color"=glue("'{input$plot_color}'")), aes=aes)
                        }
                    
                        gcode <- glue("ggplot(data_df(), aes(x=`{input$x_axis_value}`, y=`{input$y_axis_value}`))\\
                                      {point_code} {line_code} + xlab('{input$x_axis_label}')") %>%
                          style_text(scope="spaces")
                    
                        plot_Rcode(gcode)
                      })  
                    Читать дальше →
                  • Динамическая идентификация объектов управления

                      Введение


                      Идентификация объектов управления — совокупность методов для построения математических моделей объекта по данным наблюдений.

                      Математическая модель в данном контексте означает математическое описание поведения какого-либо объекта или процесса в частотной или временной области, к примеру, физических процессов (движение механической системы под действием внешней силы [1]), экономического процесса (влияние смены курса валют на потребительские цены на товары [2]).

                      В настоящее время эта область теории управления находит широкое применение на практике и поэтому интересна для рассмотрения.

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

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