• Открытый курс машинного обучения. Тема 1. Первичный анализ данных с Pandas

    • Tutorial

    Старт открытого курса OpenDataScience


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




    Первая статья посвящена первичному анализу данных с Pandas.


    Всего в серии 10 статей, идущих вместе с тетрадками Jupyter (репозиторий mlcourse_open), соревнованиями и домашними заданиями.


    Далее идет список статей, описание курса и, собственно, первая тема – введение в Pandas.
    А вот Youtube-канал с видеозаписями лекций, первую лекцию можно посмотреть тут.

    Читать дальше →
  • Эволюция приложений или куда мы идем

      Называть статью «Эволюция прикладных информационных систем и перспективы развития их архитектуры» было бы слишком академично, а ведь тут будет очень краткая выжимка из реального практического опыта, возможные варианты развития технологий, вызвавшие их потребности и пути решения. Я надеюсь, что статья поможет обобщить и переосмыслить широкий круг задач, связанных с прикладными ИС, и сразу хочу уточнить, что понимаю под этими терминами. ИС — это системы, обеспечивающие обработку, передачу и хранение данных. Это далеко не все программирование, но сейчас ИС чаще всего ассоциируются с веб и мобильными приложениями, хотя и не совпадают с ними полностью, знак равенства между UI и ИС нельзя ставить тем более. Очень прошу всех посмотреть на вопрос как можно шире и присоединяться к обсуждению в комментариях. И еще, я намеренно не буду использовать названия фреймворков и технологий, чтобы избежать лишних холиваров, ограничившись общепринятыми названиями архитектур, стандартов и протоколов, что и вам рекомендую в комментариях.


      image

      Читать дальше →
    • Теория категорий для программистов: предисловие

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

      Я постараюсь в нескольких параграфах убедить вас, что эта книга написана для вас, и развеять все ваши сомнения в необходимости изучения этой, одной из самых абстрактных областей математики, в свое драгоценное свободное время.
      Читать дальше →
    • Node.js и JavaScript вместо ветхого веба

        Вступление


        Эта статья про экспериментальный технологический стек общего назначения. Она не просто дублирует мой доклад на конференции ОдессаJS 2016, но содержит все то, что в доклад не поместилось из-за недостатка времени и исключительного масштаба темы. Я даже перезаписал доклад голосом по тексту статьи и это можно послушать, а не читать. С этой темой я уже выступил в Уханьском Университете (Китай), а в Киевском Политехническом Институте провел целую серию семинаров в 2015-2016 годах. Основная идея состоит в том, что проблемы фрагментации технологий могут быть решены, если спроектировать весь технологический стек, сконцентрировавшись на структурах данных, синтаксисе и протоколе взаимодействия компонентов. Большинство вопросов несовместимости, отпадет само собой. Пусть даже этот подход будет альтернативным и экспериментальным, но его задача будет выполнена, если он наметит путь и продемонстрирует принципиальную возможность создания простого и элегантного решения общего назначения. Эта идея является естественным продолжением подхода Node.js, когда мы сокращаем количество языков и технологий в системе, разрабатывая и клиент и сервер на JavaScript. Несмотря на экспериментальность, протокол JSTP уже используется в коммерческих продуктах, например, для интерактивного телевидения компанией SinceTV, где позволяет подключить одновременно десятки миллионов пользователей. Это решение получило приз за инновации в области телевидения на международном конкурсе Golden Panda Awards 2015 в Ченду (Китай). Есть внедрения в сфере управления серверными кластерами, готовятся решения для медицины, интерактивных игр, электронной торговли и услуг.



        Слайды / Аудио версия


        Читать дальше →
      • Такая разная асинхронность

          Здравствуйте, меня зовут Дмитрий Карловский и я… многозадачный человек. В смысле у меня много задач и мало времени, чтобы их все уже, наконец, закончить. Отчасти это и к лучшему — всегда есть чем заняться. С другой стороны — пока ты разрываешься между проектами, мир катится куда-то не туда и некому забраться на броневик и призвать толпу остановиться и немного подумать. А вопрос-то серьёзный — долгое время мир JS был погружён в ад обратных звонков и с ними не только не боролись — их боготворили. Потом он чуть менее чем полностью погряз в обещаниях. Сейчас к ним с разных сторон усиленно вставляют подпорки разной степени кривизны. А света в конце тоннеля всё не видать. Но обо всём по порядку...


          Теория многозадачности


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


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


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


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

          Читать дальше →
        • Примеры кода с летней школы по Node.js и JavaScript в КПИ

          • Tutorial

          Товарищи инженеры, докладываю вам об успехах в подготовке научно-технических кадров в области программной инженерии на Факультете ИВТ в Киевском политехническом институте и публикую интересные примеры кода, которые были написаны для учебного курса, но будут, надеюсь, интересны и с практической точки зрения. Идея, внедрить JavaScript и Node.js в учебный процесс, вызревала у меня уже несколько лет. Но для освоения базовых вещей в программировании мне больше нравится C, чтобы люди прочувствовали машину, научились контролировать себя и свой код. А вот для прикладных задач, в которых уровень абстракции C уже не достаточно иллюстративен, мультипарадигменный и гибкий JavaScript прижился. При помощи мощного и простого API Node.js можно писать концептуальный код прямо на паре. Кроме того, знания JavaScript обязательно пригодятся на практике любому инженеру, работающему в ИТ. Часть кода, разработанного студентами курса, уже попала в серьезные Open Source проекты и это прекрасная практика, которую может повторить каждый, ведь лабораторные работы мы постепенно выкладываем на github и будем делать это и дальше, снабжая их методическими указаниями и не заботясь о том, что студенты будут списывать из форков, ведь все это нужно в первую очередь им самим. Эти материалы были использованы при подготовке порядка 300 студентов политехнического ВУЗа за 2015-2016 учебный год. Примеры я еще раз разложу по полочкам на летней школе, которая проходит с 9 по 26 августа 2016 года в Киеве, и расписание которой можно найти тут. Итак, переходим к самым показательным примерам кода.

          Читать дальше →
        • Я веб-разработчик и уже 10 дней не могу написать простейшее приложение

          Предлагаю вашему вниманию перевод статьи "I’m a web developer and I’ve been stuck with the simplest app for the last 10 days".

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

          В основном я занимаюсь full-stack web-разработкой. Периодически пишу бэкенд на Python или Ruby, иногда работаю с C#. Еще я пишу консольные утилиты на C++ и Node.js. Мне нравится Closure, я познакомился с web много лет назад, когда писал на Perl и PHP, а первые годы профессиональной разработки посвятил программированию на Java.

          Когда я впервые встретился с Javascript, он в основном использовался для того, чтобы добавить на страничку "Текущее время". Это были девяностые, когда все хотели приправить свои странички так, чтобы пользователи могли оценить, как это клево: текущий день недели выводится динамически. А спустя какое-то время оказывалось, что Javascript может гораздо больше, и мы получаем полностью динамический HTML — DHTML!

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

          Десять дней назад я решил сделать небольшое SPA для себя — маленькая утилита, потенциальный pet-project. Работы дня на два-три. А последние полгода я работал над десктопным проектом на C#. Это была довольно скучная программулина для управления рабочими процессами: webservice-бэкенд и winforms на фронте.
          Читать дальше →
        • Frida-node или немножко странного кода

            Приветствую всех, кто читает эту статью.
            Как-то так сложилось, что на хабре практически нет упоминаний про замечательную штуку под названием Frida. Самое толковое из них заключается в паре строк кода и общем описании(HabraFrida, из которой, собственно, я и узнал про существование этой штуковины, за что отдельное спасибо автору).
            Если вкратце, то Frida занимается тем, что инжектит JS-движок от Гугла(V8) в таргетный процесс(при отсутствии защиты, конечно же), причем встроенный js-код умеет работать с памятью, перехватывать вызовы функций, делать эти самые вызовы и заниматься прочими непотребствами.
            Если честно, с реверсом я знаком крайне посредственно и, в-основном, из MMORPG Runes of Magic, с которой я и начал учиться кодить и с которой связанна немалая часть моих текущих познаний в программировании. Собственно, до сих пор время от времени развлекаюсь написанием всяких разностей под нее(дырявая, кстати говоря, игрушка… Каких только шикарных багов в ней не находили, начиная от рисовки предметов и заканчивая sql-inject'ом). Вот для нее я и написал немножко тестового кода на Frida, позволяющего делать… разное.
            Почему node.js? Прост. В конце-концов, это же хаб ненормального программирования)
            Читать дальше →
          • И решили мы подружить Baresip и Nodejs

              Что же такое Baresip? Как сказано на сайте проекта это кроссплатформенный, модульный SIP агент с поддержкой аудио и видео.

              А причем тут nodejs? Да так вышло что в большом проекте написанном на nodejs и использующем Freeswitch и его модуль portaudio в связи с некорректной работой последнего потребовалось внедрить другой sip клиент для аудио звонков.

              Выбор в ходе технического совещания одного из наших разработчиков с гуглом пал на Baresip.

              Подробности
            • Что такое красивый код, и как его писать?

              1. Вступление


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

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

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

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

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

              Да, все это необходимо знать. Но при этом, понимание того, как должен выглядеть достойный код, обычно появляется уже при наличии практического (чаще в той или иной степени негативного) опыта за плечами. И при условии, что жизнь “потыкала” тебя не только в сочные образцы плохого кода, но и в примеры всерьез достойные подражания.

              В этом-то и заключается вся сложность: твое представление о “достойном” и “красивом” коде полностью основано на личном многолетнем опыте. Попробуй теперь передать это представление в сжатые сроки человеку с совсем другим опытом или даже вовсе без него.

              Но если для нас действительно важно качество кода, который пишут люди, работающие вместе с нами, то попробовать все же стоит!
              Читать дальше →