Программизд
178 subscribers
50 photos
2 videos
123 links
Backend developer, borisd.ru

Блог о программировании, бэкенде, IT и не только.

@hpdbru - собираю коллекции.

Иногда не пишу по две-три недели.


@purchase_list_bot
Download Telegram
Топовый уровень презентаций
Единственный запомнившийся мне спикер на технических конференциях - Kavya Joshi, ее уровень подготовки и структура выступления по всем фронтам на очень высоком уровне.
Я пересматривал ее презы по Go много раз.
- Она погружается в детали на необходимый и достаточный уровень, не оставляет ощущения неизвестности, и чтоб не углубляться сильно глубоко, она говорит, куда копать самостоятельно.
- Скорость и подача не усыпляет, а вовлекает и держит.
- Шутки в малом количестве и работают на предыдущий пункт (у некоторых каждый слайд - кринжовый мем).
- Темы выступлений не заезжены, не капитанские (хотя может и капитанские для разрабов ОС, компиляторов/интерпретаторов, HPC), показывают больше, чем можно найти в доке.
- Классные визуалы.

Вот пример
https://m.youtube.com/watch?v=7OpCf6f_BAM
👍31
Торвальдс vs Таненбаум

После вчерашнего хайпа вокруг Линуса Торвальдса, решил почитать его высказывания и споры, наткнулся на то, как знаменитый профессор Таненбаум накинул на Линукс, а Линус прикольно его осадил:

https://www.oreilly.com/openbook/opensources/book/appa.html

Кратко:
- [Таненбаум] Linux выбрал неправильную архитектуру и завязан на конкретное железо, в отличие от моего Minix, который я делаю в качестве хобби, будучи профессором и знающим все об ОС.

- [Торвальдс] "хобби" и быть профессором - хорошая отмазка, чтобы сделать дерьмовую ОС Minix. Линукс использует все возможности конкретных железяк, что и должна делать ОС, являясь прослойкой между железом и пользователем. И если говорить о хобби, моя ОС бесплатна и я ее делал в свободное время, чтобы разобраться с железом, а Minix платная.
1👍1
Нормальные графики метрик
Каждый раз, когда заходишь на чьи-то доски в графане, видишь там какие-то спидометры, столбчатые диаграммы, pie-чарты и огромные циферки или очень узкие графики на три деления.

Меня это всегда удивляло. Понимаю еще диагностические метрики, собранные со ста проектов для дежурных. Но метрики продукта в таком стиле скрывают всю картину.

По моему мнению, обычный график шириной в половину "строки" (экрана) сырых данных - самое лучшее. Одним взглядом ты видишь тренд, историю, текущую ситуацию, корреляции. Делаешь кучу этих графиков на каждую метрику, группируешь по "строкам" (rows) и скроллишь их. Аномалии бросятся в глаза, даже если ты не знаешь, о чем этот график.

А что дает "спидометр", кроме того, что выглядит круче? "Сейчас 100500рпс и это +10%", это хорошо или плохо? Как было 3 часа назад? А вчера? А как скачок рпс соотносится поминутно с другими метриками?
Распространяю без проверки правдивости данных (хотя загуглил, вроде реально у СО трафик проседает)

В Гугле последнее время тоже Gemini на все отвечает, даже не приходится ссылки открывать.
👀3
Утверждения Павла Дурова

https://t.iss.one/durov/372
Я так понимаю, речь о Memhash? Приложение с одной кнопкой "Майнить"?

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

Может там под "без маркетингового бюджета" имелись ввиду неограниченные бюджеты, как у ВК на старте? 😁
Польза Telegram Stars

1. Покупаешь за >2 рубля за штуку.
2.1. Вывод из ботов и каналов идет в виде бесполезных подарков, с которых забирается комиссия (2 звезды с подарка в 15 звезд, да и подарок от бота, в итоге, не трансформируется в звезды, какой смысл тогда показывать его стоимость пользователю?)
2.2. Телеграм дает 1.4 рубля за звезду, если обменивать на деньги.

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

