Skip to content

Instantly share code, notes, and snippets.

@davidmz
davidmz / english_bigrams.json
Created November 8, 2024 11:50
Russian and English bigrams
{
" s": 0.014944913767107734,
"sp": 0.0021082122196572207,
"pa": 0.003313127320219675,
"at": 0.009779435082246065,
"ti": 0.010194362870934783,
"ip": 0.0009291539568238191,
"ph": 0.0012223786192380964,
"hy": 0.0006282128559249556,
"yl": 0.0007373260036192804,

Криптопосты

Задача

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

Как написать пост

Пусть Алиса хочет создать криптопост, видимый ей, Бобу и Кларе. Для этого все трое должны иметь пары GPG(?)-ключей, причём все публичные ключи (Ka, Kb, Kc) должны быть доступны (например, в самоописании юзера), бразуер/клиент возможного читателя поста также должен знать приватный ключ читателя.

{
"page-background": "url(\"https://images.unsplash.com/photo-1584203095493-6d23037b6b13?w=1920&q=80\")",
"box-header-background": "#f3c635",
"link-color": "#a56c0b"
}
@davidmz
davidmz / settable-context.jsx
Last active April 20, 2020 09:24
React context that can be updated from the consumer
import React, { createContext, useState, useCallback } from 'react';
export const context = createContext({
query: '',
setQuery: () => undefined,
});
export function Provider({ children }) {
const [query, setStateQuery] = useState('');
const setQuery = useCallback((q) => setStateQuery(q), []);
@davidmz
davidmz / snippet.js
Created November 25, 2019 14:00
[500px sorder] Snipper for sorting 500px private gallery in photo id order #500px
(async () => {
const galleryId = (() => {
const m = /^\/g\/(\w+)$/.exec(location.pathname);
if (!m) {
throw new Error("Invalid location (not a private gallery)");
}
return m[1];
})();
const userId = window.currentUser.id;
const csrfToken = window.PxApp.csrf_token;
@davidmz
davidmz / loops.js
Last active September 12, 2019 13:06
Loop control script for MPV video player #video #mpv
var hotKey = "k";
var numRe = /\d+(?:\.\d+)?/g;
var interval = null;
mp.register_event("file-loaded", function() {
// Trying to load loops file
mp.remove_key_binding("loopContinue");
clearInterval(interval);
var videoPath = mp.get_property("path");
@davidmz
davidmz / frfTop20Hashtags.txt
Created September 9, 2019 07:54
[Top 20 freefeed post hashtags] At 2019-09-04 #freefeed
name | count
-------------------+-------
frf_inspired | 480
worldcup | 288
training | 259
wudru | 258
music | 255
poidem | 244
spb | 229
1 | 227
@davidmz
davidmz / 1-nested-routes.ts
Last active August 28, 2018 10:56
Nested routes for mobx-state-router
import { Route as PlainRoute, RouterStore, RouterState } from 'mobx-state-router';
import { TransitionHook } from 'mobx-state-router/dist/types/router-store';
export interface Route extends PlainRoute {
children?: Route[];
}
type KeysOfType<A extends object, B> = { [K in keyof A]: A[K] extends B ? K : never }[keyof A];
type HookKey = Exclude<KeysOfType<PlainRoute, TransitionHook | undefined>, undefined>;
@davidmz
davidmz / collect-links.php
Created February 22, 2017 14:45
Short link extractor for Friendfeed archives
@davidmz
davidmz / log-crypt.go
Last active November 20, 2016 19:33
Скрипт для обфуцирования юзернеймов, UUID-ов и токенов в логах Фидика
package main
import (
"bufio"
"crypto/hmac"
"crypto/sha1"
"encoding/hex"
"flag"
"fmt"
"os"