• FP на Scala: Что такое функтор?
    0
    Да, уже есть FP на Scala: Invariant Functor.

    Пишу BiFunctor (Either, Tuple2), ProFunctor (Function).
  • Модификаторы private и private[this] в Scala
    +3
    В статье, для краткости, я буду в основном использовать термин приватная переменная.

    Хороший термин приватный член класса (private class member).
  • Синдром ступеньки и срез посещаемости Хабра
    0
    Моя статья
    habrahabr.ru/company/golovachcourses/blog/215275
    435к просмотров
    P.S. Если еще актуально, конечно…
  • FP на Scala: Что такое функтор?
    0
    Пожалуйста.
    В статье еще много описок, но решил «вылизать» позже и опубликовать скорее.
  • Учебный план по JDBC
    0
    Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).
  • Программа и материалы курса «Multicore programming in Java»
    0
    Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).
  • Расширенный материал по Java 8
    0
    Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).
  • Лабораторные по многопоточности в Java: Parallel Copy
    0
    Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).
  • Исключения в Java, Часть II (checked/unchecked)
    0
    Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).
  • Исключения в Java, Часть I (try-catch-finally)
    0
    Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).
  • Java Multicore Programming: Lecture #1
    0
    Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).
  • Программирование-по-Контракту в Java
    0
    Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).
  • JSR 133 (Java Memory Model) FAQ (перевод)
    0
    Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).
  • 1000+ часов видео по Java на русском
    0
    Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).
  • Программа курса «Java Core»
    0
    Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).
  • Введение в Акторы на основе Java/GPars, Часть I
    0
    Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).
  • Аннотации в Java, часть I
    0
    Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).
  • Программа курса «Multicore programming in Java»
    0
    Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).
  • «Перегрузка операторов» в Scala
    0
    Ну это я так, для красного словца сказал.
  • «Перегрузка операторов» в Scala
    0
    Спасибо, не знал. Да, во второй части из ленивого, конечно, будут Streams как пример ленивых структур данных.
  • «Перегрузка операторов» в Scala
    0
    Да, named и default аргументы я читаю в ООП/методах+конструкторах. Достаточно краткая тема. Или я чего-то не знаю?
  • «Перегрузка операторов» в Scala
    0
    Вот все, надо смотреть
    
    D:\Program Files\Java\jdk1.8.0\bin>javap -p -c -v Demo
    Classfile /D:/Program Files/Java/jdk1.8.0/bin/Demo.class
      Last modified Apr 22, 2015; size 1076 bytes
      MD5 checksum 7f7e8e8353c9bf7f6bf70c6c4858c5b8
      Compiled from "Demo.scala"
    public class tmp.Demo
      SourceFile: "Demo.scala"
      InnerClasses:
           public static #42= #39 of #41; //Inclusive=class scala/collection/immutable/Range$Inclusive of class scala/collection/immutable/Range
      RuntimeVisibleAnnotations:
        0: #6(#7=s#8)
    Error: unknown attribute
        ScalaSig: length = 0x3
         05 00 00
      minor version: 0
      major version: 50
      flags: ACC_PUBLIC, ACC_SUPER
    Constant pool:
       #1 = Utf8               tmp/Demo
       #2 = Class              #1             //  tmp/Demo
       #3 = Utf8               java/lang/Object
       #4 = Class              #3             //  java/lang/Object
       #5 = Utf8               Demo.scala
       #6 = Utf8               Lscala/reflect/ScalaSignature;
       #7 = Utf8               bytes
       #8 = Utf8               ♠☺§2A!☺☻☺♂\t!A)Z7p§♣↓◄a☺;na♫☺1C☺☺!\t9!\"D☺\t§♣I◄!B:dC
    2♀↨BA♠\t♣↓\te.▼*fM\")Q☻☺C☺↔♣1A(←8jiz\"↕a♦\t♥!☺i◄A☺♣♠%☺!\taE☺☻MR◄A♥\t\t♥+uq!AF♫♫♥
    ]Q!☺G\r☻‼%lW.▲;bE2,'B☺♫\t♥)↓w♫∟7fGRLwN\♣♥9]\tQAU1oO▬L!AH►♥‼%s7\r\;tSZ,'B☺☼↑◄§\t‼
    ♥1☺#♥CA♦$‼\t!♥BA☻J]R♦
       #9 = Utf8               f
      #10 = Utf8               (I)Lscala/collection/immutable/Range$Inclusive;
      #11 = Utf8               scala/runtime/RichInt$
      #12 = Class              #11            //  scala/runtime/RichInt$
      #13 = Utf8               MODULE$
      #14 = Utf8               Lscala/runtime/RichInt$;
      #15 = NameAndType        #13:#14        //  MODULE$:Lscala/runtime/RichInt$;
      #16 = Fieldref           #12.#15        //  scala/runtime/RichInt$.MODULE$:Lscala/runtime/RichInt$;
      #17 = Utf8               scala/Predef$
      #18 = Class              #17            //  scala/Predef$
      #19 = Utf8               Lscala/Predef$;
      #20 = NameAndType        #13:#19        //  MODULE$:Lscala/Predef$;
      #21 = Fieldref           #18.#20        //  scala/Predef$.MODULE$:Lscala/Predef$;
      #22 = Utf8               intWrapper
      #23 = Utf8               (I)I
      #24 = NameAndType        #22:#23        //  intWrapper:(I)I
      #25 = Methodref          #18.#24        //  scala/Predef$.intWrapper:(I)I
      #26 = Utf8               to$extension0
      #27 = Utf8               (II)Lscala/collection/immutable/Range$Inclusive;
      #28 = NameAndType        #26:#27        //  to$extension0:(II)Lscala/collection/immutable/Range$Inclusive;
      #29 = Methodref          #12.#28        //  scala/runtime/RichInt$.to$extension0:(II)Lscala/collection/immutable/Range$Inclusive;
      #30 = Utf8               this
      #31 = Utf8               Ltmp/Demo;
      #32 = Utf8               x
      #33 = Utf8               I
      #34 = Utf8               <init>
      #35 = Utf8               ()V
      #36 = NameAndType        #34:#35        //  "<init>":()V
      #37 = Methodref          #4.#36         //  java/lang/Object."<init>":()V
      #38 = Utf8               scala/collection/immutable/Range$Inclusive
      #39 = Class              #38            //  scala/collection/immutable/Range$Inclusive
      #40 = Utf8               scala/collection/immutable/Range
      #41 = Class              #40            //  scala/collection/immutable/Range
      #42 = Utf8               Inclusive
      #43 = Utf8               Code
      #44 = Utf8               LocalVariableTable
      #45 = Utf8               LineNumberTable
      #46 = Utf8               SourceFile
      #47 = Utf8               InnerClasses
      #48 = Utf8               RuntimeVisibleAnnotations
      #49 = Utf8               ScalaSig
    {
      public scala.collection.immutable.Range$Inclusive f(int);
        descriptor: (I)Lscala/collection/immutable/Range$Inclusive;
        flags: ACC_PUBLIC
        Code:
          stack=3, locals=2, args_size=2
             0: getstatic     #16                 // Field scala/runtime/RichInt$.MODULE$:Lscala/runtime/RichInt$;
             3: getstatic     #21                 // Field scala/Predef$.MODULE$:Lscala/Predef$;
             6: iconst_1
             7: invokevirtual #25                 // Method scala/Predef$.intWrapper:(I)I
            10: iload_1
            11: invokevirtual #29                 // Method scala/runtime/RichInt$.to$extension0:(II)Lscala/collection/immutable/Range$Inclusive;
            14: areturn
          LocalVariableTable:
            Start  Length  Slot  Name   Signature
                0      15     0  this   Ltmp/Demo;
                0      15     1     x   I
          LineNumberTable:
            line 4: 3
    
      public tmp.Demo();
        descriptor: ()V
        flags: ACC_PUBLIC
        Code:
          stack=1, locals=1, args_size=1
             0: aload_0
             1: invokespecial #37                 // Method java/lang/Object."<init>":()V
             4: return
          LocalVariableTable:
            Start  Length  Slot  Name   Signature
                0       5     0  this   Ltmp/Demo;
          LineNumberTable:
            line 5: 0
    }
    
  • «Перегрузка операторов» в Scala
    0
    Хотя сигнатура метода intWrapper (I)I — как будто int -> int, а RichInt$ — может быть companion object с «статическими методами» (на самом деле методами одного синглетонного экземпляра, что лежит в статическом scala.runtime.RichInt$.MODULE$)
  • «Перегрузка операторов» в Scala
    0
    Хз, надо разбираться, может надо это включать, но вот такой класс
    class Demo {
      def f(x: Int) = 1 to x
    }
    


    у меня компилируется вот в это
    public class tmp.Demo {
      public scala.collection.immutable.Range$Inclusive f(int);
        Code:
           0: getstatic     #16  // Field scala/runtime/RichInt$.MODULE$:Lscala/runtime/RichInt$;
           3: getstatic     #21  // Field scala/Predef$.MODULE$:Lscala/Predef$;
           6: iconst_1
           7: invokevirtual #25  // Method scala/Predef$.intWrapper:(I)I
          10: iload_1
          11: invokevirtual #29  // Method scala/runtime/RichInt$.to$extension0:(II)Lscala/collection/immutable/Range$Inclusive;
          14: areturn
    
      public tmp.Demo();
        Code:
           0: aload_0
           1: invokespecial #37  // Method java/lang/Object."<init>":()V
           4: return
    }
    


    т.е. ходят в
    @inline implicit def intWrapper(x: Int)         = new runtime.RichInt(x)
    /source>
    и, судя по всему, возвращаются со свежей ссылкой на RichInt (так как дальше вызывают через invokevirtual)
    
    почему метод называется RichInt$.to$extension0, надо копать.
  • «Перегрузка операторов» в Scala
    0
    Мне кажется, это уровень целого «сетевого издательства» или какого-то безумного гения. Отслеживать и публиковать изменения в 3-6 языках (Java, Scala, Clojure, Groovy, JRuby, Jython) с развитой системой фреймворков — это безумный труд. И странная специализация для одного человека.

    Я сидел и в java 10 лет, но только местами узнавал, что Log4j2 догнал, а то и перегнал по фичам slf4j, или что асинхронное логирование в Log4J2 сделано на основе сверхбыстродействующего биржевого фреймворка Desruptor.

    А остслеживать такое постоянно и на всех «фронтах» — респект такому мозгу!
  • «Перегрузка операторов» в Scala
    0
    Спасибо, исправил.
  • «Перегрузка операторов» в Scala
    +1
    А что Вы имеете в виду под 'дайджестом'?
    1) Глубокий обзор фич всех времен и народов («Все что только можно делать c gc, java.lang.references.*, ...», «Все 100500 способов работать с многопоточностью», ...)?
    2) Обзор новинок («Все новые трюки с Java 8», «Что нового в Scala 2.11», ...)?
    3) Просто новости рынка (по примеру ленты у theserverside.com, infoq.com/java/news/)?
  • Программа курса и материалы по Scala
    0
    Это, скорее всего, издержки того, что в моей практике устная речь зачастую преобладает над письменной.
    Согласен с тем, что от таких «артефактов» стоит избавляться.
  • Программа курса и материалы по Scala
    0
    1. Опыта промышленной разработки на Scala у меня нет.
    2. Опыт использования в промышленных проектах на Java библиотек Akka, Finagle, Netty, Zookeeper — 4+ года.
    3. Было бы лучше, если бы преподавал человек с большим опытом на Scala?
    Да, было бы лучше.
    4. Какое я имею моральное право преподавать курс по Scala?
    Этот курс более академический, чем практический. Основан на исследованиях сложных моментов в языке (path dependent types, macroses, generics of higher kind, reflection api, ...) и на возможностях популярных «сложных» библиотек (scalaz, shapeless, algebird). Для эффективности курса такого рода, по моему мнению, важны проработка программы и подбор характерных примеров.
    5. Не считаю ли я, что курс был бы круче, если бы его преподавал, скажем, Бурмако?
    Скорее всего. Как только он начнет читать курсы по Scala сразу же к нему запишусь.
  • Программа курса и материалы по Scala
    0
    Курс стоит — 395$.
    При оплате группой предусмотрены скидки
    2 человека — 695$
    3 человека — 995$
    Если группа больше — пишите в личку.

    Ссылок много, так как я при переходе на Scala и при написании курса проанализировал множество источников.
  • Учебный план по JDBC
    0
    а изучать JDBC, на мой взгляд, всё равно с какой СУБД

    не совсем. Даже при использовании простейших SQL-выражений встает несколько вопросов:
    1. Прекращает ли DDL текущую транзакцию (commit)? В MySQL — да, прекращает.
    2. Есть ли client-side/server-side prepared statements? У MySQL есть и те и другие и то, какие будут использоваться выставляются свойствами драйвера.
    ===
    Кроме того опыт (даже поверхностный) с MySQL больше ценится на рынке.
  • Учебный план по JDBC
    +1
    В целом сейчас наметился тренд разочарования в MOOC. Одна из причин — все сосредоточились на платформах (низкокачественных, как на взгляд преподавателя), а не на качестве самого материала.
    newtonew.com/discussions/trendy-edtech-2014-dorogo-i-nepredskazuemo
    «Согласно данным исследования профессора Гарвардского университета Ричарда Меншела, из 80 000 зарегистрировавшихся на девять онлайн-курсов Гарвардского университета завершило курс только 13,3%.»
    «Легендарный профессор Принстонского университета Джереми Адельман, один из пионеров среди преподавателей, ведущих онлайн-курсы, в этом году ушёл из Coursera.»
    «По результатам опроса, в котором приняло участие 3 000 респондентов из США, проходивших обучение как в чистом онлайн-виде, так и в смешанном, только 15% полностью довольны результатами и большую часть знаний получают именно в онлайне»

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

    Мне кажется, что собственники площадок жертвуют «массовости» в ущерб «образованию».

    То, что вижу я взаимодействуя с площадками — все хотят материал, но никто не готов платить за него, так как хотя набрать 10к-100к-1000к студентов и учить их бесплатно (странная идея, делать что-то бесплатно, как по мне).

    Я же набирая всего 20-30 человек по 400$ имею вполне хороший бюджет на конкретный курс, конкретных студентов.
  • Учебный план по JDBC
    0
    Но, вообще-то, я пока не видел где-то действительно хороших онлайн-курсов по Java Core. То есть
    1. Охватывающий почти все что нужно (аналог 2-х томов Хорстмана)
    2. Включающие большое количество тестов и лабораторных
    3. Таких, что в случае прохождения 90% тестов/лабораторных можно быть уверенным, что ты знаешь почти все для собеседования.
    ===
    Мне кажется причина в огромном объеме материала. Нужно, что бы новые Хорстманы и Эккели писали курсы под платформы. Нормальный курс должен занимать 50-80 часов видео. Только так можно рассказать чем SoftReference отличается от WeakReference, чем NIO.2 отличается от NIO, как сделать блокирующий буфер с помощью Semaphore и много других вещей, знание которых позволяет чувствовать себя уверенно на собеседовании.
  • Учебный план по JDBC
    0
    Я присматриваюсь к udemy.com.
    Но я не анализировал качество курсов там (по Java порядка 70, кажется).
  • Лабораторные по многопоточности в Java: Parallel Copy
    0
    С точки зрения «полезных»/новых/неизвестных данных — он пустой.
  • Расширенный материал по Java 8
    0
    LINQ — это вещь. У нас такое даже не рассматривается.
    В Scala вводят какую-то сильную концепцию макросов, будет доступ к AST в момент компиляции, можно делать проверки типов, автогенерацию и прочее.
  • Расширенный материал по Java 8
    0
    Наблюдаю перетекание части программистов с Java на Scala — она реально крута. Однако останавливает
    1) на Scala мало работы, а это не очень хорошо.
    2) на Scala мало фреймворков. Либо используешь Java-стек со стилем Java (Hibernate, JSF, ...) либо сыроватые фреймворки Scala. Т.е. можно из-за одной Akka пописать на Scala, однако современный проект — это десяток фреймворков, а не один.

    P.S. Чистое IMHO, наблюдаю друзей, перешедших на Scala, со стороны.
  • Расширенный материал по Java 8
    0
    Можете прояснить, что происходит и куда движется платформа в целом?

    Ну не берусь говорить о планах Oracle, но я бы отметил следующий моменты:
    1. Языковые фичи — это не платформа. И, по моему мнению, они не играют такой значительной роли, какую им приписывают. Скажем лично я перешел с C++ на Java потому, что в моей конторе больше платили за Java (отсутствие перегрузки операторов меня вообще не волновало). Я выбрал Java, а не C# (в то время) потому, что мне казалось, что на Java более открытая экосистема, точнее открыты сорцы всей JDK и я могу не читать MSDN, а просто подключить сорцы к IDE и читать сорцы.
    2. Из платформы — введение в Java 7 байткода invokedynamic (java.lang.invoke.*), что открывает возможность написания эффективных языков с динамической типизацией для JVM. Однако, полагаю, что массовым polyglot programming не станет (т.е. смесь из Java/Scala/Groovy/Clojure) из-за сложности ведения такого проекта.
  • Расширенный материал по Java 8
    +1
    Также при переходе с Collection API на Stream API зачастую происходит жесткий рефакторинг (связанный хотя бы с ленивостью и распараллеливанием стримов), который охватывает не границы классов, а границы целых пакетов.
    В итоге найти отдельный содержательный класс с фиксированной функциональностью, который перешел с Java 7 на Java 8 — это отдельная проблема.
  • Расширенный материал по Java 8
    +1
    Можно и так. Однако, оцените количество импортов именно в этом файле
    import backtype.storm.tuple.Fields;
    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Set;
    import storm.trident.Stream;
    import storm.trident.operation.Aggregator;
    import storm.trident.operation.CombinerAggregator;
    import storm.trident.operation.ReducerAggregator;
    import storm.trident.operation.impl.ChainedAggregatorImpl;
    import storm.trident.operation.impl.CombinerAggregatorCombineImpl;
    import storm.trident.operation.impl.CombinerAggregatorInitImpl;
    import storm.trident.operation.impl.ReducerAggregatorImpl;
    import storm.trident.operation.impl.SingleEmitAggregator;
    import storm.trident.operation.impl.SingleEmitAggregator.BatchToPartition;
    import storm.trident.tuple.ComboList;
    И добавьте сюда неимпортированные, но используемые классы из этого же пакета.
    Вот с таким количеством сущностей придется столкнуться человеку, читающему сорцы этого класса. Сущностей явно больше 7+-2, которые реально удерживать в голове.