Выпуск 23: Кушайте овощи, пишите на Матрёшке

Многие JS разработчики рано или поздно задаются целью написать собственный фреймворк. Не у многих это получается. У нас в гостях один из тех, кому это удалось. Андрей Губанов, автор фреймворка Matreshka.js.

Говорим о Матрёшке, жизни фрилансера и о комьюнити разработчиков в Одессе. Среди тем выпуска Angular 1.4, Polymer 1.0, паттерны программирования и многое другое.

Скачать выпуск (mp3, 45 MB)
  • Про “корявость” API Falcor: в React сейчас тоже обсуждается подобный API для работы со внешними источниками данных: https://github.com/facebook/react/issues/3858

    • Кстати, не хочешь как-нибудь тоже к нам в гости зайти? Можно будет посвятить выпуск React’у и твоим разработкам для него, думаю ты сможешь много интересного рассказать.

    • Меня расстроило то, что на слайдах предлагалось вызывать API внутри метода render. Мне кажется, ему там не место.

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

  • Bill Bool

    Хорошие вопросы гостю задавали.

  • Alexej Yaroshevich

    Is it possible to use GoF pattern with No pattern?

  • Ну что за бред несут ведущие? Какая реализация чисел в JS? На заборе написали?
    Так устроены процессоры, из-за двоичной системы счисления.
    Вот вам программа на C, чтобы это доказать. Запуск: gcc test.c && ./a.out

    #include

    int main() {
    double a = 0.1 + 0.2;
    printf(“%.20fn”, a);
    }

    • Не ведущие, а я. Дословно я сказал следующее “Это связано с особенностями реализации математики в JS”. И это действительно с этим связано. 2 довода:
      – ничто не мешало сделать в JavaScript тип Number по-дефолту decimal, а не float, и использовать там другую реализацию арифметики
      – двоичная система процессоров не мешает поверх нее сделать иную реализацию арифметики, другое дело, что это работало бы медленнее… выбор текущей реализации объясняет не ограничением процессора, а быстродействием, и тем, что создатель JS намеренно не хотел усложнять язык несколькими типами Number, а сделать единый тип. В итоге им стал 64bit float, известный еще как double precision float или просто double.

      В других языках у вас есть возможность выбирать, потому что как правило есть перегрузка операторов и в стандартной библиотеке языка есть decimal. Это позволяет использовать тот или иной тип по необходимости, тогда как float обычно бывает по дефолту.

      Вот примеры на Ruby и Python, с которыми я тоже много работал:

      Ruby 2.1.3p242
      irb(main):001:0> 0.1 + 0.2
      => 0.30000000000000004
      irb(main):002:0> 0.1 + 0.2 == 0.3
      => false
      irb(main):003:0> require ‘bigdecimal’
      => true
      irb(main):004:0> BigDecimal(‘0.1’) + BigDecimal(‘0.2’)
      => #
      irb(main):005:0> BigDecimal(‘0.1’) + BigDecimal(‘0.2’) == BigDecimal(‘0.3’)
      => true

      Python 2.7.6
      >>> 0.1 + 0.2
      0.30000000000000004
      >>> 0.1 + 0.2 == 0.3
      False
      >>> from decimal import Decimal
      >>> Decimal(‘0.1’) + Decimal(‘0.2’)
      Decimal(‘0.3’)
      >>> Decimal(‘0.1’) + Decimal(‘0.2’) == Decimal(‘0.3’)
      True

      > Ну что за бред несут ведущие?
      Осторожнее с такими высказываниями. Вы додумали мои слова, тогда как я намеренно не вдавался в подробности, потому что мы решили по возможности освещать темы коротко, когда нет большого смысла в описании технических подробностей. Это позволяет нам рассказать самое интересное, не растекаясь мыслью по древу. Некоторые вещи просто сложно вместить формат подкаста, на слух они сложно воспринимаются.

      В JS можно использовать decimal, но с помощью сторонних библиотек, которые работают, по моему опыту, слишком медленно (на пару порядков), что позволительно не для вех браузерных приложений. Хотити подискутировать, почему они работают медленее, и где как это связано с процессором и двоичной арифметикой? Так надо было с этого и начинать, а не бросаться оскорблениями.
      http://mathjs.org/docs/datatypes/bignumbers.html
      https://github.com/MikeMcl/bignumber.js#use

      И, как было также сказано в подкасте, без перегрузки операторов (ее нет в JS) использовать их – ад!

  • PSDCoder

    я так понимаю под инструментом для документирования REST API речь шла о http://swagger.io/, верно?

  • Arsenii Sigiller

    В тему документирования API, использовали на проекте такой инструмент: https://apiary.io/ – весьма удобная штука.

  • Gap

    Есть индекс в postgreSQL – VODKA , русские разрабатывали.

  • Ivan Voischev

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

    А еще проще будет тестировать состояния для компонент, так как можно подвязаться на события изменения класса типа *_hovered, *_focused и тд. Таким образом с состояниями единообразно работаем в css js и шаблонах. А что бы было проще работать с состояниями в js есть специальный блок https://github.com/bem/bem-components/tree/v2/common.blocks/control на основе которого можно быстренько сделать свой компонент со всеми состояниями

    )) Опять я про только БЭМ ))

  • stfoo

    Если позволите, замечание к ведущим: зачем повторять слово в слово то, что только что ответили?
    — Ты работешь через одеск, расскажи про это.
    — Через апворк точнее, его сейчас переименовали.
    — А, то есть одеска теперь нет, теперь апворк вместо него.

    • Может быть затем, что связь не идеальна и иногда некоторые слова не слышно во время разговора. Что за придирки по мелочам?

      • Прости, не хотел задеть. В целом подкаст клёвый, просто эта мелочь неприятно резанула слух несколько раз, решил поделиться.

  • Dmitry

    Про расширение прототипов элементов. Полимер по вашему как работает?