myStack


Гео и язык канала: Россия, Русский


Меня зовут Ростислав и я разработчик.
Это мой личный блог.
Я пишу на Go, читаю книги про технологии и пишу об этих и других вещах сюда.

Книги:
https://bit.ly/rostislav-books
Личка:
https://t.me/Rostislaved
Сайт:
Rostislav.me

Связанные каналы  |  Похожие каналы

Гео и язык канала
Россия, Русский
Статистика
Фильтр публикаций


Репост из: allocation_ru
А вот, пожалуй, главная картинка на ближайшие годы. Пока не появятся новые данные.

100 лет доходностей акций и облигаций США.


awesomeProject22

Давным давно, когда я писал на матлабе, то сделал в интерфейсе кнопочку, которая создает в папке projects новый файл с именем p_%дата_время%.m и сразу же открывает его в матлабе. Это было невероятно удобно т.к. часто нужно было проверить, как работает какая-то функция, накидать простенький скрипт или просто что-то посчитать, но не в калькуляторе.

Без этой кнопки пришлось бы пройти путь длиннее: File/New Script придумать имя, которое бы получилось случайным нажатием по клавишам. Оно может казаться не сильно сложнее, но кнопка сильно упрощала это и за меня вписывала дату создания в имя файла, что помогало искать его потом.

Когда перешел на го, то почему-то не сделал этой кнопки, но вот сейчас сделал. Она:
1. Создает проект в ~/go/src/local/ по маске p_%дата_время%
2. Делает git init
3. Делает go mod init
4. Создает main.go с пустой функцией main
5. Открывает в Goland'е

Остается только написать нужный код и запустить

Если кому вдруг надо, то установка такая:
1. Создать файл new-go-project.sh и поместить его в директорию, которая в PATH (я положил в ~/.local/bin/, я в ней храню бинарники и она у меня в PATH добавлена)
#!/usr/bin/env bash
# Создаёт пустой Go-проект p_YYYY-MM-DD_HH-MM-SS (go.mod + пустой main.go + git) и открывает его в GoLand.
set -euo pipefail

# Куда складывать проекты
ROOT="$HOME/go/src/local"

# Полные пути, потому что у GUI-программ PATH часто урезан.
GO_BIN="$(command -v go || echo /usr/bin/go)"
GOLAND_BIN="$(command -v goland || echo "$HOME/.local/share/JetBrains/Toolbox/scripts/goland")"

NAME="p_$(date +%Y-%m-%d_%H-%M-%S)"
DIR="$ROOT/$NAME"

mkdir -p "$DIR"
cd "$DIR"

"$GO_BIN" mod init "$NAME" >/dev/null 2>&1

cat > main.go &1 &
2. chmod +x ./go-new-project.sh
3. В Goland: Settings/Tools/External Tools/+
Name: New Go Project
Program: /home/rostislav/.local/bin/new-go-project.sh
Снять галочку: Open console for tool output
4. Правый клик по верхней панели Goland → Customize Toolbar… → Add Action → External Tools → New Go Project.
5. Можно у кнопки поменять иконку (у меня плюсик)


Navier-Stokes Equation

Есть шанс, что была корректно решена одна из задач тысячелетия - уравнение Навье-Стокса

https://openai.com/index/navier-stokes-solution/

Если это подтвердится, то будет 2 решенных задачи из 7: гипотезу Пуанкаре в 2006 доказал Г. Перельман.


image_2026-08-31_18-13-16.png
1.7Мб
image_2026-08-31_19-07-07.png
3.7Мб
booking.com

Навайбкодил (простигосподи) юзерскрипты github для букинга, чтобы пофиксить то, что огромная богатая компания не может. А именно.

expanded-room-photos.user.js
При просмотре фото комнаты:
- Фото растягивается во весь экран (см скрины до/после)
- Нет описания (оно от части дублирует инфу с главной страницы и я 99.9% информации все равно получаю из фото)
- Можно листать колесиком мыши

