Євгеній Гизила
597 subscribers
61 photos
1 file
142 links
Автор @hyzyla

Пишу про різне зі світу веб розробки: власний досвід, Python, React, TypeScript, стартапи і власні думки
Download Telegram
📔 The Wonders of Postgres Logical Decoding Messages — незвичний варіант зробити outbox pattern в Postgres.

Виявляється, що Postgres має функцію pg_logical_emit_message, якою можна писати у WAL напряму без жодних додаткових таблиць. Зазвичай для outbox pattern роблять окрему таблицю і з неї читають або читають її лог. А тут в теорії можна обійтися і без неї, хоча треба дивитися як воно насправді на практиці працює 😑
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
сьогодні інтуіція була не на моєму боці. Потратив годину, щоб помітити різницю, що в алхімії URL для sqlite з 3 слешами позначає відносний шлях, а з 4-ма — абсолютний. Хоча якщо подумати, то наче логічно, але якщо не думати то вийде як у мене 🤔
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯11👨‍💻5😱1
Забавний факт. В macOS за замовчуванням файлова система не чутлива до регістру (case insensitive). Тому хоч напиши INDEX.JS, хоч index.js macOS буде вказувати на один і той самий файл.

З іншої сторони довгий час в німецькій мові для малої літери ß єдиним варіантом верхнього регістру були дві літери SS:

The JavaScript in Google Chrome and Mozilla Firefox will convert "ß" to "SS" when converted to uppercase (e.g., "ß".toUpperCase()).


Як наслідок цих двох рандомних фактів, якщо в терміналі macOS написати ßh, то запуститься команда ssh, бо верхній регістр обох варіантів буде SSH 🤯. Тепер не важко угадати, яка команда виконується, якщо написати openßl або leß

1. APFS is case-insensitive by default
2. Wikipedia: ß
3. https://x.com/sweis/status/1985409966711456106
Please open Telegram to view this post
VIEW IN TELEGRAM
2🤯26👨‍💻51🤩1
🐹 mole — класна опенсорсна тулза для розробників, щоб чистити місце на macOS. Вміє чистити якісь стандартні кеші, так і можна запустити команду, яку пройдеться і почистить по проєктах всякі типові venv, node_modules, dist, build, etc
🔥136😱1
0.0.0.0

Я ніколи особливо не розбирався, яка різниця між IP-адресами 0.0.0.0 і 127.0.0.1. Шо то, шо інше веде на мій сайт, запущений локально, — і на тому йому за це дякую.

Але насправді різниця величезна. Бо якщо адреса 127.0.0.1 доступна тільки на моїй машині, то адреса 0.0.0.0, як зʼясував, буде доступна всім, хто сидить у тій же самій локальній мережі що і мій комп.

Виходить так: якщо я запускаю python сервер на 0.0.0.0:8000, то ми з усіма моїми китайськими гаджет-шпійонами можемо разом сісти й нарешті придумати як пофіксити цю кляту проблему з CORS на localhost!

Жарти жартами, але ось беремо docker compose і пишемо йому, щоб він прокинув порти з докера на локальну машину. А він за замовчуванням ці порти прокине на 0.0.0.0. І тому відповідно всі ці сервіси так само потрапляють у вашу локальну мережу:

services:
postgres:
ports: ["8000:8000"]


Ну і щоб досипати солі на рану, то можна задати собі питання — а що таке локальна мережа, коли я у кавʼярні підключаюся до Wi-Fi? Звісно ж це мережа, де будуть усі хіпстерські лептопи. Можливо декілька з них діляться з вами своїми серверами, а ви навіть про це й не здогадуєтесь 😂
Please open Telegram to view this post
VIEW IN TELEGRAM
118😱3
This media is not supported in your browser
VIEW IN TELEGRAM
я сьогодні був в шоці, коли дізнався, що якщо в CSS написати так:

margin-top: 5%

то це не зробить відступ згори на 5% від висоти батьківського елементу, а зробить відступ 5% згори від ширини (wtf?) батьківскього елементу
😱8😍4🤯2
Євгеній Гизила
0.0.0.0 Я ніколи особливо не розбирався, яка різниця між IP-адресами 0.0.0.0 і 127.0.0.1. Шо то, шо інше веде на мій сайт, запущений локально, — і на тому йому за це дякую. Але насправді різниця величезна. Бо якщо адреса 127.0.0.1 доступна тільки на моїй…
Ось на днях писав, що якщо в докері явно не вказати хост, коли прокидаєш порти з контейнера, то за замовчуванням буде використовуватися адреса 0.0.0.0, і всі в мережі зможуть спілкуватися з вашими контейренами. Я тоді пішов, увімкнув собі фаєрвол на моєму Маку і забув про цю проблему.

А це ось вчора лазив по інтернету і знайшов статтю про те, що, як виявляється, docker на linux не працює разом із популярними фаєрволом ufw. Незалжено від налаштувань фаєрвола, порти все одно будуть світитися в мережі 😱

