2024-09-22
userjs/mastodon at master · afontenot/userjs
github.com/afontenot/userjs/tree/master/mastodonMastodon - Threaded Replies
2024-08-03
Console.trace() - Интерфейсы веб API | MDN
developer.mozilla.org/ru/docs/Web/API/console/trace_staticВыводит стэк трэйс в Веб Консоль.
2024-07-29
Just discovered in amazement that in Bash scripts,... | Nathan Manceaux-Panot
friends.grishka.me/posts/1392836any variable named
SECONDS
will automatically increment every second. Bash is bonkers
2024-07-25
Про гибридные ядра
linux-kernel-labs.github.io/refs/heads/master/so2/lec1-intro.html#micro-kernels-vs-monolithic-kernelsLinus 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
Mathematical and Puzzle Fonts/Typefaces
erikdemaine.org/fonts2024-03-29
Результаты Московского Марафона 24 сентября 2017 года
moscowmarathon2017.datalaboratory.ru/results?runners=1,182024-03-16
Sliced Time and Space
dev.overpass-api.de/blog/sliced_time_and_space.htmlAll 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;
}
}
CSS Naked Day
css-naked-day.github.ioApril 9 is CSS Naked Day!
2024-02-23
Закон Хипса — Википедия
ru.wikipedia.org/wiki/Закон_Хипсаэмпирическая закономерность в лингвистике, описывающая распределение числа уникальных слов в документе (или наборе документов) как функцию от его длины.
2024-02-19
Pagefind | Pagefind — Static low-bandwidth search at scale
pagefind.appPagefind 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
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
C Preprocessor tricks, tips, and idioms
github.com/pfultz2/Cloak/wiki/C-Preprocessor-tricks,-tips,-and-idioms2024-01-23
Коты-программисты. Сезон #02.
yzh44yzh.github.io/season_02.html- Распределенный веб-фреймворк.
- Кот, что ты там говоришь?
- Представь себе, Django, распределенная, в кластере.
- Твоя безумная идея, Тихон, граничит с гениальностью.
- Это не моя безумная идея, это идея сообщества Elixir/Phoenix.
2024-01-17
Detecting the use of “curl | bash” server side
www.idontplaydarts.com/2016/04/detecting-curl-pipe-bash-server-side2024-01-16
Jeffrey Paul: Your Computer Isn't Yours (ru)
sneak.berlin/i18n/2020-11-12-your-computer-isnt-yours.ru2024-01-11
Google начал определять 2ГИС как вредоносное приложение и просить его удалить
habr.com/ru/news/785496С уходом из гугл плея в рустор многие российские приложения, например банки, с удовольствием добавили себе в манифест пермишены, с которыми гугл им никогда бы не дал опубликоваться в официальном сторе, например "QUERY_ALL_PACKAGES", чтобы следить за тем какие приложения установлены на устройстве пользователя. Эта информация может быть реально необходима приложению примерно никогда, в 99% случаев она нужна различным SDK которые собирают информацию о пользователе, телеметрию, профили для аналитики, статистики, и т.д. и ничего полезного для самого пользователя не делают. Гугл не разрешает публиковать приложения с этим пермишеном в официальном гугл сторе, но вот, сразу же после выхода первой же версии приложения в русторе, от приложений российских банков в сеть полетели данные об установленных приложениях.
Абсолютно та же история с чтением СМС. Гугл, в принципе, даёт право публиковать подобные приложения в сторе, но проверяет их в ручном режиме и смотрит действительно ли им необходим доступ к всем СМС, если нет - разворачивает. Разумеется, никаким банкам никакой доступ к СМС не может быть нужен в принципе. "Нам нужны ОТР-коды из СМС" - не оправдание. Для этого, во-первых, есть специальное апи, которое позволяет получить код из СМС и при этом не даёт доступа к содержанию всех остальных сообщений, а во-вторых, ничего не случится если пользователю потребуется лишние 3 секунды, чтобы посмотреть пришедшее СМС самостоятельно. Стоит ли и говорить что перейдя в рустор банки сразу же себе эти пермишены добавили, и теперь они имеют полный доступ к всем вашим СМС и могут делать с ними всё что хотят - читать, анализировать, удалять, отправлять, и т.д.
2024-01-09
mapcompleteimg
altilunium.github.io/mapcompleteimg2023-12-20
Букмарка добавляющая снегопад
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
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
Guideline for public transport | OsmAnd
osmand.net/blog/guideline-ptHi!