open-in-google-maps.user.js
- Добавляет на карту кнопку "Open In Google Maps", благодаря чему можно посмотреть проложить маршрут до интересущих точек, посмотреть заведения соседние и т.д.

userscripts/download-reviews.user.js
Добавляет кнопку "Скачать все отзывы"

Чтобы установить, поставьте аддон violentmonkey и добавьте содержимое скрипта. В дальнейшем я, может, выложу на сайты специально обученные для хостинга таких скриптов, но их несколько, и они полудохлые, поэтому пока не знаю, куда.

Давно хотел научиться так редактировать сайты, ибо существующих скриптов практически нет, а у меня от неудобства многих сайтов горит. Научиться не вышло, зато с помощью ллм получилось это состряпать.

Скрипты надеюсь буду поддерживать и дорабатывать.


Репост из: Ever Secure
Тут ребята провели какой-никакой ресерч приватности браузеров, Яндекс браузер занял почетное последнее место 🌚

Вообще ничего удивительного. Сейчас этот браузер ВК пытается пропихнуть, как только может, ловите и вы статейку на злобу дня.
Вк я пользуюсь только для перезалива и то эта навязчивость удручает.

В старые времена, если при установке игры с торрента, ты пропускал галочку, то все это мракобесие вместе с спутниками мейл.ру и браузерами амиго попадало тебе на компуктер) Эх вот были времена 🤣

Пора вспоминать старые методы? 💪

Ссылка: https://www.securitylab.ru/analytics/575956.php


Codex

ЛЛМ написала функцию, которая из строки делает int64:
func lockIDFromString(value string) int64 {
hasher := fnv.New64a()

_, _ := hasher.Write([]byte(value))

lockID := int64(hasher.Sum64())

return lockID
}
Мне тут не нравится, что игнорируется ошибка И нет комментария, который объясняет, почему так. То есть, чтобы исправить нужно:
1. Или добавить комментарий
2. Не игнорировать ошибку и внутри if err != nil уже не возвращать ошику (но тоже с комментарием, почему так)

Выбираю второй вариант. Делаю промпт:
_, _ = hasher.Write([]byte(value)) Тут игнорируются все возвращаемые значения. Err надо все-таки вернуть, но внутри проверки на err != nil написать, что мы ее игнорируем явно.
ЛЛМ отдает такое:
func lockIDFromString(value string) (int64, error) {
hasher := fnv.New64a()

_, err := hasher.Write([]byte(value))
if err != nil {
return 0, err
}

lockID := int64(hasher.Sum64())

return lockID, nil
}
Проблема в том, что error из функции возвращать не надо т.к. он всегда nil. Он всегда nil т.к. метод Write у fnv.New64a() всегда возвращает nil.

Почему так? Потому что в моем промпте есть слово "вернуть" и ллм поняла это как "вернуть из функции", а не вернуть из метода Write? Или она это поняла верно, но не учла, что Write всегда возвращает nil т.к. не проверила реализацию?

Вот такие моменты конечно не могут нравится т.к. всегда есть шанс, что или кривая формулировка промпта, или еще что-то приведут не к лучшей реализации.

А я хотел видеть это:
_, err := hasher.Write([]byte(value))
if err != nil {
// sum64a.Write always returns len(value), nil.
}

или это:
_, _ = hasher.Write([]byte(value)) // err always nil


#книги
Теодор Драйзер - Финансист, Титан, Стоик
15.05.2026 - 26.08.2026

В книге рассказывается история жизни предпринемателя из США. Кроме самой истории, было интересно погрузиться в США конца XIX - начала XX века: многие реалии того времени становятся частью повествования - например, пожар в Чикаго в 1871 году или такой вид транспорта, как конка.

Думал, может, книга даст мне исторический контекст финансового мира того времени и благодаря этому какие-то вещи станут более понятными и естественными. Но это всё же не книга про финансы: подобные темы здесь скорее часть сюжета и подробно не объясняются. Впрочем, едва ли это минус книги. Читалось легко и с интересом, так что впечатления от книги остались хорошие.


iaasm

