All streams
Search
Write a publication
Pull to refresh

All streams

Show first
Rating limit

Заголовок: Я переписал react-query | Легковесный хук для асинхронного получения данных и кэширования в React

Привет всем!

Я разработал легковесный React-хук, аналогичный React Query, с основными функциями: получение данных, кэширование, повторные попытки и др. Он компактнее и проще в настройке. Полный код доступен на GitHub и в npm как api-refetch.

Зачем создавать собственный хук?

  1. Легковесность: React Query и SWR мощные, но крупные. Мой хук идеален, когда важен размер пакета, особенно для зависимостей вроде Intlayer.

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

  3. Без провайдера: Избегаю использования Context Provider для глобального доступа, предлагая версию на базе Zustand.

  4. Учебное упражнение: Понимание внутренностей кэширования и управления состоянием.

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

Функции

  • Получение данных и управление состоянием: Загрузка, ошибки, успешные данные.

  • Кэширование и хранение: Через React или Zustand, поддержка локального хранилища.

  • Повторные попытки и валидация: Настраиваемые лимиты и интервалы.

  • Активация и инвалидизация: Управление запросами в зависимости от других данных.

  • Параллельные запросы: Предотвращение дублирования запросов при монтировании нескольких компонентов.

Пример использования

Установка

Клонируйте репозиторий или установите через npm:

npm install api-refetch

Быстрый пример

import { AsyncStateProvider, useAsync } from "api-refetch";

function App() {
  return (
    <AsyncStateProvider>
      <UserDetails />
    </AsyncStateProvider>
  );
}

const fetchUserData = async () => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve({ name: "John Doe" });
    }, 1000);
  });
};

const UserDetails = () => {
  const { isLoading, data, error, revalidate } = useAsync(
    "userDetails",
    fetchUserData,
    {
      enable: true,
      cache: true,
      store: true,
      retryLimit: 3,
      retryTime: 10000,
      autoFetch: true,
      revalidation: true,
      revalidateTime: 300000,
      onSuccess: (data) => console.log("Данные получены:", data),
      onError: (error) => console.error("Ошибка:", error),
    }
  );

  if (isLoading) return <div>Загрузка...</div>;
  if (error) return <div>Ошибка: {error}</div>;
  return (
    <div>
      <h1>{data?.name}</h1>
      <button onClick={revalidate}>Обновить</button>
    </div>
  );
};

Попробуйте api-refetch, сообщите об ошибках или внесите вклад. Обратная связь приветствуется!

GitHub: api-refetch

Счастливого кодинга!

Tags:
Total votes 1: ↑1 and ↓0+1
Comments2

Как разводят венчурных капиталистов на бабки по поводу процессоров

Когда в СМИ публикуют статью про новый революционный процессор, но в статье нет бенчмарок, тут все понятно: статью можно игнорировать, это просто мусорный набор символов на экране. А если бенчмарки есть? Тут тоже не все так просто. Лет 10 назад был стартап, который показывал венчурным капиталистам слайды, что их революционно гибкий процессор (который динамически выделял потоки) по тактам в 3 раза быстрее чем старшее ядро ARM. Измерение было с помощью симуляции на уровне регистровых передач и в качестве бенчмарки была то ли Dhrystone, то ли CoreMark/MHz. Но они "забыли" указать на слайдах, что если синтезировать их процессорное ядро c библиотекой ASIC на том же техпроцессе, на котором и ядро ARM, против которого они конкурируют - то статический анализ тайминга покажет, что максимальная тактовая частота, которую они могут использовать - втрое меньше, чем у ARM. То есть втрое лучше по тактам умножаем на втрое хуже по частоте = никакого улучшения. Об этом факте я случайно услышал на парти - человек сказал цифру и я сложил два плюс два, то бишь умножил 3 на 1/3.

Также замечу что развод на бабки VC ничуть не менее аморален, чем развод на бабки пенсионеров по телефону, так как в фонды VC вкладывают в том числе и частные пенсионные фонды.

Tags:
Total votes 12: ↑11 and ↓1+13
Comments11

Я сохраняю историческое наследние на Wikimedia Commons, например газеты 19 века, но их очень много - буду рад если вы присоединитесь, научу как там делать.

Вот например страница одной старой газеты https://commons.wikimedia.org/wiki/Category:Minskie_eparhialnye_vedomosti