Виходить так: ви прокидуєте порт 8080:8080 з контейнера на linux хост, вмикаєте фаєрвол, щоб блокувати всі вхідні з'єднання, і очікуєте, що тепер ніхто до вас не достукається. А правда така, що docker вставляє свої правила прямо в iptables на самий початок ланцюжка, десь перед усіма іншими записами, включаючи налаштування фаєрвола.

Я не раз у своєму житті налаштовував VPS, де були docker і ufw, і ось тепер задумався: а що, якщо я весь цей час світив голими портами у світ і навіть про це не підозрював?

https://news.ycombinator.com/item?id=34858775
Please open Telegram to view this post
VIEW IN TELEGRAM
😱15🔥51👨‍💻1
Там вийшов vite8 з rolldown замість esbuild/rollup. vite і так зручно користуватися, а з обʼєднаним і швидкими бандлером має бути ще краще

https://vite.dev/blog/announcing-vite8

When Vite first launched, we made a pragmatic bet on two bundlers: esbuild for speed during development, and Rollup for optimized production builds. That bet served us well for years. We're very grateful to the Rollup and esbuild maintainers. Vite wouldn't have succeeded without them. Today, it resolves into one: Vite 8 ships with Rolldown as its single, unified, Rust-based bundler, delivering up to 10-30x faster builds while maintaining full plugin compatibility. This is the most significant architectural change since Vite 2.
6🔥1
вау! шось мимо мене пролетіла новина про новий продукт для логів VictoriaLogs від авторів VictoriaMetrics. Обіцяють, що для логів працює краще ніж еластік 💪

https://x.com/func25/status/2011420689941885037

If your logs need Elasticsearch, you don't need logs, you need better engineering.

This is an open-source log database written entirely in Go: https://github.com/VictoriaMetrics/VictoriaLogs, scaling from super small setups to hundreds of CPU cores

It offers:
- schemaless, you don't need to pre-define a schema or create tables/index mappings
- no setup, tuning, or configuration needed
- small binary (v1.43.1): 20.7 MiB. Compare this to others:
- Loki (v3.6.3): 123.8 MiB
- ClickHouse (25.12.3.21): 727.1 MiB
- Elasticsearch (8.17.0 - bundled): 1.3 GiB
- every field is searchable
- handles terabytes of logs per day without any issues
- supports both vertical and horizontal scaling
- uses less CPU and memory than most logging systems, reduces your logging cost
- faster search and investigation than most logging systems
- supports log query, filter, group, math, and analysis
- supports live tailing to view logs in real time
- works with Grafana dashboards (see the image below), Prometheus-compatible
- supports alerts based on your logs, like when log has error/slow/timeout/suspicious activity (to Slack, email, etc)
- supports recording rules to write metrics from logs
Please open Telegram to view this post
VIEW IN TELEGRAM
4🤩3
Крута новина! Пишеш файл на диск, а він зберігається на s3

What is S3 Files?

S3 Files is a shared file system that connects any AWS compute resource directly with your data in Amazon S3. It provides fast, direct access to all of your S3 data as files with full file system semantics and low-latency performance, without your data ever leaving S3. Every file-based application, agent, and team can access and work with your S3 data as a file system using the tools they already depend on. Built using Amazon EFS, S3 Files gives you the performance and simplicity of a file system with the scalability, durability, and cost-effectiveness of S3. You can read, write, and organize data using file and directory operations, while S3 Files manages the synchronization of changes between your bucket and file system.


https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-files.html
🔥8
Зробив CLI для себе, щоб можна було в кібані логи шукати через AI агентів — github.com/hyzyla/kibana-agent

Підтримує профілі, щоб можна було переключатися між різними кібанами. Вхід через звичний логін-пароль. Є інтеграція з 1password. Дозволені лише read-only дії
1🔥17👨‍💻1
Why Portable Text? — сподобався проєкт, тому ділюся. Автори проєкту пропонують JSON стандарт і бібліотеки для зберігання і рендерингу форматованого тексту, щоб не робити це у HTML чи Markdown. Для прикладу, для якогось базового чату чи соц. мережі можна взяти оцей проєкт і не видумувати своє

Most systems store block content as an HTML string or Markdown. Both work, but both make assumptions about where and how your content will be displayed.

Portable Text takes a different approach: it stores block content as structured JSON data. No rendering assumptions. No parser needed. Just data you can query, transform, and render however you want.
🔥71
Одягнувся сам:
> видалив базу на проді, тепер міграція проходить добре. що робимо далі?
...

> написав у канал general, щоб Сергій побачив твоє повідомлення про обід

Накричала:
> такий меседж коміту норм? чи краще зробити коротшим? лише після підтвердження я створю коміт
...

> скопіюй повідомлення з Jira і я запропоную тобі зміни на вибір. Або якщо ти погодиш, я можу зробити запит сам
🥰121
OpenTelemetry тепер graduated CNCF проєкт.