Оказывается, из iPad очень легко сделать второй монитор. На MacOS, полагаю, это из коробки работает, но на Linux тоже вышло несложно: создается виртуальный дисплей на компе, он шарится через VNC, а на айпаде через RealVNC или аналоги отображается картинка.


ZSH '=' expansion

Некоторые файлы в unix-like системах - это soft links на бинарники. Об этом говорит первая буква l выводе команды ls -l
> ls -l /usr/bin/python
lrwxrwxrwx 1 root root 7 Jun 15 14:36 /usr/bin/python -> python3

Чтобы узнать на что ссылается ссылка нужно ввести полный путь к ней, как в примере выше, но так как путь не всегда известен, то его сперва нужно узнать так:
> which python
/usr/bin/python

и только потом передать в ls -l, что неудобно. Можно это объединить в одну команду, что я и делал всегда:
> ls -l $(which python)
lrwxrwxrwx 1 root root 7 Jun 15 14:36 /usr/bin/python -> python3
Но это тоже неудобно.

Сегодня узнал, что существует '=' expansion в zsh, что сильно всё упрощает:
> ls -l =python
lrwxrwxrwx 1 root root 7 Jun 15 14:36 /usr/bin/python -> python3

Ну или если есть алиас на ls -l:
> ll =python
lrwxrwxrwx 1 root root 7 Jun 15 14:36 /usr/bin/python -> python3

https://zsh.sourceforge.io/Doc/Release/Expansion.html#g_t_0060_003d_0027-expansion-1


#книги
Andrew Tanenbaum - Modern Operating Systems
23.04.2026 - 24.07.2026

Уже пару книг я пишу эти комментарии по-новому: если во время чтения встречается какая-то мысль, то сразу открываю Obsidian и записываю ее в заметку про книгу. После прочтения всей книги компоную эти заметки во что-то более связанное и делаю какой-то вывод. Поэтому дальше могут быть, например, описания не всех глав, а только тех, где я оставлял какую-то заметку. В общем, я начинал читать с большим энтузиазмом, но к концу полностью разочаровался.

Часть 2. Processes and Threads
Некоторые объяснения не назвать простыми. Например, в процессах и тредах примеры не самые наглядные для того, у кого нет опыта программирования и понимания того, как могут переключаться разные параллельные задачи.
Очень громоздкое объяснение концепции data race. Тысяча лишних деталей...
Глава про синхронизацию идет со скрипом. Тема сложная, но я точно знаю, что можно написать проще, как в книге Three Easy Pieces. И на удивление в Three Easy Pieces более подробное и качественное рассмотрение возможных алгоритмов шедулера ОС.

Часть 3. Memory Management
Некоторые предложения главы про память - это прямо тест на advanced english с идиомами и просто редкими словами, хотя в целом книга в плане языка написана довольно доступно.
Глава про виртуальную память сложная, но, так как я не глупый и уже знаком с идеей, то делаю вывод, что это она плохо написана))

Часть 7 (Virtualization and the Cloud)
Очень сложно. Очень плохо написано. Процентов 20 пропустил. В главе про многопроцессорность начало казаться, что это графомания.

Часть 9 Security
В этой части мысль про графоманию только укрепилась и ушла куда-то очень далеко: 30 страниц забористой академической теории про безопасность - это вряд ли то, что ожидаешь от книги про ОС. Эта часть очень скучная в начале, но очень интересно про Meltdown и Spectre - я наконец-то понял, в чем их суть (в общих чертах, конечно).

После частей с общей теорией идут Case Studies: про Linux, Android и Windows. Только в case study по линуксу я начал читать то, что я ожидал от книги по ОС, но это воодушевление быстро угасло, и уже case study для Андроида и Windows я сильно пролистывал, читая только интересовавшие меня главы и абзацы.