Исторические данные важно сохранять - многое мы уже потеряли. Где-то библиотеки выкладывают на своих сайтиках отсканированное, где-то генеалоги за свои деньги заказывают сканы и потом публикуют в Google Drive, что-то берется с archive.org. Может у вас дома есть газеты 19 века?

Вот тут всё что я загрузил.

Например, одна из текущих задач - Могилевские Губернские Ведомости. В идеале их нужно не только загрузить, с правильным проставлением категорий по годам, но и вынуть тексты для другого сервиса ru.wikisource.org

Авторское право для газет 19 века уже истекло, так что это все легально.

Пример ценного
Пример ценного

Пишите кто тоже хочет загружать на Коммонс и спасать историю, делать её доступнее для анализа людьми и машинами.

Tags:
Total votes 4: ↑4 and ↓0+4
Comments2

ls аудио с битрейдом и сортировкой, на баше, используя ffprobe

while read i; do echo "$(ffprobe -i "$i" 2>&1 | egrep -o 'bitrate: [0-9]{1,3} .{4}' | cut -d' ' -f2-3)" "$i"; done < <(find . -type f -printf '%P\n' \( -iname \*.ogg -o -iname \*.mp3 \)) | sort -n -k1,1

Пример того что получаем:

128 kb/s aaa.mp3
128 kb/s bbb.mp3
128 kb/s ccc.mp3
256 kb/s xxx.mp3
256 kb/s yyy.mp3
256 kb/s zzz.mp3

Базировано на https://www.linuxquestions.org/questions/linux-newbie-8/how-to-list-bitrate-of-all-my-mp3's-on-command-line-4175601321/#post5680865

Расширил и опубликовал https://gitlab.com/vitaly-zdanevich/ffprobe-wrapper-lister-for-mp3

Tags:
Total votes 1: ↑1 and ↓0+3
Comments0

Вышел Python 3.13. Что в этом для не знакомых с Python?

Куй железо не отходя от кассы

Иными словами, Вы тут же захотите его попробовать - самое время, это стало (много) приятнее чем когда-либо.

Что делать и кто виноват

Виноват, очевидно, Гугол - запоздал с увольнениями в команде Python. А делать придётся компиляцию из сорцов - даже в AUR сейчас RC1. Как - на примере Arch в форме EndeavourOS.

Python часть системы, но он 12, поэтому 13 нужно держать отдельно. Скачав с python.org и распаковав

./configure --enable-optimizations --with-lto --enable-experimental-jit=yes --prefix=/home/andy/.python
make

Конечно, чего-то да не хватит, но об этом будет чётко сказано, поэтому и например

yay clang
yay llvm
make

Будет чётко сказано чего не получилось, за 12 такого не помню, у меня - без tkinter. Ну и ладненько. Поскольку make test придумали трусы,

make install
~/.python/bin/python3 -m venv Python13Env
cd Python13Env
python

И наслаждаемся новыми фишками - редактируем процедуры и выходим легко, как по мне - самое очевидное. И да, на первом же (дурацком) тесте - на 10% быстрее.

Tags:
Total votes 3: ↑2 and ↓1+3
Comments0

British Airways столкнулась с хаосом в выдаче багажа из-за конфликта с платформой Vodafone. Путаница в багажной системе произошла сутки назад. Она была настолько серьёзной, что пассажиров отправляли на рейсы без зарегистрированного багажа, а многие до сих пор не могут получить его. При этом рейсы также отменялись, и пассажирам приходилось оставаться в аэропорту, так как им не предоставляли отель.

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

Проблема возникла в терминале 5 аэропорта Хитроу. Теперь там советуют пассажирам проконсультироваться с British Airways перед поездкой в ​​аэропорт.

ИТ-отделы British Airways и Vodafone совместно работали над решением проблемы конфликта их платформ, которая оказалась «системной».

В 2022 году рейсы авиакомпании приостанавливали из-за сбоя в приложении для планирования полётов. 

Ранее в этом году British Airways объявила о плане трансформации на сумму $8,8 млрд. Так, будут обновлены веб-сайт и мобильное приложение. British Airways также пообещала, что «передовые технологические системы стоимостью в несколько миллионов фунтов, искусственный интеллект и машинное обучение помогут рейсам отправляться вовремя, что создаст 350 новых рабочих мест в Хитроу». 

