20 random bookmarks

2024-09-22

42.

userjs/mastodon at master · afontenot/userjs

github.com/afontenot/userjs/tree/master/mastodon

Mastodon - Threaded Replies

2024-08-03

37.

Console.trace() - Интерфейсы веб API | MDN

developer.mozilla.org/ru/docs/Web/API/console/trace_static

2024-07-29

Reposted 36.

Just discovered in amazement that in Bash scripts,... | Nathan Manceaux-Panot

friends.grishka.me/posts/1392836

any variable named SECONDS will automatically increment every second. Bash is bonkers

2024-07-25

35.

Про гибридные ядра

linux-kernel-labs.github.io/refs/heads/master/so2/lec1-intro.html#micro-kernels-vs-monolithic-kernels

Linus Torvalds said of this issue:

"As to the whole 'hybrid kernel' thing - it's just marketing. It's 'oh, those microkernels had good PR, how can we try to get good PR for our working kernel? Oh, I know, let's use a cool name and try to imply that it has all the PR advantages that that other system has'."

2024-06-20

30.

Mathematical and Puzzle Fonts/Typefaces

erikdemaine.org/fonts

2024-03-29

26.

Результаты Московского Марафона 24 сентября 2017 года

moscowmarathon2017.datalaboratory.ru/results?runners=1,18

2024-03-16

25.

Sliced Time and Space

dev.overpass-api.de/blog/sliced_time_and_space.html

All versions

Another desire has been to deliver all version of a given object.
This is not on the mission statement for Overpass API:
First, it does not make much sense because the geometry of a way or relation can change
without a new version.
Second, Overpass API is designed around time slices and not object's life cycles.
Nonetheless, I have implemented a pair of functions that allows at least the baseline functionality:

timeline(way,100);
for (t["created"])
{
retro (_.val)
{
way(100);
out meta;
}
}

24.

CSS Naked Day

css-naked-day.github.io

April 9 is CSS Naked Day!

2024-02-23

21.

Закон Хипса — Википедия

ru.wikipedia.org/wiki/Закон_Хипса

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

2024-02-19

Reposted 19.

Pagefind | Pagefind — Static low-bandwidth search at scale

pagefind.app

Pagefind is a fully static search library that aims to perform well on large sites, while using as little of your users’ bandwidth as possible, and without hosting any infrastructure.

2024-01-29

18.

Dump nginx config from running process?

serverfault.com/questions/361421/dump-nginx-config-from-running-process

# Set pid of nginx master process here
pid=8192

# generate gdb commands from the process's memory mappings using awk
cat /proc/$pid/maps | awk '$6 !~ "^/" {split ($1,addrs,"-"); print "dump memory mem_" addrs[1] " 0x" addrs[1] " 0x" addrs[2] ;}END{print "quit"}' > gdb-commands

# use gdb with the -x option to dump these memory regions to mem_* files
gdb -p $pid -x gdb-commands

# look for some (any) nginx.conf text
grep worker_connections mem_*
grep server_name mem_*

2024-01-28

17.

C Preprocessor tricks, tips, and idioms

github.com/pfultz2/Cloak/wiki/C-Preprocessor-tricks,-tips,-and-idioms

2024-01-23

16.

Коты-программисты. Сезон #02.

yzh44yzh.github.io/season_02.html

- Распределенный веб-фреймворк.

- Кот, что ты там говоришь?

- Представь себе, Django, распределенная, в кластере.

- Твоя безумная идея, Тихон, граничит с гениальностью.

- Это не моя безумная идея, это идея сообщества Elixir/Phoenix.

2024-01-17

14.

Detecting the use of “curl | bash” server side

www.idontplaydarts.com/2016/04/detecting-curl-pipe-bash-server-side

2024-01-16

13.

Jeffrey Paul: Your Computer Isn't Yours (ru)

sneak.berlin/i18n/2020-11-12-your-computer-isnt-yours.ru

2024-01-11

12.

Google начал определять 2ГИС как вредоносное приложение и просить его удалить

habr.com/ru/news/785496

С уходом из гугл плея в рустор многие российские приложения, например банки, с удовольствием добавили себе в манифест пермишены, с которыми гугл им никогда бы не дал опубликоваться в официальном сторе, например "QUERY_ALL_PACKAGES", чтобы следить за тем какие приложения установлены на устройстве пользователя. Эта информация может быть реально необходима приложению примерно никогда, в 99% случаев она нужна различным SDK которые собирают информацию о пользователе, телеметрию, профили для аналитики, статистики, и т.д. и ничего полезного для самого пользователя не делают. Гугл не разрешает публиковать приложения с этим пермишеном в официальном гугл сторе, но вот, сразу же после выхода первой же версии приложения в русторе, от приложений российских банков в сеть полетели данные об установленных приложениях.