Хотел дарить пользователям @purchase_list_bot звезды, в итоге остановился на TON, а на звезды забил.
👍1
Конверсия telegram ads

С наскоку набросал несколько реклам, по всем получилась довольно плохая конверсия
Программизд
Распространяю без проверки правдивости данных (хотя загуглил, вроде реально у СО трафик проседает) В Гугле последнее время тоже Gemini на все отвечает, даже не приходится ссылки открывать.
ChatGPT

Постепенно, за 2024, доконвертировался в постоянного пользователя всяких gpt.
Как-то часто коллеги и знакомые, особенно более молодые, упоминали его, предлагали не погуглить, а именно глянуть в ChatGPT.
Мало по малому и из чувства “FOMO” и получая реальную пользу, понял, что ничего такого тут нет, врубил всякие copilot’ы и держу открытой вкладку ChatGPT.

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

Например, когда надо накидать запрос в монгу (с которой уже давно редко соприкасаюсь и многое подзабыл), спрашиваешь: «у меня есть коллекция x, в ней поля x1, x2 и коллекция y, с полями y1, y2, мне надо агрегировать x, у которых есть столько то y», и получаешь готовый запрос.
👍4
Не обращал внимания до этого

https://go.dev/blog/range-functions

package main

import (
"fmt"
"iter"
)

func main() {
// Создаем последовательность пар (index, value)
seq := func(yield func(int, string) bool) {
fruits := []string{"apple", "banana", "cherry"}
for i, fruit := range fruits {
if !yield(i, fruit) { // yield возвращает false, если итерация остановлена
return
}
}
}

// Итерируемся по последовательности
for i, fruit := range seq {
fmt.Printf("Index: %d, Fruit: %s\n", i, fruit)
}
}


Отсюда можно задуматься, что такое yield под капотом https://github.com/golang/go/issues/68897
Недавно задумался о бизнес-идее: сделать футбольную платформу, где каждый мог бы завести себе AI-игрока по аналогии с настоящим футболистом, мог бы прокачивать его скиллы и присоединяться к командам, получать за это зарплату от владельцев команд. На платформе были бы всякие лиги, чтобы команды могли в них участвовать, завоевывать титулы, покупать игроков (тех "настоящих"), заниматься трансферами и т.п.

Начал ресерчить, сразу наткнулся на проект от гугла
https://research.google/blog/introducing-google-research-football-a-novel-reinforcement-learning-environment/

https://github.com/google-research/football

они даже сделали один подобный турнир с Manchester City F.C.: https://www.kaggle.com/c/google-football

Потом я понял, насколько много в этой идее подводных камней и препятствий, что сократил ее просто до серии пенальти, но и это решил уже не делать. На продвижение подобного нужны огромные деньги и не факт, что выстрелит. Проще такое же, но не с AI, а просто игроками в фифу на консолях, но такое уже есть.
1👎1
Ковырялся с редисом и, как обычно, решил посмотреть блог его создателя. Т.к. я его уже неоднократно читал, в голове сразу всплыл адрес.
Это один из продуктивных текстовых блогеров: последний пост был 2 дня назад, а первый 4538.

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

antirez.com

#hpdb
👍2
Корнер-кейс с циклами (в го): если ограничивающее значение (; i <= X;) цикла передается извне, то возникает опасность, что передадут максимальный int и цикл станет бесконечным из-за переполнения i

func main() {
maxUint32 := ^uint32(0)
fmt.Println(maxUint32 - 1)
fmt.Println(maxUint32)

for i := maxUint32 - 1; i <= maxUint32; i++ {
fmt.Println("iter", i)
}
}

// 4294967294
// 4294967295
// iter 4294967294
// iter 4294967295
// iter 0
// iter 1
// iter 2
// ...


