• Благодаря двухфакторной аутентификации я лишился всех вложенных денег и 3 лет работы
    0

    Вы пробовали восстановить доступ когда забыли пин код? Я пробовал — восстанавливается через смску. Так что это не панацея.

  • «Пора валить из фронтенда»: Андрей Ситник о стагнации сообщества, опенсорсе и не только
    +1
    Тут тоже не сложно догадаться что происходит.

    На самом деле сложно. Сложнее чем в примере про elm. Говорю как человек, который знаком с JS, HTML, JSX, PHP, Scala, Java, Objective-C и не знаком с view tree и elm.

  • Релиз Node.js 10.5: мультипоточность из коробки
    +1

    Эта фича — она как child_process, только на потоках. Принципиально ничего нового.

  • Новое API React: Suspense (ру субтитры, с выступления Дэна на JS Conf)
    0

    Ладно, реакт говно,$mol наше всё.

  • Новое API React: Suspense (ру субтитры, с выступления Дэна на JS Conf)
    0

    До кучи советую посмотреть про то, что же на самом деле такое react fiber: https://m.youtube.com/watch?v=gULfnbZ7dJk

  • Новое API React: Suspense (ру субтитры, с выступления Дэна на JS Conf)
    0

    Вы намекаете на то, что я не прав? Но это именно то, о чем я и написал, и никакого отношения к pausable execution thread это не имеет. Советую еще и видео посмотреть.

  • Новое API React: Suspense (ру субтитры, с выступления Дэна на JS Conf)
    0

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

  • Новое API React: Suspense (ру субтитры, с выступления Дэна на JS Conf)
    0

    $mol_fiber по своему предназначению — тоже самое что и React Fiber (pausable synchronous execution, в реакте эти паузы как раз для того чтобы изменения в браузер доставить). Suspense вообще не про то. Вы либо путаете что-то, либо сознательно заблуждаетесь.

  • Новое API React: Suspense (ру субтитры, с выступления Дэна на JS Conf)
    0

    Suspense это не Fiber


    Для того чтобы включить Fiber в реакте не надо переписывать приложение. И вообще разработчику не надо задумываться о том как там под капотом обновления происходят. Вы же предлагаете просто отдельное апи для этого: то есть про это апи надо думать на этапе разработки приложения.


    Согласитесь немного разные подходы.

  • React медленный, React быстрый: оптимизация React-приложения на практике
    +3

    Всем mobx!

  • Тестирование параллельных процессов
    +1

    В postgresql есть с недавних пор INSERT ... ON CONFLICT DO, который хорошо решает вышеописанные проблемы.
    Тем не менее, спасибо за рассказанный способ тестирования.

  • Тестирование параллельных процессов
    +4

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

  • Пишем простое приложение на React с использованием библиотеки cellx
    0

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


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


    P.S. В mobx есть ещё одна плюшка — отсутствие необходимости нормализовывать стейт, вместо этого можно хранить сложные графы объектов предметной области и не париться.

  • Пишем простое приложение на React с использованием библиотеки cellx
    0

    Блин, вам не нужно оборачивать компоненты чтобы угождать mobx. Берите и используйте как привыкли, mobx всё это нормально скушает. Как только у вас появится желание оптимизировать выделяете кусок рендера в отдельный компонент и всё, без селекторов, shouldComponentUpdate и прочего.

  • Пишем простое приложение на React с использованием библиотеки cellx
    0

    То есть по вашему, необходимость передавать <TodoItem todo={todo}> — это слишком "ненормально"? Вкусовщина чистой воды, мне вот больше нравится передавать сущности отдельным атрибутом, а не spread-оператором.


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


    В случае с redux для достижения той же производительности придётся писать дополнительный код, а не реорганизовывать существующий.

  • Пишем простое приложение на React с использованием библиотеки cellx
    0
    Вот как только вы это сделаете всё ваше приложение замкнется на самой высшей точке App.render и любое изменение будет приводить к его перерендеру.

    Именно так и происходит при использовании redux. С mobx — нет. Потому что в нём не меняется store. В нём меняются объекты внтури него. Например при изменении поля name у объекта класса Todo обновится только один конкретный TodoItem, который его отображает. Все соседние не будут изменены, а также сам список тоже. Это будет верно даже если в TodoItem не будет передан (в явном или неявном виде) store. Как раз за счёт реактивности. Должно быть только одно — компонент его отображающий должен быть @observer и всё.


    Если вам интересно, я могу как нибудь сделать форк mobx-todomvc и переписать его убрав передачу store во все дочерние компоненты, вы увидите что это ничего не изменит.

  • Пишем простое приложение на React с использованием библиотеки cellx
    0

    Проброска в компоненты store — всего лишь один из вариантов написания приложения. Вы можете пробрасывать либо через контексты (как и делает react-redux в его функции connect), либо вы можете оставить store только в рутовом компоненте, но пробросить во внутренние компоненты чистые данные/коллбеки и всё будет работать.

  • Пишем простое приложение на React с использованием библиотеки cellx
    0

    Сложнее. Почитайте https://habrahabr.ru/post/304340/

  • Пишем простое приложение на React с использованием библиотеки cellx
    0

    React не проверяет propTypes при сравнении vdom.

  • Пишем простое приложение на React с использованием библиотеки cellx
    0

    Нет не равносилен, потому что shouldComponentUpdate блочит ререндер всего поддерева компонента, а mobx/react позволяет доставлять точечно обновления куда следует.


    https://twitter.com/mweststrate/status/718444275239882753 — тут можно посмотреть сравнение туду-листа написанного с использованием redux vs mobx. С тем же mobx приходится писать сильно меньше обслуживающего кода, и получаем из коробки производительность.


    https://habrahabr.ru/post/304340/ — здесь отличный пример того, о чём я говорю. Посмотрите в статье бонусный совет в самом конце.

  • Пишем простое приложение на React с использованием библиотеки cellx
    0

    Идея то идеей, однако в большом развесистом приложении со сложными взаимосвязями рано или поздно всё придёт к тому, что на каждый чих будет вызываться render каждого компонента. А их много. Причём в резальтате ререндера не происходит обновления DOM — то есть ререндер был вхолостую. mobx/cellx позволяют эту порблему решить точечно дёргая рендер только тех компонентов, которые действительно надо обновить.
    Да, в redux того же можно достичь, но с большим объёмом ручной работы, с использованием всяких reselect, с хитрыми shouldComponentUpdate и так далее.

  • Использование ES6 генераторов на примере koa.js
    +2

    Но ведь и для express можно написать обработчик роута в async/await стиле:


    app.get("/url", async function(req, res, next) {
      let list = await getListFromDb();
      lst processedList = await processList(list);
      res.send(processedList)
    })
  • React.js: собираем с нуля изоморфное / универсальное приложение. Часть 3: добавляем авторизацию и обмен данными с API
    0

    Конечно можно — можно на каждый чих целиком рендерить страницу и заменять её. Реакт в общем то делает тоже самое, за одним искчлюением — он не заменяет дом-дерево каждый раз на новое, он его точечно обновляет, за счёт чего в общем то и достигается скорость.


    Кстати очень хотелось бы послушать аргументы, почему именно такой стиль является "извращённым".

  • React.js: собираем с нуля изоморфное / универсальное приложение. Часть 3: добавляем авторизацию и обмен данными с API
    0

    Например мы используем реакт не за его оптимизации над DOM. А из-за того, что на нём очень просто описывать мутации состояния интерфейса. Если быть точным — их не надо описывать вообще, просто описываешь один раз как рендерится стейт и меняешь его в процессе жизни приложения. На jQuery все такие мутации надо описывать вручную — типа а вот сейчас надо добавить строку в таблицу, для этого надо взять tr, напихать в него td, и так далее, и сделать добавление в конец tbody. В реакте этого делать не нужно.

  • Строим свой full-stack на JavaScript: Сервер
    0

    Спасибо за опыт с loopback

  • Тестирование RESTful API на NodeJS с Mocha и Chai
    +1

    Chain механизм вполне работает и со стандартными && операторами, ваш пример можно записать так:


    assert(typeof req.body === "object" && "error text" === req.body.error)
    Ну или два assert написать, будет ещё читаемее. Писать это несравненно легче.


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


    Описание условий формальным языком работало бы, если весь тест им описывался. А по факту — формальным языком описываются только ассерты, а код теста всё равно на обычном ЯП (в нашем случае javascript). В итоге тестировщику проще нучиться js, раз уж его всё равно надо знать.


    Ну и использование bdd-style проверок не делает тест автоматически проверяющим поведение. Я видел кучу юнит тестов, в которых проверки написаны в стиле expect/should.


    В итоге — не переубедили :) Я всё ещё считаю что expect/should синтаксис — оверинжениринг из разряда "потому что можем" с сомнительным профитом

  • Тестирование RESTful API на NodeJS с Mocha и Chai
    +1

    Объясните мне, пожалуйста, неужели приятно использовать chai?
    Вот эта вот вся магия типа req.should.have.status(200), её же писать умучаешься!
    Для себя решил что всегда в качестве assert-библиотеки буду использовать power-assert: assert(req.status === 200) — всё чётко и понятно, писать проще, читать легче, а power-assert даёт понятное описание ошибки.
    Может быть я сильно заблуждаюсь а chai является верхом инженерной мысли?

  • Финальный релиз Vivaldi 1.4 или 50 оттенков разного. В день
    +1

    Нет, внутри тот же хромиум, а не свой движок со своими багами.

  • Финальный релиз Vivaldi 1.4 или 50 оттенков разного. В день
    +3

    Единственная вещь которая тормозит меня, как веб разработчика, от перехода на Вивальди. Остальным всем очень нравится. Есть какой-нибудь роадмеп по поводу этой фичи?

  • Финальный релиз Vivaldi 1.4 или 50 оттенков разного. В день
    0

    DevTools уже в виде панели, как в хроме, или в виде отдельного окна?

  • RxConnect — когда React встречает RxJS
    –1
    Вот только появилась другая проблема — стало сложно делать простые вещи, а каждый чих (такой как поле ввода логина) должен проходить через action creator-ы, reducer-ы, и храниться в глобальном состоянии.

    Можно просто изначально использовать mobx и всё. Никаких проблем нет — код проще, обновления компонентов атомарнее.

  • It’s the future
    0

    Здесь речь идёт о том, что когда вы делаете так:


    render() {
      <Component onAction={this.handleAction.bind(this)}
    }

    , то Component при каждом рендере родителя будет получать новый обработчик onAction, а значит должен перерендерится, и так далее. Хотя, на самом деле, обработчик один и тот же, просто .bind(this) на каждый вызов возвращает новую функцию. Для решения этой проблемы и предлагается биндить заранее, можно через стрелочный синтаксис:


    handleAction = () => {}
    render() {
      return <Component onAction={this.handleAction}
    }

    либо декоратором (как на свойство класса, так и на весь класс).

  • Выбираем состав изоморфных React-приложений на следующие 12 месяцев
    0

    Ознакомился поверхностно, выглядит неплохо, особенно производительность. Попробуйте обновить mobx до 2.5 версии и провести тест ещё раз — авто обещал увеличение производительности в нём.

  • Выбираем состав изоморфных React-приложений на следующие 12 месяцев
    0

    Соглашусь с вами по поводу mobx — из коробки отличная производительность, отсутствие необходимости постоянно нормализовать/денормализовать сторейдж объектов доменной модели, а также минимум бойлерплейта — отличный повод сменить redux.

  • Я заглянул в папку node_modules, и вы не поверите, что произошло
    +27

    Взял на себя смелость проверить доводы в статье.
    express (последний релиз 2 месяца назад) не ставит yummy.
    Поставил руками yummy (последний релиз 8 месяцев назад) — в нём нет like-tweet.js
    Поставил ember — он не ставит glimmer (или я не тот ember поставил), окей, ставлю glimmer (релиз год назад) — в нём нет brittanica
    Окей, смотрим babel-core. Есть вот такой коммит: https://github.com/babel/babel/commit/f36d07d30334f86412a9d2771880cb566a82a9b6
    Что-то похожее на правду. Открываем историю файла: https://github.com/babel/babel/commits/f36d07d30334f86412a9d2771880cb566a82a9b6/packages/babel-core/src/api/node.js
    Берём самую первую версию файла: https://github.com/babel/babel/blob/3ef9bffcc240e60085fbb120de07d884448fbea3/packages/babel-core/src/api/node.js
    В нём нет картинки.
    Итого — ни один довод из статьи я не смог подтвердить.
    Судя по всему статья — просто штука, не принимайте всерьёз :)

  • Основы синтаксиса TypeScript
    +1

    С Typescript развитие и эволюция кода (рефакторинг) становятся очень простыми и лёгкими — изменил сигнатуру функции, и исправляешь все использования просто глядя на диагностический вывод компилятора.
    Очень часто бывает такое — пишешь какую-то сложную конструкцию, TS ругается. Пытаешься разбираться и понимаешь, что если бы он не ругнулся, то эту же ошибку ты бы уже получил в рантайме, причём в виде какого-нибудь "Cannot get property of null" или что-то такое.
    Короче с TypeScript почти (до стабилизации strictNullChecks) работает уравнение Компилируется === Работает.

  • В Госдуме обсуждают законопроект о полном запрете ГМО в России (второе чтение)
    –2
    Позволю процитировать коллегу:

    По поводу запрета ГМО. Причина по которой рассматривают этот закон — отсутствие в России компаний по производству ГМО семян (в научно исследовательских целях выращивание ГМО разрешено). А все растения ГМО, которые продаются неспособны к воспроизводству, т.е. растения стерильны, что уничтожает семенной фонд.

    Таким образом, достаточно ввести санкции по семенам и всё — страна померла от голода.

    Речь идет о так называемой генетической технологии ограничения использования (genetic use restriction technology, GURT), она же технология «Терминатор», или «семена-самоубийцы». Разработали ее исследовательский центр Министерства сельского хозяйства США вместе с компанией «Delta and Pine Land», которую позднее купила «Монсанто». Есть жесткий вариант GURT (растения, выросшие из семян, стерильны), есть смягченный (растения не стерильны, но ценные генно-модифицированные признаки проявляются в последующих поколениях только после обработки препаратом, который надо приобретать отдельно).
  • PHP-Дайджест № 85 – интересные новости, материалы и инструменты (24 апреля – 15 мая 2016)
    0

    Блин, ну я же там написал уже, что вот эти вот array_map и array_filter через пайп оператор ну прямо скажем что неудобно.
    Что касается остального — полностью согласен.
    Одним словом я не против пайп-оператора, я против того чтобы его наличие стало аргументов против вмерживания scalar_objects.

  • PHP-Дайджест № 85 – интересные новости, материалы и инструменты (24 апреля – 15 мая 2016)
    0

    Цитата из статьи:


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

    Экстеншн scalar_objects решает именно эту проблему.
    Сорри, это пример плохой в статье приведён с array_fitler и array_map. В самом RFC гораздо более продуктивный пример, который действительно через scalar_objects не решить

  • PHP-Дайджест № 85 – интересные новости, материалы и инструменты (24 апреля – 15 мая 2016)
    +3
    Pipe Operator однозначное зло. Уж лучше бы вмержили расширение scalar_objects Никиты Попова, которое решает ту же самую проблему сильно элегантнее.