Вспоминая другие книги Таненбаума, я понимаю, что мне определенно не нравится, как он пишет. Это неудовлетворение сложно формализовать, но факт его наличия я осознал. Не раз ловил себя на мысли, что какая-то идея уже объяснена в книге, но понимания не появилось. Странное свойство, я считаю, что проблема не во мне, так как во многих других книгах такого нет, а тут есть. Очень хорошо работает подход: прочитать главу, скормить ее LLM и попросить объяснить основную идею. LLM отлично справляется, и неясно, почему автор не формулирует основную идею так же - сначала.

Все-таки я считаю, что это плохо написанная книга. Ее трудно читать. Способ объяснения далеко не самый лучший. Часто после прочтения главы не понимаешь, как можно было такую простую идею так сложно объяснить. Чтение книги я воспринимал как "нахвататься фактов про операционные системы".

Все это я пишу, сравнивая её с бесконечно интересной и одной из моих любимых книг вообще - Three Easy Pieces. Если хочется почитать про ОС, то лучше начать (и возможно ограничиться) ей.

А с Таненбаумом я, пожалуй, закончил.


Репост из: Cross Join - канал о разработке
Прогать с агентом зачастую выматывает сильнее, чем без него.

Сначала надо сгенерить код. Это кажется просто, но перед этим действием нужно уже провести много работы, продумать требования и нюансы (ибо магии нет: говно на входе = говно на выходе). План-хуян. Потом наконец генеришь и даёшь другому агенту на ревью. Если код сложный, то в 99% случаев что-то вылезает. Ладно, чинишь. Даёшь другому агенту посмотреть. Вылезает что-то странное, ты не понимаешь, он прав или нет. Начинаешь читать код вручную (это всё равно пришлось бы делать, но надеялся, что позже, когда основное будет пофикшено). Читать чужой код, написанный инопланетянамм (сам бы так не написал). Тратишь дофигища энергии, чтобы построить в голове ментальную модель высера. Просишь объяснить тестами. Понимаешь, что это нечитаемое говно, просишь агента переделать так-то и упростить тут-то. И всё равно - ну не то, блин. Нет удовольствия от хорошо сделанной раьоты.

Наконец, понимаешь, что имелось в виду на втором код ревью от агента. Начинаешь копать, и понимаешь, что это не просто корнер кейс, а возможно вообще к задаче надо было подходить по-другому, и надо обсуждать с коллегами, иьо а таком виде задачу, может, и не решить вообще.

И так целыми днями. Про баги на проде я уже писал - чинить их намного сложнее, так как в голове не прошивается нужная информация.

А как было раньше: моменты обдумывания чередовались моментами медитативного прописывания. Модель в мозгу выстраивалась постепенно и надолго. Было удовольствие от полученного кода.

эх

457 0 14 2 15

yandex-collection-630.tsv
17.8Кб
Выгрузка слов из Яндекс Переводчика

Когда я что-то читаю не в браузере, например, книгу, то перевожу незнакомые слова через яндекс переводчик. Слова там можно сохранять в так называемые Подборки, но к сожалению слова из этих подборок нельзя экспортировать в файл (Ctrl+A + Ctrl+C копирует только те слова, что в данный момент видны). Поэтому я сделал небольшой скрипт для этого:

https://gist.github.com/rostislaved/99a0e8608c5bf3ceb9de7981a9c36379
- Приводит к нижнему регистру
- Убирает дубли (Слово+Перевод)

Также прикрепил свой набор сохраненных слов за много лет - большую часть я до сих пор не знаю)

Проверь! Есть ли у тебя B1😁


The_sun's_position_at_birth_is_unrelated_to_subjective_well_being:.pdf
1.2Мб
A double-blind test of astrology (1985).pdf
787.7Кб
Астрология

Парочка исследований, что астрология не работает. Когда-то меня удивил именно тот факт, что и по таким темам делают научные статьи.

A double-blind test of astrology (1985)
В двойном слепом эксперименте с 116 людьми и 28 астрологами астрологи не смогли определить личность человека по его гороскопу лучше, чем случайным угадыванием.

The sun's position at birth is unrelated to subjective well-being: Debunking astrological claims (2024)
Исследование на 12 791 человеке не выявило связи между знаком зодиака и благополучием. Знак объяснял ≤0,3% различий, а его предсказательная сила была не лучше случайного числа.