Абсолютно та же история с чтением СМС. Гугл, в принципе, даёт право публиковать подобные приложения в сторе, но проверяет их в ручном режиме и смотрит действительно ли им необходим доступ к всем СМС, если нет - разворачивает. Разумеется, никаким банкам никакой доступ к СМС не может быть нужен в принципе. "Нам нужны ОТР-коды из СМС" - не оправдание. Для этого, во-первых, есть специальное апи, которое позволяет получить код из СМС и при этом не даёт доступа к содержанию всех остальных сообщений, а во-вторых, ничего не случится если пользователю потребуется лишние 3 секунды, чтобы посмотреть пришедшее СМС самостоятельно. Стоит ли и говорить что перейдя в рустор банки сразу же себе эти пермишены добавили, и теперь они имеют полный доступ к всем вашим СМС и могут делать с ними всё что хотят - читать, анализировать, удалять, отправлять, и т.д.

2024-01-09

10.

mapcompleteimg

altilunium.github.io/mapcompleteimg

2023-12-20

5.

Букмарка добавляющая снегопад

javascript: (t => {function i() {this.D = function() {const t = h.atan(this.i / this.d);l.save(), l.translate(this.b, this.a), l.rotate(-t), l.scale(this.e, this.e * h.max(1, h.pow(this.j, .7) / 15)), l.drawImage(m, -v / 2, -v / 2), l.restore()}}window;const h = Math,r = h.random,a = document,o = Date.now;e = (t => {l.clearRect(0, 0, _, f), l.fill(), requestAnimationFrame(e);const i = .001 * y.et;y.r();const s = L.et * g;for (var n = 0; n < C.length; ++n) {const t = C[n];t.i = h.sin(s + t.g) * t.h, t.j = h.sqrt(t.i * t.i + t.f), t.a += t.d * i, t.b += t.i * i, t.a > w && (t.a = -u), t.b > b && (t.b = -u), t.b < -u && (t.b = b), t.D()}}), s = (t => {for (var e = 0; e < p; ++e) C[e].a = r() * (f + u), C[e].b = r() * _}), n = (t => {c.width = _ = innerWidth, c.height = f = innerHeight, w = f + u, b = _ + u, s()});class d {constructor(t, e = !0) {this._ts = o(), this._p = !0, this._pa = o(), this.d = t, e && this.s()}get et() {return this.ip ? this._pa - this._ts : o() - this._ts}get rt() {return h.max(0, this.d - this.et)}get ip() {return this._p}get ic() {return this.et >= this.d}s() {return this._ts = o() - this.et, this._p = !1, this}r() {return this._pa = this._ts = o(), this}p() {return this._p = !0, this._pa = o(), this}st() {return this._p = !0, this}}const c = a.createElement("canvas");H = c.style, H.position = "fixed", H.left = 0, H.top = 0, H.width = "100vw", H.height = "100vh", H.zIndex = "100000", H.pointerEvents = "none", a.body.insertBefore(c, a.body.children[0]);const l = c.getContext("2d"),p = 300,g = 5e-4,u = 20;let _ = c.width = innerWidth,f = c.height = innerHeight,w = f + u,b = _ + u;const v = 15.2,m = a.createElement("canvas"),E = m.getContext("2d"),x = E.createRadialGradient(7.6, 7.6, 0, 7.6, 7.6, 7.6);x.addColorStop(0, "hsla(255,255%,255%,1)"), x.addColorStop(1, "hsla(255,255%,255%,0)"), E.fillStyle = x, E.fillRect(0, 0, v, v);let y = new d(0, !0),C = [],L = new d(0, !0);for (var j = 0; j < p; ++j) {const t = new i;t.a = r() * (f + u), t.b = r() * _, t.c = 1 * (3 * r() + .8), t.d = .1 * h.pow(t.c, 2.5) * 50 * (2 * r() + 1), t.d = t.d < 65 ? 65 : t.d, t.e = t.c / 7.6, t.f = t.d * t.d, t.g = r() * h.PI / 1.3, t.h = 15 * t.c, t.i = 0, t.j = 0, C.push(t)}s(), EL = a.addEventListener, EL("visibilitychange", () => setTimeout(n, 100), !1), EL("resize", n, !1), e()})()

2023-12-13

4.

How to get started

github.com/openstreetmap/iD/wiki/How-to-get-started

🆔 The easy-to-use OpenStreetMap editor in JavaScript. - openstreetmap/iD

2023-12-11

2.

Guideline for public transport | OsmAnd

osmand.net/blog/guideline-pt

Hi!