• Обзор наиболее интересных материалов по анализу данных и машинному обучению №3 (обзор онлайн курсов)


      Данный выпуск обзора наиболее интересных материалов по анализу данных и машинному обучению полностью посвящен онлайн-курсам по тематике Data Science. В прошлом выпуске был представлен список онлайн-курсов, стартующих в ближайшее время. В данном выпуске я постарался собрать наиболее интересные онлайн-курсы по теме анализа данных. Стоит отметить, что некоторые курсы уже закончились, но у большинства таких курсов можно посмотреть архив всех учебных материалов.
      Начинается обзор с набора курсов от Johns Hopkins University на Coursera, которые объединены в одной специализации «Data Science Specialization», поэтому имеет смысл рассмотреть их отдельно от остальных курсов. Это 9 официальных курсов специализации и два дополнительных Mathematical Biostatistics Boot Camp 1 и 2, которые официально не входят в специализацию. Важно отметить, что весь набор данных курсов регулярно начинается заново и в общем-то можно достаточно гибко построить свой график продвижения по специализации. Большинство курсов длятся 4 недели. Язык R является основным языком программирования в данном наборе курсов. Далее идет список курсов из специализации Data Science от Johns Hopkins University:
      Читать дальше →
      • +24
      • 25,2k
      • 5
    • Нейроинтерфейсы для людей (2003-2016). Купить или разработать самому?



        Было время, когда я за один присест выливал на голову стакан жидкости для линз, чтобы поэкспериментировать с Emotiv`ом. Затем был тюбик геля из шприца в лаборатории МГУ. Сейчас я обладатель «сухого» одноэлектродного нейроинтерфейса NeuroSky MindWave. (Кстати, это отличная игрушка для летнего лагеря, я сделал на инженерной олимпиаде задание по поиску мозговых слизней имплантов, для этого надо было поставить рекорд по «удержанию шарика в воздухе мыслью» — базовая бесплатная игруха к NeuroSky)

        Как показывает опрос, нейроинтерфейсы неизбежны.



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

        Под катом обзор устройств, которые были доступны в потребительском сегменте и open-source проекты для самостоятельного изготовления и создания софта.
        Читать дальше →
      • Запускаем Java Runtime на 256KB оперативной памяти

          image
          Действительно, с выходом Java ME Embedded 8.1, полноценный Java-рантайм теперь доступен на плате Freescale K64F, которая несет на борту 256KB RAM и оснащена процессором на базе архитектуры ARM Cortex M4. Еще одной важной особенностью нового выпуска Java ME SDK стала поддержка Eclipse IDE. Страница нового релиза Java ME Embedded 8.1 здесь: http://www.oracle.com/technetwork/java/embedded/javame/embed-me/overview/index.html

          Платформа Java ME Embedded 8.1 специально создана для того, чтобы перенести все полезные функциональные возможности Java на устройства с ограниченными аппаратными возможностями и даже, микроконтроллеры. Появление платформы Java ME Embedded, во многом, обусловлено развитием нового направления в информационных технологиях, Интернета Вещей (Internet of Things, IOT). Развитие IoT связано как с новыми возможностями, так и с новыми проблемами. Часть задач, таких как безопасность, работа с сетевыми подключениями, общение с внешними интерфейсами UART, I2C, SPI, GPIO успешно решает Java ME Embedded 8.1. Использование Java вместо нативных инструментов сокращает время выпуска продукта и открывает доступ к значительным трудовым ресурсам. Кстати, а вы знаете, что команда разработки Java ME Embedded почти полностью находится в Санкт-Петербурге? Что еще интересного приготовили наши разработчики вы узнаете дальше…
          Читать дальше →
        • Трансформации AST — Первый шаг к тяжёлым веществам

            А давайте сделаем magic с вашим Java кодом. Вот такой:


            Берем это:
            import groovy.transform.Canonical
            import groovy.transform.TupleConstructor
            
            @Canonical
            @TupleConstructor
            class Person {
                int id
                String firstName
                String lastName
                Date birthdate
            }
            

            Компилируем, и в байткоде получаем аналог вот этого:
            Адский бойлерплейт на Джаве на 100 с лишним строк
            import java.util.Date;
            import java.util.Map;
            
            public class Person {
                private int id;
                private String firstName;
                private String lastName;
                private Date birthdate;
            
                //Эта штука добавлена @TupleConstructor-ом
                public Person(Map parameters){
                    this.id = (int) parameters.get("id");
                    this.firstName = (String) parameters.get("firstName");
                    this.lastName = (String) parameters.get("lastName");
                    this.birthdate = (Date) parameters.get("birthdate");
                }
            
                public Person(int id, String firstName, String lastName, Date birthdate) {
                    this.id = id;
                    this.firstName = firstName;
                    this.lastName = lastName;
                    this.birthdate =birthdate;
                }
            
                public Person(int id, String firstName, String lastName) {
                    this(id, firstName, lastName, null);
                }
            
                public Person(int id, String firstName) {
                    this(id, firstName, null, null);
                }
            
                public Person(int id) {
                    this(id, null, null, null);
                }
            
                public Person() {
                    this(0, null, null, null);
                }
            
                @Override
                public boolean equals(Object o) {
                    if (this == o) return true;
                    if (o == null || getClass() != o.getClass()) return false;
            
                    Person person = (Person) o;
            
                    if (id != person.id) return false;
                    if (birthdate != null ? !birthdate.equals(person.birthdate) : person.birthdate != null) return false;
                    if (firstName != null ? !firstName.equals(person.firstName) : person.firstName != null) return false;
                    if (lastName != null ? !lastName.equals(person.lastName) : person.lastName != null) return false;
            
                    return true;
                }
            
                @Override
                public int hashCode() {
                    int result = id;
                    result = 31 * result + (firstName != null ? firstName.hashCode() : 0);
                    result = 31 * result + (lastName != null ? lastName.hashCode() : 0);
                    result = 31 * result + (birthdate != null ? birthdate.hashCode() : 0);
                    return result;
                }
            
                @Override
                public String toString() {
                    return "Person{" +
                            "id=" + id +
                            ", firstName='" + firstName + '\'' +
                            ", lastName='" + lastName + '\'' +
                            ", birthdate=" + birthdate +
                            '}';
                }
            
                public int getId() {
                    return this.id;
                }
            
                public void setId(int paramInt) {
                    this.id = paramInt;
                }
            
                public String getFirstName() {
                    return this.firstName;
                }
            
                public void setFirstName(String paramString) {
                    this.firstName = paramString;
                }
            
                public String getLastName() {
                    return this.lastName;
                }
            
                public void setLastName(String paramString) {
                    this.lastName = paramString;
                }
            
                public Date getBirthdate() {
                    return this.birthdate;
                }
            
                public void setBirthdate(Date paramDate) {
                    this.birthdate = paramDate;
                }
            }
            



            Ну, как-бы да, приятно. Но ничего уникального, вот-же есть Lombok, не говоря уже о способности любого хорошего IDE сначала генерить, а потом прятать всесь этот бойлерплейт.

            Так зачем именно Groovy, почему AST transformations?
            В этой статье я попробую вкраце обосновать, зачем пользоваться Groovy AST transformations в Java проектах, и (опять-же вкраце) рассказать какие AST transfromations есть в Groovy сегодня. Если вы уже знаете зачем, и хотите только «как и что», смело листайте к «Введение в AST transformations».
            Читать почему и как AST transformations
          • Mobius: конференция про мобильный хардкор

              Привет, хабровчане!

              В пятницу, 14 марта в Санкт-Петербурге мы проведём конференцию для разработчиков мобильного ПО.

              Что нас ждёт на конференции


              • полтора десятка мощнейших докладов от экспертов по мобильной разработке;
              • мастер-классы по самым актуальным технологиям разработки мобильного ПО;
              • возможность закосить рабочий день пообщаться с коллегами и друзьями в неформальной обстановке;
              • ну и расчленённый червяк :)




              На конференции не будет


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



              Читать дальше →
            • Raspberry PI и JAVA: пристальный взгляд

                Недавно на хабрахабре вышла статья о java на raspberry pi, увидев название которой было много ожиданий, а под катом оказался банальный Hello World!

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

                1. Сравнима ли скорость работы java на малинке и настольном компьютере?
                2. Насколько удобно работать с java на raspberry?
                3. Есть ли адекватные библиотеки для работы с GPIO?

                Вот на эти вопросы я и попробую дать ответы в этой статье.

                Кому интересно: добро пожаловать под кат (графики и фотографий обнаженной малинки там не будет)
                Читать дальше →
              • Разрешение конфликтов в транзитивных зависимостях — Хороший, Плохой, Злой

                  Вместо предисловия


                  В ближайшую субботу мы с EvgenyBorisov будем выступать в Питере на JUG.ru. Будет много веселого трэша и интересной инфы (иногда не разберешь, где проходит граница), и одно из моих выступлений будет посвящено WTF-нутости модульной разработки программ. Я расскажу несколько ужастиков, один из которых будет о том, как все пытаются быстро, гибко и корректно описать зависимости в проекте, и что из этого обычно получается. Интересно? Тогда добро пожаловать в ад!


                  Скорее, конечно, «Хороший, Удобный и WTF-ный».
                  Погрузиться в конфликт...
                • Разработка сервера браузерной игры… как учебная дисциплина

                    В середине прошлого лета на программерскую рассылку отдела клиентских игр Mail.Ru Group пришло письмо – «Объявлен конкурс на позицию преподавателя курса Java в нашем совместном проекте с МГТУ им. Н. Э. Баумана». Как программист и сотрудник отдела я это письмо тоже получил. Как выпускник физтеха, а в прошлом преподаватель и научный работник, решил откликнуться.
                    Так для меня началась история работы преподавателем в Технопарке. Собственно об этом (о работе, о Технопарке, о своем курсе и о студентах) я и хочу вам рассказать.

                    Читать дальше →
                  • Чек-лист эффективного вебинара

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

                    Начинать подготовку к мероприятию (особенно в первый раз) лучше минимум за месяц. Со второго-третьего раза вы уложитесь в две недели, но с каждым новым спикером (моя компания организовывает вебинары внутри услуги «iБрендинг») мы закладываем на подготовку месяц. Это лучше, чем переносить вебинар из-за того, что мало слушателей. Речь, конечно, не о бесплатных мероприятиях, с ними все проще.
                    Читать дальше →
                    • +12
                    • 5,8k
                    • 1
                  • Приглашение на конференцию Java Day SPB 2012

                      image

                      Дорогие друзья,
                      10-го февраля 2012 года в Санкт-Петербурге состоится конференция для Java разработчиков Java Day SPB 2012. Конференция состоит из трех потоков: Java EE, Java SE и JavaFX, Java ME и Java для встроенных систем. Мы учли ваши пожелания после прошлогоднего мероприятия и расширили залы для Java SE и ME потоков. Будет еще один новый и очень интересный интерактивный поток, но о нем напишут его создатели и докладчики.

                      Участие в конференции бесплатное. Требуется предварительная регистрация
                      Читать дальше →
                    • Модель памяти в примерах и не только

                      • Tutorial
                      В продолжение серии топиков под названием «фундаментальные вещи о Java, которые стоит знать, но которые многие не знают». Предыдущий топик: Бинарная совместимость в примерах и не только

                      Модель памяти Java — нечто, что оказывает влияние на то, как работает код любого java-разработчика. Тем не менее, довольно многие пренебрегают знанием этой важной темы, и порой наталкиваются на совершенно неожиданное поведение их приложений, которое объясняется именно особенностями устройства JMM. Возьмём для примера весьма распространённую и некорректную реализацию паттерна Double-checked locking:

                      public class Keeper {
                          private Data data = null;
                          
                          public Data getData() {
                              if(data == null) {
                                  synchronized(this) {
                                      if(data == null) {
                                          data = new Data();
                                      }
                                  }
                              }
                              
                              return data;
                          }
                      }
                      

                      Люди, пишущие подобный код, пытаются добиться улучшения производительности, избегая блокировки, если значение уже было присвоено. К сожалению, эти люди не учитывают многих факторов, в результате проявления которых может случиться зомби-апокалипсис. Под катом я расскажу теорию и приведу примеры того, как что-то может пойти не так. Кроме того, как говорили в одном индийском фильме, «Мало знать, что не так. Нужно знать, как сделать так, чтобы было так». Потому и рецепты успеха вы также сможете найти дальше.
                      Читать дальше →
                    • Структуры данных в картинках. HashMap

                        Приветствую вас, хабрачитатели!

                        Продолжаю попытки визуализировать структуры данных в Java. В предыдущих сериях мы уже ознакомились с ArrayList и LinkedList, сегодня же рассмотрим HashMap.



                        HashMap — основан на хэш-таблицах, реализует интерфейс Map (что подразумевает хранение данных в виде пар ключ/значение). Ключи и значения могут быть любых типов, в том числе и null. Данная реализация не дает гарантий относительно порядка элементов с течением времени. Разрешение коллизий осуществляется с помощью метода цепочек.

                        А почему бы и нет?
                      • Типичные случаи утечки памяти в Java

                        Большинству разработчиков известно, что сборщик мусора в Java не является универсальным механизмом, позволяющим программисту полностью забыть о правилах использования памяти и о том, в каких случаях осуществляется его работа. Ниже описаны типичные случаи утечки памяти в java-приложениях, встречающиеся повсеместно.
                        Итак, о чём должен помнить каждый java-программист.
                        Читать дальше →
                      • Олимпиада по программированию на Java для студентов

                          image
                          Компания Oracle совместно с организацией It-планета приглашает студентов ВУЗов и колледжей принять участие в международной олимпиаде по программированию на Java — Oracle Java Olympic. Соревнования проходят в Украине, России, Беларуси и Казахстане и состоят из трех этапов. Для участия желательна регистрация ВУЗа или колледжа в системе, но возможно и персональное участие. Регистрация для участия в олимпиаде проходит до 30 ноября 2011 года на сайте http://world-it-planet.org/. Для регистрации на первой странице выберите «Oracle Java Olympic» и ваш регион проживания.

                          Первый этап — отборочный. Проводится удаленно. После регистрации участники получают ссылку для прохождения теста и в течении 45 минут отвечают на 40 вопросов по Java технологиям. Тест можно проходить в любое время с 1 по 15 декабря включительно. Для прохождения теста у каждого участника есть только одна попытка.

                          Второй этап
                          Победители отборочных этапов в своем ВУЗе приглашаются для участия в очном региональном туре, в ходе которого участники получают 7 задач, 4 часа времени и компьютер с операционной системой, JDK7, NetBeans 7.0.1 и документацией по Java API. Участие в соревнованиях личное.

                          Третий этап — финальный. Проводится в формате аналогичном второму этапу. Основное отличие — более сложные задачи (и соперники конечно).

                          Подробности и детальное описание конкурса смотрите на веб-сайте олимпиады.
                          http://world-it-planet.org/

                          Присоединяйтесь уже сегодня!
                        • Делаем релизы с помощью Maven в Java

                          О чем эта статья?


                          Эта статья о том:
                          1. Что такое релиз?
                          2. Как нумеруются релизы?
                          3. Зачем при релизе нужен бранч?
                          4. Почему релиз это больше, чем просто jar (war, ear, zip, etc)?
                          5. Что такое maven-release-plugin?
                          6. Делаем бранч c помощью release:branch.
                          7. Подготовка к релизу с помощью release:prepare.
                          8. Выпускаем релиз с помощью release:perform.

                          Для чтения и понимания этой статьи я рекомендую освежить свои знания по Maven. Многие термины могут быть непонятны без понимания этой технологии.
                          Читать дальше →
                        • Java сертификация. Подготовка к SCJP

                            В этом месяце я сдавал экзамен SCJP. В этом топике я расскажу о подготовке и экзамене.
                            В основном для тех, кто собирается сдавать и кому нужно больше информации об этом.

                            Уточнение


                            Так как Sun'a больше нет, то и экзамена SCJP тоже нет. Теперь он значится так:
                            1Z0-851 Java Standard Edition 6 Programmer Certified Professional Exam.
                            прочитать об экзамене и посмотреть задачи
                          • Конференция JavaOne Oracle Develop Россия

                              Конференция JavaOne (ex. TechDays) пройдет в этом году в Москве, 12-13 Апреля, в здании Российской Академии Наук. В конференции три потока: JavaEE, JavaSE, JavaME и мастер-классы. Возможно небольшое отклонение от заданной темы в тех или иных докладах.
                              С программой конференции можно ознакомиться здесь: www.oracle.com/ru/javaonedevelop/javaone-agenda-ru-302317-ru.html

                              На конференцию, поделиться знаниями и опытом, приедут специалисты из США, Европы, Азии и конечно из Санкт-Петербургского Центра Высоких Технологий Oracle. Пленарный доклад конференции будет состоять из двух частей: Стив Харрис (главный человек в Oracle по JavaEE) расскажет по перспективах технологии JavaEE7, а Хенрик Шталь о том, как Oracle видит развитие JavaSE. Джером Доше (архитектор Glassfish) расскажет, как наиболее эффективно пользоваться своим детищем.

                              Также желающим набраться практического опыта небезынтересными будут 5 полуторачасовых мастер-классов.

                              Во второй день конференции в дополнение к стандартным трекам, откроется небольшой зал Lightning talk где вы сможете послушать 20 минутные выступления от российского Java сообщества

                              Регистрация на конференцию по ссылке: www.oracle.com/ru/javaonedevelop/index.html

                              Если есть какие-то вопросы или пожелания, задавайте на все отвечу