В процессе написание текста для следующих выпусков подкаста возник неожиданный вопрос.
Как лучше обращаться к слушателю?
Как лучше обращаться к слушателю?
Anonymous Poll
51%
На "ты" (представь себе такое, сколько у тебя в команде)
12%
На "Вы" (представьте себе такое, сколько у Вас в команде)
33%
На "вы", как к аудитории (не вывез придумать пример, где будут отличия от уважительного "Вы")
4%
Есть ещё вариант
This media is not supported in your browser
VIEW IN TELEGRAM
У меня две претензии:
- Почему гугл решил не писать "Day 1" и "Day 2" в локальной таймзоне? Че это за прикол.
- Имя докладчика? Неее, зачем вообще такое надо.
- Почему гугл решил не писать "Day 1" и "Day 2" в локальной таймзоне? Че это за прикол.
- Имя докладчика? Неее, зачем вообще такое надо.
Сейчас немного постримлю livecoding.
Буду подключать аутентификацию через accesso к cardbox.
https://youtu.be/ffRthDqp1sI
Буду подключать аутентификацию через accesso к cardbox.
https://youtu.be/ffRthDqp1sI
YouTube
[LiveCoding] #3 — Внедрение OAuth2 в Cardbox
Начнем прикручивать аутентификацию через accesso на Rust, Actix-Web
На всякий случай выложу ссылочки.
Подкаст:
go.sova.dev/podcast/vk
go.sova.dev/podcast/apple
go.sova.dev/podcast/google
go.sova.dev/podcast/yandex
go.sova.dev/podcast/soundcloud
Youtube:
youtube.com/sergeysova
Подкаст:
go.sova.dev/podcast/vk
go.sova.dev/podcast/apple
go.sova.dev/podcast/google
go.sova.dev/podcast/yandex
go.sova.dev/podcast/soundcloud
Youtube:
youtube.com/sergeysova
Vk
Listen to «Сова вещает» online for free | VK
Делюсь опытом Frontend разработки, размышляю о будущем вместе с Rust и пытаюсь не потонуть в стремительном потоке новых технологий
LiveCoding #2 уже на Youtube
Я покрываю тестами страницу login в Accesso, стараюсь объяснять что и зачем делаю, попутно решаю возникающие проблемы.
В видео есть содержание, так что можно сразу прыгнуть к итогам, я рассказываю к чему пришел за этот сеанс разработки.
https://youtu.be/Ozg6mV8Grlw
Я покрываю тестами страницу login в Accesso, стараюсь объяснять что и зачем делаю, попутно решаю возникающие проблемы.
В видео есть содержание, так что можно сразу прыгнуть к итогам, я рассказываю к чему пришел за этот сеанс разработки.
https://youtu.be/Ozg6mV8Grlw
YouTube
[LiveCoding] #4 — Тестирование React и Effector
В этом видео я покрываю тестами страницу логина и попутно разбираюсь с возникающими проблемами.
Содержание:
00:00 — Введение
01:03 — Разделение страницы и модели
06:52 — Начинаю писать тесты
11:45 — bus в index.ts
15:50 — Контракты модели и страницы
24:18…
Содержание:
00:00 — Введение
01:03 — Разделение страницы и модели
06:52 — Начинаю писать тесты
11:45 — bus в index.ts
15:50 — Контракты модели и страницы
24:18…
Сколько у вас лет трудового стажа?
Anonymous Poll
7%
Нет стажа
7%
До года
24%
До трех лет
25%
До пяти лет
14%
До семи лет
8%
До девяти лет
15%
Больше девяти лет
Второй Talkstream!
Обсудили Server-push, performance, загрузку данных на фронтенде и менеджеры состояний
https://youtu.be/iC_uJ2XYUdM
Обсудили Server-push, performance, загрузку данных на фронтенде и менеджеры состояний
https://youtu.be/iC_uJ2XYUdM
YouTube
[TalkStream] #2 — Server-push, performance, загрузка данных и state manager
00:00 — Ждём участников
3:25 — Обсуждаем
3:25 — Обсуждаем
Сегодня отмечается католическое рождество. Этот праздник вызывает у меня сильнейший прилив ностальгии. В связи с этим мы подготовили рождественский выпуск подкаста, в котором я подвожу итоги 2020 года, вспоминаю все интересные события и новости.
Послушать можно на всех платформах:
- https://podcast.sova.dev
- https://go.sova.dev/podcast/soundcloud
- https://go.sova.dev/podcast/vk
- https://go.sova.dev/podcast/apple
- https://go.sova.dev/podcast/yandex
Мне очень важно узнать ваши ощущения от прошедшего года, какие эмоции мне удалось вызвать рассказывая о собственных впечатлениях? Пишите в чат или в личные сообщения.
Меня можно поддержать в ВК и на Patreon, а в благодарность почитать полный текст выпуска:
- patreon.com/sergeysova
- vk.com/sovadev
Послушать можно на всех платформах:
- https://podcast.sova.dev
- https://go.sova.dev/podcast/soundcloud
- https://go.sova.dev/podcast/vk
- https://go.sova.dev/podcast/apple
- https://go.sova.dev/podcast/yandex
Мне очень важно узнать ваши ощущения от прошедшего года, какие эмоции мне удалось вызвать рассказывая о собственных впечатлениях? Пишите в чат или в личные сообщения.
Меня можно поддержать в ВК и на Patreon, а в благодарность почитать полный текст выпуска:
- patreon.com/sergeysova
- vk.com/sovadev
Под куполом
Сугубо субъективный взгляд на вещи в формате ночных посиделок
Уже совсем скоро наступит новый 2021 год!
Хочется написать много красивых слов, но я сомневаюсь, что это будет искренне.
Хочется пожелать, чтобы новый год стал проще. Не хочу через полгода вспоминать 2020 год добрым словом, потому что стало хуже!
Пожелайте близким людям здоровья!
Хочется написать много красивых слов, но я сомневаюсь, что это будет искренне.
Хочется пожелать, чтобы новый год стал проще. Не хочу через полгода вспоминать 2020 год добрым словом, потому что стало хуже!
Пожелайте близким людям здоровья!
На выходных провел несколько часов погрузившись в Rust.
В свободное время стараюсь изучать чужие open-source проекты, в этот раз я изучал lemmy — распределенный аналог Reddit.
Открыл для себя не самую хорошую архитектуру, но при этом нашел несколько интересных крейтов. Самым полезным для меня оказался config — парсер сложных иерархичных конфигов в структуры Rust.
Задача: у меня есть несколько больших сервисов в виде апишек разного уровня: public, internal, private, admin, у них у всех равный доступ к БД, но некоторые находятся в разных подсетях и хост базы отличается, а также сервисы имеют разные настройки http-сервера, плюс к этому, нужно легко настраивать каждый сервис для локальной разработки.
Раньше: использовался dotenv и длинный список env переменных, при старте приходилось установить весь список переменных, либо вынуждать разработчика клонировать .env.sample и править под себя.
Сейчас: я создаю базовый конфиг в директории config сразу для всех апишек, ещё один базовый конфиг для разных окружений и наконец по ещё одному конфигу для каждой апишки. Могу создать отдельный конфиг для апишки в определенном окружении.
Выглядит так:
Конфиги не перетирают друг друга, а мержатся с учетом структуры(не проверял на массивах). Крейт config поддерживает сразу несколько форматов(toml, hjson, json, ini, yaml), можно писать в удобном формате или даже в разных.
Помимо этого я могу определить локальные конфиги, которые в .gitignore и не попадут в репозиторий. Это удобно, когда нужно запустить сразу все апишки без докера на разных портах, или дать им разные параметры http-сервера, чтобы поймать ошибку. Получается вот такое:
При этом не обязательно создавать все конфиги из списка, достаточно иметь config/default.toml и любой конфиг из списка по необходимости.
Реализовать такое оказалось делом 10 строк. Поглядеть можно здесь. Большинство строк файла — определение структур для конфига, в методе Settings::new загружаются конфиги в определенном порядке.
И конечно же, можно любой параметр конфига переопределить через переменные окружения. Например,
На Youtube есть канал по Rust, есть видео про Actix, который я использую для бекенда Accesso.
В свободное время стараюсь изучать чужие open-source проекты, в этот раз я изучал lemmy — распределенный аналог Reddit.
Открыл для себя не самую хорошую архитектуру, но при этом нашел несколько интересных крейтов. Самым полезным для меня оказался config — парсер сложных иерархичных конфигов в структуры Rust.
Задача: у меня есть несколько больших сервисов в виде апишек разного уровня: public, internal, private, admin, у них у всех равный доступ к БД, но некоторые находятся в разных подсетях и хост базы отличается, а также сервисы имеют разные настройки http-сервера, плюс к этому, нужно легко настраивать каждый сервис для локальной разработки.
Раньше: использовался dotenv и длинный список env переменных, при старте приходилось установить весь список переменных, либо вынуждать разработчика клонировать .env.sample и править под себя.
Сейчас: я создаю базовый конфиг в директории config сразу для всех апишек, ещё один базовый конфиг для разных окружений и наконец по ещё одному конфигу для каждой апишки. Могу создать отдельный конфиг для апишки в определенном окружении.
Выглядит так:
config/default.toml — базовый конфиг для всехconfig/default-development.toml — конфиг для всех апишек во время разработкиconfig/internal.toml — конфиг для внутренней апишкиconfig/public.toml — для публичной апишкиconfig/private-production.toml — для приватной апи в продакшенеКонфиги не перетирают друг друга, а мержатся с учетом структуры(не проверял на массивах). Крейт config поддерживает сразу несколько форматов(toml, hjson, json, ini, yaml), можно писать в удобном формате или даже в разных.
Помимо этого я могу определить локальные конфиги, которые в .gitignore и не попадут в репозиторий. Это удобно, когда нужно запустить сразу все апишки без докера на разных портах, или дать им разные параметры http-сервера, чтобы поймать ошибку. Получается вот такое:
.config.toml
.config-production.toml
.config-internal.toml
.config-internal-production.tomlПри этом не обязательно создавать все конфиги из списка, достаточно иметь config/default.toml и любой конфиг из списка по необходимости.
Реализовать такое оказалось делом 10 строк. Поглядеть можно здесь. Большинство строк файла — определение структур для конфига, в методе Settings::new загружаются конфиги в определенном порядке.
И конечно же, можно любой параметр конфига переопределить через переменные окружения. Например,
server.keep_alive устанавливается через переменную ACCESSO_SERVER__KEEP_ALIVE.На Youtube есть канал по Rust, есть видео про Actix, который я использую для бекенда Accesso.
Я использую парную тему Bluloco для iTerm2 и VSCode.
Для VSCode тема есть в Extensions Marketplace. А Color presets для iTerm скину в комментарии
Для VSCode тема есть в Extensions Marketplace. А Color presets для iTerm скину в комментарии
This media is not supported in your browser
VIEW IN TELEGRAM
Казалось бы, NPM
Но прям кривущий интерфейс
Но прям кривущий интерфейс
Сова пишет…
Хотелось бы написать, что я на этом остановился, но нет. Писать пачку forward в index.tsx оказалось несколько утомительно. К тому же, пришлось группировать forward по ивентам и сторам, чтобы случайно не перепутать порядок: сторы — из модели в страницу ивенты…
Продолжаю упрощать соединение модели и страницы.
Как и обещал показываю использование функции contract. Фактически функция выполняет ту же роль, что и bus описанный выше, но при этом гораздо проще и короче.
Работает так: берем всё что есть в page, фильтруем сущности эффектора и назначаем им соответствия из model.
Я пока не уверен, что лучше: брать page как основу контракта или model. На что это влияет?
Как видим на порядок применения prepend в событиях и map в сторах, а также на имена пропертей. В случае page как основы, назначаются сущности из model в имена из page.
Но если разницы в именах и типах нет, то выглядеть будет так:
Как и обещал показываю использование функции contract. Фактически функция выполняет ту же роль, что и bus описанный выше, но при этом гораздо проще и короче.
Работает так: берем всё что есть в page, фильтруем сущности эффектора и назначаем им соответствия из model.
Я пока не уверен, что лучше: брать page как основу контракта или model. На что это влияет?
Как видим на порядок применения prepend в событиях и map в сторах, а также на имена пропертей. В случае page как основы, назначаются сущности из model в имена из page.
Но если разницы в именах и типах нет, то выглядеть будет так:
contract({ page, model })