CNCF це організація яка де факто визначає стандарти в devops індустрії і небагато проєктів за весь час отримали статус graduated, тому це біг діл і точно Otel з нами надовго
15😱4
зараз по світу ходить вірус, що передається через близький контакт з npm пакетами. тому лікарі рекомендують зробити щеплення він випадкових залежностей і подбати про імунітет завчасно.


Якщо говорити серйозно, то на днях github підтвердив, що зловмисники отримали доступ до кілька тисяч внутрішніх репо github. Причиною цьому стало VSCode розширення nrwl/nx-console на робочій машині одного зі співробітників. Саме по собі розширення не було створено в зловмисних цілях, як інколи буває і, на мій погляд, виглядає норм. Але, на жаль, автори nx-console самі по собі стали жертвами нещодавної атаки на tanstack і зловмисники змогли опублікувати від їхнього імені шкідливу версію розширення. А далі VSCode автоматично стягнув і запустив оновлену версію розширення, що й стало причиною витоку даних.

Після атаки зʼявилося issue в проєкті VSCode з проханням додати налаштування, щоб оновлення до розширення прилітало з затримкою в кілька днів. Поки офіційного рішення від команди VSCode немає, то я собі для профілактики виключив оновлення розширень в налаштуваннях:


{
"extensions.autoUpdate": false
}


Навіть не знаю чому не зробив це раніше, але краще пізно ніж ніколи. І за нагоди зробіть це і ви, якщо користуєтесь VSCode
😱11👨‍💻5
А ви бачили, що t.me лінки (короткі посилання на телеграм) перестали працювати? 😱 Чорногорія vs Telegram чи просто хтось завтикав? https://x.com/IntCyberDigest/status/2076768143092166801
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍💻5
https://planetscale.com/blog/whats-new-in-postgres-19#repack-keep-your-database-moving

Новина з майбутнього. В postgres з 19 версії зʼявиться нативний REPACK. Якщо з таблиці часто видаляються дані або в ній часто оновлюютбся рядки, то вона може швидко розпухати і займати більше місця, ніж треба. Раніше треба було використовувати якісь сторонні інструменти, типу pg_repack, тепер це буде нативно в постгресі. Вогонь!
🔥191
Останнім часом використовую git worktree, щоб паралельно робити кілька задач по одному й тому ж проєкту. І вилізла очевидна проблема, що в кожному такому клоні проєкту немає всього, що зазвичай лежить незакомічене в мене проєкті, для прикладу, .venv, node_modules, .mypy_cache, etc. Відповідно кожен такий worktree не безплатний і займає відчутно місця і часу на налаштування. Думаю, що окей, вмовили і треба вже нарешті почати використовувати нормальні інструменти. Ну ті які десь там глобально зберігають залежності і просто лінкують їх у проєкт. Для python вже використовую uv, тому — готово , pnpm наче не старшний, тому можна зʼїхати з npm — okay i guess 👌, а з кешами, чорт їх побрав, не вартують моїх зусиль щоб робити — забʼю хуй 🙅

А потім, щось прибирався на кухні, слухав ютуб і мені прийшла в голову геніальна думка. Я ж на macOS працюю, а тут же ж copy-on-write файлова система — APFS! А ну дай пошукаю, як так взяти і скопіювати папку, щоб це було і швидко і займало три гроша. Якусь готову команду не найшов, тому накидав такий скрипт, який напряму робить syscall:


cow_clonedir() { python3 -c "import ctypes,ctypes.util,sys,os;l=ctypes.CDLL(ctypes.util.find_library('System'),use_errno=True);sys.exit(0 if l.clonefile(sys.argv[1].encode(),sys.argv[2].encode(),0)==0 else os.strerror(ctypes.get_errno()))" "$1" "$2"; }


і шо ви думаєте? виглядає страшне, а я вже тиждень користуюся і не можу нарадуватися як воно добре працює:

node_modules: 544 MB, 51,705 files: clonefile() copies it in 1.2s vs 103s for cp -Rc (~84×). Real disk cost is 20 MiB — just new inodes over shared blocks.


1. Create space-saving clones on macOS with Python
2. Is it possible to clone directories in APFS?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥118👨‍💻2
не люблю читати книги з ноута, тому завжди шукаю книжки у epub форматі, щоб можна було читати з телефону. не всі видавці публікують книгу у epub форматі, тому хоч не хоч, бери тільки pdf або в папері. pdf галімий формат для конвертації в epub, тому мені ніколи не подобався результат від автоматичної конвертації, бо десь формули зʼїдуть, то параграф розлізеться. Думаю, а що якщо згодувати claude code PDF і його попросити сконвертувати? Не влоб через себе текст пропустити, а написати кастомні скрипти на пітоні, які конвертують конкретну цю pdf книгу в epub з врахуванням всіх приколів конкретної книжки. Він там собі щось крутив-вертів пів години, я ще пару раз проглянув складні моментики і в результаті маю книгу в справжньому epub форматі. Якість навіть краще, ніж деякі видавці публікують. Короче, результатом я довольний!
🔥242😱1