Tags:
Total votes 2: ↑2 and ↓0+4
Comments1

Bluesky предложит пользователям персонализированные «стартерпаки» друзей и лент. В соцсети появилась вкладка «Starter Packs», где можно создавать такие пакеты в неограниченном количестве.

Это можно делать вручную либо с использованием алгоритма. Он предложит предварительно заполненный стартовый пакет, который затем можно отредактировать. Всего можно порекомендовать до 50 человек и до 3 пользовательских каналов. Те, кого добавили в пакет, не могут удалиться оттуда. Об этом придётся просить создателя в личных сообщениях.

Задав имя и описание стартерпака, им можно будет делиться по ссылке и QR-коду как внутри Bluesky, так и в других приложениях.

Опция доступна бесплатно всем пользователям соцсети.

Tags:
Total votes 2: ↑2 and ↓0+2
Comments0

Artery AT32F407 и scanf()

Речь пойдет об отладке AT-START-F407 V1.3. В составе платы находится программатор/отладчик AT-Link-EZ V1.2, который подключается по USB к ПК, где он виден как COM порт.

Его же можно использовать для целей отладки, а именно выводить информацию на ПК с помощью printf(). На эту тему а Artery есть AN0015_Printf_Debug_Demo, описанные там переопределения уже содержатся в файле at32f403a_407_board.c:

FILE __stdout;

#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

PUTCHAR_PROTOTYPE
{
  while(usart_flag_get(PRINT_UART, USART_TDBE_FLAG) == RESET);
  usart_data_transmit(PRINT_UART, (uint16_t)ch);
  while(usart_flag_get(PRINT_UART, USART_TDC_FLAG) == RESET);
  return ch;
}

Все что нужно сделать, это добавить в код функцию инициализации uart_print_init(115200), где 115200 скорость COM порта.

Аналогичным образом можно с консоли передавать данные в МК с помощью функции scanf(). (На эту тему я не нашел AN). Добавим в файл at32f403a_407_board.c:

FILE __stdin;

#define GETCHAR_PROTOTYPE int fgetc(FILE * f)

GETCHAR_PROTOTYPE
{
  uint8_t cha = 0;
  usart_flag_clear(PRINT_UART, USART_ROERR_FLAG);  // Clear Overrun flag
  while(usart_flag_get(PRINT_UART, USART_RDBF_FLAG) == RESET);	
  cha = usart_data_receive(PRINT_UART);  
  usart_data_transmit(PRINT_UART, (uint16_t)cha); // Echo 
  return cha;
}

Все работает? Нет. Надо еще вызвать функцию

usart_receiver_enable(PRINT_UART, TRUE);

scanf("%d", &k);
k = 2*k;
printf(" \n\r You entered = %d", k);

И, теперь все работает.

Tags:
Total votes 1: ↑1 and ↓0+2
Comments0

Написал ебилд (это инсталлятор для Gentoo Linux) игры Gigalomania - клон известной Mega-Lo-Mania. Люблю эту игру, но печально видеть что оригинал выглядит значительно лучше. Пишу сюда чтобы сказать вам - вдруг вы или знакомый хотите потренироваться в создании визуального дизайна игр, улучшить портфолио на этом некоммерческом проекте - автор на странице игры написал что ждет вас:

Help wanted!

...

Graphics artists - Whilst most of the "placeholder" graphics have now been removed, there's still plenty of room for improvement, so please let me know.

Игра относительно простая, текстур там относительно немного. Механика классная.

а выглядит плохо
а выглядит плохо

Может знаете еще в какое комьюнити можно написать?

Сайт игры: https://gigalomania.sourceforge.net/

Спасибо.

Tags:
Total votes 1: ↑1 and ↓0+3
Comments0
Tags:
Total votes 8: ↑7 and ↓1+6
Comments0

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

Обычная сверху и надувная снизу
Обычная сверху и надувная снизу

Если вам нравятся надувные, то полезно знать, что в полете давление в самолете на 25 процентов меньше чем на земле.

Поэтому если надуть подушку нормально еще до взлета, то она при наборе высоты будет раздуваться пока швы не разойдутся.

Надо ее или сдувать по мере взлета или надувать уже на высоте.

А не надувным подушкам высота не страшна.

