• ROS, ELM и черепашка
    0
    Я не очень представляю, как соединять ноды напрямую используя подписку на топики, то есть многие-ко-многим. Только для сервисов, но как я понял, они используются реже.

    При обычной (без rosbridge) работе с нодами, они уже коммуницируют напрямую (даже через PubSub) Once these nodes have located each other they communicate with each other peer-to-peer.. Судя по всему, каждая нода хранит у себя список подписчиков.

  • ROS, ELM и черепашка
    +1
    В документации я не нашел средств получания метаинформации — списков и описаний пакетов, топиков, типов, сервисов.

    Посмотрите этот проект: ros-control-center. Судя по скриншоту и описанию (ROS Control Center offers an easy way to show nodes, topics and service names.) им удается получать метаинформацию.


    По поводу мониторинга, у них ряд интересных проектов: robotwebtools


    В учебном применении время реакции не столь критично, и на нем можно прототипировать и что-то более низкоуровневое.

    Как понимаю, при использовании ROS, ноды находят друг друга через Master'a, а в дальнейшем коммуницируют напрямую. В случае использования rosbridge коммуникация происходит через ноду-посредника на котором запущен WS сервер. Чисто теоретически, при большом количество топиков и подписчиков, такая нода может стать узким местом. Вопрос, правда, на сколько это критично.

  • ROS, ELM и черепашка
    0

    Большое спасибо за интересную статью. Это отлично, что появляются курсы и такие статьи по ROS'у. Крайне интересно узнать про ваш опыт:


    1. Возникли какие-либо сложности при установке/настройке ROS'a. Если да, то какие?
    2. Правильно ли я понял, что такой способ работы через rosbridge по функционалу полностью аналогичен нодe с Publisher and Subscriber?
    3. Как вы думайте, rosbridge подходит для полноценной работы с ROS? Не будет ли проблем со скоростью из-за отсутствия сериализации в бинарный протокол и использования WS вместо TCP или же область применения rosbridge ограничивается использованием в веб-интерфейсах для ручного управления и мониторинга?
  • Почему следует полностью переходить на Kotlin
    +4

    Про 95% это вы так же с потолка взяли, так же как и JetBrains про 100% интероп?


    жуткие конструкции с "++=" и прочим

    Т.е. в java/kotlin x += 1 понятная конструкция, а вот xs ++= List(1,2,3,4) уже жуткая, если учесть конкатенация двух списков это ++
    В Котлин придостаточно жутких конструкция по типу


    thing?.thing1?.thing2 ?: 10

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

  • Почему следует полностью переходить на Kotlin
    +2
    А с ними что не так?

    с extension methods все отлично, вот только проблема в том в Java их нет. Приходится вызывать статические методы. Особенно это уродски выглядит когда либа на Котлине их использует повсеместно.


    companion object приходится анноторивать @JvmStatic, что бы можно было нормально из Java вызывать, вот только к сожалению часто их не аннотируют почему-то.


    на скале вызывать почти невозможно

    Да уж невозможно конечно. Поэтому большинство мейн-стримовых скаловских фреймворках доступны из java.


    В котлине таких проблем нет

    Есть с тем же suspend methods. Или вы собрались использовать некое подмножество языка? Ну так это можно так с X где X любой JVM язык.


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

    Дело не в выигрышах или проигрышах, а дело в заявленных 100%, смотрите я ответил выше. Особенно это актуально для Джавистов, если они собрались потом использовать Котлиновский код.

  • Почему следует полностью переходить на Kotlin
    +2
    А по поводу интеграции в Джаву вообще вопрос интересный. Вот реально субъективно возникает меньше ощущения «другой» платформы, чем от Скалы

    Безусловно интеграция с джавой у Котлина лучше (и наверное лучше чем у любого другого JVM языка), по поводу этого не спорю. Но лучше, это относительное понятие, а не величина. Если мы говорим про цифры, то эти цифры должны быть подтверждены (а если нет подтверждения, то какой смысл в конкретных величинах?), тем более если мы говорим про громогласное заявленное на офф сайте 100%. 100% — значит что мы должны иметь возможность без костылей вызвать это в Java, не смотря на сколько это "чужеродно". И такие "чужеродности" не только с suspend method их ещё много, все это придется пережить и узнать кто будет использовать Котлин, выполняя роль тестировщика языка.


    Я бы не советовал как пример приводить вызов suspend методов.

    Осталось сделать такой список на офф сайте Котлина: "Мы не советуем вам использовать эти фичи Kotlin'а т.к. вы потеряйте интероп" и я бы даже слова не сказал. Или ещё лучше какой-нибудь флаг компилятора, который выключал все эти фичи и позволял бы писать на каком-нибудь подмножестве Котлина, который бы имел интероп. Потому что уже сейчас появляются библиотеки на Котлине, которые используют спицифичные для Котлина фичи, и которые сложно вызывать из Java, но создатели этих либ особо об этом не парятся. В результате получается своя экосистема, такая же как в Clojure или Scala.


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

    Если вы посмотрите issues лист Quasar, то увидите что там достаточно специфичных багов связанных с использованием Котлина.

  • Почему следует полностью переходить на Kotlin
    +3

    коммерция


    Когда Kotlin станет мейнстрим-языком, значение компании JetBrains для рынка Software Engineering, на котором она работает, будет совершенно другим. То есть, про нас будут говорить, что мы не какие-то ребята, которые делают удобные, но в любой момент заменяемые инструменты, а как про тех, кто делает некоторую корневую фичу экосистемы, на которой всё строится. Это другой вес, другой информационный поток, и деньги, я думаю, тоже другие.

    https://habrahabr.ru/company/jugru/blog/318842/

  • Почему следует полностью переходить на Kotlin
    +10

    Почему… почему в каждой статье пишут про 100% интероп? Откуда взялась эта цифра, она взята с потолка? Почему не 90%, 95% или 148%?
    Уже появляются доклады в которых рассказывать что даже Java код иногда сложно вызывать (https://youtu.be/CABN2r4GPpQ?t=45m9s), а этот язык только недавно релизнулся.
    Я молу про то, что большую часть kotlin фишек нельзя вызвать из java кода. Вот что у меня получилось при попытке вызвать suspend method из java:


    Sequence<Integer> seq = SequenceBuilderKt.buildSequence(new Function2<SequenceBuilder<? super Integer>, Continuation<? super Unit>, Object>() {
                public Object invoke(SequenceBuilder<? super Integer> sequenceBuilder, Continuation<? super Unit> continuation) {
    
                    return null;
                }
            });

    и это только начало списка, ещё есть extension methods, object companion и т.д.
    В итоге получается, если хотите java interop не используйте kotlin фишки, пишите на такой же java только с сахаром.

  • «Скорее всего, будет расти как снежный ком» — Андрей Бреслав и Антон Кекс о Kotlin
    0
    Вполне себе неплохо.

    Скорее всего вы меня неправильно поняли. У нас есть функция, под названием buildSequence, которая реализована на языке Котлин, из пакета стандартной библиотеки. Как эту функцию можно вызвать и пользоваться ей в Java коде. При 100% интеропе такая возможность должна быть.
    Я попытался вызвать эту функцию из Java и среда разработки предложила мне такой вариант:


    Sequence<Integer> seq = SequenceBuilderKt.buildSequence(new Function2<SequenceBuilder<? super Integer>, Continuation<? super Unit>, Object>() {
                public Object invoke(SequenceBuilder<? super Integer> sequenceBuilder, Continuation<? super Unit> continuation) {
    
                    return null;
                }
            });

    Корутины сделаны средствами языка, это те же extension методы и т.п.

    Не смотря на то, что extension methods это часть языка, их можно вызвать из Java кода явно передав туда объект на котором вызывается метод.


    C помощью extension методов думаю никак, но можно это сделать делегатом

    Мне не очень понятно где здесь внешние расширение. Вы явно наследуетесь от интерфейса.
    Что если у вас есть класс из какой-нибудь библиотеки Java, к которому у вас нет доступа изменять исходники и интерфейс из совершенно другой библиотеки. Можно как-нибудь расширить класс из первой библиотеки другим интерфейсом, например:


    // из первой библ
    class Robot {} 
    
    // из второй библ
    interface Moveable{
      def move(): Unit
    }
    
    // мой код с расширением
    implicit class ExtMoveableRobot(val self: Robot) extends Moveable{
      def move(){}
    }
  • «Скорее всего, будет расти как снежный ком» — Андрей Бреслав и Антон Кекс о Kotlin
    +2
    Extension методы, в какой-то мере это аналог implicit из Scala (для задач расширения функциональности существующих классов).

    Если extension methods аналог implicit для задачи расширения функциональности, то как можно с помощью Котлиновского extension methods расширить класс внешним интерфейсом?


    Отличный интероп с java. Java из Kotlin выглядит как Kotlin и наоборот.

    Я задавал этот вопрос в другой теме, но ни кто не ответил. Но все таки повторюсь.
    Как сохраняется интероп с java при использовании корутин?
    Есть ли возможность вызвать suspend function из java?
    Как бы например выглядело использование buildSequence в java?
    Ещё по поводу интеропа. Каждый раз слышу заявления про 100% интероп (так же заявлено на сайте Котлина), но в том же докладе Антона Кекс (Kotlin-паззлеры) часто упоминается разного рода косяки при вызове даже java кода и наоборот. Интероп конечно лучше чем у Скалы, но он точно не 100%.


    делегаты

    А это по правде интересная вещь. Правда, до сих пор не до конца разобрался как это работает.

  • «Скорее всего, будет расти как снежный ком» — Андрей Бреслав и Антон Кекс о Kotlin
    +1

    В результате какая разница? Это особенность работы паттерн матчинга. Значения которые по нему сопоставляются привязываются к новому имени. Это спор против мутирования старой переменной или создания новой измененной (считай импер. программирования против функц.). В результате вы так же сделали проверку и у вас произошел неявный каст (не ненужно самому кастовать, как пришлось бы в Java).

  • «Скорее всего, будет расти как снежный ком» — Андрей Бреслав и Антон Кекс о Kotlin
    0
    в вашем примере он ничего не запоминает

    Почему не запоминает? Изначально у value тип Any. В первой ветке идет проверка на то, что value имеет тип String. Если он таковым является, то значение привязывается к str и во всей ветке считается за String. Если бы такого преобразования не было бы, не имелось бы возможным вызвать метод charAt, который есть только у String. Тоже самое касается Int, и Some (аналог Котлиновского null type).

  • «Скорее всего, будет расти как снежный ком» — Андрей Бреслав и Антон Кекс о Kotlin
    +2
    What Kotlin has that Scala does not
    • Smart casts

    У Скалы есть Smart casts, только он не через if работает, а в сопоставлении с образцом.


    value match {
      case str: String    => str.charAt(0)
      case int: Int       => int + 10
      case Some(int: Int) => int * 10
      case _ | None       => 0
    }
  • Встречайте Kotlin 1.1: JavaScript, корутины и многое другое
    0

    Здравствуйте, могли бы рассказать как вы сохраняйте интероп с java вводя корутины?
    Есть ли возможность вызвать suspend function из java?
    Как бы например выглядело использование buildSequence в java?
    В какой kotlin код транслирует ts2kt такие ts конструкции (intersection types, union types)?


    function extend<T, U>(first: T, second: U): T & U {...}
    function padLeft(value: string, padding: string | number) {...}
  • Современный подход к сборке мусора
    +1
    Я просто не знаю других источников, где одно и то же нетривиальное было бы написано на разных языках программирования. Если Вы о таком знаете, был бы признателен за указание

    Здесь есть много задач описанных на разных ЯП, но большая часть из них простые.

  • Твоя Data такая большая: Введение в Spark на Java
    +3
    У вас на картинке лого другого Spark'a (Spark — A micro web framework).
    Где можно найти сравнение производительности спарковского MLlib запущенного на одном компьютере с другими решениями для машинного обучения под java/scala?