func main() {
k := ^uint32(0) / 2
j := int32(k) // max int32
fmt.Println(k, j+1)
c := 0
for i := j - 1; i <= j; i++ {
fmt.Println(i)
c++

if c > 5 {
break
}

}
}

// 2147483647 -2147483648
// 2147483646
// 2147483647
// -2147483648
// -2147483647
// -2147483646
// -2147483645
Коллеги подкинули годноту для залипания: документация к первой части The Sims
Очень интересно наблюдать за тем, как, казалось бы развлекательный продукт из 2000-х, имеет внутри такое количество нюансов, сложностей и продуманных аспектов!
👍1
Побывал в Японии и увидел, что знаменитый своими инвестициями SoftBank, оказывается, это мобильный оператор с точками продаж там на каждом шагу.
🔥1
Программизд
Захотелось новый проект Я прохожу через процесс поиска работы последнее время, и очередной раз вспомнил, что в масштабе он требует контроля и управления. Для наведения порядка я заиспользовал доску в trello с колонками: - init: переписка/подача завявки …
Один из самых популярных постов - проект "Job Tracker'а".

И вот мой проект готов! (шучу)

Сейчас прорабатывал эту идею и, посреди разговоров с ChatGPT, он мне выдал конкуретнтов (которых не давал по явному запросу о конкурентах)
- https://huntr.co/
- и tealhq .com (какой-то отстой)

Huntr меня впечатлил своим UI и виджетом для браузера, кладущим в закладки работы из linkedin. Идея с "My Job Trackers" - отдельными досками для поиска работ, а не одной общей, мне показалась крутой.

Много разных фич, вроде бы все есть, НО одно некрасивое но: они запихивают тебе в глотку свои платные фичи, как будто ты до сих пор на лендинге, а не уже зарегался.

Жесткий упор на AI: генерация резюме, ответов на письма, подготовки (и все это платно).

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

Все-таки продолжаю думать над своей релаизацией: простой трекер + социальная составляющая, типа www.teamblind.com, чтоб можно было обсуждать вакансии и прогресс, смотреть на успехи других людей и мотивироваться, смотреть старые записи и делать выводы. Стоит ли? 👍/👎
👍1👎1
Когда приходится влазить в старый код, самое неприятное препятствие для внесения изменений - отсутствие слоев.

Есть "api -> model -> storage"

Самое худшее - когда одна структура отвечает за все: и за маппинг на БД, и за ответ в АПИ, например:

type Model struct {
ID int `json:"id" db:"id"`
Field string `json:"field" db:"field"`
}


В идеале, json тэги должны быть на полях отдельной структуре ответа, а db тэги на отельной структуре-сущности, структура-модель без тегов (тэги в го это знак того, что структура используется для десериализации json/чего-то еще).

В худшем случае, когда все на одной структуре, ты не можешь даже изменить поля в БД, не задев АПИ.

В лучшем случае же (когда слои есть) кажется, что все это избыточно: респонс повторяет поля модели, модель повторяет поля сущности. Но это только кажется избыточным: этот подход позволяет менять БД на ходу, вводить новые версии АПИ и делать что угодно, не задевая старый код.
💯4
Я в равной мере использую все gpt, но grok.com стал генерить прототипы сайтов, как только я ему описываю идею. Страшнее всего, что прототипы еще и более менее рабочие.
Давно заметил, что чтобы твой блог набрал подписчиков, надо делать что-то такое, что вызывает легкую зависть мотивацию/способ развиваться.

Ребята из faang , ребята, занимающиеся менее массовыми (в отличие от веба) вещами: железяками, хакерством и прочим, если делают хоть один крутой пост, набирают подписоту, даже если больше ничего интересного и не постят.


Прикольный пост с реверс-инжинирингом синтезатора от инженера компании-разработчика flipperzero:

https://psi3.ru/blog/swl01u/

https://t.iss.one/anyatimatter

#hpdb