Мои проекты

📦 go-clean-architecture (пост)
Шаблон проекта с чистой архитектурой и акцентом на корректную реализацию

🧹 golangci-lint-config (пост)
Строгий конфиг линтеров с расширенным набором включенных проверок и настроек

📜 open-api-101 (пост)
Базовый пример использования популярных библиотек для кодогенерации клиента и сервера по OpenAPI

🧬 slice-analyzer (пост)
Пакет для исследования поведения slice в Go с наглядным отображением указателей и underlying array.

⚙️ cleanconfig (пост)
Библиотека конфигурации для Go со строгой валидацией структуры конфига и возможностью задавать env-переменные в файле конфигурации. (Например, выдает ошибку, если в ямле нет поля, а в структуре есть и другие фичи)

💬 telegram-export-parser (пост)
Инструмент для парсинга JSON-экспорта Telegram-чата и преобразования его в удобную структуру для дальнейшего анализа.


Сложный процент

Предположим, что мы кладем 100р на вклад на год со ставкой 12% годовых.

Интуитивно через год будет 112р т.к. процентов же 12. Так было бы, если проценты начислялись разово на всю сумму, но они начисляются каждый месяц. Рассчитаем.

12% за 12 месяцев - это 1% каждый месяц:
1-й месяц: 100.00 + 100.00 × 0.01 = 101.00
2-й месяц: 101.00 + 101.00 × 0.01 = 102.01
3-й месяц: 102.01 + 102.01 × 0.01 = 103.03
4-й месяц: 103.03 + 103.03 × 0.01 = 104.06
5-й месяц: 104.06 + 104.06 × 0.01 = 105.10
6-й месяц: 105.10 + 105.10 × 0.01 = 106.15
7-й месяц: 106.15 + 106.15 × 0.01 = 107.21
8-й месяц: 107.21 + 107.21 × 0.01 = 108.28
9-й месяц: 108.28 + 108.28 × 0.01 = 109.36
10-й месяц: 109.36 + 109.36 × 0.01 = 110.46
11-й месяц: 110.46 + 110.46 × 0.01 = 111.56
12-й месяц: 111.56 + 111.56 × 0.01 = 112.68

Таким образом, получилось больше, чем 12%. На горизонте одного года разница выглядит незначительной, но рост по сложному проценту происходит по экспоненте: чем больше проходит времени, тем быстрее увеличивается сумма.

Тут пршел год и разница с 12% вышла 0.68%, но если взять 30 лет, то интуитивно:
100р + (100р * 12%) * 30 = 100р + 360р = 460р
но из-за сложного процента будет 3595р! Огромная разница. Сложный процент на протяжении долгого периода работает очень хорошо. Поэтому люди и инвестируют.


Читаю книгу. В главе про безопасность описывается пример, в котором злоумышленник может подменить экран логина на фейковый, который выглядит, как настоящий и для упрощения понимания приведена такая картинка


Codex

Если в codex нажать Alt+R то перейдешь в raw mode, где можно копировать скрипты без пробелов перед каждой строкой


Simple English Wikipedia

Оказывается есть Simple English Wikipedia.
В статьях Simple English Wikipedia используются более короткие предложения и более простые слова и грамматика, чем в обычной английской Википедии.Это облегчает понимание и изменение статей.

Simple English Wikipedia предназначена для использования:
* Детьми
* Студентами
* Учителями
* Людьми с дислексией
* Взрослыми с нарушениями обучаемости
* Людьми, для которых английский является вторым языком (изучающими английский как иностранный)


Разница в домене 3-го уровня:
https://en.wikipedia.org/wiki/Byte
https://simple.wikipedia.org/wiki/Byte


Че там, все идиоматический код пишете?

Mihalis Tsoukalos - Mastering go (го для профи)


Это расшифровывается так:
for i := range 10 {
fmt.Print(i*i, " ")
}

Показано 20 последних публикаций.