Daily Dev

Daily Dev

By Artem Ostretsov
Еженедельный подкаст о разработке web сервисов.
Where to listen
Apple Podcasts Logo
Breaker Logo
Google Podcasts Logo
Overcast Logo
Pocket Casts Logo
RadioPublic Logo
Spotify Logo
Currently playing episode

ep016 / SpaceX Demo-2 миссия

Daily Dev

Go to next audioGo to next audio
Go to prev audioGo to prev audio
1x
ep019 / код-ревью, буферизация, тесты в конкурентной среде
- [эффект Даннинга — Крюгера][1]; - немного про код-ревью; - возможные ошибки в concurrency коде; - буферизация; - всегда используйте defer; - тестирование в конкурентной среде (race флаг). [1]: https://ru.wikipedia.org/wiki/%D0%AD%D1%84%D1%84%D0%B5%D0%BA%D1%82_%D0%94%D0%B0%D0%BD%D0%BD%D0%B8%D0%BD%D0%B3%D0%B0_%E2%80%94_%D0%9A%D1%80%D1%8E%D0%B3%D0%B5%D1%80%D0%B0
28:48
July 31, 2020
ep018 / Go race condition, TypeScript, Python
- что такое race condition на примере; - пример приложения, в котором мы ушли от go-рутины за счет инфраструктурного решения на базе kubernetes; - kubernetes SDK для создания своих типов (`kind`); - удобство двух мониторов при разработке frontend web-приложений; - первые впечатления от TypeScript'а; - [react-testing-library][1]; - мысли о том, что стоит попробовать Python (Django) для следующего проекта. [1]: https://github.com/testing-library/react-testing-library
39:06
July 2, 2020
ep017 / Матан для продолжающих
Большинство программистов не используют широко математический аппарат в ежедневной практике. Еще раз поговорили об этом после того как я закончил чтение первой главый [A Programmer's Introduction to Mathematics][1]. Концептуально коснулись проблемы доказательства **существования** и **уникальности** в математическом анализе. Компьютерная эра могла начаться на 50-70 лет раньше. Этого не произошло из-за того, что для существующих научных открытий не смогли найти приложение в создании вычислительных машин.   Бинарный оператор `xor` и его применение. Боря порекомендовал также неплохой [YouTube-канал Eddie Woo][2] для тех, кто хочет вспомнить базовые концепции в математике. [1]: https://pimbook.org/   [2]: https://www.youtube.com/user/misterwootube
37:12
June 15, 2020
ep016 / SpaceX Demo-2 миссия
**Концовка эпизода к сожалению не записалась из-за проблем со связью.** Поговорили о: 1) недавнем запуске Dragon компанией SpaceX: миссия Demo-2; 2) [World's fastest internet speed from a single optical chip][1]; 3) игра по крупному в крупных корпорациях; 4) структура с единственным полем в `errors` package в Golang. [1]: https://www.sciencedaily.com/releases/2020/05/200522095504.htm
27:59
May 29, 2020
ep015 / cloud computing
Три модели ведения IT-бизнеса: * создание своего одного продукта; * саппорт существующего одного продукта; * решение текущих бизнес-задач.     Удвоение рынка облачных вычеслений в ближайшие 2-3 года. В рамках этой темы упомянули Game-as-a-service: PlayStation Now (Sony), Stadia (Google), xCloud (Microsoft), GameFly (ElectronicArts). Для подобных сервисов нужны кластера. Рассматриваю возможный свич в углубление знаний кластерных технологий, например, Kubernetes. Коснулись тем языка программирования Go: * пустых структур для создания set'а через map `map[string]struct{}`; * `io` пакета; * поговорили о маленьком пакете [go-gelf][1]; * и [fsnotify][2]. [1]: https://github.com/Graylog2/go-gelf [2]: https://github.com/fsnotify/fsnotify
47:10
May 22, 2020
ep014 / embedding интерфейсов в Go
embedding интерфейсов в Go - возможность встроить один тип в другой. Самый частый пример в Go - это mutex'ы. Zero value интерфейса - это `nil`. Организация кода в Go-приложении в части интеграции со сторонними сервисами. Впечатления о книге ["A Programmer's Introduction to Mathematics"][1]. Математика, необходимая для Computer Science для тех, кто подзабыл про неё. [1]: https://pimbook.org/
36:58
May 15, 2020
ep013 / MongoDB, BSON, overlay fs
Пару недель назад в сайд-проекте решил попробовать MongoDB. Несколько поделился первыми ощущениями от MongoDB. Коснулись [доклада][1] Айка Саргсяна (Юла) "Крупный проект на одной NoSQL". Обсудили общую тему базы данных для стартапа на начальной стадии. Коснулись хранения данных в MongoDB, [спецификацию BSON][2], join'ы, мигарции. Упомянули отличную книгу [Designing Data-Intensive Applications][3]. ## Overlay fs Неплохая свежая [статья][4] объясняющая как работают docker images на примере overlay fs. Немного про организацию наших проектов: gitlab, registry, CI, k8s. [1]: https://www.youtube.com/watch?v=ZLOFOxsDJIY [2]: http://bsonspec.org/spec.html [3]: https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321 [4]: https://dev.to/napicella/how-are-docker-images-built-a-look-into-the-linux-overlay-file-systems-and-the-oci-specification-175n
42:23
May 8, 2020
ep012 / конфигурирование Go-приложения
Поговорили о конфигурировании Go-приложения. Касались следующих тем: - [12-factor app][1], а конкретно [3ий раздел, посвященный конфигам][2]; - глобальный контекст - хорошо или плохо; когда глобальный контекст плох; - популярные/удобные проекты для конфигурирования:    - https://github.com/spf13/viper;    - https://github.com/plaid/go-envvar; - простое решение по конфигурированию для небольших проектов - функция, заполняющая структуру со значениями по умолчанию из переменных окружения; - [плагин][3] для GoLand для использования `.env`-файла при запуске билда/тестов; - тестирование http-хендлеров; - table-тестирование в интеграционных тестах; - пирамида тестов; Также я поделился первым знакомством с couchbase документной БД: - важная разница community & enterprise версий; - язык запросов N1QL - спинофф ANSI SQL; - [сравнение][4] Couchbase и MongoDB [1]: https://12factor.net/ [2]: https://12factor.net/config [3]: https://plugins.jetbrains.com/plugin/7861-envfile [4]: https://db-engines.com/en/system/Couchbase%3BMongoDB
35:29
April 30, 2020
ep011
Проект loon Обратил внимание на ballon'ы на сайте https://www.flightradar24.com/. Это проект [loon][1] воздушные шары, обеспечивающие интернетом наземных клиентов. Если коротко, то это летающая базовая станция. Дженерики в Golang Первое и важное: [дженерикам в Go быть][2]! В течении первых 24 часов после публикации Go возник вопрос о наличии дженериков. До сих пор это один из top вопросов. Летом 2019 года был опубликован [дизайн-документ дженериков][3] для Go. Определение дженериков: > Generic programming enables the representation of functions and data structures in a generic form, with types factored out. Уже сейчас можно [поиграть с дженериками в Golang][5] с помощью [wasm-go-playground][4]. Уже сейчас можно писать универсальный код для разных типов с помощью: - интерфейсов; - кодогенерации; - приведения типов (`interface{}`). Немного про Дональда Кнута [1]: https://loon.com/ [2]: https://go-review.googlesource.com/c/go/+/187317 [3]: https://go.googlesource.com/proposal/+/4a54a00950b56dd0096482d0edae46969d7432a6/design/go2draft-contracts.md [4]: https://github.com/ccbrown/wasm-go-playground [5]: https://ccbrown.github.io/wasm-go-playground/experimental/generics/#A4Qwxg1iDmCmAEBbEBLAdgKA2A9mgLgE7j7wDOR6chAFACoCU8A3hgJB3wDKla0NTCoSoYAvlnwBPYAh7gINKTPichVWISYBtALp0sAMwCuaMPBplu+efQZMACrFgKmnVm0Kx8RwmnJaAG1g0CwYAWgBGHTFDEzMLeAAqOUhbBxxgARZ2RMsAXnNchi0ALiCQosjo8QxjU3NLZOtUxgcjMgALGgA3EACjBEZstlz4ApBgGTQAExpcgBp4Xv7YBhjauIarG1arYT4stT5hz1ISgoAiC/YDHEJ4AH1F7vhz+GI+BEt3NhQDd688AAhJcLsM2B5AQBqS6La4Q8QQ07wGFLAB0PH2/DWbERpx8flO6yUCAAspIAPIAIwAVrAwKQhEYGcMAHIgRBfXjQdZ1eI4WnwcnUukMpiYqiHbknLwE+ACmlo9mc3mbZDoLLuXr3CjybapYW0+n4HG6yBo+ztLqG0X4ZgXW44C6iU3NCAWq00G3G+1UkCEZ044D7fABEJm90Sg52GJAA=
35:48
April 24, 2020
ep010
Не проследили за балансом микрофонов, поэтому Боря в этом выпуске звучал тише, чем обычно. Приносим извенения за неудобства. Поговорили про логгирование в web-сервисах. - пакет `log` стандартной библиотеки; - написание своих кастомных логеров; - упомянули наше решение [gluent-bit][1], которое мы используем для трансляции логов в Graylog; - [logrus][2] в ~20 раз медленнее [zap][3]; - немного упомянули json-экстрактор Graylog; - уровни логирования: DEBUG, INFO, WARN, ERROR, FATAL; - особенности [zap][3]:    - поддержка уровней логирования;    - sampling для дедупликации потока логов;    - не использует рефлексию и стандартный `json` пакет: работает через `append`;    - `SugaredLogger` и `Logger`;    - нет ротации логов. - ротация логов через [lumberjack][4] - что имеет смысл логировать, а что выносить в мониторинг; - `Reference-Id` для идентификации request-response и связанных операций; - отказ от логирования запросов, не изменяющих состояние системы; - унификация логов. [1]: https://github.com/ostretsov/gluent-bit [2]: https://github.com/sirupsen/logrus [3]: https://github.com/uber-go/zap [4]: https://godoc.org/gopkg.in/natefinch/lumberjack.v2
42:49
April 17, 2020
ep009
В подкасте подняли вопрос о сообщениях об ошибках в API. RFC7807 "Problem details" Этот документ предлагает унифицированное решение по форматированию (схеме) ответа проблемы/ошибки для API-сервисов. Несмотря на то, что документ достаточно свежий (весна 2016) мы едва ли обнаружили для себя удобное решение, которое одновременно будет удобно и для клиента API. RFC предлагает дополнительный Content-Type: application/problem+json. Частичное применение некоторых идей мы нашли в API DHL v4 Обсудили применимость использования Content-Language для последующей локализации. В большинстве наших проектов мы используем английский. Обсудили предложение RFC по использованию в качестве кодов ошибок URI и насколько это удобно использовать клиенту. Рассказали схему ошибки, которую мы используем в своих проектах.
56:04
April 9, 2020
ep008
тестирование unexported методов в Go через создание exported алиаса; создание *_test пакета для решения проблемы циклических импортов в тестах; unicode пакет; тестирование через публичные интерфейсы; преждевременная оптимизация; преждевременная абстракция: функции, классы, интерфейсы, новые протоколы; правило трех; читаемость против преждевременной абстракции; соблюдение уровней абстрации; правило бойскаута;
42:26
April 3, 2020
ep007
чуть-чуть о Google Cloud Spanner - реляционная геораспределенная БД от Google коснулись темы документные базы против реляционных consistency в базах данных дорогие облачные БД от Google научные публикации на google research / google scholar удобные облачные сервисы, которые мы используем регулярно: AWS S3, SES, Google Places API поддерживать самому кластер k8s или нет проекты, в которых "поставили точку" трудности, с которыми мы столкнулись, когда впервые развернули своей k8s кластер история одной проблемы в k8s на hetzner, суть которой мы так и не выяснили возможно стоит подписаться на changelog k8s https://github.com/urfave/cli для создания CLI-приложений на Go http://docopt.org/ ACID вобще и ACID в MongoDB
42:19
March 27, 2020
ep006
Удаленная работа boltdb Встраиваемая key-value база данных. Чем-то напоминает SQLite за исключением того, что это просто key-value. Всего
44:51
March 19, 2020
ep005
Поговорили о: ActiveRecord vs Repository паттерне; pgbouncer; проекты типа аггрегатор и интегратор.
46:49
March 13, 2020
ep004
Подкасть чуть более чем полностью о Go Зависимости в хендлерах Обсудили два способа инжектирования зависимостей в хендлерах: использование глобальных переменных; явная передача зависимостей через арументы фунции-хендлера; использование структуры-контейнера. Много говорили о базе данных в роли зависимости. Вынесение request и response структур в хендлер func Handler(db *storage.DB) gin.HandlerFunc {    type request struct {        //    }    type response struct {        //    }    return func(ctx *gin.Context) {        //    } } Go поощряет написание "скучного" кода Оптимистическое программирование Опубликовано: 05.03.2020 Теги: Go, сервис-контейнер, зависимости, python, оптимистическое программирование
54:25
March 5, 2020
ep003
excelize, упомянутый в прошлом эпизоде удалось за прошедшую неделю применить. В деле показал себя отлично. Не часто заказчик требует обмен данных в XLSX-формате через API. Это был тот редкий случай. Алгоритмы Проходил на coursera курс по алгоритмам от ВШЭ. Среди языков, на которых можно делать submission нет Go, но для мня это неплохой повод попрактиковаться в Python или Rust. Последний мы не используем в проектах, а вот проекты на Python у нас есть. Так вот на каждый язык свои лимиты по рантайму: Язык программирования Лимит времени выполенения, сек C, C++, Rust     1 Java, C#            1.5 Haskell              2 Scala                  3 Ruby, JavaScript, Python      5 Несколько неожиданно, что Scala дали такой лимит. Концепция стресс-тестирования Идея в том, чтобы написать две имплементации и сравнивать выходные значение при одинаковых входных. Чаще применяется для тестирования алгоритмов когда есть медленное, но простое решение и быстрое, но, возможно, с ошибками в реализации. В тестах мы чаще сами придумываем входные данные для тестируемого метода. При стресс-тестировании входные данные генерируются произвольным образом. Стресс-тесты не отменяют необходимости в корнер-кейсах, когда мы тестируем пограничные состояния: отрицательные, одинаковые значение, неверные типы, нулевые значения и т.д. Рейтинг языков программирования от IEEE Графики предварены несколько сомнительной цитатой: Engineers love Python, JavaScript, and Java. Employers, on the other hand, shine their light on Go. Пожалуй действительно любят из этой тройки Python. JavaScript как раз едва ли любят, поэтому и перетягивает на себя популярность TypeScript, добавивший строгости. А Go - это хороший шаг в сторону упрощения кода и он оппонирует Java, C++, C#, Scala. Go в рейтинге IEEE №1. pkg.go.dev вместо godoc.org На главной популярные и рекомендуемые репозитории. В каждом пакете можно посмотреть зависимости и кто использует этот пакет. Другое Обсудили также пару пакетов из x/sync: https://godoc.org/golang.org/x/sync/singleflight https://godoc.org/golang.org/x/sync/errgroup Коротко обсудили алгоритм зайца и черепахи для поиска петли в связанном списке. Вдохновился на некоторое углубление в тему этим видео (каким бы было аниме о программировании).
47:06
February 27, 2020
ep002
tamago Позволяет запускать Go-приложение прямо на процессоре, без операционной системы. Концепция unikernel. Пока поддерживается только их же (f-secure) SoC (Systm-on-Chip) MkII (~150USD). В планах добавить поддержку Raspberry PI Zero (~25USD). Кстати будет упомянуть книгу Code: The Hidden Language of Computer Hardware and Software by Charles Petzold. Основы изложены лучше, чем вам их дадут в университете. excelize Просто упомяну библиотеку для чтения и записи XLSX-файлов в Go: Excelize is a library written in pure Go providing a set of functions that allow you to write to and read from XLSX files. Supports reading and writing XLSX file generated by Microsoft Excel™ 2007 and later. Supports saving a file without losing original charts of XLSX. This library needs Go version 1.10 or later. Go vs Python Статья о использовании Python для небольших скриптов. Полностью поддерживаю автора. Среди прочего автор упомянул сложность идентификации версии Go-программы: имеешь дело с бинарным файлом. В Go можно использовать ldflags: $ go build -ldflags="-X 'main.Version=v1.0.0'" Отличная вводная статья на DigitalOcean про использование go build для модификации значений переменных пакета. Также к недостаткам Go автор отнес отсутсвие REPL, но он есть. Применение NLTK для опредления HC/HTC Обсудили популярную библиотеку NLTK, написанную на Python, для решения нашей одной из повседневных задач для определения HTC-кода посылки по её описанию для таможни в США.
40:16
February 20, 2020
ep001
Первый пилотный подкаст. Борис и я записали тестовый эпизод и коснулись zen Golang, поговорили немного о Rust, глянули Diesel ORM и плохо настроили звук.
40:14
February 14, 2020