All streams
Search
Write a publication
Pull to refresh
54
0
Variable name @kahi4

Database administrator

Send message

С одной стороны то, что сейчас идёт в стандартной поставке windows и близко не лежало рядом с полноценной и даже онлайн версией, с другой — они, похоже, просто outlook.com завернут в электрон, как обычно, максимум — добавят пару интеграций. Правда не до конца понятно чем это лучше PWA версии, которая уже есть и отлично работает

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

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

Швеция находится в суперпозиции: с одной стороны, английского хватает с головой и большая редкость когда кто-то не говорит на английском (и ещё большая, если они его вообще не понимают), с другой — шаг влево/вправо от ритма жизни квартира-работа и оказывается что все на шведском. Постоянный Гугл транслейт и чувство отдалённости и чужести в стране давит и не даёт жить на полную. Тут и так хватает разницы в культуре и неожиданных открытий, язык все же нужен. Но можно смело ехать в страну без знаний шведского (но тогда со знанием английского, безусловно).

Вообще, если говорить про текущее состояние (мы от него немного постепенно отходим, но пока оно работало неплохо), мы балансируем с useReducer и контекстами для локальных стейтов компонента, для глобального стейта используем редакс (преимущественно для того, что взаимодействует с сервером), для форм — формик. Для редакса написали свой хук — useSaga. Как результат — useCallback большая редкость, в основном, в составе переиспользуемых хуков. useMemo я тоже стараюсь избегать в пользу реселекта из редакса. Практика показывает, что один большой, специфичный под компонент, реселект и один useSelector не только в разы проще тестировать, но и лучше для производительности.


P.S. useSaga принимает в качестве аргумента сагу, возвращает Result (который может быть init, loading and done) и функцию для запуска саги. Внутри он диспатчит экшен и ждет ответный экшен об выполнении саги делает магию с каналами и форками внутри саги. Я знаю что это злой хук, который противоречит идеям и концепциям и редакса, и реакта. Но работает и просто умопомрачительно сокращает код.

Тут стоит уточнить, что компонент, который задействует хотя бы 1 хук — по определению impure. Ибо все хуки — side effects. А значит и component — с side-effects. В лучшем случае вам удастся сохранить некоторые кусочки вашего компонента чистыми (например callback в useMemo). Это в принципе неплохо.

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


// псевдоязык
run:
  Component(a, b, c);
effects:
  foo: 1,
  bar: 2,
  baz: 3,

Так что в теории, функция полностью зависит от переданных аргументов и все еще чистая.


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

На самом деле это каждый раз спорный пример. Да заодно мы, например, не используем нативные кнопки, а используем обертки. И никто не может сказать что оптимальнее — пересоздать функцию и перерисовать обертку или useCallback.


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


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

Это косвенно следует из «нельзя использовать хуки в циклах» https://reactjs.org/docs/hooks-rules.html


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

Хуки — это новая функция, добавленная в React v16.8. Хуки позволяют использовать все возможности React без написания классовых компонентов.

Хоть технически хуки и являются функциями (классы в жс тоже технически являются функциями), хуки это скорее целая парадигма обработки сайд эффектов, основанная на эффектах в ОКамл, позволяющая сохранять значения при многократном вызове функции, оставляя функцию при этом чистой.


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


Другая причина в том, что не существует конкретного способа повторно использовать логику компонента, наделенного состоянием. Несмотря на то, что HOC (Higher-Order Component) и шаблоны Render Props (метод передачи props от родителя ребенку, используя функцию или замыкание) решают эту проблему, здесь требуется изменить код классового компонента. Хуки позволяют совместно использовать логику с отслеживанием состояния без изменения иерархии компонентов.

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


Ну и контекст до хуков был труден в использовании, мягко говоря.


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

У нас один из самописных хуков (точнее целое семейство) вообще отломали горячую перезагрузку, пункт не засчитан. И не то чтобы они были какими-то особо хитрыми, так, обертка вокруг редуксовского диспатча.


Ну и вообще, если разглагольствовать, то основная причина, конечно же, стремление построения реактивной библиотеки с чистыми функциями. Мало того, что функциональные компоненты обычно меньше и проще чем классовые, так они еще и не содержат обычно стейтов и сайд эффектов, так что их было просто тестировать и вообще они полюбились людям. Но команда реакта достаточно долго думала как же все таки дать возможность делать lifecycle хуки в функциональных компонентах, вот и придумала. Правда это принесло в них состояние, и хотя функции сами по себе по-прежнему чистые, компоненты опять могут хранить внутренний стейт, что опять повышает требования к тестированию.


