myStack
Открыть в Telegram
Меня зовут Ростислав и я разработчик. Это мой личный блог. Я пишу на Go, читаю книги про технологии и пишу об этих и других вещах сюда. Книги: https://bit.ly/rostislav-books Личка: https://t.me/Rostislaved Сайт: Rostislav.me
Больше877
Подписчики
-324 часа
-47 дней
-730 дней
Архив постов
877
Когда оборачиваешь доступ к апи в объект, то можно сделать сперва методы, которые соотносятся с эндпоинтами самого апи 1 к 1. А уже потом, используя эти методы создавать публичные методы удобные для всего остального кода.
Я раньше так и делал, но неосознанно, а сейчас явно прочитал, что это нормальная идея у Фаулера:
Sometimes a good strategy is to build the Gateway in terms of more than one object. The obvious form is to use two objects: a back end and a front end. The back end acts as a minimal overlay to the external resource and doesn’t simplify the resource’s API at all. The front end then transforms the awkward API into a more convenient one for your application to use. This approach is good if the wrapping of the external service and the adaptation to your needs are reasonably complicated, because each responsibility is handled by a single class. Conversely, if the wrapping of the external service is simple, one class can handle that and any adaptation that’s needed.877
О, круто! Роберт Мартин называет чистую архитектура архитектурой Якобсона! (Ivar Jacobson)
877
If you had a J in your name you could get hired as a java programmerhttps://youtu.be/Nsjsiz2A9mg?t=1350
877
(Слайс структур, удовлетворяющих интерфейсу) != (слайс интерфейсов).Пример: https://goplay.space/#BGyrAUzsKAn
package main
import "fmt"
func main() {
arr := []SomeStruct{
{1},
{2},
}
Printer(arr) // нельзя передать
}
// Структура SomeStruct с единственным методом Print
type SomeStruct struct {
id int
}
func (s SomeStruct) Print() {
fmt.Println(s.id)
}
// Printer принимает слайс интерфейсов
func Printer(arr []Printable) {
for _, item := range arr {
item.Print()
}
}
type Printable interface {
Print()
}
можно исправить через дженерики:
func Printer[T Printable](arr []T) {
for _, item := range arr {
item.Print()
}
}
но даже так, если есть метод с ресивером указателем, то слайс структур не передать и надо делать слайс указателей на структуры, а это мне тоже не нравится. Сижу грущу. Другой язык что ли попробовать877
Перевод:
Выдержка из файла /scripts/web, включенного в состав оригинального netcat в 1995 году.
Интернет - отстой. Это могучий унылый клубок, построенный из тысячи
крошечных унылых косяков, скрепленных пластырем, и теперь эти допотопные
невежественные придурки, которые никогда не слышали о "рукопожатии TCP", хотят запустить
*коммерцию через эту чертову штуку. Да боги. Добро пожаловать на телевидение следующего
века - шесть миллионов каналов бесполезного дерьма на выбор, и
и примерно столько же безопасности, как в сегодняшней кабельной индустрии!
Сильно устав от болезненных браузеров в заднице, я решил
создать минималистичный клиент. Он не обрабатывает POST, только GET, но
большинство обработчиков CGI-форм, очевидно, все равно игнорируют этот метод.
Несомненным преимуществом является то, что он не передает никакой другой информации
серверу, например, Referer: или информацию о вашей локальной машине, как, например.
Netscum пытается это сделать!
Со времен первой версии этот клиент стал почти минималистичным,
но теперь он экономит много текста. А с netcat в качестве бэкенда, это
полностью соответствует требованиям. У вас нет netcat? Возьмите его здесь, в /src/hacks!
_H* 950824, обновлено 951009 и далее.877
Ищу себе нормальны VPN. Нашел крутой, но нет серверов в рф, написал в поддержку и спросил почему. Ответ убил:
The reason we don’t have servers in Russia is that the Russian government requires anyone who routes Internet traffic to log.
Once we found out that they wanted or required us to log we removed our servers from the data center there.
It was our choice to remove those data centers because of our strict no logging policy.
С одной стороны меня радует подход, но с другой этот впн не закроет все мои потребности877
При приеме на работу в Threads на system design секции наверняка просили спроектировать twitter
877
Момент (англ. Moment) — средневековая английская мера времени, равная полутора современным минутам в день равноденствия.
877
Какой классный бесплатный сервис!
https://vectorizer.ai
Превращает растровую картинку в векторную с помощью AI.
877
Хм. Нашел интересное поведение телеги
Я обычно стараюсь писать посты в "Saved Messages", редактировать и пересылать их в этот канал. Вчера я сделал точно также с обложкой книги и отзывом на нее. И телеграм не отобразил комментарии ко второму сообщению (отзыв на книгу).
Сейачс обнаружил, что так происходит, если пересылать 2 сообщения за раз. Если одно, то секция с комментариями появляется
877
#книги
Vladimir Khorikov - Unit Testing Principles, Practices, and Patterns
17.05.2023 - 01.07.2023
Рекомендую
- Книга оказалось гораздо полезнее TDD от Кента Бека.
- Также это первая книга, которую я практически полностью читал за компом, а не с мобилы, что позволило делать удобный конспект в обсидиане. Вообще читать с телефона перед сном технически книги, как я теперь понимаю, не очень продуктивно. Книги читаются меньшими частями и восстанавливать контекст при каждом возвращении довольно сложно и вредит общему пониманию.
- В первых главах идет некая классификация видов зависимостей и с этой классификацией вышла какая-то каша. Для примера. Автор делит все зависимости на три пересекающихся множества или вводит понятие out-of-process зависимости, и не обозначает, что все зависимости кроме out-of-process есть in-process. Кажется мелочью, но из-за этого первую часть было достаточно сложно воспринимать.
- В книге в 7й главе есть полезный пример, который показывает способы рефакторинга плохого кода в код, который более тестируем. Также приводятся различные паттерны, что тоже хорошо
- Примеры, которые разбираются в книге позволяют увидеть реальный код с хорошей архитектурой. Что очень полезно.
- Из книги узнал про то, как автор использует менеджер транзакций и репозитории
877
Repost from Dzari
Человеческое тело на 78% состоит из воды. Факт был установлен в середине 1940-х годов. Открытие принадлежит подполковнику японской императорской армии руководящим отрядом 731. Эксперимент выглядел так: живого человека привязывали к стулу в замкнутом помещении и нагнетали, нагнетали, нагнетали сухой горячий ветер.Подопытный превращался в высохшую мумию. Умирал он на шестом часу, когда из тела уже испарялась большая часть воды. 22% первоначального веса тела — средний показатель по нескольким десяткам жертв.
Любопытно, но очень много из их экспериментов мы сейчас используем. Тот отряд кстати помиловали за их 12 лет экспериментов, за важность полученных открытий.
А вы бы их осудили или освободили ?
877
3 года назад я сделал такую заметку про пароли:
https://t.me/myStack/168
Сейчас перечитал и по прежнему со всем согласен, а пост пишу потому, что наконец-то пришел к подходу, который в той заметке назвал самым лучшим:
1. Длинные пароли из случайных символов. Уникальные для каждого сайта
2. Программа для их хранения
3. Сильный мастер-пароль для этой программы.
Собственно это программа bitwarden. И я ее супер советую. Из плюсов:
1. Клиент для iOS (встраивается в клавиатуру, как родной менеджер паролей). Для андройда тоже есть
2. Плагин для браузера
3. Автоподстановка логинов\паролей на сайтах
4. Синхронизация всех клиентов
5. Возможность селф хостинга базы.
6. Бесплатная и опенсорсная
7. Есть платный функционал, который практически наверняка вам не понадобится, если вы, даже, не используете такие программы, а если понадобится, то он бесплатен в селфхост версии (которая еще и на расте)).
В общем, я супер кайфую с того, как у меня теперь организовано и всем советую
877
Repost from Data is data
Математик Уильям Госсет работал на пивоварне Гиннеса и занимался там передовым датасайенсом того времени - статистикой. Т.к. сотрудникам строжайше запрещено было публиковаться где бы то ни было, он писал статьи под псевдонимом Студент. Поэтому мы знаем критерий и распределение Стьюдента, а не Госсета.
877
ChatGPT имеет ограничение на длину запроса, который он может обработать. У меня получилось сделать запрос из 7к токенов, что есть ~15 страниц книги. И для меня это проблема, ибо я хочу задавать вопросы о книгах.
Но есть сервис humata.ai, в который можно загрузить pdf и задавать вопросы о содержимом и можно бесплатно грузить 60 страниц! Еще он подсвечивает страницы, где содержится информация из которой он собрал ответ. Удобно
