Skip to content

Instantly share code, notes, and snippets.

@monochromer
monochromer / html-stream-generator.js
Created Jun 24, 2020
WIP. Потоковая выдача html через генераторы
View html-stream-generator.js
function isGenerator(target) {
return target[Symbol.toStringTag] === 'GeneratorFunction';
}
function isIterable(obj) {
if (obj === null || obj === void 0) {
return false;
}
if (typeof obj === 'string') {
@monochromer
monochromer / nodejs-server.js
Created Jun 15, 2020
Веб-сервер на Node.js как итератор, как поток
View nodejs-server.js
const http = require('http');
const { once } = require('events');
const { Readable } = require('stream');
const PORT = 3000;
class WebServer extends http.Server {
constructor() {
super(arguments);
}
@monochromer
monochromer / notes.md
Last active May 30, 2020
Настройка веб-сервера
View notes.md

Сервер

Проверено на Ubuntu 18.04.4 LTS

Настройка root

Подключаемся

ssh root@IP
View skip-link-focus-fix.js
@monochromer
monochromer / user-content-wrap-text.md
Last active Feb 12, 2020
Контент, переносы и разрывы строк, переполнения контента
View user-content-wrap-text.md
  1. (Верстка: отображаем пользовательский контент)[https://habr.com/ru/company/docsvision/blog/310544/]
  2. (Где всё сложно с переносами строк. Вот все CSS- и HTML-хитрости для этого)[https://css-live.ru/articles/gde-vsyo-slozhno-s-perenosami-strok-vot-vse-css-i-html-xitrosti-dlya-etogo.html]
  3. (Передряги при переносах)[https://css-live.ru/articles/peredryagi-pri-perenosax.html]
  4. (Florian Rivoal. line-breaking)[https://florian.rivoal.net/talks/line-breaking]
  5. (A new terminal-style line breaking with CSS Text)[https://blogs.igalia.com/jfernandez/2019/06/10/a-new-terminal-style-line-breaking-with-css-text/]
  6. ()[https://www.cjcid.com/articles/wrapping-long-words-css-html/]

overflow-wrap (старый word-wrap)

  • normal
  • break-word - разрыв слов, но мягие переносы не рассчитываются по размерам контента. Если слово не может разорваться, переполняя контейнер, оно может разорваться где угодно во избежание переполнения.
@monochromer
monochromer / tokens.md
Created Nov 28, 2019 — forked from zmts/tokens.md
Про токены, JSON Web Tokens (JWT), аутентификацию и авторизацию. Token-Based Authentication
View tokens.md

Про токены, JSON Web Tokens (JWT), аутентификацию и авторизацию. Token-Based Authentication

Last major update: 21.10.2019

Основы:

Аутентификация(authentication, от греч. αὐθεντικός [authentikos] – реальный, подлинный; от αὐθέντης [authentes] – автор) - это процесс проверки учётных данных пользователя (логин/пароль). Проверка подлинности пользователя путём сравнения введённого им логина/пароля с данными сохранёнными в базе данных.

Авторизация(authorization — разрешение, уполномочивание) - это проверка прав пользователя на доступ к определенным ресурсам.

Например после аутентификации юзер sasha получает право обращатся и получать от ресурса "super.com/vip" некие данные. Во время обращения юзера sasha к ресурсу vip система авторизации проверит имеет ли право юзер обращатся к этому ресурсу (проще говоря переходить по неким разрешенным ссылкам)

@monochromer
monochromer / index.js
Last active Feb 6, 2020
Walk directory on node.js without recursion
View index.js
const path = require('path')
const fs = require('fs').promises
async function walk(fsPath, callback) {
const node = {
path: fsPath,
stat: await fs.stat(fsPath)
}
const stack = [node]
let item
@monochromer
monochromer / ComponentHelper.rb
Last active Oct 24, 2019
Ruby on Rails view component helpers
View ComponentHelper.rb
# https://www.innoq.com/en/blog/rails-frontend-components/
# app/helpers
module ComponentHelper
def component(name, data: {}, &block)
render_component("#{name}/#{name}", { data: data }, &block)
end
private
def render_component(name, locals, &block)
@monochromer
monochromer / hash-lib.js
Last active Oct 17, 2019
node.js hashing files
View hash-lib.js
const crypto = require('crypto');
const fs = require('fs');
async function hashFile(inputStream, algorithm = 'md5', encoding = 'hex') {
return new Promise((resolve, reject) => {
const hash = crypto.createHash(algorithm);
inputStream
.on('error', reject)
.on('data', data => hash.update(data))
You can’t perform that action at this time.