Tags:
Total votes 2: ↑1 and ↓10
Comments1

Простое крепление проводов в контроллерах idiBus. Без кабельных каналов. Дешево и сердито.

Вдоль торца платы ряд отверстий
Вдоль торца платы ряд отверстий

Выходящие провода крепятся хомутами прямо к плате через отверстия по краю платы.

Или есть специальные хомуты, которые вставляются в эти отверстия.

Принимаются предложения и идеи по всяким полезным видам крепления проводов.

Tags:
Total votes 2: ↑2 and ↓0+2
Comments3

Тут в статье рассуждают о необходимости разработки универсального языка человеческого общения. А ведь у человечества есть ещё туча нестандартизированных вещей, из-за которых мы теряем много ресурсов и возможностей. Вот навскидку:

  1. Системы мер: имперская (галлоны, футы...) и метрическая. На имперской сидит США и ещё несколько стран. Авиация по прежнему использует мили и футы.

  2. Параметры сетевого электричества: напряжение (относительно легко конвертировать) и частоты (гораздо сложнее). Япония, например, поделена примерно пополам по частотам 60 и 50 Гц, из-за дорогой конверсии много потерь.

  3. Электророзетки и вилки, их наверное под десяток несовместимых стандаров в мире.

  4. Левостроннее и правостороннее движение.

  5. Параметры колеи железных дорог, настоящий зоопарк.

Давайте продолжим список.

Tags:
Total votes 6: ↑6 and ↓0+6
Comments5

Каково ваше мнение о https://proofcheck.org? Это cmd-инструмент, который позволяет проверять TEX-овые доказательства на математическую (!) корректность. Но на русском статей о нём нет, хотя он прост в использовании и по своему принципу функционирования. Прилагаю также proof-of-concept от авторов: https://tug.org/TUGboat/tb30-2/tb95neveln.pdf

Суть в том, что до этого существовало много proof assistant-ов, но эти предложили принципиально новый стандарт парсинга логики, который уложился в скрипт на питоне. В отличие от семейства HOL, основные идеи которого восходят аж к 1970-м. Я считаю, что нужно популяризировать ProofCheck и в рунете.




Tags:
Total votes 1: ↑1 and ↓0+1
Comments0

Клавиатуру Keychron Q1 HE оснастили магнитными аналоговыми переключателями на эффекте Холла. Она стоит $214.

Переключатели на эффекте Холла способны различать лёгкое и полное нажатие клавиши. Q1 HE можно настроить с учётом этой опции. Также в клавиатуре есть функция «быстрого запуска», которая может регистрировать повторное нажатие клавиши в ту же секунду. В итоге на одну кнопку можно назначить до четырёх команд.

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

Q1 HE можно использовать как проводным, так и беспроводным способом через Bluetooth или с помощью прилагаемого USB-ключа 2,4 ГГц.

Клавиатура получила алюминиевый корпус, а колпачки клавиш изготовлены из прочного двойного ПБТ. Они используют собственный профиль OSA Keychron в ретро-стиле, а также оснащены ввинчивающимися стабилизаторами, установленными на печатной плате. Линейные магнитные переключатели Gateron 2.0 технически допускают горячую замену, но только на другие переключатели с эффектом Холла.

Tags:
Total votes 4: ↑4 and ↓0+4
Comments5

Tesla предупредила, что налоговые льготы на покупку Model 3 в США урежут вдвое — с $7500 до $3750 к 1 января 2024 года. Эти изменения коснутся заднеприводной модели 3 и модели 3 Long Range.

Model 3 стоит от $36 тысяч и считается самой дешёвой в линейке Tesla.

Вероятно, автопроизводитель не может удовлетворить требования к поставщикам в соответствии с Законом о сокращении инфляции (IRA). Это может повлиять на налоговые льготы для моделей Y и Model X в следующем году.

На прошлой неделе министерство финансов США предложило новые рекомендации по налоговым льготам в рамках IRA. Начиная со следующего года, льготные авто «не могут содержать никаких компонентов аккумуляторной батареи, которые производятся или собираются иностранным предприятием, вызывающим озабоченность регуляторов». К таким заводам относятся принадлежащие, контролируемые или находящиеся под юрисдикцией или руководством правительств Китая, России, Северной Кореи и Ирана.

Tags:
Total votes 3: ↑3 and ↓0+3
Comments0