Будут ли хуки React работать внутри классовых компонентов — Нет.

Ну если очень хочется, то да, да и никто не мешает миксовать компоненты или использовать хуки в HOC.


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

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


Теперь к вопросам. Большинство из них — перепечатка из документации. Но довольно важные моменты остались за кулисами. Например, нет ни одного вопроса про useCallback. А именно useCallback — та невеселая штука, которая превращает красивые примеры в не очень то красивый реальный код. Ну т.е. useState2 вообще должен выглядеть примерно так:


import React, { useState } from "react";

function Counter() {
    const [count, setCount] = useState(0);

    const incrementCount = React.useCallback(
    () => {
        setCount((prevCount) => {
            return prevCount + 1;
        });
    },
   [setCount]);

    const decrementCount = useCallback(
    () => {
        setCount((prevCount) => {
            return prevCount - 1;
        });
    }, 
    [setCount]);

    return (
        <div>
            <strong>Count: {count}</strong>
            <button onClick={incrementCount}>Increment</button>
            <button onClick={decrementCount}>Decrement</button>
        </div>
    );
}

Еще не вижу правил использования хуков (никаких хуков внутри условных выражений, нельзя делать массивы хуков и тому подобное), заодно мне лично всегда интересно спрашивать "почему такие правила вообще существуют", но это уровень чуть выше.


Спасибо, мы вам перезвоним.

Открыв страницу https://www.gosuslugi.ru/help/faq/c-1/2752


Я вижу что вам нужен, как минимум, паспорт. СНИЛС тоже не помешает. Не знаю, может и можно через письмо, которое получить по свидетельству о рождении, но я бы не был в этом уверен.

«Сферум» будет поддерживать авторизацию через учётную запись VK или портала «Госуслуги»,

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

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


Да и те же скандинавы — электрифицируют все что можно, у Норвежцев супер оптимистичный план, но у них есть довольно халявный источник большого количества электричесва (ГЭСы)

Паровозы остались в строю, часть ЖД сможет функционировать обратно. И паровые двигатели, в целом, не то чтобы что-то космическое, должно хватить на часть задач.

Вопросы по топику: что со школами и образованием в целом? Медициной? Разнообразие еды?


Насколько люди общительны и как просто заводить друзей (если возможно) и проявляется ли ксенофобия? (Например, в Швеции сложно найти работу не в IT, если в твоей фамилии нет букв типа ä).

Я угадал верный результат только потому что раз есть вопрос (и целая статья на эту тему), значит не очень очевидное поведение. Логическо только 2 подошла. Но, стоит признаться, я думал что приоритет у вычислительного рака NaN выше и все функции, которые на него натыкаются, так же должны возвращать NaN без исключений.


Более того, в некоторых языках (не будем тыкать в js пальцем) за NaN может скрываться не какое-то число, которое не влезло в дабл или что-то в этом духе, а строка или вообще объект. В нем выражение Math.pow(1, "give me a power!") или даже с смайликом в качестве степени — возможно. Единица в степени эмоджи, равная единице, выглядит странно.


Справедливости ради, в JS все наоборот, как обычно:


1 ** NaN // NaN

"Give me a power" ** 0 // 1
new Object() ** 0 // 1

Похоже на проблему на заправках (только в обратную сторону) — кто-то может приложить NFC карту, но потом просто уехать, следующий тогда на этой помпе может заправиться "бесплатно". (Circle K пишет что у них там камеры установлены, они считывают номер и могут определять такие ситуации. А еще могут отказывать в заправке, если у вашего номера есть недобросовестная история. Но я склонен не доверять этому)

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


Хорошая статья на вики, где сказано про специальные конденсаторы. Насколько я понял, это все же не относится к RFID, который реально просто деактивируется командой килл (которая, внутри, прожигает EEPROM или что она там делает).

Ответил ниже. Тоже сперва так подумал, но в других магазинах то не пищит, если просканировать, но пищит, если не сканировать. Там есть комманда kill, которая что-то делает аппаратно.

Да, я уже понял. Полез гуглить — у них есть kill command (https://itlaw.wikia.org/wiki/Kill_command#:~:text=Definition,responding%20to%20any%20additional%20commands.) (для выжигания электромагнитным импульсом нужно использовать магнитрон из микроволновки, что не есть хорошо в магазине, покуда он выжгет все, на что попадет). Вряд ли NFC поддерживает эту команду.


Обратно к оригинальному вопросу — больше похоже на механическое повреждение, брак или что-то в этом духе, чем что его выжгли этой машиной или, тем более, размагнитили.

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

Information

Rating
Does not participate
Date of birth
Registered
Activity