Skip to content

Instantly share code, notes, and snippets.

View ai's full-sized avatar
🚀

Andrey Sitnik ai

🚀
View GitHub Profile
name: Update target browsers
on:
schedule:
- cron: "0 2 1 * *"
permissions:
contents: write
pull-requests: write
jobs:
update-browserslist-database:
runs-on: ubuntu-latest
➜ npx autoprefixer --info
Browsers:
Chrome for Android: 94
Firefox for Android: 92
QQ Browser: 10.4
UC for Android: 12.12
Android: 94
Chrome: 94, 93, 92, 91
Edge: 94, 93, 92
Firefox: 93, 92, 91, 78

New API for Nano Stores

We split all stores to 2 categories: store (for any store) and map (for key-value object and special helpers to work with keys).

Memory store is a regular store, which keep value in the memory (and do not clean it until page will be closed).

import { memoryStore } from 'nanostores'

let profileCache = memoryStore<Profile>(guestProfile)
$ npx autoprefixer --info
Browsers:
  Chrome for Android: 90
  Firefox for Android: 87
  QQ Browser: 10.4
  UC for Android: 12.12
  Android: 90
  Chrome: 90, 89, 88, 87
  Edge: 90, 89, 88

Краткая характеристика:

  1. У него много сторов и сторы могут зависеть друг от друга, а не один большой стор и селекторы. То есть он ближе к Эфектору, чем в Редаксу/MobX. Всё ради tree shaking.
  2. Он ближе к стору прямых измений. В публичном API нет экшенов. Но всё-таки value = 1 на манер MobX запрещены — значения можно менять только через спец. методы. И в синхронизации состояния с сервером экшены есть (просто скрыты из публичного API).

Плюсы:

  1. Может работать без Логакса, чисто как стейт-менеджер.
  2. API специально создан, чтобы хранить в сторах бизнес-логику, чем разгружать компоненты и упрощать переносимость приложения между фреймворками.
  3. От 157 байт (!) в вашем JS-бандле.
  4. Расчитан на агрессивный tree shaking, чтобы в JS-бандле был только код того состояния, которые используются в текущих страницах.
  5. Очень ленивый — сторы на которых никто не подписан выгружаются из памяти, а их бизнес-логика останавливается.
class Post {
title: string = ''
text: string = ''
}
class Group {
title: string = ''
roles: string = ''
}
@ai
ai / logux-data.md
Last active November 15, 2020 16:55

Logux Data API Proposal

Logux Data is a new state manager for Logux with: built-in CRDT types, GraphQL-like data loading, good tree-shaking and types support.

Client

Initialization

React

Zero-knowledge Auth

The modern email/password authentication does not protect users from bad practices and, in the secure version (with 2FA), is difficult to use.

The IT world needs more discussion about authentication mechanisms to find more convenient and secure options.

This proposal contains an unusual authentication for a small subset of use cases. What problems does it have in terms of security and usability?

Task

Идея механизма авторизации с нулевым знанием

Современный механизм авторизации через почту/пароль поощряет пользователя на опасные привычки и в безопасной версии (с 2FA) сложен в использовании.

ИТ-миру нужно больше обсуждения механизмов авторизации, чтобы прийти к более удобный и безопасным вариантам.

Это предложение содержит необычный формат авторизации для узкого круга задач. Какие ошибки в нём могуть быть в плане безопасности и удобства использования?

@ai
ai / cloudflare-matomo-worker.js
Last active March 28, 2024 19:11
Cloudflare worker to send statistics to Matomo
async function trackVisit (request, visitorId) {
let data = {
token_auth: 'secret',
country: request.headers.get('CF-IPCountry'),
urlref: request.referrer || request.headers.get('Referer'),
idsite: 1,
lang: request.headers.get('Accept-Language'),
apiv: 1,
rand: Math.random().toString(16).slice(2),
url: request.url,